Repository: aws/random-cut-forest-by-aws Branch: main Commit: 2486241c914d Files: 391 Total size: 8.9 MB Directory structure: gitextract_acgcjc4v/ ├── .github/ │ ├── draft-release-notes-config.yml │ └── workflows/ │ ├── draft-release-notes-workflow.yml │ ├── maven-release.yml │ ├── maven-snapshot.yml │ ├── maven.yml │ └── rust.yml ├── .gitignore ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── Java/ │ ├── README.md │ ├── RELEASING.md │ ├── benchmark/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ └── java/ │ │ └── com/ │ │ └── amazon/ │ │ └── randomcutforest/ │ │ ├── RandomCutForestBenchmark.java │ │ ├── RandomCutForestShingledBenchmark.java │ │ ├── StateMapperBenchmark.java │ │ ├── StateMapperShingledBenchmark.java │ │ └── profilers/ │ │ ├── ObjectGraphSizeProfiler.java │ │ └── OutputSizeProfiler.java │ ├── core/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ └── java/ │ │ │ └── com/ │ │ │ └── amazon/ │ │ │ └── randomcutforest/ │ │ │ ├── CommonUtils.java │ │ │ ├── ComponentList.java │ │ │ ├── IComponentModel.java │ │ │ ├── IMultiVisitorFactory.java │ │ │ ├── IVisitorFactory.java │ │ │ ├── MultiVisitor.java │ │ │ ├── MultiVisitorFactory.java │ │ │ ├── PredictiveRandomCutForest.java │ │ │ ├── RandomCutForest.java │ │ │ ├── Visitor.java │ │ │ ├── VisitorFactory.java │ │ │ ├── anomalydetection/ │ │ │ │ ├── AbstractAttributionVisitor.java │ │ │ │ ├── AbstractScalarScoreVisitor.java │ │ │ │ ├── AnomalyAttributionVisitor.java │ │ │ │ ├── AnomalyScoreVisitor.java │ │ │ │ ├── DynamicAttributionVisitor.java │ │ │ │ ├── DynamicScoreVisitor.java │ │ │ │ ├── SimulatedTransductiveScalarScoreVisitor.java │ │ │ │ └── TransductiveScalarScoreVisitor.java │ │ │ ├── config/ │ │ │ │ ├── Config.java │ │ │ │ ├── ForestMode.java │ │ │ │ ├── IDynamicConfig.java │ │ │ │ ├── ImputationMethod.java │ │ │ │ ├── Precision.java │ │ │ │ └── TransformMethod.java │ │ │ ├── executor/ │ │ │ │ ├── AbstractForestTraversalExecutor.java │ │ │ │ ├── AbstractForestUpdateExecutor.java │ │ │ │ ├── AbstractUpdateCoordinator.java │ │ │ │ ├── IStateCoordinator.java │ │ │ │ ├── ITraversable.java │ │ │ │ ├── IUpdatable.java │ │ │ │ ├── ParallelForestTraversalExecutor.java │ │ │ │ ├── ParallelForestUpdateExecutor.java │ │ │ │ ├── PointStoreCoordinator.java │ │ │ │ ├── SamplerPlusTree.java │ │ │ │ ├── SequentialForestTraversalExecutor.java │ │ │ │ ├── SequentialForestUpdateExecutor.java │ │ │ │ └── UpdateResult.java │ │ │ ├── imputation/ │ │ │ │ ├── ConditionalSampleSummarizer.java │ │ │ │ └── ImputeVisitor.java │ │ │ ├── inputtypes/ │ │ │ │ └── Point.java │ │ │ ├── inspect/ │ │ │ │ └── NearNeighborVisitor.java │ │ │ ├── interpolation/ │ │ │ │ └── SimpleInterpolationVisitor.java │ │ │ ├── preprocessor/ │ │ │ │ ├── IPreprocessor.java │ │ │ │ ├── ImputePreprocessor.java │ │ │ │ ├── InitialSegmentPreprocessor.java │ │ │ │ ├── Preprocessor.java │ │ │ │ └── transform/ │ │ │ │ ├── DifferenceTransformer.java │ │ │ │ ├── ITransformer.java │ │ │ │ ├── NormalizedDifferenceTransformer.java │ │ │ │ ├── NormalizedTransformer.java │ │ │ │ ├── SubtractMATransformer.java │ │ │ │ └── WeightedTransformer.java │ │ │ ├── returntypes/ │ │ │ │ ├── ConditionalTreeSample.java │ │ │ │ ├── ConvergingAccumulator.java │ │ │ │ ├── DensityOutput.java │ │ │ │ ├── DiVector.java │ │ │ │ ├── InterpolationMeasure.java │ │ │ │ ├── Neighbor.java │ │ │ │ ├── OneSidedConvergingDiVectorAccumulator.java │ │ │ │ ├── OneSidedConvergingDoubleAccumulator.java │ │ │ │ ├── OneSidedStDevAccumulator.java │ │ │ │ ├── RangeVector.java │ │ │ │ ├── SampleSummary.java │ │ │ │ └── TimedRangeVector.java │ │ │ ├── runner/ │ │ │ │ ├── AnomalyAttributionRunner.java │ │ │ │ ├── AnomalyScoreRunner.java │ │ │ │ ├── ArgumentParser.java │ │ │ │ ├── ImputeRunner.java │ │ │ │ ├── LineTransformer.java │ │ │ │ ├── SimpleDensityRunner.java │ │ │ │ ├── SimpleRunner.java │ │ │ │ └── UpdateOnlyTransformer.java │ │ │ ├── sampler/ │ │ │ │ ├── AbstractStreamSampler.java │ │ │ │ ├── AcceptPointState.java │ │ │ │ ├── CompactSampler.java │ │ │ │ ├── ISampled.java │ │ │ │ ├── IStreamSampler.java │ │ │ │ └── Weighted.java │ │ │ ├── state/ │ │ │ │ ├── ExecutionContext.java │ │ │ │ ├── IContextualStateMapper.java │ │ │ │ ├── IStateMapper.java │ │ │ │ ├── PredictiveRandomCutForestMapper.java │ │ │ │ ├── PredictiveRandomCutForestState.java │ │ │ │ ├── RandomCutForestMapper.java │ │ │ │ ├── RandomCutForestState.java │ │ │ │ ├── Version.java │ │ │ │ ├── preprocessor/ │ │ │ │ │ ├── PreprocessorMapper.java │ │ │ │ │ └── PreprocessorState.java │ │ │ │ ├── returntypes/ │ │ │ │ │ ├── DiVectorMapper.java │ │ │ │ │ └── DiVectorState.java │ │ │ │ ├── sampler/ │ │ │ │ │ ├── CompactSamplerMapper.java │ │ │ │ │ └── CompactSamplerState.java │ │ │ │ ├── statistics/ │ │ │ │ │ ├── DeviationMapper.java │ │ │ │ │ └── DeviationState.java │ │ │ │ ├── store/ │ │ │ │ │ ├── NodeStoreState.java │ │ │ │ │ ├── PointStoreMapper.java │ │ │ │ │ └── PointStoreState.java │ │ │ │ └── tree/ │ │ │ │ ├── AbstractNodeStoreMapper.java │ │ │ │ ├── CompactRandomCutTreeContext.java │ │ │ │ ├── CompactRandomCutTreeState.java │ │ │ │ └── RandomCutTreeMapper.java │ │ │ ├── statistics/ │ │ │ │ └── Deviation.java │ │ │ ├── store/ │ │ │ │ ├── IPointStore.java │ │ │ │ ├── IPointStoreView.java │ │ │ │ ├── IndexIntervalManager.java │ │ │ │ ├── PointStore.java │ │ │ │ ├── PointStoreLarge.java │ │ │ │ ├── PointStoreSmall.java │ │ │ │ └── StreamSampler.java │ │ │ ├── summarization/ │ │ │ │ ├── Center.java │ │ │ │ ├── GenericMultiCenter.java │ │ │ │ ├── ICluster.java │ │ │ │ ├── MultiCenter.java │ │ │ │ └── Summarizer.java │ │ │ ├── tree/ │ │ │ │ ├── AbstractNodeStore.java │ │ │ │ ├── BoundingBox.java │ │ │ │ ├── Cut.java │ │ │ │ ├── HyperTree.java │ │ │ │ ├── IBoundingBoxView.java │ │ │ │ ├── INodeView.java │ │ │ │ ├── ITree.java │ │ │ │ ├── NodeStoreLarge.java │ │ │ │ ├── NodeStoreMedium.java │ │ │ │ ├── NodeStoreSmall.java │ │ │ │ ├── NodeView.java │ │ │ │ └── RandomCutTree.java │ │ │ └── util/ │ │ │ ├── ArrayPacking.java │ │ │ ├── ArrayUtils.java │ │ │ ├── ShingleBuilder.java │ │ │ └── Weighted.java │ │ └── test/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── amazon/ │ │ │ └── randomcutforest/ │ │ │ ├── AttributionExamplesFunctionalTest.java │ │ │ ├── CPUTest.java │ │ │ ├── ConditionalFieldTest.java │ │ │ ├── DynamicPointSetFunctionalTest.java │ │ │ ├── ForecastTest.java │ │ │ ├── MultiCenterTest.java │ │ │ ├── PredictiveRandomCutForestTest.java │ │ │ ├── RandomCutForestBuilderTest.java │ │ │ ├── RandomCutForestConsistencyFunctionalTest.java │ │ │ ├── RandomCutForestFunctionalTest.java │ │ │ ├── RandomCutForestShingledFunctionalTest.java │ │ │ ├── RandomCutForestTest.java │ │ │ ├── SampleSummaryTest.java │ │ │ ├── TestUtils.java │ │ │ ├── anomalydetection/ │ │ │ │ ├── AnomalyAttributionVisitorTest.java │ │ │ │ ├── AnomalyScoreVisitorTest.java │ │ │ │ ├── DynamicAttributionVisitorTest.java │ │ │ │ └── DynamicScoreVisitorTest.java │ │ │ ├── executor/ │ │ │ │ ├── ForestTraversalExecutorTest.java │ │ │ │ ├── ForestUpdateExecutorTest.java │ │ │ │ ├── PointStoreCoordinatorTest.java │ │ │ │ ├── SamplerPlusTreeTest.java │ │ │ │ └── UpdateResultTest.java │ │ │ ├── imputation/ │ │ │ │ ├── ConditionalSampleSummarizerTest.java │ │ │ │ └── ImputeVisitorTest.java │ │ │ ├── inspect/ │ │ │ │ └── NearNeighborVisitorTest.java │ │ │ ├── interpolation/ │ │ │ │ └── SimpleInterpolationVisitorTest.java │ │ │ ├── preprocessor/ │ │ │ │ ├── PreprocessorTest.java │ │ │ │ └── transform/ │ │ │ │ └── WeightedTransformerTest.java │ │ │ ├── returntypes/ │ │ │ │ ├── DensityOutputTest.java │ │ │ │ ├── DiVectorTest.java │ │ │ │ ├── InterpolationMeasureTest.java │ │ │ │ ├── NeighborTest.java │ │ │ │ ├── OneSidedConvergingDiVectorTest.java │ │ │ │ ├── OneSidedConvergingDoubleAccumulatorTest.java │ │ │ │ ├── RangeVectorTest.java │ │ │ │ ├── SampleSummaryTest.java │ │ │ │ └── TimedRangeVectorTest.java │ │ │ ├── runner/ │ │ │ │ ├── AnomalyAttributionRunnerTest.java │ │ │ │ ├── AnomalyScoreRunnerTest.java │ │ │ │ ├── ArgumentParserTest.java │ │ │ │ ├── ImputeRunnerTest.java │ │ │ │ ├── SimpleDensityRunnerTest.java │ │ │ │ └── UpdateOnlyTransformerTest.java │ │ │ ├── sampler/ │ │ │ │ └── CompactSamplerTest.java │ │ │ ├── state/ │ │ │ │ ├── RandomCutForestMapperTest.java │ │ │ │ ├── V2PreProcessorJsonResource.java │ │ │ │ ├── V2RCFJsonResource.java │ │ │ │ ├── sampler/ │ │ │ │ │ └── CompactSamplerMapperTest.java │ │ │ │ └── store/ │ │ │ │ └── PointStoreMapperTest.java │ │ │ ├── statistics/ │ │ │ │ └── StatisticsTest.java │ │ │ ├── store/ │ │ │ │ ├── PointStoreTest.java │ │ │ │ └── StreamSamplerTest.java │ │ │ ├── tree/ │ │ │ │ ├── BoundingBoxTest.java │ │ │ │ ├── BoxCacheTest.java │ │ │ │ ├── CutTest.java │ │ │ │ ├── HyperTreeTest.java │ │ │ │ └── RandomCutTreeTest.java │ │ │ └── util/ │ │ │ ├── ArrayPackingTest.java │ │ │ ├── ArrayUtilsTest.java │ │ │ ├── ShingleBuilderTest.java │ │ │ └── WeightedTest.java │ │ └── resources/ │ │ └── com/ │ │ └── amazon/ │ │ └── randomcutforest/ │ │ └── state/ │ │ ├── Preprocessor_1.json │ │ ├── Preprocessor_2.json │ │ ├── Preprocessor_3.json │ │ ├── state_1.json │ │ ├── state_2.json │ │ └── state_3.json │ ├── examples/ │ │ ├── pom.xml │ │ └── src/ │ │ └── main/ │ │ └── java/ │ │ └── com/ │ │ └── amazon/ │ │ └── randomcutforest/ │ │ └── examples/ │ │ ├── Example.java │ │ ├── Main.java │ │ ├── dynamicconfiguration/ │ │ │ ├── DynamicSampling.java │ │ │ └── DynamicThroughput.java │ │ ├── dynamicinference/ │ │ │ ├── ConditionalPredictive.java │ │ │ ├── DynamicDensity.java │ │ │ └── DynamicNearNeighbor.java │ │ ├── parkservices/ │ │ │ ├── ForecastWithLimits.java │ │ │ ├── LowNoisePeriodic.java │ │ │ ├── NumericGLADexample.java │ │ │ ├── RCFCasterExample.java │ │ │ ├── ScoringStrategyExample.java │ │ │ ├── SequentialAnomalyExample.java │ │ │ ├── SequentialForecastExample.java │ │ │ ├── StringGLADexample.java │ │ │ ├── Thresholded1DGaussianMix.java │ │ │ ├── ThresholdedForecast.java │ │ │ ├── ThresholdedImpute.java │ │ │ ├── ThresholdedInternalShinglingExample.java │ │ │ ├── ThresholdedMultiDimensionalExample.java │ │ │ ├── ThresholdedPredictive.java │ │ │ ├── ThresholdedRCFJsonExample.java │ │ │ └── ThresholdedTime.java │ │ ├── serialization/ │ │ │ ├── JsonExample.java │ │ │ ├── ObjectStreamExample.java │ │ │ ├── ProtostuffExample.java │ │ │ ├── ProtostuffExampleWithDynamicLambda.java │ │ │ └── ProtostuffExampleWithShingles.java │ │ └── summarization/ │ │ ├── DynamicSummarization.java │ │ ├── RCFMultiSummarizeExample.java │ │ ├── RCFStringSummarizeExample.java │ │ └── RCFSummarizeExample.java │ ├── findbugs-filters.xml │ ├── license-header │ ├── lombok.config │ ├── parkservices/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ └── java/ │ │ │ └── com/ │ │ │ └── amazon/ │ │ │ └── randomcutforest/ │ │ │ └── parkservices/ │ │ │ ├── AnomalyDescriptor.java │ │ │ ├── ForecastDescriptor.java │ │ │ ├── GlobalLocalAnomalyDetector.java │ │ │ ├── PredictorCorrector.java │ │ │ ├── RCFCaster.java │ │ │ ├── SequentialAnalysis.java │ │ │ ├── ThresholdedRandomCutForest.java │ │ │ ├── calibration/ │ │ │ │ └── ErrorHandler.java │ │ │ ├── config/ │ │ │ │ ├── Calibration.java │ │ │ │ ├── CorrectionMode.java │ │ │ │ └── ScoringStrategy.java │ │ │ ├── returntypes/ │ │ │ │ ├── AnalysisDescriptor.java │ │ │ │ ├── GenericAnomalyDescriptor.java │ │ │ │ └── RCFComputeDescriptor.java │ │ │ ├── state/ │ │ │ │ ├── RCFCasterMapper.java │ │ │ │ ├── RCFCasterState.java │ │ │ │ ├── ThresholdedRandomCutForestMapper.java │ │ │ │ ├── ThresholdedRandomCutForestState.java │ │ │ │ ├── errorhandler/ │ │ │ │ │ ├── ErrorHandlerMapper.java │ │ │ │ │ └── ErrorHandlerState.java │ │ │ │ ├── predictorcorrector/ │ │ │ │ │ ├── PredictorCorrectorMapper.java │ │ │ │ │ └── PredictorCorrectorState.java │ │ │ │ ├── returntypes/ │ │ │ │ │ ├── ComputeDescriptorMapper.java │ │ │ │ │ └── ComputeDescriptorState.java │ │ │ │ └── threshold/ │ │ │ │ ├── BasicThresholderMapper.java │ │ │ │ └── BasicThresholderState.java │ │ │ └── threshold/ │ │ │ └── BasicThresholder.java │ │ └── test/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── amazon/ │ │ │ └── randomcutforest/ │ │ │ └── parkservices/ │ │ │ ├── AnomalyDescriptorTest.java │ │ │ ├── ConsistencyTest.java │ │ │ ├── DescriptorTest.java │ │ │ ├── ForecastTest.java │ │ │ ├── IgnoreTest.java │ │ │ ├── MissingValueTest.java │ │ │ ├── PredictorCorrectorTest.java │ │ │ ├── RCFCasterTest.java │ │ │ ├── SequentialAnalysisTest.java │ │ │ ├── TestGlobalLocalAnomalyDetector.java │ │ │ ├── ThresholdedRandomCutForestTest.java │ │ │ ├── TransformTest.java │ │ │ ├── calibration/ │ │ │ │ └── ErrorHandlerTest.java │ │ │ ├── state/ │ │ │ │ ├── RCFCasterMapperTest.java │ │ │ │ ├── ThresholdedRandomCutForestMapperTest.java │ │ │ │ ├── V2TRCFByteBase64Resource.java │ │ │ │ ├── V2TRCFJsonResource.java │ │ │ │ └── V2TRCFToV3StateConverterTest.java │ │ │ └── threshold/ │ │ │ └── BasicThresholderTest.java │ │ └── resources/ │ │ └── com/ │ │ └── amazon/ │ │ └── randomcutforest/ │ │ └── parkservices/ │ │ └── state/ │ │ ├── byte_base64_1.txt │ │ ├── byte_base64_2.txt │ │ ├── state_1.json │ │ └── state_2.json │ ├── pom.xml │ ├── serialization/ │ │ ├── pom.xml │ │ └── src/ │ │ ├── main/ │ │ │ └── java/ │ │ │ └── com/ │ │ │ └── amazon/ │ │ │ └── randomcutforest/ │ │ │ └── serialize/ │ │ │ └── json/ │ │ │ ├── v1/ │ │ │ │ ├── V1JsonToV3StateConverter.java │ │ │ │ └── V1SerializedRandomCutForest.java │ │ │ └── v2/ │ │ │ └── V2StateToV3ForestConverter.java │ │ └── test/ │ │ ├── java/ │ │ │ └── com/ │ │ │ └── amazon/ │ │ │ └── randomcutforest/ │ │ │ └── serialize/ │ │ │ └── json/ │ │ │ └── v1/ │ │ │ ├── V1JsonResource.java │ │ │ └── V1JsonToV3StateConverterTest.java │ │ └── resources/ │ │ └── com/ │ │ └── amazon/ │ │ └── randomcutforest/ │ │ └── serialize/ │ │ └── json/ │ │ └── v1/ │ │ ├── forest_1.json │ │ └── forest_2.json │ ├── spotless-eclipse.xml │ └── testutils/ │ ├── pom.xml │ └── src/ │ └── main/ │ └── java/ │ └── com/ │ └── amazon/ │ └── randomcutforest/ │ └── testutils/ │ ├── ExampleDataSets.java │ ├── MultiDimDataWithKey.java │ ├── NormalMixtureTestData.java │ ├── ShingledData.java │ └── ShingledMultiDimDataWithKeys.java ├── LICENSE ├── NOTICE ├── README.md ├── Rust/ │ ├── .gitignore │ ├── Cargo.toml │ ├── README.md │ ├── rustfmt.toml │ ├── src/ │ │ ├── common/ │ │ │ ├── cluster.rs │ │ │ ├── conditionalfieldsummarizer.rs │ │ │ ├── descriptor.rs │ │ │ ├── deviation.rs │ │ │ ├── directionaldensity.rs │ │ │ ├── divector.rs │ │ │ ├── intervalstoremanager.rs │ │ │ ├── mod.rs │ │ │ ├── multidimdatawithkey.rs │ │ │ ├── rangevector.rs │ │ │ └── samplesummary.rs │ │ ├── errors.rs │ │ ├── example.rs │ │ ├── glad.rs │ │ ├── lib.rs │ │ ├── pointstore.rs │ │ ├── rcf.rs │ │ ├── samplerplustree/ │ │ │ ├── boundingbox.rs │ │ │ ├── cut.rs │ │ │ ├── mod.rs │ │ │ ├── nodestore.rs │ │ │ ├── nodeview.rs │ │ │ ├── randomcuttree.rs │ │ │ ├── sampler.rs │ │ │ └── samplerplustree.rs │ │ ├── trcf/ │ │ │ ├── basicthresholder.rs │ │ │ ├── basictrcf.rs │ │ │ ├── errorhandler.rs │ │ │ ├── mod.rs │ │ │ ├── multitrcf.rs │ │ │ ├── predictorcorrector.rs │ │ │ ├── preprocessor.rs │ │ │ ├── rcfcaster.rs │ │ │ ├── transformer.rs │ │ │ └── types.rs │ │ ├── types.rs │ │ ├── util.rs │ │ └── visitor/ │ │ ├── attributionvisitor.rs │ │ ├── imputevisitor.rs │ │ ├── interpolationvisitor.rs │ │ ├── mod.rs │ │ ├── scalarscorevisitor.rs │ │ └── visitor.rs │ └── tests/ │ ├── anomalydetectionattributionupdate.rs │ ├── anomalydetectionimputescoreupdate.rs │ ├── anomalydetectionscoreupdate.rs │ ├── basicrcftest.rs │ ├── basictrcftest.rs │ ├── clustertest.rs │ ├── dynamicdensitytest.rs │ ├── gladtest.rs │ ├── imputedifferentperiod.rs │ ├── imputesameperiod.rs │ ├── multitrcftest.rs │ └── samplesummarytest.rs ├── THIRD-PARTY ├── example-data/ │ └── rcf-paper.csv └── python_rcf_wrapper/ ├── README.md ├── __init__.py ├── lib/ │ ├── randomcutforest-core-4.0.0-SNAPSHOT.jar │ └── randomcutforest-parkservices-4.0.0-SNAPSHOT.jar ├── rcf_model.py └── trcf_model.py ================================================ FILE CONTENTS ================================================ ================================================ FILE: .github/draft-release-notes-config.yml ================================================ # The overall template of the release notes template: | $CHANGES # Setting the formatting and sorting for the release notes body name-template: Version (set version here) change-template: "* $TITLE ([#$NUMBER]($URL))" sort-by: merged_at sort-direction: ascending replacers: - search: "##" replace: "###" # Organizing the tagged PRs into unified categories categories: - title: "Breaking changes" labels: - "breaking change" - title: "Features" labels: - "feature" - title: "Enhancements" labels: - "enhancement" - title: "Bug Fixes" labels: - "bug" - "bug fix" - title: "Infrastructure" labels: - "infra" - "test" - "dependencies" - "github actions" - title: "Documentation" labels: - "documentation" - title: "Maintenance" labels: - "version upgrade" - "odfe release" - title: "Refactoring" labels: - "refactor" - "code quality" ================================================ FILE: .github/workflows/draft-release-notes-workflow.yml ================================================ name: Release Drafter on: push: branches: - main jobs: update_release_draft: name: Update draft release notes runs-on: ubuntu-latest steps: - name: Update draft release notes uses: release-drafter/release-drafter@v5 with: config-name: draft-release-notes-config.yml name: Version (set here) tag: (None) env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} ================================================ FILE: .github/workflows/maven-release.yml ================================================ # This workflow will build a package using Maven and then publish it to # to our staging repo for a final release to maven central # This workflow will also create a tag and github release for the current commit # The github release will be have '-java' added to name to distinguish rust vs java releases # Example: # current version in POM.XML and in maven central = 3.1.0 # tag and github release = 3.1.0-java name: Publish Official Release to Maven Staging defaults: run: working-directory: Java/ on: workflow_dispatch: permissions: contents: write jobs: build: name: Build project and publish release runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Set up JDK 17 uses: actions/setup-java@v1 with: java-version: 17 cache: maven server-id: ossrh server-username: MAVEN_USERNAME server-password: MAVEN_PASSWORD gpg-private-key: ${{ secrets.MAVEN_GPG_PRIVATE_KEY }} gpg-passphrase: MAVEN_GPG_PASSPHRASE - name: Extract project version id: project run: echo "version=$(mvn help:evaluate -Dexpression=project.version -q -DforceStdout)" >> $GITHUB_OUTPUT - name: Build with Maven run: mvn -B package --file pom.xml - name: Publish to Maven central if: ${{ !endsWith(steps.project.outputs.version, '-SNAPSHOT') }} run: mvn -B deploy --file pom.xml -Pgpg-sign env: MAVEN_USERNAME: ${{ secrets.OSSRH_USERNAME }} MAVEN_PASSWORD: ${{ secrets.OSSRH_TOKEN }} MAVEN_GPG_PASSPHRASE: ${{ secrets.MAVEN_GPG_PASSPHRASE }} - name: Create Release id: create_release uses: actions/create-release@v1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: tag_name: ${{ steps.project.outputs.version }}-java release_name: ${{ steps.project.outputs.version }}-java draft: false prerelease: false ================================================ FILE: .github/workflows/maven-snapshot.yml ================================================ name: Build and publish snapshot on push to main on: push: branches: - main permissions: contents: read defaults: run: working-directory: Java/ jobs: build: name: Build project and publish SNAPSHOT runs-on: ubuntu-latest steps: - name: Checkout Repository uses: actions/checkout@v1 - name: Set up java for publishing snapshot uses: actions/setup-java@v1 with: java-version: 17 server-id: ossrh-snapshot server-username: MAVEN_USERNAME server-password: MAVEN_PASSWORD gpg-private-key: ${{ secrets.MAVEN_GPG_PRIVATE_KEY }} gpg-passphrase: MAVEN_GPG_PASSPHRASE - name: Build with Maven run: mvn -B package --file pom.xml - name: Extract project version id: project run: echo "version=$(mvn help:evaluate -Dexpression=project.version -q -DforceStdout)" >> $GITHUB_OUTPUT - name: Publish to snapshot repo if: ${{ endsWith(steps.project.outputs.version, '-SNAPSHOT') }} run: mvn -B deploy --file pom.xml -Pgpg-sign env: MAVEN_USERNAME: ${{ secrets.OSSRH_USERNAME }} MAVEN_PASSWORD: ${{ secrets.OSSRH_TOKEN }} MAVEN_GPG_PASSPHRASE: ${{ secrets.MAVEN_GPG_PASSPHRASE }} ================================================ FILE: .github/workflows/maven.yml ================================================ name: Java CI on: pull_request: branches: - '*' paths: - Java/** permissions: contents: read defaults: run: working-directory: Java/ jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v1 - name: Set up JDK 17 uses: actions/setup-java@v1 with: java-version: 17 - name: Build with Maven run: mvn -B package --file pom.xml ================================================ FILE: .github/workflows/rust.yml ================================================ name: Rust CI on: pull_request: branches: [ main ] paths: [ Rust/** ] permissions: contents: read env: CARGO_TERM_COLOR: always defaults: run: working-directory: Rust/ jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Build Rust run: cargo build --verbose - name: Run Rust Tests run: cargo test --verbose ================================================ FILE: .gitignore ================================================ build target .idea *.iml .project .settings .classpath ._.DS_Store .DS_Store Java/*/bin/ ================================================ FILE: CODE_OF_CONDUCT.md ================================================ ## Code of Conduct This project has adopted the [Amazon Open Source Code of Conduct](https://aws.github.io/code-of-conduct). For more information see the [Code of Conduct FAQ](https://aws.github.io/code-of-conduct-faq) or contact opensource-codeofconduct@amazon.com with any additional questions or comments. ================================================ FILE: CONTRIBUTING.md ================================================ # Contributing Guidelines Thank you for your interest in contributing to our project. Whether it's a bug report, new feature, correction, or additional documentation, we greatly value feedback and contributions from our community. Please read through this document before submitting any issues or pull requests to ensure we have all the necessary information to effectively respond to your bug report or contribution. ## Reporting Bugs/Feature Requests We welcome you to use the GitHub issue tracker to report bugs or suggest features. When filing an issue, please check existing open, or recently closed, issues to make sure somebody else hasn't already reported the issue. Please try to include as much information as you can. Details like these are incredibly useful: * A reproducible test case or series of steps * The version of our code being used * Any modifications you've made relevant to the bug * Anything unusual about your environment or deployment ## Contributing via Pull Requests Contributions via pull requests are much appreciated. Before sending us a pull request, please ensure that: 1. You are working against the latest source on the *master* branch. 2. You check existing open, and recently merged, pull requests to make sure someone else hasn't addressed the problem already. 3. You open an issue to discuss any significant work - we would hate for your time to be wasted. To send us a pull request, please: 1. Fork the repository. 2. Modify the source; please focus on the specific change you are contributing. If you also reformat all the code, it will be hard for us to focus on your change. 3. Ensure local tests pass. 4. Commit to your fork using clear commit messages. 5. Send us a pull request, answering any default questions in the pull request interface. 6. Pay attention to any automated CI failures reported in the pull request, and stay involved in the conversation. GitHub provides additional document on [forking a repository](https://help.github.com/articles/fork-a-repo/) and [creating a pull request](https://help.github.com/articles/creating-a-pull-request/). ## Finding contributions to work on Looking at the existing issues is a great way to find something to contribute on. As our projects, by default, use the default GitHub issue labels (enhancement/bug/duplicate/help wanted/invalid/question/wontfix), looking at any 'help wanted' issues is a great place to start. ## Code of Conduct This project has adopted the [Amazon Open Source Code of Conduct](https://aws.github.io/code-of-conduct). For more information see the [Code of Conduct FAQ](https://aws.github.io/code-of-conduct-faq) or contact opensource-codeofconduct@amazon.com with any additional questions or comments. ## Security issue notifications If you discover a potential security issue in this project we ask that you notify AWS/Amazon Security via our [vulnerability reporting page](http://aws.amazon.com/security/vulnerability-reporting/). Please do **not** create a public github issue. ## Licensing See the [LICENSE](LICENSE) file for our project's licensing. We will ask you to confirm the licensing of your contribution. We may ask you to sign a [Contributor License Agreement (CLA)](http://en.wikipedia.org/wiki/Contributor_License_Agreement) for larger changes. ================================================ FILE: Java/README.md ================================================ # Random Cut Forest This directory contains a Java implementation of the Random Cut Forest data structure and algorithms for anomaly detection, density estimation, imputation, and forecast. The goal of this library is to be easy to use and to strike a balance between efficiency and extensibility. Please do not forget to look into the ParkServices package that provide many augmented functionalities such as explicit determination of anomaly grade based on the first hand understanding of the core algorithm. Please also see randomcutforest-examples for a few detailed examples and extensions. Please do not hesitate to creat an issue for any discussion item. ## Basic operations To create a RandomCutForest instance with all parameters set to defaults: ```java int dimensions = 5; // The number of dimensions in the input data, required RandomCutForest forest = RandomCutForest.defaultForest(dimensions); ``` We recommend using shingle size which correspond to contextual analysis of data, and RCF uses ideas not dissimilar from higher order Markov Chains to improve its accuracy. An option is provided to have the shingles be constructed internally. To explicitly set optional parameters like number of trees in the forest or sample size, RandomCutForest provides a builder (for example with 4 input dimensions for a 4-way multivariate analysis): ```java RandomCutForest forest = RandomCutForest.builder() .numberOfTrees(90) .sampleSize(200) // use this cover the phenomenon of interest // for analysis of 5 minute aggregations, a week has // about 12 * 24 * 7 starting points of interest // larger sample sizes will be larger models .dimensions(inputDimension*4) // still required! .timeDecay(0.2) // determines half life of data .randomSeed(123) .internalShingleEnabled(true) .shingleSize(7) .build(); ``` Typical usage of a forest is to compute a statistic on an input data point and then update the forest with that point in a loop. ```java Supplier input = ...; while (true) { double[] point = input.get(); double score = forest.getAnomalyScore(point); forest.update(point); System.out.println("Anomaly Score: " + score); } ``` ## Limitations * Update operations in a forest are *not thread-safe*. Running concurrent updates or running an update concurrently with a traversal may result in errors. ## Forest Configuration The following parameters can be configured in the RandomCutForest builder. | Parameter Name | Type | Description | Default Value | |-----------------------------|---------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------| | dimensions | int | The number of dimensions in the input data. | Required, no default value. Should be the product of input dimensions and shingleSize | | shingleSize | int | The number of contiguous observations across all the input variables that would be used for analysis | Strongly recommended for contextual anomalies. Required for Forecast/Extrapolate | | lambda | double | The decay factor used by stream samplers in this forest. See the next section for guidance. | 1 / (10 * sampleSize) | | numberOfTrees | int | The number of trees in this forest. | 50 | | outputAfter | int | The number of points required by stream samplers before results are returned. | 0.25 * sampleSize | | internalShinglingEnabled | boolean | Whether the shingling is performed by RCF itself since it has already seen previous values. | false (for historical reasons). Recommended : true, will result in smaller models. | | parallelExecutionEnabled | boolean | If true, then the forest will create an internal threadpool. Forest updates and traversals will be submitted to this threadpool, and individual trees will be updated or traversed in parallel. For larger shingle sizes, dimensions, and number of trees, parallelization may improve throughput. We recommend users benchmark against their target use case. | false | | randomSeed | long | A seed value used to initialize the random number generators in this forest. | | | sampleSize | int | The sample size used by stream samplers in this forest | 256 | | centerOfMassEnabled | boolean | If true, then tree nodes in the forest will compute their center of mass as part of tree update operations. | false | | storeSequenceIndexesEnabled | boolean | If true, then sequence indexes (ordinals indicating when a point was added to a tree) will be stored in the forest along with poitn values. | false | | threadPoolSize | int | The number of threads to use in the internal threadpool. | Number of available processors - 1 | The above parameters are the most common and historical. Please use the issues to request additions/discussions of other parameters of interest. RandomCutForest primarily provides an estimation (say anomaly score, or extrapolation over a forecast horizon) and using that raw estimation can be challenging. The ParkServices package provides several capabilities (ThresholdedRandomCutForest, RCFCaster, respectively) for distilling the scores to a determination of anomaly/otherwise (an assesment of grade) or calibrated conformal forecasts. These have natural parameter choices that are different from the core RandomCutForest -- for example internalShinglingEnabled defaults to true since that is more natural in those contexts. The package examples provides a collection of examples and uses of parameters, we draw the attention to ThresholdedMultiDimensionalExample and RCFCasterExample. If one is interested in sequential analysis of a series of consecutive inputs, check out SequentialAnomalyExample. ParkServices also exposes many other functionalities of RCF which were covert, such as clustering (including multi-centroid representations) -- see NumericGLADExample for instance. ## Choosing a `timeDecay` value for your application When we submit a point to the sampler, it is included into the sample with some probability, and it will remain in the for some number of steps before being replaced. Call the number of steps that a point is included in the sample the "lifetime" of the point (which may be 0). Over a finite time window, the distribution of the lifetime of a point is approximately exponential with parameter `lambda`. Thus, `1 / timmeDecay` is approximately the average number of steps that a point will be included in the sample. By default, we set `timeDecay` equal to `1 / (10 * sampleSize)`. Alternatively, if you want the probability that a point survives longer than n steps to be 0.05, you can solve for `lambda` in the equation `exp(-lambda * n) = 0.05`. We note again that this is heuristic and not mathematically rigorous. We refer the interested reader to [Weighted Random Sampling (2005; Efraimidis, Spirakis)](http://citeseerx.ist.psu.edu/viewdoc/download;jsessionid=BEB1FE0AB3C0129B822D2CE5EABBFD42?doi=10.1.1.591.4194&rep=rep1&type=pdf). ## Setup 1. Checkout this package from our GitHub repository. 1. Install [Apache Maven](https://maven.apache.org/) by following the directions on that site. 1. Set your `JAVA_HOME` environment variable to a JDK version 8 or greater. ## Build Build the modules in this package and run the full test suite by running ```text mvn package ``` For a faster build that excludes the long-running "functional" tests, run ```text mvn package -DexcludedGroups=functional ``` ## Build Command-line (CLI) usage > **Important.** The CLI applications use `String::split` to read delimited data > and as such are **not intended for production use**. For some of the algorithms included in this package there are CLI applications that can be used for experimentation as well as a way to learn about these algorithms and their hyperparameters. After building the project you can invoke an example CLI application by adding the core jar file to your classpath. In the example below we train and score a Random Cut Forest model on the three-dimensional data shown in Figure 3 in the original RCF paper. ([PDF][rcf-paper]) These example data can be found at `../example-data/rcf-paper.csv`: ```text $ tail data/example.csv -5.0074,-0.0038,-0.0237 -5.0029,0.0170,-0.0057 -4.9975,-0.0102,-0.0065 4.9878,0.0136,-0.0087 5.0118,0.0098,-0.0057 0.0158,0.0061,0.0091 5.0167,0.0041,0.0054 -4.9947,0.0126,-0.0010 -5.0209,0.0004,-0.0033 4.9923,-0.0142,0.0030 ``` (Note that there is one data point above that is not like the others.) The `AnomalyScoreRunner` application reads in each line of the input data as a vector data point, scores the data point, and then updates the model with this point. The program output appends a column of anomaly scores to the input: ```text $ java -cp core/target/randomcutforest-core-4.4.0.jar com.amazon.randomcutforest.runner.AnomalyScoreRunner < ../example-data/rcf-paper.csv > example_output.csv $ tail example_output.csv -5.0029,0.0170,-0.0057,0.8129401629464965 -4.9975,-0.0102,-0.0065,0.6591046054520615 4.9878,0.0136,-0.0087,0.8552217070518414 5.0118,0.0098,-0.0057,0.7224686064066762 0.0158,0.0061,0.0091,2.8299054033889814 5.0167,0.0041,0.0054,0.7571453322237215 -4.9947,0.0126,-0.0010,0.7259960347128676 -5.0209,0.0004,-0.0033,0.9119498264685114 4.9923,-0.0142,0.0030,0.7310102658466711 Done. ``` (As you can see the anomalous data point was given large anomaly score.) You can read additional usage instructions, including options for setting model hyperparameters, using the `--help` flag: ```text $ java -cp core/target/randomcutforest-core-4.4.0.jar com.amazon.randomcutforest.runner.AnomalyScoreRunner --help Usage: java -cp target/random-cut-forest-4.4.0.jar com.amazon.randomcutforest.runner.AnomalyScoreRunner [options] < input_file > output_file Compute scalar anomaly scores from the input rows and append them to the output rows. Options: --delimiter, -d: The character or string used as a field delimiter. (default: ,) --header-row: Set to 'true' if the data contains a header row. (default: false) --number-of-trees, -n: Number of trees to use in the forest. (default: 100) --random-seed: Random seed to use in the Random Cut Forest (default: 42) --sample-size, -s: Number of points to keep in sample for each tree. (default: 256) --shingle-cyclic, -c: Set to 'true' to use cyclic shingles instead of linear shingles. (default: false) --shingle-size, -g: Shingle size to use. (default: 1) --window-size, -w: Window size of the sample or 0 for no window. (default: 0) --help, -h: Print this help message and exit. ``` Other CLI applications are available in the `com.amazon.randomcutforest.runner` package. ## Testing The core library test suite is divided into unit tests and "functional" tests. By "functional", we mean tests that verify the expected behavior of the algorithms defined in the package. For example, a functional test for the anomaly detection algorithm will first train a forest on a pre-defined distribution and then verify that the forest assigns a high anomaly score to anomalous points (where "anomalous" is with respect to the specified distribution). Functional tests are indicated both in the test class name (e.g., `RandomCutForestFunctionalTest`) and in a `@Tag` annotation on the test class. The full test suite including functional tests currently takes over 10 minutes to complete. If you are contributing to this package, we recommend excluding the functional tests while actively developing, and only running the full test suite before creating a pull request. Functional tests can be excluded from Maven build targets by passing `-DexcludedGroups=functional` at the command line. For example: ```text % mvn test -DexcludedGroups=functional ``` In the core library we have 90% line coverage with the full test suite, and 80% line coverage when running the unit tests only (i.e., when excluding functional tests). Our goal is to reach 100% unit test coverage, and we welcome (and encourage!) test contributions. After running tests with Maven, you can see the test coverage broken out by class by opening `target/site/jacoco/index.html` in a web browser. Our tests are implemented in [JUnit 5](https://junit.org/junit5/) with [Mockito](https://site.mockito.org/), [Powermock](https://github.com/powermock/powermock), and [Hamcrest](http://hamcrest.org/) for testing. Test dependencies will be downloaded automatically when invoking `mvn test` or `mvn package`. ## Benchmarks The benchmark modules defines microbenchmarks using the [JMH](https://openjdk.java.net/projects/code-tools/jmh/) framework. Build an executable jar containing the benchmark code by running ```text % # (Optional) To benchmark the code in your local repository, build and install to your local Maven repository % # Otherwise, benchmark dependencies will be pulled from Maven central % mvn package install -DexcludedGroups=functional % % mvn -pl benchmark package assembly:single ``` To invoke the full benchmark suite: ```text % java -jar benchmark/target/randomcutforest-benchmark-4.4.0-jar-with-dependencies.jar ``` The full benchmark suite takes a long time to run. You can also pass a regex at the command-line, then only matching benchmark methods will be executed. ```text % java -jar benchmark/target/randomcutforest-benchmark-4.4.0-jar-with-dependencies.jar RandomCutForestBenchmark\.updateAndGetAnomalyScore ``` [rcf-paper]: http://proceedings.mlr.press/v48/guha16.pdf ================================================ FILE: Java/RELEASING.md ================================================ - [Overview](#overview) - [Feature Branches](#feature-branches) - [Release Labels](#release-labels) - [Releasing](#releasing) ## Overview This document explains the release strategy for the Random Cut Forest project. ## Feature Branches Do not create branches in the upstream repo, use your fork, for the exception of long lasting feature branches that require active collaboration from multiple developers. Name feature branches `feature/`. Once the work is merged to `main`, please make sure to delete the feature branch. ## Release Labels Repositories create consistent release labels, such as `3.0.0-java`. Use release labels to target an issue or a PR for a given release. ## Releasing The release process is run by a release manager volunteering from amongst the maintainers. 1. Create a PR to bump version to desired release candidate (e.g. 3.0.0). 2. Click run on the maven-release workflow in Github Actions which uploads the artifacts to our staging repository, creates a new tag, and a new Github release. 3. Login into the nexus staging repository, verify artifact was signed successfully and click release to officially push to maven central. ================================================ FILE: Java/benchmark/pom.xml ================================================ 4.0.0 software.amazon.randomcutforest randomcutforest-parent 4.4.0 randomcutforest-benchmark jar 1.22 software.amazon.randomcutforest randomcutforest-core ${project.version} software.amazon.randomcutforest randomcutforest-testutils ${project.version} software.amazon.randomcutforest randomcutforest-serialization ${project.version} org.openjdk.jmh jmh-core ${jmh.version} org.openjdk.jmh jmh-generator-annprocess ${jmh.version} com.github.jbellis jamm 0.3.3 com.fasterxml.jackson.core jackson-core 2.16.0 com.fasterxml.jackson.core jackson-databind 2.16.0 io.protostuff protostuff-core 1.8.0 io.protostuff protostuff-runtime 1.8.0 maven-assembly-plugin 3.2.0 jar-with-dependencies org.openjdk.jmh.Main ================================================ FILE: Java/benchmark/src/main/java/com/amazon/randomcutforest/RandomCutForestBenchmark.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest; import java.util.List; import java.util.Random; import org.openjdk.jmh.annotations.Benchmark; import org.openjdk.jmh.annotations.Fork; import org.openjdk.jmh.annotations.Level; import org.openjdk.jmh.annotations.Measurement; import org.openjdk.jmh.annotations.OperationsPerInvocation; import org.openjdk.jmh.annotations.Param; import org.openjdk.jmh.annotations.Scope; import org.openjdk.jmh.annotations.Setup; import org.openjdk.jmh.annotations.State; import org.openjdk.jmh.annotations.Warmup; import org.openjdk.jmh.infra.Blackhole; import com.amazon.randomcutforest.returntypes.DensityOutput; import com.amazon.randomcutforest.returntypes.DiVector; import com.amazon.randomcutforest.returntypes.Neighbor; import com.amazon.randomcutforest.testutils.NormalMixtureTestData; @Warmup(iterations = 2) @Measurement(iterations = 5) @Fork(value = 1) @State(Scope.Thread) public class RandomCutForestBenchmark { public final static int DATA_SIZE = 50_000; public final static int INITIAL_DATA_SIZE = 25_000; @State(Scope.Benchmark) public static class BenchmarkState { @Param({ "40" }) int baseDimensions; @Param({ "1" }) int shingleSize; @Param({ "30" }) int numberOfTrees; @Param({ "1.0", "0.9", "0.8", "0.7", "0.6", "0.5", "0.4", "0.3", "0.2", "0.1", "0.0" }) double boundingBoxCacheFraction; @Param({ "false", "true" }) boolean parallel; double[][] data; RandomCutForest forest; @Setup(Level.Trial) public void setUpData() { int dimensions = baseDimensions * shingleSize; NormalMixtureTestData gen = new NormalMixtureTestData(); data = gen.generateTestData(INITIAL_DATA_SIZE + DATA_SIZE, dimensions); } @Setup(Level.Invocation) public void setUpForest() { forest = RandomCutForest.builder().numberOfTrees(numberOfTrees).dimensions(baseDimensions * shingleSize) .internalShinglingEnabled(true).shingleSize(shingleSize).parallelExecutionEnabled(parallel) .boundingBoxCacheFraction(boundingBoxCacheFraction).randomSeed(99).build(); for (int i = 0; i < INITIAL_DATA_SIZE; i++) { forest.update(data[i]); } } } private RandomCutForest forest; @Benchmark @OperationsPerInvocation(DATA_SIZE) public RandomCutForest updateOnly(BenchmarkState state) { double[][] data = state.data; forest = state.forest; for (int i = INITIAL_DATA_SIZE; i < data.length; i++) { forest.update(data[i]); } return forest; } @Benchmark @OperationsPerInvocation(DATA_SIZE) public RandomCutForest scoreOnly(BenchmarkState state, Blackhole blackhole) { double[][] data = state.data; forest = state.forest; double score = 0.0; Random rnd = new Random(0); for (int i = INITIAL_DATA_SIZE; i < data.length; i++) { score += forest.getAnomalyScore(data[i]); if (rnd.nextDouble() < 0.01) { forest.update(data[i]); // this should execute sparingly } } blackhole.consume(score); return forest; } @Benchmark @OperationsPerInvocation(DATA_SIZE) public RandomCutForest scoreAndUpdate(BenchmarkState state, Blackhole blackhole) { double[][] data = state.data; forest = state.forest; double score = 0.0; for (int i = INITIAL_DATA_SIZE; i < data.length; i++) { score = forest.getAnomalyScore(data[i]); forest.update(data[i]); } blackhole.consume(score); return forest; } @Benchmark @OperationsPerInvocation(DATA_SIZE) public RandomCutForest attributionAndUpdate(BenchmarkState state, Blackhole blackhole) { double[][] data = state.data; forest = state.forest; DiVector vector = new DiVector(forest.getDimensions()); for (int i = INITIAL_DATA_SIZE; i < data.length; i++) { vector = forest.getAnomalyAttribution(data[i]); forest.update(data[i]); } blackhole.consume(vector); return forest; } @Benchmark @OperationsPerInvocation(DATA_SIZE) public RandomCutForest basicDensityAndUpdate(BenchmarkState state, Blackhole blackhole) { double[][] data = state.data; forest = state.forest; DensityOutput output = new DensityOutput(forest.getDimensions(), forest.getSampleSize()); for (int i = INITIAL_DATA_SIZE; i < data.length; i++) { output = forest.getSimpleDensity(data[i]); forest.update(data[i]); } blackhole.consume(output); return forest; } @Benchmark @OperationsPerInvocation(DATA_SIZE) public RandomCutForest basicNeighborAndUpdate(BenchmarkState state, Blackhole blackhole) { double[][] data = state.data; forest = state.forest; List output = null; for (int i = INITIAL_DATA_SIZE; i < data.length; i++) { output = forest.getNearNeighborsInSample(data[i]); forest.update(data[i]); } blackhole.consume(output); return forest; } @Benchmark @OperationsPerInvocation(DATA_SIZE) public RandomCutForest imputeAndUpdate(BenchmarkState state, Blackhole blackhole) { double[][] data = state.data; forest = state.forest; double[] output = null; for (int i = INITIAL_DATA_SIZE; i < data.length; i++) { output = forest.imputeMissingValues(data[i], 1, new int[] { forest.dimensions - 1 }); forest.update(data[i]); } blackhole.consume(output); return forest; } } ================================================ FILE: Java/benchmark/src/main/java/com/amazon/randomcutforest/RandomCutForestShingledBenchmark.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest; import java.util.List; import java.util.Random; import org.openjdk.jmh.annotations.Benchmark; import org.openjdk.jmh.annotations.Fork; import org.openjdk.jmh.annotations.Level; import org.openjdk.jmh.annotations.Measurement; import org.openjdk.jmh.annotations.OperationsPerInvocation; import org.openjdk.jmh.annotations.Param; import org.openjdk.jmh.annotations.Scope; import org.openjdk.jmh.annotations.Setup; import org.openjdk.jmh.annotations.State; import org.openjdk.jmh.annotations.Warmup; import org.openjdk.jmh.infra.Blackhole; import com.amazon.randomcutforest.returntypes.DensityOutput; import com.amazon.randomcutforest.returntypes.DiVector; import com.amazon.randomcutforest.returntypes.Neighbor; import com.amazon.randomcutforest.testutils.ShingledMultiDimDataWithKeys; @Warmup(iterations = 2) @Measurement(iterations = 5) @Fork(value = 1) @State(Scope.Thread) public class RandomCutForestShingledBenchmark { public final static int DATA_SIZE = 50_000; public final static int INITIAL_DATA_SIZE = 25_000; @State(Scope.Benchmark) public static class BenchmarkState { @Param({ "5" }) int baseDimensions; @Param({ "8" }) int shingleSize; @Param({ "30" }) int numberOfTrees; @Param({ "1.0", "0.9", "0.8", "0.7", "0.6", "0.5", "0.4", "0.3", "0.2", "0.1", "0.0" }) double boundingBoxCacheFraction; @Param({ "false", "true" }) boolean parallel; double[][] data; RandomCutForest forest; @Setup(Level.Trial) public void setUpData() { data = ShingledMultiDimDataWithKeys.getMultiDimData(DATA_SIZE + INITIAL_DATA_SIZE, 50, 100, 5, 17, baseDimensions).data; } @Setup(Level.Invocation) public void setUpForest() { forest = RandomCutForest.builder().numberOfTrees(numberOfTrees).dimensions(baseDimensions * shingleSize) .internalShinglingEnabled(true).shingleSize(shingleSize).parallelExecutionEnabled(parallel) .boundingBoxCacheFraction(boundingBoxCacheFraction).randomSeed(99).build(); for (int i = INITIAL_DATA_SIZE; i < data.length; i++) { forest.update(data[i]); } } } private RandomCutForest forest; @Benchmark @OperationsPerInvocation(DATA_SIZE) public RandomCutForest updateOnly(BenchmarkState state) { double[][] data = state.data; forest = state.forest; for (int i = INITIAL_DATA_SIZE; i < data.length; i++) { forest.update(data[i]); } return forest; } @Benchmark @OperationsPerInvocation(DATA_SIZE) public RandomCutForest scoreOnly(BenchmarkState state, Blackhole blackhole) { double[][] data = state.data; forest = state.forest; double score = 0.0; Random rnd = new Random(0); for (int i = INITIAL_DATA_SIZE; i < data.length; i++) { score += forest.getAnomalyScore(data[i]); if (rnd.nextDouble() < 0.01) { forest.update(data[i]); // this should execute sparingly } } blackhole.consume(score); return forest; } @Benchmark @OperationsPerInvocation(DATA_SIZE) public RandomCutForest scoreAndUpdate(BenchmarkState state, Blackhole blackhole) { double[][] data = state.data; forest = state.forest; double score = 0.0; for (int i = INITIAL_DATA_SIZE; i < data.length; i++) { score = forest.getAnomalyScore(data[i]); forest.update(data[i]); } blackhole.consume(score); return forest; } @Benchmark @OperationsPerInvocation(DATA_SIZE) public RandomCutForest attributionAndUpdate(BenchmarkState state, Blackhole blackhole) { double[][] data = state.data; forest = state.forest; DiVector vector = new DiVector(forest.getDimensions()); for (int i = INITIAL_DATA_SIZE; i < data.length; i++) { vector = forest.getAnomalyAttribution(data[i]); forest.update(data[i]); } blackhole.consume(vector); return forest; } @Benchmark @OperationsPerInvocation(DATA_SIZE) public RandomCutForest basicDensityAndUpdate(BenchmarkState state, Blackhole blackhole) { double[][] data = state.data; forest = state.forest; DensityOutput output = new DensityOutput(forest.getDimensions(), forest.getSampleSize()); for (int i = INITIAL_DATA_SIZE; i < data.length; i++) { output = forest.getSimpleDensity(data[i]); forest.update(data[i]); } blackhole.consume(output); return forest; } @Benchmark @OperationsPerInvocation(DATA_SIZE) public RandomCutForest neighborAndUpdate(BenchmarkState state, Blackhole blackhole) { double[][] data = state.data; forest = state.forest; List output = null; for (int i = INITIAL_DATA_SIZE; i < data.length; i++) { output = forest.getNearNeighborsInSample(data[i]); forest.update(data[i]); } blackhole.consume(output); return forest; } @Benchmark @OperationsPerInvocation(DATA_SIZE) public RandomCutForest imputeAndUpdate(BenchmarkState state, Blackhole blackhole) { double[][] data = state.data; forest = state.forest; double[] output = null; for (int i = INITIAL_DATA_SIZE; i < data.length; i++) { output = forest.imputeMissingValues(data[i], 1, new int[] { state.baseDimensions - 1 }); forest.update(data[i]); } blackhole.consume(output); return forest; } @Benchmark @OperationsPerInvocation(DATA_SIZE) public RandomCutForest extrapolateAndUpdate(BenchmarkState state, Blackhole blackhole) { double[][] data = state.data; forest = state.forest; double[] output = null; for (int i = INITIAL_DATA_SIZE; i < data.length; i++) { output = forest.extrapolate(1); forest.update(data[i]); } blackhole.consume(output); return forest; } } ================================================ FILE: Java/benchmark/src/main/java/com/amazon/randomcutforest/StateMapperBenchmark.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest; import org.openjdk.jmh.annotations.Benchmark; import org.openjdk.jmh.annotations.Fork; import org.openjdk.jmh.annotations.Level; import org.openjdk.jmh.annotations.Measurement; import org.openjdk.jmh.annotations.OperationsPerInvocation; import org.openjdk.jmh.annotations.Param; import org.openjdk.jmh.annotations.Scope; import org.openjdk.jmh.annotations.Setup; import org.openjdk.jmh.annotations.State; import org.openjdk.jmh.annotations.TearDown; import org.openjdk.jmh.annotations.Warmup; import org.openjdk.jmh.infra.Blackhole; import com.amazon.randomcutforest.config.Precision; import com.amazon.randomcutforest.profilers.ObjectGraphSizeProfiler; import com.amazon.randomcutforest.profilers.OutputSizeProfiler; import com.amazon.randomcutforest.state.RandomCutForestMapper; import com.amazon.randomcutforest.state.RandomCutForestState; import com.amazon.randomcutforest.testutils.NormalMixtureTestData; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import io.protostuff.LinkedBuffer; import io.protostuff.ProtostuffIOUtil; import io.protostuff.Schema; import io.protostuff.runtime.RuntimeSchema; @Warmup(iterations = 2) @Measurement(iterations = 5) @Fork(value = 1) @State(Scope.Benchmark) public class StateMapperBenchmark { public static final int NUM_TRAIN_SAMPLES = 2048; public static final int NUM_TEST_SAMPLES = 50; @State(Scope.Thread) public static class BenchmarkState { @Param({ "10" }) int dimensions; @Param({ "50" }) int numberOfTrees; @Param({ "256" }) int sampleSize; @Param({ "false", "true" }) boolean saveTreeState; @Param({ "FLOAT_32", "FLOAT_64" }) Precision precision; double[][] trainingData; double[][] testData; RandomCutForestState forestState; String json; byte[] protostuff; @Setup(Level.Trial) public void setUpData() { NormalMixtureTestData gen = new NormalMixtureTestData(); trainingData = gen.generateTestData(NUM_TRAIN_SAMPLES, dimensions); testData = gen.generateTestData(NUM_TEST_SAMPLES, dimensions); } @Setup(Level.Invocation) public void setUpForest() throws JsonProcessingException { RandomCutForest forest = RandomCutForest.builder().compact(true).dimensions(dimensions) .numberOfTrees(numberOfTrees).sampleSize(sampleSize).precision(precision) .boundingBoxCacheFraction(0.0).build(); for (int i = 0; i < NUM_TRAIN_SAMPLES; i++) { forest.update(trainingData[i]); } RandomCutForestMapper mapper = new RandomCutForestMapper(); mapper.setSaveExecutorContextEnabled(true); mapper.setSaveTreeStateEnabled(saveTreeState); forestState = mapper.toState(forest); ObjectMapper jsonMapper = new ObjectMapper(); json = jsonMapper.writeValueAsString(forestState); Schema schema = RuntimeSchema.getSchema(RandomCutForestState.class); LinkedBuffer buffer = LinkedBuffer.allocate(512); try { protostuff = ProtostuffIOUtil.toByteArray(forestState, schema, buffer); } finally { buffer.clear(); } } } private RandomCutForest forest; private byte[] bytes; @TearDown(Level.Iteration) public void tearDown() { OutputSizeProfiler.setTestArray(bytes); ObjectGraphSizeProfiler.setObject(forest); } @Benchmark @OperationsPerInvocation(NUM_TEST_SAMPLES) public RandomCutForestState roundTripFromState(BenchmarkState state, Blackhole blackhole) { RandomCutForestState forestState = state.forestState; double[][] testData = state.testData; for (int i = 0; i < NUM_TEST_SAMPLES; i++) { RandomCutForestMapper mapper = new RandomCutForestMapper(); mapper.setSaveExecutorContextEnabled(true); mapper.setSaveTreeStateEnabled(state.saveTreeState); forest = mapper.toModel(forestState); double score = forest.getAnomalyScore(testData[i]); blackhole.consume(score); forest.update(testData[i]); forestState = mapper.toState(forest); } return forestState; } @Benchmark @OperationsPerInvocation(NUM_TEST_SAMPLES) public String roundTripFromJson(BenchmarkState state, Blackhole blackhole) throws JsonProcessingException { String json = state.json; double[][] testData = state.testData; for (int i = 0; i < NUM_TEST_SAMPLES; i++) { ObjectMapper jsonMapper = new ObjectMapper(); RandomCutForestState forestState = jsonMapper.readValue(json, RandomCutForestState.class); RandomCutForestMapper mapper = new RandomCutForestMapper(); mapper.setSaveExecutorContextEnabled(true); mapper.setSaveTreeStateEnabled(state.saveTreeState); forest = mapper.toModel(forestState); double score = forest.getAnomalyScore(testData[i]); blackhole.consume(score); forest.update(testData[i]); json = jsonMapper.writeValueAsString(mapper.toState(forest)); } bytes = json.getBytes(); return json; } @Benchmark @OperationsPerInvocation(NUM_TEST_SAMPLES) public byte[] roundTripFromProtostuff(BenchmarkState state, Blackhole blackhole) { bytes = state.protostuff; double[][] testData = state.testData; for (int i = 0; i < NUM_TEST_SAMPLES; i++) { Schema schema = RuntimeSchema.getSchema(RandomCutForestState.class); RandomCutForestState forestState = schema.newMessage(); ProtostuffIOUtil.mergeFrom(bytes, forestState, schema); RandomCutForestMapper mapper = new RandomCutForestMapper(); mapper.setSaveExecutorContextEnabled(true); mapper.setSaveTreeStateEnabled(state.saveTreeState); forest = mapper.toModel(forestState); double score = forest.getAnomalyScore(testData[i]); blackhole.consume(score); forest.update(testData[i]); forestState = mapper.toState(forest); LinkedBuffer buffer = LinkedBuffer.allocate(512); try { bytes = ProtostuffIOUtil.toByteArray(forestState, schema, buffer); } finally { buffer.clear(); } } return bytes; } } ================================================ FILE: Java/benchmark/src/main/java/com/amazon/randomcutforest/StateMapperShingledBenchmark.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest; import static java.lang.Math.PI; import static java.lang.Math.cos; import java.util.Random; import org.openjdk.jmh.annotations.Benchmark; import org.openjdk.jmh.annotations.Fork; import org.openjdk.jmh.annotations.Level; import org.openjdk.jmh.annotations.Measurement; import org.openjdk.jmh.annotations.OperationsPerInvocation; import org.openjdk.jmh.annotations.Param; import org.openjdk.jmh.annotations.Scope; import org.openjdk.jmh.annotations.Setup; import org.openjdk.jmh.annotations.State; import org.openjdk.jmh.annotations.TearDown; import org.openjdk.jmh.annotations.Warmup; import org.openjdk.jmh.infra.Blackhole; import com.amazon.randomcutforest.config.Precision; import com.amazon.randomcutforest.profilers.OutputSizeProfiler; import com.amazon.randomcutforest.state.RandomCutForestMapper; import com.amazon.randomcutforest.state.RandomCutForestState; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import io.protostuff.LinkedBuffer; import io.protostuff.ProtostuffIOUtil; import io.protostuff.Schema; import io.protostuff.runtime.RuntimeSchema; @Warmup(iterations = 2) @Measurement(iterations = 5) @Fork(value = 1) @State(Scope.Benchmark) public class StateMapperShingledBenchmark { public static final int NUM_TRAIN_SAMPLES = 2048; public static final int NUM_TEST_SAMPLES = 50; @State(Scope.Thread) public static class BenchmarkState { @Param({ "10" }) int dimensions; @Param({ "50" }) int numberOfTrees; @Param({ "256" }) int sampleSize; @Param({ "false", "true" }) boolean saveTreeState; @Param({ "FLOAT_32", "FLOAT_64" }) Precision precision; double[][] trainingData; double[][] testData; RandomCutForestState forestState; String json; byte[] protostuff; @Setup(Level.Trial) public void setUpData() { trainingData = genShingledData(NUM_TRAIN_SAMPLES, dimensions, 0); testData = genShingledData(NUM_TEST_SAMPLES, dimensions, 1); } @Setup(Level.Invocation) public void setUpForest() throws JsonProcessingException { RandomCutForest forest = RandomCutForest.builder().compact(true).dimensions(dimensions) .numberOfTrees(numberOfTrees).sampleSize(sampleSize).precision(precision).shingleSize(dimensions) .build(); for (int i = 0; i < NUM_TRAIN_SAMPLES; i++) { forest.update(trainingData[i]); } RandomCutForestMapper mapper = new RandomCutForestMapper(); mapper.setSaveExecutorContextEnabled(true); mapper.setSaveTreeStateEnabled(saveTreeState); forestState = mapper.toState(forest); ObjectMapper jsonMapper = new ObjectMapper(); json = jsonMapper.writeValueAsString(forestState); Schema schema = RuntimeSchema.getSchema(RandomCutForestState.class); LinkedBuffer buffer = LinkedBuffer.allocate(512); try { protostuff = ProtostuffIOUtil.toByteArray(forestState, schema, buffer); } finally { buffer.clear(); } } } private byte[] bytes; @TearDown(Level.Iteration) public void tearDown() { OutputSizeProfiler.setTestArray(bytes); } @Benchmark @OperationsPerInvocation(NUM_TEST_SAMPLES) public RandomCutForestState roundTripFromState(BenchmarkState state, Blackhole blackhole) { RandomCutForestState forestState = state.forestState; double[][] testData = state.testData; for (int i = 0; i < NUM_TEST_SAMPLES; i++) { RandomCutForestMapper mapper = new RandomCutForestMapper(); mapper.setSaveExecutorContextEnabled(true); mapper.setSaveTreeStateEnabled(state.saveTreeState); RandomCutForest forest = mapper.toModel(forestState); double score = forest.getAnomalyScore(testData[i]); blackhole.consume(score); forest.update(testData[i]); forestState = mapper.toState(forest); } return forestState; } @Benchmark @OperationsPerInvocation(NUM_TEST_SAMPLES) public String roundTripFromJson(BenchmarkState state, Blackhole blackhole) throws JsonProcessingException { String json = state.json; double[][] testData = state.testData; for (int i = 0; i < NUM_TEST_SAMPLES; i++) { ObjectMapper jsonMapper = new ObjectMapper(); RandomCutForestState forestState = jsonMapper.readValue(json, RandomCutForestState.class); RandomCutForestMapper mapper = new RandomCutForestMapper(); mapper.setSaveExecutorContextEnabled(true); mapper.setSaveTreeStateEnabled(state.saveTreeState); RandomCutForest forest = mapper.toModel(forestState); double score = forest.getAnomalyScore(testData[i]); blackhole.consume(score); forest.update(testData[i]); json = jsonMapper.writeValueAsString(mapper.toState(forest)); } bytes = json.getBytes(); return json; } @Benchmark @OperationsPerInvocation(NUM_TEST_SAMPLES) public byte[] roundTripFromProtostuff(BenchmarkState state, Blackhole blackhole) { bytes = state.protostuff; double[][] testData = state.testData; for (int i = 0; i < NUM_TEST_SAMPLES; i++) { Schema schema = RuntimeSchema.getSchema(RandomCutForestState.class); RandomCutForestState forestState = schema.newMessage(); ProtostuffIOUtil.mergeFrom(bytes, forestState, schema); RandomCutForestMapper mapper = new RandomCutForestMapper(); mapper.setSaveExecutorContextEnabled(true); mapper.setSaveTreeStateEnabled(state.saveTreeState); RandomCutForest forest = mapper.toModel(forestState); double score = forest.getAnomalyScore(testData[i]); blackhole.consume(score); forest.update(testData[i]); forestState = mapper.toState(forest); LinkedBuffer buffer = LinkedBuffer.allocate(512); try { bytes = ProtostuffIOUtil.toByteArray(forestState, schema, buffer); } finally { buffer.clear(); } } return bytes; } private static double[][] genShingledData(int size, int dimensions, long seed) { double[][] answer = new double[size][]; int entryIndex = 0; boolean filledShingleAtleastOnce = false; double[] history = new double[dimensions]; int count = 0; double[] data = getDataD(size + dimensions - 1, 100, 5, seed); for (int j = 0; j < size + dimensions - 1; ++j) { // we stream here .... history[entryIndex] = data[j]; entryIndex = (entryIndex + 1) % dimensions; if (entryIndex == 0) { filledShingleAtleastOnce = true; } if (filledShingleAtleastOnce) { // System.out.println("Adding " + j); answer[count++] = getShinglePoint(history, entryIndex, dimensions); } } return answer; } private static double[] getShinglePoint(double[] recentPointsSeen, int indexOfOldestPoint, int shingleLength) { double[] shingledPoint = new double[shingleLength]; int i = 0; for (int j = 0; j < shingleLength; ++j) { double point = recentPointsSeen[(j + indexOfOldestPoint) % shingleLength]; shingledPoint[i++] = point; } return shingledPoint; } private static double[] getDataD(int num, double amplitude, double noise, long seed) { double[] data = new double[num]; Random noiseprg = new Random(seed); for (int i = 0; i < num; i++) { data[i] = amplitude * cos(2 * PI * (i + 50) / 1000) + noise * noiseprg.nextDouble(); } return data; } } ================================================ FILE: Java/benchmark/src/main/java/com/amazon/randomcutforest/profilers/ObjectGraphSizeProfiler.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.profilers; import java.util.Collection; import java.util.Collections; import org.github.jamm.MemoryMeter; import org.openjdk.jmh.infra.BenchmarkParams; import org.openjdk.jmh.infra.IterationParams; import org.openjdk.jmh.profile.InternalProfiler; import org.openjdk.jmh.results.AggregationPolicy; import org.openjdk.jmh.results.IterationResult; import org.openjdk.jmh.results.Result; import org.openjdk.jmh.results.ScalarResult; /** * A profiler that uses the JAMM memory meter to measure the size of an object * graph. */ public class ObjectGraphSizeProfiler implements InternalProfiler { private static Object object; private static MemoryMeter meter = new MemoryMeter(); public static void setObject(Object object) { ObjectGraphSizeProfiler.object = object; } @Override public void beforeIteration(BenchmarkParams benchmarkParams, IterationParams iterationParams) { } @Override public Collection afterIteration(BenchmarkParams benchmarkParams, IterationParams iterationParams, IterationResult iterationResult) { long size = 0; if (object != null) { size = meter.measureDeep(object); object = null; } ScalarResult result = new ScalarResult("+object-graph-size.bytes", size, "bytes", AggregationPolicy.AVG); return Collections.singleton(result); } @Override public String getDescription() { return null; } } ================================================ FILE: Java/benchmark/src/main/java/com/amazon/randomcutforest/profilers/OutputSizeProfiler.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.profilers; import java.util.Collection; import java.util.Collections; import org.openjdk.jmh.infra.BenchmarkParams; import org.openjdk.jmh.infra.IterationParams; import org.openjdk.jmh.profile.InternalProfiler; import org.openjdk.jmh.results.AggregationPolicy; import org.openjdk.jmh.results.IterationResult; import org.openjdk.jmh.results.Result; import org.openjdk.jmh.results.ScalarResult; /** * This simple profile outputs the size of a provided byte array or string as * part of the JMH metrics. We use it to measure the size of output in * {@link com.amazon.randomcutforest.StateMapperBenchmark}. */ public class OutputSizeProfiler implements InternalProfiler { private static byte[] bytes; public static void setTestString(String s) { bytes = s.getBytes(); } public static void setTestArray(byte[] bytes) { OutputSizeProfiler.bytes = bytes; } @Override public void beforeIteration(BenchmarkParams benchmarkParams, IterationParams iterationParams) { } @Override public Collection afterIteration(BenchmarkParams benchmarkParams, IterationParams iterationParams, IterationResult iterationResult) { int length = 0; if (bytes != null) { length = bytes.length; bytes = null; } ScalarResult result = new ScalarResult("+output-size.bytes", length, "bytes", AggregationPolicy.AVG); return Collections.singleton(result); } @Override public String getDescription() { return null; } } ================================================ FILE: Java/core/pom.xml ================================================ 4.0.0 software.amazon.randomcutforest randomcutforest-parent 4.4.0 randomcutforest-core jar software.amazon.randomcutforest randomcutforest-testutils ${project.version} test org.projectlombok lombok 1.18.30 provided org.junit.jupiter junit-jupiter-engine test org.junit.jupiter junit-jupiter-params test org.hamcrest hamcrest test org.mockito mockito-core test org.mockito mockito-junit-jupiter test org.powermock powermock-api-easymock test com.fasterxml.jackson.core jackson-core 2.16.0 test com.fasterxml.jackson.core jackson-databind 2.16.0 test ================================================ FILE: Java/core/src/main/java/com/amazon/randomcutforest/CommonUtils.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest; import java.util.Objects; import java.util.function.Supplier; import com.amazon.randomcutforest.tree.IBoundingBoxView; /** * A collection of common utility functions. */ public class CommonUtils { private CommonUtils() { } /** * Throws an {@link IllegalArgumentException} with the specified message if the * specified input is false. * * @param condition A condition to test. * @param message The error message to include in the * {@code IllegalArgumentException} if {@code condition} is * false. * @throws IllegalArgumentException if {@code condition} is false. */ public static void checkArgument(boolean condition, String message) { if (!condition) { throw new IllegalArgumentException(message); } } // a lazy equivalent of the above, which avoids parameter evaluation public static void checkArgument(boolean condition, Supplier messageSupplier) { if (!condition) { throw new IllegalArgumentException(messageSupplier.get()); } } /** * Throws an {@link IllegalStateException} with the specified message if the * specified input is false. * * @param condition A condition to test. * @param message The error message to include in the * {@code IllegalStateException} if {@code condition} is false. * @throws IllegalStateException if {@code condition} is false. */ public static void checkState(boolean condition, String message) { if (!condition) { throw new IllegalStateException(message); } } /** * Throws an {@link IllegalStateException} with the specified message if the * specified input is false. This would eventually become asserts. * * @param condition A condition to test. * @param message The error message to include in the * {@code IllegalStateException} if {@code condition} is false. * @throws IllegalStateException if {@code condition} is false. */ public static void validateInternalState(boolean condition, String message) { if (!condition) { throw new IllegalStateException(message); } } /** * Throws a {@link NullPointerException} with the specified message if the * specified input is null. * * @param An arbitrary type. * @param object An object reference to test for nullity. * @param message The error message to include in the * {@code NullPointerException} if {@code object} is null. * @return {@code object} if not null. * @throws NullPointerException if the supplied object is null. */ public static T checkNotNull(T object, String message) { Objects.requireNonNull(object, message); return object; } /** * Compute the probability of separation for a bounding box adn a point. This * method considers the bounding box created by merging the query point into the * existing bounding box, and computes the probability that a random cut would * separate the query point from the merged bounding box. * * @param boundingBox is the bounding box used in RandomCutTree * @param queryPoint is the multidimensional point * @return the probability of separation choosing a random cut */ public static double getProbabilityOfSeparation(final IBoundingBoxView boundingBox, float[] queryPoint) { double sumOfNewRange = 0d; double sumOfDifferenceInRange = 0d; for (int i = 0; i < queryPoint.length; ++i) { double maxVal = boundingBox.getMaxValue(i); double minVal = boundingBox.getMinValue(i); double oldRange = maxVal - minVal; if (maxVal < queryPoint[i]) { maxVal = queryPoint[i]; } else if (minVal > queryPoint[i]) { minVal = queryPoint[i]; } else { sumOfNewRange += oldRange; continue; } double newRange = maxVal - minVal; sumOfNewRange += newRange; sumOfDifferenceInRange += (newRange - oldRange); } if (sumOfNewRange <= 0) { return 0; } else return sumOfDifferenceInRange / sumOfNewRange; } /** * The default anomaly scoring function for points that contained in a tree. * * @param depth The depth of the leaf node where this method is invoked * @param mass The number of times the point has been seen before * @return The score contribution from this previously-seen point */ public static double defaultScoreSeenFunction(double depth, double mass) { return 1.0 / (depth + Math.log(mass + 1.0) / Math.log(2.0)); } /** * The default anomaly scoring function for points not already contained in a * tree. * * @param depth The depth of the leaf node where this method is invoked * @param mass The number of times the point has been seen before * @return The score contribution from this point */ public static double defaultScoreUnseenFunction(double depth, double mass) { return 1.0 / (depth + 1); } public static double defaultDampFunction(double leafMass, double treeMass) { return 1.0 - leafMass / (2 * treeMass); } /** * Some algorithms which return a scalar value need to scale that value by tree * mass for consistency. This is the default method for computing the scale * factor in these cases. The function has to be associative in its first * argument (when the second is fixed) That is, fn (x1, y) + fn (x2, y) = fn (x1 * + x2, y) * * @param scalarValue The value being scaled * @param mass The mass of the tree where this method is invoked * @return The original value scaled appropriately for this tree */ public static double defaultScalarNormalizerFunction(double scalarValue, double mass) { return scalarValue * Math.log(mass + 1) / Math.log(2.0); } /** * The following function forms the core of RCFs, given a BoundingBox it * produces the probability of cutting in different dimensions. While this * function is absorbed in the logic of the different simpler scoring methods, * the scoring methods that are mode advanced (for example, trying to simulate * an Transductive Isolation Forest with streaming) require this function. A * different function can be used to simulate via non-RCFs. * * @param boundingBox bounding box of a set of points * @return array of probabilities of cutting in that specific dimension */ public static double[] defaultRCFgVecFunction(IBoundingBoxView boundingBox) { double[] answer = new double[boundingBox.getDimensions()]; for (int i = 0; i < boundingBox.getDimensions(); ++i) { double maxVal = boundingBox.getMaxValue(i); double minVal = boundingBox.getMinValue(i); double oldRange = maxVal - minVal; if (oldRange > 0) { answer[i] = oldRange; } } return answer; }; public static double[] toDoubleArray(float[] array) { checkNotNull(array, "array must not be null"); double[] result = new double[array.length]; for (int i = 0; i < array.length; i++) { result[i] = array[i]; } return result; } public static double[] toDoubleArrayNullable(float[] array) { return (array == null) ? null : toDoubleArray(array); } public static float[] toFloatArray(double[] array) { checkNotNull(array, "array must not be null"); float[] result = new float[array.length]; for (int i = 0; i < array.length; i++) { result[i] = (array[i] == 0) ? 0 : (float) array[i]; // eliminating -0.0 issues } return result; } public static float[] toFloatArrayNullable(double[] array) { return (array == null) ? null : toFloatArray(array); } public static int[] toIntArray(byte[] values) { checkNotNull(values, "array must not be null"); int[] result = new int[values.length]; for (int i = 0; i < values.length; i++) { result[i] = values[i] & 0xff; } return result; } public static int[] toIntArray(char[] values) { checkNotNull(values, "array must not be null"); int[] result = new int[values.length]; for (int i = 0; i < values.length; i++) { result[i] = values[i]; } return result; } public static char[] toCharArray(int[] values) { checkNotNull(values, "array must not be null"); char[] result = new char[values.length]; for (int i = 0; i < values.length; i++) { result[i] = (char) values[i]; } return result; } public static byte[] toByteArray(int[] values) { checkNotNull(values, "array must not be null"); byte[] result = new byte[values.length]; for (int i = 0; i < values.length; i++) { result[i] = (byte) values[i]; } return result; } } ================================================ FILE: Java/core/src/main/java/com/amazon/randomcutforest/ComponentList.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest; import java.util.ArrayList; import java.util.Collection; /** * A ComponentList is an ArrayList specialized to contain IComponentModel * instances. Executor classes operate on ComponentLists. * * @param The internal point representation expected by the * component models in this list. * @param The explicit data type of points being passed */ public class ComponentList extends ArrayList> { public ComponentList() { super(); } public ComponentList(Collection> collection) { super(collection); } public ComponentList(int initialCapacity) { super(initialCapacity); } } ================================================ FILE: Java/core/src/main/java/com/amazon/randomcutforest/IComponentModel.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest; import com.amazon.randomcutforest.config.IDynamicConfig; import com.amazon.randomcutforest.executor.ITraversable; import com.amazon.randomcutforest.executor.IUpdatable; /** * * @param The internal point representation expected by the * component models in this list. * @param The explicit data type of points being passed */ public interface IComponentModel extends ITraversable, IUpdatable, IDynamicConfig { } ================================================ FILE: Java/core/src/main/java/com/amazon/randomcutforest/IMultiVisitorFactory.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest; import com.amazon.randomcutforest.tree.ITree; @FunctionalInterface public interface IMultiVisitorFactory { MultiVisitor newVisitor(ITree tree, float[] point); default R liftResult(ITree tree, R result) { return result; } } ================================================ FILE: Java/core/src/main/java/com/amazon/randomcutforest/IVisitorFactory.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest; import com.amazon.randomcutforest.tree.ITree; @FunctionalInterface public interface IVisitorFactory { Visitor newVisitor(ITree tree, float[] point); default R liftResult(ITree tree, R result) { return result; } } ================================================ FILE: Java/core/src/main/java/com/amazon/randomcutforest/MultiVisitor.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest; import com.amazon.randomcutforest.tree.INodeView; /** * This is the interface for a visitor which can be used with * {RandomCutTree::traversePathToLeafAndVisitNodesMulti}. In this traversal * method, we optionally choose to split the visitor into two copies when * visiting nodes. Each copy then visits one of the paths down from that node. * The results from both visitors are combined before returning back up the * tree. */ public interface MultiVisitor extends Visitor { /** * Returns true of the traversal method should split the visitor (i.e., create a * copy) at this node. * * @param node A node in the tree traversal * @return true if the traversal should split the visitor into two copies at * this node, false otherwise. */ boolean trigger(final INodeView node); /** * Return a partial copy of this visitor. The original visitor plus the copy * will each traverse one branch of the tree. The fields not copied will be * filled in by the branches of the tree * * @return a copy of this visitor */ MultiVisitor newPartialCopy(); /** * Combine two visitors. The state of the argument visitor should be combined * with the state of this instance. This method is called after both visitors * have traversed one branch of the tree. * * @param other A second visitor */ void combine(MultiVisitor other); } ================================================ FILE: Java/core/src/main/java/com/amazon/randomcutforest/MultiVisitorFactory.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest; import java.util.function.BiFunction; import com.amazon.randomcutforest.tree.ITree; /** * This is the interface for a visitor which can be used with * {RandomCutTree::traversePathToLeafAndVisitNodesMulti}. In this traversal * method, we optionally choose to split the visitor into two copies when * visiting nodes. Each copy then visits one of the paths down from that node. * The results from both visitors are combined before returning back up the * tree. */ public class MultiVisitorFactory implements IMultiVisitorFactory { private final BiFunction, float[], MultiVisitor> newVisitor; private final BiFunction, R, R> liftResult; public MultiVisitorFactory(BiFunction, float[], MultiVisitor> newVisitor, BiFunction, R, R> liftResult) { this.newVisitor = newVisitor; this.liftResult = liftResult; } public MultiVisitorFactory(BiFunction, float[], MultiVisitor> newVisitor) { this(newVisitor, (tree, x) -> x); } @Override public MultiVisitor newVisitor(ITree tree, float[] point) { return newVisitor.apply(tree, point); } @Override public R liftResult(ITree tree, R result) { return liftResult.apply(tree, result); } } ================================================ FILE: Java/core/src/main/java/com/amazon/randomcutforest/PredictiveRandomCutForest.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest; import static com.amazon.randomcutforest.CommonUtils.checkArgument; import static com.amazon.randomcutforest.CommonUtils.toDoubleArray; import static com.amazon.randomcutforest.RandomCutForest.DEFAULT_BOUNDING_BOX_CACHE_FRACTION; import static com.amazon.randomcutforest.RandomCutForest.DEFAULT_CENTER_OF_MASS_ENABLED; import static com.amazon.randomcutforest.RandomCutForest.DEFAULT_INITIAL_ACCEPT_FRACTION; import static com.amazon.randomcutforest.RandomCutForest.DEFAULT_NUMBER_OF_TREES; import static com.amazon.randomcutforest.RandomCutForest.DEFAULT_OUTPUT_AFTER_FRACTION; import static com.amazon.randomcutforest.RandomCutForest.DEFAULT_PARALLEL_EXECUTION_ENABLED; import static com.amazon.randomcutforest.RandomCutForest.DEFAULT_SAMPLE_SIZE; import static com.amazon.randomcutforest.RandomCutForest.DEFAULT_SHINGLE_SIZE; import static com.amazon.randomcutforest.RandomCutForest.DEFAULT_STORE_SEQUENCE_INDEXES_ENABLED; import static com.amazon.randomcutforest.config.ImputationMethod.PREVIOUS; import static com.amazon.randomcutforest.preprocessor.Preprocessor.DEFAULT_START_NORMALIZATION; import static com.amazon.randomcutforest.preprocessor.Preprocessor.DEFAULT_STOP_NORMALIZATION; import static java.lang.Math.max; import static java.lang.Math.min; import java.util.Arrays; import java.util.Optional; import java.util.Random; import com.amazon.randomcutforest.config.ForestMode; import com.amazon.randomcutforest.config.ImputationMethod; import com.amazon.randomcutforest.config.TransformMethod; import com.amazon.randomcutforest.preprocessor.IPreprocessor; import com.amazon.randomcutforest.preprocessor.Preprocessor; import com.amazon.randomcutforest.returntypes.DensityOutput; import com.amazon.randomcutforest.returntypes.DiVector; import com.amazon.randomcutforest.returntypes.InterpolationMeasure; import com.amazon.randomcutforest.returntypes.SampleSummary; /** * This class provides a predictive imputation based on RCF (respecting the * arrow of time) alongside streaming normalization * * Many of these capabities existed since RCF 1.0 -- however it seems that * abstracting them into a single collected class can avoid the messier details * and make the capabilites more accessible. * * We reiterate the observation in * * https://opensearch.org/blog/random-cut-forests/ that an unsupervised * anomaly detection that infers "not normal" can be made to predict, "well, * what is normal then"? That is the basis of the time series forecasting in * RCFCaster in parkservices -- one can predict the most likely (approximately * minimum not normal score) value. The clustering inherent in RCF (for example, * see getRCFDistanceAttribution as an alternate scoring metric) and other * multicentroid methods can be then utilized to expose clusters of "likely" * values. * */ public class PredictiveRandomCutForest { protected TransformMethod transformMethod = TransformMethod.NORMALIZE; protected RandomCutForest forest; protected IPreprocessor preprocessor; protected ForestMode forestMode = ForestMode.STANDARD; public PredictiveRandomCutForest(Builder builder) { transformMethod = builder.transformMethod; Preprocessor.Builder preprocessorBuilder = Preprocessor.builder().shingleSize(builder.shingleSize) .transformMethod(builder.transformMethod).forestMode(builder.forestMode); int dimensions = builder.inputDimensions * builder.shingleSize; if (builder.forestMode == ForestMode.TIME_AUGMENTED) { dimensions += builder.shingleSize; // if time is not differenced, then it can be added as a column // without much difficulty preprocessorBuilder.normalizeTime(true); // force internal shingling for this option builder.internalShinglingEnabled = Optional.of(true); } else if (builder.forestMode == ForestMode.STREAMING_IMPUTE) { preprocessorBuilder.normalizeTime(true); builder.internalShinglingEnabled = Optional.of(true); preprocessorBuilder.imputationMethod(builder.imputationMethod); if (builder.fillValues != null) { preprocessorBuilder.fillValues(builder.fillValues); } preprocessorBuilder.useImputedFraction(builder.useImputedFraction.orElse(0.5)); } else { builder.internalShinglingEnabled = Optional.of(true); } forestMode = builder.forestMode; forest = builder.buildForest(); validateNonNegativeArray(builder.weights); preprocessorBuilder.inputLength(builder.inputDimensions); preprocessorBuilder.weights(builder.weights); preprocessorBuilder.weightTime(builder.weightTime.orElse(1.0)); preprocessorBuilder.transformDecay(builder.transformDecay.orElse(1.0 / builder.sampleSize)); // to be used later preprocessorBuilder.randomSeed(builder.randomSeed.orElse(0L) + 1); preprocessorBuilder.dimensions(dimensions); preprocessorBuilder.stopNormalization(builder.stopNormalization.orElse(DEFAULT_STOP_NORMALIZATION)); preprocessorBuilder.startNormalization(builder.startNormalization.orElse(DEFAULT_START_NORMALIZATION)); preprocessor = preprocessorBuilder.build(); } public PredictiveRandomCutForest(ForestMode forestMode, TransformMethod method, IPreprocessor preprocessor, RandomCutForest forest) { this.forestMode = forestMode; this.transformMethod = method; this.preprocessor = preprocessor; this.forest = forest; } void validateNonNegativeArray(double[] array) { if (array != null) { for (double element : array) { checkArgument(element >= 0, " has to be non-negative"); } } } /** * The following function provides a clustering of the predicted near neighbors * of the input point. Note that all of these functions were always available in * RCF * * @param inputPoint the input point, can have missing values * @param timestamp the timestamp for the input -- not useful * unless we are using TIME_AUGMENTED mode or * STREAMING_IMPUTE (for time series) * @param missingValues an integer array with the positions in * inputPoint which are unknown * @param numberOfRepresentatives a parameter that controls multi-centroid * clustering of the (predicted) neighbors -- 5 * is a good default. Setting this as 1 would * have a behavior similar to (but perhaps still * better than) k-means * @param shrinkage a parameter that controls the shape of the * clusters -- 1 would indicate behavior similar * to centroids * @param centrality a parameter in [0:1] that controls the * randomization/diversity in the prediction -- a * value of 1 would correspond to p50 predictions * and a value of 0 would correspond to looser * random search * @return a SampleSummary of the near neighbors in the same dimension as the * input (unless TIME_AUGMENTED, when the dimension increases by 1. */ public SampleSummary predict(float[] inputPoint, long timestamp, int[] missingValues, int numberOfRepresentatives, double shrinkage, double centrality) { checkArgument(inputPoint.length == preprocessor.getInputLength(), "incorrect length"); int[] newMissingValues = new int[0]; // avoiding null; allows missingvalues to be null if (missingValues != null) { checkArgument(missingValues.length <= inputPoint.length, " incorrect data"); newMissingValues = new int[missingValues.length]; int startPosition = forest.getDimensions() - forest.getDimensions() / preprocessor.getShingleSize(); for (int i = 0; i < missingValues.length; i++) { checkArgument(missingValues[i] >= 0, " missing values cannot be at negative position"); checkArgument(missingValues[i] <= inputPoint.length, "missing values cannot be at position larger than input length"); checkArgument(forestMode == ForestMode.TIME_AUGMENTED || missingValues[i] < inputPoint.length, "cannot be equal to input length"); newMissingValues[i] = (forestMode == ForestMode.STREAMING_IMPUTE) ? startPosition + missingValues[i] : missingValues[i]; } } // check when TIME_AUGMENTED and missingValue includes timestamp float[] point = preprocessor.getScaledShingledInput(toDoubleArray(inputPoint), timestamp, missingValues, forest); if (point == null) { return new SampleSummary(preprocessor.getInputLength()); } return preprocessor.invertInPlaceRecentSummaryBlock(forest.getConditionalFieldSummary(point, newMissingValues, numberOfRepresentatives, shrinkage, true, false, centrality, preprocessor.getShingleSize())); } public SampleSummary predict(float[] inputPoint, long timestamp, int[] missingValues) { return predict(inputPoint, timestamp, missingValues, 5, 0.3, 0.5); } /** * Near neighbors is an extreme example of prediction where there aare no * missing values * * @param inputPoint the input * @param timestamp the timestamp (not used unless for TIME_AUGMENTED and * STREAMING_IMPUTE) * @return returns a clustering of the near neighbors in the (time decaying) * sample maintained by RCF */ public SampleSummary neighborSummary(float[] inputPoint, long timestamp) { return predict(inputPoint, timestamp, null, 1, 0, 1); } /** * This is the anomalyScore() function in RCF -- that definition of score has * diverged from the original paper and perhaps the more descriptive name is * more useful. Note that it is important that this is Expectation of Inverse * versus Inverse of Expectation -- a la Jensen's Inequality. * * @param inputPoint the input point * @param timestamp the timestamp * @return a score in the range (0:log_2(sampleSize)) where larger values * indicate potential anomalies. Note that the score can remain elevated * due to shingling for a while -- use * ParkServices/ThresholdedRandomCutForest where the PredictorCorrector * architecture is used to evaluate the score further and produce a more * refined anomalyGrade()in [0:1] ; including setting the grade to 0 * (corrector) even though the score (of this function) is high. */ public double getExpectedInverseDepthScore(float[] inputPoint, long timestamp) { checkArgument(inputPoint.length == preprocessor.getInputLength(), "incorrect length"); float[] point = preprocessor.getScaledShingledInput(toDoubleArray(inputPoint), timestamp, null, forest); return (point != null) ? forest.getAnomalyScore(point) : 0; } /** * Same as above -- but now the subparts of the score are exposed in the full * RCF space which is inputDimension (add +1 for TIME_AUGMENTED) times the * shingleSize. For each of these, the score can arise from the input value * being HIGH or LOW (as determined by the ensemble of trees) -- which is * returned in the DiVector structure. This is extremely useful in pinpointing * which attribute or which value in the shingle was likely indicator of the * anomaly, and is used exactly such in PredictorCorrector in ParkServices. This * function enables the use of PreProcessor. * * @param inputPoint the input point * @param timestamp the timestamp for the point (used only in TIME_AUGMENTED * and STREAMING_IMPUTE) * @return a divector such that getHighLowSum() would equal (up to floating * point precision over summing values across the dimensions in RCF * space) the value of getExpectedInverseDepthScore() */ public DiVector getExpectedInverseDepthAttribution(float[] inputPoint, long timestamp) { checkArgument(inputPoint.length == preprocessor.getInputLength(), "incorrect length"); float[] point = preprocessor.getScaledShingledInput(toDoubleArray(inputPoint), timestamp, null, forest); return (point != null) ? forest.getAnomalyAttribution(point) : new DiVector(forest.getDimensions()); } /** * One of the visions for RCF (see blog above) was that the same data structure * that can compute anomaly scores somewhat effectively, also has information * regarding other measures (say X) of the point set -- and if that measure X * also is indicative of anomaly then RCF should be able to vend X. One such * example is density around a point set and this was available in RCF and is * carried over here. It is primarily used via the DISTANCE_MODE computation in * ScoringStrategy in ParkServices. This function enables the use of * preprocessor. * * @param inputPoint the input point * @param timestamp the timestamp of the current point * @return a density output structure -- see * examples/dynamicinference/dynamicdensity */ public DensityOutput getSimpleDensity(float[] inputPoint, long timestamp) { checkArgument(inputPoint.length == preprocessor.getInputLength(), "incorrect length"); float[] scaled = preprocessor.getScaledShingledInput(toDoubleArray(inputPoint), timestamp, null, forest); DensityOutput answer = (scaled != null) ? forest.getSimpleDensity(scaled) : new DensityOutput(new InterpolationMeasure(inputPoint.length, 0)); double[] scale = preprocessor.getScale(); for (int i = 0; i < answer.getDimensions(); i++) { answer.distances.high[i] *= scale[i % scale.length]; answer.distances.low[i] *= scale[i % scale.length]; } return answer; } /** * The following provides an alternate scoring (as well as exposing the subparts * of the computation) based on the density output. The function getHighLowSum() * would correspond to a score (where higher corresponds to more unlikely * behavior). This is based on the recursive partitioning in the RCF trees and * the fact that they preserve distances -- this is used in DISTANCE_MODE and * MULTI_MODE in ParkService/ThresholdedRandomCutForest See the example * parkservices/NumericGLADExample * * @param inputPoint the input point * @param timestamp the timestamp of the point * @return a divector in RCF space of size inputDimension (add +1 for * TIME_AUGMENTED) times the shingleSize; with the same interpretation * in getExpectedInverseDepthAttribution(). This score is not calibrated * to be in any bounded ranges, and should perhaps be used as a * corroborative signal with getExpectedInverseDepthAttribution */ public DiVector getRCFDistanceAttribution(float[] inputPoint, long timestamp) { DensityOutput test = getSimpleDensity(inputPoint, timestamp); return test.distances; } public void update(float[] record, long timestamp) { update(record, timestamp, null); } public void update(float[] record, long timestamp, int[] missing) { float[] scaled = preprocessor.getScaledShingledInput(toDoubleArray(record), timestamp, missing, forest); preprocessor.update(toDoubleArray(record), scaled, timestamp, missing, forest); } public RandomCutForest getForest() { return forest; } public IPreprocessor getPreprocessor() { return preprocessor; } public ForestMode getForestMode() { return forestMode; } public TransformMethod getTransformMethod() { return transformMethod; } /** * @return a new builder. */ public static Builder builder() { return new Builder<>(); } public static class Builder> { // We use Optional types for optional primitive fields when it doesn't make // sense to use a constant default. protected int inputDimensions; protected int sampleSize = DEFAULT_SAMPLE_SIZE; protected Optional outputAfter = Optional.empty(); protected Optional startNormalization = Optional.empty(); protected Optional stopNormalization = Optional.empty(); protected int numberOfTrees = DEFAULT_NUMBER_OF_TREES; protected Optional timeDecay = Optional.empty(); protected Optional lowerThreshold = Optional.empty(); protected Optional weightTime = Optional.empty(); protected boolean normalizeTime = true; protected Optional randomSeed = Optional.empty(); protected boolean storeSequenceIndexesEnabled = DEFAULT_STORE_SEQUENCE_INDEXES_ENABLED; protected boolean centerOfMassEnabled = DEFAULT_CENTER_OF_MASS_ENABLED; protected boolean parallelExecutionEnabled = DEFAULT_PARALLEL_EXECUTION_ENABLED; protected Optional threadPoolSize = Optional.empty(); protected double boundingBoxCacheFraction = DEFAULT_BOUNDING_BOX_CACHE_FRACTION; protected int shingleSize = DEFAULT_SHINGLE_SIZE; protected Optional internalShinglingEnabled = Optional.empty(); protected double initialAcceptFraction = DEFAULT_INITIAL_ACCEPT_FRACTION; protected TransformMethod transformMethod = TransformMethod.NONE; protected ImputationMethod imputationMethod = PREVIOUS; protected ForestMode forestMode = ForestMode.STANDARD; protected double[] weights = null; protected double[] fillValues = null; protected Optional useImputedFraction = Optional.empty(); protected Optional transformDecay = Optional.empty(); void validate() { if (forestMode == ForestMode.TIME_AUGMENTED) { if (internalShinglingEnabled.isPresent()) { checkArgument(shingleSize == 1 || internalShinglingEnabled.get(), " shingle size has to be 1 or " + "internal shingling must turned on"); checkArgument(transformMethod == TransformMethod.NONE || internalShinglingEnabled.get(), " internal shingling must turned on for transforms"); } else { internalShinglingEnabled = Optional.of(true); } if (useImputedFraction.isPresent()) { throw new IllegalArgumentException(" imputation infeasible"); } } else if (forestMode == ForestMode.STREAMING_IMPUTE) { checkArgument(shingleSize > 1, "imputation with shingle size 1 is not meaningful"); internalShinglingEnabled.ifPresent(x -> checkArgument(x, " input cannot be shingled (even if internal representation is different) ")); } else { if (!internalShinglingEnabled.isPresent()) { internalShinglingEnabled = Optional.of(true); } if (useImputedFraction.isPresent()) { throw new IllegalArgumentException(" imputation infeasible"); } } if (startNormalization.isPresent()) { // we should not be setting normalizations unless we are careful if (outputAfter.isPresent()) { // can be overspecified checkArgument(outputAfter.get() + shingleSize - 1 > startNormalization.get(), "output after has to wait till normalization, reduce normalization"); } else { int n = startNormalization.get(); checkArgument(n > 0, " startNormalization has to be positive"); // if start normalization is low then first few output can be 0 outputAfter = Optional .of(max(max(1, (int) (sampleSize * DEFAULT_OUTPUT_AFTER_FRACTION)), n - shingleSize + 1)); } } else { if (outputAfter.isPresent()) { startNormalization = Optional.of(min(DEFAULT_START_NORMALIZATION, outputAfter.get())); } } } public PredictiveRandomCutForest build() { validate(); return new PredictiveRandomCutForest(this); } protected RandomCutForest buildForest() { int dimensions = inputDimensions * shingleSize + ((forestMode == ForestMode.TIME_AUGMENTED) ? shingleSize : 0); RandomCutForest.Builder builder = new RandomCutForest.Builder().dimensions(dimensions) .sampleSize(sampleSize).numberOfTrees(numberOfTrees) .storeSequenceIndexesEnabled(storeSequenceIndexesEnabled).centerOfMassEnabled(centerOfMassEnabled) .parallelExecutionEnabled(parallelExecutionEnabled) .boundingBoxCacheFraction(boundingBoxCacheFraction).shingleSize(shingleSize) .internalShinglingEnabled(internalShinglingEnabled.get()) .initialAcceptFraction(initialAcceptFraction); outputAfter.ifPresent(builder::outputAfter); timeDecay.ifPresent(builder::timeDecay); randomSeed.ifPresent(builder::randomSeed); threadPoolSize.ifPresent(builder::threadPoolSize); return builder.build(); } public T inputDimensions(int dimensions) { this.inputDimensions = dimensions; return (T) this; } public T sampleSize(int sampleSize) { this.sampleSize = sampleSize; return (T) this; } public T startNormalization(int startNormalization) { this.startNormalization = Optional.of(startNormalization); return (T) this; } public T stopNormalization(int stopNormalization) { this.stopNormalization = Optional.of(stopNormalization); return (T) this; } public T outputAfter(int outputAfter) { this.outputAfter = Optional.of(outputAfter); return (T) this; } public T numberOfTrees(int numberOfTrees) { this.numberOfTrees = numberOfTrees; return (T) this; } public T shingleSize(int shingleSize) { this.shingleSize = shingleSize; return (T) this; } public T timeDecay(double timeDecay) { this.timeDecay = Optional.of(timeDecay); return (T) this; } public T transformDecay(double transformDecay) { this.transformDecay = Optional.of(transformDecay); return (T) this; } public T randomSeed(long randomSeed) { this.randomSeed = Optional.of(randomSeed); return (T) this; } public T centerOfMassEnabled(boolean centerOfMassEnabled) { this.centerOfMassEnabled = centerOfMassEnabled; return (T) this; } public T parallelExecutionEnabled(boolean parallelExecutionEnabled) { this.parallelExecutionEnabled = parallelExecutionEnabled; return (T) this; } public T forestMode(ForestMode forestMode) { this.forestMode = forestMode; return (T) this; } public T threadPoolSize(int threadPoolSize) { this.threadPoolSize = Optional.of(threadPoolSize); return (T) this; } public T storeSequenceIndexesEnabled(boolean storeSequenceIndexesEnabled) { this.storeSequenceIndexesEnabled = storeSequenceIndexesEnabled; return (T) this; } public T boundingBoxCacheFraction(double boundingBoxCacheFraction) { this.boundingBoxCacheFraction = boundingBoxCacheFraction; return (T) this; } public T initialAcceptFraction(double initialAcceptFraction) { this.initialAcceptFraction = initialAcceptFraction; return (T) this; } public Random getRandom() { // If a random seed was given, use it to create a new Random. Otherwise, call // the 0-argument constructor return randomSeed.map(Random::new).orElseGet(Random::new); } public T weights(double[] values) { // values cannot be a null this.weights = Arrays.copyOf(values, values.length); return (T) this; } public T imputationMethod(ImputationMethod imputationMethod) { this.imputationMethod = imputationMethod; return (T) this; } public T transformMethod(TransformMethod method) { this.transformMethod = method; return (T) this; } public T fillValues(double[] values) { // values cannot be a null this.fillValues = Arrays.copyOf(values, values.length); return (T) this; } public T useImputedFraction(double fraction) { this.useImputedFraction = Optional.of(fraction); return (T) this; } public T weightTime(double value) { this.weightTime = Optional.of(value); return (T) this; } public T normalizeTime(boolean normalizeTime) { this.normalizeTime = normalizeTime; return (T) this; } } } ================================================ FILE: Java/core/src/main/java/com/amazon/randomcutforest/RandomCutForest.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest; import static com.amazon.randomcutforest.CommonUtils.checkArgument; import static com.amazon.randomcutforest.CommonUtils.checkNotNull; import static com.amazon.randomcutforest.CommonUtils.toDoubleArray; import static com.amazon.randomcutforest.CommonUtils.toFloatArray; import static com.amazon.randomcutforest.summarization.Summarizer.DEFAULT_SEPARATION_RATIO_FOR_MERGE; import static java.lang.Math.max; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; import java.util.Optional; import java.util.Random; import java.util.function.BiFunction; import java.util.function.BinaryOperator; import java.util.function.Function; import java.util.stream.Collector; import com.amazon.randomcutforest.anomalydetection.AnomalyAttributionVisitor; import com.amazon.randomcutforest.anomalydetection.AnomalyScoreVisitor; import com.amazon.randomcutforest.anomalydetection.DynamicAttributionVisitor; import com.amazon.randomcutforest.anomalydetection.DynamicScoreVisitor; import com.amazon.randomcutforest.anomalydetection.SimulatedTransductiveScalarScoreVisitor; import com.amazon.randomcutforest.config.Config; import com.amazon.randomcutforest.config.Precision; import com.amazon.randomcutforest.executor.AbstractForestTraversalExecutor; import com.amazon.randomcutforest.executor.AbstractForestUpdateExecutor; import com.amazon.randomcutforest.executor.IStateCoordinator; import com.amazon.randomcutforest.executor.ParallelForestTraversalExecutor; import com.amazon.randomcutforest.executor.ParallelForestUpdateExecutor; import com.amazon.randomcutforest.executor.PointStoreCoordinator; import com.amazon.randomcutforest.executor.SamplerPlusTree; import com.amazon.randomcutforest.executor.SequentialForestTraversalExecutor; import com.amazon.randomcutforest.executor.SequentialForestUpdateExecutor; import com.amazon.randomcutforest.imputation.ConditionalSampleSummarizer; import com.amazon.randomcutforest.imputation.ImputeVisitor; import com.amazon.randomcutforest.inspect.NearNeighborVisitor; import com.amazon.randomcutforest.interpolation.SimpleInterpolationVisitor; import com.amazon.randomcutforest.returntypes.ConditionalTreeSample; import com.amazon.randomcutforest.returntypes.ConvergingAccumulator; import com.amazon.randomcutforest.returntypes.DensityOutput; import com.amazon.randomcutforest.returntypes.DiVector; import com.amazon.randomcutforest.returntypes.InterpolationMeasure; import com.amazon.randomcutforest.returntypes.Neighbor; import com.amazon.randomcutforest.returntypes.OneSidedConvergingDiVectorAccumulator; import com.amazon.randomcutforest.returntypes.OneSidedConvergingDoubleAccumulator; import com.amazon.randomcutforest.returntypes.RangeVector; import com.amazon.randomcutforest.returntypes.SampleSummary; import com.amazon.randomcutforest.sampler.CompactSampler; import com.amazon.randomcutforest.sampler.IStreamSampler; import com.amazon.randomcutforest.store.IPointStore; import com.amazon.randomcutforest.store.PointStore; import com.amazon.randomcutforest.summarization.ICluster; import com.amazon.randomcutforest.summarization.Summarizer; import com.amazon.randomcutforest.tree.IBoundingBoxView; import com.amazon.randomcutforest.tree.ITree; import com.amazon.randomcutforest.tree.RandomCutTree; import com.amazon.randomcutforest.util.ShingleBuilder; /** * The RandomCutForest class is the interface to the algorithms in this package, * and includes methods for anomaly detection, anomaly detection with * attribution, density estimation, imputation, and forecasting. A Random Cut * Forest is a collection of Random Cut Trees and stream samplers. When an * update call is made to a Random Cut Forest, each sampler is independently * updated with the submitted (and if the point is accepted by the sampler, then * the corresponding Random Cut Tree is also updated. Similarly, when an * algorithm method is called, the Random Cut Forest proxies to the trees which * implement the actual scoring logic. The Random Cut Forest then combines * partial results into a final results. */ public class RandomCutForest { /** * Default sample size. This is the number of points retained by the stream * sampler. */ public static final int DEFAULT_SAMPLE_SIZE = 256; /** * Default fraction used to compute the amount of points required by stream * samplers before results are returned. */ public static final double DEFAULT_OUTPUT_AFTER_FRACTION = 0.25; /** * If the user doesn't specify an explicit time decay value, then we set it to * the inverse of this coefficient times sample size. */ public static final double DEFAULT_SAMPLE_SIZE_COEFFICIENT_IN_TIME_DECAY = 10.0; /** * Default number of trees to use in the forest. */ public static final int DEFAULT_NUMBER_OF_TREES = 50; /** * By default, trees will not store sequence indexes. */ public static final boolean DEFAULT_STORE_SEQUENCE_INDEXES_ENABLED = false; /** * By default, trees will accept every point until full. */ public static final double DEFAULT_INITIAL_ACCEPT_FRACTION = 1.0; /** * By default, the collection of points stored in the forest will increase from * a small size, as needed to maximum capacity */ public static final boolean DEFAULT_DYNAMIC_RESIZING_ENABLED = true; /** * By default, shingling will be external */ public static final boolean DEFAULT_INTERNAL_SHINGLING_ENABLED = false; /** * By default, shingles will be a sliding window and not a cyclic buffer */ public static final boolean DEFAULT_INTERNAL_ROTATION_ENABLED = false; /** * By default, point stores will favor speed of size for larger shingle sizes */ public static final boolean DEFAULT_DIRECT_LOCATION_MAP = false; /** * Default floating-point precision for internal data structures. */ public static final Precision DEFAULT_PRECISION = Precision.FLOAT_32; /** * fraction of bounding boxes maintained by each tree */ public static final double DEFAULT_BOUNDING_BOX_CACHE_FRACTION = 1.0; /** * By default, nodes will not store center of mass. */ public static final boolean DEFAULT_CENTER_OF_MASS_ENABLED = false; /** * By default RCF is unaware of shingle size */ public static final int DEFAULT_SHINGLE_SIZE = 1; /** * Parallel execution is enabled by default. */ public static final boolean DEFAULT_PARALLEL_EXECUTION_ENABLED = false; public static final boolean DEFAULT_APPROXIMATE_ANOMALY_SCORE_HIGH_IS_CRITICAL = true; public static final double DEFAULT_APPROXIMATE_DYNAMIC_SCORE_PRECISION = 0.1; public static final int DEFAULT_APPROXIMATE_DYNAMIC_SCORE_MIN_VALUES_ACCEPTED = 5; /** * Random number generator used by the forest. */ protected Random random; /** * The number of dimensions in the input data. */ protected final int dimensions; /** * The sample size used by stream samplers in this forest. */ protected final int sampleSize; /** * The shingle size (if known) */ protected final int shingleSize; /** * The input dimensions for known shingle size and internal shingling */ protected final int inputDimensions; /** * The number of points required by stream samplers before results are returned. */ protected final int outputAfter; /** * The number of trees in this forest. */ protected final int numberOfTrees; /** * The decay factor used by stream samplers in this forest. */ protected double timeDecay; /** * Store the time information */ protected final boolean storeSequenceIndexesEnabled; /** * enables internal shingling */ protected final boolean internalShinglingEnabled; /** * The following can be set between 0 and 1 (inclusive) to achieve tradeoff * between smaller space, lower throughput and larger space, larger throughput */ protected final double boundingBoxCacheFraction; /** * Enable center of mass at internal nodes */ protected final boolean centerOfMassEnabled; /** * Enable parallel execution. */ protected final boolean parallelExecutionEnabled; /** * Number of threads to use in the thread pool if parallel execution is enabled. */ protected final int threadPoolSize; /** * A string to define an "execution mode" that can be used to set multiple * configuration options. This field is not currently in use. */ protected String executionMode; protected IStateCoordinator stateCoordinator; protected ComponentList components; /** * This flag is initialized to false. It is set to true when all component * models are ready. */ private boolean outputReady; /** * used for initializing the compact forests */ private final int initialPointStoreSize; private final int pointStoreCapacity; /** * An implementation of forest traversal algorithms. */ protected AbstractForestTraversalExecutor traversalExecutor; /** * An implementation of forest update algorithms. */ protected AbstractForestUpdateExecutor updateExecutor; public

RandomCutForest(Builder builder, IStateCoordinator stateCoordinator, ComponentList components, Random random) { this(builder, false); checkNotNull(stateCoordinator, "updateCoordinator must not be null"); checkNotNull(components, "componentModels must not be null"); checkNotNull(random, "random must not be null"); this.stateCoordinator = stateCoordinator; this.components = components; this.random = random; initExecutors(stateCoordinator, components); } public RandomCutForest(Builder builder) { this(builder, false); random = builder.getRandom(); PointStore tempStore = PointStore.builder().internalRotationEnabled(builder.internalRotationEnabled) .capacity(pointStoreCapacity).initialSize(initialPointStoreSize) .internalShinglingEnabled(internalShinglingEnabled).shingleSize(shingleSize).dimensions(dimensions) .build(); IStateCoordinator stateCoordinator = new PointStoreCoordinator<>(tempStore); ComponentList components = new ComponentList<>(numberOfTrees); for (int i = 0; i < numberOfTrees; i++) { ITree tree = new RandomCutTree.Builder().capacity(sampleSize) .randomSeed(random.nextLong()).pointStoreView(tempStore) .boundingBoxCacheFraction(boundingBoxCacheFraction).centerOfMassEnabled(centerOfMassEnabled) .storeSequenceIndexesEnabled(storeSequenceIndexesEnabled).outputAfter(1).build(); IStreamSampler sampler = CompactSampler.builder().capacity(sampleSize).timeDecay(timeDecay) .randomSeed(random.nextLong()).storeSequenceIndexesEnabled(storeSequenceIndexesEnabled) .initialAcceptFraction(builder.initialAcceptFraction).build(); components.add(new SamplerPlusTree<>(sampler, tree)); } this.stateCoordinator = stateCoordinator; this.components = components; initExecutors(stateCoordinator, components); } protected void initExecutors(IStateCoordinator updateCoordinator, ComponentList components) { if (parallelExecutionEnabled) { traversalExecutor = new ParallelForestTraversalExecutor(components, threadPoolSize); updateExecutor = new ParallelForestUpdateExecutor<>(updateCoordinator, components, threadPoolSize); } else { traversalExecutor = new SequentialForestTraversalExecutor(components); updateExecutor = new SequentialForestUpdateExecutor<>(updateCoordinator, components); } } /** * This constructor is responsible for initializing a forest's configuration * variables from a builder. The method signature contains a boolean argument * that isn't used. This argument exists only to create a distinct method * signature so that we can expose {@link #RandomCutForest(Builder)} as a * protected constructor. * * @param builder A Builder instance giving the desired random cut forest * configuration. * @param notUsed This parameter is not used. */ protected RandomCutForest(Builder builder, boolean notUsed) { checkArgument(builder.numberOfTrees > 0, "numberOfTrees must be greater than 0"); checkArgument(builder.sampleSize > 0, "sampleSize must be greater than 0"); builder.outputAfter.ifPresent(n -> checkArgument(n > 0, "outputAfter must be greater than 0")); checkArgument(builder.dimensions > 0, "dimensions must be greater than 0"); builder.timeDecay .ifPresent(timeDecay -> checkArgument(timeDecay >= 0, "timeDecay must be greater than or equal to 0")); builder.threadPoolSize.ifPresent(n -> { checkArgument(n >= 0, "cannot be negative"); checkArgument((n > 0) || (!builder.parallelExecutionEnabled), "threadPoolSize must be greater/equal than 0. To disable thread pool, set parallel execution to 'false'."); }); checkArgument(builder.shingleSize == 1 || builder.dimensions % builder.shingleSize == 0, "wrong shingle size"); if (builder.internalRotationEnabled) { checkArgument(builder.internalShinglingEnabled, " enable internal shingling"); } builder.initialPointStoreSize .ifPresent(n -> checkArgument(n > 0, "initial point store must be greater than 0")); checkArgument(builder.boundingBoxCacheFraction >= 0, "cache cannot be negative"); checkArgument(builder.boundingBoxCacheFraction <= 1, "incorrect cache fraction range"); numberOfTrees = builder.numberOfTrees; sampleSize = builder.sampleSize; outputAfter = builder.outputAfter.orElse(max(1, (int) (sampleSize * DEFAULT_OUTPUT_AFTER_FRACTION))); internalShinglingEnabled = builder.internalShinglingEnabled; shingleSize = builder.shingleSize; dimensions = builder.dimensions; timeDecay = builder.timeDecay.orElse(1.0 / (DEFAULT_SAMPLE_SIZE_COEFFICIENT_IN_TIME_DECAY * sampleSize)); storeSequenceIndexesEnabled = builder.storeSequenceIndexesEnabled; centerOfMassEnabled = builder.centerOfMassEnabled; parallelExecutionEnabled = builder.parallelExecutionEnabled; boundingBoxCacheFraction = builder.boundingBoxCacheFraction; builder.directLocationMapEnabled = builder.directLocationMapEnabled || shingleSize == 1; inputDimensions = (internalShinglingEnabled) ? dimensions / shingleSize : dimensions; pointStoreCapacity = max(sampleSize * numberOfTrees + 1, 2 * sampleSize); initialPointStoreSize = builder.initialPointStoreSize.orElse(2 * sampleSize); if (parallelExecutionEnabled) { threadPoolSize = builder.threadPoolSize.orElse(Runtime.getRuntime().availableProcessors() - 1); } else { threadPoolSize = 0; } } /** * @return a new RandomCutForest builder. */ public static Builder builder() { return new Builder(); } /** * Create a new RandomCutForest with optional arguments set to default values. * * @param dimensions The number of dimension in the input data. * @param randomSeed The random seed to use to create the forest random number * generator * @return a new RandomCutForest with optional arguments set to default values. */ public static RandomCutForest defaultForest(int dimensions, long randomSeed) { return builder().dimensions(dimensions).randomSeed(randomSeed).build(); } /** * Create a new RandomCutForest with optional arguments set to default values. * * @param dimensions The number of dimension in the input data. * @return a new RandomCutForest with optional arguments set to default values. */ public static RandomCutForest defaultForest(int dimensions) { return builder().dimensions(dimensions).build(); } /** * @return the number of trees in the forest. */ public int getNumberOfTrees() { return numberOfTrees; } /** * @return the sample size used by stream samplers in this forest. */ public int getSampleSize() { return sampleSize; } /** * @return the shingle size used by the point store. */ public int getShingleSize() { return shingleSize; } /** * @return the number of points required by stream samplers before results are * returned. */ public int getOutputAfter() { return outputAfter; } /** * @return the number of dimensions in the data points accepted by this forest. */ public int getDimensions() { return dimensions; } /** * @return return the decay factor used by stream samplers in this forest. */ public double getTimeDecay() { return timeDecay; } /** * @return true if points are saved with sequence indexes, false otherwise. */ public boolean isStoreSequenceIndexesEnabled() { return storeSequenceIndexesEnabled; } /** * For compact forests, users can choose to specify the desired floating-point * precision to use internally to store points. Choosing single-precision will * reduce the memory size of the model at the cost of requiring double/float * conversions. * * @return the desired precision to use internally to store points. */ public Precision getPrecision() { return Precision.FLOAT_32; } @Deprecated public boolean isCompact() { return true; } /** * @return true if internal shingling is performed, false otherwise. */ public boolean isInternalShinglingEnabled() { return internalShinglingEnabled; } /** * @return true if tree nodes retain the center of mass, false otherwise. */ public boolean isCenterOfMassEnabled() { return centerOfMassEnabled; } /** * @return true if parallel execution is enabled, false otherwise. */ public boolean isParallelExecutionEnabled() { return parallelExecutionEnabled; } public double getBoundingBoxCacheFraction() { return boundingBoxCacheFraction; } /** * @return the number of threads in the thread pool if parallel execution is * enabled, 0 otherwise. */ public int getThreadPoolSize() { return threadPoolSize; } public IStateCoordinator getUpdateCoordinator() { return stateCoordinator; } public ComponentList getComponents() { return components; } /** * used for scoring and other function, expands to a shingled point in either * case performs a clean copy * * @param point input point * @return a shingled copy or a clean copy */ public float[] transformToShingledPoint(float[] point) { return stateCoordinator.getStore().transformToShingledPoint(point); } /** * does the pointstore use rotated shingles * * @return true/false based on pointstore */ public boolean isRotationEnabled() { return stateCoordinator.getStore().isInternalRotationEnabled(); } /** * transforms the missing indices on the input point to the corresponding * indices of a shingled point * * @param indexList input array of missing values * @param length length of the input array * @return output array of missing values corresponding to shingle */ protected int[] transformIndices(int[] indexList, int length) { return (internalShinglingEnabled && length == inputDimensions) ? stateCoordinator.getStore().transformIndices(indexList) : indexList; } /** * * @return the last known shingled point seen */ public float[] lastShingledPoint() { checkArgument(internalShinglingEnabled, "incorrect use"); return stateCoordinator.getStore().getInternalShingle(); } /** * * @return the sequence index of the last known shingled point. If internal * shingling is not enabled, then this would correspond to the number of * updates */ public long nextSequenceIndex() { return stateCoordinator.getStore().getNextSequenceIndex(); } /** * Update the forest with the given point. The point is submitted to each * sampler in the forest. If the sampler accepts the point, the point is * submitted to the update method in the corresponding Random Cut Tree. * * @param point The point used to update the forest. * @param updateShingleOnly only update the shingle (true for internal * shingling) */ public void update(float[] point, boolean updateShingleOnly) { checkNotNull(point, "point must not be null"); checkArgument(internalShinglingEnabled || point.length == dimensions, String.format("point.length must equal %d", dimensions)); checkArgument(!internalShinglingEnabled || point.length == inputDimensions, String.format("point.length must equal %d for internal shingling", inputDimensions)); checkArgument(!updateShingleOnly || internalShinglingEnabled, "update shingle setting is only valid for internal shingling"); updateExecutor.update(point, updateShingleOnly); } @Deprecated public void update(double[] point) { update(toFloatArray(point), false); } public void update(float[] point) { update(point, false); } /** * Update the forest with the given point and a timestamp. The point is * submitted to each sampler in the forest as if that timestamp was the correct * stamp. storeSequenceIndexes must be false since the algorithm will not verify * the correctness of the timestamp. * * @param point The point used to update the forest. * @param sequenceNum The timestamp of the corresponding point */ public void update(double[] point, long sequenceNum) { checkNotNull(point, "point must not be null"); update(toFloatArray(point), sequenceNum); } public void update(float[] point, long sequenceNum) { checkNotNull(point, "point must not be null"); checkArgument(!internalShinglingEnabled, "cannot be applied with internal shingling"); checkArgument(point.length == dimensions, () -> "point.length must equal to " + dimensions); updateExecutor.update(point, sequenceNum); } /** * Update the forest such that each tree caches a fraction of the bounding * boxes. This allows for a tradeoff between speed and storage. * * @param cacheFraction The (approximate) fraction of bounding boxes used in * caching. */ public void setBoundingBoxCacheFraction(double cacheFraction) { checkArgument(0 <= cacheFraction, "cache cannot be negative"); checkArgument(cacheFraction <= 1, "cacheFraction must be between 0 and 1 (inclusive)"); updateExecutor.getComponents().forEach(c -> c.setConfig(Config.BOUNDING_BOX_CACHE_FRACTION, cacheFraction)); } /** * changes the setting of time dependent sampling on the fly * * @param timeDecay new value of sampling rate */ public void setTimeDecay(double timeDecay) { checkArgument(0 <= timeDecay, "timeDecay must be greater than or equal to 0"); this.timeDecay = timeDecay; updateExecutor.getComponents().forEach(c -> c.setConfig(Config.TIME_DECAY, timeDecay)); } /** * Visit each of the trees in the forest and combine the individual results into * an aggregate result. A visitor is constructed for each tree using the visitor * factory, and then submitted to * {@link RandomCutTree#traverse(float[], IVisitorFactory)}. The results from * all the trees are combined using the accumulator and then transformed using * the finisher before being returned. Trees are visited in parallel using * {@link java.util.Collection#parallelStream()}. * * @param point The point that defines the traversal path. * @param visitorFactory A factory method which is invoked for each tree to * construct a visitor. * @param accumulator A function that combines the results from individual * trees into an aggregate result. * @param finisher A function called on the aggregate result in order to * produce the final result. * @param The visitor result type. This is the type that will be * returned after traversing each individual tree. * @param The final type, after any final normalization at the * forest level. * @return The aggregated and finalized result after sending a visitor through * each tree in the forest. */ public S traverseForest(float[] point, IVisitorFactory visitorFactory, BinaryOperator accumulator, Function finisher) { checkNotNull(point, "point must not be null"); checkArgument(point.length == dimensions, () -> "point.length must equal to " + dimensions); checkNotNull(visitorFactory, "visitorFactory must not be null"); checkNotNull(accumulator, "accumulator must not be null"); checkNotNull(finisher, "finisher must not be null"); return traversalExecutor.traverseForest(point, visitorFactory, accumulator, finisher); } /** * Visit each of the trees in the forest and combine the individual results into * an aggregate result. A visitor is constructed for each tree using the visitor * factory, and then submitted to * {@link RandomCutTree#traverse(float[], IVisitorFactory)}. The results from * individual trees are collected using the {@link java.util.stream.Collector} * and returned. Trees are visited in parallel using * {@link java.util.Collection#parallelStream()}. * * @param point The point that defines the traversal path. * @param visitorFactory A factory method which is invoked for each tree to * construct a visitor. * @param collector A collector used to aggregate individual tree results * into a final result. * @param The visitor result type. This is the type that will be * returned after traversing each individual tree. * @param The final type, after any final normalization at the * forest level. * @return The aggregated and finalized result after sending a visitor through * each tree in the forest. */ public S traverseForest(float[] point, IVisitorFactory visitorFactory, Collector collector) { checkNotNull(point, "point must not be null"); checkArgument(point.length == dimensions, () -> "point.length must equal to " + dimensions); checkNotNull(visitorFactory, "visitorFactory must not be null"); checkNotNull(collector, "collector must not be null"); return traversalExecutor.traverseForest(point, visitorFactory, collector); } /** * Visit each of the trees in the forest sequentially and combine the individual * results into an aggregate result. A visitor is constructed for each tree * using the visitor factory, and then submitted to * {@link RandomCutTree#traverse(float[], IVisitorFactory)}. The results from * all the trees are combined using the {@link ConvergingAccumulator}, and the * method stops visiting trees after convergence is reached. The result is * transformed using the finisher before being returned. * * @param point The point that defines the traversal path. * @param visitorFactory A factory method which is invoked for each tree to * construct a visitor. * @param accumulator An accumulator that combines the results from * individual trees into an aggregate result and checks to * see if the result can be returned without further * processing. * @param finisher A function called on the aggregate result in order to * produce the final result. * @param The visitor result type. This is the type that will be * returned after traversing each individual tree. * @param The final type, after any final normalization at the * forest level. * @return The aggregated and finalized result after sending a visitor through * each tree in the forest. */ public S traverseForest(float[] point, IVisitorFactory visitorFactory, ConvergingAccumulator accumulator, Function finisher) { checkNotNull(point, "point must not be null"); checkArgument(point.length == dimensions, () -> "point.length must equal to " + dimensions); checkNotNull(visitorFactory, "visitorFactory must not be null"); checkNotNull(accumulator, "accumulator must not be null"); checkNotNull(finisher, "finisher must not be null"); return traversalExecutor.traverseForest(point, visitorFactory, accumulator, finisher); } /** * Visit each of the trees in the forest and combine the individual results into * an aggregate result. A multi-visitor is constructed for each tree using the * visitor factory, and then submitted to * {@link RandomCutTree#traverseMulti(float[], IMultiVisitorFactory)}. The * results from all the trees are combined using the accumulator and then * transformed using the finisher before being returned. * * @param point The point that defines the traversal path. * @param visitorFactory A factory method which is invoked for each tree to * construct a multi-visitor. * @param accumulator A function that combines the results from individual * trees into an aggregate result. * @param finisher A function called on the aggregate result in order to * produce the final result. * @param The visitor result type. This is the type that will be * returned after traversing each individual tree. * @param The final type, after any final normalization at the * forest level. * @return The aggregated and finalized result after sending a visitor through * each tree in the forest. */ public S traverseForestMulti(float[] point, IMultiVisitorFactory visitorFactory, BinaryOperator accumulator, Function finisher) { checkNotNull(point, "point must not be null"); checkArgument(point.length == dimensions, () -> "point.length must equal to " + dimensions); checkNotNull(visitorFactory, "visitorFactory must not be null"); checkNotNull(accumulator, "accumulator must not be null"); checkNotNull(finisher, "finisher must not be null"); return traversalExecutor.traverseForestMulti(point, visitorFactory, accumulator, finisher); } /** * Visit each of the trees in the forest and combine the individual results into * an aggregate result. A multi-visitor is constructed for each tree using the * visitor factory, and then submitted to * {@link RandomCutTree#traverseMulti(float[], IMultiVisitorFactory)}. The * results from individual trees are collected using the * {@link java.util.stream.Collector} and returned. Trees are visited in * parallel using {@link java.util.Collection#parallelStream()}. * * @param point The point that defines the traversal path. * @param visitorFactory A factory method which is invoked for each tree to * construct a visitor. * @param collector A collector used to aggregate individual tree results * into a final result. * @param The visitor result type. This is the type that will be * returned after traversing each individual tree. * @param The final type, after any final normalization at the * forest level. * @return The aggregated and finalized result after sending a visitor through * each tree in the forest. */ public S traverseForestMulti(float[] point, IMultiVisitorFactory visitorFactory, Collector collector) { checkNotNull(point, "point must not be null"); checkArgument(point.length == dimensions, () -> "point.length must equal to " + dimensions); checkNotNull(visitorFactory, "visitorFactory must not be null"); checkNotNull(collector, "collector must not be null"); return traversalExecutor.traverseForestMulti(point, visitorFactory, collector); } /** * Compute an anomaly score for the given point. The point being scored is * compared with the points in the sample to compute a measure of how anomalous * it is. Scores are greater than 0, with higher scores corresponding to bing * more anomalous. A threshold of 1.0 is commonly used to distinguish anomalous * points from non-anomalous ones. *

* See {@link AnomalyScoreVisitor} for more details about the anomaly score * algorithm. * * @param point The point being scored. * @return an anomaly score for the given point. */ @Deprecated public double getAnomalyScore(double[] point) { return getAnomalyScore(toFloatArray(point)); } public double getAnomalyScore(float[] point) { if (!isOutputReady()) { return 0.0; } IVisitorFactory visitorFactory = (tree, x) -> new AnomalyScoreVisitor(tree.projectToTree(x), tree.getMass()); BinaryOperator accumulator = Double::sum; Function finisher = x -> x / numberOfTrees; return traverseForest(transformToShingledPoint(point), visitorFactory, accumulator, finisher); } /** * Anomaly score evaluated sequentially with option of early stopping the early * stopping parameter precision gives an approximate solution in the range * (1-precision)*score(q)- precision, (1+precision)*score(q) + precision for the * score of a point q. In this function z is hardcoded to 0.1. If this function * is used, then not all the trees will be used in evaluation (but they have to * be updated anyways, because they may be used for the next q). The advantage * is that "almost certainly" anomalies/non-anomalies can be detected easily * with few trees. * * @param point input point q * @return anomaly score with early stopping with z=0.1 */ @Deprecated public double getApproximateAnomalyScore(double[] point) { return getApproximateAnomalyScore(toFloatArray(point)); } public double getApproximateAnomalyScore(float[] point) { if (!isOutputReady()) { return 0.0; } IVisitorFactory visitorFactory = (tree, x) -> new AnomalyScoreVisitor(tree.projectToTree(x), tree.getMass()); ConvergingAccumulator accumulator = new OneSidedConvergingDoubleAccumulator( DEFAULT_APPROXIMATE_ANOMALY_SCORE_HIGH_IS_CRITICAL, DEFAULT_APPROXIMATE_DYNAMIC_SCORE_PRECISION, DEFAULT_APPROXIMATE_DYNAMIC_SCORE_MIN_VALUES_ACCEPTED, numberOfTrees); Function finisher = x -> x / accumulator.getValuesAccepted(); return traverseForest(transformToShingledPoint(point), visitorFactory, accumulator, finisher); } /** * Compute an anomaly score attribution DiVector for the given point. The point * being scored is compared with the points in the sample to compute a measure * of how anomalous it is. The result DiVector will contain an anomaly score in * both the positive and negative directions for each dimension of the data. *

* See {@link AnomalyAttributionVisitor} for more details about the anomaly * score algorithm. * * @param point The point being scored. * @return an anomaly score for the given point. */ public DiVector getAnomalyAttribution(double[] point) { return getAnomalyAttribution(toFloatArray(point)); } public DiVector getAnomalyAttribution(float[] point) { // this will return the same (modulo floating point summation) L1Norm as // getAnomalyScore if (!isOutputReady()) { return new DiVector(dimensions); } IVisitorFactory visitorFactory = new VisitorFactory<>( (tree, y) -> new AnomalyAttributionVisitor(tree.projectToTree(y), tree.getMass()), (tree, x) -> x.lift(tree::liftFromTree)); BinaryOperator accumulator = DiVector::addToLeft; Function finisher = x -> x.scale(1.0 / numberOfTrees); return traverseForest(transformToShingledPoint(point), visitorFactory, accumulator, finisher); } /** * Sequential version of attribution corresponding to getAnomalyScoreSequential; * The high-low sum in the result should be the same as the scalar score * computed by {@link #getAnomalyScore(double[])}. * * @param point The point being scored. * @return anomaly attribution for the given point. */ public DiVector getApproximateAnomalyAttribution(double[] point) { return getApproximateAnomalyAttribution(toFloatArray(point)); } public DiVector getApproximateAnomalyAttribution(float[] point) { if (!isOutputReady()) { return new DiVector(dimensions); } IVisitorFactory visitorFactory = new VisitorFactory<>( (tree, y) -> new AnomalyAttributionVisitor(tree.projectToTree(y), tree.getMass()), (tree, x) -> x.lift(tree::liftFromTree)); ConvergingAccumulator accumulator = new OneSidedConvergingDiVectorAccumulator(dimensions, DEFAULT_APPROXIMATE_ANOMALY_SCORE_HIGH_IS_CRITICAL, DEFAULT_APPROXIMATE_DYNAMIC_SCORE_PRECISION, DEFAULT_APPROXIMATE_DYNAMIC_SCORE_MIN_VALUES_ACCEPTED, numberOfTrees); Function finisher = x -> x.scale(1.0 / accumulator.getValuesAccepted()); return traverseForest(transformToShingledPoint(point), visitorFactory, accumulator, finisher); } /** * Compute a density estimate at the given point. *

* See {@link SimpleInterpolationVisitor} and {@link DensityOutput} for more * details about the density computation. * * @param point The point where the density estimate is made. * @return A density estimate. */ @Deprecated public DensityOutput getSimpleDensity(double[] point) { return getSimpleDensity(toFloatArray(point)); } public DensityOutput getSimpleDensity(float[] point) { // density estimation should use sufficiently larger number of samples // and only return answers when full if (!isOutputReady()) { return new DensityOutput(dimensions, sampleSize); } IVisitorFactory visitorFactory = new VisitorFactory<>((tree, y) -> new SimpleInterpolationVisitor(tree.projectToTree(y), tree.getMass(), 1.0, centerOfMassEnabled), (tree, x) -> x.lift(tree::liftFromTree)); Collector collector = InterpolationMeasure.collector(dimensions, 0, numberOfTrees); DensityOutput a = new DensityOutput(traverseForest(transformToShingledPoint(point), visitorFactory, collector)); return new DensityOutput(traverseForest(transformToShingledPoint(point), visitorFactory, collector)); } /** * Given a point with missing values, return a collection of treesamples. These * tree samples can be postprocessed in a variety of ways -- primarily to * produce summaries and imputation. The treesamples correspond to pointstore * index, distances to tree points (excluding the missing values) the actual * point at the leaf and the tree sample is 1 for each tree. * * * @param point A point with missing values. * @param missingIndexes An array containing the indexes of the missing values * in the point. The length of the array should be greater * than or equal to the number of missing values. * @param centrality a parameter that provides a central estimation versus a * more random estimation * @return A collection of tree samples */ protected List getConditionalField(float[] point, int[] missingIndexes, double centrality) { // missing indexes can be null -- but then getNearNeighborsInSample may be more // efficient checkArgument(centrality >= 0, " cannot be negative"); checkArgument(centrality <= 1, "centrality needs to be in range [0,1]"); checkArgument(point != null, " cannot be null"); if (!isOutputReady()) { return new ArrayList<>(); } int[] liftedIndices = transformIndices(missingIndexes, point.length); IMultiVisitorFactory visitorFactory = (tree, y) -> new ImputeVisitor(y, tree.projectToTree(y), liftedIndices, tree.projectMissingIndices(liftedIndices), centrality, tree.getRandomSeed()); return traverseForestMulti(transformToShingledPoint(point), visitorFactory, ConditionalTreeSample.collector); } /** * The function returns summary statistics of points close to a query point * (with possible missing values). The statics can perform an optional * multicentroid clustering * * @param point the query point * @param missingIndexes the list of positions which are missing * @param numberOfRepresentatives number of representatives in a cluster * @param shrinkage controls the shape of clusters (=0 corresponds * to spanning trees, and =1 corresponds to * centroidal clustering) * @param addtypical an option to perform the clustering/not * @param project should the clustring/statistics be computed * only on the data projected to the entries in * missingIndexes * @param centrality how closely should each tree try to predict * the missing values =0 implies loosely, =1 * implies closely * @param shingleSize the effective shingleSize -- the * clustering/statistics would be projected to * the last dimension/shinglesize values * @return a summary of the predictions returned by each tree */ public SampleSummary getConditionalFieldSummary(float[] point, int[] missingIndexes, int numberOfRepresentatives, double shrinkage, boolean addtypical, boolean project, double centrality, int shingleSize) { // missing indexes can be null -- but then getNearNeighborsInSample may be more // efficient checkArgument(centrality >= 0, " cannot be negative"); checkArgument(centrality <= 1, "centrality needs to be in range [0,1]"); checkArgument(point != null, " cannot be null"); if (!isOutputReady()) { return new SampleSummary(dimensions); } int[] liftedIndices = transformIndices(missingIndexes, point.length); ConditionalSampleSummarizer summarizer = new ConditionalSampleSummarizer(liftedIndices, transformToShingledPoint(point), centrality, project, numberOfRepresentatives, shrinkage, shingleSize); return summarizer.summarize(getConditionalField(point, missingIndexes, centrality), addtypical); } /** * Given a point with missing values, return a new point with the missing values * imputed. Each tree in the forest individual produces an imputed value. The * median imputed value is returned. This can be improved using * getConditionalSummary or getConditionalField * * @param point A point with missing values. * @param missingIndexes An array containing the indexes of the missing values * in the point. The length of the array should be greater * than or equal to the number of missing values. * @return A point with the missing values imputed. */ public float[] imputeMissingValues(float[] point, int[] missingIndexes) { return getConditionalFieldSummary(point, missingIndexes, 1, 0, false, false, 1.0, 1).median; } // number of missing values is redundant @Deprecated public float[] imputeMissingValues(float[] point, int numberOfMissingValues, int[] missingIndexes) { return imputeMissingValues(point, missingIndexes); } @Deprecated public double[] imputeMissingValues(double[] point, int numberOfMissingValues, int[] missingIndexes) { return toDoubleArray(imputeMissingValues(toFloatArray(point), numberOfMissingValues, missingIndexes)); } /** * Given an initial shingled point, extrapolate the stream into the future to * produce a forecast. This method is intended to be called when the input data * is being shingled, and it works by imputing forward one shingle block at a * time. * * @param point The starting point for extrapolation. * @param horizon The number of blocks to forecast. * @param blockSize The number of entries in a block. This should be the same * as the size of a single input to the shingle. * @param cyclic If true then the shingling is cyclic, otherwise it's a * sliding shingle. * @param shingleIndex If cyclic is true, then this should be the current index * in the shingle. That is, the index where the next point * added to the shingle would be written. If cyclic is false * then this value is not used. * @return a forecasted time series. */ @Deprecated double[] extrapolateBasic(double[] point, int horizon, int blockSize, boolean cyclic, int shingleIndex) { return toDoubleArray(extrapolateBasic(toFloatArray(point), horizon, blockSize, cyclic, shingleIndex)); } @Deprecated float[] extrapolateBasic(float[] point, int horizon, int blockSize, boolean cyclic, int shingleIndex) { return extrapolateWithRanges(point, horizon, blockSize, cyclic, shingleIndex, 1.0).values; } // the following is provided for maximum flexibilty from the calling entity; // but likely use is extrapolateFromShingle(), which abstracts away rotation // etc. public RangeVector extrapolateWithRanges(float[] point, int horizon, int blockSize, boolean cyclic, int shingleIndex, double centrality) { checkArgument(0 < blockSize && blockSize < dimensions, "blockSize must be between 0 and dimensions (exclusive)"); checkArgument(dimensions % blockSize == 0, "dimensions must be evenly divisible by blockSize"); checkArgument(0 <= shingleIndex && shingleIndex < dimensions / blockSize, "shingleIndex must be between 0 (inclusive) and dimensions / blockSize"); RangeVector result = new RangeVector(blockSize * horizon); int[] missingIndexes = new int[blockSize]; float[] queryPoint = Arrays.copyOf(point, dimensions); if (cyclic) { extrapolateBasicCyclic(result, horizon, blockSize, shingleIndex, queryPoint, missingIndexes, centrality); } else { extrapolateBasicSliding(result, horizon, blockSize, queryPoint, missingIndexes, centrality); } return result; } // external management of shingle; can function for both internal and external // shingling // however blocksize has to be externally managed @Deprecated RangeVector extrapolateFromShingle(float[] shingle, int horizon, int blockSize, double centrality) { return extrapolateWithRanges(shingle, horizon, blockSize, isRotationEnabled(), ((int) nextSequenceIndex()) % shingleSize, centrality); } /** * Given an initial shingled point, extrapolate the stream into the future to * produce a forecast. This method is intended to be called when the input data * is being shingled, and it works by imputing forward one shingle block at a * time. If the shingle is cyclic, then this method uses 0 as the shingle index. * * @param point The starting point for extrapolation. * @param horizon The number of blocks to forecast. * @param blockSize The number of entries in a block. This should be the same as * the size of a single input to the shingle. * @param cyclic If true then the shingling is cyclic, otherwise it's a * sliding shingle. * @return a forecasted time series. */ @Deprecated double[] extrapolateBasic(double[] point, int horizon, int blockSize, boolean cyclic) { return toDoubleArray(extrapolateBasic(toFloatArray(point), horizon, blockSize, cyclic, 0)); } protected float[] extrapolateBasic(float[] point, int horizon, int blockSize, boolean cyclic) { return extrapolateBasic(point, horizon, blockSize, cyclic, 0); } /** * Given a shingle builder, extrapolate the stream into the future to produce a * forecast. This method assumes you are passing in the shingle builder used to * preprocess points before adding them to this forest. * * @param builder The shingle builder used to process points before adding them * to the forest. * @param horizon The number of blocks to forecast. * @return a forecasted time series. */ @Deprecated public double[] extrapolateBasic(ShingleBuilder builder, int horizon) { return toDoubleArray(extrapolateBasic(toFloatArray(builder.getShingle()), horizon, builder.getInputPointSize(), builder.isCyclic(), builder.getShingleIndex())); } void extrapolateBasicSliding(RangeVector result, int horizon, int blockSize, float[] queryPoint, int[] missingIndexes, double centrality) { int resultIndex = 0; Arrays.fill(missingIndexes, 0); for (int y = 0; y < blockSize; y++) { missingIndexes[y] = dimensions - blockSize + y; } for (int k = 0; k < horizon; k++) { // shift all entries in the query point left by 1 block System.arraycopy(queryPoint, blockSize, queryPoint, 0, dimensions - blockSize); SampleSummary imputedSummary = getConditionalFieldSummary(queryPoint, missingIndexes, 1, 0, false, false, centrality, dimensions / blockSize); for (int y = 0; y < blockSize; y++) { result.values[resultIndex] = queryPoint[dimensions - blockSize + y] = imputedSummary.median[y]; result.lower[resultIndex] = imputedSummary.lower[y]; result.upper[resultIndex] = imputedSummary.upper[y]; resultIndex++; } } } void extrapolateBasicCyclic(RangeVector result, int horizon, int blockSize, int shingleIndex, float[] queryPoint, int[] missingIndexes, double centrality) { int resultIndex = 0; int currentPosition = shingleIndex; Arrays.fill(missingIndexes, 0); for (int k = 0; k < horizon; k++) { for (int y = 0; y < blockSize; y++) { missingIndexes[y] = (currentPosition + y) % dimensions; } SampleSummary imputedSummary = getConditionalFieldSummary(queryPoint, missingIndexes, 1, 0, false, false, centrality, 1); for (int y = 0; y < blockSize; y++) { result.values[resultIndex] = queryPoint[(currentPosition + y) % dimensions] = imputedSummary.median[(currentPosition + y) % dimensions]; result.lower[resultIndex] = imputedSummary.lower[(currentPosition + y) % dimensions]; result.upper[resultIndex] = imputedSummary.upper[(currentPosition + y) % dimensions]; resultIndex++; } currentPosition = (currentPosition + blockSize) % dimensions; } } /** * Extrapolate the stream into the future to produce a forecast. This method is * intended to be called when the input data is being shingled internally, and * it works by imputing forward one shingle block at a time. * * @param horizon The number of blocks to forecast. * @return a forecasted time series. */ public double[] extrapolate(int horizon) { return toDoubleArray(extrapolateFromCurrentTime(horizon)); } public float[] extrapolateFromCurrentTime(int horizon) { checkArgument(internalShinglingEnabled, "incorrect use"); IPointStore store = stateCoordinator.getStore(); return extrapolateBasic(lastShingledPoint(), horizon, inputDimensions, store.isInternalRotationEnabled(), ((int) nextSequenceIndex()) % shingleSize); } /** * For each tree in the forest, follow the tree traversal path and return the * leaf node if the standard Euclidean distance between the query point and the * leaf point is smaller than the given threshold. Note that this will not * necessarily be the nearest point in the tree, because the traversal path is * determined by the random cuts in the tree. If the same leaf point is found in * multiple trees, those results will be combined into a single Neighbor in the * result. * * If sequence indexes are disabled for this forest, then the list of sequence * indexes will be empty in returned Neighbors. * * @param point A point whose neighbors we want to find. * @param distanceThreshold The maximum Euclidean distance for a point to be * considered a neighbor. * @return a list of Neighbors, ordered from closest to furthest. */ @Deprecated public List getNearNeighborsInSample(double[] point, double distanceThreshold) { return getNearNeighborsInSample(toFloatArray(point), distanceThreshold); } public List getNearNeighborsInSample(float[] point, double distanceThreshold) { checkNotNull(point, "point must not be null"); checkArgument(distanceThreshold > 0, "distanceThreshold must be greater than 0"); if (!isOutputReady()) { return Collections.emptyList(); } IVisitorFactory> visitorFactory = (tree, x) -> new NearNeighborVisitor(x, distanceThreshold); return traverseForest(transformToShingledPoint(point), visitorFactory, Neighbor.collector()); } /** * For each tree in the forest, follow the tree traversal path and return the * leaf node. Note that this will not necessarily be the nearest point in the * tree, because the traversal path is determined by the random cuts in the * tree. If the same leaf point is found in multiple trees, those results will * be combined into a single Neighbor in the result. * * If sequence indexes are disabled for this forest, then sequenceIndexes will * be empty in the returned Neighbors. * * @param point A point whose neighbors we want to find. * @return a list of Neighbors, ordered from closest to furthest. */ @Deprecated public List getNearNeighborsInSample(double[] point) { return getNearNeighborsInSample(toFloatArray(point)); } public List getNearNeighborsInSample(float[] point) { return getNearNeighborsInSample(point, Double.POSITIVE_INFINITY); } /** * @return true if all samplers are ready to output results. */ public boolean isOutputReady() { return outputReady || (outputReady = stateCoordinator.getTotalUpdates() >= outputAfter && components.stream().allMatch(IComponentModel::isOutputReady)); } /** * @return true if all samplers in the forest are full. */ public boolean samplersFull() { return stateCoordinator.getTotalUpdates() >= sampleSize; } /** * Returns the total number updates to the forest. * * The count of updates is represented with long type and may overflow. * * @return the total number of updates to the forest. */ public long getTotalUpdates() { return stateCoordinator.getTotalUpdates(); } public void pauseSampling() { updateExecutor.setCurrentlySampling(false); } public void resumeSampling() { updateExecutor.setCurrentlySampling(true); } public boolean isCurrentlySampling() { return updateExecutor.isCurrentlySampling(); } /** * an L1 clustering primitive that shows the aggregation of the points stored in * RCF the clustering uses multi-centroid clustering introduced in CURE * https://en.wikipedia.org/wiki/CURE_algorithm However CURE also shrunk the * well scattered points by a fraction alpha (there by creating new points); * while that concept is used herein, the (multi) summarization algorithm * changes the distance metric as opposed to creating new points since * continuity of values is not an useful assumption in context of RCFs. The * usage of distance metric is similar to the discussion in * https://en.wikipedia.org/wiki/Data_stream_clustering See the examples package * for an example of dynamic summarization. / * * @param maxAllowed maximum number of clusters one is willing to * see * @param shrinkage a parameter that controls between spherical * nature (=1) and MST (=0), this corresponds to * the parameter alpha in the description above * @param numberOfRepresentatives number of centroids used to represent a * cluster, this is the parameter c in the * description of CURE * @param separationRatio a parameter in [0,1] that controls how * zealously should the algorithm reduce the * number of clusters a default value of 0.8 is a * reasonable value for many settings. A value * close to 0 would tend to merge eveything into * a single cluster. The option is provided since * it can be of use in the future to produce * dendograms and similar information. * @param distance a distance function for points * @param previous a (possibly null) list of previous clustering * obtained. If the list is non-null then the * representatives of the previous cluster would * be added as zero weight points, ensuring that * the summarization is more smooth (in contrast * to two independent summarizations). The zero * weight points of the past can serve as * representatives of the current clustering. * @return a list of clusters */ public List> summarize(int maxAllowed, double shrinkage, int numberOfRepresentatives, double separationRatio, BiFunction distance, List> previous) { return stateCoordinator.getStore().summarize(maxAllowed, shrinkage, numberOfRepresentatives, separationRatio, distance, previous); } // same as above with default filled in public List> summarize(int maxAllowed, double shrinkage, int numberOfRepresentatives, List> previous) { return summarize(maxAllowed, shrinkage, numberOfRepresentatives, DEFAULT_SEPARATION_RATIO_FOR_MERGE, Summarizer::L1distance, previous); } public static class Builder> { // We use Optional types for optional primitive fields when it doesn't make // sense to use a constant default. private int dimensions; private int sampleSize = DEFAULT_SAMPLE_SIZE; private Optional outputAfter = Optional.empty(); private int numberOfTrees = DEFAULT_NUMBER_OF_TREES; private Optional timeDecay = Optional.empty(); private Optional randomSeed = Optional.empty(); private boolean storeSequenceIndexesEnabled = DEFAULT_STORE_SEQUENCE_INDEXES_ENABLED; private boolean centerOfMassEnabled = DEFAULT_CENTER_OF_MASS_ENABLED; private boolean parallelExecutionEnabled = DEFAULT_PARALLEL_EXECUTION_ENABLED; private Optional threadPoolSize = Optional.empty(); private boolean directLocationMapEnabled = DEFAULT_DIRECT_LOCATION_MAP; private double boundingBoxCacheFraction = DEFAULT_BOUNDING_BOX_CACHE_FRACTION; private int shingleSize = DEFAULT_SHINGLE_SIZE; private boolean internalShinglingEnabled = DEFAULT_INTERNAL_SHINGLING_ENABLED; protected boolean internalRotationEnabled = DEFAULT_INTERNAL_ROTATION_ENABLED; protected Optional initialPointStoreSize = Optional.empty(); protected double initialAcceptFraction = DEFAULT_INITIAL_ACCEPT_FRACTION; public T dimensions(int dimensions) { this.dimensions = dimensions; return (T) this; } public T sampleSize(int sampleSize) { this.sampleSize = sampleSize; return (T) this; } public T outputAfter(int outputAfter) { this.outputAfter = Optional.of(outputAfter); return (T) this; } public T numberOfTrees(int numberOfTrees) { this.numberOfTrees = numberOfTrees; return (T) this; } public T shingleSize(int shingleSize) { this.shingleSize = shingleSize; return (T) this; } public T timeDecay(double timeDecay) { this.timeDecay = Optional.of(timeDecay); return (T) this; } public T randomSeed(long randomSeed) { this.randomSeed = Optional.of(randomSeed); return (T) this; } public T centerOfMassEnabled(boolean centerOfMassEnabled) { this.centerOfMassEnabled = centerOfMassEnabled; return (T) this; } public T parallelExecutionEnabled(boolean parallelExecutionEnabled) { this.parallelExecutionEnabled = parallelExecutionEnabled; return (T) this; } public T threadPoolSize(int threadPoolSize) { this.threadPoolSize = Optional.of(threadPoolSize); return (T) this; } public T initialPointStoreSize(int initialPointStoreSize) { this.initialPointStoreSize = Optional.of(initialPointStoreSize); return (T) this; } public T storeSequenceIndexesEnabled(boolean storeSequenceIndexesEnabled) { this.storeSequenceIndexesEnabled = storeSequenceIndexesEnabled; return (T) this; } @Deprecated public T compact(boolean compact) { return (T) this; } public T internalShinglingEnabled(boolean internalShinglingEnabled) { this.internalShinglingEnabled = internalShinglingEnabled; return (T) this; } public T internalRotationEnabled(boolean internalRotationEnabled) { this.internalRotationEnabled = internalRotationEnabled; return (T) this; } @Deprecated public T dynamicResizingEnabled(boolean dynamicResizingEnabled) { return (T) this; } @Deprecated public T precision(Precision precision) { return (T) this; } public T boundingBoxCacheFraction(double boundingBoxCacheFraction) { this.boundingBoxCacheFraction = boundingBoxCacheFraction; return (T) this; } public T initialAcceptFraction(double initialAcceptFraction) { this.initialAcceptFraction = initialAcceptFraction; return (T) this; } public RandomCutForest build() { return new RandomCutForest(this); } public Random getRandom() { // If a random seed was given, use it to create a new Random. Otherwise, call // the 0-argument constructor return randomSeed.map(Random::new).orElseGet(Random::new); } } /** * Score a point using the given scoring functions. * * @param point input point being scored * @param ignoreLeafMassThreshold said threshold * @param seen the function that applies if input is equal to * a previously seen sample in a leaf * @param unseen if the input does not have a match in the * leaves * @param damp damping function based on the duplicity of the * previously seen samples * @return anomaly score */ public double getDynamicScore(float[] point, int ignoreLeafMassThreshold, BiFunction seen, BiFunction unseen, BiFunction damp) { checkArgument(ignoreLeafMassThreshold >= 0, "ignoreLeafMassThreshold should be greater than or equal to 0"); if (!isOutputReady()) { return 0.0; } VisitorFactory visitorFactory = new VisitorFactory<>((tree, y) -> new DynamicScoreVisitor( tree.projectToTree(y), tree.getMass(), ignoreLeafMassThreshold, seen, unseen, damp)); BinaryOperator accumulator = Double::sum; Function finisher = sum -> sum / numberOfTrees; return traverseForest(transformToShingledPoint(point), visitorFactory, accumulator, finisher); } /** * Similar to above but now the scoring takes in a function of Bounding Box to * probabilities (vector over the dimensions); and produces a score af-if the * tree were built using that function (when in reality the tree is an RCF). * Changing the defaultRCFgVec function to some other function f() will provide * a mechanism of dynamic scoring for trees that are built using f() which is * the purpose of TransductiveScalarScore visitor. Note that the answer is an * MCMC simulation and is not normalized (because the scoring functions are * flexible and unknown) and over a small number of trees the errors can be * large specially if vecSep is very far from defaultRCFgVec * * Given the large number of possible sources of distortion, ignoreLeafThreshold * is not supported. * * @param point point to be scored * @param seen the score function for seen point * @param unseen score function for unseen points * @param damp dampening the score for duplicates * @param vecSep the function of (BoundingBox) -> array of probabilities * @return the simuated score */ public double getDynamicSimulatedScore(float[] point, BiFunction seen, BiFunction unseen, BiFunction damp, Function vecSep) { if (!isOutputReady()) { return 0.0; } VisitorFactory visitorFactory = new VisitorFactory<>( (tree, y) -> new SimulatedTransductiveScalarScoreVisitor(tree.projectToTree(y), tree.getMass(), seen, unseen, damp, CommonUtils::defaultRCFgVecFunction, vecSep)); BinaryOperator accumulator = Double::sum; Function finisher = sum -> sum / numberOfTrees; return traverseForest(transformToShingledPoint(point), visitorFactory, accumulator, finisher); } /** * Score a point using the given scoring functions. This method will * short-circuit before visiting all trees if the scores that are returned from * a subset of trees appears to be converging to a given value. See * {@link OneSidedConvergingDoubleAccumulator} for more about convergence. * * @param point input point * @param precision controls early convergence * @param highIsCritical this is true for the default scoring function. * If the user wishes to use a different scoring * function where anomaly scores are low values * (for example, height in tree) then this should * be set to false. * @param ignoreLeafMassThreshold said threshold * @param seen scoring function when the input matches some * tuple in the leaves * @param unseen scoring function when the input is not found * @param damp dampening function for duplicates which are * same as input (applies with seen) * @return the dynamic score under sequential early stopping */ public double getApproximateDynamicScore(float[] point, double precision, boolean highIsCritical, int ignoreLeafMassThreshold, BiFunction seen, BiFunction unseen, BiFunction damp) { checkArgument(ignoreLeafMassThreshold >= 0, "ignoreLeafMassThreshold should be greater than or equal to 0"); if (!isOutputReady()) { return 0.0; } VisitorFactory visitorFactory = new VisitorFactory<>((tree, y) -> new DynamicScoreVisitor( tree.projectToTree(y), tree.getMass(), ignoreLeafMassThreshold, seen, unseen, damp)); ConvergingAccumulator accumulator = new OneSidedConvergingDoubleAccumulator(highIsCritical, precision, DEFAULT_APPROXIMATE_DYNAMIC_SCORE_MIN_VALUES_ACCEPTED, numberOfTrees); Function finisher = x -> x / accumulator.getValuesAccepted(); return traverseForest(transformToShingledPoint(point), visitorFactory, accumulator, finisher); } /** * Same as above, but for dynamic scoring. See the params of * getDynamicScoreParallel * * @param point point to be scored * @param ignoreLeafMassThreshold said threshold * @param seen score function for seen points * @param unseen score function for unseen points * @param newDamp dampening function for duplicates in the seen * function * @return dynamic scoring attribution DiVector */ public DiVector getDynamicAttribution(float[] point, int ignoreLeafMassThreshold, BiFunction seen, BiFunction unseen, BiFunction newDamp) { if (!isOutputReady()) { return new DiVector(dimensions); } VisitorFactory visitorFactory = new VisitorFactory<>( (tree, y) -> new DynamicAttributionVisitor(tree.projectToTree(y), tree.getMass(), ignoreLeafMassThreshold, seen, unseen, newDamp), (tree, x) -> x.lift(tree::liftFromTree)); BinaryOperator accumulator = DiVector::addToLeft; Function finisher = x -> x.scale(1.0 / numberOfTrees); return traverseForest(transformToShingledPoint(point), visitorFactory, accumulator, finisher); } /** * Atrribution for dynamic sequential scoring; getL1Norm() should agree with * getDynamicScoringSequential * * @param point input * @param precision parameter to stop early stopping * @param highIsCritical are high values anomalous (otherwise low * values are anomalous) * @param ignoreLeafMassThreshold we ignore leaves with mass equal/below * * threshold * @param seen function for scoring points that have been * seen before * @param unseen function for scoring points not seen in tree * @param newDamp dampening function based on duplicates * @return attribution DiVector of the score */ public DiVector getApproximateDynamicAttribution(float[] point, double precision, boolean highIsCritical, int ignoreLeafMassThreshold, BiFunction seen, BiFunction unseen, BiFunction newDamp) { if (!isOutputReady()) { return new DiVector(dimensions); } VisitorFactory visitorFactory = new VisitorFactory<>((tree, y) -> new DynamicAttributionVisitor(y, tree.getMass(), ignoreLeafMassThreshold, seen, unseen, newDamp), (tree, x) -> x.lift(tree::liftFromTree)); ConvergingAccumulator accumulator = new OneSidedConvergingDiVectorAccumulator(dimensions, highIsCritical, precision, DEFAULT_APPROXIMATE_DYNAMIC_SCORE_MIN_VALUES_ACCEPTED, numberOfTrees); Function finisher = vector -> vector.scale(1.0 / accumulator.getValuesAccepted()); return traverseForest(transformToShingledPoint(point), visitorFactory, accumulator, finisher); } } ================================================ FILE: Java/core/src/main/java/com/amazon/randomcutforest/Visitor.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest; import com.amazon.randomcutforest.tree.INodeView; /** * This is the interface for a visitor which can be used to query a ITraversable * to produce a result. A visitor is submitted to * ITraversable#traverse(double[], Visitor), and during the traversal the * {@link #acceptLeaf} and {@link #accept} methods are invoked on the nodes in * the traversal path. *

* See ITraversable#traverse(double[], Visitor) for details about the traversal * path. */ public interface Visitor { /** * Visit a node in the traversal path. * * @param node the node being visited * @param depthOfNode the depth of the node being visited */ void accept(INodeView node, int depthOfNode); /** * Visit the leaf node in the traversal path. By default, this method proxies to * {@link #accept(INodeView, int)}. * * @param leafNode the leaf node being visited * @param depthOfNode the depth of the leaf node */ default void acceptLeaf(INodeView leafNode, final int depthOfNode) { accept(leafNode, depthOfNode); } /** * At the end of the traversal, this method is called to obtain the result * computed by the visitor. * * @return the result value computed by the visitor. */ R getResult(); /** * This method short-circuits the evaluation of the Visitor at nodes on the * traversal path. By default, the accept (or acceptLeaf) method will be invoked * for each Node in the traversal path. But the NodeView has to prepare * information to support that visitor invocation. Before invocation, the value * of isConverged will be checked. If it is true, some of that preparation can * be skipped -- because the visitor would not be updated. This method can be * overwritten to optimize visitors that do not need to visit every node on the * root to leaf path before returning a value. * * Mote that this convergence applies to a single visitor computation and is * expected to be a speedup without any change in the value of the answer. This * is different from converging accumulator which corresponds to sequential * evaluation of different visitors and early stopping. **/ default boolean isConverged() { return false; } } ================================================ FILE: Java/core/src/main/java/com/amazon/randomcutforest/VisitorFactory.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest; import java.util.function.BiFunction; import com.amazon.randomcutforest.tree.ITree; /** * This is the interface for a visitor factory the factory corresponds to * mapping a (tree,point) pair to a visitor and a mapping for the inverse result */ public class VisitorFactory implements IVisitorFactory { private final BiFunction, float[], Visitor> newVisitor; private final BiFunction, R, R> liftResult; public VisitorFactory(BiFunction, float[], Visitor> newVisitor, BiFunction, R, R> liftResult) { this.newVisitor = newVisitor; this.liftResult = liftResult; } public VisitorFactory(BiFunction, float[], Visitor> newVisitor) { this(newVisitor, (tree, x) -> x); } @Override public Visitor newVisitor(ITree tree, float[] point) { return newVisitor.apply(tree, point); } @Override public R liftResult(ITree tree, R result) { return liftResult.apply(tree, result); } } ================================================ FILE: Java/core/src/main/java/com/amazon/randomcutforest/anomalydetection/AbstractAttributionVisitor.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.anomalydetection; import java.util.Arrays; import com.amazon.randomcutforest.CommonUtils; import com.amazon.randomcutforest.Visitor; import com.amazon.randomcutforest.returntypes.DiVector; import com.amazon.randomcutforest.tree.IBoundingBoxView; import com.amazon.randomcutforest.tree.INodeView; /** * Attribution exposes the attribution of scores produced by ScalarScoreVisitor * corresponding to different attributes. It allows a boolean * ignoreClosestCandidate; which when true will compute the attribution as it * that near neighbor was not present in RCF. This is turned on by default for * duplicate points seen by the forest, so that the attribution does not change * is a sequence of duplicate points are seen. For non-duplicate points, if the * boolean turned on, reduces effects of masking (when anomalous points are * included in the forest -- which will be true with a few samples or when the * samples are not refreshed appropriately). It is worth remembering that * disallowing anomalous points from being included in the forest explicitly * will render the algorithm incapable of adjusting to a new normal -- which is * a strength of this algorithm. **/ public abstract class AbstractAttributionVisitor implements Visitor { public static final int DEFAULT_IGNORE_LEAF_MASS_THRESHOLD = 0; protected final double[] differenceInRangeVector; protected final float[] pointToScore; protected final int treeMass; protected final DiVector directionalAttribution; protected boolean hitDuplicates; protected double savedScore; protected double sumOfNewRange; protected double sumOfDifferenceInRange; protected boolean ignoreLeaf; protected int ignoreLeafMassThreshold; /** * A flag that states whether the point to score is known to be contained inside * the bounding box of Nodes being accepted. Assumes nodes are accepted in * leaf-to-root order. */ protected boolean pointInsideBox; /** * An array that keeps track of whether each margin of the point being scored is * outside inside the box considered during the recursive call to compute the * score. Assumes nodes are accepted in leaf-to-root order. */ protected boolean[] coordInsideBox; protected IBoundingBoxView shadowBox; public AbstractAttributionVisitor(float[] pointToScore, int treeMass, int ignoreLeafMassThreshold) { this.pointToScore = Arrays.copyOf(pointToScore, pointToScore.length); this.treeMass = treeMass; this.ignoreLeaf = ignoreLeafMassThreshold > DEFAULT_IGNORE_LEAF_MASS_THRESHOLD; this.ignoreLeafMassThreshold = ignoreLeafMassThreshold; hitDuplicates = false; pointInsideBox = false; savedScore = 0; directionalAttribution = new DiVector(pointToScore.length); shadowBox = null; coordInsideBox = new boolean[pointToScore.length]; // array is twice as long as pointToScore because we store // positive and negative differences separately differenceInRangeVector = new double[2 * pointToScore.length]; } public AbstractAttributionVisitor(float[] pointToScore, int treeMass) { this(pointToScore, treeMass, DEFAULT_IGNORE_LEAF_MASS_THRESHOLD); } /** * Take the normalization function applied to the corresponding scoring visitor * and apply that to each coordinate of the DiVector to modify the data in * place. The function has to be associative in its first parameter; that is, fn * (x1, y) + fn (x2, y) = fn (x1 + x2, y) * * @return The modified data. */ @Override public DiVector getResult() { DiVector result = new DiVector(directionalAttribution); result.componentwiseTransform(x -> CommonUtils.defaultScalarNormalizerFunction(x, treeMass)); return result; } /** * Update the anomaly score based on the next step of the tree traversal. * * @param node The current node in the tree traversal * @param depthOfNode The depth of the current node in the tree */ @Override public void accept(INodeView node, int depthOfNode) { if (pointInsideBox) { return; } IBoundingBoxView smallBox; if (hitDuplicates || ignoreLeaf) { // use the sibling bounding box to represent counterfactual "what if point & the // candidate near neighbor // had not been inserted in the tree" shadowBox = shadowBox == null ? node.getSiblingBoundingBox(pointToScore) : shadowBox.getMergedBox(node.getSiblingBoundingBox(pointToScore)); smallBox = shadowBox; } else { smallBox = node.getBoundingBox(); } IBoundingBoxView largeBox = smallBox.getMergedBox(pointToScore); updateRangesForScoring(smallBox, largeBox); double probOfCut = sumOfDifferenceInRange / sumOfNewRange; // if leaves were ignored we need to keep accounting for the score if (ignoreLeaf) { savedScore = probOfCut * scoreUnseen(depthOfNode, node.getMass()) + (1 - probOfCut) * savedScore; } if (probOfCut <= 0) { pointInsideBox = true; } else { double newScore = scoreUnseen(depthOfNode, node.getMass()); for (int i = 0; i < pointToScore.length; i++) { double probOfCutInSpikeDirection = differenceInRangeVector[2 * i] / sumOfNewRange; directionalAttribution.high[i] = probOfCutInSpikeDirection * newScore + (1 - probOfCut) * directionalAttribution.high[i]; double probOfCutInDipDirection = differenceInRangeVector[2 * i + 1] / sumOfNewRange; directionalAttribution.low[i] = probOfCutInDipDirection * newScore + (1 - probOfCut) * directionalAttribution.low[i]; } } boolean capture = (pointInsideBox || depthOfNode == 0); if ((hitDuplicates || ignoreLeaf) && capture) { // final rescaling; this ensures agreement with the ScalarScoreVector // the scoreUnseen/scoreSeen should be the same as scoring; other uses need // caution. directionalAttribution.renormalize(savedScore); } } @Override public void acceptLeaf(INodeView leafNode, int depthOfNode) { updateRangesForScoring(leafNode.getBoundingBox(), leafNode.getBoundingBox().getMergedBox(pointToScore)); // newrange == 0 corresponds to equality of points and is fater than // Array.equals if (sumOfNewRange <= 0) { hitDuplicates = true; } if ((hitDuplicates) && ((!ignoreLeaf) || (leafNode.getMass() > ignoreLeafMassThreshold))) { savedScore = damp(leafNode.getMass(), treeMass) * scoreSeen(depthOfNode, leafNode.getMass()); } else { savedScore = scoreUnseen(depthOfNode, leafNode.getMass()); } if ((hitDuplicates) || ((ignoreLeaf) && (leafNode.getMass() <= ignoreLeafMassThreshold))) { Arrays.fill(directionalAttribution.high, savedScore / (2 * pointToScore.length)); Arrays.fill(directionalAttribution.low, savedScore / (2 * pointToScore.length)); /* in this case do not have a better option than an equal attribution */ Arrays.fill(coordInsideBox, false); } else { for (int i = 0; i < pointToScore.length; i++) { directionalAttribution.high[i] = savedScore * differenceInRangeVector[2 * i] / sumOfNewRange; directionalAttribution.low[i] = savedScore * differenceInRangeVector[2 * i + 1] / sumOfNewRange; } } } /** * A scoring function which is applied when the leaf node visited is equal to * the point being scored. * * @param depth The depth of the node being visited * @param mass The mass of the node being visited * @return an anomaly score contribution for a given node */ protected abstract double scoreSeen(int depth, int mass); /** * A scoring function which is applied when the leaf node visited is not equal * to the point being scored. This function is also used to compute the * contribution to the anomaly score from non-leaf nodes. * * @param depth The depth of the node being visited. * @param mass The mass of the node being visited. * @return an anomaly score contribution for a given node. */ protected abstract double scoreUnseen(int depth, int mass); /** * This function produces a scaling factor which can be used to reduce the * influence of leaf nodes with mass greater than 1. * * @param leafMass The mass of the leaf node visited * @param treeMass The mass of the tree being visited * @return a scaling factor to apply to the result from * {@link #scoreSeen(int, int)}. */ protected abstract double damp(int leafMass, int treeMass); /** * When updating the score for a node, we compare the node's bounding box to the * merged bounding box that would be created by adding the point to be scored. * This method updates local instance variables sumOfDifferenceInRange and * differenceInRange vector to reflect the total difference in side length and * the difference in side length in each dimension, respectively. * * @param smallBox The bounding box corresponding to a Node being visited. * @param largeBox The merged bounding box containing smallBox and the point * being scored. */ protected void updateRangesForScoring(IBoundingBoxView smallBox, IBoundingBoxView largeBox) { sumOfDifferenceInRange = 0.0; sumOfNewRange = 0.0; Arrays.fill(differenceInRangeVector, 0.0); for (int i = 0; i < pointToScore.length; i++) { sumOfNewRange += largeBox.getRange(i); // optimization turned off for ignoreLeaf if (coordInsideBox[i] && !ignoreLeaf) { continue; } double maxGap = Math.max(largeBox.getMaxValue(i) - smallBox.getMaxValue(i), 0.0); double minGap = Math.max(smallBox.getMinValue(i) - largeBox.getMinValue(i), 0.0); if (maxGap + minGap > 0.0) { sumOfDifferenceInRange += (minGap + maxGap); differenceInRangeVector[2 * i] = maxGap; differenceInRangeVector[2 * i + 1] = minGap; } else { coordInsideBox[i] = true; } } } @Override public boolean isConverged() { return pointInsideBox; } } ================================================ FILE: Java/core/src/main/java/com/amazon/randomcutforest/anomalydetection/AbstractScalarScoreVisitor.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.anomalydetection; import java.util.Arrays; import com.amazon.randomcutforest.CommonUtils; import com.amazon.randomcutforest.Visitor; import com.amazon.randomcutforest.tree.IBoundingBoxView; import com.amazon.randomcutforest.tree.INodeView; /** * This abstract visitor encodes a standard method for computing a scalar result * value. The basic computation is as follows: * *

    *
  1. After following the traversal path to a leaf, compute a base score at the * leaf node.
  2. *
  3. For each node in the traversal path from the leaf to the root, compute * the probability that a random cut would separate the query point from the * node. The updated score uses this probability to create a weighted * combination between the current score and a score contribution from the * current node.
  4. *
*

* While this basic algorithm produces good results when all the points in the * sample are distinct, it can produce unexpected results when a significant * portion of the points in the sample are duplicates. Therefore this class * supports different optional features for modifying the score produced when * the point being scored is equal to the leaf node in the traversal. */ public abstract class AbstractScalarScoreVisitor implements Visitor { public static final int DEFAULT_IGNORE_LEAF_MASS_THRESHOLD = 0; /** * The point whose anomaly score is being computed. */ protected final float[] pointToScore; /** * The mass of the tree being visited. This value is used to normalize the final * result. */ protected final int treeMass; /** * This flag is set to 'true' if the point being scored is found to be contained * by a bounding box in the traversal path, allowing us to short-circuit further * computation. */ protected boolean pointInsideBox; /** * Similar to pointInsideBox, the array coordInsideBox keeps track of whether * each coordinate is contained in the corresponding bounding box projection for * a bounding box in the traversal path. This field is used to skip unnecessary * steps in the probability computation. */ protected boolean[] coordInsideBox; /** * shadowbox used in attribution and ignoring the leaf to simulate a deletion */ protected IBoundingBoxView shadowBox = null; /** * The function used to compute the base score in the case where the point being * scored is equal to the leaf point (provided the ignoreLeafEquals and * ignoreLeafMassThreshold variables indicate that we should use this method). * * Function arguments: leaf depth, leaf mass */ protected double score; /** * If true, then the scoreUnseen method will be used to score a point equal to a * leaf point in {@link #acceptLeaf(INodeView, int)}. */ protected boolean ignoreLeafEquals; /** * If the point being scored is equal to the leaf point but the leaf mass is * smaller than this value, then the scoreUnseen method will be used to score * the point in {@link #accept(INodeView, int)}. */ protected int ignoreLeafMassThreshold; /** * Construct a new ScalarScoreVisitor * * @param pointToScore The point whose anomaly score we are computing * @param treeMass The total mass of the RandomCutTree that is * scoring the point * @param ignoreLeafMassThreshold Is the maximum mass of the leaf which can be * ignored */ public AbstractScalarScoreVisitor(float[] pointToScore, int treeMass, int ignoreLeafMassThreshold) { this.pointToScore = Arrays.copyOf(pointToScore, pointToScore.length); this.treeMass = treeMass; pointInsideBox = false; score = 0.0; this.ignoreLeafEquals = (ignoreLeafMassThreshold > DEFAULT_IGNORE_LEAF_MASS_THRESHOLD); this.ignoreLeafMassThreshold = ignoreLeafMassThreshold; // will be initialized to an array of false values coordInsideBox = new boolean[pointToScore.length]; } /** * Construct a new AbstractScalarScoreVisitor using default leaf options. * * @param pointToScore The point whose anomaly score we are computing * @param treeMass The total mass of the RandomCutTree that is scoring the * point */ public AbstractScalarScoreVisitor(float[] pointToScore, int treeMass) { this(pointToScore, treeMass, DEFAULT_IGNORE_LEAF_MASS_THRESHOLD); } /** * @return The score computed up until this point. */ @Override public Double getResult() { return CommonUtils.defaultScalarNormalizerFunction(score, treeMass); } /** * Update the anomaly score based on the next step of the tree traversal. * * @param node The current node in the tree traversal * @param depthOfNode The depth of the current node in the tree */ @Override public void accept(INodeView node, int depthOfNode) { if (pointInsideBox) { return; } double probabilityOfSeparation; if (!ignoreLeafEquals) { probabilityOfSeparation = node.probailityOfSeparation(pointToScore); if (probabilityOfSeparation <= 0) { pointInsideBox = true; return; } } else { shadowBox = shadowBox == null ? node.getSiblingBoundingBox(pointToScore) : shadowBox.getMergedBox(node.getSiblingBoundingBox(pointToScore)); probabilityOfSeparation = (shadowBox.getRangeSum() <= 0) ? 1.0 : getProbabilityOfSeparation(shadowBox); } score = probabilityOfSeparation * scoreUnseen(depthOfNode, node.getMass()) + (1 - probabilityOfSeparation) * score; } /** * Update the anomaly score with the given leaf node. * * @param leafNode The leaf node that was reached by traversing the tree * @param depthOfNode The depth of the leaf node */ @Override public void acceptLeaf(INodeView leafNode, int depthOfNode) { if (Arrays.equals(leafNode.getLeafPoint(), pointToScore) && (!ignoreLeafEquals || (leafNode.getMass() > ignoreLeafMassThreshold))) { pointInsideBox = true; score = damp(leafNode.getMass(), treeMass) * scoreSeen(depthOfNode, leafNode.getMass()); } else { score = scoreUnseen(depthOfNode, leafNode.getMass()); } } /** * A scoring function which is applied when the leaf node visited is equal to * the point being scored. * * @param depth The depth of the node being visited * @param mass The mass of the node being visited * @return an anomaly score contribution for a given node */ protected abstract double scoreSeen(int depth, int mass); /** * A scoring function which is applied when the leaf node visited is not equal * to the point being scored. This function is also used to compute the * contribution to the anomaly score from non-leaf nodes. * * @param depth The depth of the node being visited. * @param mass The mass of the node being visited. * @return an anomaly score contribution for a given node. */ protected abstract double scoreUnseen(int depth, int mass); /** * This function produces a scaling factor which can be used to reduce the * influence of leaf nodes with mass greater than 1. * * @param leafMass The mass of the leaf node visited * @param treeMass The mass of the tree being visited * @return a scaling factor to apply to the result from * {@link #scoreSeen(int, int)}. */ protected abstract double damp(int leafMass, int treeMass); /** * Compute the probability that a random cut would separate the point from the * rest of the bounding box. This method is intended to compute the probability * for a non-leaf Node, and will throw an exception if a leaf-node bounding box * is detected. * * @param boundingBox The bounding box that we are computing the probability of * separation from. * @return is the probability */ protected double getProbabilityOfSeparation(final IBoundingBoxView boundingBox) { double sumOfNewRange = 0d; double sumOfDifferenceInRange = 0d; for (int i = 0; i < pointToScore.length; ++i) { double maxVal = boundingBox.getMaxValue(i); double minVal = boundingBox.getMinValue(i); double oldRange = maxVal - minVal; if (!coordInsideBox[i]) { if (maxVal < pointToScore[i]) { maxVal = pointToScore[i]; } else if (minVal > pointToScore[i]) { minVal = pointToScore[i]; } else if (!ignoreLeafEquals) { // optimization turned on for ignoreLeafEquals==false sumOfNewRange += oldRange; coordInsideBox[i] = true; continue; } double newRange = maxVal - minVal; sumOfNewRange += newRange; sumOfDifferenceInRange += (newRange - oldRange); } else { sumOfNewRange += oldRange; } } if (sumOfNewRange <= 0) { // Sum of range across dimensions should only be 0 at leaf nodes as non-leaf // nodes always contain // more than one distinct point throw new IllegalStateException("Sum of new range of merged box in scoring function is smaller than 0 " + "for a non-leaf node. The sum of range of new bounding box is: " + sumOfNewRange); } return sumOfDifferenceInRange / sumOfNewRange; } public boolean isConverged() { return pointInsideBox; } } ================================================ FILE: Java/core/src/main/java/com/amazon/randomcutforest/anomalydetection/AnomalyAttributionVisitor.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.anomalydetection; import com.amazon.randomcutforest.CommonUtils; /** * Attribution exposes the attribution of scores produced by ScalarScoreVisitor * corresponding to different attributes. It allows a boolean * ignoreClosestCandidate; which when true will compute the attribution as it * that near neighbor was not present in RCF. This is turned on by default for * duplicate points seen by the forest, so that the attribution does not change * is a sequence of duplicate points are seen. For non-duplicate points, if the * boolean turned on, reduces effects of masking (when anomalous points are * included in the forest (which will be true with a few samples or when the * samples are not refreshed appropriately). It is worth remembering that * disallowing anomalous points from being included in the forest forest * explicitly will render the algorithm incapable of adjusting to a new normal * -- which is a strength of this algorithm. **/ public class AnomalyAttributionVisitor extends AbstractAttributionVisitor { public AnomalyAttributionVisitor(float[] pointToScore, int treeMass, int ignoreThreshold) { super(pointToScore, treeMass, ignoreThreshold); } public AnomalyAttributionVisitor(float[] pointToScore, int treeMass) { super(pointToScore, treeMass); } @Override protected double scoreSeen(int depth, int mass) { return CommonUtils.defaultScoreSeenFunction(depth, mass); } @Override protected double scoreUnseen(int depth, int mass) { return CommonUtils.defaultScoreUnseenFunction(depth, mass); } @Override protected double damp(int leafMass, int treeMass) { return CommonUtils.defaultDampFunction(leafMass, treeMass); } } ================================================ FILE: Java/core/src/main/java/com/amazon/randomcutforest/anomalydetection/AnomalyScoreVisitor.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.anomalydetection; import com.amazon.randomcutforest.CommonUtils; /** * This visitor computes a scalar anomaly score for a specified point. The basic * score computation is defined by {@link AbstractScalarScoreVisitor}, and this * class overrides the scoring functions so that input points that are more * likely to separated from in-sample points by a random cut receive a higher * anomaly score. * * While this basic algorithm produces good results when all the points in the * sample are distinct, it can produce unexpected results when a significant * portion of the points in the sample are duplicates. Therefore this class * supports different optional features for modifying the score produced when * the point being scored is equal to the leaf node in the traversal. */ public class AnomalyScoreVisitor extends AbstractScalarScoreVisitor { /** * Construct a new ScalarScoreVisitor * * @param pointToScore The point whose anomaly score we are computing * @param treeMass The total mass of the RandomCutTree that is scoring the * point */ public AnomalyScoreVisitor(float[] pointToScore, int treeMass) { super(pointToScore, treeMass); } /** * Construct a new ScalarScoreVisitor * * @param pointToScore The point whose anomaly score we are computing * @param treeMass The total mass of the RandomCutTree that is * scoring the point * @param ignoreLeafMassThreshold Is the maximum mass of the leaf which can be * ignored */ public AnomalyScoreVisitor(float[] pointToScore, int treeMass, int ignoreLeafMassThreshold) { super(pointToScore, treeMass, ignoreLeafMassThreshold); } @Override protected double scoreSeen(int depth, int mass) { return CommonUtils.defaultScoreSeenFunction(depth, mass); } @Override protected double scoreUnseen(int depth, int mass) { return CommonUtils.defaultScoreUnseenFunction(depth, mass); } @Override protected double damp(int leafMass, int treeMass) { return CommonUtils.defaultDampFunction(leafMass, treeMass); } } ================================================ FILE: Java/core/src/main/java/com/amazon/randomcutforest/anomalydetection/DynamicAttributionVisitor.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.anomalydetection; import java.util.function.BiFunction; import com.amazon.randomcutforest.returntypes.DiVector; public class DynamicAttributionVisitor extends AbstractAttributionVisitor { /** * The function used to compute the base score in the case where the point being * scored is equal to the leaf point (provided the ignoreLeafEquals and * ignoreLeafMassThreshold variables indicate that we should use this method). *

* Function arguments: leaf depth, leaf mass */ private final BiFunction scoreSeen; /** * A damping function used to dilute the impact of a point with a large number * of duplicates on the base score. *

* Function arguments: leaf mass, tree mass */ private final BiFunction damp; /** * The scoring function to use when the point being scored is not equal to the * leaf point, or when the points are equal but the ignoreLeafEquals or * ignoreLeafMassThreshold variable indicates that we should use the scoreUnseen * method. *

* Function arguments: leaf depth, leaf mass */ private final BiFunction scoreUnseen; /** * * @param point to be scored * @param treeMass mass of the tree * @param ignoreLeafMassThreshold threshold of mass for leaves to be ignored * @param scoreSeen part of the score when point has been seen * @param scoreUnseen part of the score for unseen point * @param damp dampening function for seen points */ public DynamicAttributionVisitor(float[] point, int treeMass, int ignoreLeafMassThreshold, BiFunction scoreSeen, BiFunction scoreUnseen, BiFunction damp) { super(point, treeMass, ignoreLeafMassThreshold); this.scoreSeen = scoreSeen; this.scoreUnseen = scoreUnseen; this.damp = damp; } @Override protected double scoreSeen(int depth, int leafMass) { return scoreSeen.apply((double) depth, (double) leafMass); } @Override protected double scoreUnseen(int depth, int leafMass) { return scoreUnseen.apply((double) depth, (double) leafMass); } @Override protected double damp(int leafMass, int treeMass) { return damp.apply((double) leafMass, (double) treeMass); } // turning off normalization @Override public DiVector getResult() { return new DiVector(directionalAttribution); } } ================================================ FILE: Java/core/src/main/java/com/amazon/randomcutforest/anomalydetection/DynamicScoreVisitor.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.anomalydetection; import java.util.function.BiFunction; public class DynamicScoreVisitor extends AbstractScalarScoreVisitor { /** * The function used to compute the base score in the case where the point being * scored is equal to the leaf point (provided the ignoreLeafEquals and * ignoreLeafMassThreshold variables indicate that we should use this method). *

* Function arguments: leaf depth, leaf mass */ protected final BiFunction scoreSeen; /** * A damping function used to dilute the impact of a point with a large number * of duplicates on the base score. *

* Function arguments: leaf mass, tree mass */ protected final BiFunction damp; /** * The scoring function to use when the point being scored is not equal to the * leaf point, or when the points are equal but the ignoreLeafEquals or * ignoreLeafMassThreshold variable indicates that we should use the scoreUnseen * method. *

* Function arguments: leaf depth, leaf mass */ protected final BiFunction scoreUnseen; /** * Constructor * * @param point being scored * @param treeMass mass of the tree * @param ignoreLeafMassThreshold the threshold for ignoring leaf nodes * @param scoreSeen the part of score function for previously seen * values * @param scoreUnseen part of the score for unseen values * @param damp dampening function for seen points */ public DynamicScoreVisitor(float[] point, int treeMass, int ignoreLeafMassThreshold, BiFunction scoreSeen, BiFunction scoreUnseen, BiFunction damp) { super(point, treeMass, ignoreLeafMassThreshold); this.scoreSeen = scoreSeen; this.scoreUnseen = scoreUnseen; this.damp = damp; } @Override protected double scoreSeen(int depth, int leafMass) { return scoreSeen.apply((double) depth, (double) leafMass); } @Override protected double scoreUnseen(int depth, int leafMass) { return scoreUnseen.apply((double) depth, (double) leafMass); } @Override protected double damp(int leafMass, int treeMass) { return damp.apply((double) leafMass, (double) treeMass); } /** * normalization is turned off for dynamic scoring because the function ranges * are unknown */ @Override public Double getResult() { return score; } } ================================================ FILE: Java/core/src/main/java/com/amazon/randomcutforest/anomalydetection/SimulatedTransductiveScalarScoreVisitor.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.anomalydetection; import java.util.function.BiFunction; import java.util.function.Function; import com.amazon.randomcutforest.tree.IBoundingBoxView; import com.amazon.randomcutforest.tree.INodeView; public class SimulatedTransductiveScalarScoreVisitor extends TransductiveScalarScoreVisitor { private final Function vecSepBuild; /** * Construct a new SimulatedTransductiveScalarScoreVisitor * * @param pointToScore The point whose anomaly score we are computing * @param treeMass The total mass of the RandomCutTree that is scoring the * point * @param scoreSeen is the part of the score function when the point has been * seen * @param scoreUnseen is the part of the score when the point has not been seen * @param damp corresponds to the dampening of the effect of the seen * points * @param vecSepBuild A function that provides the probabilities of choosing * different dimensions given a BoundingBox when the tree * was built. * @param vecSepScore A function that corresponds to importance of dimensions * during scoring */ public SimulatedTransductiveScalarScoreVisitor(float[] pointToScore, int treeMass, BiFunction scoreSeen, BiFunction scoreUnseen, BiFunction damp, Function vecSepBuild, Function vecSepScore) { super(pointToScore, treeMass, scoreSeen, scoreUnseen, damp, vecSepScore); this.vecSepBuild = vecSepBuild; } /** * Update the anomaly score based on the next step of the tree traversal. * * @param node The current node in the tree traversal * @param depthOfNode The depth of the current node in the tree */ @Override public void accept(INodeView node, int depthOfNode) { double weight = getWeight(node.getCutDimension(), vecSepBuild, node.getBoundingBox()); if (pointInsideBox) { score *= weight; return; } double probabilityOfSeparation = getProbabilityOfSeparation(node.getBoundingBox()); if (probabilityOfSeparation == 0) { pointInsideBox = true; } score = probabilityOfSeparation * scoreUnseen(depthOfNode, node.getMass()) + weight * score; } // The above function differs from TransductiveScalarScoreVisitor only in the // weight // computation and when the weight function is used. @Override public boolean isConverged() { return false; } } ================================================ FILE: Java/core/src/main/java/com/amazon/randomcutforest/anomalydetection/TransductiveScalarScoreVisitor.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.anomalydetection; import java.util.function.BiFunction; import java.util.function.Function; import com.amazon.randomcutforest.tree.IBoundingBoxView; import com.amazon.randomcutforest.tree.INodeView; public class TransductiveScalarScoreVisitor extends DynamicScoreVisitor { /* * the goal of this visitor is to allow tranductive inference; where during * scoring we make adjustments so that it appears (to the best of simulation * ability) that the tree was built using the knowledge of the point being * scored * */ protected final Function vecSepScore; /** * Construct a new SimulatedTransductiveScalarScoreVisitor * * @param pointToScore The point whose anomaly score we are computing * @param treeMass The total mass of the RandomCutTree that is scoring the * point * @param scoreSeen is the part of the score function when the point has been * seen * @param scoreUnseen is the part of the score when the point has not been seen * @param damp corresponds to the dampening of the effect of the seen * points * @param vecSep A function that provides the probabilities of choosing * different dimensions given a BoundingBox when the tree * was built. This must be the same as the probabilies of * Transductive inference during scoring. For extenstions * where these are different, see * SimulatedTransductiveScalarScoreVisitor * * Note that scores are not normalized because the function * ranges are unknown as is the case with * DynamicScoreVisitor */ public TransductiveScalarScoreVisitor(float[] pointToScore, int treeMass, BiFunction scoreSeen, BiFunction scoreUnseen, BiFunction damp, Function vecSep) { super(pointToScore, treeMass, 0, scoreSeen, scoreUnseen, damp); this.vecSepScore = vecSep; // build function is the same as scoring function } /** * Update the anomaly score based on the next step of the tree traversal. * * @param node The current node in the tree traversal * @param depthOfNode The depth of the current node in the tree */ @Override public void accept(INodeView node, int depthOfNode) { if (pointInsideBox) { return; } // note that score was unchanged before the return // this is only reasonable if the scoring was done using the same // probability function used to build the trees. double probabilityOfSeparation = getProbabilityOfSeparation(node.getBoundingBox()); double weight = getWeight(node.getCutDimension(), vecSepScore, node.getBoundingBox()); if (probabilityOfSeparation == 0) { pointInsideBox = true; return; } score = probabilityOfSeparation * scoreUnseen(depthOfNode, node.getMass()) + weight * score; } /** * Compute the probability that a random cut would separate the point from the * rest of the bounding box. This method is intended to compute the probability * for a non-leaf Node, and will throw an exception if a leaf-node bounding box * is detected. * * @param boundingBox The bounding box that we are computing the probability of * separation from. * @return is the probability */ @Override protected double getProbabilityOfSeparation(final IBoundingBoxView boundingBox) { double sumOfDenominator = 0d; double sumOfNumerator = 0d; double[] vec = vecSepScore.apply(boundingBox.getMergedBox(pointToScore)); for (int i = 0; i < pointToScore.length; ++i) { double maxVal = boundingBox.getMaxValue(i); double minVal = boundingBox.getMinValue(i); double oldRange = maxVal - minVal; sumOfDenominator += vec[i]; if (!coordInsideBox[i]) { if (maxVal < pointToScore[i]) { maxVal = pointToScore[i]; } else if (minVal > pointToScore[i]) { minVal = pointToScore[i]; } double newRange = maxVal - minVal; if (newRange > oldRange) { sumOfNumerator += vec[i] * (newRange - oldRange) / newRange; } else coordInsideBox[i] = true; } } if (sumOfDenominator <= 0) { // Sum of range across dimensions should only be 0 at leaf nodes as non-leaf // nodes always contain // more than one distinct point throw new IllegalStateException("Incorrect State"); } return sumOfNumerator / sumOfDenominator; // for RCFs vec[i] = newRange (for dimension i) and therefore the // sumOfNumerator is the sum of the difference (after and before // merging the point to the box) of ranges // sum of denominator is the sum the ranges in each dimension } // for this visitor class the assumption is that the trees are built using the // same probabilities as are used in scoring. In the application herein // vecSepBuild // is the same as vecSepScore as in the accept(node) above; however the function // is // written in the more general form so that it can be used for the Simulated // version as well without any changes. protected double getWeight(int dim, Function vecSepBuild, final IBoundingBoxView boundingBox) { double[] vecSmall = vecSepBuild.apply(boundingBox); // the smaller box was built! IBoundingBoxView largeBox = boundingBox.getMergedBox(pointToScore); double[] vecLarge = vecSepScore.apply(largeBox); // the larger box is only scored! double sumSmall = 0; double sumLarge = 0; for (int i = 0; i < pointToScore.length; i++) { sumSmall += vecSmall[i]; sumLarge += vecLarge[i]; } return (boundingBox.getRange(dim) / largeBox.getRange(dim)) * (sumSmall / sumLarge) * (vecLarge[dim] / vecSmall[dim]); // this can be larger than 1 // For RCFs vecLarge[dim] = largeBox.getRange(dim) and // vecSmall[dim] = smallBox.getRange(dim) // sumSmall/sumLarge is the probability of non-separation } } ================================================ FILE: Java/core/src/main/java/com/amazon/randomcutforest/config/Config.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.config; public class Config { public static final String BOUNDING_BOX_CACHE_FRACTION = "bounding_box_cache_fraction"; public static final String TIME_DECAY = "time_decay"; } ================================================ FILE: Java/core/src/main/java/com/amazon/randomcutforest/config/ForestMode.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.config; /** * Options for using RCF, specially with thresholds */ public enum ForestMode { /** * a standard mode that uses shingling and most known applications; it uses the * last K data points where K=1 would correspond to non time series (population) * analysis */ STANDARD, /** * time stamp is added automatically to data to correlate within RCF itself; * this is useful for event streaams and for modeling sparse events. Option is * provided to normalize the time gaps. */ TIME_AUGMENTED, /** * uses various Fill-In strageies for data with gaps but not really sparse. Must * have shingleSize greater than 1, typically larger shingle size is better, and * so is fewer input dimensions */ STREAMING_IMPUTE; } ================================================ FILE: Java/core/src/main/java/com/amazon/randomcutforest/config/IDynamicConfig.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.config; /** * This interface is used by model classes to configure model parameters by * name. This is intended primarily for settings that a user may want to change * at runtime. */ public interface IDynamicConfig { void setConfig(String name, T value, Class clazz); default void setConfig(String name, short value) { setConfig(name, value, Short.class); } default void setConfig(String name, int value) { setConfig(name, value, Integer.class); } default void setConfig(String name, long value) { setConfig(name, value, Long.class); } default void setConfig(String name, float value) { setConfig(name, value, Float.class); } default void setConfig(String name, double value) { setConfig(name, value, Double.class); } default void setConfig(String name, boolean value) { setConfig(name, value, Boolean.class); } T getConfig(String name, Class clazz); default Object getConfig(String name) { return getConfig(name, Object.class); } } ================================================ FILE: Java/core/src/main/java/com/amazon/randomcutforest/config/ImputationMethod.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.config; /** * Options for filling in missing values */ public enum ImputationMethod { /** * use all 0's */ ZERO, /** * use a fixed set of specified values (same as input dimension) */ FIXED_VALUES, /** * last known value in each input dimension */ PREVIOUS, /** * next seen value in each input dimension */ NEXT, /** * linear interpolation */ LINEAR, /** * use the RCF imputation; but would often require a minimum number of * observations and would use defaults (often LINEAR) till that point */ RCF; } ================================================ FILE: Java/core/src/main/java/com/amazon/randomcutforest/config/Precision.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.config; /** * Options for floating-point precision. */ public enum Precision { /** * Single-precision (32 bit) floating point numbers. */ FLOAT_32, /** * Double-precision (64 bit) floating point numbers. */ FLOAT_64; } ================================================ FILE: Java/core/src/main/java/com/amazon/randomcutforest/config/TransformMethod.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.config; /** * Options for internally transforming data in RCF These are built for * convenience. Domain knowledge before feeding data into RCF(any tool) will * often have the best benefit! These apply to the basic data and not * timestamps, time is (hopefully) always moving forward and is measured shifted * (from a running mean), with an option of normalization. */ public enum TransformMethod { /** * the best transformation for data! */ NONE, /** * standard column normalization using fixed weights */ WEIGHTED, /** * subtract a moving average -- the average would be computed using the same * discount factor as the time decay of the RCF samplers. */ SUBTRACT_MA, /** * divide by standard deviation, after subtracting MA */ NORMALIZE, /** * difference from previous */ DIFFERENCE, /** * divide by standard deviation of difference, after differencing (again * subtract MA) */ NORMALIZE_DIFFERENCE; } ================================================ FILE: Java/core/src/main/java/com/amazon/randomcutforest/executor/AbstractForestTraversalExecutor.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.executor; import java.util.function.BinaryOperator; import java.util.function.Function; import java.util.stream.Collector; import com.amazon.randomcutforest.ComponentList; import com.amazon.randomcutforest.IMultiVisitorFactory; import com.amazon.randomcutforest.IVisitorFactory; import com.amazon.randomcutforest.returntypes.ConvergingAccumulator; public abstract class AbstractForestTraversalExecutor { protected final ComponentList components; protected AbstractForestTraversalExecutor(ComponentList components) { this.components = components; } /** * Visit each of the trees in the forest and combine the individual results into * an aggregate result. A visitor is constructed for each tree using the visitor * factory, and then submitted to a tree. The results from all the trees are * combined using the accumulator and then transformed using the finisher before * being returned. * * @param point The point that defines the traversal path. * @param visitorFactory A factory method which is invoked for each tree to * construct a visitor. * @param accumulator A function that combines the results from individual * trees into an aggregate result. * @param finisher A function called on the aggregate result in order to * produce the final result. * @param The visitor result type. This is the type that will be * returned after traversing each individual tree. * @param The final type, after any final normalization at the * forest level. * @return The aggregated and finalized result after sending a visitor through * each tree in the forest. */ public abstract S traverseForest(float[] point, IVisitorFactory visitorFactory, BinaryOperator accumulator, Function finisher); /** * Visit each of the trees in the forest and combine the individual results into * an aggregate result. A visitor is constructed for each tree using the visitor * factory, and then submitted to each tree. The results from individual trees * are collected using the {@link java.util.stream.Collector} and returned. * Trees are visited in parallel using * {@link java.util.Collection#parallelStream()}. * * @param point The point that defines the traversal path. * @param visitorFactory A factory method which is invoked for each tree to * construct a visitor. * @param collector A collector used to aggregate individual tree results * into a final result. * @param The visitor result type. This is the type that will be * returned after traversing each individual tree. * @param The final type, after any final normalization at the * forest level. * @return The aggregated and finalized result after sending a visitor through * each tree in the forest. */ public abstract S traverseForest(float[] point, IVisitorFactory visitorFactory, Collector collector); /** * Visit each of the trees in the forest sequentially and combine the individual * results into an aggregate result. A visitor is constructed for each tree * using the visitor factory, and then submitted to each tree. The results from * all the trees are combined using the {@link ConvergingAccumulator}, and the * method stops visiting trees after convergence is reached. The result is * transformed using the finisher before being returned. * * @param point The point that defines the traversal path. * @param visitorFactory A factory method which is invoked for each tree to * construct a visitor. * @param accumulator An accumulator that combines the results from * individual trees into an aggregate result and checks to * see if the result can be returned without further * processing. * @param finisher A function called on the aggregate result in order to * produce the final result. * @param The visitor result type. This is the type that will be * returned after traversing each individual tree. * @param The final type, after any final normalization at the * forest level. * @return The aggregated and finalized result after sending a visitor through * each tree in the forest. */ public abstract S traverseForest(float[] point, IVisitorFactory visitorFactory, ConvergingAccumulator accumulator, Function finisher); /** * Visit each of the trees in the forest and combine the individual results into * an aggregate result. A multi-visitor is constructed for each tree using the * visitor factory, and then submitted to a tree. The results from all the trees * are combined using the accumulator and then transformed using the finisher * before being returned. * * @param point The point that defines the traversal path. * @param visitorFactory A factory method which is invoked for each tree to * construct a multi-visitor. * @param accumulator A function that combines the results from individual * trees into an aggregate result. * @param finisher A function called on the aggregate result in order to * produce the final result. * @param The visitor result type. This is the type that will be * returned after traversing each individual tree. * @param The final type, after any final normalization at the * forest level. * @return The aggregated and finalized result after sending a visitor through * each tree in the forest. */ public abstract S traverseForestMulti(float[] point, IMultiVisitorFactory visitorFactory, BinaryOperator accumulator, Function finisher); /** * Visit each of the trees in the forest and combine the individual results into * an aggregate result. A multi-visitor is constructed for each tree using the * visitor factory, and then submitted to a tree. The results from individual * trees are collected using the {@link java.util.stream.Collector} and * returned. Trees are visited in parallel using * {@link java.util.Collection#parallelStream()}. * * @param point The point that defines the traversal path. * @param visitorFactory A factory method which is invoked for each tree to * construct a visitor. * @param collector A collector used to aggregate individual tree results * into a final result. * @param The visitor result type. This is the type that will be * returned after traversing each individual tree. * @param The final type, after any final normalization at the * forest level. * @return The aggregated and finalized result after sending a visitor through * each tree in the forest. */ public abstract S traverseForestMulti(float[] point, IMultiVisitorFactory visitorFactory, Collector collector); } ================================================ FILE: Java/core/src/main/java/com/amazon/randomcutforest/executor/AbstractForestUpdateExecutor.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.executor; import java.util.Collections; import java.util.List; import lombok.Getter; import com.amazon.randomcutforest.ComponentList; import com.amazon.randomcutforest.store.IPointStore; /** * The class transforms input points into the form expected by internal models, * and submits transformed points to individual models for updating. * * @param The point representation used by model data * structures. * @param The explicit data type of exchanging points */ @Getter public abstract class AbstractForestUpdateExecutor { protected final IStateCoordinator updateCoordinator; protected final ComponentList components; protected boolean currentlySampling = true; /** * Create a new AbstractForestUpdateExecutor. * * @param updateCoordinator The update coordinater that will be used to * transform points and process deleted points if * needed. * @param components A list of models to update. */ protected AbstractForestUpdateExecutor(IStateCoordinator updateCoordinator, ComponentList components) { this.updateCoordinator = updateCoordinator; this.components = components; } /** * Update the forest with the given point. The point is submitted to each * sampler in the forest. If the sampler accepts the point, the point is * submitted to the update method in the corresponding Random Cut Tree. * * @param point The point used to update the forest. */ public void update(Point point) { update(point, false); } public void update(Point point, boolean updateShingleOnly) { long internalSequenceNumber = updateCoordinator.getTotalUpdates(); IPointStore store = updateCoordinator.getStore(); if (store != null && store.isInternalShinglingEnabled()) { internalSequenceNumber -= store.getShingleSize() - 1; } update(point, internalSequenceNumber, updateShingleOnly); } public void update(Point point, long sequenceNumber) { update(point, sequenceNumber, false); } public void update(Point point, long sequenceNumber, boolean updateShingleOnly) { PointReference updateInput = updateCoordinator.initUpdate(point, sequenceNumber, updateShingleOnly); boolean propagate = (updateInput != null) && currentlySampling; List> results = (!propagate) ? Collections.emptyList() : updateInternal(updateInput, sequenceNumber); updateCoordinator.completeUpdate(results, updateInput); } /** * Internal update method which submits the given input value to * {@link IUpdatable#update} for each model managed by this executor. * * @param updateInput Input value that will be submitted to the update method * for each tree. * @param currentIndex the timestamp * @return a list of points that were deleted from the model as part of the * update. */ protected abstract List> updateInternal(PointReference updateInput, long currentIndex); public void setCurrentlySampling(boolean value) { currentlySampling = value; } } ================================================ FILE: Java/core/src/main/java/com/amazon/randomcutforest/executor/AbstractUpdateCoordinator.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.executor; import lombok.Getter; import lombok.Setter; /** * A partial implementation of the {@link IStateCoordinator} interface that * defines a protected instance variable to track total updates and implements * the {@link IStateCoordinator#getTotalUpdates()} method. Classes that extend * AbstractStateCoordinator are responsible for incrementing the totalUpdates * counter after completing an update successfully. * * @param An internal point representation. * @param Data type of potential exchanges of data */ public abstract class AbstractUpdateCoordinator implements IStateCoordinator { @Getter @Setter protected long totalUpdates; public AbstractUpdateCoordinator() { totalUpdates = 0; } } ================================================ FILE: Java/core/src/main/java/com/amazon/randomcutforest/executor/IStateCoordinator.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.executor; import java.util.List; import com.amazon.randomcutforest.store.IPointStore; /** * An IStateCoordinator is used in conjunction with a family of IUpdatable * instances. The coordinator transforms the input point into the form expected * by the updatable models, and processes the list of deleted points if needed. * An IStateCoordinator can be used to manage shared state. * * @param An internal point representation. * @param Explicit point type */ public interface IStateCoordinator { /** * Transform the input point into a value that can be submitted to IUpdatable * instances. * * @param point The input point. * @param sequenceNumber the sequence number associated with the point * @param updateShingleOnly Only update the shingles (Provide a null reference) * or, also update the point store (provide a usable * reference) * * @return The point transformed into the representation expected by an * IUpdatable instance. */ PointReference initUpdate(Point point, long sequenceNumber, boolean updateShingleOnly); /** * Complete the update. This method is called by IStateCoordinator after all * IUpdatable instances have completed their individual updates. This method * receives the list of points that were deleted IUpdatable instances for * further processing if needed. * * @param updateResults A list of points that were deleted. * @param updateInput The corresponding output from {@link #initUpdate}, which * was passed into the update method for each component */ void completeUpdate(List> updateResults, PointReference updateInput); long getTotalUpdates(); void setTotalUpdates(long totalUpdates); IPointStore getStore(); } ================================================ FILE: Java/core/src/main/java/com/amazon/randomcutforest/executor/ITraversable.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.executor; import com.amazon.randomcutforest.IMultiVisitorFactory; import com.amazon.randomcutforest.IVisitorFactory; import com.amazon.randomcutforest.MultiVisitor; import com.amazon.randomcutforest.Visitor; import com.amazon.randomcutforest.tree.ITree; /** * This interface defines a model that can be traversed by a {@link Visitor}. */ public interface ITraversable { /** * Traverse the path defined by {@code point} and invoke the visitor. The path * defined by {@code point} is the path from the root node to the leaf node * where {@code point} would be inserted. The visitor is invoked for each node * in the path in reverse order (starting from the leaf node and ending at the * root node). The return value is obtained by calling * {@link Visitor#getResult()} on the visitor after it has visited each node in * the path. * * @param point A point that determines the traversal path. * @param visitorFactory A factory function that can be applied to an * {@link ITree} instance to obtain a {@link Visitor} * instance. * @param The return value type of the visitor. * @return the value of {@link Visitor#getResult()} after visiting each node in * the path. */ R traverse(float[] point, IVisitorFactory visitorFactory); /** * Traverse the paths defined by {@code point} and the multi-visitor, and invoke * the multi-visitor on each node. The path defined by {@code point} is the path * from the root node to the leaf node where {@code point} would be inserted. * However, at each node along the path we invoke {@link MultiVisitor#trigger}, * and if it returns true we create a copy of the visitor and send it down both * branches of the tree. The multi-visitor is invoked for each node in the path * in reverse order (starting from the leaf node and ending at the root node). * When two multi-visitors meet at a node, they are combined by calling * {@link MultiVisitor#combine}. The return value is obtained by calling * {@link MultiVisitor#getResult()} on the single remaining visitor after it has * visited each node in each branch the path. * * @param point A point that determines the traversal path. * @param visitorFactory A factory function that can be applied to an * {@link ITree} instance to obtain a {@link MultiVisitor} * instance. * @param The return value type of the multi-visitor. * @return the value of {@link MultiVisitor#getResult()} after traversing all * paths. */ R traverseMulti(float[] point, IMultiVisitorFactory visitorFactory); /** * After a new traversable model is initialized, it will not be able to return * meaningful results to queries until it has been updated with (i.e., learned * from) some number of points. The exact number of points may vary for * different models. After this method returns true for the first time, it * should continue to return true unless the user takes an explicit action to * reset the model state. * * @return true if this model is ready to provide a meaningful response to a * traversal query, otherwise false. */ boolean isOutputReady(); } ================================================ FILE: Java/core/src/main/java/com/amazon/randomcutforest/executor/IUpdatable.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.executor; public interface IUpdatable { /** * result of an update on a sampler plus tree * * @param point to be considered for updating the sampler plus tree * @param seqNum timestamp * @return the (inserted,deleted) pair of handles in the tree for eventual * bookkeeping */ UpdateResult update(PointReference point, long seqNum); } ================================================ FILE: Java/core/src/main/java/com/amazon/randomcutforest/executor/ParallelForestTraversalExecutor.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.executor; import java.util.List; import java.util.concurrent.Callable; import java.util.concurrent.ForkJoinPool; import java.util.function.BinaryOperator; import java.util.function.Function; import java.util.stream.Collector; import java.util.stream.Collectors; import com.amazon.randomcutforest.ComponentList; import com.amazon.randomcutforest.IMultiVisitorFactory; import com.amazon.randomcutforest.IVisitorFactory; import com.amazon.randomcutforest.returntypes.ConvergingAccumulator; /** * An implementation of forest traversal methods that uses a private thread pool * to visit trees in parallel. */ public class ParallelForestTraversalExecutor extends AbstractForestTraversalExecutor { ForkJoinPool forkJoinPool; private final int threadPoolSize; public ParallelForestTraversalExecutor(ComponentList treeExecutors, int threadPoolSize) { super(treeExecutors); this.threadPoolSize = threadPoolSize; forkJoinPool = new ForkJoinPool(threadPoolSize); } @Override public S traverseForest(float[] point, IVisitorFactory visitorFactory, BinaryOperator accumulator, Function finisher) { return submitAndJoin(() -> components.parallelStream().map(c -> c.traverse(point, visitorFactory)) .reduce(accumulator).map(finisher)) .orElseThrow(() -> new IllegalStateException("accumulator returned an empty result")); } @Override public S traverseForest(float[] point, IVisitorFactory visitorFactory, Collector collector) { return submitAndJoin( () -> components.parallelStream().map(c -> c.traverse(point, visitorFactory)).collect(collector)); } @Override public S traverseForest(float[] point, IVisitorFactory visitorFactory, ConvergingAccumulator accumulator, Function finisher) { for (int i = 0; i < components.size(); i += threadPoolSize) { final int start = i; final int end = Math.min(start + threadPoolSize, components.size()); List results = submitAndJoin(() -> components.subList(start, end).parallelStream() .map(c -> c.traverse(point, visitorFactory)).collect(Collectors.toList())); results.forEach(accumulator::accept); if (accumulator.isConverged()) { break; } } return finisher.apply(accumulator.getAccumulatedValue()); } @Override public S traverseForestMulti(float[] point, IMultiVisitorFactory visitorFactory, BinaryOperator accumulator, Function finisher) { return submitAndJoin(() -> components.parallelStream().map(c -> c.traverseMulti(point, visitorFactory)) .reduce(accumulator).map(finisher)) .orElseThrow(() -> new IllegalStateException("accumulator returned an empty result")); } @Override public S traverseForestMulti(float[] point, IMultiVisitorFactory visitorFactory, Collector collector) { return submitAndJoin( () -> components.parallelStream().map(c -> c.traverseMulti(point, visitorFactory)).collect(collector)); } T submitAndJoin(Callable callable) { if (forkJoinPool == null) { forkJoinPool = new ForkJoinPool(threadPoolSize); } return forkJoinPool.submit(callable).join(); } } ================================================ FILE: Java/core/src/main/java/com/amazon/randomcutforest/executor/ParallelForestUpdateExecutor.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.executor; import java.util.List; import java.util.concurrent.Callable; import java.util.concurrent.ForkJoinPool; import java.util.stream.Collectors; import com.amazon.randomcutforest.ComponentList; /** * An implementation of forest traversal methods that uses a private thread pool * to visit trees in parallel. * * @param references to a point * @param explicit data type of a point */ public class ParallelForestUpdateExecutor extends AbstractForestUpdateExecutor { ForkJoinPool forkJoinPool; private final int threadPoolSize; public ParallelForestUpdateExecutor(IStateCoordinator updateCoordinator, ComponentList components, int threadPoolSize) { super(updateCoordinator, components); this.threadPoolSize = threadPoolSize; forkJoinPool = new ForkJoinPool(threadPoolSize); } @Override protected List> updateInternal(PointReference point, long seqNum) { return submitAndJoin(() -> components.parallelStream().map(t -> t.update(point, seqNum)) .filter(UpdateResult::isStateChange).collect(Collectors.toList())); } T submitAndJoin(Callable callable) { if (forkJoinPool == null) { forkJoinPool = new ForkJoinPool(threadPoolSize); } return forkJoinPool.submit(callable).join(); } } ================================================ FILE: Java/core/src/main/java/com/amazon/randomcutforest/executor/PointStoreCoordinator.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.executor; import static com.amazon.randomcutforest.CommonUtils.checkNotNull; import java.util.List; import com.amazon.randomcutforest.store.IPointStore; import com.amazon.randomcutforest.store.PointStore; /** * pointstore coordinator for compact RCF * * @param the datatype of the actual point */ public class PointStoreCoordinator extends AbstractUpdateCoordinator { private final IPointStore store; public PointStoreCoordinator(IPointStore store) { checkNotNull(store, "store must not be null"); this.store = store; } @Override public Integer initUpdate(Point point, long sequenceNumber, boolean updateShingleOnly) { int index = store.add(point, sequenceNumber, updateShingleOnly); return (index == PointStore.INFEASIBLE_POINTSTORE_INDEX) ? null : index; } @Override public void completeUpdate(List> updateResults, Integer updateInput) { if (updateInput != null) { // can be null for initial shingling updateResults.forEach(result -> { result.getAddedPoint().ifPresent(store::incrementRefCount); result.getDeletedPoint().ifPresent(store::decrementRefCount); }); store.decrementRefCount(updateInput); } totalUpdates++; } public IPointStore getStore() { return store; } } ================================================ FILE: Java/core/src/main/java/com/amazon/randomcutforest/executor/SamplerPlusTree.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.executor; import static com.amazon.randomcutforest.CommonUtils.checkNotNull; import java.util.Optional; import lombok.Getter; import com.amazon.randomcutforest.IComponentModel; import com.amazon.randomcutforest.IMultiVisitorFactory; import com.amazon.randomcutforest.IVisitorFactory; import com.amazon.randomcutforest.config.Config; import com.amazon.randomcutforest.sampler.ISampled; import com.amazon.randomcutforest.sampler.IStreamSampler; import com.amazon.randomcutforest.tree.ITree; /** * A SamplerPlusTree corresponds to a combination of sampler and tree where the * information is passed via P and the tree can seek explicit point information * of type Q * * @param

The internal point representation expected by the component models * in this list. * @param The explicit data type of points being passed */ @Getter public class SamplerPlusTree implements IComponentModel { private ITree tree; private IStreamSampler

sampler; /** * Constructor of a pair of sampler + tree. The sampler is the driver's seat * because it aceepts/rejects independently of the tree and the tree has to * remain consistent. * * @param sampler the sampler * @param tree the corresponding tree */ public SamplerPlusTree(IStreamSampler

sampler, ITree tree) { checkNotNull(sampler, "sampler must not be null"); checkNotNull(tree, "tree must not be null"); this.sampler = sampler; this.tree = tree; } /** * This is main function that maintains the coordination between the sampler and * the tree. The sampler proposes acceptance (by setting the weight in * queueEntry) and in that case the evictedPoint is set. That evictedPoint is * removed from the tree and in that case its reference deleteRef of type T is * noted. The point is then added to the tree where the tree may propose a new * reference newRef because the point is already present in the tree. The * sampler entry is modified and added to the sampler. The pair of the newRef * and deleteRef are returned for plausible bookkeeping in update executors. * * @param point point in consideration for updating the sampler plus * tree * @param sequenceIndex a time stamp that is used to generate weight in the * timed sampling * @return the pair of (newRef,deleteRef) with potential Optional.empty() */ @Override public UpdateResult

update(P point, long sequenceIndex) { P deleteRef = null; if (sampler.acceptPoint(sequenceIndex)) { Optional> deletedPoint = sampler.getEvictedPoint(); if (deletedPoint.isPresent()) { ISampled

p = deletedPoint.get(); deleteRef = p.getValue(); tree.deletePoint(deleteRef, p.getSequenceIndex()); } // the tree may choose to return a reference to an existing point // whose value is equal to `point` P addedPoint = tree.addPoint(point, sequenceIndex); sampler.addPoint(addedPoint); return UpdateResult.

builder().addedPoint(addedPoint).deletedPoint(deleteRef).build(); } return UpdateResult.noop(); } @Override public R traverse(float[] point, IVisitorFactory visitorFactory) { return tree.traverse(point, visitorFactory); } @Override public R traverseMulti(float[] point, IMultiVisitorFactory visitorFactory) { return tree.traverseMulti(point, visitorFactory); } @Override public void setConfig(String name, T value, Class clazz) { if (Config.BOUNDING_BOX_CACHE_FRACTION.equals(name)) { tree.setConfig(name, value, clazz); } else if (Config.TIME_DECAY.equals(name)) { sampler.setConfig(name, value, clazz); } else { throw new IllegalArgumentException("Unsupported configuration setting: " + name); } } @Override public T getConfig(String name, Class clazz) { checkNotNull(clazz, "clazz must not be null"); if (Config.BOUNDING_BOX_CACHE_FRACTION.equals(name)) { return tree.getConfig(name, clazz); } else if (Config.TIME_DECAY.equals(name)) { return sampler.getConfig(name, clazz); } else { throw new IllegalArgumentException("Unsupported configuration setting: " + name); } } @Override public boolean isOutputReady() { return tree.isOutputReady(); } } ================================================ FILE: Java/core/src/main/java/com/amazon/randomcutforest/executor/SequentialForestTraversalExecutor.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.executor; import java.util.function.BinaryOperator; import java.util.function.Function; import java.util.stream.Collector; import com.amazon.randomcutforest.ComponentList; import com.amazon.randomcutforest.IComponentModel; import com.amazon.randomcutforest.IMultiVisitorFactory; import com.amazon.randomcutforest.IVisitorFactory; import com.amazon.randomcutforest.returntypes.ConvergingAccumulator; /** * Traverse the trees in a forest sequentially. */ public class SequentialForestTraversalExecutor extends AbstractForestTraversalExecutor { public SequentialForestTraversalExecutor(ComponentList components) { super(components); } @Override public S traverseForest(float[] point, IVisitorFactory visitorFactory, BinaryOperator accumulator, Function finisher) { R unnormalizedResult = components.stream().map(c -> c.traverse(point, visitorFactory)).reduce(accumulator) .orElseThrow(() -> new IllegalStateException("accumulator returned an empty result")); return finisher.apply(unnormalizedResult); } @Override public S traverseForest(float[] point, IVisitorFactory visitorFactory, Collector collector) { return components.stream().map(c -> c.traverse(point, visitorFactory)).collect(collector); } @Override public S traverseForest(float[] point, IVisitorFactory visitorFactory, ConvergingAccumulator accumulator, Function finisher) { for (IComponentModel component : components) { accumulator.accept(component.traverse(point, visitorFactory)); if (accumulator.isConverged()) { break; } } return finisher.apply(accumulator.getAccumulatedValue()); } @Override public S traverseForestMulti(float[] point, IMultiVisitorFactory visitorFactory, BinaryOperator accumulator, Function finisher) { R unnormalizedResult = components.stream().map(c -> c.traverseMulti(point, visitorFactory)).reduce(accumulator) .orElseThrow(() -> new IllegalStateException("accumulator returned an empty result")); return finisher.apply(unnormalizedResult); } @Override public S traverseForestMulti(float[] point, IMultiVisitorFactory visitorFactory, Collector collector) { return components.stream().map(c -> c.traverseMulti(point, visitorFactory)).collect(collector); } } ================================================ FILE: Java/core/src/main/java/com/amazon/randomcutforest/executor/SequentialForestUpdateExecutor.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.executor; import java.util.List; import java.util.stream.Collectors; import com.amazon.randomcutforest.ComponentList; /** * Traverse the trees in a forest sequentially. * * @param references to a point * @param explicit data type of a point */ public class SequentialForestUpdateExecutor extends AbstractForestUpdateExecutor { public SequentialForestUpdateExecutor(IStateCoordinator updateCoordinator, ComponentList components) { super(updateCoordinator, components); } @Override protected List> updateInternal(PointReference point, long seqNum) { return components.stream().map(t -> t.update(point, seqNum)).filter(UpdateResult::isStateChange) .collect(Collectors.toList()); } } ================================================ FILE: Java/core/src/main/java/com/amazon/randomcutforest/executor/UpdateResult.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.executor; import java.util.Optional; import lombok.Builder; /** * When {@link IUpdatable#update} is called, an updatable model may choose to * update its state with the submitted point. This class contains the result of * such an operation. A list of {@code AddPointResults}s is consumed by * {@link IStateCoordinator#completeUpdate} to update global state as needed to * reflect the updates to individual component models. * * @param The point reference type. */ @Builder public class UpdateResult { private static final UpdateResult NOOP = builder().build(); private final PointReference addedPoint; private final PointReference deletedPoint; /** * Return an {@code UpdateResult} value a no-op (an operation that did not * change the state of the model). For the returned value, * {@code isStateChange()} will be false. * * @param The point reference type. * @return an {@code UpdateResult} value representing a no-op. */ public static UpdateResult noop() { return (UpdateResult) NOOP; } /** * An optional containing a reference to the point that was added to the model * as part of the udpate call, or {@code Optional.empty()} if no point was * added. * * @return an optional containing a reference to the point that was added to the * model as part of the udpate call, or {@code Optional.empty()} if no * point was added. */ public Optional getAddedPoint() { return Optional.ofNullable(addedPoint); } /** * Once a model is at capacity, a point may be deleted from the model as part of * an update. If a point is deleted during the update operation, then the * deleted point reference will be present in the result of this method. * * @return a reference to the deleted point reference or * {@code Optional.empty()} if no point was deleted. */ public Optional getDeletedPoint() { return Optional.ofNullable(deletedPoint); } /** * Return true if this update result represents a change to the updatable model. * A change means that a point was added to the model, and possibly a point was * deleted from the model. * * @return true if this update result represents a change to the updatabla * model. */ public boolean isStateChange() { return addedPoint != null || deletedPoint != null; } } ================================================ FILE: Java/core/src/main/java/com/amazon/randomcutforest/imputation/ConditionalSampleSummarizer.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.imputation; import static com.amazon.randomcutforest.CommonUtils.checkArgument; import static java.lang.Math.min; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import com.amazon.randomcutforest.returntypes.ConditionalTreeSample; import com.amazon.randomcutforest.returntypes.SampleSummary; import com.amazon.randomcutforest.summarization.Summarizer; import com.amazon.randomcutforest.util.Weighted; public class ConditionalSampleSummarizer { /** * this limits the number of valueswe would see per dimension; note that it may * be hard to interpret a larger list */ public static int MAX_NUMBER_OF_TYPICAL_PER_DIMENSION = 2; /** * the maximum size of the typical points array, irrespective of the number of * missing dimensions */ public static int MAX_NUMBER_OF_TYPICAL_ELEMENTS = 5; /** * the array of missing dimension indices */ protected int[] missingDimensions; /** * the query point, where we are inferring the missing values indicated by * missingDimensions[0], missingDimensions[1], ... etc. */ protected float[] queryPoint; /** * a control parameter; =0 corresponds to (near) random samples and =1 * correponds to more central (low anomaly score) samples */ protected double centrality; /** * a boolean that determines if the summarization should use the missing * dimensions or the full dimensions. */ protected boolean project = false; protected int numberOfReps = 1; protected double shrinkage = 0; protected int shingleSize = 1; public ConditionalSampleSummarizer(int[] missingDimensions, float[] queryPoint, double centrality, boolean project, int numberOfReps, double shrinkage, int shingleSize) { this.missingDimensions = Arrays.copyOf(missingDimensions, missingDimensions.length); this.queryPoint = Arrays.copyOf(queryPoint, queryPoint.length); this.centrality = centrality; this.project = project; this.numberOfReps = numberOfReps; this.shrinkage = shrinkage; this.shingleSize = shingleSize; } public SampleSummary summarize(List alist) { checkArgument(alist.size() > 0, "incorrect call to summarize"); return summarize(alist, true); } public SampleSummary summarize(List alist, boolean addTypical) { /** * first we dedup over the points in the pointStore -- it is likely, and * beneficial that different trees acting as different predictors in an ensemble * predict the same point that has been seen before. This would be specially * true if the time decay is large -- then the whole ensemble starts to behave * as a sliding window. * * note that it is possible that two different *points* predict the same missing * value especially when values are repeated in time. however that check of * equality of points would be expensive -- and one mechanism is to use a tree * (much like an RCT) to test for equality. We will try to not perform such a * test. */ double totalWeight = alist.size(); List newList = ConditionalTreeSample.dedup(alist); newList.sort((o1, o2) -> Double.compare(o1.distance, o2.distance)); int dimensions = queryPoint.length; if (!addTypical) { ArrayList> points = new ArrayList<>(); newList.stream().forEach(e -> { if (!project) { if (shingleSize == 1) { points.add(new Weighted<>(e.leafPoint, (float) e.weight)); } else { float[] values = Arrays.copyOfRange(e.leafPoint, dimensions - dimensions / shingleSize, dimensions); points.add(new Weighted<>(values, (float) e.weight)); } } else { float[] values = new float[missingDimensions.length]; for (int i = 0; i < missingDimensions.length; i++) { values[i] = e.leafPoint[missingDimensions[i]]; } points.add(new Weighted<>(values, (float) e.weight)); } }); return new SampleSummary(points); } /** * for centrality = 0; there will be no filtration for centrality = 1; at least * half the values will be present -- the sum of distance(P33) + distance(P50) * appears to be slightly more reasonable than 2 * distance(P50) the distance 0 * elements correspond to exact matches (on the available fields) * * it is an open question is the weight of such points should be higher. But if * one wants true dynamic adaptability then such a choice to increase weights of * exact matches would go against the dynamic sampling based use of RCF. **/ int num = 0; if (centrality > 0) { double threshold = centrality * newList.get(0).distance + 1e-6; double currentWeight = 0; int alwaysInclude = 0; double remainderWeight = totalWeight; while (newList.get(alwaysInclude).distance == 0) { remainderWeight -= newList.get(alwaysInclude).weight; ++alwaysInclude; if (alwaysInclude == newList.size()) { break; } } for (int j = 1; j < newList.size(); j++) { if ((currentWeight < remainderWeight / 3 && currentWeight + newList.get(j).weight >= remainderWeight / 3) || (currentWeight < remainderWeight / 2 && currentWeight + newList.get(j).weight >= remainderWeight / 2)) { threshold = centrality * newList.get(j).distance; } currentWeight += newList.get(j).weight; } // note that the threshold is currently centrality * (some distance in the list) // thus the sequel uses a convex combination; and setting centrality = 0 removes // the entire filtering based on distances threshold += (1 - centrality) * newList.get(newList.size() - 1).distance; while (num < newList.size() && newList.get(num).distance <= threshold) { ++num; } } else { num = newList.size(); } ArrayList> typicalPoints = new ArrayList<>(); for (int j = 0; j < num; j++) { ConditionalTreeSample e = newList.get(j); float[] values; if (project) { values = new float[missingDimensions.length]; for (int i = 0; i < missingDimensions.length; i++) { values[i] = e.leafPoint[missingDimensions[i]]; } } else { if (shingleSize == 1) { values = e.leafPoint; } else { values = Arrays.copyOfRange(e.leafPoint, dimensions - dimensions / shingleSize, dimensions); } } typicalPoints.add(new Weighted<>(values, (float) e.weight)); } int maxAllowed = min(queryPoint.length * MAX_NUMBER_OF_TYPICAL_PER_DIMENSION, MAX_NUMBER_OF_TYPICAL_ELEMENTS); maxAllowed = min(maxAllowed, num); SampleSummary projectedSummary = Summarizer.summarize(typicalPoints, maxAllowed, num, false, Summarizer::L2distance, 72, false, numberOfReps, shrinkage); return new SampleSummary(typicalPoints, projectedSummary); } } ================================================ FILE: Java/core/src/main/java/com/amazon/randomcutforest/imputation/ImputeVisitor.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.imputation; import static com.amazon.randomcutforest.CommonUtils.checkArgument; import java.util.Arrays; import java.util.Random; import com.amazon.randomcutforest.CommonUtils; import com.amazon.randomcutforest.MultiVisitor; import com.amazon.randomcutforest.anomalydetection.AnomalyScoreVisitor; import com.amazon.randomcutforest.returntypes.ConditionalTreeSample; import com.amazon.randomcutforest.tree.BoundingBox; import com.amazon.randomcutforest.tree.INodeView; /** * A MultiVisitor which imputes missing values in a point. The missing values * are first imputed with the corresponding values in the leaf node in the * traversal path. Then, when this MultiVisitor is merged with another * MultiVisitor, we keep the imputed values with a lower rank, where the rank * value is the anomaly score for the imputed point. */ public class ImputeVisitor implements MultiVisitor { // default large values for initialization; consider -ve log( 0 ) public static double DEFAULT_INIT_VALUE = Double.MAX_VALUE; /** * an array that helps indicate the missing entires in the tree space */ protected final boolean[] missing; /** * the query point in the tree space, where the missing entries (in tree space) * would be overwritten */ protected float[] queryPoint; /** * the unnormalized anomaly score of a point, should be interpreted as -ve * log(likelihood) */ protected double anomalyRank; /** * distance of the point in the forest space, this is not tree specific */ protected double distance; /** * a parameter that controls central estimation ( = 1.0) and fully random sample * over entire range ( = 0.0 ) */ protected double centrality; protected long randomSeed; protected double randomRank; protected boolean converged; protected int pointIndex; protected int[] dimensionsUsed; protected BoundingBox box; /** * Create a new ImputeVisitor. * * @param liftedPoint The point with missing values we want to impute * @param queryPoint The projected point in the tree space * @param liftedMissingIndexes the original missing indices * @param missingIndexes The indexes of the missing values in the tree * space */ public ImputeVisitor(float[] liftedPoint, float[] queryPoint, int[] liftedMissingIndexes, int[] missingIndexes, double centrality, long randomSeed) { checkArgument(centrality >= 0, " cannoit be negative "); checkArgument(centrality <= 1.0, " cannot be more than 1.0"); this.queryPoint = Arrays.copyOf(queryPoint, queryPoint.length); this.missing = new boolean[queryPoint.length]; this.centrality = centrality; this.randomSeed = randomSeed; this.dimensionsUsed = new int[queryPoint.length]; if (missingIndexes == null) { missingIndexes = new int[0]; } for (int i = 0; i < missingIndexes.length; i++) { checkArgument(0 <= missingIndexes[i], "Missing value indexes cannot be negative"); checkArgument(missingIndexes[i] < queryPoint.length, "Missing value indexes must be less than query length"); missing[missingIndexes[i]] = true; } anomalyRank = DEFAULT_INIT_VALUE; distance = DEFAULT_INIT_VALUE; } public ImputeVisitor(float[] queryPoint, int numberOfMissingIndices, int[] missingIndexes) { this(queryPoint, Arrays.copyOf(queryPoint, queryPoint.length), Arrays.copyOf(missingIndexes, Math.min(numberOfMissingIndices, missingIndexes.length)), Arrays.copyOf(missingIndexes, Math.min(numberOfMissingIndices, missingIndexes.length)), 1.0, 0L); } /** * A copy constructor which creates a deep but partial copy of the original * ImputeVisitor. * * @param original */ ImputeVisitor(ImputeVisitor original) { int length = original.queryPoint.length; this.queryPoint = Arrays.copyOf(original.queryPoint, length); this.missing = Arrays.copyOf(original.missing, length); this.dimensionsUsed = new int[original.dimensionsUsed.length]; this.randomSeed = new Random(original.randomSeed).nextLong(); this.centrality = original.centrality; anomalyRank = DEFAULT_INIT_VALUE; distance = DEFAULT_INIT_VALUE; } /** * Update the rank value using the probability that the imputed query point is * separated from this bounding box in a random cut. This step is conceptually * the same as * {@link AnomalyScoreVisitor#accept}. * * @param node the node being visited * @param depthOfNode the depth of the node being visited */ public void accept(final INodeView node, final int depthOfNode) { double probabilityOfSeparation; if (box == null) { box = (BoundingBox) node.getBoundingBox(); probabilityOfSeparation = CommonUtils.getProbabilityOfSeparation(box, queryPoint); } else { probabilityOfSeparation = node.probailityOfSeparation(queryPoint); } converged = (probabilityOfSeparation == 0); if (probabilityOfSeparation <= 0) { return; } anomalyRank = probabilityOfSeparation * scoreUnseen(depthOfNode, node.getMass()) + (1 - probabilityOfSeparation) * anomalyRank; } /** * Impute the missing values in the query point with the corresponding values in * the leaf point. Set the rank to the score function evaluated at the leaf * node. * * @param leafNode the leaf node being visited * @param depthOfNode the depth of the leaf node */ @Override public void acceptLeaf(final INodeView leafNode, final int depthOfNode) { float[] leafPoint = leafNode.getLeafPoint(); pointIndex = leafNode.getLeafPointIndex(); double distance = 0; for (int i = 0; i < queryPoint.length; i++) { if (missing[i]) { queryPoint[i] = leafPoint[i]; } else { double t = (queryPoint[i] - leafPoint[i]); distance += Math.abs(t); } } if (centrality < 1.0) { Random rng = new Random(randomSeed); randomSeed = rng.nextLong(); randomRank = rng.nextDouble(); } this.distance = distance; if (distance <= 0) { converged = true; if (depthOfNode == 0) { anomalyRank = 0; } else { anomalyRank = scoreSeen(depthOfNode, leafNode.getMass()); } } else { anomalyRank = scoreUnseen(depthOfNode, leafNode.getMass()); } } /** * @return the imputed point. */ @Override public ConditionalTreeSample getResult() { return new ConditionalTreeSample(pointIndex, box, distance, queryPoint); } /** * An ImputeVisitor should split whenever the cut dimension in a node * corresponds to a missing value in the query point. * * @param node A node in the tree traversal * @return true if the cut dimension in the node corresponds to a missing value * in the query point, false otherwise. */ @Override public boolean trigger(final INodeView node) { int index = node.getCutDimension(); ++dimensionsUsed[index]; return missing[index]; } protected double getAnomalyRank() { return anomalyRank; } protected double getDistance() { return distance; } /** * @return a copy of this visitor. */ @Override public MultiVisitor newPartialCopy() { return new ImputeVisitor(this); } double adjustedRank() { return (1 - centrality) * randomRank + centrality * anomalyRank; } protected boolean updateCombine(ImputeVisitor other) { return other.adjustedRank() < adjustedRank(); } /** * If this visitor as a lower rank than the second visitor, do nothing. * Otherwise, overwrite this visitor's imputed values withe the valuse from the * second visitor. * * @param other A second visitor */ @Override public void combine(MultiVisitor other) { ImputeVisitor visitor = (ImputeVisitor) other; if (updateCombine(visitor)) { updateFrom(visitor); } } protected void updateFrom(ImputeVisitor visitor) { System.arraycopy(visitor.queryPoint, 0, queryPoint, 0, queryPoint.length); pointIndex = visitor.pointIndex; anomalyRank = visitor.anomalyRank; box = visitor.box; converged = visitor.converged; distance = visitor.distance; } protected double scoreSeen(int depth, int mass) { return CommonUtils.defaultScoreSeenFunction(depth, mass); } protected double scoreUnseen(int depth, int mass) { return CommonUtils.defaultScoreUnseenFunction(depth, mass); } @Override public boolean isConverged() { return converged; } } ================================================ FILE: Java/core/src/main/java/com/amazon/randomcutforest/inputtypes/Point.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.inputtypes; import java.util.Arrays; /** * a basic class that defines a proto-point */ public class Point { // current values double[] currentInput; // input timestamp long inputTimestamp; public Point(double[] input, long inputTimestamp) { this.currentInput = copyIfNotnull(input); this.inputTimestamp = inputTimestamp; } public double[] getCurrentInput() { return copyIfNotnull(currentInput); } public long getInputTimestamp() { return inputTimestamp; } protected double[] copyIfNotnull(double[] array) { return array == null ? null : Arrays.copyOf(array, array.length); } } ================================================ FILE: Java/core/src/main/java/com/amazon/randomcutforest/inspect/NearNeighborVisitor.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.inspect; import java.util.ArrayList; import java.util.List; import java.util.Optional; import com.amazon.randomcutforest.Visitor; import com.amazon.randomcutforest.returntypes.Neighbor; import com.amazon.randomcutforest.tree.INodeView; /** * A visitor that returns the leaf node in a traversal if the distance between * the leaf point and the query point is less than a given threshold. */ public class NearNeighborVisitor implements Visitor> { private final float[] queryPoint; private final double distanceThreshold; private Neighbor neighbor; /** * Create a NearNeighborVisitor for the given query point. * * @param queryPoint The point whose neighbors we are looking for. * @param distanceThreshold Leaf points whose distance from the query point is * less than this value are considered near neighbors. */ public NearNeighborVisitor(float[] queryPoint, double distanceThreshold) { this.queryPoint = queryPoint; this.distanceThreshold = distanceThreshold; neighbor = null; } /** * Create a NearNeighborVisitor which always returns the leaf point in the * traversal. The distance threshold is set to positive infinity. * * @param queryPoint The point whose neighbors we are looking for. */ public NearNeighborVisitor(float[] queryPoint) { this(queryPoint, Double.POSITIVE_INFINITY); } /** * Near neighbors are identified in the {@link #acceptLeaf} method, hence this * method does nothing. * * @param node the node being visited * @param depthOfNode the depth of the node being visited */ @Override public void accept(INodeView node, int depthOfNode) { } /** * Check to see whether the Euclidean distance between the leaf point and the * query point is less than the distance threshold. If it is, then this visitor * will return an {@link java.util.Optional} containing this leaf point * (converted to a {@link Neighbor} object). Otherwise, this visitor will return * an empty Optional. * * @param leafNode the leaf node being visited * @param depthOfNode the depth of the leaf node */ @Override public void acceptLeaf(INodeView leafNode, int depthOfNode) { float[] leafPoint = leafNode.getLiftedLeafPoint(); double distanceSquared = 0.0; for (int i = 0; i < leafPoint.length; i++) { double diff = queryPoint[i] - leafPoint[i]; distanceSquared += diff * diff; } if (Math.sqrt(distanceSquared) < distanceThreshold) { List sequenceIndexes = new ArrayList<>(leafNode.getSequenceIndexes().keySet()); neighbor = new Neighbor(leafPoint, Math.sqrt(distanceSquared), sequenceIndexes); } } /** * @return an {@link Optional} containing the leaf point (converted to a * {@link Neighbor} if the Euclidean distance between the leaf point and * the query point is less than the distance threshold. Otherwise return * an empty Optional. */ @Override public Optional getResult() { return Optional.ofNullable(neighbor); } @Override public boolean isConverged() { return true; } } ================================================ FILE: Java/core/src/main/java/com/amazon/randomcutforest/interpolation/SimpleInterpolationVisitor.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.interpolation; import java.util.Arrays; import com.amazon.randomcutforest.Visitor; import com.amazon.randomcutforest.returntypes.DensityOutput; import com.amazon.randomcutforest.returntypes.InterpolationMeasure; import com.amazon.randomcutforest.tree.IBoundingBoxView; import com.amazon.randomcutforest.tree.INodeView; /** * A Visitor which computes several geometric measures that related a given * query point to the points stored in a RandomCutTree. **/ public class SimpleInterpolationVisitor implements Visitor { private final float[] pointToScore; private final long sampleSize; private final boolean centerOfMass; public InterpolationMeasure stored; double sumOfNewRange = 0d; double sumOfDifferenceInRange = 0d; double[] directionalDistanceVector; double[] differenceInRangeVector; /** * A flag that states whether the point to score is known to be contained inside * the bounding box of Nodes being accepted. Assumes nodes are accepted in * leaf-to-root order. */ boolean pointInsideBox; /** * An array that keeps track of whether each margin of the point being scored is * outside inside the box considered during the recursive call to compute the * score. Assumes nodes are accepted in leaf-to-root order. */ boolean[] coordInsideBox; private boolean pointEqualsLeaf; private IBoundingBoxView theShadowBox; private double savedMass; private double pointMass; /** * Construct a new Visitor * * @param pointToScore The point whose anomaly score we are computing * @param sampleSize The sub-sample size used by the RandomCutTree that is * scoring the point * @param pointMass indicates the mass/duplicity of the current point * @param centerOfMass indicates if the tree has centerOfMass */ public SimpleInterpolationVisitor(float[] pointToScore, int sampleSize, double pointMass, boolean centerOfMass) { this.pointToScore = Arrays.copyOf(pointToScore, pointToScore.length); this.sampleSize = sampleSize; // the samplesize may be useful to scale pointInsideBox = false; this.pointMass = pointMass; // this corresponds to the mass/duplicity of the query stored = new DensityOutput(pointToScore.length, sampleSize); directionalDistanceVector = new double[2 * pointToScore.length]; differenceInRangeVector = new double[2 * pointToScore.length]; pointEqualsLeaf = false; this.centerOfMass = centerOfMass; // will be initialized to an array of false values coordInsideBox = new boolean[pointToScore.length]; } /** * @return The score computed up until this point. */ @Override public InterpolationMeasure getResult() { return stored; } @Override public void accept(INodeView node, int depthOfNode) { if (pointInsideBox) { return; } IBoundingBoxView largeBox; IBoundingBoxView smallBox; if (pointEqualsLeaf) { largeBox = node.getBoundingBox(); theShadowBox = theShadowBox == null ? node.getSiblingBoundingBox(pointToScore) : theShadowBox.getMergedBox(node.getSiblingBoundingBox(pointToScore)); smallBox = theShadowBox; } else { smallBox = node.getBoundingBox(); largeBox = smallBox.getMergedBox(pointToScore); } updateForCompute(smallBox, largeBox); double probOfCut = sumOfDifferenceInRange / sumOfNewRange; if (probOfCut <= 0) { pointInsideBox = true; } else { double fieldVal = fieldExt(node, centerOfMass, savedMass, pointToScore); double influenceVal = influenceExt(node, centerOfMass, savedMass, pointToScore); // if center of mass has been enabled, then those can be used in a similar // situation // otherwise the center of mass is the 0 vector for (int i = 0; i < pointToScore.length; i++) { double prob = differenceInRangeVector[2 * i] / sumOfNewRange; stored.probMass.high[i] = prob * influenceVal + (1 - probOfCut) * stored.probMass.high[i]; stored.measure.high[i] = prob * fieldVal + (1 - probOfCut) * stored.measure.high[i]; stored.distances.high[i] = prob * directionalDistanceVector[2 * i] * influenceVal + (1 - probOfCut) * stored.distances.high[i]; } for (int i = 0; i < pointToScore.length; i++) { double prob = differenceInRangeVector[2 * i + 1] / sumOfNewRange; stored.probMass.low[i] = prob * influenceVal + (1 - probOfCut) * stored.probMass.low[i]; stored.measure.low[i] = prob * fieldVal + (1 - probOfCut) * stored.measure.low[i]; stored.distances.low[i] = prob * directionalDistanceVector[2 * i + 1] * influenceVal + (1 - probOfCut) * stored.distances.low[i]; } } } @Override public void acceptLeaf(INodeView leafNode, int depthOfNode) { updateForCompute(leafNode.getBoundingBox(), leafNode.getBoundingBox().getMergedBox(pointToScore)); if (sumOfDifferenceInRange <= 0) { // values must be equal savedMass = pointMass + leafNode.getMass(); pointEqualsLeaf = true; for (int i = 0; i < pointToScore.length; i++) { stored.measure.high[i] = stored.measure.low[i] = 0.5 * selfField(leafNode, savedMass) / pointToScore.length; stored.probMass.high[i] = stored.probMass.low[i] = 0.5 * selfInfluence(leafNode, savedMass) / pointToScore.length; } Arrays.fill(coordInsideBox, false); } else { savedMass = pointMass; double fieldVal = fieldPoint(leafNode, savedMass, pointToScore); double influenceVal = influencePoint(leafNode, savedMass, pointToScore); for (int i = 0; i < pointToScore.length; i++) { double prob = differenceInRangeVector[2 * i] / sumOfNewRange; stored.probMass.high[i] = prob * influenceVal; stored.measure.high[i] = prob * fieldVal; stored.distances.high[i] = prob * directionalDistanceVector[2 * i] * influenceVal; } for (int i = 0; i < pointToScore.length; i++) { double prob = differenceInRangeVector[2 * i + 1] / sumOfNewRange; stored.probMass.low[i] = prob * influenceVal; stored.measure.low[i] = prob * fieldVal; stored.distances.low[i] = prob * directionalDistanceVector[2 * i + 1] * influenceVal; } } } /** * Update instance variables based on the difference between the large box and * small box. The values set by this method are used in {@link #accept} and * {@link #acceptLeaf} to update the stored density. * * @param smallBox * @param largeBox */ void updateForCompute(IBoundingBoxView smallBox, IBoundingBoxView largeBox) { sumOfNewRange = 0d; sumOfDifferenceInRange = 0d; Arrays.fill(directionalDistanceVector, 0); Arrays.fill(differenceInRangeVector, 0); for (int i = 0; i < pointToScore.length; ++i) { sumOfNewRange += largeBox.getRange(i); if (coordInsideBox[i]) { continue; } double maxGap = Math.max(largeBox.getMaxValue(i) - smallBox.getMaxValue(i), 0.0); double minGap = Math.max(smallBox.getMinValue(i) - largeBox.getMinValue(i), 0.0); if (maxGap + minGap > 0.0) { sumOfDifferenceInRange += (minGap + maxGap); differenceInRangeVector[2 * i] = maxGap; differenceInRangeVector[2 * i + 1] = minGap; if (maxGap > 0) { directionalDistanceVector[2 * i] = (maxGap + smallBox.getRange(i)); } else { directionalDistanceVector[2 * i + 1] = (minGap + smallBox.getRange(i)); } } else { coordInsideBox[i] = true; } } } /** * The functions below can be changed for arbitrary interpolations. * * @param node/leafNode corresponds to the node in the tree influencing the * current point * @param centerOfMass feature flag describing if the center of mass is enabled * in tree in general this can be used for arbitrary * extensions of the node class with additional * information. * @param thisMass duplicity of query * @param thislocation location of query * @return is the value or a 0/1 function -- the functions can be thresholded * based of geometric coordinates of the query and the node. Many * different Kernels can be expressed in this decomposed manner. */ double fieldExt(INodeView node, boolean centerOfMass, double thisMass, float[] thislocation) { return (node.getMass() + thisMass); } double influenceExt(INodeView node, boolean centerOfMass, double thisMass, float[] thislocation) { return 1.0; } double fieldPoint(INodeView node, double thisMass, float[] thislocation) { return (node.getMass() + thisMass); } double influencePoint(INodeView node, double thisMass, float[] thislocation) { return 1.0; } double selfField(INodeView leafNode, double mass) { return mass; } double selfInfluence(INodeView leafnode, double mass) { return 1.0; } @Override public boolean isConverged() { return pointInsideBox; } } ================================================ FILE: Java/core/src/main/java/com/amazon/randomcutforest/preprocessor/IPreprocessor.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.preprocessor; import com.amazon.randomcutforest.RandomCutForest; import com.amazon.randomcutforest.config.ImputationMethod; import com.amazon.randomcutforest.returntypes.RangeVector; import com.amazon.randomcutforest.returntypes.SampleSummary; import com.amazon.randomcutforest.returntypes.TimedRangeVector; public interface IPreprocessor { boolean isOutputReady(); int getShingleSize(); int getInputLength(); float[] getLastShingledPoint(); double[] getShift(); double[] getScale(); double[] getSmoothedDeviations(); int getInternalTimeStamp(); int getValuesSeen(); ImputationMethod getImputationMethod(); double dataQuality(); float[] getScaledShingledInput(double[] point, long timestamp, int[] missing, RandomCutForest forest); SampleSummary invertInPlaceRecentSummaryBlock(SampleSummary summary); void update(double[] point, float[] rcfPoint, long timestamp, int[] missing, RandomCutForest forest); double[] getExpectedValue(int relativeBlockIndex, double[] reference, float[] point, float[] newPoint); double[] getShingledInput(int index); double[] getShingledInput(); double[] getDefaultFill(); void setDefaultFill(double[] fill); long getTimeStamp(int index); double getTransformDecay(); int numberOfImputes(long timestamp); TimedRangeVector invertForecastRange(RangeVector ranges, long lastTimeStamp, double[] delta, boolean useExpected, long expectedTimeStamp); } ================================================ FILE: Java/core/src/main/java/com/amazon/randomcutforest/preprocessor/ImputePreprocessor.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.preprocessor; import static com.amazon.randomcutforest.CommonUtils.checkArgument; import static com.amazon.randomcutforest.CommonUtils.toDoubleArray; import static com.amazon.randomcutforest.config.ImputationMethod.FIXED_VALUES; import static com.amazon.randomcutforest.config.ImputationMethod.LINEAR; import static com.amazon.randomcutforest.config.ImputationMethod.NEXT; import static com.amazon.randomcutforest.config.ImputationMethod.PREVIOUS; import static com.amazon.randomcutforest.config.ImputationMethod.RCF; import static com.amazon.randomcutforest.config.TransformMethod.DIFFERENCE; import static com.amazon.randomcutforest.config.TransformMethod.NORMALIZE_DIFFERENCE; import java.util.Arrays; import lombok.Getter; import lombok.Setter; import com.amazon.randomcutforest.RandomCutForest; import com.amazon.randomcutforest.config.ImputationMethod; import com.amazon.randomcutforest.statistics.Deviation; @Getter @Setter public class ImputePreprocessor extends InitialSegmentPreprocessor { public static ImputationMethod DEFAULT_INITIAL = LINEAR; public static ImputationMethod DEFAULT_DYNAMIC = PREVIOUS; /** * the builder initializes the numberOfImputed, which is not used in the other * classes * * @param builder a builder for Preprocessor */ public ImputePreprocessor(Builder builder) { super(builder); numberOfImputed = shingleSize; } public float[] getScaledShingledInput(double[] inputPoint, long timestamp, int[] missing, RandomCutForest forest) { if (valuesSeen < startNormalization) { return null; } checkArgument(timestamp > previousTimeStamps[shingleSize - 1], "incorrect ordering of time"); // generate next tuple without changing the forest, these get modified in the // transform // a primary culprit is differencing, a secondary culprit is the numberOfImputed long[] savedTimestamps = Arrays.copyOf(previousTimeStamps, previousTimeStamps.length); double[] savedShingledInput = Arrays.copyOf(lastShingledInput, lastShingledInput.length); float[] savedShingle = Arrays.copyOf(lastShingledPoint, lastShingledPoint.length); int savedNumberOfImputed = numberOfImputed; int lastActualInternal = internalTimeStamp; float[] point = generateShingle(inputPoint, timestamp, missing, getTimeFactor(timeStampDeviations[1]), false, forest); // restore state internalTimeStamp = lastActualInternal; numberOfImputed = savedNumberOfImputed; previousTimeStamps = Arrays.copyOf(savedTimestamps, savedTimestamps.length); lastShingledInput = Arrays.copyOf(savedShingledInput, savedShingledInput.length); lastShingledPoint = Arrays.copyOf(savedShingle, savedShingle.length); return point; } /** * decides if the forest should be updated, this is needed for imputation on the * fly. The main goal of this function is to avoid runaway sequences where a * single input changes the forest too much. But in some cases that behavior can * be warranted and then this function should be changed * * @return if the forest should be updated */ protected boolean updateAllowed() { double fraction = numberOfImputed * 1.0 / (shingleSize); if (fraction > 1) { fraction = 1; } if (numberOfImputed >= shingleSize - 1 && previousTimeStamps[0] != previousTimeStamps[1] && (transformMethod == DIFFERENCE || transformMethod == NORMALIZE_DIFFERENCE)) { // this shingle is disconnected from the previously seen values // these transformations will have little meaning // positions 0 and 1 corresponds to the oldest in the shingle -- if we admit // that case // then we would admit a shingle where impact of the most recent observation is // shingleSize - 1 // and the oldest one is 1. It seemed conservative to not allow that -- // primarily to stop a // "runaway" effect where a single value (and its imputations affect // everything). // A gap at positions 1 and 2 would correspond to a shingleSize - 2 and 2 (or // two different points). return false; } dataQuality[0].update(1 - fraction); return (fraction < useImputedFraction && internalTimeStamp >= shingleSize); } @Override protected void updateTimestamps(long timestamp) { /* * For imputations done on timestamps other than the current one (specified by * the timestamp parameter), the timestamp of the imputed tuple matches that of * the input tuple, and we increment numberOfImputed. For imputations done at * the current timestamp (if all input values are missing), the timestamp of the * imputed tuple is the current timestamp, and we increment numberOfImputed. * * To check if imputed values are still present in the shingle, we use the * condition (previousTimeStamps[0] == previousTimeStamps[1]). This works * because previousTimeStamps has a size equal to the shingle size and is filled * with the current timestamp. * * For example, if the last 10 values were imputed and the shingle size is 8, * the condition will most likely return false until all 10 imputed values are * removed from the shingle. * * However, there are scenarios where we might miss decrementing * numberOfImputed: * * 1. Not all values in the shingle are imputed. 2. We accumulated * numberOfImputed when the current timestamp had missing values. * * As a result, this could cause the data quality measure to decrease * continuously since we are always counting missing values that should * eventually be reset to zero. To address the issue, we add code in method * updateForest to decrement numberOfImputed when we move to a new timestamp, * provided there is no imputation. This ensures the imputation fraction does * not increase as long as the imputation is continuing. This also ensures that * the forest update decision, which relies on the imputation fraction, * functions correctly. The forest is updated only when the imputation fraction * is below the threshold of 0.5. * * Also, why can't we combine the decrement code between updateTimestamps and * updateForest together? This would cause Consistency.ImputeTest to fail when * testing with and without imputation, as the RCF scores would not change. The * method updateTimestamps is used in other places (e.g., updateState and * dischargeInitial), not only in updateForest. */ if (previousTimeStamps[0] == previousTimeStamps[1]) { numberOfImputed = numberOfImputed - 1; } super.updateTimestamps(timestamp); } /** * the following function mutates the forest, the lastShingledPoint, * lastShingledInput as well as previousTimeStamps, and adds the shingled input * to the forest (provided it is allowed by the number of imputes and the * transformation function) * * @param input the input point (can be imputed) * @param timestamp the input timestamp (will be the most recent timestamp * for imputes) * @param forest the resident RCF * @param isFullyImputed is the current input fully imputed based on timestamps */ void updateForest(boolean changeForest, double[] input, long timestamp, RandomCutForest forest, boolean isFullyImputed) { float[] scaledInput = transformer.transformValues(internalTimeStamp, input, getShingledInput(shingleSize - 1), null, clipFactor); updateShingle(input, scaledInput); updateTimestamps(timestamp); if (isFullyImputed) { // The numImputed is now capped at the shingle size to ensure that the impute // fraction, // calculated as numberOfImputed * 1.0 / shingleSize, does not exceed 1. numberOfImputed = Math.min(numberOfImputed + 1, shingleSize); } else if (numberOfImputed > 0) { // Decrement numberOfImputed when the new value is not imputed numberOfImputed = numberOfImputed - 1; } if (changeForest) { if (forest.isInternalShinglingEnabled()) { // update allowed = not updateShingleOnly forest.update(scaledInput, !updateAllowed()); } else if (updateAllowed()) { forest.update(lastShingledPoint); } } } @Override public void update(double[] point, float[] rcfPoint, long timestamp, int[] missing, RandomCutForest forest) { if (valuesSeen < startNormalization) { storeInitial(point, timestamp, missing); // will change valuesSeen if (valuesSeen == startNormalization) { dischargeInitial(forest); } return; } generateShingle(point, timestamp, missing, getTimeFactor(timeStampDeviations[1]), true, forest); // The confidence formula depends on numImputed (the number of recent // imputations seen) // and seenValues (all values seen). To ensure confidence decreases when // numImputed increases, // we need to count only non-imputed values as seenValues. if (missing == null || missing.length != point.length) { ++valuesSeen; } } protected double getTimeFactor(Deviation deviation) { double timeFactor = deviation.getMean(); double dev = deviation.getDeviation(); if (dev > 0 && dev < timeFactor / 2) { // a correction timeFactor -= dev * dev / (2 * timeFactor); } return timeFactor; } /** * a block which is executed once. It first computes the multipliers for * normalization and then processes each of the stored inputs */ protected void dischargeInitial(RandomCutForest forest) { Deviation tempTimeDeviation = new Deviation(); for (int i = 0; i < initialTimeStamps.length - 1; i++) { tempTimeDeviation.update(initialTimeStamps[i + 1] - initialTimeStamps[i]); } double timeFactor = getTimeFactor(tempTimeDeviation); prepareInitialInput(); Deviation[] deviations = getInitialDeviations(); Arrays.fill(previousTimeStamps, initialTimeStamps[0]); numberOfImputed = shingleSize; for (int i = 0; i < valuesSeen; i++) { // initial imputation; not using the global dependency long lastInputTimeStamp = previousTimeStamps[shingleSize - 1]; if (internalTimeStamp > 0) { double[] previous = new double[inputLength]; System.arraycopy(lastShingledInput, lastShingledInput.length - inputLength, previous, 0, inputLength); int numberToImpute = determineGap(initialTimeStamps[i] - lastInputTimeStamp, timeFactor) - 1; if (numberToImpute > 0) { double step = 1.0 / (numberToImpute + 1); // the last impute corresponds to the current observed value for (int j = 0; j < numberToImpute; j++) { double[] result = basicImpute(step * (j + 1), previous, initialValues[i], DEFAULT_INITIAL); float[] scaledInput = transformer.transformValues(internalTimeStamp, result, getShingledInput(shingleSize - 1), deviations, clipFactor); updateShingle(result, scaledInput); updateTimestamps(initialTimeStamps[i]); numberOfImputed = numberOfImputed + 1; if (forest.isInternalShinglingEnabled()) { // updateAllowed = not updateShingleOnly forest.update(scaledInput, !updateAllowed()); } else { if (updateAllowed()) { forest.update(lastShingledPoint); } } } } } float[] scaledInput = transformer.transformValues(internalTimeStamp, initialValues[i], getShingledInput(shingleSize - 1), deviations, clipFactor); // note that initial values are all interpolated by 0,fixed, or linear // there are no missing values to handle updateState(initialValues[i], scaledInput, initialTimeStamps[i], lastInputTimeStamp, null); if (forest.isInternalShinglingEnabled()) { // updateAllowed = not updateShingleOnly forest.update(scaledInput, !updateAllowed()); } else { if (updateAllowed()) { forest.update(lastShingledPoint); } } } initialTimeStamps = null; initialValues = null; } /** * determines the gap between the last known timestamp and the current timestamp * * @param timestampGap current gap * @param averageGap the average gap (often determined by * timeStampDeviation.getMean() * @return the number of positions till timestamp */ protected int determineGap(long timestampGap, double averageGap) { if (internalTimeStamp <= 1) { return 1; } else { double gap = timestampGap / averageGap; return (gap >= 1.5) ? (int) Math.ceil(gap) : 1; } } public int numberOfImputes(long timestamp) { long lastInputTimeStamp = previousTimeStamps[shingleSize - 1]; return determineGap(timestamp - lastInputTimeStamp, getTimeFactor(timeStampDeviations[1])) - 1; } /** * a single function that constructs the next shingle, with the option of * committing them to the forest However the shingle needs to be generated * before we process a point; and can only be committed once the point has been * scored. Having the same deterministic transformation can be useful. Note for * this imputation timestamp cannot be missing * * @param averageGap the gap in timestamps * @param changeForest boolean determining if we commit to the forest or not * @param forest the resident RCF * @return the next shingle */ protected float[] generateShingle(double[] inputTuple, long timestamp, int[] missingValues, double averageGap, boolean changeForest, RandomCutForest forest) { long lastInputTimeStamp = previousTimeStamps[shingleSize - 1]; double[] input = Arrays.copyOf(inputTuple, inputLength); double[] previous = getShingledInput(shingleSize - 1); double[] savedInput = Arrays.copyOf(previous, inputLength); int numberToImpute = determineGap(timestamp - lastInputTimeStamp, averageGap) - 1; if (imputationMethod != RCF || !forest.isOutputReady()) { ImputationMethod method = (imputationMethod == RCF) ? DEFAULT_DYNAMIC : imputationMethod; // for STREAMING_IMPUTE the timestamp cannot be missing // hence missingValues[] can be 0 to inputLength - 1 // for next and Linear there are no current values // we are forced to use fixedvalues or previous if (missingValues != null) { for (int missingValue : missingValues) { input[missingValue] = (defaultFill == null) ? previous[missingValue] : defaultFill[missingValue]; } } if (numberToImpute > 0) { double step = 1.0 / (numberToImpute + 1); // the last impute corresponds to the current observed value for (int i = 0; i < numberToImpute; i++) { // only the last tuple is partial double[] result = basicImpute(step * (i + 1), previous, input, method); updateForest(changeForest, result, timestamp, forest, true); } } } else { // the following is a mechanism to prevent a large number of updates using RCF // supposing the data is aggregated at 10min interval and the gap in values // correspond to a month = 30 * 24 * 6 imputations -- that would be not only // be slow, but also it would be unclear if analysis at shingleSize = 10 is // appropriate // for imputing 4000+ values. RCF is an example of reinforcement/continuous // learning // this would be very ripe for hallucination // in general, the intent of impute is to correct occasional drops of data if (numberToImpute < 3 * shingleSize || !fastForward) { for (int i = 0; i < numberToImpute; i++) { double[] result = imputeRCF(forest, null, null); updateForest(changeForest, result, timestamp, forest, true); } } else { // we will skip a lot of values double[] shift = getShift(); // uses the transformation to get typical values // resets number of imputed numberOfImputed = 0; for (int i = 0; i < shingleSize - 1; i++) { updateForest(changeForest, shift, timestamp, forest, false); } } // finally the current input may be partial if (missingValues != null && missingValues.length > 0) { input = imputeRCF(forest, input, missingValues); } } // last parameter isFullyImputed = if we miss everything in inputTuple? // This would ensure dataQuality is decreasing if we impute whenever updateForest(changeForest, input, timestamp, forest, missingValues != null ? missingValues.length == inputTuple.length : false); if (changeForest) { updateTimeStampDeviations(timestamp, lastInputTimeStamp); transformer.updateDeviation(input, savedInput, missingValues); } return Arrays.copyOf(lastShingledPoint, lastShingledPoint.length); } /** * a basic function that performs a single step imputation in the input space * the function has to be deterministic since it is run twice, first at scoring * and then at committing to the RCF * * @param stepFraction the interpolation fraction * @param previous the previous input point * @param input the current input point * @param method the imputation method of choice * @return the imputed/interpolated result */ protected double[] basicImpute(double stepFraction, double[] previous, double[] input, ImputationMethod method) { double[] result = new double[inputLength]; if (method == FIXED_VALUES) { System.arraycopy(defaultFill, 0, result, 0, inputLength); } else if (method == LINEAR) { for (int z = 0; z < inputLength; z++) { result[z] = previous[z] + stepFraction * (input[z] - previous[z]); } } else if (method == PREVIOUS) { System.arraycopy(previous, 0, result, 0, inputLength); } else if (method == NEXT) { System.arraycopy(input, 0, result, 0, inputLength); } return result; } /** * Uses RCF to impute the missing values in the current input or impute the * entire set of values for that time step (based on partial input being null) * * @param forest the RCF * @param partialInput the information available about the most recent point * @param missingValues the array indicating missing values for the partial * input * @return the potential completion of the partial tuple or the predicted * current value */ protected double[] imputeRCF(RandomCutForest forest, double[] partialInput, int[] missingValues) { float[] temp = Arrays.copyOf(lastShingledPoint, lastShingledPoint.length); shiftLeft(temp, inputLength); int startPosition = inputLength * (shingleSize - 1); int[] missingIndices; if (partialInput == null) { missingIndices = new int[inputLength]; for (int i = 0; i < inputLength; i++) { missingIndices[i] = startPosition + i; } } else { missingIndices = new int[missingValues.length]; for (int i = 0; i < missingValues.length; i++) { missingIndices[i] = startPosition + missingValues[i]; } float[] scaledInput = transformer.transformValues(internalTimeStamp, partialInput, getShingledInput(shingleSize - 1), null, clipFactor); copyAtEnd(temp, scaledInput); } float[] newPoint = forest.imputeMissingValues(temp, missingIndices.length, missingIndices); return toDoubleArray(getExpectedBlock(newPoint, 0)); } } ================================================ FILE: Java/core/src/main/java/com/amazon/randomcutforest/preprocessor/InitialSegmentPreprocessor.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.preprocessor; import static com.amazon.randomcutforest.config.ImputationMethod.FIXED_VALUES; import static com.amazon.randomcutforest.config.ImputationMethod.ZERO; import static com.amazon.randomcutforest.preprocessor.transform.WeightedTransformer.NUMBER_OF_STATS; import static java.lang.Math.round; import java.util.Arrays; import lombok.Getter; import lombok.Setter; import com.amazon.randomcutforest.RandomCutForest; import com.amazon.randomcutforest.statistics.Deviation; @Getter @Setter public class InitialSegmentPreprocessor extends Preprocessor { public InitialSegmentPreprocessor(Builder builder) { super(builder); initialValues = new double[startNormalization][]; initialTimeStamps = new long[startNormalization]; } /** * stores initial data for normalization. It is possible to perform the * imputation inline while storing (for some options) but it seems cleaner to * perform en masse imputation (and more complicated algorithms can be used) * * @param inputPoint input data * @param timestamp timestamp * @param missingValues missing values */ protected void storeInitial(double[] inputPoint, long timestamp, int[] missingValues) { // note that timestamps cannot be missing for updates initialTimeStamps[valuesSeen] = timestamp; int length = inputLength + ((missingValues == null) ? 0 : missingValues.length); double[] temp = new double[length]; System.arraycopy(inputPoint, 0, temp, 0, inputLength); if (missingValues != null) { for (int i = 0; i < length - inputLength; i++) { temp[inputLength + i] = missingValues[i]; } } initialValues[valuesSeen] = temp; valuesSeen++; } /** * prepare initial values which can have missing entries in individual tuples. * We use a simple interpolation strategy. At some level, lack of data simply * cannot be solved easily without data. This is run as one of the initial steps * in dischargeInitial() If all the entries corresponding to some variables are * missing -- there is no good starting point; we assume the value is * defaultFill() */ double prepareInitialInput() { int totalMissing = 0; // note that timestamp cannot be missing for updates boolean[][] missing = new boolean[initialValues.length][inputLength]; for (int i = 0; i < initialValues.length; i++) { Arrays.fill(missing[i], false); int length = initialValues[i].length - inputLength; for (int j = 0; j < length; j++) { // duplicates are fine; but should not be encouraged ++totalMissing; missing[i][(int) round(initialValues[i][inputLength + j])] = true; } } if (imputationMethod == ZERO || imputationMethod == FIXED_VALUES) { for (int i = 0; i < initialValues.length - 1; i++) { for (int j = 0; j < inputLength; j++) { initialValues[i][j] = (!missing[i][j]) ? initialValues[i][j] : defaultFill[j]; } } } else { // no simple alternative other than linear interpolation // at least for the initial segment -- because the trees are // not ready boolean[] startingValuesSet = new boolean[inputLength]; for (int j = 0; j < inputLength; j++) { // what is the first is missing? int next = 0; startingValuesSet[j] = false; while (next < initialValues.length && missing[next][j]) { ++next; } startingValuesSet[j] = (next < initialValues.length); if (startingValuesSet[j]) { initialValues[0][j] = initialValues[next][j]; missing[0][j] = false; // note if the first value si present then i==0 int start = 0; while (start < initialValues.length - 1) { int end = start + 1; while (end < initialValues.length && missing[end][j]) { ++end; } if (end < initialValues.length && end > start + 1) { for (int y = start + 1; y < end; y++) { // linear interpolation double factor = (1.0 * initialTimeStamps[start] - initialTimeStamps[y]) / (initialTimeStamps[start] - initialTimeStamps[end]); initialValues[y][j] = factor * initialValues[start][j] + (1 - factor) * initialValues[end][j]; } } start = end; } } else { // set 0; note there is no value in the entire column. if (defaultFill != null) { // can be set for other options as well for (int y = 0; y < initialValues.length; y++) { initialValues[y][j] = defaultFill[j]; } } else { for (int y = 0; y < initialValues.length; y++) { initialValues[y][j] = 0; } } } } } // truncate to input length, since the missing values were stored as well for (int i = 0; i < initialValues.length; i++) { initialValues[i] = Arrays.copyOf(initialValues[i], inputLength); } return 1.0 - (1.0 * totalMissing) / initialValues.length; } @Override public void update(double[] point, float[] rcfPoint, long timestamp, int[] missing, RandomCutForest forest) { if (valuesSeen < startNormalization) { storeInitial(point, timestamp, missing); // will change valuesSeen if (valuesSeen == startNormalization) { dischargeInitial(forest); } return; } super.update(point, rcfPoint, timestamp, missing, forest); } // computes the normalization statistics protected Deviation[] getInitialDeviations() { Deviation[] tempList = new Deviation[NUMBER_OF_STATS * inputLength]; for (int j = 0; j < NUMBER_OF_STATS * inputLength; j++) { tempList[j] = new Deviation(transformDecay); } for (int i = 0; i < initialValues.length; i++) { for (int j = 0; j < inputLength; j++) { tempList[j].update(initialValues[i][j]); double value = (i == 0) ? 0 : initialValues[i][j] - initialValues[i - 1][j]; tempList[j + inputLength].update(value); } } for (int i = 0; i < initialValues.length; i++) { for (int j = 0; j < inputLength; j++) { tempList[j + 2 * inputLength].update(tempList[j].getDeviation()); tempList[j + 3 * inputLength].update(tempList[j + inputLength].getMean()); tempList[j + 4 * inputLength].update(tempList[j + inputLength].getDeviation()); } } return tempList; } /** * a block which executes once; it first computes the multipliers for * normalization and then processes each of the stored inputs */ protected void dischargeInitial(RandomCutForest forest) { Deviation tempTimeDeviation = new Deviation(); for (int i = 0; i < initialTimeStamps.length - 1; i++) { tempTimeDeviation.update(initialTimeStamps[i + 1] - initialTimeStamps[i]); } double timeFactor = 1.0 + tempTimeDeviation.getDeviation(); double quality = prepareInitialInput(); Deviation[] deviations = getInitialDeviations(); Arrays.fill(previousTimeStamps, initialTimeStamps[0]); for (int i = 0; i < valuesSeen; i++) { float[] scaledInput = getScaledInput(initialValues[i], initialTimeStamps[i], deviations, timeFactor); // missing values are null updateState(initialValues[i], scaledInput, initialTimeStamps[i], previousTimeStamps[shingleSize - 1], null); dataQuality[0].update(quality); if (forest != null) { if (forest.isInternalShinglingEnabled()) { forest.update(scaledInput); } else { forest.update(lastShingledPoint); } } } initialTimeStamps = null; initialValues = null; } } ================================================ FILE: Java/core/src/main/java/com/amazon/randomcutforest/preprocessor/Preprocessor.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.preprocessor; import static com.amazon.randomcutforest.CommonUtils.checkArgument; import static com.amazon.randomcutforest.CommonUtils.toDoubleArray; import static com.amazon.randomcutforest.RandomCutForest.DEFAULT_SHINGLE_SIZE; import static com.amazon.randomcutforest.config.ImputationMethod.FIXED_VALUES; import static com.amazon.randomcutforest.config.ImputationMethod.PREVIOUS; import static com.amazon.randomcutforest.config.ImputationMethod.RCF; import static com.amazon.randomcutforest.config.ImputationMethod.ZERO; import static com.amazon.randomcutforest.preprocessor.transform.WeightedTransformer.NUMBER_OF_STATS; import static java.lang.Math.exp; import static java.lang.Math.max; import static java.lang.Math.min; import java.util.Arrays; import java.util.Optional; import lombok.Getter; import lombok.Setter; import com.amazon.randomcutforest.RandomCutForest; import com.amazon.randomcutforest.config.ForestMode; import com.amazon.randomcutforest.config.ImputationMethod; import com.amazon.randomcutforest.config.TransformMethod; import com.amazon.randomcutforest.preprocessor.transform.DifferenceTransformer; import com.amazon.randomcutforest.preprocessor.transform.ITransformer; import com.amazon.randomcutforest.preprocessor.transform.NormalizedDifferenceTransformer; import com.amazon.randomcutforest.preprocessor.transform.NormalizedTransformer; import com.amazon.randomcutforest.preprocessor.transform.SubtractMATransformer; import com.amazon.randomcutforest.preprocessor.transform.WeightedTransformer; import com.amazon.randomcutforest.returntypes.RangeVector; import com.amazon.randomcutforest.returntypes.SampleSummary; import com.amazon.randomcutforest.returntypes.TimedRangeVector; import com.amazon.randomcutforest.statistics.Deviation; @Getter @Setter public class Preprocessor implements IPreprocessor { public static double NORMALIZATION_SCALING_FACTOR = 2.0; // in case of normalization, uses this constant in denominator to ensure // smoothness near 0 public static double DEFAULT_NORMALIZATION_PRECISION = 1e-3; // the number of points to buffer before starting to normalize/gather statistic public static int DEFAULT_START_NORMALIZATION = 10; // the number at which to stop normalization -- it may not e easy to imagine why // this is required // but this is comforting to those interested in "stopping" a model from // learning continuously public static int DEFAULT_STOP_NORMALIZATION = Integer.MAX_VALUE; // in case of normalization the deviations beyond 10 Sigma are likely measure 0 // events public static int DEFAULT_CLIP_NORMALIZATION = 100; // normalization is not turned on by default public static boolean DEFAULT_NORMALIZATION = false; // differencing is not turned on by default // for some smooth predictable data differencing is helpful, but have unintended // consequences public static boolean DEFAULT_DIFFERENCING = false; // the fraction of data points that can be imputed in a shingle before the // shingle is admitted in a forest public static double DEFAULT_USE_IMPUTED_FRACTION = 0.5; // minimum number of observations before using a model to predict any expected // behavior -- if we can score, we should predict public static int MINIMUM_OBSERVATIONS_FOR_EXPECTED = 100; public static int DEFAULT_DATA_QUALITY_STATES = 1; // the input corresponds to timestamp data and this statistic helps align input protected Deviation[] timeStampDeviations; // normalize time difference; protected boolean normalizeTime; protected double weightTime; protected double transformDecay; // recording the last seen timestamp protected long[] previousTimeStamps; // this parameter is used as a clock if imputing missing values in the input // this is different from valuesSeen in STREAMING_IMPUTE protected int internalTimeStamp = 0; // initial values used for normalization protected double[][] initialValues; protected long[] initialTimeStamps; // initial values after which to start normalization protected int startNormalization; // sequence number to stop normalization at protected Integer stopNormalization; // a number indicating the actual values seen (not imputed) protected int valuesSeen = 0; // to use a set of default values for imputation protected double[] defaultFill; // fraction of data that should be actual input before they are added to RCF protected double useImputedFraction = DEFAULT_USE_IMPUTED_FRACTION; // number of imputed values in stored shingle protected int numberOfImputed; // particular strategy for impute protected ImputationMethod imputationMethod = RCF; // used in normalization protected double clipFactor = DEFAULT_CLIP_NORMALIZATION; // last shingled values (without normalization/change or augmentation by time) protected double[] lastShingledInput; // last point protected float[] lastShingledPoint; // method used to transform data in the preprocessor protected TransformMethod transformMethod; // shingle size in the forest protected int shingleSize; // actual dimension of the forest protected int dimension; // length of input to be seen, may depend on internal/external shingling protected int inputLength; // the mode of the forest used in this preprocessing protected ForestMode mode; // measures the data quality in imputed modes protected Deviation[] dataQuality; protected ITransformer transformer; // to be used for speeding up STREAMING_IMPUTE over large gaps protected boolean fastForward = false; public Preprocessor(Builder builder) { checkArgument(builder.transformMethod != null, "transform required"); checkArgument(builder.forestMode != null, " forest mode is required"); checkArgument(builder.inputLength > 0, "incorrect input length"); checkArgument(builder.shingleSize > 0, "incorrect shingle size"); checkArgument(builder.dimensions > 0, "incorrect dimensions"); checkArgument(builder.shingleSize == 1 || builder.dimensions % builder.shingleSize == 0, " shingle size should divide the dimensions"); checkArgument(builder.forestMode != ForestMode.STREAMING_IMPUTE || builder.shingleSize > 1, "cannot impute a time series with shingle size 1"); checkArgument(builder.forestMode == ForestMode.TIME_AUGMENTED || builder.inputLength == builder.dimensions || builder.inputLength * builder.shingleSize == builder.dimensions, "incorrect input size"); checkArgument( builder.forestMode != ForestMode.TIME_AUGMENTED || (builder.inputLength + 1) * builder.shingleSize == builder.dimensions, "incorrect input size"); checkArgument(builder.startNormalization <= builder.stopNormalization, "incorrect normalization parameters"); checkArgument(builder.startNormalization > 0 || !builder.normalizeTime, " start of normalization cannot be 0"); checkArgument(builder.startNormalization > 0 || !(builder.transformMethod == TransformMethod.NORMALIZE), " start of normalization cannot be 0 for normalize"); checkArgument( builder.startNormalization > 0 || !(builder.transformMethod == TransformMethod.NORMALIZE_DIFFERENCE), " start of normalization cannot be 0 for normalized difference"); checkArgument(builder.weights == null || builder.weights.length >= builder.inputLength, " incorrect weights"); if (builder.initialShingledInput != null) { // if (builder.inputLength == builder.dimensions) { // checkArgument(builder.initialShingledInput.length == builder.inputLength, // "incorrect length shingled input"); // } else { checkArgument(builder.initialShingledInput.length == builder.inputLength * builder.shingleSize, "incorrect length shingled input"); } } checkArgument(builder.initialPoint == null || builder.initialPoint.length == builder.dimensions, "incorrect length shingled transformed point"); inputLength = builder.inputLength; dimension = builder.dimensions; shingleSize = builder.shingleSize; mode = builder.forestMode; lastShingledPoint = (builder.initialPoint == null) ? new float[dimension] : copyIfNotnull(builder.initialPoint); this.transformMethod = builder.transformMethod; this.startNormalization = builder.startNormalization; this.stopNormalization = builder.stopNormalization; this.normalizeTime = builder.normalizeTime; double[] weights = new double[inputLength]; Arrays.fill(weights, 1.0); if (builder.weights != null) { if (builder.weights.length == inputLength) { System.arraycopy(builder.weights, 0, weights, 0, inputLength); weightTime = builder.weightTime; } else { System.arraycopy(builder.weights, 0, weights, 0, inputLength); weightTime = builder.weights[inputLength]; } } else { weightTime = builder.weightTime; } previousTimeStamps = new long[shingleSize]; if (inputLength == dimension) { lastShingledInput = (builder.initialShingledInput == null) ? new double[dimension] : Arrays.copyOf(builder.initialShingledInput, dimension); } else { lastShingledInput = (builder.initialShingledInput == null) ? new double[shingleSize * inputLength] : Arrays.copyOf(builder.initialShingledInput, shingleSize * inputLength); } transformDecay = builder.transformDecay; dataQuality = builder.dataQuality.orElse(new Deviation[] { new Deviation(transformDecay) }); Deviation[] deviationList = new Deviation[NUMBER_OF_STATS * inputLength]; manageDeviations(deviationList, builder.deviations, transformDecay); timeStampDeviations = new Deviation[NUMBER_OF_STATS]; manageDeviations(timeStampDeviations, builder.timeDeviations, transformDecay); if (transformMethod == TransformMethod.NONE) { for (int i = 0; i < inputLength; i++) { checkArgument(weights[i] == 1.0, "incorrect weights"); } transformer = new WeightedTransformer(weights, deviationList); } else if (transformMethod == TransformMethod.WEIGHTED) { transformer = new WeightedTransformer(weights, deviationList); } else if (transformMethod == TransformMethod.DIFFERENCE) { transformer = new DifferenceTransformer(weights, deviationList); } else if (transformMethod == TransformMethod.SUBTRACT_MA) { transformer = new SubtractMATransformer(weights, deviationList); } else if (transformMethod == TransformMethod.NORMALIZE) { transformer = new NormalizedTransformer(weights, deviationList); } else { transformer = new NormalizedDifferenceTransformer(weights, deviationList); } imputationMethod = builder.imputationMethod; checkArgument(builder.fillValues == null || builder.fillValues.length == inputLength, " the number of values should match the shingled input"); // if defaultFill is non-null then there is explicit request to use those // values (unless set to ZERO, which is a specific default, at even higher // precedence) // defaults have higher precedence over next, linear because the // next values are not present when impute is invoked // // algorithmically RCF seems to perform smoothest since it fits the data // next best is previous and that has higher precedence // the default is used when no initial value is present if (imputationMethod == ZERO) { this.defaultFill = new double[inputLength]; // set to 0 } else if (imputationMethod == FIXED_VALUES) { checkArgument(builder.fillValues != null, "fill values cannot be null"); this.defaultFill = Arrays.copyOf(builder.fillValues, builder.fillValues.length); } else { this.defaultFill = copyIfNotnull(builder.fillValues); } if (mode == ForestMode.STREAMING_IMPUTE) { // imputationMethod = builder.imputationMethod; normalizeTime = true; this.useImputedFraction = builder.useImputedFraction.orElse(0.5); this.fastForward = builder.fastForward; } } // the following fills the first argument as copies of the original // but if the original is null or otherwise then new deviations are created; the // last third // are filled with 0.1 * transformDecay and are reserved for smoothing void manageDeviations(Deviation[] deviationList, Optional original, double timeDecay) { checkArgument(deviationList.length % NUMBER_OF_STATS == 0, " has to be a multiple of five"); int usedDeviations = 0; if (original.isPresent()) { Deviation[] list = original.get(); usedDeviations = min(list.length, deviationList.length); // note the lengths can be different based on a different version of the model // we will convert the model; and rely on RCF's ability to adjust to new data for (int i = 0; i < usedDeviations; i++) { deviationList[i] = list[i].copy(); } } for (int i = usedDeviations; i < deviationList.length - 2 * deviationList.length / 5; i++) { deviationList[i] = new Deviation(timeDecay); } usedDeviations = max(usedDeviations, deviationList.length - 2 * deviationList.length / 5); for (int i = usedDeviations; i < deviationList.length; i++) { deviationList[i] = new Deviation(0.1 * timeDecay); } } /** * decides if normalization is required, and then is used to store and discharge * an initial segment * * @return a boolean indicating th need to store initial values */ public static boolean requireInitialSegment(boolean normalizeTime, TransformMethod transformMethod, ForestMode mode, ImputationMethod imputationMethod) { return normalizeTime || imputationMethod != ZERO && imputationMethod != FIXED_VALUES || transformMethod == TransformMethod.NORMALIZE || transformMethod == TransformMethod.NORMALIZE_DIFFERENCE || transformMethod == TransformMethod.SUBTRACT_MA || mode != ForestMode.STANDARD; } public float[] getScaledInput(double[] point, long timestamp) { if (valuesSeen < startNormalization && requireInitialSegment(normalizeTime, transformMethod, mode, imputationMethod)) { return null; } return getScaledInput(point, timestamp, null, getTimeShift()); } public float[] getScaledInput(float[] point, long timestamp) { return getScaledInput(toDoubleArray(point), timestamp, null, getTimeShift()); } public float[] getScaledShingledInput(double[] inputPoint, long timestamp, int[] missing, RandomCutForest forest) { boolean requireForest = (imputationMethod == RCF || mode != ForestMode.STANDARD); checkArgument(!requireForest || forest != null, "need a forest"); if (!requireForest) { double[] newInput = Arrays.copyOf(inputPoint, inputLength); double[] values = (defaultFill != null) ? defaultFill : getShingledInput(shingleSize - 1); if (missing != null) { for (int j : missing) { newInput[j] = values[j]; } } float[] scaledInput = getScaledInput(newInput, timestamp); if (scaledInput == null) { return null; } float[] point = Arrays.copyOf(lastShingledPoint, dimension); shiftLeft(point, inputLength); System.arraycopy(scaledInput, 0, point, dimension - inputLength, inputLength); return point; } else { float[] scaledInput = getScaledInput(inputPoint, timestamp); float[] point = null; if (scaledInput != null) { if (forest.isInternalShinglingEnabled()) { point = forest.transformToShingledPoint(scaledInput); } else { int dimension = forest.getDimensions(); if (scaledInput.length == dimension) { point = scaledInput; } else { point = new float[dimension]; System.arraycopy(getLastShingledPoint(), scaledInput.length, point, 0, dimension - scaledInput.length); System.arraycopy(scaledInput, 0, point, dimension - scaledInput.length, scaledInput.length); } } if (missing != null) { int[] newMissing = Arrays.copyOf(missing, missing.length); for (int i = 0; i < missing.length; i++) { newMissing[i] = missing[i] + dimension - scaledInput.length; } point = forest.imputeMissingValues(point, newMissing.length, newMissing); } } return point; } } public double[] getScale() { if (mode != ForestMode.TIME_AUGMENTED) { return transformer.getScale(); } else { double[] scale = new double[inputLength + 1]; System.arraycopy(transformer.getScale(), 0, scale, 0, inputLength); scale[inputLength] = (weightTime == 0) ? 0 : 1.0 / weightTime; if (normalizeTime) { scale[inputLength] *= NORMALIZATION_SCALING_FACTOR * (getTimeGapDifference() + DEFAULT_NORMALIZATION_PRECISION); } return scale; } } @Override public boolean isOutputReady() { return internalTimeStamp > 0; } public double[] getShift() { double[] previous = (inputLength == lastShingledInput.length) ? lastShingledInput : getShingledInput(shingleSize - 1); if (mode != ForestMode.TIME_AUGMENTED) { return transformer.getShift(previous); } else { double[] shift = new double[inputLength + 1]; System.arraycopy(transformer.getShift(previous), 0, shift, 0, inputLength); // time is always differenced shift[inputLength] = ((normalizeTime) ? getTimeShift() : 0) + previousTimeStamps[shingleSize - 1]; return shift; } } public double[] getSmoothedDeviations() { if (mode != ForestMode.TIME_AUGMENTED) { double[] deviations = new double[2 * inputLength]; System.arraycopy(transformer.getSmoothedDeviations(), 0, deviations, 0, inputLength); System.arraycopy(transformer.getSmoothedDifferenceDeviations(), 0, deviations, inputLength, inputLength); return deviations; } else { double[] deviations = new double[2 * inputLength + 2]; System.arraycopy(transformer.getSmoothedDeviations(), 0, deviations, 0, inputLength); System.arraycopy(transformer.getSmoothedDifferenceDeviations(), 0, deviations, inputLength + 1, inputLength); // time is differenced (for now) or unchanged deviations[inputLength + 1] = timeStampDeviations[4].getMean(); deviations[2 * inputLength + 1] = timeStampDeviations[4].getMean(); return deviations; } } public void update(double[] point, float[] rcfPoint, long timestamp, int[] missing, RandomCutForest forest) { updateState(point, rcfPoint, timestamp, previousTimeStamps[shingleSize - 1], missing); ++valuesSeen; double miss = (missing == null) ? 0 : missing.length; dataQuality[0].update(1 - 1.0 * miss / inputLength); if (forest != null) { if (forest.isInternalShinglingEnabled()) { int length = inputLength + ((mode == ForestMode.TIME_AUGMENTED) ? 1 : 0); float[] scaledInput = new float[length]; System.arraycopy(rcfPoint, rcfPoint.length - length, scaledInput, 0, length); forest.update(scaledInput); } else { forest.update(rcfPoint); } } } public double dataQuality() { return dataQuality[0].getMean(); } public int numberOfImputes(long timestamp) { return 0; } /** * maps the time back. The returned value is an approximation for * relativePosition less than 0 which corresponds to an anomaly in the past. * Since the state of the statistic is now changed based on more recent values * * @param gap estimated value * @param relativePosition how far back in the shingle * @return transform of the time value to original input space */ public long inverseMapTime(double gap, int relativePosition) { // note this corresponds to differencing being always on checkArgument(shingleSize + relativePosition >= 0, " error"); return inverseMapTimeValue(gap, previousTimeStamps[shingleSize - 1 + relativePosition]); } // same as inverseMapTime, using explicit value also useful in forecast protected long inverseMapTimeValue(double gap, long timestamp) { double factor = (weightTime == 0) ? 0 : 1.0 / weightTime; if (factor == 0) { return 0; } if (normalizeTime) { return (long) Math .round(timestamp + getTimeShift() + NORMALIZATION_SCALING_FACTOR * gap * getTimeScale() * factor); } else { return (long) Math.round(gap * factor + timestamp); } } /** * returns the input values corresponding to a position in the shingle; this is * needed in the corrector steps; and avoids the need for replicating this * information downstream * * @param index position in the shingle * @return the input values for those positions in the shingle */ public double[] getShingledInput(int index) { int base = lastShingledInput.length / shingleSize; double[] values = new double[base]; System.arraycopy(lastShingledInput, index * base, values, 0, base); return values; } @Override public double[] getShingledInput() { return copyIfNotnull(lastShingledInput); } /** * produces the expected value given location of the anomaly -- being aware that * the nearest anomaly may be behind us in time. * * @param relativeBlockIndex the relative index of the anomaly * @param reference the reference input (so that we do not generate * arbitrary rounding errors of transformations which * can be indistinguishable from true expected values) * @param point the point (in the RCF shingled space) * @param newPoint the expected point (in the RCF shingled space) -- * where only the most egregiously offending entries * corresponding to the shingleSize - 1 + * relativeBlockIndex are changed. * @return the set of values (in the input space) that would have produced * newPoint */ public double[] getExpectedValue(int relativeBlockIndex, double[] reference, float[] point, float[] newPoint) { checkArgument(newPoint.length == dimension, "incorrect invocation"); double[] values = toDoubleArray(getExpectedBlock(newPoint, relativeBlockIndex)); if (reference != null) { int startPosition = (shingleSize - 1 + relativeBlockIndex) * dimension / shingleSize; int length = lastShingledInput.length / shingleSize; for (int i = 0; i < length; i++) { double currentValue = (reference.length == dimension) ? reference[startPosition + i] : reference[i]; values[i] = (point[startPosition + i] == newPoint[startPosition + i]) ? currentValue : values[i]; } } if (mode == ForestMode.TIME_AUGMENTED) { int endPosition = (shingleSize - 1 + relativeBlockIndex + 1) * dimension / shingleSize; double timeGap = (newPoint[endPosition - 1] - point[endPosition - 1]); long expectedTimestamp = (timeGap == 0) ? getTimeStamp(shingleSize - 1 + relativeBlockIndex) : inverseMapTime(timeGap, relativeBlockIndex); values[dimension / shingleSize - 1] = expectedTimestamp; } return values; } protected float[] getExpectedBlock(float[] newPoint, int relativeBlockIndex) { int startPosition = newPoint.length - (1 - relativeBlockIndex) * dimension / shingleSize; checkArgument(startPosition >= 0, "incorrect inversion"); float[] values = new float[dimension / shingleSize]; System.arraycopy(newPoint, startPosition, values, 0, dimension / shingleSize); invertInPlace(values, getShingledInput(shingleSize - 1 + relativeBlockIndex), relativeBlockIndex); if (mode == ForestMode.TIME_AUGMENTED) { // this will be lossy values[dimension / shingleSize - 1] = (float) inverseMapTime(values[dimension / shingleSize - 1], relativeBlockIndex); } return values; } /** * inverts the values to the input space from the RCF space * */ protected void invertInPlace(float[] values, double[] previous, int relativeBlockIndex) { checkArgument(values.length == dimension / shingleSize, "incorrect invocation"); transformer.invertInPlace(values, previous); if (mode == ForestMode.TIME_AUGMENTED) { // this will be lossy values[values.length - 1] = (float) inverseMapTime(values[values.length - 1], relativeBlockIndex); } } public SampleSummary invertInPlaceRecentSummaryBlock(SampleSummary summary) { if (summary == null) { return null; } double[] scale = getScale(); double[] previous = getShingledInput(shingleSize - 1); invertInPlace(summary.mean, previous, 0); invertInPlace(summary.median, previous, 0); invertInPlace(summary.upper, previous, 0); invertInPlace(summary.lower, previous, 0); for (int i = 0; i < summary.summaryPoints.length; i++) { checkArgument(summary.measure[i].length == scale.length, "only applies to blocks"); invertInPlace(summary.summaryPoints[i], previous, 0); for (int j = 0; j < scale.length; j++) { summary.measure[i][j] *= (float) scale[j]; } } return summary; } public TimedRangeVector invertForecastRange(RangeVector ranges, long lastTimeStamp, double[] delta, boolean useExpected, long expectedTimeStamp) { int baseDimension = inputLength + (mode == ForestMode.TIME_AUGMENTED ? 1 : 0); checkArgument(ranges.values.length % baseDimension == 0, " incorrect length of ranges"); int horizon = ranges.values.length / baseDimension; double[] correction = copyIfNotnull(delta); int gap = (int) (internalTimeStamp - lastTimeStamp); if (correction != null) { double decay = max(getTransformDecay(), 1.0 / (3 * shingleSize)); double factor = exp(-gap * decay); for (int i = 0; i < correction.length; i++) { correction[i] *= factor; } } else { correction = new double[baseDimension]; } long localTimeStamp = previousTimeStamps[shingleSize - 1]; TimedRangeVector timedRangeVector; if (mode != ForestMode.TIME_AUGMENTED) { timedRangeVector = new TimedRangeVector(ranges, horizon); // Note that STREAMING_IMPUTE we are already using the time values // to fill in values -- moreover such missing values can be large in number // predicting next timestamps in the future in such a scenario would correspond // to a joint prediction and TIME_AUGMENTED mode may be more suitable. // therefore for STREAMING_IMPUTE the timestamps values are not predicted if (mode != ForestMode.STREAMING_IMPUTE) { double timeGap = getTimeDrift(); double timeBound = 1.3 * getTimeGapDifference(); for (int i = 0; i < horizon; i++) { timedRangeVector.timeStamps[i] = inverseMapTimeValue(timeGap, localTimeStamp); timedRangeVector.upperTimeStamps[i] = max(timedRangeVector.timeStamps[i], inverseMapTimeValue(timeGap + timeBound, localTimeStamp)); timedRangeVector.lowerTimeStamps[i] = min(timedRangeVector.timeStamps[i], inverseMapTimeValue(max(0, timeGap - timeBound), localTimeStamp)); localTimeStamp = timedRangeVector.timeStamps[i]; } } } else { if (useExpected && gap == 1) { localTimeStamp = expectedTimeStamp; } timedRangeVector = new TimedRangeVector(inputLength * horizon, horizon); for (int i = 0; i < horizon; i++) { for (int j = 0; j < inputLength; j++) { timedRangeVector.rangeVector.values[i * inputLength + j] = ranges.values[i * baseDimension + j]; timedRangeVector.rangeVector.upper[i * inputLength + j] = ranges.upper[i * baseDimension + j]; timedRangeVector.rangeVector.lower[i * inputLength + j] = ranges.lower[i * baseDimension + j]; } timedRangeVector.timeStamps[i] = inverseMapTimeValue( max(ranges.values[i * baseDimension + inputLength], 0), localTimeStamp); timedRangeVector.upperTimeStamps[i] = max(timedRangeVector.timeStamps[i], inverseMapTimeValue(max(ranges.upper[i * baseDimension + inputLength], 0), localTimeStamp)); timedRangeVector.lowerTimeStamps[i] = min(timedRangeVector.timeStamps[i], inverseMapTimeValue(max(ranges.lower[i * baseDimension + inputLength], 0), localTimeStamp)); localTimeStamp = timedRangeVector.upperTimeStamps[i]; } } // the following is the post-anomaly transformation, can be impacted by // anomalies transformer.invertForecastRange(timedRangeVector.rangeVector, inputLength, getShingledInput(shingleSize - 1), correction); return timedRangeVector; } /** * given an input produces a scaled transform to be used in the forest * * @param input the actual input seen * @param timestamp timestamp of said input * @param defaults default statistics, potentially used in * initialization * @param defaultTimeFactor default time statistic * @return a scaled/transformed input which can be used in the forest */ protected float[] getScaledInput(double[] input, long timestamp, Deviation[] defaults, double defaultTimeFactor) { double[] previous = (input.length == lastShingledInput.length) ? lastShingledInput : getShingledInput(shingleSize - 1); float[] scaledInput = transformer.transformValues(internalTimeStamp, input, previous, defaults, clipFactor); if (mode == ForestMode.TIME_AUGMENTED) { scaledInput = augmentTime(scaledInput, timestamp, defaultTimeFactor); } return scaledInput; } /** * updates the various shingles * * @param inputPoint the input point * @param scaledPoint the scaled/transformed point which is used in the RCF */ protected void updateShingle(double[] inputPoint, float[] scaledPoint) { if (inputPoint.length == lastShingledInput.length) { lastShingledInput = Arrays.copyOf(inputPoint, inputPoint.length); } else { shiftLeft(lastShingledInput, inputPoint.length); copyAtEnd(lastShingledInput, inputPoint); } if (scaledPoint.length == lastShingledPoint.length) { lastShingledPoint = Arrays.copyOf(scaledPoint, scaledPoint.length); } else { shiftLeft(lastShingledPoint, scaledPoint.length); copyAtEnd(lastShingledPoint, scaledPoint); } } /** * updates timestamps * * @param timestamp the timestamp of the current input */ protected void updateTimestamps(long timestamp) { for (int i = 0; i < shingleSize - 1; i++) { previousTimeStamps[i] = previousTimeStamps[i + 1]; } previousTimeStamps[shingleSize - 1] = timestamp; ++internalTimeStamp; } protected void updateTimeStampDeviations(long timestamp, long previous) { timeStampDeviations[0].update(timestamp); timeStampDeviations[1].update(timestamp - previous); // smoothing - not used currently timeStampDeviations[2].update(timeStampDeviations[0].getDeviation()); timeStampDeviations[3].update(timeStampDeviations[1].getMean()); timeStampDeviations[4].update(timeStampDeviations[1].getDeviation()); } double getTimeScale() { return 1.0 + getTimeGapDifference(); } double getTimeGapDifference() { return Math.abs(timeStampDeviations[4].getMean()); } double getTimeShift() { return timeStampDeviations[1].getMean(); } double getTimeDrift() { return timeStampDeviations[3].getMean(); } /** * updates the state of the preprocessor * * @param inputPoint the actual input * @param scaledInput the transformed input * @param timestamp the timestamp of the input * @param previous the previous timestamp * @param missingValues missing values (if any) in range 0..(inputLength-1) */ protected void updateState(double[] inputPoint, float[] scaledInput, long timestamp, long previous, int[] missingValues) { // timestamp cannot be missing for an update updateTimeStampDeviations(timestamp, previous); updateTimestamps(timestamp); double[] previousInput = (inputLength == lastShingledInput.length) ? lastShingledInput : getShingledInput(shingleSize - 1); transformer.updateDeviation(inputPoint, previousInput, missingValues); updateShingle(inputPoint, scaledInput); } /** * copies at the end for a shingle * * @param array shingled array * @param small new small array */ public static void copyAtEnd(double[] array, double[] small) { checkArgument(array.length >= small.length, " incorrect operation "); System.arraycopy(small, 0, array, array.length - small.length, small.length); } public static void copyAtEnd(float[] array, float[] small) { checkArgument(array.length >= small.length, " incorrect operation "); System.arraycopy(small, 0, array, array.length - small.length, small.length); } // a utility function protected static double[] copyIfNotnull(double[] array) { return array == null ? null : Arrays.copyOf(array, array.length); } protected static float[] copyIfNotnull(float[] array) { return array == null ? null : Arrays.copyOf(array, array.length); } // left shifting used for the shingles public static void shiftLeft(double[] array, int baseDimension) { for (int i = 0; i < array.length - baseDimension; i++) { array[i] = array[i + baseDimension]; } } public static void shiftLeft(float[] array, int baseDimension) { for (int i = 0; i < array.length - baseDimension; i++) { array[i] = array[i + baseDimension]; } } /** * maps a value shifted to the current mean or to a relative space for time * * @return the normalized value */ protected double normalize(double value, double factor) { double currentFactor = (factor != 0) ? factor : getTimeScale(); if (value - getTimeShift() >= NORMALIZATION_SCALING_FACTOR * clipFactor * (currentFactor + DEFAULT_NORMALIZATION_PRECISION)) { return clipFactor; } if (value - getTimeShift() <= -NORMALIZATION_SCALING_FACTOR * clipFactor * (currentFactor + DEFAULT_NORMALIZATION_PRECISION)) { return -clipFactor; } else { // deviation cannot be 0 return (value - getTimeShift()) / (NORMALIZATION_SCALING_FACTOR * (currentFactor + DEFAULT_NORMALIZATION_PRECISION)); } } /** * augments (potentially normalized) input with time (which is always * differenced) * * @param normalized (potentially normalized) input point * @param timestamp timestamp of current point * @param timeFactor a factor used in normalizing time * @return a tuple with one extra field */ protected float[] augmentTime(float[] normalized, long timestamp, double timeFactor) { float[] scaledInput = new float[normalized.length + 1]; System.arraycopy(normalized, 0, scaledInput, 0, normalized.length); if (valuesSeen <= 1) { scaledInput[normalized.length] = 0; } else { double timeShift = timestamp - previousTimeStamps[shingleSize - 1]; scaledInput[normalized.length] = (float) (weightTime * ((normalizeTime) ? normalize(timeShift, timeFactor) : timeShift)); } return scaledInput; } // mapper public long[] getInitialTimeStamps() { return (initialTimeStamps == null) ? null : Arrays.copyOf(initialTimeStamps, initialTimeStamps.length); } // mapper public void setInitialTimeStamps(long[] values) { initialTimeStamps = (values == null) ? null : Arrays.copyOf(values, values.length); } // mapper public double[][] getInitialValues() { if (initialValues == null) { return null; } else { double[][] result = new double[initialValues.length][]; for (int i = 0; i < initialValues.length; i++) { result[i] = copyIfNotnull(initialValues[i]); } return result; } } // mapper public void setInitialValues(double[][] values) { if (values == null) { initialValues = null; } else { initialValues = new double[values.length][]; for (int i = 0; i < values.length; i++) { initialValues[i] = copyIfNotnull(values[i]); } } } // mapper public double[] getLastShingledInput() { return copyIfNotnull(lastShingledInput); } // mapper public void setLastShingledInput(double[] point) { lastShingledInput = copyIfNotnull(point); } // mapper public void setPreviousTimeStamps(long[] values) { checkArgument(values.length == shingleSize, " incorrect length "); previousTimeStamps = Arrays.copyOf(values, values.length); numberOfImputed = 0; for (int i = 0; i < previousTimeStamps.length - 1; i++) { if (previousTimeStamps[i] == previousTimeStamps[i + 1]) { ++numberOfImputed; } } } // mapper public Deviation[] getTimeStampDeviations() { return timeStampDeviations; } // mapper public long[] getPreviousTimeStamps() { return Arrays.copyOf(previousTimeStamps, previousTimeStamps.length); } public Deviation[] getDeviationList() { return transformer.getDeviations(); } public double getTransformDecay() { return transformDecay; } /** * used in mapper; augments weightTime to the weights array to produce a single * array of length inputLength + 1 */ public double[] getWeights() { double[] basic = transformer.getWeights(); double[] answer = new double[inputLength + 1]; System.arraycopy(basic, 0, answer, 0, inputLength); answer[inputLength] = weightTime; return answer; } // mapper public double[] getDefaultFill() { return copyIfNotnull(defaultFill); } // mapper public void setDefaultFill(double[] values) { checkArgument(values.length == inputLength, "incorrect length defaults"); defaultFill = copyIfNotnull(values); } // mapper public long getTimeStamp(int index) { return previousTimeStamps[index]; } /** * @return a new builder. */ public static Builder builder() { return new Builder<>(); } public static class Builder> { // We use Optional types for optional primitive fields when it doesn't make // sense to use a constant default. protected int dimensions; protected int startNormalization = DEFAULT_START_NORMALIZATION; protected Integer stopNormalization = DEFAULT_STOP_NORMALIZATION; protected double transformDecay; protected Optional randomSeed = Optional.empty(); protected int shingleSize = DEFAULT_SHINGLE_SIZE; protected double anomalyRate = 0.01; protected TransformMethod transformMethod = TransformMethod.NONE; protected ImputationMethod imputationMethod = PREVIOUS; protected ForestMode forestMode = ForestMode.STANDARD; protected int inputLength; protected boolean normalizeTime = false; protected double[] fillValues = null; protected double[] weights = null; protected double[] initialShingledInput = null; protected float[] initialPoint = null; protected double weightTime = 1.0; protected Optional useImputedFraction = Optional.empty(); protected Optional deviations = Optional.empty(); protected Optional timeDeviations = Optional.empty(); protected Optional dataQuality = Optional.empty(); protected boolean fastForward = false; public Preprocessor build() { if (forestMode == ForestMode.STREAMING_IMPUTE) { return new ImputePreprocessor(this); } else if (requireInitialSegment(normalizeTime, transformMethod, forestMode, imputationMethod)) { return new InitialSegmentPreprocessor(this); } return new Preprocessor(this); } public T dimensions(int dimensions) { this.dimensions = dimensions; return (T) this; } public T inputLength(int inputLength) { this.inputLength = inputLength; return (T) this; } public T startNormalization(int startNormalization) { this.startNormalization = startNormalization; return (T) this; } public T stopNormalization(Integer stopNormalization) { this.stopNormalization = stopNormalization; return (T) this; } public T shingleSize(int shingleSize) { this.shingleSize = shingleSize; return (T) this; } public T transformDecay(double transformDecay) { this.transformDecay = transformDecay; return (T) this; } public T useImputedFraction(double fraction) { this.useImputedFraction = Optional.of(fraction); return (T) this; } public T randomSeed(long randomSeed) { this.randomSeed = Optional.of(randomSeed); return (T) this; } public T imputationMethod(ImputationMethod imputationMethod) { this.imputationMethod = imputationMethod; return (T) this; } public T fillValues(double[] values) { // values can be null this.fillValues = (values == null) ? null : Arrays.copyOf(values, values.length); return (T) this; } public T weights(double[] values) { // values can be null this.weights = (values == null) ? null : Arrays.copyOf(values, values.length); return (T) this; } public T weightTime(double value) { this.weightTime = value; return (T) this; } public T normalizeTime(boolean normalizeTime) { this.normalizeTime = normalizeTime; return (T) this; } public T transformMethod(TransformMethod method) { this.transformMethod = method; return (T) this; } public T forestMode(ForestMode forestMode) { this.forestMode = forestMode; return (T) this; } // mapper public T deviations(Deviation[] deviations) { this.deviations = Optional.ofNullable(deviations); return (T) this; } // mapper public T dataQuality(Deviation[] dataQuality) { this.dataQuality = Optional.ofNullable(dataQuality); return (T) this; } // mapper public T timeDeviations(Deviation[] timeDeviations) { this.timeDeviations = Optional.ofNullable(timeDeviations); return (T) this; } public T initialShingledInput(double[] initialShingledInput) { this.initialShingledInput = copyIfNotnull(initialShingledInput); return (T) this; } public T initialPoint(float[] initialPoint) { this.initialPoint = copyIfNotnull(initialPoint); return (T) this; } public T fastForward(boolean fastForward) { this.fastForward = fastForward; return (T) this; } } } ================================================ FILE: Java/core/src/main/java/com/amazon/randomcutforest/preprocessor/transform/DifferenceTransformer.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.preprocessor.transform; import static com.amazon.randomcutforest.CommonUtils.checkArgument; import java.util.Arrays; import lombok.Getter; import lombok.Setter; import com.amazon.randomcutforest.returntypes.RangeVector; import com.amazon.randomcutforest.statistics.Deviation; @Getter @Setter public class DifferenceTransformer extends WeightedTransformer { public DifferenceTransformer(double[] weights, Deviation[] deviation) { super(weights, deviation); } @Override public void invertInPlace(float[] values, double[] previousInput) { checkArgument(values.length >= previousInput.length, "have to be at least previous"); super.invertInPlace(values, previousInput); for (int i = 0; i < previousInput.length; i++) { double output = values[i] + previousInput[i]; values[i] = (float) output; } } /** * inverts a forecast (and upper and lower limits) provided by RangeVector range * the values are scaled by the factor used in the transformation for each * iteration; and the resulting value is added back as an inverse of the * differencing operation. * * @param ranges provides p50 values with upper and lower estimates * @param baseDimension the number of variables being forecast (often 1) * @param previousInput the last input of length baseDimension */ @Override public void invertForecastRange(RangeVector ranges, int baseDimension, double[] previousInput, double[] correction) { int inputLength = weights.length; int horizon = ranges.values.length / baseDimension; double[] last = Arrays.copyOf(previousInput, previousInput.length); checkArgument(correction.length >= inputLength, " incorrect length "); for (int i = 0; i < horizon; i++) { for (int j = 0; j < inputLength; j++) { float weight = (weights[j] == 0) ? 0f : 1.0f / (float) weights[j]; ranges.scale(i * baseDimension + j, weight); ranges.shift(i * baseDimension + j, (float) (getShift(j, deviations) + last[j])); last[j] = ranges.values[j]; } } } @Override public float[] transformValues(int internalTimeStamp, double[] inputPoint, double[] previousInput, Deviation[] initials, double clipFactor) { double[] input = new double[inputPoint.length]; for (int i = 0; i < input.length; i++) { input[i] = (internalTimeStamp == 0) ? 0 : (inputPoint[i] - previousInput[i]); } return super.transformValues(internalTimeStamp, input, null, initials, clipFactor); } @Override public double[] getShift(double[] previous) { double[] answer = new double[weights.length]; for (int i = 0; i < weights.length; i++) { answer[i] = getShift(i, deviations) + previous[i]; } return answer; } } ================================================ FILE: Java/core/src/main/java/com/amazon/randomcutforest/preprocessor/transform/ITransformer.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.preprocessor.transform; import com.amazon.randomcutforest.returntypes.RangeVector; import com.amazon.randomcutforest.statistics.Deviation; /** * ThresholdedRCF allows transformers that transform the data in a streaming * manner; invoke RCF on the transformed data; and invert the results to the * original input space. A typical examples are differencing, * (streaming/stochastic) normalization, etc. * * This interface class spells out the operations required from such * transformers. Some operations below are specific to the existing * implementation and required by the mappers to produce state classes. */ public interface ITransformer { // required by the mapper; this corresponds to providing each input // column/attribute a weight // different from 1.0 -- changing these weights can alter the RCF predictions // significantly // these weights should be informed by the domain and the intent of the overall // computation double[] getWeights(); // reverse of the above, used in mappers void setWeights(double[] weights); // used in mappers stores basic discounted averages and discounted (single step) // differenced average Deviation[] getDeviations(); // If the RCF expects values described by values[] corresponding to the // correspondingInput[] // then what should be alternative input that would have been transformed into // values[]; the transformation is done in place void invertInPlace(float[] values, double[] previousInput); // similar to invert() but applies to a forecast provided by RangeVector over an // input length (number of variables in a multivariate analysis) baseDimension // and // previousInput[] corresponds to the last observed values of those input. // correction is the effect of last anomaly void invertForecastRange(RangeVector ranges, int baseDimension, double[] previousInput, double[] correction); // update the internal data structures based on the current (multivariate) input // inputPoint // previousInput[] is the corresponding values of the last observed values // missing values are in 0..(inputLength-1) void updateDeviation(double[] inputPoint, double[] previousInput, int[] missingValues); // transforms inputPoint[] to RCF space, non-null values of initials[] are // used in normalization // and are specific to this implementation, internalStamp corresponds to the // sequence number of the // input and clipFactor is a parameter that clips any normalization float[] transformValues(int internalTimeStamp, double[] inputPoint, double[] previousInput, Deviation[] initials, double clipFactor); // used for converting RCF representations to actuals, used in // predictor-corrector double[] getShift(double[] previous); // used for converting RCF representations to actuals, used in // predictor-corrector double[] getScale(); // used for computing errors in RCFcaster before the model is calibrated double[] getSmoothedDeviations(); // used for determining noise double[] getSmoothedDifferenceDeviations(); } ================================================ FILE: Java/core/src/main/java/com/amazon/randomcutforest/preprocessor/transform/NormalizedDifferenceTransformer.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.preprocessor.transform; import static com.amazon.randomcutforest.CommonUtils.checkArgument; import java.util.Arrays; import lombok.Getter; import lombok.Setter; import com.amazon.randomcutforest.returntypes.RangeVector; import com.amazon.randomcutforest.statistics.Deviation; @Getter @Setter public class NormalizedDifferenceTransformer extends NormalizedTransformer { public NormalizedDifferenceTransformer(double[] weights, Deviation[] deviation) { super(weights, deviation); } @Override public void invertInPlace(float[] values, double[] previousInput) { checkArgument(values.length >= previousInput.length, "have to be at least as much as input"); super.invertInPlace(values, previousInput); for (int i = 0; i < previousInput.length; i++) { double output = values[i] + previousInput[i]; values[i] = (float) output; } } /** * inverts a forecast (and upper and lower limits) provided by RangeVector range * the values are scaled by the factor used in the transformation note that the * expected difference maintained in deviation[j + inputLength] is added for * each attribute j, once for each iteration; and the resulting value is added * back as an inverse of the differencing operation. * * @param ranges provides p50 values with upper and lower estimates * @param baseDimension the number of variables being forecast (often 1) * @param previousInput the last input of length baseDimension */ @Override public void invertForecastRange(RangeVector ranges, int baseDimension, double[] previousInput, double[] correction) { int inputLength = weights.length; int horizon = ranges.values.length / baseDimension; double[] last = Arrays.copyOf(previousInput, previousInput.length); checkArgument(correction.length >= inputLength, " incorrect length "); for (int i = 0; i < horizon; i++) { for (int j = 0; j < inputLength; j++) { double weight = (weights[j] == 0) ? 0 : getScale(j, deviations) / weights[j]; ranges.scale(i * baseDimension + j, (float) weight); double shift = last[j] + getShift(j, deviations); ranges.shift(i * baseDimension + j, (float) shift); last[j] = ranges.values[i * baseDimension + j]; } } } /** * a transformation that differences and then normalizes the results of * multivariate values * * @param internalTimeStamp timestamp corresponding to this operation; used to * ensure smoothness at 0 * @param inputPoint the actual input * @param previousInput the previous input * @param initials an array containing normalization statistics, used * only for the initial segment; otherwise it is null * @param clipFactor the factor used in clipping the normalized values * @return the transformed values to be shingled and used in RCF */ @Override public float[] transformValues(int internalTimeStamp, double[] inputPoint, double[] previousInput, Deviation[] initials, double clipFactor) { double[] input = new double[inputPoint.length]; for (int i = 0; i < input.length; i++) { input[i] = (internalTimeStamp == 0) ? 0 : inputPoint[i] - previousInput[i]; } return super.transformValues(internalTimeStamp, input, null, initials, clipFactor); } @Override public double[] getShift(double[] previous) { double[] answer = new double[weights.length]; for (int i = 0; i < weights.length; i++) { answer[i] = getShift(i, deviations) + previous[i]; } return answer; } @Override protected double getShift(int i, Deviation[] devs) { return devs[i + weights.length].getMean(); } @Override protected double getScale(int i, Deviation[] devs) { return (devs[i + weights.length].getDeviation() + 1.0); } } ================================================ FILE: Java/core/src/main/java/com/amazon/randomcutforest/preprocessor/transform/NormalizedTransformer.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.preprocessor.transform; import lombok.Getter; import lombok.Setter; import com.amazon.randomcutforest.statistics.Deviation; @Getter @Setter public class NormalizedTransformer extends WeightedTransformer { public NormalizedTransformer(double[] weights, Deviation[] deviation) { super(weights, deviation); } protected double clipValue(double clipfactor) { return clipfactor; } protected double getScale(int i, Deviation[] devs) { return (Math.abs(devs[i + 2 * weights.length].getMean()) + 1.0); } protected double getShift(int i, Deviation[] devs) { return devs[i].getMean(); } } ================================================ FILE: Java/core/src/main/java/com/amazon/randomcutforest/preprocessor/transform/SubtractMATransformer.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.preprocessor.transform; import lombok.Getter; import lombok.Setter; import com.amazon.randomcutforest.statistics.Deviation; @Getter @Setter public class SubtractMATransformer extends WeightedTransformer { public SubtractMATransformer(double[] weights, Deviation[] deviations) { super(weights, deviations); } @Override protected double getShift(int i, Deviation[] devs) { return devs[i].getMean(); } } ================================================ FILE: Java/core/src/main/java/com/amazon/randomcutforest/preprocessor/transform/WeightedTransformer.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.preprocessor.transform; import static com.amazon.randomcutforest.CommonUtils.checkArgument; import static java.lang.Math.min; import java.util.Arrays; import lombok.Getter; import lombok.Setter; import com.amazon.randomcutforest.returntypes.RangeVector; import com.amazon.randomcutforest.statistics.Deviation; /** * A weighted transformer maintains several data structures ( currently 3X) that * measure discounted averages and the corresponding standard deviations. for * input length X. The element i corresponds to discounted average of the * variable i, element (X+i) corresponds to the discounted average of the single * step differences of the same variable i, and element (2X+i) corresponds to * difference of variable i and the dicounted average, to capture second order * differences These quantities together can help answer a number of estimation * questions of a time series, and in particular help solve for simple linear * drifts. Even though the discounted averages are not obviously required -- * they are useful in forecasts. * */ @Getter @Setter public class WeightedTransformer implements ITransformer { public static int NUMBER_OF_STATS = 5; double[] weights; Deviation[] deviations; public WeightedTransformer(double[] weights, Deviation[] deviations) { checkArgument(NUMBER_OF_STATS * weights.length == deviations.length, "incorrect lengths"); this.weights = Arrays.copyOf(weights, weights.length); this.deviations = new Deviation[deviations.length]; for (int i = 0; i < deviations.length; i++) { checkArgument(deviations[i] != null, "cannot be null"); this.deviations[i] = deviations[i].copy(); } } /** * the inversion does not require previousInput; note that weight == 0, would * produce 0 values in the inversion * * @param values what the RCF would like to observe * @param previousInput what was the real (or previously imputed) observation */ @Override public void invertInPlace(float[] values, double[] previousInput) { double output = 0; int length = min(weights.length, values.length); for (int i = 0; i < length; i++) { output = (weights[i] == 0) ? 0 : values[i] * getScale(i, deviations) / weights[i]; output += getShift(i, deviations); values[i] = (float) output; } } /** * inverts a forecast (and upper and lower limits) provided by RangeVector range * note that the expected difference maintained in deviation[j + inputLength] is * added for each attribute j * * @param ranges provides p50 values with upper and lower estimates * @param baseDimension the number of variables being forecast (often 1) * @param previousInput the last input of length baseDimension * @param correction correction due to last anomaly updates the RangeVector * to the inverse transform and applies correction */ public void invertForecastRange(RangeVector ranges, int baseDimension, double[] previousInput, double[] correction) { int horizon = ranges.values.length / baseDimension; int inputLength = weights.length; checkArgument(correction.length >= inputLength, " incorrect length "); for (int i = 0; i < horizon; i++) { for (int j = 0; j < inputLength; j++) { double weight = (weights[j] == 0) ? 0 : getScale(j, deviations) / weights[j]; ranges.scale(i * baseDimension + j, (float) weight); ranges.shift(i * baseDimension + j, (float) (getShift(j, deviations) + i * getDrift(j, deviations))); } } } /** * updates the 3*inputPoint.length statistics; the statistic i corresponds to * discounted average of variable i and statistic i + inputPoint.length * corresponds to the discounted average single step difference * * @param inputPoint the input * @param previousInput the previous input * @param missingValues any missing values (in range 0..(inputLength-1)) */ public void updateDeviation(double[] inputPoint, double[] previousInput, int[] missingValues) { checkArgument(inputPoint.length * NUMBER_OF_STATS == deviations.length, "incorrect lengths"); checkArgument(inputPoint.length == previousInput.length, " lengths must match"); boolean[] missing = new boolean[inputPoint.length]; Arrays.fill(missing, false); if (missingValues != null) { for (int index : missingValues) { missing[index] = true; } } for (int i = 0; i < inputPoint.length; i++) { if (!missing[i]) { deviations[i].update(inputPoint[i]); deviations[i + 2 * inputPoint.length].update(deviations[i].getDeviation()); } // the differenced quantities have to be updated if (deviations[i + inputPoint.length].getCount() == 0) { deviations[i + inputPoint.length].update(0); } else { deviations[i + inputPoint.length].update(inputPoint[i] - previousInput[i]); } deviations[i + 3 * inputPoint.length].update(deviations[i + inputPoint.length].getMean()); deviations[i + 4 * inputPoint.length].update(deviations[i + inputPoint.length].getDeviation()); } } /** * a normalization function * * @param value argument to be normalized * @param shift the shift in the value * @param scale the scaling factor * @param clipFactor the output value is bound is in [-clipFactor,clipFactor] * @return the normalized value */ protected double normalize(double value, double shift, double scale, double clipFactor) { checkArgument(scale > 0, " should be non-negative"); double t = (value - shift) / (scale); if (t >= clipFactor) { return clipFactor; } if (t < -clipFactor) { return -clipFactor; } return t; } /** * a transformation that normalizes the multivariate values * * @param internalTimeStamp timestamp corresponding to this operation; used to * ensure smoothness at 0 * @param inputPoint the actual input * @param previousInput the previous input * @param initials an array containing normalization statistics, used * only for the initial segment; otherwise it is null * @param clipFactor the factor used in clipping the normalized values * @return the transformed values to be shingled and used in RCF */ @Override public float[] transformValues(int internalTimeStamp, double[] inputPoint, double[] previousInput, Deviation[] initials, double clipFactor) { float[] output = new float[inputPoint.length]; for (int i = 0; i < inputPoint.length; i++) { Deviation[] devs = (initials == null) ? deviations : initials; output[i] = (float) (weights[i] * normalize(inputPoint[i], getShift(i, devs), getScale(i, devs), clipValue(clipFactor))); } return output; } protected double clipValue(double clipfactor) { return Double.MAX_VALUE; } public Deviation[] getDeviations() { Deviation[] answer = new Deviation[deviations.length]; for (int i = 0; i < deviations.length; i++) { answer[i] = deviations[i].copy(); } return answer; } public double[] getWeights() { return Arrays.copyOf(weights, weights.length); } public void setWeights(double[] weights) { checkArgument(weights.length == this.weights.length, " incorrect length"); this.weights = Arrays.copyOf(weights, weights.length); } protected double getScale(int i, Deviation[] devs) { return (1.0); } protected double getShift(int i, Deviation[] devs) { return 0; } protected double getDrift(int i, Deviation[] devs) { return devs[i + 3 * weights.length].getMean(); } @Override public double[] getScale() { double[] answer = new double[weights.length]; for (int i = 0; i < weights.length; i++) { answer[i] = (weights[i] == 0) ? 0 : getScale(i, deviations) / weights[i]; } return answer; } @Override public double[] getShift(double[] previous) { double[] answer = new double[weights.length]; for (int i = 0; i < weights.length; i++) { answer[i] = getShift(i, deviations); } return answer; } public double[] getSmoothedDeviations() { double[] answer = new double[weights.length]; for (int i = 0; i < weights.length; i++) { answer[i] = Math.abs(deviations[i + 2 * weights.length].getMean()); } return answer; } public double[] getSmoothedDifferenceDeviations() { double[] answer = new double[weights.length]; for (int i = 0; i < weights.length; i++) { answer[i] = Math.abs(deviations[i + 4 * weights.length].getMean()); } return answer; } } ================================================ FILE: Java/core/src/main/java/com/amazon/randomcutforest/returntypes/ConditionalTreeSample.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.returntypes; import java.util.ArrayList; import java.util.Comparator; import java.util.List; import java.util.stream.Collector; import com.amazon.randomcutforest.tree.BoundingBox; public class ConditionalTreeSample { /** * the index of the point in the PointStore which is used to construct the * sample for a query */ public int pointStoreIndex; /** * the bounding box in the tree of the node which is the parent of the point * used to construct the sample Note that the bounding box is in the projective * space defined by the tree */ protected BoundingBox parentOfLeafBox; /** * L1 distance of the sampled point (in the projective space of the tree) L1 * distancce is chosen since the entire notion of RCF is oriented towards L1 * sampling */ public double distance; /** * the point in the tree corresponding to the sample */ public float[] leafPoint; /** * weight of the point ; useful for deduplication -- this can also be resued if * trees are assigned weights */ public double weight; public ConditionalTreeSample(int pointStoreIndex, BoundingBox box, double distance, float[] leafPoint) { this.pointStoreIndex = pointStoreIndex; this.parentOfLeafBox = box; this.distance = distance; this.leafPoint = leafPoint; this.weight = 1.0; } public static Collector, ArrayList> collector = Collector .of(ArrayList::new, ArrayList::add, (left, right) -> { left.addAll(right); return left; }, list -> list); // the collector specifically does not try to sort/dedup since we could (and // would) be running the // collector in a parallel mode public static List dedup(List list) { list.sort(Comparator.comparingInt(o -> o.pointStoreIndex)); List newList = new ArrayList<>(); newList.add(list.get(0)); for (int j = 1; j < list.size(); j++) { if (list.get(j).pointStoreIndex == newList.get(newList.size() - 1).pointStoreIndex) { newList.get(newList.size() - 1).weight += list.get(j).weight; } else { newList.add(list.get(j)); } } return newList; } } ================================================ FILE: Java/core/src/main/java/com/amazon/randomcutforest/returntypes/ConvergingAccumulator.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.returntypes; /** * An accumulator which can be used to short-circuit the number of trees visited * if the responses from the trees seen so far appear to be converging to a * value. for an example * * @param The result type being accumulated. * @see com.amazon.randomcutforest.RandomCutForest */ public interface ConvergingAccumulator { /** * Add a new result value to this accumulator. * * @param value A single result value which should be accumulated together with * other results. */ void accept(R value); /** * @return 'true' if the accumulator has converged and we can stop accepting new * values, 'false' otherwise. */ boolean isConverged(); /** * @return the number of values that have been accepted by this accumulator. */ int getValuesAccepted(); /** * @return the accumulated. */ R getAccumulatedValue(); } ================================================ FILE: Java/core/src/main/java/com/amazon/randomcutforest/returntypes/DensityOutput.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.returntypes; /** * DensityOutput extends InterpolationMeasure with methods for computing density * estimates. */ public class DensityOutput extends InterpolationMeasure { /** * Default scaling factor (q) to use in the getDensity method. */ public static final double DEFAULT_SUM_OF_POINTS_SCALING_FACTOR = 0.001; /** * Create a new DensityOutput object with the given number of spatial * dimensions. Note that the number of half-dimensions will be 2 * dimensions. * * @param dimensions The number of spatial dimensions. * @param sampleSize The samplesize of each tree in forest, which may be used * for normalization. */ public DensityOutput(int dimensions, int sampleSize) { super(dimensions, sampleSize); } /** * A copy constructor that creates a deep copy of the base DensityOutput. * * @param base An InterpolationMeasure instance that we want to copy. */ public DensityOutput(InterpolationMeasure base) { super(base); } /** * Compute a scalar density estimate. The scaling factor q is multiplied by the * sum of points measure and added to the denominator in the density expression * to prevent divide-by-0 errors. * * @param q A scaling factor applied to the sum of points in the * measure. * @param manifoldDimension The number of dimensions of the submanifold on which * we are estimating a density. * @return a scalar density estimate. */ public double getDensity(double q, int manifoldDimension) { double sumOfPts = measure.getHighLowSum() / sampleSize; if (sumOfPts <= 0.0) { return 0.0; } double sumOfFactors = 0; for (int i = 0; i < dimensions; i++) { double t = probMass.getHighLowSum(i) > 0 ? distances.getHighLowSum(i) / probMass.getHighLowSum(i) : 0; if (t > 0) { t = Math.exp(Math.log(t) * manifoldDimension) * probMass.getHighLowSum(i); } sumOfFactors += t; } return sumOfPts / (q * sumOfPts + sumOfFactors); } /** * Compute a scalar density estimate. This method uses the default scaling * factor and the full number of dimensions. * * @return a scalar density estimate. */ public double getDensity() { return getDensity(DEFAULT_SUM_OF_POINTS_SCALING_FACTOR, dimensions); } /** * Compute a directional density estimate. The scaling factor q is multiplied by * the sum of points measure and added to the denominator in the density * expression to prevent divide-by-0 errors. * * @param q A scaling factor applied to the sum of points in the * measure. * @param manifoldDimension The number of dimensions of the submanifold on which * we are estimating a density. * @return a directional density estimate. */ public DiVector getDirectionalDensity(double q, int manifoldDimension) { double density = getDensity(q, manifoldDimension); double sumOfPts = measure.getHighLowSum(); // normalization not performed since this would be used in a ratio DiVector factors = new DiVector(super.getDimensions()); if (sumOfPts > 0) { factors = measure.scale(density / sumOfPts); } return factors; } /** * Compute a directional density estimate. This method uses the default scaling * factor and the full number of dimensions. * * @return a scalar density estimate. */ public DiVector getDirectionalDensity() { return getDirectionalDensity(DEFAULT_SUM_OF_POINTS_SCALING_FACTOR, dimensions); } } ================================================ FILE: Java/core/src/main/java/com/amazon/randomcutforest/returntypes/DiVector.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.returntypes; import static com.amazon.randomcutforest.CommonUtils.checkArgument; import static com.amazon.randomcutforest.CommonUtils.checkNotNull; import java.util.Arrays; import java.util.function.Function; import com.amazon.randomcutforest.anomalydetection.AnomalyAttributionVisitor; /** * A DiVector is used when we want to track a quantity in both the positive and * negative directions for each dimension in a manifold. For example, when using * a {@link AnomalyAttributionVisitor} to compute the attribution of the anomaly * score to dimension of the input point, we want to know if the anomaly score * attributed to the ith coordinate of the input point is due to that coordinate * being unusually high or unusually low. */ public class DiVector { /** * An array of values corresponding to the positive direction in each dimension. */ public final double[] high; /** * An array of values corresponding to the negative direction in each dimension. */ public final double[] low; private final int dimensions; /** * Construct a new DiVector with the given number of spatial dimensions. In the * result, {@link #high} and {@link #low} will each contain this many variates. * * @param dimensions The number of dimensions of data to store. */ public DiVector(int dimensions) { checkArgument(dimensions > 0, "dimensions must be greater than 0"); this.dimensions = dimensions; high = new double[dimensions]; low = new double[dimensions]; } /** * Construct a new DiVector with the given number of spatial dimensions. In the * result, {@link #high} and {@link #low} will each contain this many variates. * * @param high the high vector * @param low the low vector. */ public DiVector(double[] high, double[] low) { checkArgument(high.length == low.length, "dimensions must be equal"); this.dimensions = high.length; this.high = Arrays.copyOf(high, high.length); this.low = Arrays.copyOf(low, low.length); } /** * Create a deep copy of the base DiVector. * * @param base The DiVector to copy. */ public DiVector(DiVector base) { this.dimensions = base.dimensions; high = Arrays.copyOf(base.high, dimensions); low = Arrays.copyOf(base.low, dimensions); } /** * Add the values of {@link #high} and {@link #low} from the right vector to the * left vector and return the left vector. This method is used to accumulate * DiVector results. * * @param left The DiVector we are modifying. After calling this method, the * low and high values in the DiVector will contain a sum of the * previous values and the corresponding values from the right * vector. * @param right A DiVector that we want to add to the left vector. This DiVector * is not modified by the method. * @return the modified left vector. */ public static DiVector addToLeft(DiVector left, DiVector right) { checkNotNull(left, "left must not be null"); checkNotNull(right, "right must not be null"); checkArgument(left.dimensions == right.dimensions, "dimensions must be the same"); for (int i = 0; i < left.dimensions; i++) { left.high[i] += right.high[i]; left.low[i] += right.low[i]; } return left; } /** * @return the number of spatial dimensions of this DiVector. */ public int getDimensions() { return dimensions; } /** * Return a new DiVector where each value in high and low is equal to z times * the corresponding value in this DiVector. * * @param z The scaling factor. * @return a new DiVector where each value in high and low is equal to z times * the corresponding value in this DiVector. */ public DiVector scale(double z) { DiVector result = new DiVector(dimensions); for (int i = 0; i < dimensions; i++) { result.high[i] = high[i] * z; result.low[i] = low[i] * z; } return result; } /** * If the L1 norm of this DiVector is positive, scale the values in high and low * so that the new L1 norm is equal to the target value. If the current L1 norm * is 0, do nothing. * * @param targetNorm The target L1 norm value. */ public void renormalize(double targetNorm) { double norm = getHighLowSum(); if (norm > 0) { double scaleFactor = targetNorm / norm; for (int i = 0; i < dimensions; i++) { high[i] = high[i] * scaleFactor; low[i] = low[i] * scaleFactor; } } } /** * Apply the given function to each component of DiVector. That is, each entry * of both the high and low arrays is transformed using this function. * * @param function A function to apply to every entry of the high and low arrays * in this DiVector. */ public void componentwiseTransform(Function function) { for (int i = 0; i < dimensions; i++) { high[i] = function.apply(high[i]); low[i] = function.apply(low[i]); } } /** * Return the sum of high and low in the ith coordinate. * * @param i A coordinate index * @return the sum of high and low in the ith coordinate. */ public double getHighLowSum(int i) { return high[i] + low[i]; } /** * @return the sum of all values in the high and low arrays. */ public double getHighLowSum() { double score = 0.0; for (int i = 0; i < dimensions; i++) { score += high[i] + low[i]; } return score; } public DiVector lift(Function projection) { return new DiVector(projection.apply(high), projection.apply(low)); } } ================================================ FILE: Java/core/src/main/java/com/amazon/randomcutforest/returntypes/InterpolationMeasure.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.returntypes; import static com.amazon.randomcutforest.CommonUtils.checkArgument; import static com.amazon.randomcutforest.CommonUtils.checkNotNull; import static java.lang.Math.round; import java.util.function.Function; import java.util.stream.Collector; /** * An InterpolationMeasure is used by * {@link com.amazon.randomcutforest.interpolation.SimpleInterpolationVisitor} * to store certain geometric quantities during a tree traversal. */ public class InterpolationMeasure { public final DiVector measure; public final DiVector distances; public final DiVector probMass; protected final int dimensions; protected int sampleSize; /** * Create a new InterpolationMeasure object with the given number of spatial * dimensions. Note that the number of half-dimensions will be 2 * dimensions. * * @param dimensions The number of spatial dimensions. * @param sampleSize The samplesize of each tree in forest, which may be used * for normalization. */ public InterpolationMeasure(int dimensions, int sampleSize) { checkArgument(dimensions > 0, "dimensions must be greater than 0"); this.sampleSize = sampleSize; this.dimensions = dimensions; measure = new DiVector(dimensions); distances = new DiVector(dimensions); probMass = new DiVector(dimensions); } /** * A copy constructor that creates a deep copy of the base InterpolationMeasure. * * @param base An InterpolationMeasure instance that we want to copy. */ public InterpolationMeasure(InterpolationMeasure base) { this.sampleSize = base.sampleSize; this.dimensions = base.dimensions; measure = new DiVector(base.measure); distances = new DiVector(base.distances); probMass = new DiVector(base.probMass); } protected InterpolationMeasure(int sampleSize, DiVector measure, DiVector distances, DiVector probMass) { checkArgument(measure.getDimensions() == distances.getDimensions(), "measure.getDimensions() should be equal to distances.getDimensions()"); checkArgument(measure.getDimensions() == probMass.getDimensions(), "measure.getDimensions() should be equal to probMass.getDimensions()"); this.sampleSize = sampleSize; this.dimensions = measure.getDimensions(); this.measure = measure; this.distances = distances; this.probMass = probMass; } /** * Add the values of {@link #measure}, {@link #distances}, and {@link #probMass} * from the right InterpolationMeasure to the left InterpolationMeasure and * return the left InterpolationMeasure. This method is used to accumulate * InterpolationMeasure results. * * @param left The InterpolationMeasure we are modifying. After calling this * method, fields in this InterpolationMeasure will contain a sum * of the previous values and the corresponding values from the * right InterpolationMeasure. * @param right An InterpolationMeasure that we want to add to the left vector. * This InterpolationMeasure is not modified by the method. * @return the modified left vector. */ public static InterpolationMeasure addToLeft(InterpolationMeasure left, InterpolationMeasure right) { checkNotNull(left, "left must not be null"); checkNotNull(right, "right must not be null"); checkArgument(left.dimensions == right.dimensions, "dimensions must be the same"); left.sampleSize += right.sampleSize; DiVector.addToLeft(left.distances, right.distances); DiVector.addToLeft(left.measure, right.measure); DiVector.addToLeft(left.probMass, right.probMass); return left; } /** * Return a {@link Collector} which can be used to the collect many * InterpolationMeasure results into a single, final result. * * @param dimensions The number of spatial dimensions in the * InterpolationMeasures being collected. * @param sampleSize The sample size of the Random Cut Trees that were * measured. * @param numberOfTrees The number of trees whose measures we are collecting * into a final result. This value is used for scaling. * @return an interpolation measure containing the aggregated, scaled result. */ public static Collector collector(int dimensions, int sampleSize, int numberOfTrees) { return Collector.of(() -> new InterpolationMeasure(dimensions, sampleSize), InterpolationMeasure::addToLeft, InterpolationMeasure::addToLeft, result -> result.scale(1.0 / numberOfTrees)); } /** * @return the number of spatial dimensions in this InterpolationMeasure. */ public int getDimensions() { return dimensions; } /** * @return the sample size of the Random Cut Tree that we are measuring. */ public int getSampleSize() { return sampleSize; } /** * Return a new InterpolationMeasure will all values scaled by the given factor. * * @param z The scale factor. * @return a new InterpolationMeasure will all values scaled by the given * factor. */ public InterpolationMeasure scale(double z) { return new InterpolationMeasure((int) round(sampleSize * z), measure.scale(z), distances.scale(z), probMass.scale(z)); } public InterpolationMeasure lift(Function projection) { return new InterpolationMeasure(sampleSize, measure.lift(projection), distances.lift(projection), probMass.lift(projection)); } } ================================================ FILE: Java/core/src/main/java/com/amazon/randomcutforest/returntypes/Neighbor.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.returntypes; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.Comparator; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Optional; import java.util.Set; import java.util.function.BiConsumer; import java.util.function.BinaryOperator; import java.util.function.Function; import java.util.function.Supplier; import java.util.stream.Collector; /** * A Neighbor represents a point together with a distance, where the distance is * with respect to some query point. That is, we think of this point as being a * neighbor of the query point. If the feature is enabled in the forest, a * Neighbor will also contain a set of sequence indexes containing the times * this point was added to the forest. */ public class Neighbor { /** * The neighbor point. */ public final float[] point; /** * The distance between the neighbor point and the query point it was created * from. */ public final double distance; /** * A list of sequence indexes corresponding to the times when this neighbor * point was added to the forest. If sequence indexes are not enabled for the * forest, then this list will be empty. */ public final List sequenceIndexes; public int count; /** * Create a new Neighbor. * * @param point The neighbor point. * @param distance The distance between the neighbor point and the query * point was created from. * @param sequenceIndexes A list of sequence indexes corresponding to the times * when this neighbor point was added to the forest. * @param count The number of copies */ public Neighbor(float[] point, double distance, List sequenceIndexes, int count) { this.point = point; this.distance = distance; this.sequenceIndexes = sequenceIndexes; this.count = count; } public Neighbor(float[] point, double distance, List sequenceIndexes) { this(point, distance, sequenceIndexes, 1); } /** * Get Neighbor collector which merges duplicate Neighbors and sorts them in * ascending order of distance * * @return Neighbor collector */ public static Collector, Map, List> collector() { return new CollectorImpl(); } /** * Merge sequence indexes of other Neighbor to itself * * @param other other Neighbor whose sequenceIndexes need to be merged */ private void mergeSequenceIndexes(Neighbor other) { this.sequenceIndexes.addAll(other.sequenceIndexes); this.count += other.count; } /** * Get hash code for the Point associated with object * * @return hash code for the Point */ private int getHashCodeForPoint() { return Arrays.hashCode(point); } private static class CollectorImpl implements Collector, Map, List> { @Override public Supplier> supplier() { return HashMap::new; } @Override public BiConsumer, Optional> accumulator() { return (neighborsMap, neighborOptional) -> { if (neighborOptional.isPresent()) { mergeNeighborIfNeededAndPut(neighborsMap, neighborOptional.get()); } }; } @Override public BinaryOperator> combiner() { return (left, right) -> { right.forEach((k, v) -> mergeNeighborIfNeededAndPut(left, v)); return left; }; } @Override public Function, List> finisher() { return map -> { List combinedResult = new ArrayList<>(); map.forEach((k, v) -> { v.sequenceIndexes.sort(Long::compareTo); combinedResult.add(v); }); Comparator comparator = Comparator.comparingDouble(n -> n.distance); combinedResult.sort(comparator); return combinedResult; }; } @Override public Set characteristics() { return Collections.emptySet(); } private void mergeNeighborIfNeededAndPut(Map neighborsMap, Neighbor currentNeighbor) { Neighbor existingNeighbor = neighborsMap.get(currentNeighbor.getHashCodeForPoint()); if (existingNeighbor != null) { existingNeighbor.mergeSequenceIndexes(currentNeighbor); } else { neighborsMap.put(currentNeighbor.getHashCodeForPoint(), currentNeighbor); } } } } ================================================ FILE: Java/core/src/main/java/com/amazon/randomcutforest/returntypes/OneSidedConvergingDiVectorAccumulator.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.returntypes; /** * A converging accumulator using a one-sided standard deviation tests. The * accumulator tests the sum of entries (i.e., the "high-low sum") in the * submitted DiVectors for convergence and returns the sum of all submitted * DiVectors. */ public class OneSidedConvergingDiVectorAccumulator extends OneSidedStDevAccumulator { /** * Create a new converging accumulator that uses a one-sided standard deviation * test. * * @param dimensions The number of dimensions in the DiVectors being * accumulated. * @param highIsCritical Set to 'true' if we care more about high values of * the converging scalar than low values. Set to * 'false' if the opposite is true. * @param precision The number of witnesses required before declaring * convergence will be at least 1.0 / precision. * @param minValuesAccepted The user-specified minimum number of values visited * before returning a result. Note that * {@link #isConverged()} may return true before * accepting this number of results if the * @param maxValuesAccepted The maximum number of values that will be accepted * by this accumulator. */ public OneSidedConvergingDiVectorAccumulator(int dimensions, boolean highIsCritical, double precision, int minValuesAccepted, int maxValuesAccepted) { super(highIsCritical, precision, minValuesAccepted, maxValuesAccepted); accumulatedValue = new DiVector(dimensions); } /** * Compute the "high-low sum" for the given DiVector. * * @param result A new result DiVector computed by a Random Cut Tree. * @return the "high-low sum" for the given DiVector. */ @Override protected double getConvergingValue(DiVector result) { return result.getHighLowSum(); } /** * Add the DiVector to the aggregate DiVector in this accumulator. * * @param result The new result to add to the accumulated value. */ @Override protected void accumulateValue(DiVector result) { DiVector.addToLeft(accumulatedValue, result); } } ================================================ FILE: Java/core/src/main/java/com/amazon/randomcutforest/returntypes/OneSidedConvergingDoubleAccumulator.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.returntypes; /** * A converging accumulator using a one-sided standard deviation tests. The * accumulator tests the submitted values for convergence and returns the sum of * all submitted values. */ public class OneSidedConvergingDoubleAccumulator extends OneSidedStDevAccumulator { /** * Create a new converging accumulator that uses a one-sided standard deviation * test. * * @param highIsCritical Set to 'true' if we care more about high values of * the converging scalar than low values. Set to * 'false' if the opposite is true. * @param precision The number of witnesses required before declaring * convergence will be at least 1.0 / precision. * @param minValuesAccepted The user-specified minimum number of values visited * before returning a result. Note that * {@link #isConverged()} may return true before * accepting this number of results if the * @param maxValuesAccepted The maximum number of values that will be accepted * by this accumulator. */ public OneSidedConvergingDoubleAccumulator(boolean highIsCritical, double precision, int minValuesAccepted, int maxValuesAccepted) { super(highIsCritical, precision, minValuesAccepted, maxValuesAccepted); accumulatedValue = 0.0; } /** * We are testing for convergence directly on the submitted double values, hence * we just return the argument as-is. * * @param result A new result value computed by a Random Cut Tree. * @return the result value. */ @Override protected double getConvergingValue(Double result) { return result; } /** * Add the result to the sum of result values. * * @param result The new result to add to the accumulated value. */ @Override protected void accumulateValue(Double result) { accumulatedValue += result; } } ================================================ FILE: Java/core/src/main/java/com/amazon/randomcutforest/returntypes/OneSidedStDevAccumulator.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.returntypes; import static java.lang.Math.max; /** * This accumulator checks to see if a result is converging by testing the * sample mean and standard deviation of a scalar value computed from the * result. As the name implies, the accumulator performs a one-sided check, * comparing the new value the current sample mean and updating its converged * status only if the difference is positive (or negative, if highIsCritical is * set to false. This accumulator is intended to be used with values where we * care more about outliers in one direction. For example, if our statistic is * anomaly score, we are normally more concerned with high anomaly scores than * low ones. * * @param The type of the value being accumulated. */ public abstract class OneSidedStDevAccumulator implements ConvergingAccumulator { /** * When testing for convergence, we use ALPHA times the sample standard * deviation to define our interval. */ private static final double ALPHA = 0.5; /** * The minimum number of values that have to be accepted by this accumulator * before we start testing for convergence. */ private final int minValuesAccepted; /** * The number of witnesses needed to declare convergence. */ private final int convergenceThreshold; /** * Set to 'true' if we care more about high values of the converging scalar than * low values. Set to 'false' if the opposite is true. */ private final boolean highIsCritical; /** * This value is +1 if highIsCritical is 'true', and -1 if highIsCritical is * fault. It is used in the converegence test. */ private final int sign; /** * The value accumulated until now. */ protected R accumulatedValue; /** * The number of values accepted by this accumulator until now. */ private int valuesAccepted; /** * The number of values that are 'witnesses' to convergence until now. See * {@link #accept}. */ private int witnesses; /** * The current sum of the converging scalar value. Used to compute the sample * mean. */ private double sumConvergeVal; /** * The current sum of squares of the converging scalar value. Used to compute * the sample standard deviation. */ private double sumSqConvergeVal; /** * Create a new converging accumulator that uses a one-sided standard deviation * test. * * @param highIsCritical Set to 'true' if we care more about high values of * the converging scalar than low values. Set to * 'false' if the opposite is true. * @param precision The number of witnesses required before declaring * convergence will be at least 1.0 / precision. * @param minValuesAccepted The user-specified minimum number of values visited * before returning a result. Note that * {@link #isConverged()} may return true before * accepting this number of results if the * @param maxValuesAccepted The maximum number of values that will be accepted * by this accumulator. */ public OneSidedStDevAccumulator(boolean highIsCritical, double precision, int minValuesAccepted, int maxValuesAccepted) { this.highIsCritical = highIsCritical; this.convergenceThreshold = precision < 1.0 / maxValuesAccepted ? maxValuesAccepted : (int) (1.0 / precision); this.minValuesAccepted = Math.min(minValuesAccepted, maxValuesAccepted); valuesAccepted = 0; witnesses = 0; sumConvergeVal = 0.0; sumSqConvergeVal = 0.0; sign = highIsCritical ? 1 : -1; accumulatedValue = null; } /** * Given a new result value, add it to the accumulated value and update * convergence statistics. * * @param result The new value being accumulated. */ @Override public void accept(R result) { accumulateValue(result); double value = getConvergingValue(result); sumConvergeVal += value; sumSqConvergeVal += value * value; valuesAccepted++; if (valuesAccepted >= minValuesAccepted) { // note that using the last seen value in the deviation dampens its effect // floating point comparisons! if (sign * (value - getMean()) + 1e-6 > ALPHA * getDeviation()) { witnesses++; } } } /** * @return the number of values accepted until now. */ @Override public int getValuesAccepted() { return valuesAccepted; } /** * @return 'true' if the accumulated value has converged, 'false' otherwise. */ @Override public boolean isConverged() { return witnesses >= convergenceThreshold; } /** * @return the accumulated value. */ @Override public R getAccumulatedValue() { return accumulatedValue; } /** * Given a new result value, compute its converging scalar value. * * @param result A new result value computed by a Random Cut Tree. * @return the scalar value used to measure convergence for this result type. */ protected abstract double getConvergingValue(R result); /** * Add the new result to the accumulated value. * * @param result The new result to add to the accumulated value. */ protected abstract void accumulateValue(R result); /** * Return the number of witnesses */ public int getWitnesses() { return witnesses; } /** * @return the mean of the values */ public double getMean() { return (valuesAccepted == 0) ? 0 : sumConvergeVal / valuesAccepted; } /** * it is possible that valuesAccepted is not large hence applying Bessel * correction * * @return the standard deviation of the accepted values */ public double getDeviation() { if (valuesAccepted <= 1) { return 0; } double mean = sumConvergeVal / valuesAccepted; double stdev = max(0, sumSqConvergeVal / valuesAccepted - mean * mean); stdev = Math.sqrt(valuesAccepted * stdev / (valuesAccepted - 1)); return stdev; } } ================================================ FILE: Java/core/src/main/java/com/amazon/randomcutforest/returntypes/RangeVector.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.returntypes; import static com.amazon.randomcutforest.CommonUtils.checkArgument; import static java.lang.Math.max; import static java.lang.Math.min; import java.util.Arrays; /** * A RangeVector is used when we want to track a quantity and its upper and * lower bounds */ public class RangeVector { public final float[] values; /** * An array of values corresponding to the upper ranges in each dimension. */ public final float[] upper; /** * An array of values corresponding to the lower ranges in each dimension */ public final float[] lower; public RangeVector(int dimensions) { checkArgument(dimensions > 0, "dimensions must be greater than 0"); values = new float[dimensions]; upper = new float[dimensions]; lower = new float[dimensions]; } /** * Construct a new RangeVector with the given number of spatial dimensions. * * @param values the values being estimated in a range * @param upper the higher values of the ranges * @param lower the lower values in the ranges */ public RangeVector(float[] values, float[] upper, float[] lower) { checkArgument(values.length > 0, " dimensions must be > 0"); checkArgument(values.length == upper.length && upper.length == lower.length, "dimensions must be equal"); for (int i = 0; i < values.length; i++) { checkArgument(upper[i] >= values[i] && values[i] >= lower[i], "incorrect semantics"); } this.values = Arrays.copyOf(values, values.length); this.upper = Arrays.copyOf(upper, upper.length); this.lower = Arrays.copyOf(lower, lower.length); } public RangeVector(float[] values) { checkArgument(values.length > 0, "dimensions must be > 0 "); this.values = Arrays.copyOf(values, values.length); this.upper = Arrays.copyOf(values, values.length); this.lower = Arrays.copyOf(values, values.length); } /** * Create a deep copy of the base RangeVector. * * @param base The RangeVector to copy. */ public RangeVector(RangeVector base) { int dimensions = base.values.length; this.values = Arrays.copyOf(base.values, dimensions); this.upper = Arrays.copyOf(base.upper, dimensions); this.lower = Arrays.copyOf(base.lower, dimensions); } public void shift(int i, float shift) { checkArgument(i >= 0 && i < values.length, "incorrect index"); values[i] += shift; // managing precision upper[i] = max(values[i], upper[i] + shift); lower[i] = min(values[i], lower[i] + shift); } public void scale(int i, float weight) { checkArgument(i >= 0 && i < values.length, "incorrect index"); checkArgument(weight >= 0, " negative weight not permitted"); values[i] = values[i] * weight; // managing precision upper[i] = max(upper[i] * weight, values[i]); lower[i] = min(lower[i] * weight, values[i]); } } ================================================ FILE: Java/core/src/main/java/com/amazon/randomcutforest/returntypes/SampleSummary.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.returntypes; import static com.amazon.randomcutforest.CommonUtils.checkArgument; import static com.amazon.randomcutforest.CommonUtils.toDoubleArray; import static com.amazon.randomcutforest.CommonUtils.toFloatArray; import static com.amazon.randomcutforest.util.Weighted.prefixPick; import static java.lang.Math.max; import static java.util.stream.Collectors.toCollection; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import com.amazon.randomcutforest.util.Weighted; public class SampleSummary { public static double DEFAULT_PERCENTILE = 0.9; /** * a collection of summarized points (reminiscent of typical sets from the * perspective of information theory, Cover and Thomas, Chapter 3) which should * be the mean/median of a spatially continuous distribution with central * tendency. If the input is a collection of samples that correspond to an union * of two such well separated distributions, for example as in the example data * of RCF paper then the output should be the two corresponding central points. */ public float[][] summaryPoints; /** * a measure of comparison among the typical points; */ public float[] relativeWeight; // some measure of the extent of the points public float[][] measure; /** * number of samples, often the number of summary */ public double weightOfSamples; /** * the global mean */ public float[] mean; public float[] median; /** * This is the global deviation, without any filtering on the TreeSamples */ public float[] deviation; /** * an upper percentile corresponding to the points, computed agnostic to * dimension */ public float[] upper; /** * a lower percentile corresponding to the points */ public float[] lower; public SampleSummary(int dimensions) { this.weightOfSamples = 0; this.summaryPoints = new float[1][]; this.summaryPoints[0] = new float[dimensions]; this.relativeWeight = new float[1]; this.measure = new float[1][]; this.measure[0] = new float[dimensions]; this.median = new float[dimensions]; this.mean = new float[dimensions]; this.deviation = new float[dimensions]; this.upper = new float[dimensions]; this.lower = new float[dimensions]; } // for older tests public SampleSummary(float[] point) { this(toDoubleArray(point), 1.0f); } public SampleSummary(double[] point, float weight) { this(point.length); this.weightOfSamples = weight; this.summaryPoints[0] = toFloatArray(point); this.relativeWeight[0] = weight; this.measure[0] = new float[point.length]; System.arraycopy(this.summaryPoints[0], 0, this.median, 0, point.length); System.arraycopy(this.summaryPoints[0], 0, this.mean, 0, point.length); System.arraycopy(this.summaryPoints[0], 0, this.upper, 0, point.length); System.arraycopy(this.summaryPoints[0], 0, this.lower, 0, point.length); } void addTypical(float[][] summaryPoints, float[] relativeWeight, float[][] measure) { checkArgument(summaryPoints.length == relativeWeight.length, "incorrect lengths of fields"); checkArgument(summaryPoints.length == measure.length, "incorrect lengths of fields"); if (summaryPoints.length > 0) { int dimension = summaryPoints[0].length; this.summaryPoints = new float[summaryPoints.length][]; this.measure = new float[summaryPoints.length][]; for (int i = 0; i < summaryPoints.length; i++) { checkArgument(dimension == summaryPoints[i].length, " incorrect length points"); checkArgument(dimension == measure[i].length, " incorrect length points"); this.summaryPoints[i] = Arrays.copyOf(summaryPoints[i], dimension); this.measure[i] = Arrays.copyOf(measure[i], dimension); } this.relativeWeight = Arrays.copyOf(relativeWeight, relativeWeight.length); } } public SampleSummary(List> points, SampleSummary clusters) { this(points, DEFAULT_PERCENTILE); this.addTypical(clusters.summaryPoints, clusters.relativeWeight, clusters.measure); } public SampleSummary(List> points, float[][] summaryPoints, float[] relativeWeight, float[] measure, double percentile) { this(points, percentile); float[][] transformedMeasure = new float[measure.length][]; double factor = 0; for (int j = 0; j < this.upper.length; j++) { factor += max(0, this.upper[j] - this.lower[j]); } for (int i = 0; i < measure.length; i++) { transformedMeasure[i] = new float[this.upper.length]; for (int j = 0; j < this.upper.length; j++) { transformedMeasure[i][j] = (factor == 0) ? 0 : (float) (max(0, this.upper[j] - this.lower[j]) * measure[i] / factor); } } this.addTypical(summaryPoints, relativeWeight, transformedMeasure); } public SampleSummary(List> points, float[][] summaryPoints, float[] relativeWeight, float[] measure) { this(points, summaryPoints, relativeWeight, measure, DEFAULT_PERCENTILE); } public SampleSummary(List> points) { this(points, DEFAULT_PERCENTILE); } /** * constructs a summary of the weighted points based on the percentile envelopes * by picking 1-percentile and percentile fractional rank of the items useful in * surfacing a robust range of values * * @param points weighted points * @param percentile value corresponding to bounds */ public SampleSummary(List> points, double percentile) { checkArgument(points.size() > 0, "point list cannot be empty"); checkArgument(percentile > 0.5, " has to be more than 0.5"); checkArgument(percentile < 1.0, "has to be less than 1"); int dimension = points.get(0).index.length; double[] coordinateSum = new double[dimension]; double[] coordinateSumSquare = new double[dimension]; double totalWeight = 0; for (Weighted e : points) { checkArgument(e.index.length == dimension, "points have to be of same length"); float weight = e.weight; checkArgument(!Float.isNaN(weight), " weights must be non-NaN values "); checkArgument(Float.isFinite(weight), " weights must be finite "); checkArgument(weight >= 0, "weights have to be non-negative"); totalWeight += weight; for (int i = 0; i < dimension; i++) { int index = i; checkArgument(!Float.isNaN(e.index[i]), () -> " improper input, in coordinate " + index + ", must be non-NaN values"); checkArgument(Float.isFinite(e.index[i]), () -> " improper input, in coordinate " + index + ", must be finite values"); coordinateSum[i] += e.index[i] * weight; coordinateSumSquare[i] += e.index[i] * e.index[i] * weight; } } checkArgument(totalWeight > 0, " weights cannot all be 0"); this.weightOfSamples = totalWeight; this.mean = new float[dimension]; this.deviation = new float[dimension]; this.median = new float[dimension]; this.upper = new float[dimension]; this.lower = new float[dimension]; for (int i = 0; i < dimension; i++) { this.mean[i] = (float) (coordinateSum[i] / totalWeight); this.deviation[i] = (float) Math.sqrt(max(0.0, coordinateSumSquare[i] / totalWeight - mean[i] * mean[i])); } for (int i = 0; i < dimension; i++) { int index = i; ArrayList> list = points.stream().map(e -> new Weighted<>(e.index[index], e.weight)) .collect(toCollection(ArrayList::new)); list.sort((o1, o2) -> Float.compare(o1.index, o2.index)); this.lower[i] = prefixPick(list, totalWeight * (1.0 - percentile)).index; this.median[i] = prefixPick(list, totalWeight / 2.0).index; this.upper[i] = prefixPick(list, totalWeight * percentile).index; } } } ================================================ FILE: Java/core/src/main/java/com/amazon/randomcutforest/returntypes/TimedRangeVector.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.returntypes; import static com.amazon.randomcutforest.CommonUtils.checkArgument; import static java.lang.Math.max; import static java.lang.Math.min; import java.util.Arrays; /** * ThresholdedRandomCutForests handle time internally and thus the forecast of * values also correpond to the next sequential timestamps. The RangeVector * corresponds to the forecast from RCF (based on the inverse of the * transformation applied by TRCF as it invokes RCF). The timeStamps correspond * to the predicted timestamps The upper and lower ranges are also present * similar to RangeVector * * Note that if the timestamps cannot be predicted meaningfully (for example in * STREAMING_IMPUTE mode), then those entries would be 0 */ public class TimedRangeVector { public final RangeVector rangeVector; public final long[] timeStamps; public final long[] upperTimeStamps; public final long[] lowerTimeStamps; public TimedRangeVector(int dimensions, int horizon) { checkArgument(dimensions > 0, "dimensions must be greater than 0"); checkArgument(horizon > 0, "horizon must be greater than 0"); checkArgument(dimensions % horizon == 0, "horizon should divide dimensions"); rangeVector = new RangeVector(dimensions); timeStamps = new long[horizon]; upperTimeStamps = new long[horizon]; lowerTimeStamps = new long[horizon]; } public TimedRangeVector(RangeVector rangeVector, long[] timestamps, long[] upperTimeStamps, long[] lowerTimeStamps) { checkArgument(rangeVector.values.length % timestamps.length == 0, " dimensions must be be divisible by horizon"); checkArgument(timestamps.length == upperTimeStamps.length && upperTimeStamps.length == lowerTimeStamps.length, "horizon must be equal"); this.rangeVector = new RangeVector(rangeVector); for (int i = 0; i < timestamps.length; i++) { checkArgument(upperTimeStamps[i] >= timestamps[i] && timestamps[i] >= lowerTimeStamps[i], "incorrect semantics"); } this.timeStamps = Arrays.copyOf(timestamps, timestamps.length); this.lowerTimeStamps = Arrays.copyOf(lowerTimeStamps, lowerTimeStamps.length); this.upperTimeStamps = Arrays.copyOf(upperTimeStamps, upperTimeStamps.length); } public TimedRangeVector(TimedRangeVector base) { this.rangeVector = new RangeVector(base.rangeVector); this.timeStamps = Arrays.copyOf(base.timeStamps, base.timeStamps.length); this.lowerTimeStamps = Arrays.copyOf(base.lowerTimeStamps, base.lowerTimeStamps.length); this.upperTimeStamps = Arrays.copyOf(base.upperTimeStamps, base.upperTimeStamps.length); } /** * Create a deep copy of the base RangeVector. * * @param base The RangeVector to copy. */ public TimedRangeVector(RangeVector base, int horizon) { checkArgument(base.values.length % horizon == 0, "incorrect lengths"); this.rangeVector = new RangeVector(base); this.timeStamps = new long[horizon]; this.upperTimeStamps = new long[horizon]; this.lowerTimeStamps = new long[horizon]; } public void shiftTime(int i, long shift) { checkArgument(i >= 0 && i < timeStamps.length, "incorrect index"); timeStamps[i] += shift; // managing precision upperTimeStamps[i] = max(timeStamps[i], upperTimeStamps[i] + shift); lowerTimeStamps[i] = min(timeStamps[i], lowerTimeStamps[i] + shift); } public void scaleTime(int i, double weight) { checkArgument(i >= 0 && i < timeStamps.length, "incorrect index"); checkArgument(weight > 0, " negative weight not permitted"); timeStamps[i] = (long) (timeStamps[i] * weight); // managing precision upperTimeStamps[i] = max((long) (upperTimeStamps[i] * weight), timeStamps[i]); lowerTimeStamps[i] = min((long) (lowerTimeStamps[i] * weight), timeStamps[i]); } } ================================================ FILE: Java/core/src/main/java/com/amazon/randomcutforest/runner/AnomalyAttributionRunner.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.runner; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.List; import com.amazon.randomcutforest.RandomCutForest; import com.amazon.randomcutforest.returntypes.DiVector; /** * A command-line application that computes anomaly attribution. Points are read * from STDIN and output is written to STDOUT. Output consists of the original * input point with the anomaly attribution vector appended. */ public class AnomalyAttributionRunner extends SimpleRunner { public AnomalyAttributionRunner() { super(AnomalyAttributionRunner.class.getName(), "Compute directional anomaly scores from the input rows and append them to the output rows.", AnomalyAttributionTransformer::new); } public static void main(String... args) throws IOException { AnomalyAttributionRunner runner = new AnomalyAttributionRunner(); runner.parse(args); System.out.println("Reading from stdin... (Ctrl-c to exit)"); runner.run(new BufferedReader(new InputStreamReader(System.in, StandardCharsets.UTF_8)), new PrintWriter(new OutputStreamWriter(System.out, StandardCharsets.UTF_8))); System.out.println("Done."); } public static class AnomalyAttributionTransformer implements LineTransformer { private final RandomCutForest forest; public AnomalyAttributionTransformer(RandomCutForest forest) { this.forest = forest; } @Override public List getResultValues(double... point) { DiVector attribution = forest.getAnomalyAttribution(point); forest.update(point); List result = new ArrayList<>(2 * forest.getDimensions()); for (int i = 0; i < attribution.getDimensions(); i++) { result.add(Double.toString(attribution.low[i])); result.add(Double.toString(attribution.high[i])); } return result; } @Override public List getEmptyResultValue() { List result = new ArrayList<>(2 * forest.getDimensions()); for (int i = 0; i < 2 * forest.getDimensions(); i++) { result.add("NA"); } return result; } @Override public List getResultColumnNames() { List result = new ArrayList<>(2 * forest.getDimensions()); for (int i = 0; i < forest.getDimensions(); i++) { result.add("anomaly_low_" + i); result.add("anomaly_high_" + i); } return result; } @Override public RandomCutForest getForest() { return forest; } } } ================================================ FILE: Java/core/src/main/java/com/amazon/randomcutforest/runner/AnomalyScoreRunner.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.runner; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.nio.charset.StandardCharsets; import java.util.Collections; import java.util.List; import com.amazon.randomcutforest.RandomCutForest; /** * A command-line application that computes anomaly scores. Points are read from * STDIN and output is written to STDOUT. Output consists of the original input * point with the anomaly score appended. */ public class AnomalyScoreRunner extends SimpleRunner { public AnomalyScoreRunner() { super(AnomalyScoreRunner.class.getName(), "Compute scalar anomaly scores from the input rows and append them to the output rows.", AnomalyScoreTransformer::new); } public static void main(String... args) throws IOException { AnomalyScoreRunner runner = new AnomalyScoreRunner(); runner.parse(args); System.out.println("Reading from stdin... (Ctrl-c to exit)"); runner.run(new BufferedReader(new InputStreamReader(System.in, StandardCharsets.UTF_8)), new PrintWriter(new OutputStreamWriter(System.out, StandardCharsets.UTF_8))); System.out.println("Done."); } public static class AnomalyScoreTransformer implements LineTransformer { private final RandomCutForest forest; public AnomalyScoreTransformer(RandomCutForest forest) { this.forest = forest; } @Override public List getResultValues(double... point) { double score = forest.getAnomalyScore(point); forest.update(point); return Collections.singletonList(Double.toString(score)); } @Override public List getEmptyResultValue() { return Collections.singletonList("NA"); } @Override public List getResultColumnNames() { return Collections.singletonList("anomaly_score"); } @Override public RandomCutForest getForest() { return forest; } } } ================================================ FILE: Java/core/src/main/java/com/amazon/randomcutforest/runner/ArgumentParser.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.runner; import static com.amazon.randomcutforest.CommonUtils.checkArgument; import static com.amazon.randomcutforest.CommonUtils.checkNotNull; import java.util.HashMap; import java.util.Map; import java.util.function.Consumer; import java.util.function.Function; /** * A utility class for parsing command-line arguments. */ public class ArgumentParser { public static final String ARCHIVE_NAME = "randomcutforest-core-1.0.jar"; private final String runnerClass; private final String runnerDescription; private final Map> shortFlags; private final Map> longFlags; private final IntegerArgument numberOfTrees; private final IntegerArgument sampleSize; private final IntegerArgument windowSize; private final IntegerArgument shingleSize; private final BooleanArgument shingleCyclic; private final StringArgument delimiter; private final BooleanArgument headerRow; private final IntegerArgument randomSeed; /** * Create a new ArgumentParser.The runner class and runner description will be * used in help text. * * @param runnerClass The name of the runner class where this argument * parser is being invoked. * @param runnerDescription A description of the runner class where this * argument parser is being invoked. */ public ArgumentParser(String runnerClass, String runnerDescription) { this.runnerClass = runnerClass; this.runnerDescription = runnerDescription; shortFlags = new HashMap<>(); longFlags = new HashMap<>(); numberOfTrees = new IntegerArgument("-n", "--number-of-trees", "Number of trees to use in the forest.", 100, n -> checkArgument(n > 0, "number of trees should be greater than 0")); addArgument(numberOfTrees); sampleSize = new IntegerArgument("-s", "--sample-size", "Number of points to keep in sample for each tree.", 256, n -> checkArgument(n > 0, "sample size should be greater than 0")); addArgument(sampleSize); windowSize = new IntegerArgument("-w", "--window-size", "Window size of the sample or 0 for no window.", 0, n -> checkArgument(n > 0, "window size should be greater than 0")); addArgument(windowSize); shingleSize = new IntegerArgument("-g", "--shingle-size", "Shingle size to use.", 1, n -> checkArgument(n > 0, "shingle size should be greater than 0")); addArgument(shingleSize); shingleCyclic = new BooleanArgument("-c", "--shingle-cyclic", "Set to 'true' to use cyclic shingles instead of linear shingles.", false); addArgument(shingleCyclic); delimiter = new StringArgument("-d", "--delimiter", "The character or string used as a field delimiter.", ","); addArgument(delimiter); headerRow = new BooleanArgument(null, "--header-row", "Set to 'true' if the data contains a header row.", false); addArgument(headerRow); randomSeed = new IntegerArgument(null, "--random-seed", "Random seed to use in the Random Cut Forest", 42); addArgument(randomSeed); } /** * Add a new argument to this argument parser. * * @param argument An Argument instance for a command-line argument that should * be parsed. */ protected void addArgument(Argument argument) { checkNotNull(argument, "argument should not be null"); checkArgument(argument.getShortFlag() == null || !shortFlags.containsKey(argument.getShortFlag()), String.format("An argument mapping already exists for %s", argument.getShortFlag())); checkArgument(!longFlags.containsKey(argument.getLongFlag()), String.format("An argument mapping already exists for %s", argument.getLongFlag())); if (argument.getShortFlag() != null) { shortFlags.put(argument.getShortFlag(), argument); } longFlags.put(argument.getLongFlag(), argument); } /** * Remove the argument with the given long flag from help messages. This allows * subclasses to suppress arguments as needed. The argument will still exist in * this object with its default value. * * @param longFlag The long flag corresponding to the argument being removed */ protected void removeArgument(String longFlag) { Argument argument = longFlags.get(longFlag); if (argument != null) { longFlags.remove(longFlag); shortFlags.remove(argument.getShortFlag()); } } /** * Parse the given array of command-line arguments. * * @param arguments An array of command-line arguments. */ public void parse(String... arguments) { int i = 0; while (i < arguments.length) { String flag = arguments[i]; try { if (shortFlags.containsKey(flag)) { shortFlags.get(flag).parse(arguments[++i]); } else if (longFlags.containsKey(flag)) { longFlags.get(flag).parse(arguments[++i]); } else if ("-h".equals(flag) || "--help".equals(flag)) { printUsage(); Runtime.getRuntime().exit(0); } else { throw new IllegalArgumentException("Unknown argument: " + flag); } } catch (Exception e) { printUsageAndExit("%s: %s", e.getClass().getName(), e.getMessage()); } i++; } } /** * Print a usage message to STDOUT. */ public void printUsage() { System.out.println( String.format("Usage: java -cp %s %s [options] < input_file > output_file", ARCHIVE_NAME, runnerClass)); System.out.println(); System.out.println(runnerDescription); System.out.println(); System.out.println("Options:"); longFlags.values().stream().map(Argument::getHelpMessage).sorted() .forEach(msg -> System.out.println("\t" + msg)); System.out.println(); System.out.println("\t--help, -h: Print this help message and exit."); } /** * Print an error message, the usage message, and exit the application. * * @param errorMessage An error message to show the user. * @param formatObjects An array of format objects that will be interpolated * into the error message using {@link String#format}. */ public void printUsageAndExit(String errorMessage, Object... formatObjects) { System.err.println("Error: " + String.format(errorMessage, formatObjects)); printUsage(); System.exit(1); } /** * @return the user-specified value of the number-of-trees parameter. */ public int getNumberOfTrees() { return numberOfTrees.getValue(); } /** * @return the user-specified value of the sample-size parameter. */ public int getSampleSize() { return sampleSize.getValue(); } /** * @return the user-specified value of the window-size parameter */ public int getWindowSize() { return windowSize.getValue(); } /** * @return the user-specified value of the time-decay parameter */ public double getTimeDecay() { if (getWindowSize() > 0) { return 1.0 / getWindowSize(); } else { return 0.0; } } /** * @return the user-specified value of the shingle-size parameter */ public int getShingleSize() { return shingleSize.getValue(); } /** * @return the user-specified value of the shingle-cyclic parameter */ public boolean getShingleCyclic() { return shingleCyclic.getValue(); } /** * @return the user-specified value of the delimiter parameter */ public String getDelimiter() { return delimiter.getValue(); } /** * @return the user-specified value of the header-row parameter */ public boolean getHeaderRow() { return headerRow.getValue(); } /** * @return the user-specified value of the random-seed parameter */ public int getRandomSeed() { return randomSeed.getValue(); } public static class Argument { private final String shortFlag; private final String longFlag; private final String description; private final T defaultValue; private final Function parseFunction; private final Consumer validateFunction; private T value; public Argument(String shortFlag, String longFlag, String description, T defaultValue, Function parseFunction, Consumer validateFunction) { this.shortFlag = shortFlag; this.longFlag = longFlag; this.description = description; this.defaultValue = defaultValue; this.parseFunction = parseFunction; this.validateFunction = validateFunction; value = defaultValue; } public Argument(String shortFlag, String longFlag, String description, T defaultValue, Function parseFunction) { this(shortFlag, longFlag, description, defaultValue, parseFunction, t -> { }); } public String getShortFlag() { return shortFlag; } public String getLongFlag() { return longFlag; } public String getDescription() { return description; } public T getDefaultValue() { return defaultValue; } public String getHelpMessage() { if (shortFlag != null) { return String.format("%s, %s: %s (default: %s)", longFlag, shortFlag, description, defaultValue); } else { return String.format("%s: %s (default: %s)", longFlag, description, defaultValue); } } public void parse(String string) { value = parseFunction.apply(string); validateFunction.accept(value); } public T getValue() { return value; } } public static class StringArgument extends Argument { public StringArgument(String shortFlag, String longFlag, String description, String defaultValue, Consumer validateFunction) { super(shortFlag, longFlag, description, defaultValue, x -> x, validateFunction); } public StringArgument(String shortFlag, String longFlag, String description, String defaultValue) { super(shortFlag, longFlag, description, defaultValue, x -> x); } } public static class BooleanArgument extends Argument { public BooleanArgument(String shortFlag, String longFlag, String description, boolean defaultValue) { super(shortFlag, longFlag, description, defaultValue, Boolean::parseBoolean); } } public static class IntegerArgument extends Argument { public IntegerArgument(String shortFlag, String longFlag, String description, int defaultValue, Consumer validateFunction) { super(shortFlag, longFlag, description, defaultValue, Integer::parseInt, validateFunction); } public IntegerArgument(String shortFlag, String longFlag, String description, int defaultValue) { super(shortFlag, longFlag, description, defaultValue, Integer::parseInt); } } public static class DoubleArgument extends Argument { public DoubleArgument(String shortFlag, String longFlag, String description, double defaultValue, Consumer validateFunction) { super(shortFlag, longFlag, description, defaultValue, Double::parseDouble, validateFunction); } public DoubleArgument(String shortFlag, String longFlag, String description, double defaultValue) { super(shortFlag, longFlag, description, defaultValue, Double::parseDouble); } } } ================================================ FILE: Java/core/src/main/java/com/amazon/randomcutforest/runner/ImputeRunner.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.runner; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.nio.charset.StandardCharsets; import java.util.Arrays; import java.util.StringJoiner; /** * A command-line application that imputes missing values. Points are read from * STDIN and output is written to STDOUT. One output point is written for each * input point. If the input point does not contain any missing value * indicators, then it is copied as-is to the output. If an input point contains * one or more missing value indicators, then the missing values are imputed and * the imputed point is written to the output. */ public class ImputeRunner extends SimpleRunner { private String missingValueMarker; private int numberOfMissingValues; private int[] missingIndexes; public ImputeRunner() { super(new ImputeArgumentParser(), UpdateOnlyTransformer::new); } public static void main(String... args) throws IOException { ImputeRunner runner = new ImputeRunner(); runner.parse(args); System.out.println("Reading from stdin... (Ctrl-c to exit)"); runner.run(new BufferedReader(new InputStreamReader(System.in, StandardCharsets.UTF_8)), new PrintWriter(new OutputStreamWriter(System.out, StandardCharsets.UTF_8))); System.out.println("Done."); } @Override protected void prepareAlgorithm(int dimensions) { super.prepareAlgorithm(dimensions); missingIndexes = new int[dimensions]; missingValueMarker = ((ImputeArgumentParser) argumentParser).getMissingValueMarker(); } @Override protected void processLine(String[] values, PrintWriter out) { numberOfMissingValues = 0; for (int i = 0; i < getPointSize(); i++) { if (missingValueMarker.equals(values[i])) { missingIndexes[numberOfMissingValues++] = i; values[i] = "0"; } } if (numberOfMissingValues > 0) { parsePoint(values); double[] imputedPoint = algorithm.getForest().imputeMissingValues(pointBuffer, numberOfMissingValues, missingIndexes); StringJoiner joiner = new StringJoiner(argumentParser.getDelimiter()); Arrays.stream(imputedPoint).mapToObj(Double::toString).forEach(joiner::add); out.println(joiner.toString()); } else { super.processLine(values, out); } } public static class ImputeArgumentParser extends ArgumentParser { private final StringArgument missingValueMarker; public ImputeArgumentParser() { super(ImputeRunner.class.getName(), "Read rows with missing values and write rows with missing values imputed."); missingValueMarker = new StringArgument(null, "--missing-value-marker", "String used to represent a missing value in the data.", "NA"); addArgument(missingValueMarker); removeArgument("--shingle-size"); removeArgument("--shingle-cyclic"); } public String getMissingValueMarker() { return missingValueMarker.getValue(); } } } ================================================ FILE: Java/core/src/main/java/com/amazon/randomcutforest/runner/LineTransformer.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.runner; import java.util.List; import com.amazon.randomcutforest.RandomCutForest; /** * This interface is used by SimpleRunner to transform input lines into output * lines. */ public interface LineTransformer { /** * For the given parsed input point, return a list of string values that should * be written as output. The list of strings will be joined together using the * user-specified delimiter. * * @param point A point value that was parsed from the input stream. * @return a list of string values that should be written as output. */ List getResultValues(double[] point); /** * @return a list of string values that should be written to the output when * processing a line if there is no input point available. This method * is invoked when shingling is enabled before the first shingle is * full. */ List getEmptyResultValue(); /** * @return a list of column names to write to the output if headers are enabled. */ List getResultColumnNames(); /** * @return the RandomCutForest instance which is being used internally to * process lines. */ RandomCutForest getForest(); } ================================================ FILE: Java/core/src/main/java/com/amazon/randomcutforest/runner/SimpleDensityRunner.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.runner; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.List; import com.amazon.randomcutforest.RandomCutForest; import com.amazon.randomcutforest.returntypes.DiVector; /** * A command-line application that computes directional density. Points are read * from STDIN and output is written to STDOUT. Output consists of the original * input point with the directional density vector appended. */ public class SimpleDensityRunner extends SimpleRunner { public SimpleDensityRunner() { super(SimpleDensityRunner.class.getName(), "Compute directional density vectors from the input rows and append them to the output rows.", SimpleDensityRunner.SimpleDensityTransformer::new); } public static void main(String... args) throws IOException { SimpleDensityRunner runner = new SimpleDensityRunner(); runner.parse(args); System.out.println("Reading from stdin... (Ctrl-c to exit)"); runner.run(new BufferedReader(new InputStreamReader(System.in, StandardCharsets.UTF_8)), new PrintWriter(new OutputStreamWriter(System.out, StandardCharsets.UTF_8))); System.out.println("Done."); } public static class SimpleDensityTransformer implements LineTransformer { private final RandomCutForest forest; public SimpleDensityTransformer(RandomCutForest forest) { this.forest = forest; } @Override public List getResultValues(double... point) { DiVector densityFactors = forest.getSimpleDensity(point).getDirectionalDensity(); forest.update(point); List result = new ArrayList<>(2 * forest.getDimensions()); for (int i = 0; i < forest.getDimensions(); i++) { result.add(String.format("%f", densityFactors.high[i])); result.add(String.format("%f", densityFactors.low[i])); } return result; } @Override public List getEmptyResultValue() { List result = new ArrayList<>(2 * forest.getDimensions()); for (int i = 0; i < 2 * forest.getDimensions(); i++) { result.add("NA"); } return result; } @Override public List getResultColumnNames() { List result = new ArrayList<>(2 * forest.getDimensions()); for (int i = 0; i < forest.getDimensions(); i++) { result.add(String.format("prob_mass_%d_up", i)); result.add(String.format("prob_mass_%d_down", i)); } return result; } @Override public RandomCutForest getForest() { return forest; } } } ================================================ FILE: Java/core/src/main/java/com/amazon/randomcutforest/runner/SimpleRunner.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.runner; import java.io.BufferedReader; import java.io.IOException; import java.io.PrintWriter; import java.util.Arrays; import java.util.List; import java.util.StringJoiner; import java.util.function.Function; import com.amazon.randomcutforest.RandomCutForest; import com.amazon.randomcutforest.util.ShingleBuilder; /** * A simple command-line application that parses command-line arguments, creates * a RandomCutForest instance based on those arguments, reads values from STDIN * and writes results to STDOUT. */ public class SimpleRunner { protected final ArgumentParser argumentParser; protected final Function algorithmInitializer; protected LineTransformer algorithm; protected ShingleBuilder shingleBuilder; protected double[] pointBuffer; protected double[] shingleBuffer; protected int lineNumber; /** * Create a new SimpleRunner. * * @param runnerClass The name of the runner class. This will be * displayed in the help text. * @param runnerDescription A description of the runner class. This will be * displayed in the help text. * @param algorithmInitializer A factory method to create a new LineTransformer * instance from a RandomCutForest. */ public SimpleRunner(String runnerClass, String runnerDescription, Function algorithmInitializer) { this(new ArgumentParser(runnerClass, runnerDescription), algorithmInitializer); } /** * Create a new SimpleRunner. * * @param argumentParser A argument parser that will be used by this * runner to parse command-line arguments. * @param algorithmInitializer A factory method to create a new LineTransformer * instance from a RandomCutForest. */ public SimpleRunner(ArgumentParser argumentParser, Function algorithmInitializer) { this.argumentParser = argumentParser; this.algorithmInitializer = algorithmInitializer; } /** * Parse the given command-line arguments. * * @param arguments An array of command-line arguments. */ public void parse(String... arguments) { argumentParser.parse(arguments); } /** * Read data from an input stream, apply the desired transformation, and write * the result to an output stream. * * @param in An input stream where input values will be read. * @param out An output stream where the result values will be written. * @throws IOException if IO errors are encountered during reading or writing. */ public void run(BufferedReader in, PrintWriter out) throws IOException { String line; while ((line = in.readLine()) != null) { lineNumber++; String[] values = line.split(argumentParser.getDelimiter()); if (pointBuffer == null) { prepareAlgorithm(values.length); } if (lineNumber == 1 && argumentParser.getHeaderRow()) { writeHeader(values, out); continue; } processLine(values, out); } finish(out); out.flush(); } /** * Set up the internal RandomCutForest instance and line transformer. * * @param dimensions The number of dimensions in the input data. */ protected void prepareAlgorithm(int dimensions) { pointBuffer = new double[dimensions]; shingleBuilder = new ShingleBuilder(dimensions, argumentParser.getShingleSize(), argumentParser.getShingleCyclic()); shingleBuffer = new double[shingleBuilder.getShingledPointSize()]; RandomCutForest forest = RandomCutForest.builder().numberOfTrees(argumentParser.getNumberOfTrees()) .sampleSize(argumentParser.getSampleSize()).dimensions(shingleBuilder.getShingledPointSize()) .timeDecay(argumentParser.getTimeDecay()).randomSeed(argumentParser.getRandomSeed()).build(); algorithm = algorithmInitializer.apply(forest); } /** * Write a header row to the output stream. * * @param values The array of values that are used to create the header. These * values will be joined together using the user-specified * delimiter. * @param out The output stream where the header will be written. */ protected void writeHeader(String[] values, PrintWriter out) { StringJoiner joiner = new StringJoiner(argumentParser.getDelimiter()); Arrays.stream(values).forEach(joiner::add); algorithm.getResultColumnNames().forEach(joiner::add); out.println(joiner.toString()); } /** * Process a single line of input data and write the result to the output * stream. * * @param values An array of string values taken from the input stream. These * values will be parsed into an array of doubles before being * transformed and written to the output stream. * @param out The output stream where the transformed line will be written. */ protected void processLine(String[] values, PrintWriter out) { if (values.length != pointBuffer.length) { throw new IllegalArgumentException( String.format("Wrong number of values on line %d. Exected %d but found %d.", lineNumber, pointBuffer.length, values.length)); } parsePoint(values); shingleBuilder.addPoint(pointBuffer); List result; if (shingleBuilder.isFull()) { shingleBuilder.getShingle(shingleBuffer); result = algorithm.getResultValues(shingleBuffer); } else { result = algorithm.getEmptyResultValue(); } StringJoiner joiner = new StringJoiner(argumentParser.getDelimiter()); Arrays.stream(values).forEach(joiner::add); result.forEach(joiner::add); out.println(joiner.toString()); } /** * Parse the array of string values into doubles and write them to an internal * buffer. * * @param stringValues An array of string-encoded double values. */ protected void parsePoint(String[] stringValues) { for (int i = 0; i < pointBuffer.length; i++) { pointBuffer[i] = Double.parseDouble(stringValues[i]); } } /** * This method is used to write any final output to the output stream after the * input stream has beeen fully processed. * * @param out The output stream where additional output text may be written. */ protected void finish(PrintWriter out) { } /** * @return the size of the internal point buffer. */ protected int getPointSize() { return pointBuffer != null ? pointBuffer.length : 0; } /** * @return the size of the internal shingled point buffer. */ protected int getShingleSize() { return shingleBuffer != null ? shingleBuffer.length : 0; } } ================================================ FILE: Java/core/src/main/java/com/amazon/randomcutforest/runner/UpdateOnlyTransformer.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.runner; import java.util.Collections; import java.util.List; import com.amazon.randomcutforest.RandomCutForest; /** * A line transformer that updates its internal RandomCutForest instance but * does not produce any output. */ public class UpdateOnlyTransformer implements LineTransformer { private final RandomCutForest forest; public UpdateOnlyTransformer(RandomCutForest forest) { this.forest = forest; } @Override public List getResultValues(double... point) { forest.update(point); return Collections.emptyList(); } @Override public List getEmptyResultValue() { return Collections.emptyList(); } @Override public List getResultColumnNames() { return Collections.emptyList(); } @Override public RandomCutForest getForest() { return forest; } } ================================================ FILE: Java/core/src/main/java/com/amazon/randomcutforest/sampler/AbstractStreamSampler.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.sampler; import static com.amazon.randomcutforest.CommonUtils.checkArgument; import static com.amazon.randomcutforest.CommonUtils.checkNotNull; import static com.amazon.randomcutforest.RandomCutForest.DEFAULT_INITIAL_ACCEPT_FRACTION; import static com.amazon.randomcutforest.RandomCutForest.DEFAULT_SAMPLE_SIZE; import java.util.Random; import com.amazon.randomcutforest.config.Config; public abstract class AbstractStreamSampler

implements IStreamSampler

{ /** * The decay factor used for generating the weight of the point. For greater * values of timeDecay we become more biased in favor of recent points. */ protected double timeDecay; /** * The sequence index corresponding to the most recent change to * {@code timeDecay}. */ protected long mostRecentTimeDecayUpdate = 0; /** * most recent timestamp, used to determine lastUpdateOfTimeDecay */ protected long maxSequenceIndex = 0; /** * The accumulated sum of timeDecay before the last update */ protected double accumuluatedTimeDecay = 0; /** * The random number generator used in sampling. */ protected ReplayableRandom random; /** * The point evicted by the last call to {@link #update}, or null if the new * point was not accepted by the sampler. */ protected transient ISampled

evictedPoint; /** * the fraction of points admitted to the sampler even when the sampler can * accept (not full) this helps control the initial behavior of the points and * ensure robustness by ensuring that the samplers do not all sample the initial * set of points. */ protected final double initialAcceptFraction; /** * a function that computes the probability of admittance of a new value when * the sampler is not full Note that a value can always be admitted if it has a * weight smaller than some sampled value * * this function provides a mechanism for different trees to smoothly diverge -- * most previous versions corresponded to initialFraction = 1, and the samplers * only diverge after all of them store all the first sampleSize points. In * contrast the method (which can be changed in a subclass) admits the first * initialFraction * sampleSize number of points and then becomes a monotonic * decreasing function. * * This function is supposed to be a parallel to the outputAfter() setting in * the forest which controls how scores are emitted * * @param currentSize the current size of the sampler * @return the probability of admitting the next point */ protected double initialAcceptProbability(int currentSize) { if (currentSize < initialAcceptFraction * capacity) { return 1.0; } else if (initialAcceptFraction >= 1.0) { return 0; } else { return 1 - (1.0 * currentSize / capacity - initialAcceptFraction) / (1 - initialAcceptFraction); } } /** * The number of points in the sample when full. */ protected final int capacity; /** * This field is used to temporarily store the result from a call to * {@link #acceptPoint} for use in the subsequent call to {@link #addPoint}. * * Visible for testing. */ protected AcceptPointState acceptPointState; public boolean acceptPoint(long sequenceIndex) { return acceptPoint(sequenceIndex, 1.0f); } public abstract boolean acceptPoint(long sequenceIndex, float weight); @Override public abstract void addPoint(P pointIndex); public AbstractStreamSampler(Builder builder) { this.capacity = builder.capacity; this.initialAcceptFraction = builder.initialAcceptFraction; this.timeDecay = builder.timeDecay; if (builder.random != null) { this.random = new ReplayableRandom(builder.random); } else { this.random = new ReplayableRandom(builder.randomSeed); } } /** * Weight is computed as -log(w(i)) + log(-log(u(i)), where * *

    *
  • w(i) = exp(timeDecay * sequenceIndex)
  • *
  • u(i) is chosen uniformly from (0, 1)
  • *
*

* A higher score means lower priority. So the points with the lower score have * higher chance of making it to the sample. * * @param sequenceIndex The sequenceIndex of the point whose score is being * computed. * @param sampleWeight the positive weight (often 1.0) used in sampling; the * weight should be checked in the calling routine * @return the weight value used to define point priority */ protected float computeWeight(long sequenceIndex, float sampleWeight) { double randomNumber = 0d; while (randomNumber == 0d) { randomNumber = random.nextDouble(); } maxSequenceIndex = (maxSequenceIndex < sequenceIndex) ? sequenceIndex : maxSequenceIndex; return (float) (-(sequenceIndex - mostRecentTimeDecayUpdate) * timeDecay - accumuluatedTimeDecay + Math.log(-Math.log(randomNumber) / sampleWeight)); } /** * Sets the timeDecay on the fly. Note that the assumption is that the times * stamps corresponding to changes to timeDecay and sequenceIndexes are * non-decreasing -- the sequenceIndexes can be out of order among themselves * within two different times when timeDecay was changed. * * @param newTimeDecay the new sampling rate */ public void setTimeDecay(double newTimeDecay) { // accumulatedTimeDecay keeps track of adjustments and is zeroed out when the // arrays are exported for some reason accumuluatedTimeDecay += (maxSequenceIndex - mostRecentTimeDecayUpdate) * timeDecay; timeDecay = newTimeDecay; mostRecentTimeDecayUpdate = maxSequenceIndex; } /** * @return the time decay value that determines the rate of decay of previously * seen points. Larger values of time decay indicate a greater bias * toward recent points. A value of 0 corresponds to a uniform sample * over the stream. */ public double getTimeDecay() { return timeDecay; } public long getMaxSequenceIndex() { return maxSequenceIndex; } public void setMaxSequenceIndex(long index) { maxSequenceIndex = index; } public long getMostRecentTimeDecayUpdate() { return mostRecentTimeDecayUpdate; } public void setMostRecentTimeDecayUpdate(long index) { mostRecentTimeDecayUpdate = index; } @Override public void setConfig(String name, T value, Class clazz) { if (Config.TIME_DECAY.equals(name)) { checkArgument(Double.class.isAssignableFrom(clazz), String.format("Setting '%s' must be a double value", name)); setTimeDecay((Double) value); } else { throw new IllegalArgumentException("Unsupported configuration setting: " + name); } } @Override public T getConfig(String name, Class clazz) { checkNotNull(clazz, "clazz must not be null"); if (Config.TIME_DECAY.equals(name)) { checkArgument(clazz.isAssignableFrom(Double.class), String.format("Setting '%s' must be a double value", name)); return clazz.cast(getTimeDecay()); } else { throw new IllegalArgumentException("Unsupported configuration setting: " + name); } } /** * @return the number of points contained by the sampler when full. */ @Override public int getCapacity() { return capacity; } public double getInitialAcceptFraction() { return initialAcceptFraction; } public long getRandomSeed() { return random.randomSeed; } protected class ReplayableRandom { long randomSeed; Random testRandom; ReplayableRandom(long randomSeed) { this.randomSeed = randomSeed; } ReplayableRandom(Random random) { this.testRandom = random; } public double nextDouble() { if (testRandom != null) { return testRandom.nextDouble(); } Random newRandom = new Random(randomSeed); randomSeed = newRandom.nextLong(); return newRandom.nextDouble(); } } public static class Builder> { // We use Optional types for optional primitive fields when it doesn't make // sense to use a constant default. protected int capacity = DEFAULT_SAMPLE_SIZE; protected double timeDecay = 0; protected Random random = null; protected long randomSeed = new Random().nextLong(); protected long maxSequenceIndex = 0; protected long sequenceIndexOfMostRecentTimeDecayUpdate = 0; protected double initialAcceptFraction = DEFAULT_INITIAL_ACCEPT_FRACTION; public T capacity(int capacity) { this.capacity = capacity; return (T) this; } public T randomSeed(long seed) { this.randomSeed = seed; return (T) this; } public T random(Random random) { this.random = random; return (T) this; } public T maxSequenceIndex(long maxSequenceIndex) { this.maxSequenceIndex = maxSequenceIndex; return (T) this; } public T mostRecentTimeDecayUpdate(long sequenceIndexOfMostRecentTimeDecayUpdate) { this.sequenceIndexOfMostRecentTimeDecayUpdate = sequenceIndexOfMostRecentTimeDecayUpdate; return (T) this; } public T initialAcceptFraction(double initialAcceptFraction) { this.initialAcceptFraction = initialAcceptFraction; return (T) this; } public T timeDecay(double timeDecay) { this.timeDecay = timeDecay; return (T) this; } } } ================================================ FILE: Java/core/src/main/java/com/amazon/randomcutforest/sampler/AcceptPointState.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.sampler; import lombok.AllArgsConstructor; import lombok.Data; /** * A container class used by {@link CompactSampler}. These sampler * implementations compute weights during {@link IStreamSampler#acceptPoint} to * determine if a new point should be added to the sample. This class retains * the sequence index and computed weight from that method call for use in the * subsequent {@link IStreamSampler#addPoint} call. */ @Data @AllArgsConstructor public class AcceptPointState { private long sequenceIndex; private float weight; } ================================================ FILE: Java/core/src/main/java/com/amazon/randomcutforest/sampler/CompactSampler.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.sampler; import static com.amazon.randomcutforest.CommonUtils.checkArgument; import static com.amazon.randomcutforest.CommonUtils.checkState; import static com.amazon.randomcutforest.RandomCutForest.DEFAULT_STORE_SEQUENCE_INDEXES_ENABLED; import java.util.List; import java.util.Optional; import java.util.stream.Collectors; import java.util.stream.IntStream; import java.util.stream.Stream; /** *

* CompactSampler is an implementation of time-based reservoir sampling. When a * point is submitted to the sampler, the decision to accept the point gives * more weight to newer points compared to older points. The newness of a point * is determined by its sequence index, and larger sequence indexes are * considered newer. *

*

* The sampler algorithm is an example of the general weighted reservoir * sampling algorithm, which works like this: *

*
    *
  1. For each item i choose a random number u(i) uniformly from the interval * (0, 1) and compute the weight function -(1 / c(i)) * log u(i), * for a given coefficient function c(i).
  2. *
  3. For a sample size of N, maintain a list of the N items with the smallest * weights.
  4. *
  5. When a new item is submitted to sampler, compute its weight. If it is * smaller than the largest weight currently contained in the sampler, then the * item with the largest weight is evicted from the sample and replaced by the * new item.
  6. *
*

* The coefficient function used by CompactSampler is: * c(i) = exp(timeDecay * sequenceIndex(i)). *

*/ public class CompactSampler extends AbstractStreamSampler { /** * When creating a {@code CompactSampler}, the user has the option to disable * storing sequence indexes. If storing sequence indexes is disabled, then this * value is used for the sequence index in {@link ISampled} instances returned * by {@link #getSample()}, {@link #getWeightedSample()}, and * {@link #getEvictedPoint()}. */ public static final long SEQUENCE_INDEX_NA = -1L; /** * A max-heap containing the weighted points currently in sample. The head * element is the lowest priority point in the sample (or, equivalently, is the * point with the greatest weight). */ protected final float[] weight; /** * Index values identifying the points in the sample. See * {@link com.amazon.randomcutforest.store.IPointStore}. */ protected final int[] pointIndex; /** * Sequence indexes of the points in the sample. */ protected final long[] sequenceIndex; /** * The number of points currently in the sample. */ protected int size; /** * If true, then the sampler will store sequence indexes along with the sampled * points. */ private final boolean storeSequenceIndexesEnabled; public static Builder builder() { return new Builder<>(); } public static CompactSampler uniformSampler(int sampleSize, long randomSeed, boolean storeSequences) { return new Builder<>().capacity(sampleSize).timeDecay(0).randomSeed(randomSeed) .storeSequenceIndexesEnabled(storeSequences).build(); } protected CompactSampler(Builder builder) { super(builder); checkArgument(builder.initialAcceptFraction > 0, " the admittance fraction cannot be <= 0"); checkArgument(builder.capacity > 0, " sampler capacity cannot be <=0 "); this.storeSequenceIndexesEnabled = builder.storeSequenceIndexesEnabled; this.timeDecay = builder.timeDecay; this.maxSequenceIndex = builder.maxSequenceIndex; this.mostRecentTimeDecayUpdate = builder.sequenceIndexOfMostRecentTimeDecayUpdate; if (builder.weight != null || builder.pointIndex != null || builder.sequenceIndex != null || builder.validateHeap) { checkArgument(builder.weight != null && builder.weight.length == builder.capacity, " incorrect state"); checkArgument(builder.pointIndex != null && builder.pointIndex.length == builder.capacity, " incorrect state"); checkArgument( !builder.storeSequenceIndexesEnabled || builder.sequenceIndex != null && builder.sequenceIndex.length == builder.capacity, " incorrect state"); this.weight = builder.weight; this.pointIndex = builder.pointIndex; this.sequenceIndex = builder.sequenceIndex; size = builder.size; reheap(builder.validateHeap); } else { checkArgument(builder.size == 0, "incorrect state"); size = 0; weight = new float[builder.capacity]; pointIndex = new int[builder.capacity]; if (storeSequenceIndexesEnabled) { this.sequenceIndex = new long[builder.capacity]; } else { this.sequenceIndex = null; } } } @Override public boolean acceptPoint(long sequenceIndex, float samplingWeight) { checkArgument(samplingWeight >= 0, " weight has to be non-negative"); checkState(sequenceIndex >= mostRecentTimeDecayUpdate, "incorrect sequences submitted to sampler"); evictedPoint = null; if (samplingWeight > 0) { float weight = computeWeight(sequenceIndex, samplingWeight); boolean initial = (size < capacity && random.nextDouble() < initialAcceptProbability(size)); if (initial || (weight < this.weight[0])) { acceptPointState = new AcceptPointState(sequenceIndex, weight); if (!initial) { evictMax(); } return true; } } // 0 weight implies ignore sample return false; } /** * evicts the maximum weight point from the sampler. can be used repeatedly to * change the size of the sampler and associated tree */ public void evictMax() { long evictedIndex = storeSequenceIndexesEnabled ? this.sequenceIndex[0] : 0L; evictedPoint = new Weighted<>(this.pointIndex[0], this.weight[0], evictedIndex); --size; this.weight[0] = this.weight[size]; this.pointIndex[0] = this.pointIndex[size]; if (storeSequenceIndexesEnabled) { this.sequenceIndex[0] = this.sequenceIndex[size]; } swapDown(0); } /** * Check to see if the weight at current index is greater than or equal to the * weight at each corresponding child index. If validate is true then throw an * IllegalStateException, otherwise swap the nodes and perform the same check at * the next level. Continue until you reach a level where the parent node's * weight is greater than or equal to both children's weights, or until there * are no more levels to descend. * * @param startIndex The index of node to start with. * @param validate If true, a violation of the heap property will throw an * IllegalStateException. If false, then swap nodes that * violate the heap property. */ private void swapDown(int startIndex, boolean validate) { int current = startIndex; while (2 * current + 1 < size) { int maxIndex = 2 * current + 1; if (2 * current + 2 < size && weight[2 * current + 2] > weight[maxIndex]) { maxIndex = 2 * current + 2; } if (weight[maxIndex] > weight[current]) { if (validate) { throw new IllegalStateException("the heap property is not satisfied at index " + current); } swapWeights(current, maxIndex); current = maxIndex; } else { break; } } } private void swapDown(int startIndex) { swapDown(startIndex, false); } public void reheap(boolean validate) { for (int i = (size + 1) / 2; i >= 0; i--) { swapDown(i, validate); } } public void addPoint(Integer pointIndex, float weight, long sequenceIndex) { checkArgument(acceptPointState == null && size < capacity && pointIndex != null, " operation not permitted"); acceptPointState = new AcceptPointState(sequenceIndex, weight); addPoint(pointIndex); } @Override public void addPoint(Integer pointIndex) { if (pointIndex != null) { checkState(size < capacity, "sampler full"); checkState(acceptPointState != null, "this method should only be called after a successful call to acceptSample(long)"); this.weight[size] = acceptPointState.getWeight(); this.pointIndex[size] = pointIndex; if (storeSequenceIndexesEnabled) { this.sequenceIndex[size] = acceptPointState.getSequenceIndex(); } int current = size++; while (current > 0) { int tmp = (current - 1) / 2; if (this.weight[tmp] < this.weight[current]) { swapWeights(current, tmp); current = tmp; } else break; } acceptPointState = null; } } /** * Return the list of sampled points. If this sampler was created with the * {@code storeSequenceIndexesEnabled} flag set to false, then all sequence * indexes in the list will be set to {@link #SEQUENCE_INDEX_NA}. * * @return the list of sampled points. */ @Override public List> getSample() { return streamSample().collect(Collectors.toList()); } /** * Return the list of sampled points with weights. * * @return the list of sampled points with weights. */ public List> getWeightedSample() { return streamSample().collect(Collectors.toList()); } private Stream> streamSample() { reset_weights(); return IntStream.range(0, size).mapToObj(i -> { long index = sequenceIndex != null ? sequenceIndex[i] : SEQUENCE_INDEX_NA; return new Weighted<>(pointIndex[i], weight[i], index); }); } /** * removes the adjustments to weight in accumulated timeDecay and resets the * updates to timeDecay */ private void reset_weights() { if (accumuluatedTimeDecay == 0) return; // now the weight computation of every element would not see this subtraction // which implies that every existing element should see the offset as addition for (int i = 0; i < size; i++) { weight[i] += accumuluatedTimeDecay; } accumuluatedTimeDecay = 0; } /** * @return the point evicted by the most recent call to {@link #update}, or null * if no point was evicted. */ public Optional> getEvictedPoint() { return Optional.ofNullable(evictedPoint); } /** * @return the number of points currently contained by the sampler. */ @Override public int size() { return size; } public float[] getWeightArray() { return weight; } public int[] getPointIndexArray() { return pointIndex; } public long[] getSequenceIndexArray() { return sequenceIndex; } public boolean isStoreSequenceIndexesEnabled() { return storeSequenceIndexesEnabled; } private void swapWeights(int a, int b) { int tmp = pointIndex[a]; pointIndex[a] = pointIndex[b]; pointIndex[b] = tmp; float tmpDouble = weight[a]; weight[a] = weight[b]; weight[b] = tmpDouble; if (storeSequenceIndexesEnabled) { long tmpLong = sequenceIndex[a]; sequenceIndex[a] = sequenceIndex[b]; sequenceIndex[b] = tmpLong; } } public static class Builder> extends AbstractStreamSampler.Builder { // We use Optional types for optional primitive fields when it doesn't make // sense to use a constant default. private int size = 0; private float[] weight = null; private int[] pointIndex = null; private long[] sequenceIndex = null; private boolean validateHeap = false; private boolean storeSequenceIndexesEnabled = DEFAULT_STORE_SEQUENCE_INDEXES_ENABLED; public T size(int size) { this.size = size; return (T) this; } public T weight(float[] weight) { this.weight = weight; return (T) this; } public T pointIndex(int[] pointIndex) { this.pointIndex = pointIndex; return (T) this; } public T sequenceIndex(long[] sequenceIndex) { this.sequenceIndex = sequenceIndex; return (T) this; } public T storeSequenceIndexesEnabled(boolean storeSequenceIndexesEnabled) { this.storeSequenceIndexesEnabled = storeSequenceIndexesEnabled; return (T) this; } public T validateHeap(boolean validateHeap) { this.validateHeap = validateHeap; return (T) this; } public CompactSampler build() { return new CompactSampler(this); } } } ================================================ FILE: Java/core/src/main/java/com/amazon/randomcutforest/sampler/ISampled.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.sampler; /** * A simple wrapper class representing a point that has been sampled by a * sampler. A sampled point can be added to or removed from a tree. * * @param

The point representation used by this sampled point. */ public interface ISampled

{ /** * Return the sampled value. * * @return the sampled value. */ P getValue(); /** * Return the sequence index of the sampled value. * * @return the sequence index of the sampled value. */ long getSequenceIndex(); } ================================================ FILE: Java/core/src/main/java/com/amazon/randomcutforest/sampler/IStreamSampler.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.sampler; import java.util.List; import java.util.Optional; import com.amazon.randomcutforest.config.IDynamicConfig; /** *

* A sampler that can be updated iteratively from a stream of data points. The * update operation is broken into two steps: an "accept" step and an "add" * step. During the "accept" step, the sampler decides whether to accept a new * point into sample. The decision rule will depend on the sampler * implementation If the sampler is full, accepting a new point requires the * sampler to evict a point currently in the sample. This operation is also part * of the accept step. *

* *

* If the outcome of the accept step is to accept a new point, then the sampler * continues to the second step to add a point to the sample (if the outcome is * not to accept a new point, then this step is not invoked). The reason for * this two-step process is because sampler update steps may be interleaved with * model update steps in * {@link com.amazon.randomcutforest.executor.IUpdatable#update} (see * {@link com.amazon.randomcutforest.executor.SamplerPlusTree#update}, for * example). In particular, if a new point is accepted into the sampler whose * value is equal to an existing point in the sample, then the model may choose * to increment the count on the existing point rather than allocate new storage * for the duplicate point. *

* * @param

The point type. */ public interface IStreamSampler

extends IDynamicConfig { /** * Submit a point to the sampler and return true if the point is accepted into * the sample. By default this method chains together the {@link #acceptPoint} * and {@link #addPoint} methods. If a point was evicted from the sample as a * side effect, then the evicted point will be available in * {@link #getEvictedPoint()} until the next call to {@link #addPoint}. * * @param point The point submitted to the sampler. * @param sequenceIndex the sequence number * @return true if the point is accepted and added to the sample, false if the * point is rejected. */ default boolean update(P point, long sequenceIndex) { if (acceptPoint(sequenceIndex)) { addPoint(point); return true; } return false; } /** * This is the first step in a two-step sample operation. In this step, the * sampler makes a decision about whether to accept a new point into the sample. * If it decides to accept the point, then a new point can be added by calling * {@link #addPoint}. * * If a point needs to be evicted before a new point is added, eviction should * happen in this method. If a point is evicted during a call to * {@code acceptSample}, it will be available by calling * {@link #getEvictedPoint()} until the next time {@code acceptSample} is * called. * * @param sequenceIndex The sequence of the the point being submitted to the * sampler. * @return true if the point should be added to the sample. */ boolean acceptPoint(long sequenceIndex); /** * This is the second step in a two-step sample operation. If the * {@link #acceptPoint} method was called and returned true, then this method * should be called to complete the sampling operation by adding the point to * the sample. If a call to {@code addPoint} is not preceded by a successful * call to {@code acceptPoint}, then it may fail with an * {@code IllegalStateException}. * * @param point The point being added to the sample. */ void addPoint(P point); /** * Return the list of sampled points. * * @return the list of sampled points. */ List> getSample(); /** * @return the point that was evicted from the sample in the most recent call to * {@link #acceptPoint}, or {@code Optional.empty()} if no point was * evicted. */ Optional> getEvictedPoint(); /** * @return true if this sampler contains enough points to support the anomaly * score computation, false otherwise. By default, this will */ default boolean isReady() { return size() >= getCapacity() / 4; } /** * @return true if the sampler has reached it's full capacity, false otherwise. */ default boolean isFull() { return size() >= getCapacity(); } /** * @return the number of points contained by the sampler when full. */ int getCapacity(); /** * @return the number of points currently contained by the sampler. */ int size(); void setMaxSequenceIndex(long maxSequenceIndex); } ================================================ FILE: Java/core/src/main/java/com/amazon/randomcutforest/sampler/Weighted.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.sampler; import lombok.Data; /** * A container class representing a weighted value. This generic type is used in * sampler implementations to store points along with weights that were computed * as part of sampling. * * @param

The representation of the point value. */ @Data public class Weighted

implements ISampled

{ /** * The sampled value. */ private final P value; /** * The weight assigned to this value. */ private final float weight; /** * The sequence index of the sampled value. */ private final long sequenceIndex; } ================================================ FILE: Java/core/src/main/java/com/amazon/randomcutforest/state/ExecutionContext.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.state; import java.io.Serializable; import lombok.Data; @Data public class ExecutionContext implements Serializable { private static final long serialVersionUID = 1L; private boolean parallelExecutionEnabled; private int threadPoolSize; /** * A string to define an "execution mode" that can be used to set multiple * configuration options. This field is not currently in use. */ private String mode; } ================================================ FILE: Java/core/src/main/java/com/amazon/randomcutforest/state/IContextualStateMapper.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.state; public interface IContextualStateMapper { State toState(Model model); Model toModel(State state, ContextState contextState, long seed); default Model toModel(State state, ContextState contextState) { return toModel(state, contextState, 0L); } } ================================================ FILE: Java/core/src/main/java/com/amazon/randomcutforest/state/IStateMapper.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.state; public interface IStateMapper { State toState(Model model); Model toModel(State state, long seed); default Model toModel(State state) { return toModel(state, 0L); } } ================================================ FILE: Java/core/src/main/java/com/amazon/randomcutforest/state/PredictiveRandomCutForestMapper.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.state; import lombok.Getter; import lombok.Setter; import com.amazon.randomcutforest.PredictiveRandomCutForest; import com.amazon.randomcutforest.RandomCutForest; import com.amazon.randomcutforest.config.ForestMode; import com.amazon.randomcutforest.config.TransformMethod; import com.amazon.randomcutforest.preprocessor.Preprocessor; import com.amazon.randomcutforest.state.preprocessor.PreprocessorMapper; import com.amazon.randomcutforest.state.preprocessor.PreprocessorState; @Getter @Setter public class PredictiveRandomCutForestMapper implements IStateMapper { @Override public PredictiveRandomCutForest toModel(PredictiveRandomCutForestState state, long seed) { RandomCutForestMapper randomCutForestMapper = new RandomCutForestMapper(); PreprocessorMapper preprocessorMapper = new PreprocessorMapper(); RandomCutForest forest = randomCutForestMapper.toModel(state.getForestState()); Preprocessor preprocessor = preprocessorMapper.toModel(state.getPreprocessorStates()[0]); ForestMode forestMode = ForestMode.valueOf(state.getForestMode()); TransformMethod transformMethod = TransformMethod.valueOf(state.getTransformMethod()); return new PredictiveRandomCutForest(forestMode, transformMethod, preprocessor, forest); } @Override public PredictiveRandomCutForestState toState(PredictiveRandomCutForest model) { PredictiveRandomCutForestState state = new PredictiveRandomCutForestState(); RandomCutForestMapper randomCutForestMapper = new RandomCutForestMapper(); randomCutForestMapper.setPartialTreeStateEnabled(true); randomCutForestMapper.setSaveTreeStateEnabled(true); randomCutForestMapper.setCompressionEnabled(true); randomCutForestMapper.setSaveCoordinatorStateEnabled(true); randomCutForestMapper.setSaveExecutorContextEnabled(true); state.setForestState(randomCutForestMapper.toState(model.getForest())); PreprocessorMapper preprocessorMapper = new PreprocessorMapper(); state.setPreprocessorStates( new PreprocessorState[] { preprocessorMapper.toState((Preprocessor) model.getPreprocessor()) }); state.setForestMode(model.getForestMode().name()); state.setTransformMethod(model.getTransformMethod().name()); return state; } } ================================================ FILE: Java/core/src/main/java/com/amazon/randomcutforest/state/PredictiveRandomCutForestState.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.state; import static com.amazon.randomcutforest.state.Version.V4_0; import java.io.Serializable; import lombok.Data; import com.amazon.randomcutforest.state.preprocessor.PreprocessorState; @Data public class PredictiveRandomCutForestState implements Serializable { private static final long serialVersionUID = 1L; private String version = V4_0; RandomCutForestState forestState; private PreprocessorState[] preprocessorStates; private String forestMode; private String transformMethod; private long randomSeed; } ================================================ FILE: Java/core/src/main/java/com/amazon/randomcutforest/state/RandomCutForestMapper.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.state; import static com.amazon.randomcutforest.CommonUtils.checkArgument; import static com.amazon.randomcutforest.CommonUtils.checkNotNull; import static com.amazon.randomcutforest.CommonUtils.validateInternalState; import java.util.ArrayList; import java.util.List; import java.util.Random; import java.util.stream.Collectors; import lombok.Getter; import lombok.Setter; import com.amazon.randomcutforest.ComponentList; import com.amazon.randomcutforest.IComponentModel; import com.amazon.randomcutforest.RandomCutForest; import com.amazon.randomcutforest.config.Config; import com.amazon.randomcutforest.config.Precision; import com.amazon.randomcutforest.executor.PointStoreCoordinator; import com.amazon.randomcutforest.executor.SamplerPlusTree; import com.amazon.randomcutforest.sampler.CompactSampler; import com.amazon.randomcutforest.sampler.IStreamSampler; import com.amazon.randomcutforest.state.sampler.CompactSamplerMapper; import com.amazon.randomcutforest.state.sampler.CompactSamplerState; import com.amazon.randomcutforest.state.store.PointStoreMapper; import com.amazon.randomcutforest.state.store.PointStoreState; import com.amazon.randomcutforest.state.tree.CompactRandomCutTreeContext; import com.amazon.randomcutforest.state.tree.CompactRandomCutTreeState; import com.amazon.randomcutforest.state.tree.RandomCutTreeMapper; import com.amazon.randomcutforest.store.IPointStore; import com.amazon.randomcutforest.store.PointStore; import com.amazon.randomcutforest.tree.ITree; import com.amazon.randomcutforest.tree.RandomCutTree; /** * A utility class for creating a {@link RandomCutForestState} instance from a * {@link RandomCutForest} instance and vice versa. */ @Getter @Setter public class RandomCutForestMapper implements IContextualStateMapper { /** * A flag indicating whether the structure of the trees in the forest should be * included in the state object. If true, then data describing the bounding * boxes and cuts defining each tree will be written to the * {@link RandomCutForestState} object produced by the mapper. Tree state is not * saved by default. */ private boolean saveTreeStateEnabled = false; /** * A flag indicating whether the point store should be included in the * {@link RandomCutForestState} object produced by the mapper. This is saved by * default for compact trees */ private boolean saveCoordinatorStateEnabled = true; /** * A flag indicating whether the samplers should be included in the * {@link RandomCutForestState} object produced by the mapper. This is saved by * default for all trees. */ private boolean saveSamplerStateEnabled = true; /** * A flag indicating whether the executor context should be included in the * {@link RandomCutForestState} object produced by the mapper. Executor context * is not saved by default. */ private boolean saveExecutorContextEnabled = false; /** * If true, then the arrays are compressed via simple data dependent scheme */ private boolean compressionEnabled = true; /** * if true would require that the samplers populate the trees before the trees * can be used gain. That would correspond to extra time, at the benefit of a * smaller serialization. */ private boolean partialTreeStateEnabled = false; /** * Create a {@link RandomCutForestState} object representing the state of the * given forest. If the forest is compact and the {@code saveTreeState} flag is * set to true, then structure of the trees in the forest will be included in * the state object. If the flag is set to false, then the state object will * only contain the sampler data for each tree. If the * {@code saveExecutorContext} is true, then the executor context will be * included in the state object. * * @param forest A Random Cut Forest whose state we want to capture. * @return a {@link RandomCutForestState} object representing the state of the * given forest. * @throws IllegalArgumentException if the {@code saveTreeState} flag is true * and the forest is not compact. */ @Override public RandomCutForestState toState(RandomCutForest forest) { RandomCutForestState state = new RandomCutForestState(); state.setNumberOfTrees(forest.getNumberOfTrees()); state.setDimensions(forest.getDimensions()); state.setTimeDecay(forest.getTimeDecay()); state.setSampleSize(forest.getSampleSize()); state.setShingleSize(forest.getShingleSize()); state.setCenterOfMassEnabled(forest.isCenterOfMassEnabled()); state.setOutputAfter(forest.getOutputAfter()); state.setStoreSequenceIndexesEnabled(forest.isStoreSequenceIndexesEnabled()); state.setTotalUpdates(forest.getTotalUpdates()); state.setCompact(true); state.setInternalShinglingEnabled(forest.isInternalShinglingEnabled()); state.setBoundingBoxCacheFraction(forest.getBoundingBoxCacheFraction()); state.setSaveSamplerStateEnabled(saveSamplerStateEnabled); state.setSaveTreeStateEnabled(saveTreeStateEnabled); state.setSaveCoordinatorStateEnabled(saveCoordinatorStateEnabled); state.setPrecision(forest.getPrecision().name()); state.setCompressed(compressionEnabled); state.setPartialTreeState(partialTreeStateEnabled); state.setCurrentlySampling(forest.isCurrentlySampling()); if (saveExecutorContextEnabled) { ExecutionContext executionContext = new ExecutionContext(); executionContext.setParallelExecutionEnabled(forest.isParallelExecutionEnabled()); executionContext.setThreadPoolSize(forest.getThreadPoolSize()); state.setExecutionContext(executionContext); } if (saveCoordinatorStateEnabled) { PointStoreCoordinator pointStoreCoordinator = (PointStoreCoordinator) forest.getUpdateCoordinator(); PointStoreMapper mapper = new PointStoreMapper(); mapper.setCompressionEnabled(compressionEnabled); mapper.setNumberOfTrees(forest.getNumberOfTrees()); PointStoreState pointStoreState = mapper.toState((PointStore) pointStoreCoordinator.getStore()); state.setPointStoreState(pointStoreState); } List samplerStates = null; if (saveSamplerStateEnabled) { samplerStates = new ArrayList<>(); } List> trees = null; if (saveTreeStateEnabled) { trees = new ArrayList<>(); } CompactSamplerMapper samplerMapper = new CompactSamplerMapper(); samplerMapper.setCompressionEnabled(compressionEnabled); for (IComponentModel component : forest.getComponents()) { SamplerPlusTree samplerPlusTree = (SamplerPlusTree) component; CompactSampler sampler = (CompactSampler) samplerPlusTree.getSampler(); if (samplerStates != null) { samplerStates.add(samplerMapper.toState(sampler)); } if (trees != null) { trees.add(samplerPlusTree.getTree()); } } state.setCompactSamplerStates(samplerStates); if (trees != null) { RandomCutTreeMapper treeMapper = new RandomCutTreeMapper(); List treeStates = trees.stream().map(t -> treeMapper.toState((RandomCutTree) t)) .collect(Collectors.toList()); state.setCompactRandomCutTreeStates(treeStates); } return state; } /** * Create a {@link RandomCutForest} instance from a * {@link RandomCutForestState}. If the state contains tree states, then trees * will be constructed from the tree state objects. Otherwise, empty trees are * created and populated from the sampler data. The resulting forest should be * equal in distribution to the forest that the state object was created from. * * @param state A Random Cut Forest state object. * @param executionContext An executor context that will be used to initialize * new executors in the Random Cut Forest. If this * argument is null, then the mapper will look for an * executor context in the state object. * @param seed A random seed. * @return A Random Cut Forest corresponding to the state object. * @throws NullPointerException if both the {@code executorContext} method * argument and the executor context field in the * state object are null. */ public RandomCutForest toModel(RandomCutForestState state, ExecutionContext executionContext, long seed) { ExecutionContext ec; if (executionContext != null) { ec = executionContext; } else { checkNotNull(state.getExecutionContext(), "The executor context in the state object is null, an executor context must be passed explicitly to toModel()"); ec = state.getExecutionContext(); } RandomCutForest.Builder builder = RandomCutForest.builder().numberOfTrees(state.getNumberOfTrees()) .dimensions(state.getDimensions()).timeDecay(state.getTimeDecay()).sampleSize(state.getSampleSize()) .centerOfMassEnabled(state.isCenterOfMassEnabled()).outputAfter(state.getOutputAfter()) .parallelExecutionEnabled(ec.isParallelExecutionEnabled()).threadPoolSize(ec.getThreadPoolSize()) .storeSequenceIndexesEnabled(state.isStoreSequenceIndexesEnabled()).shingleSize(state.getShingleSize()) .boundingBoxCacheFraction(state.getBoundingBoxCacheFraction()) .internalShinglingEnabled(state.isInternalShinglingEnabled()).randomSeed(seed); validateInternalState(Precision.valueOf(state.getPrecision()) == Precision.FLOAT_32, " use randomcutforest-serialization package"); Random random = builder.getRandom(); ComponentList components = new ComponentList<>(); CompactRandomCutTreeContext context = new CompactRandomCutTreeContext(); IPointStore pointStore = new PointStoreMapper().toModel(state.getPointStoreState()); PointStoreCoordinator coordinator = new PointStoreCoordinator<>(pointStore); coordinator.setTotalUpdates(state.getTotalUpdates()); context.setPointStore(pointStore); context.setMaxSize(state.getSampleSize()); RandomCutTreeMapper treeMapper = new RandomCutTreeMapper(); List treeStates = state.isSaveTreeStateEnabled() ? state.getCompactRandomCutTreeStates() : null; CompactSamplerMapper samplerMapper = new CompactSamplerMapper(); checkArgument(state.isSaveSamplerStateEnabled(), "samplers are not saved; no forest to reconstruct"); List samplerStates = state.getCompactSamplerStates(); for (int i = 0; i < state.getNumberOfTrees(); i++) { IStreamSampler sampler = samplerMapper.toModel(samplerStates.get(i), random.nextLong()); ITree tree; if (treeStates != null) { tree = treeMapper.toModel(treeStates.get(i), context, random.nextLong()); sampler.getSample().forEach(s -> tree.addPointToPartialTree(s.getValue(), s.getSequenceIndex())); tree.setConfig(Config.BOUNDING_BOX_CACHE_FRACTION, treeStates.get(i).getBoundingBoxCacheFraction()); tree.validateAndReconstruct(); } else { // using boundingBoxCache for the new tree tree = new RandomCutTree.Builder().capacity(state.getSampleSize()).randomSeed(random.nextLong()) .pointStoreView(pointStore).boundingBoxCacheFraction(state.getBoundingBoxCacheFraction()) .centerOfMassEnabled(state.isCenterOfMassEnabled()) .storeSequenceIndexesEnabled(state.isStoreSequenceIndexesEnabled()).build(); sampler.getSample().forEach(s -> tree.addPoint(s.getValue(), s.getSequenceIndex())); } components.add(new SamplerPlusTree<>(sampler, tree)); } RandomCutForest forest = new RandomCutForest(builder, coordinator, components, random); if (!state.isCurrentlySampling()) { forest.pauseSampling(); } return forest; } /** * Create a {@link RandomCutForest} instance from a {@link RandomCutForestState} * using the executor context in the state object. See * {@link #toModel(RandomCutForestState, ExecutionContext, long)}. * * @param state A Random Cut Forest state object. * @param seed A random seed. * @return A Random Cut Forest corresponding to the state object. * @throws NullPointerException if the executor context field in the state * object are null. */ public RandomCutForest toModel(RandomCutForestState state, long seed) { return toModel(state, null, seed); } /** * Create a {@link RandomCutForest} instance from a {@link RandomCutForestState} * using the executor context in the state object. See * {@link #toModel(RandomCutForestState, ExecutionContext, long)}. * * @param state A Random Cut Forest state object. * @return A Random Cut Forest corresponding to the state object. * @throws NullPointerException if the executor context field in the state * object are null. */ public RandomCutForest toModel(RandomCutForestState state) { return toModel(state, null); } } ================================================ FILE: Java/core/src/main/java/com/amazon/randomcutforest/state/RandomCutForestState.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.state; import static com.amazon.randomcutforest.state.Version.V4_0; import java.io.Serializable; import java.util.List; import lombok.Data; import com.amazon.randomcutforest.state.sampler.CompactSamplerState; import com.amazon.randomcutforest.state.store.PointStoreState; import com.amazon.randomcutforest.state.tree.CompactRandomCutTreeState; /** * A class that encapsulates most of the data used in a RandomCutForest such * that the forest can be serialized and deserialized. */ @Data public class RandomCutForestState implements Serializable { private static final long serialVersionUID = 1L; private String version = V4_0; private long totalUpdates; private double timeDecay; private int numberOfTrees; private int sampleSize; private int shingleSize; private int dimensions; private int outputAfter; private boolean compressed; private boolean partialTreeState; private double boundingBoxCacheFraction; private boolean storeSequenceIndexesEnabled; private boolean compact; private boolean internalShinglingEnabled; private boolean centerOfMassEnabled; private String precision; private PointStoreState pointStoreState; private List compactSamplerStates; private List compactRandomCutTreeStates; private ExecutionContext executionContext; // Mapper options private boolean saveTreeStateEnabled; private boolean saveSamplerStateEnabled; private boolean saveCoordinatorStateEnabled; private boolean currentlySampling; } ================================================ FILE: Java/core/src/main/java/com/amazon/randomcutforest/state/Version.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.state; public class Version { public static final String V2_0 = "2.0"; public static final String V2_1 = "2.1"; public static final String V3_0 = "3.0"; public static final String V3_5 = "3.5"; public static final String V3_7 = "3.7"; public static final String V3_8 = "3.8"; public static final String V4_0 = "4.0"; public static final String V4_1 = "4.1"; } ================================================ FILE: Java/core/src/main/java/com/amazon/randomcutforest/state/preprocessor/PreprocessorMapper.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.state.preprocessor; import static com.amazon.randomcutforest.CommonUtils.toDoubleArray; import static com.amazon.randomcutforest.CommonUtils.toFloatArray; import static com.amazon.randomcutforest.state.statistics.DeviationMapper.getDeviations; import static com.amazon.randomcutforest.state.statistics.DeviationMapper.getStates; import lombok.Getter; import lombok.Setter; import com.amazon.randomcutforest.config.ForestMode; import com.amazon.randomcutforest.config.ImputationMethod; import com.amazon.randomcutforest.config.TransformMethod; import com.amazon.randomcutforest.preprocessor.Preprocessor; import com.amazon.randomcutforest.state.IStateMapper; import com.amazon.randomcutforest.state.statistics.DeviationMapper; import com.amazon.randomcutforest.statistics.Deviation; @Getter @Setter public class PreprocessorMapper implements IStateMapper { @Override public Preprocessor toModel(PreprocessorState state, long seed) { DeviationMapper deviationMapper = new DeviationMapper(); Deviation[] deviations = getDeviations(state.getDeviationStates(), deviationMapper); Deviation[] timeStampDeviations = getDeviations(state.getTimeStampDeviationStates(), deviationMapper); Deviation[] dataQuality = getDeviations(state.getDataQualityStates(), deviationMapper); Preprocessor.Builder preprocessorBuilder = new Preprocessor.Builder<>() .forestMode(ForestMode.valueOf(state.getForestMode())).shingleSize(state.getShingleSize()) .dimensions(state.getDimensions()).normalizeTime(state.isNormalizeTime()) .imputationMethod(ImputationMethod.valueOf(state.getImputationMethod())) .fillValues(state.getDefaultFill()).inputLength(state.getInputLength()).weights(state.getWeights()) .transformMethod(TransformMethod.valueOf(state.getTransformMethod())) .startNormalization(state.getStartNormalization()).useImputedFraction(state.getUseImputedFraction()) .timeDeviations(timeStampDeviations).deviations(deviations).dataQuality(dataQuality) .transformDecay(state.getTimeDecay()); Preprocessor preprocessor = preprocessorBuilder.build(); preprocessor.setInitialValues(state.getInitialValues()); preprocessor.setInitialTimeStamps(state.getInitialTimeStamps()); preprocessor.setClipFactor(state.getClipFactor()); preprocessor.setValuesSeen(state.getValuesSeen()); preprocessor.setInternalTimeStamp(state.getInternalTimeStamp()); preprocessor.setLastShingledInput(state.getLastShingledInput()); preprocessor.setLastShingledPoint(toFloatArray(state.getLastShingledPoint())); preprocessor.setPreviousTimeStamps(state.getPreviousTimeStamps()); preprocessor.setNormalizeTime(state.isNormalizeTime()); preprocessor.setFastForward(state.isFastForward()); preprocessor.setNumberOfImputed(state.getNumberOfImputed()); return preprocessor; } @Override public PreprocessorState toState(Preprocessor model) { PreprocessorState state = new PreprocessorState(); state.setShingleSize(model.getShingleSize()); state.setDimensions(model.getDimension()); state.setInputLength(model.getInputLength()); state.setClipFactor(model.getClipFactor()); state.setDefaultFill(model.getDefaultFill()); state.setImputationMethod(model.getImputationMethod().name()); state.setTransformMethod(model.getTransformMethod().name()); state.setWeights(model.getWeights()); state.setForestMode(model.getMode().name()); state.setInitialTimeStamps(model.getInitialTimeStamps()); state.setInitialValues(model.getInitialValues()); state.setUseImputedFraction(model.getUseImputedFraction()); state.setNormalizeTime(model.isNormalizeTime()); state.setStartNormalization(model.getStartNormalization()); state.setStopNormalization(model.getStopNormalization()); state.setPreviousTimeStamps(model.getPreviousTimeStamps()); state.setLastShingledInput(model.getLastShingledInput()); state.setLastShingledPoint(toDoubleArray(model.getLastShingledPoint())); state.setValuesSeen(model.getValuesSeen()); state.setInternalTimeStamp(model.getInternalTimeStamp()); DeviationMapper deviationMapper = new DeviationMapper(); state.setTimeDecay(model.getTransformDecay()); state.setDeviationStates(getStates(model.getDeviationList(), deviationMapper)); state.setTimeStampDeviationStates(getStates(model.getTimeStampDeviations(), deviationMapper)); state.setDataQualityStates(getStates(model.getDataQuality(), deviationMapper)); state.setFastForward(model.isFastForward()); state.setNumberOfImputed(model.getNumberOfImputed()); return state; } } ================================================ FILE: Java/core/src/main/java/com/amazon/randomcutforest/state/preprocessor/PreprocessorState.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.state.preprocessor; import static com.amazon.randomcutforest.state.Version.V4_1; import java.io.Serializable; import lombok.Data; import com.amazon.randomcutforest.state.statistics.DeviationState; @Data public class PreprocessorState implements Serializable { private static final long serialVersionUID = 1L; private String version = V4_1; private double useImputedFraction; private String imputationMethod; private String forestMode; private String transformMethod; private double[] weights; private double[] lastShingledPoint; private double[] lastShingledInput; private double[] defaultFill; private double timeDecay; private int startNormalization; private int stopNormalization; private int shingleSize; private int dimensions; private int inputLength; private double clipFactor; private boolean normalizeTime; private long[] initialTimeStamps; private double[][] initialValues; private long[] previousTimeStamps; private int valuesSeen; private int internalTimeStamp; @Deprecated private DeviationState dataQualityState; @Deprecated private DeviationState timeStampDeviationState; private DeviationState[] deviationStates; private DeviationState[] dataQualityStates; private DeviationState[] timeStampDeviationStates; private boolean fastForward; private int numberOfImputed; } ================================================ FILE: Java/core/src/main/java/com/amazon/randomcutforest/state/returntypes/DiVectorMapper.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.state.returntypes; import java.util.Arrays; import lombok.Getter; import lombok.Setter; import com.amazon.randomcutforest.returntypes.DiVector; import com.amazon.randomcutforest.state.IStateMapper; @Getter @Setter public class DiVectorMapper implements IStateMapper { @Override public DiVector toModel(DiVectorState state, long seed) { if (state.getHigh() == null || state.getLow() == null) { return null; } else { return new DiVector(state.getHigh(), state.getLow()); } } @Override public DiVectorState toState(DiVector model) { DiVectorState state = new DiVectorState(); if (model != null) { state.setHigh(Arrays.copyOf(model.high, model.high.length)); state.setLow(Arrays.copyOf(model.low, model.low.length)); } return state; } } ================================================ FILE: Java/core/src/main/java/com/amazon/randomcutforest/state/returntypes/DiVectorState.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.state.returntypes; import java.io.Serializable; import lombok.Getter; import lombok.Setter; import com.amazon.randomcutforest.anomalydetection.AnomalyAttributionVisitor; /** * A DiVector is used when we want to track a quantity in both the positive and * negative directions for each dimension in a manifold. For example, when using * a {@link AnomalyAttributionVisitor} to compute the attribution of the anomaly * score to dimension of the input point, we want to know if the anomaly score * attributed to the ith coordinate of the input point is due to that coordinate * being unusually high or unusually low. * * The DiVectorState creates a POJO to be used in serialization. */ @Getter @Setter public class DiVectorState implements Serializable { private static final long serialVersionUID = 1L; double[] high; double[] low; } ================================================ FILE: Java/core/src/main/java/com/amazon/randomcutforest/state/sampler/CompactSamplerMapper.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.state.sampler; import java.util.Arrays; import lombok.Getter; import lombok.Setter; import com.amazon.randomcutforest.sampler.CompactSampler; import com.amazon.randomcutforest.state.IStateMapper; import com.amazon.randomcutforest.util.ArrayPacking; @Getter @Setter public class CompactSamplerMapper implements IStateMapper { /** * This flag is passed to the constructor for {@code CompactSampler} when a new * sampler is constructed in {@link #toModel}. If true, then the sampler will * validate that the weight array in a {@code CompactSamplerState} instance * satisfies the heap property. The heap property is not validated by default. */ private boolean validateHeapEnabled = false; /** * used to compress data, can be set to false for debug */ private boolean compressionEnabled = true; @Override public CompactSampler toModel(CompactSamplerState state, long seed) { float[] weight = new float[state.getCapacity()]; int[] pointIndex = new int[state.getCapacity()]; long[] sequenceIndex; int size = state.getSize(); System.arraycopy(state.getWeight(), 0, weight, 0, size); System.arraycopy(ArrayPacking.unpackInts(state.getPointIndex(), state.isCompressed()), 0, pointIndex, 0, size); if (state.isStoreSequenceIndicesEnabled()) { sequenceIndex = new long[state.getCapacity()]; System.arraycopy(state.getSequenceIndex(), 0, sequenceIndex, 0, size); } else { sequenceIndex = null; } return new CompactSampler.Builder<>().capacity(state.getCapacity()).timeDecay(state.getTimeDecay()) .randomSeed(state.getRandomSeed()).storeSequenceIndexesEnabled(state.isStoreSequenceIndicesEnabled()) .weight(weight).pointIndex(pointIndex).sequenceIndex(sequenceIndex).validateHeap(validateHeapEnabled) .initialAcceptFraction(state.getInitialAcceptFraction()) .mostRecentTimeDecayUpdate(state.getSequenceIndexOfMostRecentTimeDecayUpdate()) .maxSequenceIndex(state.getMaxSequenceIndex()).size(state.getSize()).build(); } @Override public CompactSamplerState toState(CompactSampler model) { CompactSamplerState state = new CompactSamplerState(); state.setSize(model.size()); state.setCompressed(compressionEnabled); state.setCapacity(model.getCapacity()); state.setTimeDecay(model.getTimeDecay()); state.setSequenceIndexOfMostRecentTimeDecayUpdate(model.getMostRecentTimeDecayUpdate()); state.setMaxSequenceIndex(model.getMaxSequenceIndex()); state.setInitialAcceptFraction(model.getInitialAcceptFraction()); state.setStoreSequenceIndicesEnabled(model.isStoreSequenceIndexesEnabled()); state.setRandomSeed(model.getRandomSeed()); state.setWeight(Arrays.copyOf(model.getWeightArray(), model.size())); state.setPointIndex(ArrayPacking.pack(model.getPointIndexArray(), model.size(), state.isCompressed())); if (model.isStoreSequenceIndexesEnabled()) { state.setSequenceIndex(Arrays.copyOf(model.getSequenceIndexArray(), model.size())); } return state; } } ================================================ FILE: Java/core/src/main/java/com/amazon/randomcutforest/state/sampler/CompactSamplerState.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.state.sampler; import static com.amazon.randomcutforest.state.Version.V2_0; import java.io.Serializable; import lombok.Data; /** * A data object representing the state of a * {@link com.amazon.randomcutforest.sampler.CompactSampler}. */ @Data public class CompactSamplerState implements Serializable { private static final long serialVersionUID = 1L; /** * a version string for extensibility */ private String version = V2_0; /** * An array of sampler weights. */ private float[] weight; /** * An array of index values identifying the points in the sample. These indexes * will correspond to a {@link com.amazon.randomcutforest.store.PointStore}. */ private int[] pointIndex; /** * boolean for deciding to store sequence indices */ private boolean storeSequenceIndicesEnabled; /** * The sequence indexes of points in the sample. */ private long[] sequenceIndex; /** * The number of points in the sample. */ private int size; /** * The maximum number of points that the sampler can contain. */ private int capacity; /** * The behavior of the sampler at initial sampling */ private double initialAcceptFraction; /** * The time-decay parameter for this sampler */ private double timeDecay; /** * Last update of timeDecay */ private long sequenceIndexOfMostRecentTimeDecayUpdate; /** * maximum timestamp seen in update/computeWeight */ private long maxSequenceIndex; /** * boolean indicating if the compression is enabled */ private boolean compressed; /** * saving the random state, if desired */ private long randomSeed; } ================================================ FILE: Java/core/src/main/java/com/amazon/randomcutforest/state/statistics/DeviationMapper.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.state.statistics; import lombok.Getter; import lombok.Setter; import com.amazon.randomcutforest.state.IStateMapper; import com.amazon.randomcutforest.statistics.Deviation; @Getter @Setter public class DeviationMapper implements IStateMapper { @Override public Deviation toModel(DeviationState state, long seed) { return new Deviation(state.getDiscount(), state.getWeight(), state.getSumSquared(), state.getSum(), state.getCount()); } @Override public DeviationState toState(Deviation model) { DeviationState state = new DeviationState(); state.setDiscount(model.getDiscount()); state.setSum(model.getSum()); state.setSumSquared(model.getSumSquared()); state.setWeight(model.getWeight()); state.setCount(model.getCount()); return state; } public static DeviationState[] getStates(Deviation[] list, DeviationMapper mapper) { DeviationState[] states = null; if (list != null) { states = new DeviationState[list.length]; for (int i = 0; i < list.length; i++) { states[i] = mapper.toState(list[i]); } } return states; } public static Deviation[] getDeviations(DeviationState[] states, DeviationMapper mapper) { Deviation[] deviations = null; if (states != null) { deviations = new Deviation[states.length]; for (int i = 0; i < states.length; i++) { deviations[i] = mapper.toModel(states[i]); } } return deviations; } } ================================================ FILE: Java/core/src/main/java/com/amazon/randomcutforest/state/statistics/DeviationState.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.state.statistics; import java.io.Serializable; import lombok.Data; @Data public class DeviationState implements Serializable { private static final long serialVersionUID = 1L; private double discount; private double weight; private double sumSquared; private double sum; private int count; } ================================================ FILE: Java/core/src/main/java/com/amazon/randomcutforest/state/store/NodeStoreState.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.state.store; import static com.amazon.randomcutforest.state.Version.V2_0; import java.io.Serializable; import lombok.Data; @Data public class NodeStoreState implements Serializable { private static final long serialVersionUID = 1L; private String version = V2_0; private int capacity; private boolean compressed; private int[] cutDimension; private byte[] cutValueData; private String precision; private int root; private boolean canonicalAndNotALeaf; private int size; private int[] leftIndex; private int[] rightIndex; private int[] nodeFreeIndexes; private int nodeFreeIndexPointer; private int[] leafFreeIndexes; private int leafFreeIndexPointer; private boolean partialTreeStateEnabled; private int[] leafMass; private int[] leafPointIndex; } ================================================ FILE: Java/core/src/main/java/com/amazon/randomcutforest/state/store/PointStoreMapper.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.state.store; import static com.amazon.randomcutforest.CommonUtils.checkArgument; import static com.amazon.randomcutforest.CommonUtils.checkNotNull; import static com.amazon.randomcutforest.CommonUtils.toDoubleArray; import java.util.Arrays; import lombok.Getter; import lombok.Setter; import com.amazon.randomcutforest.config.Precision; import com.amazon.randomcutforest.state.IStateMapper; import com.amazon.randomcutforest.state.Version; import com.amazon.randomcutforest.store.PointStore; import com.amazon.randomcutforest.store.PointStoreLarge; import com.amazon.randomcutforest.util.ArrayPacking; @Getter @Setter public class PointStoreMapper implements IStateMapper { /** * If true, then the arrays are compressed via simple data dependent scheme */ private boolean compressionEnabled = true; private int numberOfTrees = 255; // byte encoding as default @Override public PointStore toModel(PointStoreState state, long seed) { checkNotNull(state.getRefCount(), "refCount must not be null"); checkNotNull(state.getPointData(), "pointData must not be null"); checkArgument(Precision.valueOf(state.getPrecision()) == Precision.FLOAT_32, "precision must be " + Precision.FLOAT_32); int indexCapacity = state.getIndexCapacity(); int dimensions = state.getDimensions(); float[] store = ArrayPacking.unpackFloats(state.getPointData(), state.getCurrentStoreCapacity() * dimensions); int startOfFreeSegment = state.getStartOfFreeSegment(); int[] refCount = ArrayPacking.unpackInts(state.getRefCount(), indexCapacity, state.isCompressed()); int[] locationList = new int[indexCapacity]; Arrays.fill(locationList, PointStore.INFEASIBLE_LOCN); int[] tempList = ArrayPacking.unpackInts(state.getLocationList(), state.isCompressed()); if (!state.getVersion().equals(Version.V3_0)) { int shingleSize = state.getShingleSize(); int baseDimension = dimensions / shingleSize; for (int i = 0; i < tempList.length; i++) { locationList[i] = tempList[i] / baseDimension; } } else { int[] duplicateRefs = null; if (state.getDuplicateRefs() != null) { duplicateRefs = ArrayPacking.unpackInts(state.getDuplicateRefs(), state.isCompressed()); checkArgument(duplicateRefs.length % 2 == 0, " corrupt duplicates"); for (int i = 0; i < duplicateRefs.length; i += 2) { refCount[duplicateRefs[i]] += duplicateRefs[i + 1]; } } int nextLocation = 0; for (int i = 0; i < indexCapacity; i++) { if (refCount[i] > 0) { locationList[i] = tempList[nextLocation]; ++nextLocation; } else { locationList[i] = PointStoreLarge.INFEASIBLE_LOCN; } } } return PointStore.builder().internalRotationEnabled(state.isRotationEnabled()) .internalShinglingEnabled(state.isInternalShinglingEnabled()).indexCapacity(indexCapacity) .currentStoreCapacity(state.getCurrentStoreCapacity()).capacity(state.getCapacity()) .shingleSize(state.getShingleSize()).dimensions(state.getDimensions()).locationList(locationList) .nextTimeStamp(state.getLastTimeStamp()).startOfFreeSegment(startOfFreeSegment).refCount(refCount) .knownShingle(state.getInternalShingle()).store(store).build(); } @Override public PointStoreState toState(PointStore model) { model.compact(); PointStoreState state = new PointStoreState(); state.setVersion(Version.V3_0); state.setCompressed(compressionEnabled); state.setDimensions(model.getDimensions()); state.setCapacity(model.getCapacity()); state.setShingleSize(model.getShingleSize()); state.setDirectLocationMap(false); state.setInternalShinglingEnabled(model.isInternalShinglingEnabled()); state.setLastTimeStamp(model.getNextSequenceIndex()); if (model.isInternalShinglingEnabled()) { state.setInternalShingle(toDoubleArray(model.getInternalShingle())); state.setRotationEnabled(model.isInternalRotationEnabled()); } state.setDynamicResizingEnabled(true); state.setCurrentStoreCapacity(model.getCurrentStoreCapacity()); state.setIndexCapacity(model.getIndexCapacity()); state.setStartOfFreeSegment(model.getStartOfFreeSegment()); state.setPrecision(Precision.FLOAT_32.name()); int[] refcount = model.getRefCount(); int[] tempList = model.getLocationList(); int[] locationList = new int[model.getIndexCapacity()]; int[] duplicateRefs = new int[2 * model.getIndexCapacity()]; int size = 0; int duplicateSize = 0; for (int i = 0; i < refcount.length; i++) { if (refcount[i] > 0) { locationList[size] = tempList[i]; ++size; if (refcount[i] > numberOfTrees) { duplicateRefs[duplicateSize] = i; duplicateRefs[duplicateSize + 1] = refcount[i] - numberOfTrees; refcount[i] = numberOfTrees; duplicateSize += 2; } } } state.setRefCount(ArrayPacking.pack(refcount, refcount.length, state.isCompressed())); state.setDuplicateRefs(ArrayPacking.pack(duplicateRefs, duplicateSize, state.isCompressed())); state.setLocationList(ArrayPacking.pack(locationList, size, state.isCompressed())); state.setPointData(ArrayPacking.pack(model.getStore(), model.getStartOfFreeSegment())); return state; } } ================================================ FILE: Java/core/src/main/java/com/amazon/randomcutforest/state/store/PointStoreState.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.state.store; import static com.amazon.randomcutforest.state.Version.V2_0; import java.io.Serializable; import lombok.Data; /** * A class for storing the state of a * {@link com.amazon.randomcutforest.store.PointStore}. Depending on which kind * of point store was serialized, one of the fields {@code doubleData} or * {@code floatData} will be null. */ @Data public class PointStoreState implements Serializable { private static final long serialVersionUID = 1L; /** * version string for future extensibility */ private String version = V2_0; /** * size of each point saved */ private int dimensions; /** * capacity of the store */ private int capacity; /** * shingle size of the points */ private int shingleSize; /** * precision of points in the point store state */ private String precision; /** * location beyond which the store has no useful information */ private int startOfFreeSegment; /** * Point data converted to raw bytes. */ private byte[] pointData; /** * use compressed representatiomn for arrays */ private boolean compressed; /** * An array of reference counts for each stored point. */ private int[] refCount; /** * is direct mapping enabled */ private boolean directLocationMap; /** * location data for indirect maps */ private int[] locationList; /** * reverse location data to be usable in future */ private int[] reverseLocationList; /** * flag to avoid null issues in the future */ private boolean reverseAvailable; /** * boolean indicating use of overlapping shingles; need not be used in certain * cases */ private boolean internalShinglingEnabled; /** * internal shingle */ private double[] internalShingle; /** * last timestamp */ private long lastTimeStamp; /** * rotation for internal shingles */ private boolean rotationEnabled; /** * dynamic resizing */ private boolean dynamicResizingEnabled; /** * current store capacity */ private int currentStoreCapacity; /** * current index capacity */ private int indexCapacity; /** * reduces the effect of repeated points; used in version 3.0 */ private int[] duplicateRefs; } ================================================ FILE: Java/core/src/main/java/com/amazon/randomcutforest/state/tree/AbstractNodeStoreMapper.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.state.tree; import static com.amazon.randomcutforest.tree.AbstractNodeStore.Null; import java.util.concurrent.ArrayBlockingQueue; import lombok.Getter; import lombok.Setter; import com.amazon.randomcutforest.config.Precision; import com.amazon.randomcutforest.state.IContextualStateMapper; import com.amazon.randomcutforest.state.Version; import com.amazon.randomcutforest.state.store.NodeStoreState; import com.amazon.randomcutforest.tree.AbstractNodeStore; import com.amazon.randomcutforest.util.ArrayPacking; @Getter @Setter public class AbstractNodeStoreMapper implements IContextualStateMapper { private int root; @Override public AbstractNodeStore toModel(NodeStoreState state, CompactRandomCutTreeContext compactRandomCutTreeContext, long seed) { int capacity = state.getCapacity(); int[] cutDimension = null; int[] leftIndex = null; int[] rightIndex = null; float[] cutValue = null; if (root != Null && root < capacity) { cutDimension = ArrayPacking.unpackInts(state.getCutDimension(), capacity, state.isCompressed()); cutValue = ArrayPacking.unpackFloats(state.getCutValueData(), capacity); leftIndex = ArrayPacking.unpackInts(state.getLeftIndex(), capacity, state.isCompressed()); rightIndex = ArrayPacking.unpackInts(state.getRightIndex(), capacity, state.isCompressed()); reverseBits(state.getSize(), leftIndex, rightIndex, capacity); } // note boundingBoxCache is not set deliberately return AbstractNodeStore.builder().capacity(capacity).useRoot(root).leftIndex(leftIndex).rightIndex(rightIndex) .cutDimension(cutDimension).cutValues(cutValue).dimension(compactRandomCutTreeContext.getDimension()) .build(); } @Override public NodeStoreState toState(AbstractNodeStore model) { NodeStoreState state = new NodeStoreState(); int capacity = model.getCapacity(); state.setVersion(Version.V3_0); state.setCapacity(capacity); state.setCompressed(true); state.setPartialTreeStateEnabled(true); state.setPrecision(Precision.FLOAT_32.name()); int[] leftIndex = model.getLeftIndex(); int[] rightIndex = model.getRightIndex(); int[] cutDimension = model.getCutDimension(); float[] cutValues = model.getCutValues(); int[] map = new int[capacity]; int size = reorderNodesInBreadthFirstOrder(map, leftIndex, rightIndex, capacity); state.setSize(size); boolean check = root != Null && root < capacity; state.setCanonicalAndNotALeaf(check); if (check) { // can have a canonical representation saving a lot of space int[] reorderedLeftArray = new int[size]; int[] reorderedRightArray = new int[size]; int[] reorderedCutDimension = new int[size]; float[] reorderedCutValue = new float[size]; for (int i = 0; i < size; i++) { reorderedLeftArray[i] = (leftIndex[map[i]] < capacity) ? 1 : 0; reorderedRightArray[i] = (rightIndex[map[i]] < capacity) ? 1 : 0; reorderedCutDimension[i] = cutDimension[map[i]]; reorderedCutValue[i] = cutValues[map[i]]; } state.setLeftIndex(ArrayPacking.pack(reorderedLeftArray, state.isCompressed())); state.setRightIndex(ArrayPacking.pack(reorderedRightArray, state.isCompressed())); state.setSize(model.size()); state.setCutDimension(ArrayPacking.pack(reorderedCutDimension, state.isCompressed())); state.setCutValueData(ArrayPacking.pack(reorderedCutValue)); } return state; } /** * The follong function takes a pair of left and right indices for a regular * binary tree (each node has 0 or 2 children) and where internal nodes are in * the range [0..capacity-1] the indices are represented as : 0 for internal * node; 1 for leaf node; the root is 0 and every non-leaf node is added to a * queue; the number assigned to that node is the number in the queue Note that * this implies that the left/right children can be represented by bit-arrays * * This function reflates the bits to the queue numbers * * @param size the size of the two arrays, typically this is capacity; but * can be different in RCF2.0 * @param leftIndex the left bitarray * @param rightIndex the right bitarray * @param capacity the number of internal nodes (one less than number of * leaves) */ protected static void reverseBits(int size, int[] leftIndex, int[] rightIndex, int capacity) { int nodeCounter = 1; for (int i = 0; i < size; i++) { if (leftIndex[i] != 0) { leftIndex[i] = nodeCounter++; } else { leftIndex[i] = capacity; } if (rightIndex[i] != 0) { rightIndex[i] = nodeCounter++; } else { rightIndex[i] = capacity; } } for (int i = size; i < leftIndex.length; i++) { leftIndex[i] = rightIndex[i] = capacity; } } /** * The following function reorders the nodes stored in the tree in a breadth * first order; Note that a regular binary tree where each internal node has 2 * chidren, as is the case for AbstractRandomCutTree or any tree produced in a * Random Forest ensemble (not restricted to Random Cut Forests), has maxsize - * 1 internal nodes for maxSize number of leaves. The leaves are numbered 0 + * (maxsize), 1 + (maxSize), ..., etc. in that BFS ordering. The root is node 0. * * Note that if the binary tree is a complete binary tree, then the numbering * would correspond to the well known heuristic where children of node index i * are numbered 2*i and 2*i + 1. The trees in AbstractCompactRandomCutTree will * not be complete binary trees. But a similar numbering enables us to compress * the entire structure of the tree into two bit arrays corresponding to * presence of left and right children. The idea can be viewed as similar to * Zak's numbering for regular binary trees Lexicographic generation of binary * trees, S. Zaks, TCS volume 10, pages 63-82, 1980, that uses depth first * numbering. However an extensive literature exists on this topic. * * The overall relies on the extra advantage that we can use two bit sequences; * the left and right child pointers which appears to be simple. While it is * feasible to always maintain this order, that would complicate the standard * binary search tree pattern and this tranformation is used when the tree is * serialized. Note that while there is savings in representing the tree * structure into two bit arrays, the bulk of the serialization corresponds to * the payload at the nodes (cuts, dimensions for internal nodes and index to * pointstore, number of copies for the leaves). The translation to the bits is * handled by the NodeStoreMapper. The algorithm here corresponds to just * producing the cannoical order. * * The algorithm renumbers the nodes in BFS ordering. */ public int reorderNodesInBreadthFirstOrder(int[] map, int[] leftIndex, int[] rightIndex, int capacity) { if ((root != Null) && (root < capacity)) { int currentNode = 0; ArrayBlockingQueue nodeQueue = new ArrayBlockingQueue<>(capacity); nodeQueue.add(root); while (!nodeQueue.isEmpty()) { int head = nodeQueue.poll(); int leftChild = leftIndex[head]; if (leftChild < capacity) { nodeQueue.add(leftChild); } int rightChild = rightIndex[head]; if (rightChild < capacity) { nodeQueue.add(rightChild); } map[currentNode] = head; currentNode++; } return currentNode; } return 0; } } ================================================ FILE: Java/core/src/main/java/com/amazon/randomcutforest/state/tree/CompactRandomCutTreeContext.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.state.tree; import lombok.Data; import com.amazon.randomcutforest.config.Precision; import com.amazon.randomcutforest.store.IPointStore; @Data public class CompactRandomCutTreeContext { private int maxSize; private int dimension; private IPointStore pointStore; private Precision precision; } ================================================ FILE: Java/core/src/main/java/com/amazon/randomcutforest/state/tree/CompactRandomCutTreeState.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.state.tree; import static com.amazon.randomcutforest.state.Version.V2_0; import java.io.Serializable; import lombok.Data; import com.amazon.randomcutforest.state.store.NodeStoreState; @Data public class CompactRandomCutTreeState implements Serializable { private static final long serialVersionUID = 1L; private String version = V2_0; private int root; private int maxSize; private int outputAfter; private boolean storeSequenceIndexesEnabled; private boolean centerOfMassEnabled; private NodeStoreState nodeStoreState; private double boundingBoxCacheFraction; private boolean partialTreeState; private long seed; private int id; private int dimensions; private long staticSeed; private float weight; private byte[] auxiliaryData; private boolean hasAuxiliaryData; } ================================================ FILE: Java/core/src/main/java/com/amazon/randomcutforest/state/tree/RandomCutTreeMapper.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.state.tree; import static com.amazon.randomcutforest.tree.AbstractNodeStore.Null; import lombok.Getter; import lombok.Setter; import com.amazon.randomcutforest.state.IContextualStateMapper; import com.amazon.randomcutforest.state.Version; import com.amazon.randomcutforest.tree.AbstractNodeStore; import com.amazon.randomcutforest.tree.RandomCutTree; @Getter @Setter public class RandomCutTreeMapper implements IContextualStateMapper { @Override public RandomCutTree toModel(CompactRandomCutTreeState state, CompactRandomCutTreeContext context, long seed) { int dimension = (state.getDimensions() != 0) ? state.getDimensions() : context.getPointStore().getDimensions(); context.setDimension(dimension); AbstractNodeStoreMapper nodeStoreMapper = new AbstractNodeStoreMapper(); nodeStoreMapper.setRoot(state.getRoot()); AbstractNodeStore nodeStore = nodeStoreMapper.toModel(state.getNodeStoreState(), context); // boundingBoxcache is not set deliberately; // it should be set after the partial tree is complete // likewise all the leaves, including the root, should be set to // nodeStore.getCapacity() // such that when the partial tree is filled, the correct mass is computed // note that this has no effect on the cuts -- since a single node tree has no // cuts // uncommenting and using the following line would result in such an incorrect // computation // in testRoundTripForSingleNodeForest() where the masses of the trees would be // different by 1 // and thus outputAfter() would be triggered differently. // int newRoot = state.getRoot(); int newRoot = nodeStore.isLeaf(state.getRoot()) ? nodeStore.getCapacity() : state.getRoot(); RandomCutTree tree = new RandomCutTree.Builder().dimension(dimension) .storeSequenceIndexesEnabled(state.isStoreSequenceIndexesEnabled()).capacity(state.getMaxSize()) .setRoot(newRoot).randomSeed(state.getSeed()).pointStoreView(context.getPointStore()) .nodeStore(nodeStore).centerOfMassEnabled(state.isCenterOfMassEnabled()) .outputAfter(state.getOutputAfter()).build(); return tree; } @Override public CompactRandomCutTreeState toState(RandomCutTree model) { CompactRandomCutTreeState state = new CompactRandomCutTreeState(); state.setVersion(Version.V3_0); int root = model.getRoot(); AbstractNodeStoreMapper nodeStoreMapper = new AbstractNodeStoreMapper(); nodeStoreMapper.setRoot(root); state.setNodeStoreState(nodeStoreMapper.toState(model.getNodeStore())); // the compression of nodeStore would change the root if ((root != Null) && (root < model.getNumberOfLeaves() - 1)) { root = 0; // reordering is forced } state.setRoot(root); state.setMaxSize(model.getNumberOfLeaves()); state.setPartialTreeState(true); state.setStoreSequenceIndexesEnabled(model.isStoreSequenceIndexesEnabled()); state.setCenterOfMassEnabled(model.isCenterOfMassEnabled()); state.setBoundingBoxCacheFraction(model.getBoundingBoxCacheFraction()); state.setOutputAfter(model.getOutputAfter()); state.setSeed(model.getRandomSeed()); state.setDimensions(model.getDimension()); return state; } } ================================================ FILE: Java/core/src/main/java/com/amazon/randomcutforest/statistics/Deviation.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.statistics; import static com.amazon.randomcutforest.CommonUtils.checkArgument; /** * This class maintains a simple discounted statistics. Setters are avoided * except for discount rate which is useful as initialization from raw scores */ public class Deviation { protected double discount; protected double weight = 0; protected double sumSquared = 0; protected double sum = 0; protected int count = 0; public Deviation() { discount = 0; } public Deviation(double discount) { checkArgument(0 <= discount && discount < 1, "incorrect discount parameter"); this.discount = discount; } public Deviation(double discount, double weight, double sumSquared, double sum, int count) { this.discount = discount; this.weight = weight; this.sumSquared = sumSquared; this.sum = sum; this.count = count; } public Deviation copy() { return new Deviation(this.discount, this.weight, this.sumSquared, this.sum, this.count); } public double getMean() { return (weight <= 0) ? 0 : sum / weight; } public void update(double score) { double factor = 1 - discount; sum = sum * factor + score; sumSquared = sumSquared * factor + score * score; weight = weight * factor + 1.0; ++count; } public double getDeviation() { if (weight <= 0) { return 0; } double temp = sum / weight; double answer = sumSquared / weight - temp * temp; return (answer > 0) ? Math.sqrt(answer) : 0; } public boolean isEmpty() { return weight == 0; } public double getDiscount() { return discount; } public void setDiscount(double discount) { checkArgument(discount >= 0, "cannot be negative"); checkArgument(discount < 1, "can be at most 1"); this.discount = discount; } public double getSum() { return sum; } public double getSumSquared() { return sumSquared; } public double getWeight() { return weight; } public int getCount() { return count; } public void setCount(int count) { this.count = count; } public void reset() { weight = 0; sum = 0; count = 0; sumSquared = 0; } } ================================================ FILE: Java/core/src/main/java/com/amazon/randomcutforest/store/IPointStore.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.store; /** * A store for points of precision type P, which can be double[] or float[] * which can be added to a store by the update coordinator and made accessible * to the trees in a read only manner. * * @param type of input point */ public interface IPointStore extends IPointStoreView { /** * Adds to the store; there may be a loss of precision if enableFloat is on in * the Forest level. But external interface of the forest is double[] * * Note that delete is automatic, that is when no trees are accessing the point * * @param point point to be added * @param sequenceNum sequence number of the point * @param updateShingleOnly only update the shingle but do not generate a point * useful when we do not want to add a point with too * many imputed values * @return reference of the stored point */ PointReference add(Point point, long sequenceNum, boolean updateShingleOnly); default PointReference add(Point point, long sequenceNum) { return add(point, sequenceNum, false); } // increments and returns the incremented value int incrementRefCount(int index); // decrements and returns the decremented value int decrementRefCount(int index); } ================================================ FILE: Java/core/src/main/java/com/amazon/randomcutforest/store/IPointStoreView.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.store; import java.util.List; import java.util.function.BiFunction; import com.amazon.randomcutforest.summarization.ICluster; /** * A view of the PointStore that forces a read only access to the store. */ public interface IPointStoreView { int getDimensions(); int getCapacity(); float[] getNumericVector(int index); float[] getInternalShingle(); long getNextSequenceIndex(); float[] transformToShingledPoint(Point input); boolean isInternalRotationEnabled(); boolean isInternalShinglingEnabled(); int getShingleSize(); int[] transformIndices(int[] indexList); /** * Prints the point given the index, irrespective of the encoding of the point. * Used in exceptions and error messages * * @param index index of the point in the store * @return a string that can be printed */ String toString(int index); /** * a function that exposes an L1 clustering of the points stored in pointstore * * @param maxAllowed the maximum number of clusters one is * interested in * @param shrinkage a parameter used in CURE algorithm that can * produce a combination of behaviors (=1 * corresponds to centroid clustering, =0 * resembles robust Minimum Spanning Tree) * @param numberOfRepresentatives another parameter used to control the * plausible (potentially non-spherical) shapes * of the clusters * @param separationRatio a parameter that controls how aggressively we * go below maxAllowed -- this is often set to a * DEFAULT_SEPARATION_RATIO_FOR_MERGE * @param distance a distance function * @param previous a (possibly null) list of previous clusters * which can be used to seed the current clusters * to ensure some smoothness * @return a list of clusters */ List> summarize(int maxAllowed, double shrinkage, int numberOfRepresentatives, double separationRatio, BiFunction distance, List> previous); } ================================================ FILE: Java/core/src/main/java/com/amazon/randomcutforest/store/IndexIntervalManager.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.store; import static com.amazon.randomcutforest.CommonUtils.checkArgument; import static com.amazon.randomcutforest.CommonUtils.checkState; import java.util.Arrays; import java.util.BitSet; import java.util.Stack; /** * This class defines common functionality for Store classes, including * maintaining the stack of free pointers. */ public class IndexIntervalManager { protected int capacity; protected int[] freeIndexesStart; protected int[] freeIndexesEnd; protected int lastInUse; public IndexIntervalManager(int capacity) { checkArgument(capacity > 0, "incorrect parameters"); freeIndexesEnd = new int[1]; freeIndexesStart = new int[1]; lastInUse = 1; this.capacity = capacity; freeIndexesStart[0] = 0; freeIndexesEnd[0] = capacity - 1; } static BitSet toBits(int[] refCount) { checkArgument(refCount != null, "not a meaningful array input"); BitSet bits = new BitSet(refCount.length); for (int i = 0; i < refCount.length; i++) { if (refCount[i] > 0) { bits.set(i); } } return bits; } public IndexIntervalManager(int[] refCount, int capacity) { this(capacity, refCount.length, toBits(refCount)); } public IndexIntervalManager(int capacity, int length, BitSet bits) { checkArgument(bits != null, " null bitset not allowed"); this.capacity = capacity; int first = bits.nextClearBit(0); Stack stack = new Stack<>(); while (first < length) { int last = bits.nextSetBit(first) - 1; if (last >= first) { stack.push(new int[] { first, last }); first = bits.nextClearBit(last + 1); if (first < 0) { break; } } else { // we do not distinguish between all full and all empty if (first < length - 1) { if (bits.nextClearBit(first + 1) == first + 1) { stack.push(new int[] { first, length - 1 }); } else { stack.push(new int[] { first, first }); } } else { stack.push(new int[] { length - 1, length - 1 }); } break; } } lastInUse = stack.size(); freeIndexesEnd = new int[lastInUse + 1]; freeIndexesStart = new int[lastInUse + 1]; this.capacity = capacity; int count = 0; while (stack.size() > 0) { int[] interval = stack.pop(); freeIndexesStart[count] = interval[0]; freeIndexesEnd[count] = interval[1]; ++count; } } public void extendCapacity(int newCapacity) { checkArgument(newCapacity > capacity, " incorrect call, we can only increase capacity"); // the current capacity need not be the final capacity, for example in case of // point store if (freeIndexesStart.length == lastInUse) { freeIndexesStart = Arrays.copyOf(freeIndexesStart, lastInUse + 1); freeIndexesEnd = Arrays.copyOf(freeIndexesEnd, lastInUse + 1); } freeIndexesStart[lastInUse] = capacity; freeIndexesEnd[lastInUse] = (newCapacity - 1); lastInUse += 1; capacity = newCapacity; } public boolean isEmpty() { return (lastInUse == 0); } /** * @return the maximum number of nodes whose data can be stored. */ public int getCapacity() { return capacity; } /** * @return the number of indices which are being maintained */ public int size() { int sum = 0; for (int i = 0; i < lastInUse; i++) { sum += freeIndexesEnd[i] - freeIndexesStart[i] + 1; } return sum; } /** * Take an index from the free index stack. * * @return a free index that can be used to store a value. */ public int takeIndex() { checkState(lastInUse > 0, "store is full"); int answer = freeIndexesStart[lastInUse - 1]; if (answer == freeIndexesEnd[lastInUse - 1]) { lastInUse -= 1; } else { freeIndexesStart[lastInUse - 1] = answer + 1; } return answer; } /** * Release an index. After the release, the index value may be returned in a * future call to {@link #takeIndex()}. * * @param index The index value to release. */ public void releaseIndex(int index) { if (lastInUse > 0) { int start = freeIndexesStart[lastInUse - 1]; int end = freeIndexesEnd[lastInUse - 1]; if (start == index + 1) { freeIndexesStart[lastInUse - 1] = index; return; } else if (end + 1 == index) { freeIndexesEnd[lastInUse - 1] = index; return; } } if (freeIndexesStart.length == lastInUse) { freeIndexesStart = Arrays.copyOf(freeIndexesStart, lastInUse + 1); freeIndexesEnd = Arrays.copyOf(freeIndexesEnd, lastInUse + 1); } freeIndexesStart[lastInUse] = index; freeIndexesEnd[lastInUse] = index; lastInUse += 1; } } ================================================ FILE: Java/core/src/main/java/com/amazon/randomcutforest/store/PointStore.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.store; import static com.amazon.randomcutforest.CommonUtils.checkArgument; import static com.amazon.randomcutforest.CommonUtils.checkNotNull; import static com.amazon.randomcutforest.CommonUtils.checkState; import static com.amazon.randomcutforest.CommonUtils.toFloatArray; import static com.amazon.randomcutforest.summarization.Summarizer.iterativeClustering; import static java.lang.Math.max; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Optional; import java.util.Vector; import java.util.function.BiFunction; import com.amazon.randomcutforest.summarization.ICluster; import com.amazon.randomcutforest.summarization.MultiCenter; import com.amazon.randomcutforest.util.ArrayUtils; import com.amazon.randomcutforest.util.Weighted; public abstract class PointStore implements IPointStore { public static int INFEASIBLE_POINTSTORE_INDEX = -1; public static int INFEASIBLE_LOCN = (int) -1; /** * an index manager to manage free locations */ protected IndexIntervalManager indexManager; /** * generic store class */ protected float[] store; /** * generic internal shingle, note that input is doubles */ protected float[] internalShingle; /** * enable rotation of shingles; use a cyclic buffer instead of sliding window */ boolean rotationEnabled; /** * last seen timestamp for internal shingling */ protected long nextSequenceIndex; /** * refCount[i] counts of the number of trees that are currently using the point * determined by locationList[i] or (for directLocationMapping) the point at * store[i * dimensions] */ protected byte[] refCount; protected HashMap refCountMap; /** * first location where new data can be safely copied; */ int startOfFreeSegment; /** * overall dimension of the point (after shingling) */ int dimensions; /** * shingle size, if known. Setting shingle size = 1 rules out overlapping */ int shingleSize; /** * number of original dimensions which are shingled to produce and overall point * dimensions = shingleSize * baseDimensions. However there is a possibility * that even though the data is shingled, we may not choose to use the * overlapping (say for out of order updates). */ int baseDimension; /** * maximum capacity */ int capacity; /** * current capacity of store (number of shingled points) */ int currentStoreCapacity; /** * enabling internal shingling */ boolean internalShinglingEnabled; abstract void setInfeasiblePointstoreLocationIndex(int index); abstract void extendLocationList(int newCapacity); abstract void setLocation(int index, int location); abstract int getLocation(int index); /** * Decrement the reference count for the given index. * * @param index The index value. * @throws IllegalArgumentException if the index value is not valid. * @throws IllegalArgumentException if the current reference count for this * index is non positive. */ @Override public int decrementRefCount(int index) { checkArgument(index >= 0 && index < locationListLength(), " index not supported by store"); checkArgument((refCount[index] & 0xff) > 0, " cannot decrement index"); Integer value = refCountMap.remove(index); if (value == null) { if ((refCount[index] & 0xff) == 1) { indexManager.releaseIndex(index); refCount[index] = (byte) 0; setInfeasiblePointstoreLocationIndex(index); return 0; } else { int newVal = (byte) ((refCount[index] & 0xff) - 1); refCount[index] = (byte) newVal; return newVal; } } else { if (value > 1) { refCountMap.put(index, value - 1); } return value - 1 + (refCount[index] & 0xff); } } /** * takes an index from the index manager and rezises if necessary also adjusts * refCount size to have increment/decrement be seamless * * @return an index from the index manager */ int takeIndex() { if (indexManager.isEmpty()) { if (indexManager.getCapacity() < capacity) { int oldCapacity = indexManager.getCapacity(); int newCapacity = Math.min(capacity, 1 + (int) Math.floor(1.1 * oldCapacity)); indexManager.extendCapacity(newCapacity); refCount = Arrays.copyOf(refCount, newCapacity); extendLocationList(newCapacity); } else { throw new IllegalStateException(" index manager in point store is full "); } } return indexManager.takeIndex(); } protected int getAmountToWrite(float[] tempPoint) { if (checkShingleAlignment(startOfFreeSegment, tempPoint)) { if (!rotationEnabled || startOfFreeSegment % dimensions == (nextSequenceIndex - 1) * baseDimension % dimensions) { return baseDimension; } } else if (!rotationEnabled) { return dimensions; } // the following adds the padding for what exists; // then the padding for the new part; all mod (dimensions) // note that the expression is baseDimension when the condition // startOfFreeSegment % dimensions == (nextSequenceIndex-1)*baseDimension % // dimension // is met return dimensions + (dimensions - startOfFreeSegment % dimensions + (int) ((nextSequenceIndex) * baseDimension) % dimensions) % dimensions; } /** * Add a point to the point store and return the index of the stored point. * * @param point The point being added to the store. * @param sequenceNum sequence number of the point * @return the index value of the stored point. * @throws IllegalArgumentException if the length of the point does not match * the point store's dimensions. * @throws IllegalStateException if the point store is full. */ public int add(double[] point, long sequenceNum) { return add(toFloatArray(point), sequenceNum, false); } public Integer add(float[] point, long sequenceNum, boolean updateShingleOnly) { checkArgument(internalShinglingEnabled || point.length == dimensions, "point.length must be equal to dimensions"); checkArgument(!internalShinglingEnabled || point.length == baseDimension, "point.length must be equal to dimensions"); float[] tempPoint = point; nextSequenceIndex++; if (internalShinglingEnabled) { // rotation is supported via the output and input is unchanged tempPoint = constructShingleInPlace(internalShingle, point, false); if (nextSequenceIndex < shingleSize || updateShingleOnly) { return INFEASIBLE_POINTSTORE_INDEX; } } int nextIndex; int amountToWrite = getAmountToWrite(tempPoint); if (startOfFreeSegment > currentStoreCapacity * dimensions - amountToWrite) { // try compaction and then resizing compact(); // the compaction can change the array contents amountToWrite = getAmountToWrite(tempPoint); if (startOfFreeSegment > currentStoreCapacity * dimensions - amountToWrite) { resizeStore(); checkState(startOfFreeSegment + amountToWrite <= currentStoreCapacity * dimensions, "out of space"); } } nextIndex = takeIndex(); setLocation(nextIndex, startOfFreeSegment - dimensions + amountToWrite); if (amountToWrite <= dimensions) { copyPoint(tempPoint, dimensions - amountToWrite, startOfFreeSegment, amountToWrite); } else { copyPoint(tempPoint, 0, startOfFreeSegment + amountToWrite - dimensions, dimensions); } startOfFreeSegment += amountToWrite; refCount[nextIndex] = 1; return nextIndex; } /** * Increment the reference count for the given index. This operation assumes * that there is currently a point stored at the given index and will throw an * exception if that's not the case. * * @param index The index value. * @throws IllegalArgumentException if the index value is not valid. * @throws IllegalArgumentException if the current reference count for this * index is non positive. */ public int incrementRefCount(int index) { checkArgument(index >= 0 && index < locationListLength(), " index not supported by store"); checkArgument((refCount[index] & 0xff) > 0, " not in use"); Integer value = refCountMap.remove(index); if (value == null) { if ((refCount[index] & 0xff) == 255) { refCountMap.put(index, 1); return 256; } else { int newVal = (byte) ((refCount[index] & 0xff) + 1); refCount[index] = (byte) newVal; return newVal; } } else { refCountMap.put(index, value + 1); return value + 1; } } @Override public int getDimensions() { return dimensions; } /** * maximum capacity, in number of points of size dimensions */ public int getCapacity() { return capacity; } /** * capacity of the indices */ public int getIndexCapacity() { return indexManager.getCapacity(); } /** * used in mapper * * @return gets the shingle size (if known, otherwise is 1) */ public int getShingleSize() { return shingleSize; } /** * gets the current store capacity in the number of points with dimension many * values * * @return capacity in number of points */ public int getCurrentStoreCapacity() { return currentStoreCapacity; } /** * used for mappers * * @return the store that stores the values */ public float[] getStore() { return store; } /** * used for mapper * * @return the array of counts referring to different points */ public int[] getRefCount() { int[] newarray = new int[refCount.length]; for (int i = 0; i < refCount.length; i++) { newarray[i] = refCount[i] & 0xff; Integer value = refCountMap.get(i); if (value != null) { newarray[i] += value; } } return newarray; } /** * useful in mapper to not copy * * @return the length of the prefix */ public int getStartOfFreeSegment() { return startOfFreeSegment; } /** * used in mapper * * @return if shingling is performed internally */ public boolean isInternalShinglingEnabled() { return internalShinglingEnabled; } /** * used in mapper and in extrapolation * * @return the last timestamp seen */ public long getNextSequenceIndex() { return nextSequenceIndex; } /** * used to obtain the most recent shingle seen so far in case of internal * shingling * * @return for internal shingling, returns the last seen shingle */ public float[] getInternalShingle() { checkState(internalShinglingEnabled, "internal shingling is not enabled"); return copyShingle(); } /** * The following function eliminates redundant information that builds up in the * point store and shrinks the point store */ abstract int locationListLength(); void alignBoundaries(int initial, int freshStart) { int locn = freshStart; for (int i = 0; i < initial; i++) { store[locn] = 0; ++locn; } } public void compact() { Vector reverseReference = new Vector<>(); for (int i = 0; i < locationListLength(); i++) { int locn = getLocation(i); if (locn < currentStoreCapacity * dimensions && locn >= 0) { reverseReference.add(new Integer[] { locn, i }); } } reverseReference.sort((o1, o2) -> o1[0].compareTo(o2[0])); int freshStart = 0; int jStatic = 0; int jDynamic = 0; int jEnd = reverseReference.size(); while (jStatic < jEnd) { int blockStart = reverseReference.get(jStatic)[0]; int blockEnd = blockStart + dimensions; int initial = 0; if (rotationEnabled) { initial = (dimensions - freshStart + blockStart) % dimensions; } int k = jStatic + 1; jDynamic = jStatic + 1; while (k < jEnd) { int newElem = reverseReference.get(k)[0]; if (blockEnd >= newElem) { k += 1; jDynamic += 1; blockEnd = max(blockEnd, newElem + dimensions); } else { k = jEnd; } } alignBoundaries(initial, freshStart); freshStart += initial; int start = freshStart; for (int i = blockStart; i < blockEnd; i++) { assert (!rotationEnabled || freshStart % dimensions == i % dimensions); if (jStatic < jEnd) { int locn = reverseReference.get(jStatic)[0]; if (i == locn) { int newIdx = reverseReference.get(jStatic)[1]; setLocation(newIdx, freshStart); jStatic += 1; } } freshStart += 1; } copyTo(start, blockStart, blockEnd - blockStart); if (jStatic != jDynamic) { throw new IllegalStateException("There is discepancy in indices"); } } startOfFreeSegment = freshStart; } /** * returns the number of copies of a point * * @param i index of a point * @return number of copies of the point managed by the store */ public int getRefCount(int i) { int val = refCount[i] & 0xff; Integer value = refCountMap.get(i); if (value != null) { val += value; } return val; } @Override public boolean isInternalRotationEnabled() { return rotationEnabled; } /** * * @return the number of indices stored */ public abstract int size(); public abstract int[] getLocationList(); /** * transforms a point to a shingled point if internal shingling is turned on * * @param point new input values * @return shingled point */ @Override public float[] transformToShingledPoint(float[] point) { checkNotNull(point, "point must not be null"); if (internalShinglingEnabled && point.length == baseDimension) { return constructShingleInPlace(copyShingle(), point, rotationEnabled); } return ArrayUtils.cleanCopy(point); } private float[] copyShingle() { if (!rotationEnabled) { return Arrays.copyOf(internalShingle, dimensions); } else { float[] answer = new float[dimensions]; int offset = (int) (nextSequenceIndex * baseDimension); for (int i = 0; i < dimensions; i++) { answer[(offset + i) % dimensions] = internalShingle[i]; } return answer; } } /** * the following function is used to update the shingle in place; it can be used * to produce new copies as well * * @param target the array containing the shingled point * @param point the new values * @return the array which now contains the updated shingle */ protected float[] constructShingleInPlace(float[] target, float[] point, boolean rotationEnabled) { if (!rotationEnabled) { for (int i = 0; i < dimensions - baseDimension; i++) { target[i] = target[i + baseDimension]; } for (int i = 0; i < baseDimension; i++) { target[dimensions - baseDimension + i] = (point[i] == 0.0) ? 0.0f : point[i]; } } else { int offset = ((int) (nextSequenceIndex * baseDimension) % dimensions); for (int i = 0; i < baseDimension; i++) { target[offset + i] = (point[i] == 0.0) ? 0.0f : point[i]; } } return target; } /** * for extrapolation and imputation, in presence of internal shingling we need * to update the list of missing values from the space of the input dimensions * to the shingled dimensions * * @param indexList list of missing values in the input point * @return list of missing values in the shingled point */ @Override public int[] transformIndices(int[] indexList) { checkArgument(internalShinglingEnabled, " only allowed for internal shingling"); checkArgument(indexList.length <= baseDimension, " incorrect length"); int[] results = Arrays.copyOf(indexList, indexList.length); if (!rotationEnabled) { for (int i = 0; i < indexList.length; i++) { checkArgument(results[i] < baseDimension, "incorrect index"); results[i] += dimensions - baseDimension; } } else { int offset = ((int) (nextSequenceIndex * baseDimension) % dimensions); for (int i = 0; i < indexList.length; i++) { checkArgument(results[i] < baseDimension, "incorrect index"); results[i] = (results[i] + offset) % dimensions; } } return results; } /** * a builder */ public static class Builder> { // We use Optional types for optional primitive fields when it doesn't make // sense to use a constant default. protected int dimensions; protected int shingleSize = 1; protected int baseDimension; protected boolean internalRotationEnabled = false; protected boolean internalShinglingEnabled = false; protected int capacity; protected Optional initialPointStoreSize = Optional.empty(); protected int currentStoreCapacity = 0; protected int indexCapacity = 0; protected float[] store = null; protected double[] knownShingle = null; protected int[] locationList = null; protected int[] refCount = null; protected long nextTimeStamp = 0; protected int startOfFreeSegment = 0; // dimension of the points being stored public T dimensions(int dimensions) { this.dimensions = dimensions; return (T) this; } // maximum number of points in the store public T capacity(int capacity) { this.capacity = capacity; return (T) this; } // initial size of the pointstore, dynamicResizing must be on // and value cannot exceed capacity public T initialSize(int initialPointStoreSize) { this.initialPointStoreSize = Optional.of(initialPointStoreSize); return (T) this; } // shingleSize for opportunistic compression public T shingleSize(int shingleSize) { this.shingleSize = shingleSize; return (T) this; } // is internal shingling enabled public T internalShinglingEnabled(boolean internalShinglingEnabled) { this.internalShinglingEnabled = internalShinglingEnabled; return (T) this; } // are shingles rotated public T internalRotationEnabled(boolean internalRotationEnabled) { this.internalRotationEnabled = internalRotationEnabled; return (T) this; } @Deprecated public T directLocationEnabled(boolean value) { return (T) this; } @Deprecated public T dynamicResizingEnabled(boolean value) { return (T) this; } // the size of the array storing the specific points // this is used for serialization public T currentStoreCapacity(int currentStoreCapacity) { this.currentStoreCapacity = currentStoreCapacity; return (T) this; } // the size of the pointset being tracked // this is used for serialization public T indexCapacity(int indexCapacity) { this.indexCapacity = indexCapacity; return (T) this; } // last known shingle, if internalshingle is on // this shingle is not rotated // this is used for serialization public T knownShingle(double[] knownShingle) { this.knownShingle = knownShingle; return (T) this; } // count of the points being tracked // used for serialization public T refCount(int[] refCount) { this.refCount = refCount; return (T) this; } // location of the points being tracked, if not directmapped // used for serialization public T locationList(int[] locationList) { this.locationList = locationList; return (T) this; } public T store(float[] store) { this.store = store; return (T) this; } // location of where points can be written // used for serialization public T startOfFreeSegment(int startOfFreeSegment) { this.startOfFreeSegment = startOfFreeSegment; return (T) this; } // the next timeStamp to accept // used for serialization public T nextTimeStamp(long nextTimeStamp) { this.nextTimeStamp = nextTimeStamp; return (T) this; } public PointStore build() { if (shingleSize * capacity < Character.MAX_VALUE) { return new PointStoreSmall(this); } else { return new PointStoreLarge(this); } } } public PointStore(PointStore.Builder builder) { checkArgument(builder.dimensions > 0, "dimensions must be greater than 0"); checkArgument(builder.capacity > 0, "capacity must be greater than 0"); checkArgument(builder.shingleSize == 1 || builder.dimensions == builder.shingleSize || builder.dimensions % builder.shingleSize == 0, "incorrect use of shingle size"); /** * the following checks are due to mappers (kept for future) */ if (builder.refCount != null || builder.locationList != null || builder.knownShingle != null) { checkArgument(builder.refCount != null, "reference count must be present"); checkArgument(builder.locationList != null, "location list must be present"); checkArgument(builder.refCount.length == builder.indexCapacity, "incorrect reference count length"); // following may change if IndexManager is dynamically resized as well checkArgument(builder.locationList.length == builder.indexCapacity, " incorrect length of locations"); checkArgument( builder.knownShingle == null || builder.internalShinglingEnabled && builder.knownShingle.length == builder.dimensions, "incorrect shingling information"); } this.shingleSize = builder.shingleSize; this.dimensions = builder.dimensions; this.internalShinglingEnabled = builder.internalShinglingEnabled; this.rotationEnabled = builder.internalRotationEnabled; this.baseDimension = this.dimensions / this.shingleSize; this.capacity = builder.capacity; this.refCountMap = new HashMap<>(); if (builder.refCount == null) { int size = (int) builder.initialPointStoreSize.orElse(builder.capacity); currentStoreCapacity = size; this.indexManager = new IndexIntervalManager(size); startOfFreeSegment = 0; refCount = new byte[size]; if (internalShinglingEnabled) { nextSequenceIndex = 0; internalShingle = new float[dimensions]; } store = new float[currentStoreCapacity * dimensions]; } else { this.refCount = new byte[builder.refCount.length]; for (int i = 0; i < refCount.length; i++) { if (builder.refCount[i] >= 0 && builder.refCount[i] <= 255) { refCount[i] = (byte) builder.refCount[i]; } else if (builder.refCount[i] > 255) { refCount[i] = (byte) 255; refCountMap.put(i, builder.refCount[i] - 255); } } this.startOfFreeSegment = builder.startOfFreeSegment; this.nextSequenceIndex = builder.nextTimeStamp; this.currentStoreCapacity = builder.currentStoreCapacity; if (internalShinglingEnabled) { this.internalShingle = (builder.knownShingle != null) ? Arrays.copyOf(toFloatArray(builder.knownShingle), dimensions) : new float[dimensions]; } indexManager = new IndexIntervalManager(builder.refCount, builder.indexCapacity); store = (builder.store == null) ? new float[currentStoreCapacity * dimensions] : builder.store; } } void resizeStore() { int maxCapacity = (rotationEnabled) ? 2 * capacity : capacity; int newCapacity = (int) Math.floor(Math.min(1.1 * currentStoreCapacity, maxCapacity)); if (newCapacity > currentStoreCapacity) { float[] newStore = new float[newCapacity * dimensions]; System.arraycopy(store, 0, newStore, 0, currentStoreCapacity * dimensions); currentStoreCapacity = newCapacity; store = newStore; } } boolean checkShingleAlignment(int location, float[] point) { boolean test = (location - dimensions + baseDimension >= 0); for (int i = 0; i < dimensions - baseDimension && test; i++) { test = (((float) point[i]) == store[location - dimensions + baseDimension + i]); } return test; } void copyPoint(float[] point, int src, int location, int length) { for (int i = 0; i < length; i++) { store[location + i] = point[src + i]; } } protected abstract void checkFeasible(int index); /** * Get a copy of the point at the given index. * * @param index An index value corresponding to a storage location in this point * store. * @return a copy of the point stored at the given index. * @throws IllegalArgumentException if the index value is not valid. * @throws IllegalArgumentException if the current reference count for this * index is nonpositive. */ @Override public float[] getNumericVector(int index) { checkArgument(index >= 0 && index < locationListLength(), " index not supported by store"); int address = getLocation(index); checkFeasible(index); if (!rotationEnabled) { return Arrays.copyOfRange(store, address, address + dimensions); } else { float[] answer = new float[dimensions]; for (int i = 0; i < dimensions; i++) { answer[(address + i) % dimensions] = store[address + i]; } return answer; } } public String toString(int index) { return Arrays.toString(getNumericVector(index)); } void copyTo(int dest, int source, int length) { if (dest < source) { for (int i = 0; i < length; i++) { store[dest + i] = store[source + i]; } } } public static Builder builder() { return new Builder(); } /** * a function that exposes an L1 clustering of the points stored in pointstore * * @param maxAllowed the maximum number of clusters one is * interested in * @param shrinkage a parameter used in CURE algorithm that can * produce a combination of behaviors (=1 * corresponds to centroid clustering, =0 * resembles robust Minimum Spanning Tree) * @param numberOfRepresentatives another parameter used to control the * plausible (potentially non-spherical) shapes * of the clusters * @param separationRatio a parameter that controls how aggressively we * go below maxAllowed -- this is often set to a * DEFAULT_SEPARATION_RATIO_FOR_MERGE * @param previous a (possibly null) list of previous clusters * which can be used to seed the current clusters * to ensure some smoothness * @return a list of clusters */ public List> summarize(int maxAllowed, double shrinkage, int numberOfRepresentatives, double separationRatio, BiFunction distance, List> previous) { int[] counts = getRefCount(); ArrayList> refs = new ArrayList<>(); for (int i = 0; i < counts.length; i++) { if (counts[i] != 0) { refs.add(new Weighted<>(i, (float) counts[i])); } } BiFunction> clusterInitializer = (a, b) -> MultiCenter.initialize(a, b, shrinkage, numberOfRepresentatives); return iterativeClustering(maxAllowed, 4 * maxAllowed, 1, refs, this::getNumericVector, distance, clusterInitializer, 42, false, true, separationRatio, previous); } } ================================================ FILE: Java/core/src/main/java/com/amazon/randomcutforest/store/PointStoreLarge.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.store; import static com.amazon.randomcutforest.CommonUtils.checkArgument; import java.util.Arrays; public class PointStoreLarge extends PointStore { protected int[] locationList; void setInfeasiblePointstoreLocationIndex(int index) { locationList[index] = INFEASIBLE_LOCN; }; void extendLocationList(int newCapacity) { int oldCapacity = locationList.length; locationList = Arrays.copyOf(locationList, newCapacity); for (int i = oldCapacity; i < newCapacity; i++) { locationList[i] = INFEASIBLE_LOCN; } }; void setLocation(int index, int location) { locationList[index] = location / baseDimension; } int getLocation(int index) { return baseDimension * locationList[index]; } int locationListLength() { return locationList.length; } public PointStoreLarge(PointStore.Builder builder) { super(builder); if (builder.locationList != null) { locationList = Arrays.copyOf(builder.locationList, builder.locationList.length); } else { locationList = new int[currentStoreCapacity]; Arrays.fill(locationList, INFEASIBLE_LOCN); } } @Override public int size() { int count = 0; for (int i = 0; i < locationList.length; i++) { if (locationList[i] != INFEASIBLE_LOCN) { ++count; } } return count; } @Override protected void checkFeasible(int index) { checkArgument(locationList[index] != INFEASIBLE_LOCN, " invalid point"); } @Override public int[] getLocationList() { return Arrays.copyOf(locationList, locationList.length); } } ================================================ FILE: Java/core/src/main/java/com/amazon/randomcutforest/store/PointStoreSmall.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.store; import static com.amazon.randomcutforest.CommonUtils.checkArgument; import java.util.Arrays; public class PointStoreSmall extends PointStore { public static char INFEASIBLE_SMALL_POINTSTORE_LOCN = (char) PointStore.INFEASIBLE_LOCN; protected char[] locationList; void setInfeasiblePointstoreLocationIndex(int index) { locationList[index] = INFEASIBLE_SMALL_POINTSTORE_LOCN; }; void extendLocationList(int newCapacity) { int oldCapacity = locationList.length; assert (oldCapacity < newCapacity); locationList = Arrays.copyOf(locationList, newCapacity); for (int i = oldCapacity; i < newCapacity; i++) { locationList[i] = INFEASIBLE_SMALL_POINTSTORE_LOCN; } }; void setLocation(int index, int location) { locationList[index] = (char) (location / baseDimension); assert (baseDimension * (int) locationList[index] == location); } int getLocation(int index) { return baseDimension * (int) locationList[index]; } int locationListLength() { return locationList.length; } public PointStoreSmall(PointStore.Builder builder) { super(builder); checkArgument(shingleSize * capacity < Character.MAX_VALUE, " incorrect parameters"); if (builder.locationList != null) { locationList = new char[builder.locationList.length]; for (int i = 0; i < locationList.length; i++) { locationList[i] = (char) builder.locationList[i]; } } else { locationList = new char[currentStoreCapacity]; Arrays.fill(locationList, INFEASIBLE_SMALL_POINTSTORE_LOCN); } } public PointStoreSmall(int dimensions, int capacity) { this(PointStore.builder().capacity(capacity).dimensions(dimensions).shingleSize(1).initialSize(capacity)); } @Override protected void checkFeasible(int index) { checkArgument(locationList[index] != INFEASIBLE_SMALL_POINTSTORE_LOCN, " invalid point"); } @Override public int size() { int count = 0; for (int i = 0; i < locationList.length; i++) { if (locationList[i] != INFEASIBLE_SMALL_POINTSTORE_LOCN) { ++count; } } return count; } @Override public int[] getLocationList() { int[] answer = new int[locationList.length]; for (int i = 0; i < locationList.length; i++) { answer[i] = locationList[i]; } return answer; } } ================================================ FILE: Java/core/src/main/java/com/amazon/randomcutforest/store/StreamSampler.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.store; import static com.amazon.randomcutforest.CommonUtils.checkArgument; import static com.amazon.randomcutforest.RandomCutForest.DEFAULT_INITIAL_ACCEPT_FRACTION; import static com.amazon.randomcutforest.RandomCutForest.DEFAULT_SAMPLE_SIZE; import static com.amazon.randomcutforest.RandomCutForest.DEFAULT_SAMPLE_SIZE_COEFFICIENT_IN_TIME_DECAY; import static com.amazon.randomcutforest.RandomCutForest.DEFAULT_STORE_SEQUENCE_INDEXES_ENABLED; import static java.lang.Math.max; import static java.lang.Math.min; import java.util.ArrayList; import java.util.Optional; import java.util.Random; import com.amazon.randomcutforest.sampler.CompactSampler; import com.amazon.randomcutforest.sampler.ISampled; import com.amazon.randomcutforest.util.Weighted; /** * The following class is a sampler for generic objects that allow weighted time * dependent sampling. It is an encapsulation of CompactSampler in * RandomCutForest core and is meant to be extended in multiple ways. Hence the * functions are protected and should be overriden/not used arbirarily. */ public class StreamSampler

{ // basic time dependent sampler protected final CompactSampler sampler; // list of objects protected final ArrayList> objectList; // managing indices protected final IndexIntervalManager intervalManager; // accounting for evicted items protected Optional

evicted; // sequence number used in sequential sampling protected long sequenceNumber = -1L; // number of items seen, different from sequenceNumber in case of merge protected long entriesSeen = 0L; protected boolean currentlySampling; public static Builder builder() { return new Builder<>(); } public StreamSampler(Builder builder) { sampler = new CompactSampler.Builder<>().capacity(builder.capacity) .storeSequenceIndexesEnabled(builder.storeSequenceIndexesEnabled).randomSeed(builder.randomSeed) .initialAcceptFraction(builder.initialAcceptFraction).timeDecay(builder.timeDecay).build(); objectList = new ArrayList<>(builder.capacity); intervalManager = new IndexIntervalManager(builder.capacity); evicted = Optional.empty(); currentlySampling = true; } /** * a basic sampling operation that accounts for weights of items. This function * will be overriden in future classes. * * @param object to be sampled * @param weight weight of object (non-negative); although 0 weight implies do * not sample * @return true if the object is sampled and false if the object is not sampled; * if true then there may have been an eviction which is updated */ protected boolean sample(P object, float weight) { ++sequenceNumber; ++entriesSeen; if (currentlySampling) { if (sampler.acceptPoint(sequenceNumber, weight)) { Optional> samplerEvicted = sampler.getEvictedPoint(); if (samplerEvicted.isPresent()) { int oldIndex = samplerEvicted.get().getValue(); evicted = Optional.of(objectList.get(oldIndex).index); intervalManager.releaseIndex(oldIndex); } int index = intervalManager.takeIndex(); if (index < objectList.size()) { objectList.set(index, new Weighted<>(object, weight)); } else { objectList.add(new Weighted<>(object, weight)); } sampler.addPoint(index); return true; } } evicted = Optional.empty(); return false; } public StreamSampler(StreamSampler

first, StreamSampler

second, int capacity, double timeDecay, long seed) { checkArgument(capacity > 0, "capacity has to be positive"); double initialAcceptFraction = max(first.sampler.getInitialAcceptFraction(), second.sampler.getInitialAcceptFraction()); // merge would remove sequenceIndex information objectList = new ArrayList<>(capacity); int[] pointList = new int[capacity]; float[] weightList = new float[capacity]; intervalManager = new IndexIntervalManager(capacity); evicted = Optional.empty(); currentlySampling = true; double firstUpdate = -(first.sampler.getMaxSequenceIndex() - first.sampler.getMostRecentTimeDecayUpdate()) * first.sampler.getTimeDecay(); ArrayList> list = new ArrayList<>(); int offset = first.sampler.size(); int[] firstList = first.sampler.getPointIndexArray(); float[] firstWeightList = first.sampler.getWeightArray(); for (int i = 0; i < offset; i++) { list.add(new Weighted<>(firstList[i], (float) (firstWeightList[i] + firstUpdate))); } double secondUpdate = -(second.sampler.getMaxSequenceIndex() - second.sampler.getMostRecentTimeDecayUpdate()) * second.sampler.getTimeDecay(); int secondOffset = second.sampler.size(); int[] secondList = second.sampler.getPointIndexArray(); float[] secondWeightList = second.sampler.getWeightArray(); for (int i = 0; i < secondOffset; i++) { list.add(new Weighted<>(secondList[i] + offset, (float) (secondWeightList[i] + secondUpdate))); } list.sort((o1, o2) -> Float.compare(o1.weight, o2.weight)); int size = min(capacity, list.size()); for (int j = size - 1; j >= 0; j--) { int index = intervalManager.takeIndex(); pointList[index] = index; weightList[index] = list.get(j).weight; if (list.get(j).index < offset) { objectList.add(first.objectList.get(list.get(j).index)); } else { objectList.add(second.objectList.get(list.get(j).index - offset)); } } // sequence number corresponds to linear order of time this.sequenceNumber = max(first.sequenceNumber, second.sequenceNumber); // entries seen is the sum this.entriesSeen = first.entriesSeen + second.entriesSeen; sampler = new CompactSampler.Builder<>().capacity(capacity).storeSequenceIndexesEnabled(false).randomSeed(seed) .initialAcceptFraction(initialAcceptFraction).timeDecay(timeDecay).pointIndex(pointList) .weight(weightList).randomSeed(seed).maxSequenceIndex(this.sequenceNumber) .mostRecentTimeDecayUpdate(this.sequenceNumber).build(); } public boolean isCurrentlySampling() { return currentlySampling; } public void pauseSampling() { currentlySampling = false; } public void resumeSampling() { currentlySampling = true; } public ArrayList> getObjectList() { return objectList; } public int getCapacity() { return sampler.getCapacity(); } public long getSequenceNumber() { return sequenceNumber; } public long getEntriesSeen() { return entriesSeen; } public static class Builder> { private boolean storeSequenceIndexesEnabled = DEFAULT_STORE_SEQUENCE_INDEXES_ENABLED; protected int capacity = DEFAULT_SAMPLE_SIZE; protected double timeDecay = 1.0 / (DEFAULT_SAMPLE_SIZE_COEFFICIENT_IN_TIME_DECAY * capacity); protected long randomSeed = new Random().nextLong(); protected double initialAcceptFraction = DEFAULT_INITIAL_ACCEPT_FRACTION; public T capacity(int capacity) { this.capacity = capacity; return (T) this; } public T randomSeed(long seed) { this.randomSeed = seed; return (T) this; } public T initialAcceptFraction(double initialAcceptFraction) { this.initialAcceptFraction = initialAcceptFraction; return (T) this; } public T timeDecay(double timeDecay) { this.timeDecay = timeDecay; return (T) this; } public T storeSequenceIndexesEnabled(boolean storeSequenceIndexesEnabled) { this.storeSequenceIndexesEnabled = storeSequenceIndexesEnabled; return (T) this; } public StreamSampler build() { return new StreamSampler<>(this); } public double getTimeDecay() { return timeDecay; } public int getCapacity() { return capacity; } public long getRandomSeed() { return randomSeed; } } } ================================================ FILE: Java/core/src/main/java/com/amazon/randomcutforest/summarization/Center.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.summarization; import static com.amazon.randomcutforest.CommonUtils.checkArgument; import static java.lang.Math.exp; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.function.BiFunction; import java.util.function.Function; import com.amazon.randomcutforest.util.Weighted; /** * the following class abstracts a single centroid representation of a group of * points */ public class Center implements ICluster { float[] representative; double weight; ArrayList> assignedPoints; double sumOfRadius; double previousWeight = 0; double previousSumOFRadius = 0; Center(float[] coordinate, float weight) { // explicitly copied because array elements will change this.representative = Arrays.copyOf(coordinate, coordinate.length); this.weight = weight; this.assignedPoints = new ArrayList<>(); } public static Center initialize(float[] coordinate, float weight) { return new Center(coordinate, weight); } // adds a point; only the index to keep space bounds lower // note that the weight may not be the entire weight of a point in case of a // "soft" assignment public void addPoint(int index, float weight, double dist, float[] point, BiFunction distance) { assignedPoints.add(new Weighted<>(index, weight)); this.weight += weight; this.sumOfRadius += weight * dist; } // the following sets up reassignment of the coordinate based on the points // assigned to the center public void reset() { assignedPoints = new ArrayList<>(); previousWeight = weight; weight = 0; previousSumOFRadius = sumOfRadius; } public double averageRadius() { return (weight > 0) ? sumOfRadius / weight : 0; } // average radius computation, provides an extent measure public double extentMeasure() { return (weight > 0) ? sumOfRadius / weight : 0; } public double getWeight() { return weight; } // a standard reassignment using the median values and NOT the mean; the mean is // unlikely to // provide robust convergence public double recompute(Function getPoint, boolean approx, BiFunction distance) { if (assignedPoints.size() == 0 || weight == 0.0) { Arrays.fill(representative, 0); // zero out values return 0; } previousSumOFRadius = sumOfRadius; sumOfRadius = 0; for (int i = 0; i < representative.length; i++) { int index = i; // the following would be significantly slow unless points are backed by arrays assignedPoints .sort((o1, o2) -> Double.compare(getPoint.apply(o1.index)[index], getPoint.apply(o2.index)[index])); double runningWeight = weight / 2; int position = 0; while (runningWeight >= 0 && position < assignedPoints.size()) { if (runningWeight > assignedPoints.get(position).weight) { runningWeight -= assignedPoints.get(position).weight; ++position; } else { break; } } if (position == assignedPoints.size()) { position--; } representative[index] = getPoint.apply(assignedPoints.get(position).index)[index]; } for (int j = 0; j < assignedPoints.size(); j++) { double addTerm = distance.apply(representative, getPoint.apply(assignedPoints.get(j).index)) * assignedPoints.get(j).weight; checkArgument(addTerm >= 0, "distances or weights cannot be negative"); sumOfRadius += addTerm; } return (previousSumOFRadius - sumOfRadius); } @Override public List> getAssignedPoints() { return assignedPoints; } // merges a center into another // this can be followed by a reassignment step; however the merger uses a // sigmoid based weightage // for robustness public void absorb(ICluster other, BiFunction distance) { List> representatives = other.getRepresentatives(); float[] closest = representatives.get(0).index; double dist = Double.MAX_VALUE; for (Weighted e : representatives) { double t = distance.apply(e.index, representative); checkArgument(t >= 0, "distances cannot be negative"); if (t < dist) { dist = t; closest = e.index; } } double otherWeight = other.getWeight(); double expRatio = exp(2 * (weight - otherWeight) / (weight + otherWeight)); double factor = expRatio / (1.0 + expRatio); for (int i = 0; i < representative.length; i++) { representative[i] = (float) (factor * representative[i] + (1 - factor) * closest[i]); } // distance is (approximately) the reverse of the ratio // this computation is meant to be approximate sumOfRadius += (weight * (1.0 - factor) + otherWeight * factor) * dist; weight += otherWeight; assignedPoints.addAll(other.getAssignedPoints()); other.reset(); } public double distance(float[] point, BiFunction distance) { double t = distance.apply(point, representative); checkArgument(t >= 0, "distance cannot be negative"); return t; } @Override public double distance(ICluster other, BiFunction distance) { return other.distance(representative, distance); } @Override public float[] primaryRepresentative(BiFunction distance) { return Arrays.copyOf(representative, representative.length); } @Override public List> getRepresentatives() { ArrayList> answer = new ArrayList<>(); answer.add(new Weighted<>(representative, (float) weight)); return answer; } } ================================================ FILE: Java/core/src/main/java/com/amazon/randomcutforest/summarization/GenericMultiCenter.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.summarization; import static com.amazon.randomcutforest.CommonUtils.checkArgument; import static java.lang.Math.min; import java.util.ArrayList; import java.util.List; import java.util.function.BiFunction; import java.util.function.Function; import com.amazon.randomcutforest.util.Weighted; /** * the following class abstracts a single centroid representation of a group of * points. The class is modeled after the well scattered representatives used in * CURE https://en.wikipedia.org/wiki/CURE_algorithm * * The number of representatives (refered as c in above) determines the possible * shapes that can be represented. Setting c=1 corresponds to stnadard centroid * based clustering * * The parameter shrinkage is slightly different from its usage in CURE, * although the idea of its use is similar. The main reason is that CURE was * designed for geometric spaces, and RCFSummarize is designed to support * arbitrary distance based clustering; once the user provides a distance * function from (R, R) into double based on ideas of STREAM * https://en.wikipedia.org/wiki/Data_stream_clustering In CURE, shrinkage was * used to create representatives close to the center of a cluster which is * impossible for generic types R. Instead shrinkage value in [0,1] corresponds * to morphing the distance function to "pretend" as if the distance is to the * primary representative of the cluster. * * This generic version does not store any assigned points. As a result the size * is bounded and these clusters are ideal for streaming algorithms where * resource usage would not increase with more data. */ public class GenericMultiCenter implements ICluster { public static int DEFAULT_NUMBER_OF_REPRESENTATIVES = 5; public static double DEFAULT_SHRINKAGE = 0.0; int numberOfRepresentatives = DEFAULT_NUMBER_OF_REPRESENTATIVES; double shrinkage = DEFAULT_SHRINKAGE; ArrayList> representatives; double weight; double sumOfRadius; double previousWeight = 0; double previousSumOFRadius = 0; GenericMultiCenter(R coordinate, float weight, double shrinkage, int numberOfRepresentatives) { // explicitly copied because array elements will change this.representatives = new ArrayList<>(); this.representatives.add(new Weighted<>(coordinate, weight)); this.weight = weight; this.numberOfRepresentatives = numberOfRepresentatives; this.shrinkage = shrinkage; } public static GenericMultiCenter initialize(R coordinate, float weight, double shrinkage, int numberOfRepresentatives) { checkArgument(shrinkage >= 0 && shrinkage <= 1.0, " parameter has to be in [0,1]"); checkArgument(numberOfRepresentatives > 0 && numberOfRepresentatives <= 100, " the number of representatives has to be in (0,100]"); return new GenericMultiCenter<>(coordinate, weight, shrinkage, numberOfRepresentatives); } // adds a point; only the index to keep space bounds lower // note that the weight may not be the entire weight of a point in case of a // "soft" assignment public void addPoint(int index, float weight, double dist, R point, BiFunction distance) { // accounting for the closest representative, if there are more than one Weighted closest = representatives.get(0); if (representatives.size() > 1) { double newDist = distance.apply(point, representatives.get(0).index); for (int i = 1; i < representatives.size(); i++) { double t = distance.apply(point, representatives.get(i).index); if (t < newDist) { newDist = t; closest = representatives.get(i); } } } closest.weight += weight; this.weight += weight; this.sumOfRadius += weight * dist; } // the following sets up reassignment of the coordinate based on the points // assigned to the center public void reset() { previousWeight = weight; weight = 0; for (int i = 0; i < representatives.size(); i++) { representatives.get(i).weight = 0; } previousSumOFRadius = sumOfRadius; sumOfRadius = 0; } public double averageRadius() { return (weight > 0) ? sumOfRadius / weight : 0; } // forces a nearest neighbor merge public double extentMeasure() { return (weight > 0) ? 0.5 * sumOfRadius / (numberOfRepresentatives * weight) : 0; } public double getWeight() { return weight; } // reassignment may not be meaningful for generic types, without additional // information public double recompute(Function getPoint, boolean flag, BiFunction distanceFunction) { return 0; } // merges a center into another public void absorb(ICluster other, BiFunction distance) { List> savedRepresentatives = this.representatives; savedRepresentatives.addAll(other.getRepresentatives()); this.representatives = new ArrayList<>(); int maxIndex = 0; float weight = savedRepresentatives.get(0).weight; for (int i = 1; i < savedRepresentatives.size(); i++) { if (weight < savedRepresentatives.get(i).weight) { weight = savedRepresentatives.get(i).weight; maxIndex = i; } } this.representatives.add(savedRepresentatives.get(maxIndex)); savedRepresentatives.remove(maxIndex); sumOfRadius += other.extentMeasure() * other.getWeight(); this.weight += other.getWeight(); /** * create a list of representatives based on the farthest point method, which * correspond to a well scattered set. See * https://en.wikipedia.org/wiki/CURE_algorithm */ while (savedRepresentatives.size() > 0 && this.representatives.size() < numberOfRepresentatives) { double farthestWeightedDistance = 0.0; int farthestIndex = Integer.MAX_VALUE; for (int j = 0; j < savedRepresentatives.size(); j++) { if (savedRepresentatives.get(j).weight > weight / (2 * numberOfRepresentatives)) { double newWeightedDist = distance.apply(this.representatives.get(0).index, savedRepresentatives.get(j).index) * savedRepresentatives.get(j).weight; checkArgument(newWeightedDist >= 0, " weights or distances cannot be negative"); for (int i = 1; i < this.representatives.size(); i++) { newWeightedDist = min(newWeightedDist, distance.apply(this.representatives.get(i).index, savedRepresentatives.get(j).index)) * savedRepresentatives.get(j).weight; checkArgument(newWeightedDist >= 0, " weights or distances cannot be negative"); } if (newWeightedDist > farthestWeightedDistance) { farthestWeightedDistance = newWeightedDist; farthestIndex = j; } } } if (farthestWeightedDistance == 0.0) { break; } this.representatives.add(savedRepresentatives.get(farthestIndex)); savedRepresentatives.remove(farthestIndex); } // absorb the remainder into existing representatives for (Weighted representative : savedRepresentatives) { double dist = distance.apply(representative.index, this.representatives.get(0).index); checkArgument(dist >= 0, "distance cannot be negative"); double minDist = dist; int minIndex = 0; for (int i = 1; i < this.representatives.size(); i++) { double newDist = distance.apply(this.representatives.get(i).index, representative.index); checkArgument(newDist >= 0, "distance cannot be negative"); if (newDist < minDist) { minDist = newDist; minIndex = i; } } this.representatives.get(minIndex).weight += representative.weight; sumOfRadius += representative.weight * ((1 - shrinkage) * minDist + dist * shrinkage); } } @Override public double distance(R point, BiFunction distanceFunction) { double dist = distanceFunction.apply(this.representatives.get(0).index, point); checkArgument(dist >= 0, "distance cannot be negative"); double newDist = dist; for (int i = 1; i < this.representatives.size(); i++) { newDist = min(newDist, distanceFunction.apply(this.representatives.get(i).index, point)); checkArgument(newDist >= 0, "distance cannot be negative"); } return (1 - shrinkage) * newDist + shrinkage * dist; } @Override public double distance(ICluster other, BiFunction distanceFunction) { List> representatives = other.getRepresentatives(); double dist = distanceFunction.apply(this.representatives.get(0).index, representatives.get(0).index); checkArgument(dist >= 0, "distance cannot be negative"); double newDist = dist; for (int i = 1; i < this.representatives.size(); i++) { for (int j = 1; j < representatives.size(); j++) { newDist = min(newDist, distanceFunction.apply(this.representatives.get(i).index, representatives.get(j).index)); checkArgument(newDist >= 0, "distance cannot be negative"); } } return (1 - shrinkage) * newDist + shrinkage * dist; } @Override public List> getRepresentatives() { return representatives; } } ================================================ FILE: Java/core/src/main/java/com/amazon/randomcutforest/summarization/ICluster.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.summarization; import java.util.Collections; import java.util.List; import java.util.function.BiFunction; import java.util.function.Function; import com.amazon.randomcutforest.util.Weighted; /** * a set of cunstions that a conceptual "cluster" should satisfy for any generic * distance based clustering where a distance function of type from (R,R) into * double is provided externally. It is not feasible (short of various * assumptions) to check for the validity of a distance function and the * clustering would not perform any validity checks. The user is referred to * https://en.wikipedia.org/wiki/Metric_(mathematics) * * It does not escape our attention that the clustering can use multiple * different distance functions over its execution. But such should be performed * with caution. */ public interface ICluster { // restting statistics for a potential reassignment void reset(); double averageRadius(); // a measure of the noise/blur around a cluster; for single centroid clustering // this is the average distance of a point from a cluster representative double extentMeasure(); // weight computation double getWeight(); // merge another cluster of same type void absorb(ICluster other, BiFunction distance); // distance of apoint from a cluster, has to be non-negative double distance(R point, BiFunction distance); // distance of another cluster from this cluster, has to be non negative double distance(ICluster other, BiFunction distance); // all potential representativess of a cluster these are typically chosen to be // well scattered // by default the first entry is the primary representative List> getRepresentatives(); // a primary representative of the cluster; by default it is the first in the // list of representatives // this additional function allows an option for optimization of runtime as well // as alternate // representations. For example the distance metric can be altered to be a fixed // linear combination // of the primary and secondary representatives, as in CURE // https://en.wikipedia.org/wiki/CURE_algorithm default R primaryRepresentative(BiFunction distance) { return getRepresentatives().get(0).index; } // Some of the algorithms, in particular the geometric ones may store the // assigned points for // iterative refinement. However that can be extremely inefficient if the // distance measure does not // have sufficient range, for example, string edit distances (for bounded // strings) are bounded in a // short interval. A soft assignment would create multiple copies of points (as // is appropriate) and // that can be significantly slower. default List> getAssignedPoints() { return Collections.emptyList(); } // optimize the cluster representation based on assigned points; this is classic // iterative optimization // useful in EM type algorithms /** * optimize the cluster representation based on assigned points; this is classic * iterative optimization useful in EM type algorithms * * @param getPoint a function that provides a point given an integer index * @param force it set as true perform a slow and accurate recomputation; * otherwise approximation would suffice * @param distance the distance function * @return a measure of improvement (if any); this can be useful in the future * as a part of the stopping condition */ double recompute(Function getPoint, boolean force, BiFunction distance); // adding a point to a cluster, and possibly updates the extent measure and the // assigned points void addPoint(int index, float weight, double dist, R point, BiFunction distance); } ================================================ FILE: Java/core/src/main/java/com/amazon/randomcutforest/summarization/MultiCenter.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.summarization; import static com.amazon.randomcutforest.CommonUtils.checkArgument; import java.util.ArrayList; import java.util.List; import java.util.function.BiFunction; import java.util.function.Function; import com.amazon.randomcutforest.util.Weighted; public class MultiCenter extends GenericMultiCenter { ArrayList> assignedPoints; MultiCenter(float[] coordinate, float weight, double shrinkage, int numberOfRepresentatives) { super(coordinate, weight, shrinkage, numberOfRepresentatives); this.assignedPoints = new ArrayList<>(); } public static MultiCenter initialize(float[] coordinate, float weight, double shrinkage, int numberOfRepresentatives) { checkArgument(shrinkage >= 0 && shrinkage <= 1.0, " parameter has to be in [0,1]"); checkArgument(numberOfRepresentatives > 0 && numberOfRepresentatives <= 100, " the number of representatives has to be in (0,100]"); return new MultiCenter(coordinate, weight, shrinkage, numberOfRepresentatives); } public void addPoint(int index, float weight, double dist, float[] point, BiFunction distance) { super.addPoint(index, weight, dist, point, distance); assignedPoints.add(new Weighted<>(index, weight)); } // the following sets up reassignment of the coordinate based on the points // assigned to the center public void reset() { super.reset(); assignedPoints = new ArrayList<>(); } // a standard reassignment using the median values and NOT the mean; the mean is // unlikely to // provide robust convergence public double recompute(Function getPoint, boolean force, BiFunction distanceFunction) { if (assignedPoints.size() == 0 || weight == 0.0 || !force) { return 0; } previousSumOFRadius = sumOfRadius; sumOfRadius = 0; for (int j = 0; j < assignedPoints.size(); j++) { // distance will check for -negative internally double addTerm = distance(getPoint.apply(assignedPoints.get(j).index), distanceFunction) * assignedPoints.get(j).weight; sumOfRadius += addTerm; } return (previousSumOFRadius - sumOfRadius); } @Override public List> getAssignedPoints() { return assignedPoints; } } ================================================ FILE: Java/core/src/main/java/com/amazon/randomcutforest/summarization/Summarizer.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.summarization; import static com.amazon.randomcutforest.CommonUtils.checkArgument; import static com.amazon.randomcutforest.util.Weighted.createSample; import static com.amazon.randomcutforest.util.Weighted.prefixPick; import static java.lang.Math.max; import java.util.ArrayList; import java.util.Arrays; import java.util.Comparator; import java.util.List; import java.util.Random; import java.util.function.BiFunction; import java.util.function.Function; import com.amazon.randomcutforest.returntypes.SampleSummary; import com.amazon.randomcutforest.util.Weighted; public class Summarizer { /** * a factor that controls weight assignment for soft clustering; this is the * multiple of the minimum distance and should be greater or equal 1. */ public static double WEIGHT_ALLOCATION_THRESHOLD = 1.25; /** * the following determines the ratio between the sum of the (average) radius * and the separation between centers for a merge; ratio greater than 1 means * significant overlap a ratio of 0 means merge closest pairs without * consideration of separartion * **/ public static double DEFAULT_SEPARATION_RATIO_FOR_MERGE = 0.8; public static int PHASE2_THRESHOLD = 2; public static int LENGTH_BOUND = 1000; public static Double L1distance(float[] a, float[] b) { double dist = 0; for (int i = 0; i < a.length; i++) { dist += Math.abs(a[i] - b[i]); } return dist; } public static Double L2distance(float[] a, float[] b) { double dist = 0; for (int i = 0; i < a.length; i++) { double t = Math.abs(a[i] - b[i]); dist += t * t; } return Math.sqrt(dist); } public static Double LInfinitydistance(float[] a, float[] b) { double dist = 0; for (int i = 0; i < a.length; i++) { dist = max(Math.abs(a[i] - b[i]), dist); } return dist; } /** * a function that reassigns points to clusters * * @param sampledPoints a list of sampled points with weights * @param clusters a list of current clusters, because random access to * the elements is necessary * @param distance a distance function * @param parallelEnabled a flag enabling limited parallelism; only during * cluster by cluster recomputation. Using parallel mode * during the assignment of points does not seem to help */ public static void assignAndRecompute(List> sampledPoints, Function getPoint, List> clusters, BiFunction distance, boolean parallelEnabled) { checkArgument(clusters.size() > 0, " cannot be empty list of clusters"); checkArgument(sampledPoints.size() > 0, " cannot be empty list of points"); for (ICluster cluster : clusters) { cluster.reset(); } for (Weighted point : sampledPoints) { if (point.weight > 0) { double[] dist = new double[clusters.size()]; Arrays.fill(dist, Double.MAX_VALUE); double minDist = Double.MAX_VALUE; int minDistNbr = -1; for (int i = 0; i < clusters.size(); i++) { // will check for negative distances dist[i] = clusters.get(i).distance(getPoint.apply(point.index), distance); if (minDist > dist[i]) { minDist = dist[i]; minDistNbr = i; } if (minDist == 0) { break; } } if (minDist == 0) { clusters.get(minDistNbr).addPoint(point.index, point.weight, 0, getPoint.apply(point.index), distance); } else { double sum = 0; for (int i = 0; i < clusters.size(); i++) { if (dist[i] <= WEIGHT_ALLOCATION_THRESHOLD * minDist) { sum += minDist / dist[i]; // setting up harmonic mean } } for (int i = 0; i < clusters.size(); i++) { if (dist[i] <= WEIGHT_ALLOCATION_THRESHOLD * minDist) { // harmonic mean clusters.get(i).addPoint(point.index, (float) (point.weight * minDist / (dist[i] * sum)), dist[i], getPoint.apply(point.index), distance); } } } } } if (parallelEnabled) { clusters.parallelStream().forEach(e -> e.recompute(getPoint, true, distance)); } else { clusters.stream().forEach(e -> e.recompute(getPoint, true, distance)); } } /** * The core subroutine for iterative clustering used herein. The clustering * algorithm borrows from CURE https://en.wikipedia.org/wiki/CURE_algorithm, * which used sampling as a tradeoff of representationa accuracy versus * algorithmic efficiency. Note however random sampling can also perform * denoising and reduce space as a filtering mechanism. Note that hierarchical * iterative merging strategies can be proven to not degrade clustering * https://en.wikipedia.org/wiki/Data_stream_clustering with the benefit of * small space. The algorithm herein proceeds in three phases, where the first * phase corresponds from the initial seeding to about twice the maximum number * of clusters one wishes to consider. The second phase corresponds to reducing * that number to the maximum allowable number. The third phase corresponds to * continuing the clustering as long as the conditions are similar to the end of * phase two, thereby enabling us to use a rough estimate for the maximum * allowed. By default, recomputation of the cluster makes sense in phases 2 and * 3 -- however can be enabled for phase 1 as well, thereby enabling the regular * K-Means algorithm to be expressed in the below algorithm as well. The * algorithm can also express Minimum Spanning Tree based clustering with * repeated merging of closest pair (which is a capability derived from CURE) * * The primary reason for the number of parameters is the ability to invoke this * function without creating a copy of the points (or equivalent large objects), * and hence the functions as parameters * * @param maxAllowed number of maximum clusters one is interested in * @param initial an initial number of sampled centers to start * from * @param stopAt a hard lower bound on the number of clusters * @param refs a (possibly sampled) list of references with * weight * @param getPoint a function which retrives the point/object given * an index in the refs * @param distance a distance function * @param clusterInitializer a function that creates a cluster given an object * aand a weight * @param seed a random seed * @param parallelEnabled enabling parallel computation in the first phase * when points are assigned to different sampled * centers; and the centers are possibly adjusted * @param phase2GlobalReassign a flag that determines if the points would be * reassigned when the clusters fall below 1.2 * * maxAllowed -- this serves as a denoising. * @param overlapParameter a parameter that controls the ordering of the * merges as well as the stopping condition of the * merges * @param previousClustering a possibly null list of clusters seen previously, * used as zero weight seeds to smoothen the * continuous clustering * @param type of object being clustered * @return a list of clusters */ public static List> iterativeClustering(int maxAllowed, int initial, int stopAt, List> refs, Function getPoint, BiFunction distance, BiFunction> clusterInitializer, long seed, boolean parallelEnabled, boolean phase2GlobalReassign, double overlapParameter, List> previousClustering) { checkArgument(refs.size() > 0, "empty list, nothing to do"); checkArgument(stopAt > 0, "has to stop at 1 cluster"); checkArgument(stopAt <= maxAllowed, "cannot stop before achieving the limit"); Random rng = new Random(seed); double sampledSum = refs.stream().map(e -> { checkArgument(Double.isFinite(e.weight), " weights have to be finite"); checkArgument(e.weight >= 0.0, () -> "negative weights are not meaningful" + e.weight); return (double) e.weight; }).reduce(0.0, Double::sum); checkArgument(sampledSum > 0, " total weight has to be positive"); ArrayList> centers = new ArrayList<>(); if (refs.size() < 10 * (initial + 5)) { for (Weighted point : refs) { centers.add(clusterInitializer.apply(getPoint.apply(point.index), 0f)); } } else { for (int k = 0; k < 2 * (initial + 5); k++) { double wt = rng.nextDouble() * sampledSum; Weighted picked = prefixPick(refs, wt); centers.add(clusterInitializer.apply(getPoint.apply(picked.index), 0f)); } } if (previousClustering != null) { for (ICluster previousCluster : previousClustering) { List> representatives = previousCluster.getRepresentatives(); for (Weighted representative : representatives) { centers.add(clusterInitializer.apply(representative.index, 0f)); } } } assignAndRecompute(refs, getPoint, centers, distance, parallelEnabled); // assignment would change weights, sorting in non-decreasing order centers.sort(Comparator.comparingDouble(ICluster::getWeight)); while (centers.get(0).getWeight() == 0) { centers.remove(0); } double phase3Distance = 0; double runningPhase3Distance = 0; boolean keepReducingCenters = (centers.size() > maxAllowed); while (keepReducingCenters) { double measure = 0; double measureDist = Double.MAX_VALUE; int lower = 0; int firstOfMerge = lower; int secondOfMerge = lower + 1;// will be reset before exiting the loop boolean foundMerge = false; double minDist = Double.MAX_VALUE; while (lower < centers.size() - 1 && !foundMerge) { // we will keep searching int minNbr = -1; for (int j = lower + 1; j < centers.size(); j++) { double dist = centers.get(lower).distance(centers.get(j), distance); if (dist == 0) { foundMerge = true; firstOfMerge = lower; secondOfMerge = minNbr = j; minDist = measureDist = 0.0; break; } else { if (minDist > dist) { minNbr = j; minDist = dist; } double temp = (centers.get(lower).extentMeasure() + centers.get(j).extentMeasure() + phase3Distance) / dist; if (temp > overlapParameter && measure < temp) { firstOfMerge = lower; secondOfMerge = j; measure = temp; measureDist = dist; } } } if (lower == 0 && !foundMerge) { measureDist = minDist; // this is set assuming we may be interested in merging the minimum weight // cluster which corresponds to lower == 0 secondOfMerge = minNbr; } ++lower; } int inital = centers.size(); if (inital > maxAllowed || foundMerge || (inital > stopAt && measure > overlapParameter)) { centers.get(secondOfMerge).absorb(centers.get(firstOfMerge), distance); if (phase2GlobalReassign && centers.size() <= PHASE2_THRESHOLD * maxAllowed + 1) { centers.remove(firstOfMerge); assignAndRecompute(refs, getPoint, centers, distance, parallelEnabled); } else { centers.get(secondOfMerge).recompute(getPoint, false, distance); centers.remove(firstOfMerge); } centers.sort(Comparator.comparingDouble(ICluster::getWeight)); while (centers.get(0).getWeight() == 0.0) { // this line is reachable via zeroTest() in // SampleSummaryTest centers.remove(0); } if (inital < 1.2 * maxAllowed + 1) { // phase 3 kicks in; but this will execute at most once // note that measureDist can be 0 as well runningPhase3Distance = max(runningPhase3Distance, measureDist); if (inital > maxAllowed && centers.size() <= maxAllowed) { phase3Distance = runningPhase3Distance; } } } else { keepReducingCenters = false; } } // sort in decreasing weight centers.sort((o1, o2) -> Double.compare(o2.getWeight(), o1.getWeight())); return centers; } /** * the following function returns a summary of the input points * * @param points points with associated weights * @param maxAllowed the maximum number of clusters/summary points * @param initial the initial number of clusters/summary points, * chosen at random * @param stopAt a hard lower bound on the number of clusters * @param phase2GlobalReassign a flag that performs global reassignments when * the number of clusters is in the range * [maxAllowed, ceil(1.2*maxAllowed)] * @param overlapParameter a control for merging clusters * @param distance a distance function for the points, that * determines the order of the reverse delete * however the EM like step uses L1 measure (to be * robust to noise) * @param clusterInitializer a function that creates the cluster type given a * single object and a weight * @param seed a random seed for controlling the randomness * @param parallelEnabled flag enabling (limited) parallelism * @param previousClustering any previous clustering that can be used as zero * weight seeds to ensure smoothness * @return a clustering of the input points (Note: the median returned is an * approximate median; exact computation is unlikely to be critical for * true applications of summarization) */ public static List> summarize(List> points, int maxAllowed, int initial, int stopAt, boolean phase2GlobalReassign, double overlapParameter, BiFunction distance, BiFunction> clusterInitializer, long seed, boolean parallelEnabled, List> previousClustering) { checkArgument(maxAllowed < 100, "are you sure you want more elements in the summary?"); checkArgument(maxAllowed <= initial, "initial parameter should be at least maximum allowed in final result"); double totalWeight = points.stream().map(e -> { checkArgument(Double.isFinite(e.weight), " weights have to be finite"); checkArgument(e.weight >= 0.0, () -> "negative weights are not meaningful" + e.weight); return (double) e.weight; }).reduce(0.0, Double::sum); checkArgument(totalWeight > 0, " total weight has to be positive"); Random rng = new Random(seed); // the following list is explicity copied and sorted for potential efficiency List> sampledPoints = createSample(points, rng.nextLong(), 5 * LENGTH_BOUND, 0.005, 1.0); ArrayList> refs = new ArrayList<>(); for (int i = 0; i < sampledPoints.size(); i++) { refs.add(new Weighted<>(i, sampledPoints.get(i).weight)); } Function getPoint = (i) -> sampledPoints.get(i).index; return iterativeClustering(maxAllowed, initial, stopAt, refs, getPoint, distance, clusterInitializer, rng.nextLong(), parallelEnabled, phase2GlobalReassign, overlapParameter, previousClustering); } // same as above, specific for single centroid clustering of float[] // with an explicit stopping condition as well as a global reassignment option public static List> singleCentroidSummarize(List> points, int maxAllowed, int initial, int stopAt, boolean phase2GlobalReassign, BiFunction distance, long seed, boolean parallelEnabled, List> previousClustering) { return summarize(points, maxAllowed, initial, stopAt, phase2GlobalReassign, DEFAULT_SEPARATION_RATIO_FOR_MERGE, distance, Center::initialize, seed, parallelEnabled, previousClustering); } /** * the following function returns a summary of the input points * * @param points points with associated weights * @param maxAllowed the maximum number of clusters/summary points * @param initial the initial number of clusters/summary points, chosen * at random * @param phase1reassign (this parameter is ignored in the current version, but * the signature is unchanged for convenience) * @param distance a distance function for the points, that determines * the order of the reverse delete however the EM like * step uses L1 measure (to be robust to noise) * @param seed a random seed for controlling the randomness * @param parallelEnabled flag enabling (limited) parallelism * @return a summary of the input points (Note: the median returned is an * approximate median; exact computation is unlikely to be critical for * true applications of summarization) */ public static SampleSummary summarize(List> points, int maxAllowed, int initial, boolean phase1reassign, BiFunction distance, long seed, boolean parallelEnabled, int numberOfReps, double shrinkage) { checkArgument(maxAllowed < 100, "are you sure you want more elements in the summary?"); checkArgument(maxAllowed <= initial, "initial parameter should be at least maximum allowed in final result"); double totalWeight = points.stream().map(e -> { checkArgument(Double.isFinite(e.weight), " weights have to be finite"); checkArgument(e.weight >= 0.0, () -> "negative weights are not meaningful" + e.weight); return (double) e.weight; }).reduce(0.0, Double::sum); checkArgument(totalWeight > 0, " total weight has to be positive"); Random rng = new Random(seed); // the following list is explicity copied and sorted for potential efficiency List> sampledPoints = createSample(points, rng.nextLong(), 5 * LENGTH_BOUND, 0.005, 1.0); List> centers = (numberOfReps == 1) ? summarize(sampledPoints, maxAllowed, initial, 1, true, DEFAULT_SEPARATION_RATIO_FOR_MERGE, distance, Center::initialize, seed, parallelEnabled, null) : multiSummarizeWeighted(sampledPoints, maxAllowed, initial, 1, false, DEFAULT_SEPARATION_RATIO_FOR_MERGE, distance, seed, parallelEnabled, shrinkage, numberOfReps); int num = centers.stream().mapToInt(x -> x.getRepresentatives().size()).sum(); float[][] pointList = new float[num][]; float[] likelihood = new float[num]; float[] measure = new float[num]; int dimensions = centers.get(0).primaryRepresentative(distance).length; int count = 0; for (int i = 0; i < centers.size(); i++) { for (Weighted rep : centers.get(i).getRepresentatives()) { pointList[count] = Arrays.copyOf(rep.index, dimensions); likelihood[count] = (float) (rep.weight / totalWeight); measure[count++] = (float) centers.get(i).averageRadius(); } } return new SampleSummary(sampledPoints, pointList, likelihood, measure); } public static SampleSummary summarize(List> points, int maxAllowed, int initial, boolean phase1reassign, BiFunction distance, long seed, boolean parallelEnabled) { return summarize(points, maxAllowed, initial, phase1reassign, distance, seed, parallelEnabled, 1, 0); } /** * Same as previous over a flat collection of unweighted float[] * * @param points points represented by float[][] * @param maxAllowed maximum number of clusters in output * @param initial initial number of points to seed; a control parameter * that serves both as a denoiser, as well as as a * facilitator of coninuity (large numbers would * correspond to MST like clustering) * @param reassignPerStep unusued in current version * @param distance distance metric over float [] * @param seed random seed * @param parallelEnabled flag enabling (limited) parallelism * @return a list of centers with weights */ public static SampleSummary summarize(float[][] points, int maxAllowed, int initial, boolean reassignPerStep, BiFunction distance, long seed, Boolean parallelEnabled) { ArrayList> weighted = new ArrayList<>(); for (float[] point : points) { weighted.add(new Weighted<>(point, 1.0f)); } return summarize(weighted, maxAllowed, initial, reassignPerStep, distance, seed, parallelEnabled); } /** * same as before with common cases filled in, used in analysis of * ConditionalSamples * * @param points points in ProjectedPoint{} * @param maxAllowed maximum number of groups/clusters * @param initial a parameter controlling the initialization * @param reassignPerStep if reassignment is to be performed each step * @param seed random seed * @return a summarization */ public static SampleSummary l2summarize(List> points, int maxAllowed, int initial, boolean reassignPerStep, long seed) { return summarize(points, maxAllowed, initial, reassignPerStep, Summarizer::L2distance, seed, false); } /** * Same as above, with the most common use cases filled in * * @param points points in float[][], each of weight 1.0 * @param maxAllowed maximum number of clusters one is interested in * @param seed random seed * @return a summarization */ public static SampleSummary l2summarize(float[][] points, int maxAllowed, long seed) { return summarize(points, maxAllowed, 4 * maxAllowed, false, Summarizer::L2distance, seed, false); } /** * * @param points points represented by R[] * @param maxAllowed maximum number of clusters in output * @param initial initial number of points to seed; a control * parameter that serves both as a denoiser, as * well as as a facilitator of coninuity (large * numbers would correspond to MST like * clustering) * @param phase2GlobalReassign a boolean determining global reassignment * @param overlapParameter a parameter controlling order of mergers * @param distance distance metric over float [] * @param seed random seed * @param parallelEnabled flag enabling (limited) parallelism * @param shrinkage a parameter that morphs from centroidal * behavior (=1) to robust Minimum Spanning Tree * (=0) * @param numberOfRepresentatives the number of representatives ina multicentrod * representation used to cluster potentially * non-spherical shapes * @return a list of centers with weights */ public static List> multiSummarize(List points, int maxAllowed, int initial, int stopAt, boolean phase2GlobalReassign, double overlapParameter, BiFunction distance, long seed, Boolean parallelEnabled, double shrinkage, int numberOfRepresentatives) { ArrayList> weighted = new ArrayList<>(); for (R point : points) { weighted.add(new Weighted<>(point, 1.0f)); } return multiSummarizeWeighted(weighted, maxAllowed, initial, stopAt, phase2GlobalReassign, overlapParameter, distance, seed, parallelEnabled, shrinkage, numberOfRepresentatives); } public static List> multiSummarizeWeighted(List> points, int maxAllowed, int initial, int stopAt, boolean phase2GlobalReassign, double overlapParameter, BiFunction distance, long seed, boolean parallelEnabled, double shrinkage, int numberOfRepresentatives) { BiFunction> clusterInitializer = (a, b) -> GenericMultiCenter.initialize(a, b, shrinkage, numberOfRepresentatives); return summarize(points, maxAllowed, initial, stopAt, phase2GlobalReassign, overlapParameter, distance, clusterInitializer, seed, parallelEnabled, null); } // same as above, different input public static List> multiSummarize(R[] points, int maxAllowed, int initial, int stopAt, boolean phase2GlobalReassign, double overlapParameter, BiFunction distance, long seed, Boolean parallelEnabled, double shrinkage, int numberOfRepresentatives) { ArrayList> weighted = new ArrayList<>(); for (R point : points) { weighted.add(new Weighted<>(point, 1.0f)); } BiFunction> clusterInitializer = (a, b) -> GenericMultiCenter.initialize(a, b, shrinkage, numberOfRepresentatives); return summarize(weighted, maxAllowed, initial, stopAt, phase2GlobalReassign, overlapParameter, distance, clusterInitializer, seed, parallelEnabled, null); } // same as above, with multicenter instead of generic public static List> multiSummarize(float[][] points, int maxAllowed, double shrinkage, boolean parallelEnabled, int numberOfRepresentatives, long seed) { ArrayList> weighted = new ArrayList<>(); for (float[] point : points) { weighted.add(new Weighted<>(point, 1.0f)); } return multiSummarizeWeighted(weighted, maxAllowed, shrinkage, parallelEnabled, numberOfRepresentatives, seed); } public static List> multiSummarizeWeighted(List> points, int maxAllowed, double shrinkage, boolean parallelEnabled, int numberOfRepresentatives, long seed) { BiFunction> clusterInitializer = (a, b) -> MultiCenter.initialize(a, b, shrinkage, numberOfRepresentatives); return summarize(points, maxAllowed, 4 * maxAllowed, 1, true, DEFAULT_SEPARATION_RATIO_FOR_MERGE, Summarizer::L2distance, clusterInitializer, seed, parallelEnabled, null); } } ================================================ FILE: Java/core/src/main/java/com/amazon/randomcutforest/tree/AbstractNodeStore.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.tree; import static com.amazon.randomcutforest.CommonUtils.checkArgument; import java.util.Stack; import com.amazon.randomcutforest.store.IndexIntervalManager; /** * A fixed-size buffer for storing interior tree nodes. An interior node is * defined by its location in the tree (parent and child nodes), its random cut, * and its bounding box. The NodeStore class uses arrays to store these field * values for a collection of nodes. An index in the store can be used to look * up the field values for a particular node. * * The internal nodes (handled by this store) corresponds to * [0..upperRangeLimit] * * If we think of an array of Node objects as being row-oriented (where each row * is a Node), then this class is analogous to a column-oriented database of * Nodes. * */ public abstract class AbstractNodeStore { public static int Null = -1; public static boolean DEFAULT_STORE_PARENT = false; /** * the number of internal nodes; the nodes will range from 0..capacity-1 the * value capacity would correspond to "not yet set" the values Y= capacity+1+X * correspond to pointstore index X note that capacity + 1 + X = * number_of_leaves + X */ protected final int capacity; protected final float[] cutValue; protected IndexIntervalManager freeNodeManager; public AbstractNodeStore(AbstractNodeStore.Builder builder) { this.capacity = builder.capacity; if ((builder.leftIndex == null)) { freeNodeManager = new IndexIntervalManager(capacity); } cutValue = (builder.cutValues != null) ? builder.cutValues : new float[capacity]; } protected abstract int addNode(Stack pathToRoot, float[] point, long sendex, int pointIndex, int childIndex, int childMassIfLeaf, int cutDimension, float cutValue, BoundingBox box); public boolean isLeaf(int index) { return index > capacity; } public boolean isInternal(int index) { return index < capacity && index >= 0; } public abstract void assignInPartialTree(int savedParent, float[] point, int childReference); public abstract int getLeftIndex(int index); public abstract int getRightIndex(int index); public abstract int getParentIndex(int index); public abstract void setRoot(int index); protected abstract void decreaseMassOfInternalNode(int node); protected abstract void increaseMassOfInternalNode(int node); protected void manageInternalNodesPartial(Stack path) { while (!path.isEmpty()) { int index = path.pop()[0]; increaseMassOfInternalNode(index); } } public Stack getPath(int root, float[] point, boolean verbose) { int node = root; Stack answer = new Stack<>(); answer.push(new int[] { root, capacity }); while (isInternal(node)) { double y = getCutValue(node); if (leftOf(node, point)) { answer.push(new int[] { getLeftIndex(node), getRightIndex(node) }); node = getLeftIndex(node); } else { // this would push potential Null, of node == capacity // that would be used for tree reconstruction answer.push(new int[] { getRightIndex(node), getLeftIndex(node) }); node = getRightIndex(node); } } return answer; } public abstract void deleteInternalNode(int index); public abstract int getMass(int index); protected boolean leftOf(float cutValue, int cutDimension, float[] point) { return point[cutDimension] <= cutValue; } public boolean leftOf(int node, float[] point) { int cutDimension = getCutDimension(node); return leftOf(cutValue[node], cutDimension, point); } public int getSibling(int node, int parent) { int sibling = getLeftIndex(parent); if (node == sibling) { sibling = getRightIndex(parent); } return sibling; } public abstract void spliceEdge(int parent, int node, int newNode); public abstract void replaceParentBySibling(int grandParent, int parent, int node); public abstract int getCutDimension(int index); public double getCutValue(int index) { return cutValue[index]; } protected boolean toLeft(float[] point, int currentNodeOffset) { return point[getCutDimension(currentNodeOffset)] <= cutValue[currentNodeOffset]; } public abstract int[] getCutDimension(); public abstract int[] getRightIndex(); public abstract int[] getLeftIndex(); public float[] getCutValues() { return cutValue; } public int getCapacity() { return capacity; } public int size() { return capacity - freeNodeManager.size(); } /** * a builder */ public static class Builder> { protected int capacity; protected int[] leftIndex; protected int[] rightIndex; protected int[] cutDimension; protected float[] cutValues; protected boolean storeParent = DEFAULT_STORE_PARENT; protected int dimension; protected int root; // maximum number of points in the store public T capacity(int capacity) { this.capacity = capacity; return (T) this; } public T dimension(int dimension) { this.dimension = dimension; return (T) this; } public T useRoot(int root) { this.root = root; return (T) this; } public T leftIndex(int[] leftIndex) { this.leftIndex = leftIndex; return (T) this; } public T rightIndex(int[] rightIndex) { this.rightIndex = rightIndex; return (T) this; } public T cutDimension(int[] cutDimension) { this.cutDimension = cutDimension; return (T) this; } public T cutValues(float[] cutValues) { this.cutValues = cutValues; return (T) this; } public T storeParent(boolean storeParent) { this.storeParent = storeParent; return (T) this; } public AbstractNodeStore build() { if (leftIndex == null) { checkArgument(rightIndex == null, " incorrect option of right indices"); checkArgument(cutValues == null, "incorrect option of cut values"); checkArgument(cutDimension == null, " incorrect option of cut dimensions"); } else { checkArgument(rightIndex.length == capacity, " incorrect length of right indices"); checkArgument(cutValues.length == capacity, "incorrect length of cut values"); checkArgument(cutDimension.length == capacity, " incorrect length of cut dimensions"); } // capacity is numbner of internal nodes if (capacity < 256 && dimension <= 256) { return new NodeStoreSmall(this); } else if (capacity < Character.MAX_VALUE && dimension <= Character.MAX_VALUE) { return new NodeStoreMedium(this); } else { return new NodeStoreLarge(this); } } } public static Builder builder() { return new Builder(); } } ================================================ FILE: Java/core/src/main/java/com/amazon/randomcutforest/tree/BoundingBox.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.tree; import static com.amazon.randomcutforest.CommonUtils.checkArgument; import static com.amazon.randomcutforest.CommonUtils.checkState; import java.util.Arrays; /** * A single precision implementation of AbstractBoundingBox which also satisfies * the interface for Visitor classes */ public class BoundingBox implements IBoundingBoxView { /** * An array containing the minimum value corresponding to each dimension. */ protected final float[] minValues; /** * An array containing the maximum value corresponding to each dimensions */ protected final float[] maxValues; /** * The sum of side lengths defined by this bounding box. */ protected double rangeSum; public BoundingBox(float[] point) { minValues = maxValues = point; // a copy in not needed because mergedBox would create a copy // addPoint, addBox would also create copies rangeSum = 0.0; } /** * Create a new BoundingBox with the given minimum values and maximum values. * * @param minValues The minimum values for each coordinate. * @param maxValues The maximum values for each coordinate */ public BoundingBox(final float[] minValues, final float[] maxValues, double sum) { this.minValues = minValues; this.maxValues = maxValues; rangeSum = sum; } public BoundingBox(final float[] first, final float[] second) { checkArgument(first.length == second.length, " incorrect lengths in box"); minValues = new float[first.length]; maxValues = new float[first.length]; rangeSum = 0; for (int i = 0; i < minValues.length; ++i) { minValues[i] = Math.min(first[i], second[i]); maxValues[i] = Math.max(first[i], second[i]); rangeSum += maxValues[i] - minValues[i]; } } public BoundingBox copy() { return new BoundingBox(Arrays.copyOf(minValues, minValues.length), Arrays.copyOf(maxValues, maxValues.length), rangeSum); } public BoundingBox getMergedBox(IBoundingBoxView otherBox) { float[] minValuesMerged = new float[minValues.length]; float[] maxValuesMerged = new float[minValues.length]; double sum = 0.0; for (int i = 0; i < minValues.length; ++i) { minValuesMerged[i] = Math.min(minValues[i], (float) otherBox.getMinValue(i)); maxValuesMerged[i] = Math.max(maxValues[i], (float) otherBox.getMaxValue(i)); sum += maxValuesMerged[i] - minValuesMerged[i]; } return new BoundingBox(minValuesMerged, maxValuesMerged, sum); } public double probabilityOfCut(float[] point) { double range = 0; for (int i = 0; i < point.length; i++) { range += Math.max(minValues[i] - point[i], 0); } for (int i = 0; i < point.length; i++) { range += Math.max(point[i] - maxValues[i], 0); } if (range == 0) { return 0; } else if (rangeSum == 0) { return 1; } else { return range / (range + rangeSum); } } public BoundingBox getMergedBox(float[] point) { checkArgument(point.length == minValues.length, "incorrect length"); return copy().addPoint(point); } public float[] getMaxValues() { return maxValues; } public float[] getMinValues() { return minValues; } public BoundingBox addPoint(float[] point) { checkArgument(minValues.length == point.length, "incorrect length"); checkArgument(minValues != maxValues, "not a mutable box"); rangeSum = 0; for (int i = 0; i < point.length; ++i) { minValues[i] = Math.min(minValues[i], point[i]); } for (int i = 0; i < point.length; ++i) { maxValues[i] = Math.max(maxValues[i], point[i]); } for (int i = 0; i < point.length; ++i) { rangeSum += maxValues[i] - minValues[i]; } return this; } public BoundingBox addBox(BoundingBox otherBox) { checkState(minValues != maxValues, "not a mutable box"); rangeSum = 0; for (int i = 0; i < minValues.length; ++i) { minValues[i] = Math.min(minValues[i], otherBox.minValues[i]); } for (int i = 0; i < minValues.length; ++i) { maxValues[i] = Math.max(maxValues[i], otherBox.maxValues[i]); } for (int i = 0; i < minValues.length; ++i) { rangeSum += maxValues[i] - minValues[i]; } return this; } public int getDimensions() { return minValues.length; } /** * @return the sum of side lengths for this BoundingBox. */ public double getRangeSum() { return rangeSum; } /** * Gets the max value of the specified dimension. * * @param dimension the dimension for which we need the max value * @return the max value of the specified dimension */ public double getMaxValue(final int dimension) { return maxValues[dimension]; } /** * Gets the min value of the specified dimension. * * @param dimension the dimension for which we need the min value * @return the min value of the specified dimension */ public double getMinValue(final int dimension) { return minValues[dimension]; } /** * Returns true if the given point is contained in this bounding box. This is * equivalent to the point being a member of the set defined by this bounding * box. * * @param point with which we're performing the comparison * @return whether the point is contained by the bounding box */ public boolean contains(float[] point) { checkArgument(point.length == minValues.length, " incorrect lengths"); for (int i = 0; i < minValues.length; i++) { if (minValues[i] > point[i] || maxValues[i] < point[i]) { return false; } } return true; } public boolean contains(BoundingBox otherBox) { checkArgument(otherBox.minValues.length == minValues.length, " incorrect lengths"); return contains(otherBox.minValues) && contains(otherBox.maxValues); } public double getRange(final int dimension) { return maxValues[dimension] - minValues[dimension]; } @Override public String toString() { return String.format("BoundingBox(%s, %s)", Arrays.toString(minValues), Arrays.toString(maxValues)); } /** * Two bounding boxes are considered equal if they have the same dimensions and * all their min values and max values are the same. Min and max values are * compared as primitive doubles using ==, so two bounding boxes are not equal * if their min and max values are merely very close. * * @param other An object to test for equality * @return true if other is a bounding box with the same min and max values */ @Override public boolean equals(Object other) { if (!(other instanceof BoundingBox)) { return false; } BoundingBox otherBox = (BoundingBox) other; return Arrays.equals(minValues, otherBox.minValues) && Arrays.equals(maxValues, otherBox.maxValues); } } ================================================ FILE: Java/core/src/main/java/com/amazon/randomcutforest/tree/Cut.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.tree; /** * A Cut represents a division of space into two half-spaces. Cuts are used to * define the tree structure in {@link RandomCutTree}, and they determine the * standard tree traversal path defined in {@link RandomCutTree#traverse}. */ public class Cut { private final int dimension; private final double value; /** * Create a new Cut with the given dimension and value. * * @param dimension The 0-based index of the dimension that the cut is made in. * @param value The spatial value of the cut. */ public Cut(int dimension, double value) { this.dimension = dimension; this.value = value; } /** * For the given point, this method compares the value of that point in the cut * dimension to the cut value. If the point's value in the cut dimension is less * than or equal to the cut value this method returns true, otherwise it returns * false. The name of this method is a mnemonic: if we are working in a * one-dimensional space, then this method will return 'true' if the point value * is to the left of the cut value on the standard number line. * * @param point A point that we are testing in relation to the cut * @param cut A Cut instance. * @return true if the value of the point coordinate corresponding to the cut * dimension is less than or equal to the cut value, false otherwise. */ public static boolean isLeftOf(double[] point, Cut cut) { return point[cut.getDimension()] <= cut.getValue(); } /** * Return the index of the dimension that this cut was made in. * * @return the 0-based index of the dimension that this cut was made in. */ public int getDimension() { return dimension; } /** * Return the value of the cut. This value separates space into two half-spaces: * the set of points whose coordinate in the cut dimension is less than the cut * value, and the set of points whose coordinate in the cut dimension is greater * than the cut value. * * @return the value of the cut. */ public double getValue() { return value; } @Override public String toString() { return String.format("Cut(%d, %f)", dimension, value); } } ================================================ FILE: Java/core/src/main/java/com/amazon/randomcutforest/tree/HyperTree.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.tree; import static com.amazon.randomcutforest.CommonUtils.checkArgument; import static com.amazon.randomcutforest.tree.AbstractNodeStore.Null; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Random; import java.util.function.Function; public class HyperTree extends RandomCutTree { private final Function gVecBuild; public Function getgVec() { return gVecBuild; } public static Builder builder() { return new Builder(); } protected HyperTree(HyperTree.Builder builder) { super(builder); this.gVecBuild = builder.gVec; } public void makeTree(List list, int seed) { // this function allows a public call, which may be useful someday if (list.size() > 0 && list.size() < numberOfLeaves + 1) { int[] leftIndex = new int[numberOfLeaves - 1]; int[] rightIndex = new int[numberOfLeaves - 1]; Arrays.fill(leftIndex, numberOfLeaves - 1); Arrays.fill(rightIndex, numberOfLeaves - 1); int[] cutDimension = new int[numberOfLeaves - 1]; float[] cutValue = new float[numberOfLeaves - 1]; root = makeTreeInt(list, seed, 0, this.gVecBuild, leftIndex, rightIndex, cutDimension, cutValue); nodeStore = AbstractNodeStore.builder().dimension(dimension).capacity(numberOfLeaves - 1) .leftIndex(leftIndex).rightIndex(rightIndex).cutDimension(cutDimension).cutValues(cutValue).build(); // the cuts are specififed; now build tree for (int i = 0; i < list.size(); i++) { addPointToPartialTree(list.get(i), 0L); } } else { root = Null; } } private int makeTreeInt(List pointList, int seed, int firstFree, Function vecBuild, int[] left, int[] right, int[] cutDimension, float[] cutValue) { if (pointList.size() == 0) return Null; BoundingBox thisBox = new BoundingBox(pointStoreView.getNumericVector(pointList.get(0))); for (int i = 1; i < pointList.size(); i++) { thisBox = (BoundingBox) thisBox.getMergedBox(pointStoreView.getNumericVector(pointList.get(i))); } if (thisBox.getRangeSum() <= 0) { return pointList.get(0) + nodeStore.getCapacity() + 1; } Random ring = new Random(seed); int leftSeed = ring.nextInt(); int rightSeed = ring.nextInt(); Cut cut = getCut(thisBox, ring, vecBuild); List leftList = new ArrayList<>(); List rightList = new ArrayList<>(); for (int j = 0; j < pointList.size(); j++) { if (nodeStore.leftOf((float) cut.getValue(), cut.getDimension(), pointStoreView.getNumericVector(pointList.get(j)))) { leftList.add(pointList.get(j)); } else rightList.add(pointList.get(j)); } int leftIndex = makeTreeInt(leftList, leftSeed, firstFree + 1, vecBuild, left, right, cutDimension, cutValue); int rightIndex = makeTreeInt(rightList, rightSeed, firstFree + leftList.size(), vecBuild, left, right, cutDimension, cutValue); left[firstFree] = Math.min(leftIndex, numberOfLeaves - 1); right[firstFree] = Math.min(rightIndex, numberOfLeaves - 1); cutDimension[firstFree] = cut.getDimension(); cutValue[firstFree] = (float) cut.getValue(); return firstFree; } private Cut getCut(IBoundingBoxView bb, Random ring, Function vecSeparation) { Random rng = new Random(ring.nextInt()); double cutf = rng.nextDouble(); double dimf = rng.nextDouble(); int td = -1; double rangeSum = 0; double[] vector = vecSeparation.apply(bb); for (int i = 0; i < bb.getDimensions(); i++) { vector[i] = (float) vector[i]; rangeSum += vector[i]; } double breakPoint = dimf * rangeSum; float cutValue = 0; for (int i = 0; i < bb.getDimensions(); i++) { double range = vector[i]; if (range > 0) { if ((breakPoint > 0) && (breakPoint <= range)) { td = i; cutValue = (float) (bb.getMinValue(td) + bb.getRange(td) * cutf); if (cutValue == bb.getMaxValue(td)) { cutValue = (float) bb.getMinValue(td); } } breakPoint -= range; } } checkArgument(td != -1, "Pivot selection failed."); return new Cut(td, cutValue); } public static class Builder extends RandomCutTree.Builder { private Function gVec; public Builder buildGVec(Function gVec) { this.gVec = gVec; return this; } public HyperTree build() { return new HyperTree(this); } } } ================================================ FILE: Java/core/src/main/java/com/amazon/randomcutforest/tree/IBoundingBoxView.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.tree; public interface IBoundingBoxView { double getRangeSum(); int getDimensions(); double getRange(int i); double getMinValue(int i); double getMaxValue(int i); // duplicates IBoundingBoxView copy(); // below keeps the older box unchanged IBoundingBoxView getMergedBox(float[] point); // merges and keeps the older box unchaged IBoundingBoxView getMergedBox(IBoundingBoxView otherBox); } ================================================ FILE: Java/core/src/main/java/com/amazon/randomcutforest/tree/INodeView.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.tree; import java.util.HashMap; public interface INodeView { boolean isLeaf(); int getMass(); IBoundingBoxView getBoundingBox(); IBoundingBoxView getSiblingBoundingBox(float[] point); int getCutDimension(); double getCutValue(); float[] getLeafPoint(); default float[] getLiftedLeafPoint() { return getLeafPoint(); }; /** * for a leaf node, return the sequence indices corresponding leaf point. If * this method is invoked on a non-leaf node then it throws an * IllegalStateException. */ HashMap getSequenceIndexes(); /** * provides the probability of separation vis-a-vis the bounding box at the node * * @param point input piint being evaluated * @return the probability of separation */ double probailityOfSeparation(float[] point); /** * for a leaf node, return the index in the point store for the leaf point. If * this method is invoked on a non-leaf node then it throws an * IllegalStateException. */ int getLeafPointIndex(); } ================================================ FILE: Java/core/src/main/java/com/amazon/randomcutforest/tree/ITree.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.tree; import com.amazon.randomcutforest.config.IDynamicConfig; import com.amazon.randomcutforest.executor.ITraversable; /** * A tree that can potentially interact with a coordinator * * @param The internal point representation expected by the * component models in this list. * @param The explicit data type of points being passed */ public interface ITree extends ITraversable, IDynamicConfig { int getMass(); float[] projectToTree(float[] point); float[] liftFromTree(float[] result); double[] liftFromTree(double[] result); int[] projectMissingIndices(int[] list); PointReference addPoint(PointReference point, long sequenceIndex); void addPointToPartialTree(PointReference point, long sequenceIndex); void validateAndReconstruct(); PointReference deletePoint(PointReference point, long sequenceIndex); long getRandomSeed(); } ================================================ FILE: Java/core/src/main/java/com/amazon/randomcutforest/tree/NodeStoreLarge.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.tree; import static com.amazon.randomcutforest.CommonUtils.checkArgument; import java.util.Arrays; import java.util.BitSet; import java.util.Stack; import com.amazon.randomcutforest.store.IndexIntervalManager; /** * A fixed-size buffer for storing interior tree nodes. An interior node is * defined by its location in the tree (parent and child nodes), its random cut, * and its bounding box. The NodeStore class uses arrays to store these field * values for a collection of nodes. An index in the store can be used to look * up the field values for a particular node. * * The internal nodes (handled by this store) corresponds to * [0..upperRangeLimit] * * If we think of an array of Node objects as being row-oriented (where each row * is a Node), then this class is analogous to a column-oriented database of * Nodes. * */ public class NodeStoreLarge extends AbstractNodeStore { private final int[] parentIndex; private final int[] leftIndex; private final int[] rightIndex; public final int[] cutDimension; private final int[] mass; public NodeStoreLarge(AbstractNodeStore.Builder builder) { super(builder); mass = new int[capacity]; Arrays.fill(mass, 0); if (builder.storeParent) { parentIndex = new int[capacity]; Arrays.fill(parentIndex, capacity); } else { parentIndex = null; } if (builder.leftIndex == null) { leftIndex = new int[capacity]; rightIndex = new int[capacity]; cutDimension = new int[capacity]; Arrays.fill(leftIndex, capacity); Arrays.fill(rightIndex, capacity); } else { leftIndex = Arrays.copyOf(builder.leftIndex, builder.leftIndex.length); rightIndex = Arrays.copyOf(builder.rightIndex, builder.rightIndex.length); cutDimension = Arrays.copyOf(builder.cutDimension, builder.cutDimension.length); BitSet bits = new BitSet(capacity); if (builder.root != Null) { bits.set(builder.root); } for (int i = 0; i < leftIndex.length; i++) { if (isInternal(leftIndex[i])) { bits.set(leftIndex[i]); if (parentIndex != null) { parentIndex[leftIndex[i]] = i; } } } for (int i = 0; i < rightIndex.length; i++) { if (isInternal(rightIndex[i])) { bits.set(rightIndex[i]); if (parentIndex != null) { parentIndex[rightIndex[i]] = i; } } } freeNodeManager = new IndexIntervalManager(capacity, capacity, bits); } } @Override public int addNode(Stack pathToRoot, float[] point, long sequenceIndex, int pointIndex, int childIndex, int childMassIfLeaf, int cutDimension, float cutValue, BoundingBox box) { int index = freeNodeManager.takeIndex(); this.cutValue[index] = cutValue; this.cutDimension[index] = (byte) cutDimension; if (leftOf(cutValue, cutDimension, point)) { this.leftIndex[index] = (pointIndex + capacity + 1); this.rightIndex[index] = childIndex; } else { this.rightIndex[index] = (pointIndex + capacity + 1); this.leftIndex[index] = childIndex; } this.mass[index] = (((childMassIfLeaf > 0) ? childMassIfLeaf : getMass(childIndex)) + 1) % (capacity + 1); int parentIndex = (pathToRoot.size() == 0) ? Null : pathToRoot.lastElement()[0]; if (this.parentIndex != null) { this.parentIndex[index] = parentIndex; if (!isLeaf(childIndex)) { this.parentIndex[childIndex] = (index); } } if (parentIndex != Null) { spliceEdge(parentIndex, childIndex, index); } return index; } public int getLeftIndex(int index) { return leftIndex[index]; } public int getRightIndex(int index) { return rightIndex[index]; } public void setRoot(int index) { if (!isLeaf(index) && parentIndex != null) { parentIndex[index] = capacity; } } @Override protected void decreaseMassOfInternalNode(int node) { mass[node] = (mass[node] + capacity) % (capacity + 1); } @Override protected void increaseMassOfInternalNode(int node) { mass[node] = (mass[node] + 1) % (capacity + 1); } public void deleteInternalNode(int index) { leftIndex[index] = capacity; rightIndex[index] = capacity; if (parentIndex != null) { parentIndex[index] = capacity; } freeNodeManager.releaseIndex(index); } public int getMass(int index) { return mass[index] != 0 ? mass[index] : (capacity + 1); } @Override public void assignInPartialTree(int node, float[] point, int childReference) { if (leftOf(node, point)) { leftIndex[node] = childReference; } else { rightIndex[node] = childReference; } } public void spliceEdge(int parent, int node, int newNode) { assert (!isLeaf(newNode)); if (node == leftIndex[parent]) { leftIndex[parent] = newNode; } else { rightIndex[parent] = newNode; } if (parentIndex != null && isInternal(node)) { parentIndex[node] = newNode; } } public void replaceParentBySibling(int grandParent, int parent, int node) { int sibling = getSibling(node, parent); if (parent == leftIndex[grandParent]) { leftIndex[grandParent] = sibling; } else { rightIndex[grandParent] = sibling; } if (parentIndex != null && isInternal(sibling)) { parentIndex[sibling] = grandParent; } } public int getCutDimension(int index) { return cutDimension[index]; } public int[] getCutDimension() { return Arrays.copyOf(cutDimension, cutDimension.length); } public int[] getLeftIndex() { return Arrays.copyOf(leftIndex, leftIndex.length); } public int[] getRightIndex() { return Arrays.copyOf(rightIndex, rightIndex.length); } public int getParentIndex(int index) { checkArgument(parentIndex != null, "incorrect call"); return parentIndex[index]; } } ================================================ FILE: Java/core/src/main/java/com/amazon/randomcutforest/tree/NodeStoreMedium.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.tree; import static com.amazon.randomcutforest.CommonUtils.checkArgument; import static com.amazon.randomcutforest.CommonUtils.toCharArray; import static com.amazon.randomcutforest.CommonUtils.toIntArray; import java.util.Arrays; import java.util.BitSet; import java.util.Stack; import com.amazon.randomcutforest.store.IndexIntervalManager; /** * A fixed-size buffer for storing interior tree nodes. An interior node is * defined by its location in the tree (parent and child nodes), its random cut, * and its bounding box. The NodeStore class uses arrays to store these field * values for a collection of nodes. An index in the store can be used to look * up the field values for a particular node. * * The internal nodes (handled by this store) corresponds to [0..capacity]. The * mass of the nodes is cyclic, i.e., mass % (capacity + 1) -- therefore, in * presence of duplicates there would be nodes which are free, and they would * have mass 0 == (capacity + 1). But those nodes would not be reachable by the * code below. * */ public class NodeStoreMedium extends AbstractNodeStore { private final char[] parentIndex; private final int[] leftIndex; private final int[] rightIndex; public final char[] cutDimension; private final char[] mass; public NodeStoreMedium(AbstractNodeStore.Builder builder) { super(builder); mass = new char[capacity]; Arrays.fill(mass, (char) 0); if (builder.storeParent) { parentIndex = new char[capacity]; Arrays.fill(parentIndex, (char) capacity); } else { parentIndex = null; } if (builder.leftIndex == null) { leftIndex = new int[capacity]; rightIndex = new int[capacity]; cutDimension = new char[capacity]; Arrays.fill(leftIndex, capacity); Arrays.fill(rightIndex, capacity); } else { leftIndex = Arrays.copyOf(builder.leftIndex, builder.leftIndex.length); rightIndex = Arrays.copyOf(builder.rightIndex, builder.rightIndex.length); cutDimension = toCharArray(builder.cutDimension); BitSet bits = new BitSet(capacity); if (builder.root != Null) { bits.set(builder.root); } for (int i = 0; i < leftIndex.length; i++) { if (isInternal(leftIndex[i])) { bits.set(leftIndex[i]); if (parentIndex != null) { parentIndex[leftIndex[i]] = (char) i; } } } for (int i = 0; i < rightIndex.length; i++) { if (isInternal(rightIndex[i])) { bits.set(rightIndex[i]); if (parentIndex != null) { parentIndex[rightIndex[i]] = (char) i; } } } freeNodeManager = new IndexIntervalManager(capacity, capacity, bits); // need to set up parents using the root } } @Override public int addNode(Stack pathToRoot, float[] point, long sequenceIndex, int pointIndex, int childIndex, int childMassIfLeaf, int cutDimension, float cutValue, BoundingBox box) { int index = freeNodeManager.takeIndex(); this.cutValue[index] = cutValue; this.cutDimension[index] = (char) cutDimension; if (leftOf(cutValue, cutDimension, point)) { this.leftIndex[index] = (pointIndex + capacity + 1); this.rightIndex[index] = childIndex; } else { this.rightIndex[index] = (pointIndex + capacity + 1); this.leftIndex[index] = childIndex; } this.mass[index] = (char) ((((childMassIfLeaf > 0) ? childMassIfLeaf : getMass(childIndex)) + 1) % (capacity + 1)); int parentIndex = (pathToRoot.size() == 0) ? Null : pathToRoot.lastElement()[0]; if (this.parentIndex != null) { this.parentIndex[index] = (char) parentIndex; if (!isLeaf(childIndex)) { this.parentIndex[childIndex] = (char) (index); } } if (parentIndex != Null) { spliceEdge(parentIndex, childIndex, index); } return index; } @Override public void assignInPartialTree(int node, float[] point, int childReference) { if (leftOf(node, point)) { leftIndex[node] = childReference; } else { rightIndex[node] = childReference; } } public int getLeftIndex(int index) { return leftIndex[index]; } public int getRightIndex(int index) { return rightIndex[index]; } public int getParentIndex(int index) { checkArgument(parentIndex != null, "incorrect call"); return parentIndex[index]; } public void setRoot(int index) { if (!isLeaf(index) && parentIndex != null) { parentIndex[index] = (char) capacity; } } @Override protected void decreaseMassOfInternalNode(int node) { mass[node] = (char) ((mass[node] + capacity) % (capacity + 1)); // this cannot get to 0 } @Override protected void increaseMassOfInternalNode(int node) { mass[node] = (char) ((mass[node] + 1) % (capacity + 1)); // mass of root == 0; note capacity = number_of_leaves - 1 } public void deleteInternalNode(int index) { leftIndex[index] = capacity; rightIndex[index] = capacity; if (parentIndex != null) { parentIndex[index] = (char) capacity; } freeNodeManager.releaseIndex(index); } public int getMass(int index) { return mass[index] != 0 ? mass[index] : (capacity + 1); } public void spliceEdge(int parent, int node, int newNode) { assert (!isLeaf(newNode)); if (node == leftIndex[parent]) { leftIndex[parent] = newNode; } else { rightIndex[parent] = newNode; } if (parentIndex != null && isInternal(node)) { parentIndex[node] = (char) newNode; } } public void replaceParentBySibling(int grandParent, int parent, int node) { int sibling = getSibling(node, parent); if (parent == leftIndex[grandParent]) { leftIndex[grandParent] = sibling; } else { rightIndex[grandParent] = sibling; } if (parentIndex != null && isInternal(sibling)) { parentIndex[sibling] = (char) grandParent; } } public int getCutDimension(int index) { return cutDimension[index]; } public int[] getCutDimension() { return toIntArray(cutDimension); } public int[] getLeftIndex() { return Arrays.copyOf(leftIndex, leftIndex.length); } public int[] getRightIndex() { return Arrays.copyOf(rightIndex, rightIndex.length); } } ================================================ FILE: Java/core/src/main/java/com/amazon/randomcutforest/tree/NodeStoreSmall.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.tree; import static com.amazon.randomcutforest.CommonUtils.checkArgument; import static com.amazon.randomcutforest.CommonUtils.toByteArray; import static com.amazon.randomcutforest.CommonUtils.toCharArray; import static com.amazon.randomcutforest.CommonUtils.toIntArray; import java.util.Arrays; import java.util.BitSet; import java.util.Stack; import com.amazon.randomcutforest.store.IndexIntervalManager; /** * A fixed-size buffer for storing interior tree nodes. An interior node is * defined by its location in the tree (parent and child nodes), its random cut, * and its bounding box. The NodeStore class uses arrays to store these field * values for a collection of nodes. An index in the store can be used to look * up the field values for a particular node. * * The internal nodes (handled by this store) corresponds to * [0..upperRangeLimit] * * If we think of an array of Node objects as being row-oriented (where each row * is a Node), then this class is analogous to a column-oriented database of * Nodes. */ public class NodeStoreSmall extends AbstractNodeStore { private final byte[] parentIndex; private final char[] leftIndex; private final char[] rightIndex; public final byte[] cutDimension; private final byte[] mass; public NodeStoreSmall(AbstractNodeStore.Builder builder) { super(builder); mass = new byte[capacity]; Arrays.fill(mass, (byte) 0); if (builder.storeParent) { parentIndex = new byte[capacity]; Arrays.fill(parentIndex, (byte) capacity); } else { parentIndex = null; } if (builder.leftIndex == null) { leftIndex = new char[capacity]; rightIndex = new char[capacity]; cutDimension = new byte[capacity]; Arrays.fill(leftIndex, (char) capacity); Arrays.fill(rightIndex, (char) capacity); } else { checkArgument(builder.leftIndex.length == capacity, " incorrect length"); checkArgument(builder.rightIndex.length == capacity, " incorrect length"); leftIndex = toCharArray(builder.leftIndex); rightIndex = toCharArray(builder.rightIndex); cutDimension = toByteArray(builder.cutDimension); BitSet bits = new BitSet(capacity); if (builder.root != Null) { bits.set(builder.root); } for (int i = 0; i < leftIndex.length; i++) { if (isInternal(leftIndex[i])) { bits.set(leftIndex[i]); if (parentIndex != null) { parentIndex[leftIndex[i]] = (byte) i; } } } for (int i = 0; i < rightIndex.length; i++) { if (isInternal(rightIndex[i])) { bits.set(rightIndex[i]); if (parentIndex != null) { parentIndex[rightIndex[i]] = (byte) i; } } } freeNodeManager = new IndexIntervalManager(capacity, capacity, bits); // need to set up parents using the root } } @Override public int addNode(Stack pathToRoot, float[] point, long sequenceIndex, int pointIndex, int childIndex, int childMassIfLeaf, int cutDimension, float cutValue, BoundingBox box) { int index = freeNodeManager.takeIndex(); this.cutValue[index] = cutValue; this.cutDimension[index] = (byte) cutDimension; if (leftOf(cutValue, cutDimension, point)) { this.leftIndex[index] = (char) (pointIndex + capacity + 1); this.rightIndex[index] = (char) childIndex; } else { this.rightIndex[index] = (char) (pointIndex + capacity + 1); this.leftIndex[index] = (char) childIndex; } this.mass[index] = (byte) ((((childMassIfLeaf > 0) ? childMassIfLeaf : getMass(childIndex)) + 1) % (capacity + 1)); int parentIndex = (pathToRoot.size() == 0) ? Null : pathToRoot.lastElement()[0]; if (this.parentIndex != null) { this.parentIndex[index] = (byte) parentIndex; if (!isLeaf(childIndex)) { this.parentIndex[childIndex] = (byte) (index); } } if (parentIndex != Null) { spliceEdge(parentIndex, childIndex, index); } return index; } @Override public void assignInPartialTree(int node, float[] point, int childReference) { if (leftOf(node, point)) { leftIndex[node] = (char) childReference; } else { rightIndex[node] = (char) childReference; } } public int getLeftIndex(int index) { return leftIndex[index]; } public int getRightIndex(int index) { return rightIndex[index]; } public int getParentIndex(int index) { checkArgument(parentIndex != null, "incorrect call"); return parentIndex[index]; } public void setRoot(int index) { if (!isLeaf(index) && parentIndex != null) { parentIndex[index] = (byte) capacity; } } @Override protected void decreaseMassOfInternalNode(int node) { mass[node] = (byte) (((mass[node] & 0xff) + capacity) % (capacity + 1)); // this cannot get to 0 } @Override protected void increaseMassOfInternalNode(int node) { mass[node] = (byte) (((mass[node] & 0xff) + 1) % (capacity + 1)); // mass of root == 0; note capacity = number_of_leaves - 1 } public void deleteInternalNode(int index) { leftIndex[index] = (char) capacity; rightIndex[index] = (char) capacity; if (parentIndex != null) { parentIndex[index] = (byte) capacity; } freeNodeManager.releaseIndex(index); } public int getMass(int index) { return mass[index] != 0 ? (mass[index] & 0xff) : (capacity + 1); } public void spliceEdge(int parent, int node, int newNode) { assert (!isLeaf(newNode)); if (node == leftIndex[parent]) { leftIndex[parent] = (char) newNode; } else { rightIndex[parent] = (char) newNode; } if (parentIndex != null && isInternal(node)) { parentIndex[node] = (byte) newNode; } } public void replaceParentBySibling(int grandParent, int parent, int node) { int sibling = getSibling(node, parent); if (parent == leftIndex[grandParent]) { leftIndex[grandParent] = (char) sibling; } else { rightIndex[grandParent] = (char) sibling; } if (parentIndex != null && isInternal(sibling)) { parentIndex[sibling] = (byte) grandParent; } } public int getCutDimension(int index) { return cutDimension[index] & 0xff; } public int[] getCutDimension() { return toIntArray(cutDimension); } public int[] getLeftIndex() { return toIntArray(leftIndex); } public int[] getRightIndex() { return toIntArray(rightIndex); } } ================================================ FILE: Java/core/src/main/java/com/amazon/randomcutforest/tree/NodeView.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.tree; import static com.amazon.randomcutforest.CommonUtils.checkState; import java.util.HashMap; import com.amazon.randomcutforest.store.IPointStoreView; public class NodeView implements INodeView { public static double SWITCH_FRACTION = 0.499; RandomCutTree tree; int currentNodeOffset; float[] leafPoint; BoundingBox currentBox; public NodeView(RandomCutTree tree, IPointStoreView pointStoreView, int root) { this.currentNodeOffset = root; this.tree = tree; } public int getMass() { return tree.getMass(currentNodeOffset); } public IBoundingBoxView getBoundingBox() { if (currentBox == null) { return tree.getBox(currentNodeOffset); } return currentBox; } public IBoundingBoxView getSiblingBoundingBox(float[] point) { return (toLeft(point)) ? tree.getBox(tree.nodeStore.getRightIndex(currentNodeOffset)) : tree.getBox(tree.nodeStore.getLeftIndex(currentNodeOffset)); } public int getCutDimension() { return tree.nodeStore.getCutDimension(currentNodeOffset); } @Override public double getCutValue() { return tree.nodeStore.getCutValue(currentNodeOffset); } public float[] getLeafPoint() { return leafPoint; } public HashMap getSequenceIndexes() { checkState(isLeaf(), "can only be invoked for a leaf"); if (tree.storeSequenceIndexesEnabled) { return tree.getSequenceMap(tree.getPointIndex(currentNodeOffset)); } else { return new HashMap<>(); } } @Override public double probailityOfSeparation(float[] point) { return tree.probabilityOfCut(currentNodeOffset, point, currentBox); } @Override public int getLeafPointIndex() { return tree.getPointIndex(currentNodeOffset); } public boolean isLeaf() { return tree.nodeStore.isLeaf(currentNodeOffset); } protected void setCurrentNode(int newNode, int index, boolean setBox) { currentNodeOffset = newNode; leafPoint = tree.pointStoreView.getNumericVector(index); if (setBox && tree.boundingBoxCacheFraction < SWITCH_FRACTION) { currentBox = new BoundingBox(leafPoint, leafPoint); } } protected void setCurrentNodeOnly(int newNode) { currentNodeOffset = newNode; } public void updateToParent(int parent, int currentSibling, boolean updateBox) { currentNodeOffset = parent; if (updateBox && tree.boundingBoxCacheFraction < SWITCH_FRACTION) { tree.growNodeBox(currentBox, tree.pointStoreView, parent, currentSibling); } } // this function exists for matching the behavior of RCF2.0 and will be replaced // this function explicitly uses the encoding of the new nodestore protected boolean toLeft(float[] point) { return point[tree.nodeStore.getCutDimension(currentNodeOffset)] <= tree.nodeStore .getCutValue(currentNodeOffset); } } ================================================ FILE: Java/core/src/main/java/com/amazon/randomcutforest/tree/RandomCutTree.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.tree; import static com.amazon.randomcutforest.CommonUtils.checkArgument; import static com.amazon.randomcutforest.CommonUtils.checkNotNull; import static com.amazon.randomcutforest.CommonUtils.checkState; import static com.amazon.randomcutforest.tree.AbstractNodeStore.DEFAULT_STORE_PARENT; import static com.amazon.randomcutforest.tree.AbstractNodeStore.Null; import static java.lang.Math.max; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Optional; import java.util.Random; import java.util.Stack; import com.amazon.randomcutforest.IMultiVisitorFactory; import com.amazon.randomcutforest.IVisitorFactory; import com.amazon.randomcutforest.MultiVisitor; import com.amazon.randomcutforest.RandomCutForest; import com.amazon.randomcutforest.Visitor; import com.amazon.randomcutforest.config.Config; import com.amazon.randomcutforest.store.IPointStoreView; /** * A Compact Random Cut Tree is a tree data structure whose leaves represent * points inserted into the tree and whose interior nodes represent regions of * space defined by Bounding Boxes and Cuts. New nodes and leaves are added to * the tree by making random cuts. * * The offsets are encoded as follows: an offset greater or equal maxSize * corresponds to a leaf node of offset (offset - maxSize) otherwise the offset * corresponds to an internal node * * The main use of this class is to be updated with points sampled from a * stream, and to define traversal methods. Users can then implement a * {@link Visitor} which can be submitted to a traversal method in order to * compute a statistic from the tree. */ public class RandomCutTree implements ITree { /** * The index value used to represent the absence of a node. For example, when * the tree is created the root node index will be NULL. After a point is added * and a root node is created, the root node's parent will be NULL, and so on. */ private Random testRandom; protected boolean storeSequenceIndexesEnabled; protected boolean centerOfMassEnabled; private long randomSeed; protected int root; protected IPointStoreView pointStoreView; protected int numberOfLeaves; protected AbstractNodeStore nodeStore; protected double boundingBoxCacheFraction; protected int outputAfter; protected int dimension; protected final HashMap leafMass; protected double[] rangeSumData; protected float[] boundingBoxData; protected float[] pointSum; protected HashMap> sequenceMap; protected RandomCutTree(Builder builder) { pointStoreView = builder.pointStoreView; numberOfLeaves = builder.capacity; randomSeed = builder.randomSeed; testRandom = builder.random; outputAfter = builder.outputAfter.orElse(max(1, numberOfLeaves / 4)); dimension = (builder.dimension != 0) ? builder.dimension : pointStoreView.getDimensions(); nodeStore = (builder.nodeStore != null) ? builder.nodeStore : AbstractNodeStore.builder().capacity(numberOfLeaves - 1).storeParent(builder.storeParent) .dimension(dimension).build(); this.boundingBoxCacheFraction = builder.boundingBoxCacheFraction; this.storeSequenceIndexesEnabled = builder.storeSequenceIndexesEnabled; this.centerOfMassEnabled = builder.centerOfMassEnabled; this.root = builder.root; leafMass = new HashMap<>(); int cache_limit = (int) Math.floor(boundingBoxCacheFraction * (numberOfLeaves - 1)); rangeSumData = new double[cache_limit]; boundingBoxData = new float[2 * dimension * cache_limit]; if (this.centerOfMassEnabled) { pointSum = new float[(numberOfLeaves - 1) * dimension]; } if (this.storeSequenceIndexesEnabled) { sequenceMap = new HashMap<>(); } } @Override public void setConfig(String name, T value, Class clazz) { if (Config.BOUNDING_BOX_CACHE_FRACTION.equals(name)) { checkArgument(Double.class.isAssignableFrom(clazz), () -> String.format("Setting '%s' must be a double value", name)); setBoundingBoxCacheFraction((Double) value); } else { throw new IllegalArgumentException("Unsupported configuration setting: " + name); } } @Override public T getConfig(String name, Class clazz) { checkNotNull(clazz, "clazz must not be null"); if (Config.BOUNDING_BOX_CACHE_FRACTION.equals(name)) { checkArgument(clazz.isAssignableFrom(Double.class), () -> String.format("Setting '%s' must be a double value", name)); return clazz.cast(boundingBoxCacheFraction); } else { throw new IllegalArgumentException("Unsupported configuration setting: " + name); } } // dynamically change the fraction of the new nodes which caches their bounding // boxes // 0 would mean less space usage, but slower throughput // 1 would imply larger space but better throughput public void setBoundingBoxCacheFraction(double fraction) { checkArgument(0 <= fraction && fraction <= 1, "incorrect parameter"); boundingBoxCacheFraction = fraction; resizeCache(fraction); } /** * Return a new {@link Cut}, which is chosen uniformly over the space of * possible cuts for a bounding box and its union with a point. The cut must * exist unless the union box is a single point. There are floating point issues * -- even though the original values are in float anf the calculations are in * double, which can show up with large number of dimensions (each trigerring an * addition/substraction). * * @param factor A random cut * @param point the point whose union is taken with the box * @param box A bounding box that we want to find a random cut for. * @return A new Cut corresponding to a random cut in the bounding box. */ protected Cut randomCut(double factor, float[] point, BoundingBox box) { double range = 0.0; for (int i = 0; i < point.length; i++) { float minValue = (float) box.getMinValue(i); float maxValue = (float) box.getMaxValue(i); if (point[i] < minValue) { minValue = point[i]; } else if (point[i] > maxValue) { maxValue = point[i]; } range += maxValue - minValue; } checkArgument(range > 0, () -> " the union is a single point " + Arrays.toString(point) + "or the box is inappropriate, box" + box.toString() + "factor =" + factor); double breakPoint = factor * range; for (int i = 0; i < box.getDimensions(); i++) { float minValue = (float) box.getMinValue(i); float maxValue = (float) box.getMaxValue(i); if (point[i] < minValue) { minValue = point[i]; } else if (point[i] > maxValue) { maxValue = point[i]; } double gap = maxValue - minValue; if (breakPoint <= gap && gap > 0) { float cutValue = (float) (minValue + breakPoint); // Random cuts have to take a value in the half-open interval [minValue, // maxValue) to ensure that a // Node has a valid left child and right child. if (cutValue >= maxValue) { cutValue = Math.nextAfter((float) maxValue, minValue); } return new Cut(i, cutValue); } breakPoint -= gap; } // if we are here then factor is likely almost 1 and we have floating point // issues // we will randomize between the first and the last non-zero ranges and choose // the // same cutValue as using nextAfter above -- we will use the factor as a seed // and // not be optimizing this sequel (either in execution or code) to ensure easier // debugging // this should be an anomaly - no pun intended. Random rng = new Random((long) (factor * Long.MAX_VALUE / 2)); if (rng.nextDouble() < 0.5) { for (int i = 0; i < box.getDimensions(); i++) { float minValue = (float) box.getMinValue(i); float maxValue = (float) box.getMaxValue(i); if (point[i] < minValue) { minValue = point[i]; } else if (point[i] > maxValue) { maxValue = point[i]; } if (maxValue > minValue) { double cutValue = Math.nextAfter((float) maxValue, minValue); return new Cut(i, cutValue); } } } else { for (int i = box.getDimensions() - 1; i >= 0; i--) { float minValue = (float) box.getMinValue(i); float maxValue = (float) box.getMaxValue(i); if (point[i] < minValue) { minValue = point[i]; } else if (point[i] > maxValue) { maxValue = point[i]; } if (maxValue > minValue) { double cutValue = Math.nextAfter((float) maxValue, minValue); return new Cut(i, cutValue); } } } throw new IllegalStateException("The break point did not lie inside the expected range; factor " + factor + ", point " + Arrays.toString(point) + " box " + box.toString()); } /** * the following function adds a point to the tree * * @param pointIndex the number corresponding to the point * @param sequenceIndex sequence index of the point * @return the value of the point index where the point was added; this is * pointIndex if there are no duplicates; otherwise it is the value of * the point being duplicated. */ public Integer addPoint(Integer pointIndex, long sequenceIndex) { if (root == Null) { root = convertToLeaf(pointIndex); addLeaf(pointIndex, sequenceIndex); return pointIndex; } else { float[] point = projectToTree(pointStoreView.getNumericVector(pointIndex)); checkArgument(point.length == dimension, () -> " mismatch in dimensions for " + pointIndex); Stack pathToRoot = nodeStore.getPath(root, point, false); int[] first = pathToRoot.pop(); int leafNode = first[0]; int savedParent = (pathToRoot.size() == 0) ? Null : pathToRoot.lastElement()[0]; int leafSavedSibling = first[1]; int sibling = leafSavedSibling; int leafPointIndex = getPointIndex(leafNode); float[] oldPoint = projectToTree(pointStoreView.getNumericVector(leafPointIndex)); checkArgument(oldPoint.length == dimension, () -> " mismatch in dimensions for " + pointIndex); Stack parentPath = new Stack<>(); if (Arrays.equals(point, oldPoint)) { increaseLeafMass(leafNode); manageAncestorsAdd(pathToRoot, point); addLeaf(leafPointIndex, sequenceIndex); return leafPointIndex; } else { int node = leafNode; int savedNode = node; int parent = savedParent; float savedCutValue = (float) 0.0; BoundingBox currentBox = new BoundingBox(oldPoint, oldPoint); BoundingBox savedBox = currentBox.copy(); int savedDim = Integer.MAX_VALUE; Random rng; if (testRandom == null) { rng = new Random(randomSeed); randomSeed = rng.nextLong(); } else { rng = testRandom; } while (true) { double factor = rng.nextDouble(); Cut cut = randomCut(factor, point, currentBox); int dim = cut.getDimension(); float value = (float) cut.getValue(); boolean separation = ((point[dim] <= value && value < currentBox.getMinValue(dim) || point[dim] > value && value >= currentBox.getMaxValue(dim))); if (separation) { savedCutValue = value; savedDim = dim; savedParent = parent; savedNode = node; savedBox = currentBox.copy(); parentPath.clear(); } else { parentPath.push(new int[] { node, sibling }); } if (currentBox.contains(point) || parent == Null) { break; } else { growNodeBox(currentBox, pointStoreView, parent, sibling); int[] next = pathToRoot.pop(); node = next[0]; sibling = next[1]; if (pathToRoot.size() != 0) { parent = pathToRoot.lastElement()[0]; } else { parent = Null; } } } if (savedParent != Null) { while (!parentPath.isEmpty()) { pathToRoot.push(parentPath.pop()); } } int childMassIfLeaf = isLeaf(savedNode) ? getLeafMass(savedNode) : 0; int mergedNode = nodeStore.addNode(pathToRoot, point, sequenceIndex, pointIndex, savedNode, childMassIfLeaf, savedDim, savedCutValue, savedBox); addLeaf(pointIndex, sequenceIndex); addBox(mergedNode, point, savedBox); manageAncestorsAdd(pathToRoot, point); if (pointSum != null) { recomputePointSum(mergedNode); } if (savedParent == Null) { root = mergedNode; } } return pointIndex; } } protected void manageAncestorsAdd(Stack path, float[] point) { while (!path.isEmpty()) { int index = path.pop()[0]; nodeStore.increaseMassOfInternalNode(index); if (pointSum != null) { recomputePointSum(index); } if (boundingBoxCacheFraction > 0.0) { checkContainsAndRebuildBox(index, point, pointStoreView); addPointInPlace(index, point); } } } /** * the following is the same as in addPoint() except this function is used to * rebuild the tree structure. This function does not create auxiliary arrays, * which should be performed using validateAndReconstruct() * * @param pointIndex index of point (in point store) * @param sequenceIndex sequence index (stored in sampler) */ public void addPointToPartialTree(Integer pointIndex, long sequenceIndex) { checkArgument(root != Null, " a null root is not a partial tree"); float[] point = projectToTree(pointStoreView.getNumericVector(pointIndex)); checkArgument(point.length == dimension, () -> " incorrect projection at index " + pointIndex); Stack pathToRoot = nodeStore.getPath(root, point, false); int[] first = pathToRoot.pop(); int leafNode = first[0]; int savedParent = (pathToRoot.size() == 0) ? Null : pathToRoot.lastElement()[0]; if (!isLeaf(leafNode)) { if (savedParent == Null) { root = convertToLeaf(pointIndex); } else { nodeStore.assignInPartialTree(savedParent, point, convertToLeaf(pointIndex)); nodeStore.manageInternalNodesPartial(pathToRoot); addLeaf(pointIndex, sequenceIndex); } return; } int leafPointIndex = getPointIndex(leafNode); float[] oldPoint = projectToTree(pointStoreView.getNumericVector(leafPointIndex)); checkArgument(oldPoint.length == dimension && Arrays.equals(point, oldPoint), () -> "incorrect state on adding " + pointIndex); increaseLeafMass(leafNode); nodeStore.manageInternalNodesPartial(pathToRoot); addLeaf(leafPointIndex, sequenceIndex); return; } public Integer deletePoint(Integer pointIndex, long sequenceIndex) { checkArgument(root != Null, " deleting from an empty tree"); float[] point = projectToTree(pointStoreView.getNumericVector(pointIndex)); checkArgument(point.length == dimension, () -> " incorrect projection at index " + pointIndex); Stack pathToRoot = nodeStore.getPath(root, point, false); int[] first = pathToRoot.pop(); int leafSavedSibling = first[1]; int leafNode = first[0]; int leafPointIndex = getPointIndex(leafNode); checkArgument(leafPointIndex == pointIndex, () -> " deleting wrong node " + leafPointIndex + " instead of " + pointIndex); removeLeaf(leafPointIndex, sequenceIndex); if (decreaseLeafMass(leafNode) == 0) { if (pathToRoot.size() == 0) { root = Null; } else { int parent = pathToRoot.pop()[0]; if (pathToRoot.size() == 0) { root = leafSavedSibling; } else { int grandParent = pathToRoot.lastElement()[0]; nodeStore.replaceParentBySibling(grandParent, parent, leafNode); manageAncestorsDelete(pathToRoot, point); } nodeStore.deleteInternalNode(parent); if (pointSum != null) { invalidatePointSum(parent); } int idx = translate(parent); if (idx != Integer.MAX_VALUE) { rangeSumData[idx] = 0.0; } } } else { manageAncestorsDelete(pathToRoot, point); } return leafPointIndex; } protected void manageAncestorsDelete(Stack path, float[] point) { boolean resolved = false; while (!path.isEmpty()) { int index = path.pop()[0]; nodeStore.decreaseMassOfInternalNode(index); if (pointSum != null) { recomputePointSum(index); } if (boundingBoxCacheFraction > 0.0 && !resolved) { resolved = checkContainsAndRebuildBox(index, point, pointStoreView); } } } //// leaf, nonleaf representations public boolean isLeaf(int index) { // note that numberOfLeaves - 1 corresponds to an unspefied leaf in partial tree // 0 .. numberOfLeaves - 2 corresponds to internal nodes return index >= numberOfLeaves; } public boolean isInternal(int index) { // note that numberOfLeaves - 1 corresponds to an unspefied leaf in partial tree // 0 .. numberOfLeaves - 2 corresponds to internal nodes return index < numberOfLeaves - 1 && index >= 0; } public int convertToLeaf(int pointIndex) { return pointIndex + numberOfLeaves; } public int getPointIndex(int index) { checkArgument(index >= numberOfLeaves, () -> " does not have a point associated " + index); return index - numberOfLeaves; } public int getLeftChild(int index) { checkArgument(isInternal(index), () -> "incorrect call to get left Index " + index); return nodeStore.getLeftIndex(index); } public int getRightChild(int index) { checkArgument(isInternal(index), () -> "incorrect call to get right child " + index); return nodeStore.getRightIndex(index); } public int getCutDimension(int index) { checkArgument(isInternal(index), () -> "incorrect call to get cut dimension " + index); return nodeStore.getCutDimension(index); } public double getCutValue(int index) { checkArgument(isInternal(index), () -> "incorrect call to get cut value " + index); return nodeStore.getCutValue(index); } ///// mass assignments; separating leafs and internal nodes protected int getMass(int index) { return (isLeaf(index)) ? getLeafMass(index) : nodeStore.getMass(index); } protected int getLeafMass(int index) { int y = (index - numberOfLeaves); Integer value = leafMass.get(y); return (value != null) ? value + 1 : 1; } protected void increaseLeafMass(int index) { int y = (index - numberOfLeaves); leafMass.merge(y, 1, Integer::sum); } protected int decreaseLeafMass(int index) { int y = (index - numberOfLeaves); Integer value = leafMass.remove(y); if (value != null) { if (value > 1) { leafMass.put(y, (value - 1)); return value; } else { return 1; } } else { return 0; } } @Override public int getMass() { return root == Null ? 0 : isLeaf(root) ? getLeafMass(root) : nodeStore.getMass(root); } /////// Bounding box public void resizeCache(double fraction) { if (fraction == 0) { rangeSumData = null; boundingBoxData = null; } else { int limit = (int) Math.floor(fraction * (numberOfLeaves - 1)); rangeSumData = (rangeSumData == null) ? new double[limit] : Arrays.copyOf(rangeSumData, limit); boundingBoxData = (boundingBoxData == null) ? new float[limit * 2 * dimension] : Arrays.copyOf(boundingBoxData, limit * 2 * dimension); } boundingBoxCacheFraction = fraction; } protected int translate(int index) { if (rangeSumData == null || rangeSumData.length <= index) { return Integer.MAX_VALUE; } else { return index; } } void copyBoxToData(int idx, BoundingBox box) { int base = 2 * idx * dimension; int mid = base + dimension; System.arraycopy(box.getMinValues(), 0, boundingBoxData, base, dimension); System.arraycopy(box.getMaxValues(), 0, boundingBoxData, mid, dimension); rangeSumData[idx] = box.getRangeSum(); } void addPointInPlace(int index, float[] point) { int idx = translate(index); if (idx != Integer.MAX_VALUE) { int base = 2 * idx * dimension; int mid = base + dimension; double rangeSum = 0; for (int i = 0; i < dimension; i++) { boundingBoxData[base + i] = Math.min(boundingBoxData[base + i], point[i]); } for (int i = 0; i < dimension; i++) { boundingBoxData[mid + i] = max(boundingBoxData[mid + i], point[i]); } for (int i = 0; i < dimension; i++) { rangeSum += boundingBoxData[mid + i] - boundingBoxData[base + i]; } rangeSumData[idx] = rangeSum; } } public BoundingBox getBox(int index) { if (isLeaf(index)) { float[] point = projectToTree(pointStoreView.getNumericVector(getPointIndex(index))); checkArgument(point.length == dimension, () -> "failure in projection at index " + index); return new BoundingBox(point, point); } else { checkState(isInternal(index), " incomplete state"); int idx = translate(index); if (idx != Integer.MAX_VALUE) { if (rangeSumData[idx] != 0) { // return non-trivial boxes return getBoxFromData(idx); } else { BoundingBox box = reconstructBox(index, pointStoreView); copyBoxToData(idx, box); return box; } } return reconstructBox(index, pointStoreView); } } BoundingBox reconstructBox(int index, IPointStoreView pointStoreView) { BoundingBox mutatedBoundingBox = getBox(nodeStore.getLeftIndex(index)); growNodeBox(mutatedBoundingBox, pointStoreView, index, nodeStore.getRightIndex(index)); return mutatedBoundingBox; } boolean checkStrictlyContains(int index, float[] point) { int idx = translate(index); if (idx != Integer.MAX_VALUE) { int base = 2 * idx * dimension; int mid = base + dimension; boolean isInside = true; for (int i = 0; i < dimension && isInside; i++) { if (point[i] >= boundingBoxData[mid + i] || boundingBoxData[base + i] >= point[i]) { isInside = false; } } return isInside; } return false; } boolean checkContainsAndRebuildBox(int index, float[] point, IPointStoreView pointStoreView) { int idx = translate(index); if (idx != Integer.MAX_VALUE) { if (!checkStrictlyContains(index, point)) { BoundingBox mutatedBoundingBox = reconstructBox(index, pointStoreView); copyBoxToData(idx, mutatedBoundingBox); return false; } return true; } return false; } BoundingBox getBoxFromData(int idx) { int base = 2 * idx * dimension; int mid = base + dimension; return new BoundingBox(Arrays.copyOfRange(boundingBoxData, base, base + dimension), Arrays.copyOfRange(boundingBoxData, mid, mid + dimension)); } void addBox(int index, float[] point, BoundingBox box) { int idx = translate(index); if (idx != Integer.MAX_VALUE) { // always add irrespective of rangesum copyBoxToData(idx, box); addPointInPlace(index, point); } } void growNodeBox(BoundingBox box, IPointStoreView pointStoreView, int node, int sibling) { if (isLeaf(sibling)) { float[] point = projectToTree(pointStoreView.getNumericVector(getPointIndex(sibling))); checkArgument(point.length == dimension, () -> " incorrect projection at index " + sibling); box.addPoint(point); } else { if (!isInternal(sibling)) { throw new IllegalStateException(" incomplete state " + sibling); } int siblingIdx = translate(sibling); if (siblingIdx != Integer.MAX_VALUE) { if (rangeSumData[siblingIdx] != 0) { box.addBox(getBoxFromData(siblingIdx)); } else { BoundingBox newBox = getBox(siblingIdx); copyBoxToData(siblingIdx, newBox); box.addBox(newBox); } return; } growNodeBox(box, pointStoreView, sibling, nodeStore.getLeftIndex(sibling)); growNodeBox(box, pointStoreView, sibling, nodeStore.getRightIndex(sibling)); return; } } public double probabilityOfCut(int node, float[] point, BoundingBox otherBox) { int nodeIdx = translate(node); if (nodeIdx != Integer.MAX_VALUE && rangeSumData[nodeIdx] != 0) { int base = 2 * nodeIdx * dimension; int mid = base + dimension; double minsum = 0; double maxsum = 0; for (int i = 0; i < dimension; i++) { minsum += max(boundingBoxData[base + i] - point[i], 0); } for (int i = 0; i < dimension; i++) { maxsum += max(point[i] - boundingBoxData[mid + i], 0); } double sum = maxsum + minsum; if (sum == 0.0) { return 0.0; } return sum / (rangeSumData[nodeIdx] + sum); } else if (otherBox != null) { return otherBox.probabilityOfCut(point); } else { BoundingBox box = getBox(node); return box.probabilityOfCut(point); } } /// additional information at nodes public float[] getPointSum(int index) { checkArgument(centerOfMassEnabled, " enable center of mass"); if (isLeaf(index)) { float[] point = projectToTree(pointStoreView.getNumericVector(getPointIndex(index))); checkArgument(point.length == dimension, () -> " incorrect projection"); int mass = getMass(index); for (int i = 0; i < point.length; i++) { point[i] *= mass; } return point; } else { return Arrays.copyOfRange(pointSum, index * dimension, (index + 1) * dimension); } } public void invalidatePointSum(int index) { for (int i = 0; i < dimension; i++) { pointSum[index * dimension + i] = 0; } } public void recomputePointSum(int index) { float[] left = getPointSum(nodeStore.getLeftIndex(index)); float[] right = getPointSum(nodeStore.getRightIndex(index)); for (int i = 0; i < dimension; i++) { pointSum[index * dimension + i] = left[i] + right[i]; } } public HashMap getSequenceMap(int index) { HashMap hashMap = new HashMap<>(); List list = getSequenceList(index); for (Long e : list) { hashMap.merge(e, 1, Integer::sum); } return hashMap; } public List getSequenceList(int index) { return sequenceMap.get(index); } protected void addLeaf(int pointIndex, long sequenceIndex) { if (storeSequenceIndexesEnabled) { List leafList = sequenceMap.remove(pointIndex); if (leafList == null) { leafList = new ArrayList<>(1); } leafList.add(sequenceIndex); sequenceMap.put(pointIndex, leafList); } } public void removeLeaf(int leafPointIndex, long sequenceIndex) { if (storeSequenceIndexesEnabled) { List leafList = sequenceMap.remove(leafPointIndex); checkArgument(leafList != null, " leaf index not found in tree"); checkArgument(leafList.remove(sequenceIndex), " sequence index not found in leaf"); if (!leafList.isEmpty()) { sequenceMap.put(leafPointIndex, leafList); } } } //// validations public void validateAndReconstruct() { if (root != Null) { validateAndReconstruct(root); } } /** * This function is supposed to validate the integrity of the tree and rebuild * internal data structures. At this moment the only internal structure is the * pointsum. * * @param index the node of a tree * @return a bounding box of the points */ public BoundingBox validateAndReconstruct(int index) { if (isLeaf(index)) { return getBox(index); } else { checkState(isInternal(index), "illegal state"); BoundingBox leftBox = validateAndReconstruct(getLeftChild(index)); BoundingBox rightBox = validateAndReconstruct(getRightChild(index)); if (leftBox.maxValues[getCutDimension(index)] > getCutValue(index) || rightBox.minValues[getCutDimension(index)] <= getCutValue(index)) { throw new IllegalStateException(" incorrect bounding state at index " + index + " cut value " + getCutValue(index) + "cut dimension " + getCutDimension(index) + " left Box " + leftBox.toString() + " right box " + rightBox.toString()); } if (centerOfMassEnabled) { recomputePointSum(index); } rightBox.addBox(leftBox); int idx = translate(index); if (idx != Integer.MAX_VALUE) { // always add irrespective of rangesum copyBoxToData(idx, rightBox); } return rightBox; } } //// traversals /** * Starting from the root, traverse the canonical path to a leaf node and visit * the nodes along the path. The canonical path is determined by the input * point: at each interior node, we select the child node by comparing the * node's {@link Cut} to the corresponding coordinate value in the input point. * The method recursively traverses to the leaf node first and then invokes the * visitor on each node in reverse order. That is, if the path to the leaf node * determined by the input point is root, node1, node2, ..., node(N-1), nodeN, * leaf; then we will first invoke visitor::acceptLeaf on the leaf node, and * then we will invoke visitor::accept on the remaining nodes in the following * order: nodeN, node(N-1), ..., node2, node1, and root. * * @param point A point which determines the traversal path from the * root to a leaf node. * @param visitorFactory A visitor that will be invoked for each node on the * path. * @param The return type of the Visitor. * @return the value of {@link Visitor#getResult()}} after the traversal. */ @Override public R traverse(float[] point, IVisitorFactory visitorFactory) { checkArgument(root != Null, "this tree doesn't contain any nodes"); checkNotNull(point, "point must not be null"); checkNotNull(visitorFactory, "visitor must not be null"); Visitor visitor = visitorFactory.newVisitor(this, point); NodeView currentNodeView = new NodeView(this, pointStoreView, root); traversePathToLeafAndVisitNodes(point, visitor, currentNodeView, root, 0); return visitorFactory.liftResult(this, visitor.getResult()); } protected void traversePathToLeafAndVisitNodes(float[] point, Visitor visitor, NodeView currentNodeView, int node, int depthOfNode) { if (isLeaf(node)) { currentNodeView.setCurrentNode(node, getPointIndex(node), true); visitor.acceptLeaf(currentNodeView, depthOfNode); } else { checkState(isInternal(node), " incomplete state "); if (nodeStore.toLeft(point, node)) { traversePathToLeafAndVisitNodes(point, visitor, currentNodeView, nodeStore.getLeftIndex(node), depthOfNode + 1); currentNodeView.updateToParent(node, nodeStore.getRightIndex(node), !visitor.isConverged()); } else { traversePathToLeafAndVisitNodes(point, visitor, currentNodeView, nodeStore.getRightIndex(node), depthOfNode + 1); currentNodeView.updateToParent(node, nodeStore.getLeftIndex(node), !visitor.isConverged()); } visitor.accept(currentNodeView, depthOfNode); } } /** * This is a traversal method which follows the standard traversal path (defined * in {@link #traverse(float[], IVisitorFactory)}) but at Node in checks to see * whether the visitor should split. If a split is triggered, then independent * copies of the visitor are sent down each branch of the tree and then merged * before propagating the result. * * @param point A point which determines the traversal path from the * root to a leaf node. * @param visitorFactory A visitor that will be invoked for each node on the * path. * @param The return type of the Visitor. * @return the value of {@link Visitor#getResult()}} after the traversal. */ @Override public R traverseMulti(float[] point, IMultiVisitorFactory visitorFactory) { checkArgument(root != Null, "this tree doesn't contain any nodes"); checkNotNull(point, "point must not be null"); checkNotNull(visitorFactory, "visitor must not be null"); MultiVisitor visitor = visitorFactory.newVisitor(this, point); NodeView currentNodeView = new NodeView(this, pointStoreView, root); traverseTreeMulti(point, visitor, currentNodeView, root, 0); return visitorFactory.liftResult(this, visitor.getResult()); } protected void traverseTreeMulti(float[] point, MultiVisitor visitor, NodeView currentNodeView, int node, int depthOfNode) { if (isLeaf(node)) { currentNodeView.setCurrentNode(node, getPointIndex(node), false); visitor.acceptLeaf(currentNodeView, depthOfNode); } else { checkState(isInternal(node), " incomplete state"); currentNodeView.setCurrentNodeOnly(node); if (visitor.trigger(currentNodeView)) { traverseTreeMulti(point, visitor, currentNodeView, nodeStore.getLeftIndex(node), depthOfNode + 1); MultiVisitor newVisitor = visitor.newPartialCopy(); currentNodeView.setCurrentNodeOnly(nodeStore.getRightIndex(node)); traverseTreeMulti(point, newVisitor, currentNodeView, nodeStore.getRightIndex(node), depthOfNode + 1); currentNodeView.updateToParent(node, nodeStore.getLeftIndex(node), false); visitor.combine(newVisitor); } else if (nodeStore.toLeft(point, node)) { traverseTreeMulti(point, visitor, currentNodeView, nodeStore.getLeftIndex(node), depthOfNode + 1); currentNodeView.updateToParent(node, nodeStore.getRightIndex(node), false); } else { traverseTreeMulti(point, visitor, currentNodeView, nodeStore.getRightIndex(node), depthOfNode + 1); currentNodeView.updateToParent(node, nodeStore.getLeftIndex(node), false); } visitor.accept(currentNodeView, depthOfNode); } } public int getNumberOfLeaves() { return numberOfLeaves; } public boolean isCenterOfMassEnabled() { return centerOfMassEnabled; } public boolean isStoreSequenceIndexesEnabled() { return storeSequenceIndexesEnabled; } public double getBoundingBoxCacheFraction() { return boundingBoxCacheFraction; } public int getDimension() { return dimension; } /** * * @return the root of the tree */ public Integer getRoot() { return (int) root; } /** * returns the number of samples that needs to be seen before returning * meaningful inference */ public int getOutputAfter() { return outputAfter; } @Override public boolean isOutputReady() { return getMass() >= outputAfter; } public float[] projectToTree(float[] point) { return Arrays.copyOf(point, point.length); } public float[] liftFromTree(float[] result) { return Arrays.copyOf(result, result.length); } public double[] liftFromTree(double[] result) { return Arrays.copyOf(result, result.length); } public int[] projectMissingIndices(int[] list) { return Arrays.copyOf(list, list.length); } public long getRandomSeed() { return randomSeed; } public AbstractNodeStore getNodeStore() { return nodeStore; } public static class Builder> { protected boolean storeSequenceIndexesEnabled = RandomCutForest.DEFAULT_STORE_SEQUENCE_INDEXES_ENABLED; protected boolean centerOfMassEnabled = RandomCutForest.DEFAULT_CENTER_OF_MASS_ENABLED; protected double boundingBoxCacheFraction = RandomCutForest.DEFAULT_BOUNDING_BOX_CACHE_FRACTION; protected long randomSeed = new Random().nextLong(); protected Random random = null; protected int capacity = RandomCutForest.DEFAULT_SAMPLE_SIZE; protected Optional outputAfter = Optional.empty(); protected int dimension; protected IPointStoreView pointStoreView; protected AbstractNodeStore nodeStore; protected int root = Null; protected boolean storeParent = DEFAULT_STORE_PARENT; public T capacity(int capacity) { this.capacity = capacity; return (T) this; } public T boundingBoxCacheFraction(double boundingBoxCacheFraction) { this.boundingBoxCacheFraction = boundingBoxCacheFraction; return (T) this; } public T pointStoreView(IPointStoreView pointStoreView) { this.pointStoreView = pointStoreView; return (T) this; } public T nodeStore(AbstractNodeStore nodeStore) { this.nodeStore = nodeStore; return (T) this; } public T randomSeed(long randomSeed) { this.randomSeed = randomSeed; return (T) this; } public T random(Random random) { this.random = random; return (T) this; } public T outputAfter(int outputAfter) { this.outputAfter = Optional.of(outputAfter); return (T) this; } public T dimension(int dimension) { this.dimension = dimension; return (T) this; } public T setRoot(int root) { this.root = root; return (T) this; } public T storeParent(boolean storeParent) { this.storeParent = storeParent; return (T) this; } public T storeSequenceIndexesEnabled(boolean storeSequenceIndexesEnabled) { this.storeSequenceIndexesEnabled = storeSequenceIndexesEnabled; return (T) this; } public T centerOfMassEnabled(boolean centerOfMassEnabled) { this.centerOfMassEnabled = centerOfMassEnabled; return (T) this; } public RandomCutTree build() { return new RandomCutTree(this); } } public static Builder builder() { return new Builder(); } } ================================================ FILE: Java/core/src/main/java/com/amazon/randomcutforest/util/ArrayPacking.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.util; import static com.amazon.randomcutforest.CommonUtils.checkArgument; import static com.amazon.randomcutforest.CommonUtils.checkNotNull; import static java.lang.Math.min; import java.nio.ByteBuffer; import java.util.Arrays; public class ArrayPacking { /** * For a given base value, return the smallest int value {@code p} so that * {@code base^(p + 1) >= Integer.MAX_VALUE}. If * {@code base >= Integer.MAX_VALUE}, return 1. * * @param base Compute the approximate log of {@code Integer.MAX_VALUE} in this * base. * @return the largest int value {@code p} so that * {@code base^p >= Integer.MAX_VALUE} or 1 if * {@code base >= Integer.MAX_VALUE}. */ public static int logMax(long base) { checkArgument(base > 1, "Absolute value of base must be greater than 1"); int pack = 0; long num = base; while (num < Integer.MAX_VALUE) { num = num * base; ++pack; } return Math.max(pack, 1); // pack can be 0 for max - min being more than Integer.MaxValue } /** * Pack an array of ints. If {@code compress} is true, then this method will * apply arithmetic compression to the inputs, otherwise it returns a copy of * the input. * * @param inputArray An array of ints to pack. * @param compress A flag indicating whether to apply arithmetic compression. * @return an array of packed ints. */ public static int[] pack(int[] inputArray, boolean compress) { return pack(inputArray, inputArray.length, compress); } /** * Pack an array of ints. If {@code compress} is true, then this method will * apply arithmetic compression to the inputs, otherwise it returns a copy of * the input. * * @param inputArray An array of ints to pack. * @param length The length of the output array. Only the first * {@code length} values in {@code inputArray} will be packed. * @param compress A flag indicating whether to apply arithmetic compression. * @return an array of packed ints. */ public static int[] pack(int[] inputArray, int length, boolean compress) { checkNotNull(inputArray, "inputArray must not be null"); checkArgument(0 <= length && length <= inputArray.length, "length must be between 0 and inputArray.length (inclusive)"); if (!compress || length < 3) { return Arrays.copyOf(inputArray, length); } int min = inputArray[0]; int max = inputArray[0]; for (int i = 1; i < length; i++) { min = min(min, inputArray[i]); max = Math.max(max, inputArray[i]); } long base = (long) max - min + 1; if (base == 1) { return new int[] { min, max, length }; } else { int packNum = logMax(base); int[] output = new int[3 + (int) Math.ceil(1.0 * length / packNum)]; output[0] = min; output[1] = max; output[2] = length; int len = 0; int used = 0; while (len < length) { long code = 0; int reach = min(len + packNum - 1, length - 1); for (int i = reach; i >= len; i--) { code = base * code + (inputArray[i] - min); } output[3 + used++] = (int) code; len += packNum; } // uncomment for debug; should be always true // checkArgument(used + 3 == output.length, "incorrect state"); return output; } } /** * Pack an array of shorts. If {@code compress} is true, then this method will * apply arithmetic compression to the inputs, otherwise it returns a copy of * the input. * * @param inputArray An array of ints to pack. * @param compress A flag indicating whether to apply arithmetic compression. * @return an array of packed ints. */ public static int[] pack(short[] inputArray, boolean compress) { return pack(inputArray, inputArray.length, compress); } /** * Pack an array of shorts. If {@code compress} is true, then this method will * apply arithmetic compression to the inputs, otherwise it returns a copy of * the input. * * @param inputArray An array of ints to pack. * @param length The length of the output array. Only the first * {@code length} values in {@code inputArray} will be packed. * @param compress A flag indicating whether to apply arithmetic compression. * @return an array of packed ints. */ public static int[] pack(short[] inputArray, int length, boolean compress) { checkNotNull(inputArray, "inputArray must not be null"); checkArgument(0 <= length && length <= inputArray.length, "length must be between 0 and inputArray.length (inclusive)"); if (!compress || length < 3) { int[] ret = new int[length]; for (int i = 0; i < length; i++) { ret[i] = inputArray[i]; } return ret; } int min = inputArray[0]; int max = inputArray[0]; for (int i = 1; i < length; i++) { min = min(min, inputArray[i]); max = Math.max(max, inputArray[i]); } long base = (long) max - min + 1; if (base == 1) { return new int[] { min, max, length }; } else { int packNum = logMax(base); int[] output = new int[3 + (int) Math.ceil(1.0 * length / packNum)]; output[0] = min; output[1] = max; output[2] = length; int len = 0; int used = 0; while (len < length) { long code = 0; int reach = min(len + packNum - 1, length - 1); for (int i = reach; i >= len; i--) { code = base * code + (inputArray[i] - min); } output[3 + used++] = (int) code; len += packNum; } // uncomment for debug; should be always true // checkArgument(used + 3 == output.length, "incorrect state"); return output; } } /** * Unpack an array previously created by {@link #pack(int[], int, boolean)}. * * @param packedArray An array previously created by * {@link #pack(int[], int, boolean)}. * @param decompress A flag indicating whether the packed array was created * with arithmetic compression enabled. * @return the array of unpacked ints. */ public static int[] unpackInts(int[] packedArray, boolean decompress) { checkNotNull(packedArray, " array unpacking invoked on null arrays"); if (!decompress) { return Arrays.copyOf(packedArray, packedArray.length); } return (packedArray.length < 3) ? unpackInts(packedArray, packedArray.length, decompress) : unpackInts(packedArray, packedArray[2], decompress); } /** * Unpack an array previously created by {@link #pack(int[], int, boolean)}. * * @param packedArray An array previously created by * {@link #pack(int[], int, boolean)}. * @param length The desired length of the output array. If this number is * different from the length of the array that was originally * packed, then the result will be truncated or padded with * zeros as needed. * @param decompress A flag indicating whether the packed array was created * with arithmetic compression enabled. * @return the array of unpacked ints. */ public static int[] unpackInts(int[] packedArray, int length, boolean decompress) { checkNotNull(packedArray, " array unpacking invoked on null arrays"); checkArgument(length >= 0, "incorrect length parameter"); if (packedArray.length < 3 || !decompress) { return Arrays.copyOf(packedArray, length); } int min = packedArray[0]; int max = packedArray[1]; int[] output = new int[length]; if (min == max) { if (packedArray[2] >= length) { Arrays.fill(output, min); } else { for (int i = 0; i < packedArray[2]; i++) { output[i] = min; } } } else { long base = ((long) max - min + 1); int packNum = logMax(base); int count = 0; for (int i = 3; i < packedArray.length; i++) { long code = packedArray[i]; for (int j = 0; j < packNum && count < min(packedArray[2], length); j++) { output[count++] = (int) (min + code % base); code = (int) (code / base); } } } return output; } private static short[] copyToShort(int[] array, int length) { short[] ret = new short[length]; for (int i = 0; i < Math.min(length, array.length); i++) { ret[i] = (short) array[i]; } return ret; } /** * Unpack an array previously created by {@link #pack(short[], int, boolean)}. * * @param packedArray An array previously created by * {@link #pack(short[], int, boolean)}. * @param decompress A flag indicating whether the packed array was created * with arithmetic compression enabled. * @return the array of unpacked shorts. */ public static short[] unpackShorts(int[] packedArray, boolean decompress) { checkNotNull(packedArray, " array unpacking invoked on null arrays"); if (!decompress) { return copyToShort(packedArray, packedArray.length); } return (packedArray.length < 3) ? unpackShorts(packedArray, packedArray.length, decompress) : unpackShorts(packedArray, packedArray[2], decompress); } /** * Unpack an array previously created by {@link #pack(short[], int, boolean)}. * * @param packedArray An array previously created by * {@link #pack(short[], int, boolean)}. * @param length The desired length of the output array. If this number is * different from the length of the array that was originally * packed, then the result will be truncated or padded with * zeros as needed. * @param decompress A flag indicating whether the packed array was created * with arithmetic compression enabled. * @return the array of unpacked ints. */ public static short[] unpackShorts(int[] packedArray, int length, boolean decompress) { checkNotNull(packedArray, " array unpacking invoked on null arrays"); checkArgument(length >= 0, "incorrect length parameter"); if (packedArray.length < 3 || !decompress) { return copyToShort(packedArray, length); } int min = packedArray[0]; int max = packedArray[1]; short[] output = new short[length]; if (min == max) { if (packedArray[2] >= length) { Arrays.fill(output, (short) min); } else { for (int i = 0; i < packedArray[2]; i++) { output[i] = (short) min; } } } else { long base = ((long) max - min + 1); int packNum = logMax(base); int count = 0; for (int i = 3; i < packedArray.length; i++) { long code = packedArray[i]; for (int j = 0; j < packNum && count < min(packedArray[2], length); j++) { output[count++] = (short) (min + code % base); code = (int) (code / base); } } } return output; } /** * Pack an array of doubles into an array of bytes. * * @param array An array of doubles. * @return An array of bytes representing the original array of doubles. */ public static byte[] pack(double[] array) { checkNotNull(array, "array must not be null"); return pack(array, array.length); } /** * Pack an array of doubles into an array of bytes. * * @param array An array of doubles. * @param length The number of doubles in the input array to pack into the * resulting byte array. * @return An array of bytes representing the original array of doubles. */ public static byte[] pack(double[] array, int length) { checkNotNull(array, "array must not be null"); checkArgument(0 <= length, "incorrect length parameter"); checkArgument(length <= array.length, "length must be between 0 and inputArray.length (inclusive)"); ByteBuffer buf = ByteBuffer.allocate(length * Double.BYTES); for (int i = 0; i < length; i++) { buf.putDouble(array[i]); } return buf.array(); } /** * Pack an array of floats into an array of bytes. * * @param array An array of floats. * @return An array of bytes representing the original array of floats. */ public static byte[] pack(float[] array) { checkNotNull(array, "array must not be null"); return pack(array, array.length); } /** * Pack an array of floats into an array of bytes. * * @param array An array of floats. * @param length The number of doubles in the input array to pack into the * resulting byte array. * @return An array of bytes representing the original array of floats. */ public static byte[] pack(float[] array, int length) { checkArgument(0 <= length, "incorrect length parameter"); checkArgument(length <= array.length, "length must be between 0 and inputArray.length (inclusive)"); ByteBuffer buf = ByteBuffer.allocate(length * Float.BYTES); for (int i = 0; i < length; i++) { buf.putFloat(array[i]); } return buf.array(); } /** * Unpack an array of bytes as an array of doubles. * * @param bytes An array of bytes. * @return an array of doubles obtained by marshalling consecutive bytes in the * input array into doubles. */ public static double[] unpackDoubles(byte[] bytes) { checkNotNull(bytes, "bytes must not be null"); return unpackDoubles(bytes, bytes.length / Double.BYTES); } /** * Unpack an array of bytes as an array of doubles. * * @param bytes An array of bytes. * @param length The desired length of the resulting double array. The input * will be truncated or padded with zeros as needed. * @return an array of doubles obtained by marshalling consecutive bytes in the * input array into doubles. */ public static double[] unpackDoubles(byte[] bytes, int length) { checkNotNull(bytes, "bytes must not be null"); checkArgument(length >= 0, "length must be greater than or equal to 0"); checkArgument(bytes.length % Double.BYTES == 0, "bytes.length must be divisible by Double.BYTES"); ByteBuffer buf = ByteBuffer.wrap(bytes); double[] result = new double[length]; int m = Math.min(length, bytes.length / Double.BYTES); for (int i = 0; i < m; i++) { result[i] = buf.getDouble(); } return result; } /** * Unpack an array of bytes as an array of floats. * * @param bytes An array of bytes. * @return an array of floats obtained by marshalling consecutive bytes in the * input array into floats. */ public static float[] unpackFloats(byte[] bytes) { checkNotNull(bytes, "bytes must not be null"); return unpackFloats(bytes, bytes.length / Float.BYTES); } /** * Unpack an array of bytes as an array of floats. * * @param bytes An array of bytes. * @param length The desired length of the resulting float array. The input will * be truncated or padded with zeros as needed. * @return an array of doubles obtained by marshalling consecutive bytes in the * input array into floats. */ public static float[] unpackFloats(byte[] bytes, int length) { checkNotNull(bytes, "bytes must not be null"); checkArgument(length >= 0, "length must be greater than or equal to 0"); checkArgument(bytes.length % Float.BYTES == 0, "bytes.length must be divisible by Float.BYTES"); ByteBuffer buf = ByteBuffer.wrap(bytes); float[] result = new float[length]; int m = Math.min(length, bytes.length / Float.BYTES); for (int i = 0; i < m; i++) { result[i] = buf.getFloat(); } return result; } } ================================================ FILE: Java/core/src/main/java/com/amazon/randomcutforest/util/ArrayUtils.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.util; import java.util.Arrays; /** * A utility class for data arrays. */ public class ArrayUtils { /** * Returns a clean deep copy of the point. Current clean-ups include changing * negative zero -0.0 to positive zero 0.0. * * @param point The original data point. * @return a clean deep copy of the original point. */ public static double[] cleanCopy(double[] point) { double[] pointCopy = Arrays.copyOf(point, point.length); for (int i = 0; i < point.length; i++) { if (pointCopy[i] == 0.0) { pointCopy[i] = 0.0; } } return pointCopy; } public static float[] cleanCopy(float[] point) { float[] pointCopy = Arrays.copyOf(point, point.length); for (int i = 0; i < point.length; i++) { if (pointCopy[i] == 0.0) { pointCopy[i] = 0.0f; } } return pointCopy; } } ================================================ FILE: Java/core/src/main/java/com/amazon/randomcutforest/util/ShingleBuilder.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.util; import static com.amazon.randomcutforest.CommonUtils.checkArgument; import static com.amazon.randomcutforest.CommonUtils.checkNotNull; /** * A utility class for creating shingled points, which are also referred to as * shingles. A shingle consists of multiple points appended together. If * individual points have n dimensions, and we include k points in a shingle, * then the shingle will have size n * m. * * There are two strategies for shingling: sliding and cyclic. In a sliding * shingle, new points are appended to the end of the shingle, and old points * are removed from the front. For example, if we have a shingle size of 4 which * currently contains the points a, b, c, and d, then we can represent the * shingle as abcd. The following schematic shows how the shingle is updated as * we add new points e and f. * *

 *     abcd => bcde
 *     bcde => cdef
 * 
* * With cycling shingling, when a new point is added to a shingle it overwrites * the oldest point in the shingle. Using the same setup as above, a cyclic * shingle would be updated as follows: * *
 *     abcd => ebcd
 *     ebcd => efcd
 * 
*/ public class ShingleBuilder { /** * Number of dimensions of each point in the shingle. */ private final int dimensions; /** * Number of points in the shingle. */ private final int shingleSize; /** * A buffer containing points recently added to the shingle. */ private final double[][] recentPoints; /** * A flag indicating whether we should use a cyclic shift or a linear shift when * creating shingles. */ private final boolean cyclic; /** * The index where the next point will be copied to. This is equal to the index * of the oldest point currently in the shingle. */ private int shingleIndex; /** * A flag indicating whether the shingle has been completely filled once. */ private boolean full; /** * Create a new ShingleBuilder with the given dimensions and shingle size. * * @param dimensions The number of dimensions in the input points. * @param shingleSize The number of points to store in a shingle. * @param cyclic If true, the shingle will use cyclic updates. If false, it * will use sliding updates. */ public ShingleBuilder(int dimensions, int shingleSize, boolean cyclic) { checkArgument(dimensions > 0, "dimensions must be greater than 0"); checkArgument(shingleSize > 0, "shingleSize must be greater than 0"); this.dimensions = dimensions; this.shingleSize = shingleSize; this.cyclic = cyclic; recentPoints = new double[shingleSize][dimensions]; shingleIndex = 0; full = false; } /** * Create a ShingleBuilder with the given dimensions and shingleSize. The * resulting builder uses sliding updates. * * @param dimensions The number of dimensions in the input points. * @param shingleSize The number of points to store in a shingle. */ public ShingleBuilder(int dimensions, int shingleSize) { this(dimensions, shingleSize, false); } /** * @return true if the shingle has been completely filled once, false otherwise. */ public boolean isFull() { return full; } /** * @return the number of dimensions in input points. */ public int getInputPointSize() { return dimensions; } /** * @return the number of dimensions in a shingled point. */ public int getShingledPointSize() { return dimensions * shingleSize; } /** * @return true if this ShingleBuilder uses cyclic updates, false otherwise. */ public boolean isCyclic() { return cyclic; } /** * Return the index where the next input point will be stored in the internal * shingle buffer. If the ShingleBuilder uses cyclic updates, this value * indicates the current point in the cycle. * * @return the index where the next input point will be stored in the internal * shingle buffer. */ public int getShingleIndex() { return shingleIndex; } /** * Add a new point to this shingle. The point values are copied. * * @param point The new point to be added to the shingle. */ public void addPoint(double[] point) { checkNotNull(point, "point must not be null"); checkArgument(point.length == dimensions, String.format("point.length must equal %d", dimensions)); System.arraycopy(point, 0, recentPoints[shingleIndex], 0, dimensions); shingleIndex = (shingleIndex + 1) % shingleSize; if (!full && shingleIndex == 0) { full = true; } } /** * @return the current shingled point. */ public double[] getShingle() { double[] shingle = new double[shingleSize * dimensions]; getShingle(shingle); return shingle; } /** * Write the current shingled point into the supplied buffer. * * @param shingle A buffer where the shingled point will be written. */ public void getShingle(double[] shingle) { checkNotNull(shingle, "shingle must not be null"); checkArgument(shingle.length == dimensions * shingleSize, "shingle.length must be dimensions * shingleSize"); int beginIndex = cyclic ? 0 : shingleIndex; for (int i = 0; i < shingleSize; i++) { System.arraycopy(recentPoints[(beginIndex + i) % shingleSize], 0, shingle, i * dimensions, dimensions); } } } ================================================ FILE: Java/core/src/main/java/com/amazon/randomcutforest/util/Weighted.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.util; import static com.amazon.randomcutforest.CommonUtils.checkArgument; import java.util.ArrayList; import java.util.List; import java.util.Random; /** * a container class that manages weights * * @param */ public class Weighted { public Q index; public float weight; public Weighted(Q object, float weight) { this.index = object; this.weight = weight; } /** * a generic MonteCarlo sampler that creates an Arraylist of WeightedIndexes * * @param input input list of weighted objects * @param seed random seed for repreoducibility * @param forceSampleFraction add the items which have weight over this fraction * @param scale scale that multiples the weights of the remainder. * Note that elements that are sampled are rescaled * to have ensured that the total weight (after * removal of heavy items) remains the same in * expectation * @param a generic index type, typically float[] in the * current usage * @return a randomly sampled arraylist (which can be the same list) of length * about LengthBound */ public static List> createSample(List> input, long seed, int lengthBound, double forceSampleFraction, double scale) { if (input.size() < lengthBound) { return input; } ArrayList> samples = new ArrayList<>(); Random rng = new Random(seed); double totalWeight = input.stream().map(x -> (double) x.weight).reduce(Double::sum).get(); double remainder = totalWeight; if (forceSampleFraction > 0) { remainder = input.stream().map(e -> { if (e.weight > totalWeight * forceSampleFraction) { samples.add(new Weighted<>(e.index, e.weight)); return 0.0; } else { return (double) e.weight; } }).reduce(Double::sum).get(); } float factor = (float) (lengthBound * 1.0 / input.size()); float newScale = (float) (scale * (remainder / totalWeight) / factor); input.stream().forEach(e -> { if ((e.weight <= totalWeight * forceSampleFraction) && (rng.nextDouble() < factor)) { samples.add(new Weighted<>(e.index, e.weight * newScale)); } }); return samples; } /** * an utility routine to pick the element such that the prefix sum including * that element exceeds a weight (or is the last element) * * @param points a list of weighted objects * @param wt a parameter determining the cumulative weight * @return the position of the item satisfying the prefix condition or the last * element */ public static Weighted prefixPick(List> points, double wt) { checkArgument(points.size() > 0, "cannot pick from an empty list"); double running = wt; Weighted saved = points.get(0); for (Weighted point : points) { if (running - point.weight <= 0.0) { return point; } running -= point.weight; saved = point; } return saved; } } ================================================ FILE: Java/core/src/test/java/com/amazon/randomcutforest/AttributionExamplesFunctionalTest.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertTrue; import java.util.Random; import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; import com.amazon.randomcutforest.returntypes.DiVector; import com.amazon.randomcutforest.testutils.NormalMixtureTestData; @Tag("functional") public class AttributionExamplesFunctionalTest { private static int numberOfTrees; private static int sampleSize; private static int dimensions; private static int randomSeed; private static RandomCutForest parallelExecutionForest; private static RandomCutForest singleThreadedForest; private static RandomCutForest forestSpy; private static double baseMu; private static double baseSigma; private static double anomalyMu; private static double anomalySigma; private static double transitionToAnomalyProbability; private static double transitionToBaseProbability; private static int dataSize; @Test public void RRCFattributionTest() { // starts with the same setup as rrcfTest; data corresponds to two small // clusters at x=+/-5.0 // queries q_1=(0,0,0, ..., 0) // inserts updates (0,1,0, ..., 0) a few times // queries q_2=(0,1,0, ..., 0) // attribution of q_2 is now affected by q_1 (which is still an anomaly) int newDimensions = 30; randomSeed = 101; sampleSize = 256; RandomCutForest newForest = RandomCutForest.builder().numberOfTrees(100).sampleSize(sampleSize) .dimensions(newDimensions).randomSeed(randomSeed).compact(true).boundingBoxCacheFraction(0.0).build(); dataSize = 2000 + 5; baseMu = 0.0; baseSigma = 1.0; anomalyMu = 0.0; anomalySigma = 1.0; transitionToAnomalyProbability = 0.0; // ignoring anomaly cluster for now transitionToBaseProbability = 1.0; Random prg = new Random(0); NormalMixtureTestData generator = new NormalMixtureTestData(baseMu, baseSigma, anomalyMu, anomalySigma, transitionToAnomalyProbability, transitionToBaseProbability); double[][] data = generator.generateTestData(dataSize, newDimensions, 100); for (int i = 0; i < 2000; i++) { // shrink, shift at random for (int j = 0; j < newDimensions; j++) data[i][j] *= 0.01; if (prg.nextDouble() < 0.5) data[i][0] += 5.0; else data[i][0] -= 5.0; newForest.update(data[i]); } double[] queryOne = new double[newDimensions]; double[] queryTwo = new double[newDimensions]; queryTwo[1] = 1; double originalScoreTwo = newForest.getAnomalyScore(queryTwo); DiVector originalAttrTwo = newForest.getAnomalyAttribution(queryTwo); assertTrue(originalScoreTwo > 3.0); assertEquals(originalScoreTwo, originalAttrTwo.getHighLowSum(), 1E-5); assertTrue(originalAttrTwo.high[0] > 1.0); // due to -5 cluster assertTrue(originalAttrTwo.low[0] > 1.0); // due to +5 cluster assertTrue(originalAttrTwo.high[1] > 1); // due to +1 in query assertTrue(originalAttrTwo.getHighLowSum(0) > 1.1 * originalAttrTwo.getHighLowSum(1)); // we insert queryOne a few times to make sure it is sampled for (int i = 2000; i < 2000 + 5; i++) { double score = newForest.getAnomalyScore(queryOne); double score2 = newForest.getAnomalyScore(queryTwo); DiVector attr2 = newForest.getAnomalyAttribution(queryTwo); // verify assertTrue(score > 2.0); assertTrue(score2 > 2.0); assertEquals(attr2.getHighLowSum(), score2, 1E-5); for (int j = 0; j < newDimensions; j++) data[i][j] *= 0.01; newForest.update(data[i]); // 5 different anomalous points } double midScoreTwo = newForest.getAnomalyScore(queryTwo); DiVector midAttrTwo = newForest.getAnomalyAttribution(queryTwo); assertTrue(midScoreTwo > 2.4); assertEquals(midScoreTwo, midAttrTwo.getHighLowSum(), 1E-5); assertTrue(midAttrTwo.high[0] < 1); // due to -5 cluster !!! assertTrue(midAttrTwo.low[0] < 1); // due to +5 cluster !!! assertTrue(midAttrTwo.high[1] > 1); // due to +1 in query assertTrue(midAttrTwo.getHighLowSum(0) < 1.1 * midAttrTwo.high[1]); // reversal of the dominant dimension // still an anomaly; but the attribution is masked by points // a few more updates, which are identical for (int i = 2005; i < 2010; i++) { newForest.update(queryOne); } double finalScoreTwo = newForest.getAnomalyScore(queryTwo); DiVector finalAttrTwo = newForest.getAnomalyAttribution(queryTwo); assertTrue(finalScoreTwo > 2.4); assertEquals(finalScoreTwo, finalAttrTwo.getHighLowSum(), 1E-5); assertTrue(finalAttrTwo.high[0] < 0.5); // due to -5 cluster !!! assertTrue(finalAttrTwo.low[0] < 0.5); // due to +5 cluster !!! assertTrue(finalAttrTwo.high[1] > 1); // due to +1 in query assertTrue(2.5 * finalAttrTwo.getHighLowSum(0) < finalAttrTwo.high[1]); // the drop in high[0] and low[0] is steep and the attribution has shifted } @Test public void attributionUnMaskingTest() { // starts with the same setup as rrcfTest; data corresponds to two small // clusters at x=+/-5.0 // queries q_1=(0,0,0, ..., 0) // inserts updates (0,1,0, ..., 0) a few times // queries q_2=(0,1,0, ..., 0) // attribution of q_2 is now affected by q_1 (which is still an anomaly) int newDimensions = 30; randomSeed = 179; sampleSize = 256; RandomCutForest newForest = RandomCutForest.builder().numberOfTrees(100).sampleSize(sampleSize) .dimensions(newDimensions).randomSeed(randomSeed).compact(true) .boundingBoxCacheFraction(new Random().nextDouble()).timeDecay(1e-5).build(); dataSize = 2000 + 5; baseMu = 0.0; baseSigma = 1.0; anomalyMu = 0.0; anomalySigma = 1.5; transitionToAnomalyProbability = 0.0; // ignoring anomaly cluster for now transitionToBaseProbability = 1.0; Random prg = new Random(0); NormalMixtureTestData generator = new NormalMixtureTestData(baseMu, baseSigma, anomalyMu, anomalySigma, transitionToAnomalyProbability, transitionToBaseProbability); double[][] data = generator.generateTestData(dataSize, newDimensions, 100); for (int i = 0; i < 2000; i++) { // shrink, shift at random for (int j = 0; j < newDimensions; j++) data[i][j] *= 0.01; if (prg.nextDouble() < 0.5) data[i][0] += 5.0; else data[i][0] -= 5.0; newForest.update(data[i]); } float[] queryOne = new float[30]; float[] queryTwo = new float[30]; queryTwo[1] = 1; double originalScoreTwo = newForest.getAnomalyScore(queryTwo); // testing approximation with precision 0 (no approximation) DiVector originalAttrTwo = newForest.getApproximateDynamicAttribution(queryTwo, 0, true, 0, CommonUtils::defaultScoreSeenFunction, CommonUtils::defaultScoreUnseenFunction, CommonUtils::defaultDampFunction); originalAttrTwo.componentwiseTransform(x -> CommonUtils.defaultScalarNormalizerFunction(x, sampleSize)); assertTrue(originalScoreTwo > 3.0); assertEquals(originalScoreTwo, originalAttrTwo.getHighLowSum(), 1E-5); assertTrue(originalAttrTwo.high[0] > 0.75); // due to -5 cluster assertTrue(originalAttrTwo.low[0] > 0.75); // due to +5 cluster assertTrue(originalAttrTwo.high[1] > 1); // due to +1 in query assertTrue(originalAttrTwo.getHighLowSum(0) > originalAttrTwo.getHighLowSum(1)); double apx = newForest.getApproximateDynamicScore(queryTwo, 0.1, true, 0, CommonUtils::defaultScoreSeenFunction, CommonUtils::defaultScoreUnseenFunction, CommonUtils::defaultDampFunction); assertEquals(originalScoreTwo, CommonUtils.defaultScalarNormalizerFunction(apx, sampleSize), 0.2); assertEquals(apx, newForest .getApproximateDynamicAttribution(queryTwo, 0.1, true, 0, CommonUtils::defaultScoreSeenFunction, CommonUtils::defaultScoreUnseenFunction, CommonUtils::defaultDampFunction) .getHighLowSum(), 1e-5); // we insert queryOne a few times to make sure it is sampled for (int i = 2000; i < 2000 + 5; i++) { double score = newForest.getAnomalyScore(queryOne); double score2 = newForest.getAnomalyScore(queryTwo); DiVector attr2 = newForest.getDynamicAttribution(queryTwo, 0, CommonUtils::defaultScoreSeenFunction, CommonUtils::defaultScoreUnseenFunction, CommonUtils::defaultDampFunction); attr2.componentwiseTransform(x -> CommonUtils.defaultScalarNormalizerFunction(x, sampleSize)); double score3 = newForest.getDynamicScore(queryTwo, 1, CommonUtils::defaultScoreSeenFunction, CommonUtils::defaultScoreUnseenFunction, CommonUtils::defaultDampFunction); score3 = CommonUtils.defaultScalarNormalizerFunction(score3, sampleSize); DiVector attr3 = newForest.getDynamicAttribution(queryTwo, 1, CommonUtils::defaultScoreSeenFunction, CommonUtils::defaultScoreUnseenFunction, CommonUtils::defaultDampFunction); attr3.componentwiseTransform(x -> CommonUtils.defaultScalarNormalizerFunction(x, sampleSize)); // verify assertTrue(score > 2.0); assertTrue(score2 > 2.0); assertTrue(score3 > 2.0); assertEquals(attr2.getHighLowSum(), score2, 1E-5); assertEquals(attr3.getHighLowSum(), score3, 1E-5); for (int j = 0; j < newDimensions; j++) data[i][j] *= 0.01; newForest.update(data[i]); // 5 different anomalous points } double midScoreTwo = newForest.getAnomalyScore(queryTwo); DiVector midAttrTwo = newForest.getDynamicAttribution(queryTwo, 0, CommonUtils::defaultScoreSeenFunction, CommonUtils::defaultScoreUnseenFunction, CommonUtils::defaultDampFunction); midAttrTwo.componentwiseTransform(x -> CommonUtils.defaultScalarNormalizerFunction(x, sampleSize)); assertTrue(midScoreTwo > 2.5); assertEquals(midScoreTwo, midAttrTwo.getHighLowSum(), 1E-5); assertTrue(midAttrTwo.high[1] > 1); // due to +1 in query assertTrue(midAttrTwo.getHighLowSum(0) < 1.2 * midAttrTwo.high[1]); // reversal of the dominant dimension // still an anomaly; but the attribution is masked by points double midUnmaskedScore = newForest.getDynamicScore(queryTwo, 1, CommonUtils::defaultScoreSeenFunction, CommonUtils::defaultScoreUnseenFunction, CommonUtils::defaultDampFunction); midUnmaskedScore = CommonUtils.defaultScalarNormalizerFunction(midUnmaskedScore, sampleSize); DiVector midUnmaskedAttr = newForest.getDynamicAttribution(queryTwo, 1, CommonUtils::defaultScoreSeenFunction, CommonUtils::defaultScoreUnseenFunction, CommonUtils::defaultDampFunction); midUnmaskedAttr.componentwiseTransform(x -> CommonUtils.defaultScalarNormalizerFunction(x, sampleSize)); assertTrue(midUnmaskedScore > 3.0); assertEquals(midUnmaskedScore, midUnmaskedAttr.getHighLowSum(), 1E-5); assertTrue(midUnmaskedAttr.high[1] > 1); // due to +1 in query assertTrue(midUnmaskedAttr.getHighLowSum(0) > midUnmaskedAttr.getHighLowSum(1)); // contribution from dimension 0 is still dominant // the attributions in dimension 0 are reduced, but do not // or become as small as quickly as in the other case // a few more updates, which are identical for (int i = 2005; i < 2010; i++) { newForest.update(queryOne); } double finalScoreTwo = newForest.getAnomalyScore(queryTwo); DiVector finalAttrTwo = newForest.getDynamicAttribution(queryTwo, 0, CommonUtils::defaultScoreSeenFunction, CommonUtils::defaultScoreUnseenFunction, CommonUtils::defaultDampFunction); finalAttrTwo.componentwiseTransform(x -> CommonUtils.defaultScalarNormalizerFunction(x, sampleSize)); assertTrue(finalScoreTwo > 2.5); assertEquals(finalScoreTwo, finalAttrTwo.getHighLowSum(), 1E-5); assertTrue(finalAttrTwo.high[1] > 1); // due to +1 in query assertTrue(2 * finalAttrTwo.getHighLowSum(0) < finalAttrTwo.high[1]); // the drop in high[0] and low[0] is steep and the attribution has shifted // different thresholds double finalUnmaskedScore = newForest.getDynamicScore(queryTwo, 5, CommonUtils::defaultScoreSeenFunction, CommonUtils::defaultScoreUnseenFunction, CommonUtils::defaultDampFunction); finalUnmaskedScore = CommonUtils.defaultScalarNormalizerFunction(finalUnmaskedScore, sampleSize); DiVector finalUnmaskedAttr = newForest.getDynamicAttribution(queryTwo, 5, CommonUtils::defaultScoreSeenFunction, CommonUtils::defaultScoreUnseenFunction, CommonUtils::defaultDampFunction); finalUnmaskedAttr.componentwiseTransform(x -> CommonUtils.defaultScalarNormalizerFunction(x, sampleSize)); assertTrue(finalUnmaskedScore > 3.0); assertEquals(finalUnmaskedScore, finalUnmaskedAttr.getHighLowSum(), 1E-5); assertTrue(finalUnmaskedAttr.high[1] > 1); // due to +1 in query assertTrue(finalUnmaskedAttr.getHighLowSum(0) > 0.8 * finalUnmaskedAttr.getHighLowSum(1)); // the attributions in dimension 0 continue to be reduced, but do not vanish // or become small as in the other case; the gap is not a factor of 4 } } ================================================ FILE: Java/core/src/test/java/com/amazon/randomcutforest/CPUTest.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest; import java.util.Arrays; import java.util.concurrent.ForkJoinPool; import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; import com.amazon.randomcutforest.testutils.ShingledMultiDimDataWithKeys; /** * The following "test" is intended to provide an approximate estimate of the * improvement from parallelization. At the outset, we remark that running the * test from inside an IDE/environment may reflect more of the environment. * Issues such as warming are not reflected in this test. * * Users who wish to obtain more calibrated estimates should use a benchmark -- * preferably using their own "typical" data and their end to end setup. * Performance of RCF is data dependent. Such users may be invoking RCF * functions differently from a standard "impute, score, update" process * recommended for streaming time series data. * * Moreover, in the context of a large number of models, the rate at which the * models require updates is also a factor and not controlled herein. * * The two tests should produce near identical sum of scores, and (root) mean * squared error of the impute up to machine precision (since the order of the * arithmetic operations would vary). * * To summarize the lessons, it appears that parallelism almost always helps * (upto resource limitations). If an user is considering a single model -- say * from a console or dashboard, they should consider having parallel threads * enabled. For large number of models, it may be worthwhile to also investigate * different ways of achieving parallelism and not just attempt to change the * executor framework. * */ @Tag("functional") public class CPUTest { int numberOfTrees = 30; int DATA_SIZE = 10000; int numberOfForests = 6; int numberOfAttributes = 5; int shingleSize = 30; int sampleSize = 256; // set numberOfThreads = 1 to turn off parallelism int numberOfThreads = 3; // change boundingBoxCacheFraction to see different memory consumption // this would be germane for large number of models cache/memory contention double boundingBoxCacheFraction = 1.0; int dimensions = shingleSize * numberOfAttributes; @Test public void profileTestSync() { double[] mse = new double[numberOfForests]; int[] mseCount = new int[numberOfForests]; double[] score = new double[numberOfForests]; double[][] data = ShingledMultiDimDataWithKeys.getMultiDimData(DATA_SIZE, 60, 100, 5, 0, numberOfAttributes).data; RandomCutForest[] forests = new RandomCutForest[numberOfForests]; for (int k = 0; k < numberOfForests; k++) { forests[k] = RandomCutForest.builder().numberOfTrees(numberOfTrees).dimensions(dimensions) .shingleSize(shingleSize).boundingBoxCacheFraction(boundingBoxCacheFraction).randomSeed(99 + k) .outputAfter(10).parallelExecutionEnabled(true).threadPoolSize(numberOfThreads) .internalShinglingEnabled(true).initialAcceptFraction(0.1).sampleSize(sampleSize).build(); } for (int j = 0; j < data.length; j++) { for (int k = 0; k < numberOfForests; k++) { score[k] += forests[k].getAnomalyScore(data[j]); if (j % 10 == 0 && j > 0) { double[] result = forests[k].extrapolate(1); double sum = 0; for (int i = 0; i < result.length; i++) { double t = result[i] - data[j][i]; sum += t * t; } sum = Math.sqrt(sum); mse[k] += sum; mseCount[k]++; } forests[k].update(data[j]); } } for (int k = 0; k < numberOfForests; k++) { System.out.println(" Forest " + k); System.out.println(" MSE " + mse[k] / mseCount[k]); System.out.println(" scoresum " + score[k] / data.length); } } @Test public void profileTestASync() { double[] mse = new double[numberOfForests]; int[] mseCount = new int[numberOfForests]; double[] score = new double[numberOfForests]; double[][] data = ShingledMultiDimDataWithKeys.getMultiDimData(DATA_SIZE, 60, 100, 5, 0, numberOfAttributes).data; RandomCutForest[] forests = new RandomCutForest[numberOfForests]; for (int k = 0; k < numberOfForests; k++) { forests[k] = RandomCutForest.builder().numberOfTrees(numberOfTrees).dimensions(dimensions) .shingleSize(shingleSize).boundingBoxCacheFraction(boundingBoxCacheFraction).randomSeed(99 + k) .outputAfter(10).parallelExecutionEnabled(false).internalShinglingEnabled(true) .initialAcceptFraction(0.1).sampleSize(sampleSize).build(); } ForkJoinPool forkJoinPool = new ForkJoinPool(numberOfThreads); int[] indices = new int[numberOfForests]; for (int k = 0; k < numberOfForests; k++) { indices[k] = k; } for (int j = 0; j < data.length; j++) { int finalJ = j; forkJoinPool.submit(() -> Arrays.stream(indices).parallel().forEach(k -> { score[k] += forests[k].getAnomalyScore(data[finalJ]); if (finalJ % 10 == 0 && finalJ > 0) { double[] result = forests[k].extrapolate(1); double sum = 0; for (int i = 0; i < result.length; i++) { double t = result[i] - data[finalJ][i]; sum += t * t; } sum = Math.sqrt(sum); mse[k] += sum; mseCount[k]++; } forests[k].update(data[finalJ]); })).join(); } for (int k = 0; k < numberOfForests; k++) { System.out.println(" Forest " + k); System.out.println(" MSE " + mse[k] / mseCount[k]); System.out.println(" scoresum " + score[k] / data.length); } } } ================================================ FILE: Java/core/src/test/java/com/amazon/randomcutforest/ConditionalFieldTest.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertTrue; import java.util.Random; import org.junit.jupiter.api.Test; import com.amazon.randomcutforest.returntypes.SampleSummary; import com.amazon.randomcutforest.testutils.NormalMixtureTestData; public class ConditionalFieldTest { private static int numberOfTrees; private static int sampleSize; private static int dimensions; private static int randomSeed; private static RandomCutForest parallelExecutionForest; private static RandomCutForest singleThreadedForest; private static RandomCutForest forestSpy; private static double baseMu; private static double baseSigma; private static double anomalyMu; private static double anomalySigma; private static double transitionToAnomalyProbability; private static double transitionToBaseProbability; private static int dataSize; @Test public void SimpleTest() { int newDimensions = 30; randomSeed = 101; sampleSize = 256; RandomCutForest newForest = RandomCutForest.builder().numberOfTrees(100).sampleSize(sampleSize) .dimensions(newDimensions).randomSeed(randomSeed).boundingBoxCacheFraction(0.0).build(); dataSize = 2000 + 5; baseMu = 0.0; baseSigma = 1.0; anomalyMu = 0.0; anomalySigma = 1.0; transitionToAnomalyProbability = 0.0; // ignoring anomaly cluster for now transitionToBaseProbability = 1.0; Random prg = new Random(0); NormalMixtureTestData generator = new NormalMixtureTestData(baseMu, baseSigma, anomalyMu, anomalySigma, transitionToAnomalyProbability, transitionToBaseProbability); double[][] data = generator.generateTestData(dataSize, newDimensions, 100); for (int i = 0; i < 2000; i++) { // shrink, shift at random for (int j = 0; j < newDimensions; j++) data[i][j] *= 0.01; if (prg.nextDouble() < 0.5) data[i][0] += 5.0; else data[i][0] -= 5.0; newForest.update(data[i]); } float[] queryOne = new float[newDimensions]; float[] queryTwo = new float[newDimensions]; queryTwo[1] = 1; SampleSummary summary = newForest.getConditionalFieldSummary(queryOne, new int[] { 0 }, 1, 0, true, false, 1, 1); assert (summary.summaryPoints.length == 2); assert (summary.relativeWeight.length == 2); assert (Math.abs(summary.summaryPoints[0][0] - 5.0) < 0.01 || Math.abs(summary.summaryPoints[0][0] + 5.0) < 0.01); assert (Math.abs(summary.summaryPoints[1][0] - 5.0) < 0.01 || Math.abs(summary.summaryPoints[1][0] + 5.0) < 0.01); assert (summary.relativeWeight[0] > 0.25); assert (summary.relativeWeight[1] > 0.25); SampleSummary projectedSummaryOne = newForest.getConditionalFieldSummary(queryOne, new int[] { 0 }, 1, 0, false, true, 1, 1); assertTrue(projectedSummaryOne.summaryPoints == null); assertTrue(projectedSummaryOne.mean.length == 1); SampleSummary projectedSummaryTwo = newForest.getConditionalFieldSummary(queryOne, new int[] { 0 }, 1, 0, true, true, 0, 1); assertTrue(projectedSummaryTwo.summaryPoints != null); assertTrue(projectedSummaryTwo.mean.length == 1); SampleSummary projectedSummaryThree = newForest.getConditionalFieldSummary(queryOne, new int[] { 0 }, 1, 0, false, false, 1, 3); assertTrue(projectedSummaryThree.summaryPoints == null); assertTrue(projectedSummaryThree.mean.length == newDimensions / 3); SampleSummary projectedSummaryFour = newForest.getConditionalFieldSummary(queryOne, new int[] { 0 }, 1, 0, true, false, 1, 4); assertTrue(projectedSummaryFour.summaryPoints != null); assertTrue(projectedSummaryFour.mean.length == newDimensions / 4); summary = newForest.getConditionalFieldSummary(queryTwo, new int[] { 0 }, 1, 0, true, false, 1, 1); assert (summary.summaryPoints.length == 2); assert (summary.relativeWeight.length == 2); assertEquals(summary.summaryPoints[0][1], 1, 1e-6); assertEquals(summary.summaryPoints[1][1], 1, 1e-6); assert (Math.abs(summary.summaryPoints[0][0] - 5.0) < 0.01 || Math.abs(summary.summaryPoints[0][0] + 5.0) < 0.01); assert (Math.abs(summary.summaryPoints[1][0] - 5.0) < 0.01 || Math.abs(summary.summaryPoints[1][0] + 5.0) < 0.01); assert (summary.relativeWeight[0] > 0.25); assert (summary.relativeWeight[1] > 0.25); } } ================================================ FILE: Java/core/src/test/java/com/amazon/randomcutforest/DynamicPointSetFunctionalTest.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest; import static com.amazon.randomcutforest.testutils.ExampleDataSets.generateFan; import static java.lang.Math.PI; import static java.lang.Math.cos; import static java.lang.Math.sin; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertTrue; import java.util.List; import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; import com.amazon.randomcutforest.returntypes.DensityOutput; import com.amazon.randomcutforest.returntypes.Neighbor; @Tag("functional") public class DynamicPointSetFunctionalTest { private static int numberOfTrees; private static int sampleSize; private static int dimensions; private static int randomSeed; private static RandomCutForest parallelExecutionForest; private static RandomCutForest singleThreadedForest; private static RandomCutForest forestSpy; private static double baseMu; private static double baseSigma; private static double anomalyMu; private static double anomalySigma; private static double transitionToAnomalyProbability; private static double transitionToBaseProbability; private static int dataSize; static double[] rotateClockWise(double[] point, double theta) { double[] result = new double[2]; result[0] = cos(theta) * point[0] + sin(theta) * point[1]; result[1] = -sin(theta) * point[0] + cos(theta) * point[1]; return result; } @Test public void movingDensity() { int newDimensions = 2; randomSeed = 123; RandomCutForest newForest = RandomCutForest.builder().dimensions(newDimensions).randomSeed(randomSeed) .timeDecay(1.0 / 800).centerOfMassEnabled(true).storeSequenceIndexesEnabled(true).build(); double[][] data = generateFan(1000, 3); double[] queryPoint = new double[] { 0.7, 0 }; for (int degree = 0; degree < 360; degree += 2) { for (int j = 0; j < data.length; j++) { newForest.update(rotateClockWise(data[j], 2 * PI * degree / 360)); } DensityOutput density = newForest.getSimpleDensity(queryPoint); double value = density.getDensity(0.001, 2); if ((degree <= 60) || ((degree >= 120) && (degree <= 180)) || ((degree >= 240) && (degree <= 300))) assertTrue(value < 0.8); // the fan is above at 90,210,330 if (((degree >= 75) && (degree <= 105)) || ((degree >= 195) && (degree <= 225)) || ((degree >= 315) && (degree <= 345))) assertTrue(value > 0.5); // fan is close by // intentionally 0.5 is below 0.8 for a robust test // Testing for directionality // There can be unclear directionality when the // blades are right above double bladeAboveInY = density.getDirectionalDensity(0.001, 2).low[1]; double bladeBelowInY = density.getDirectionalDensity(0.001, 2).high[1]; double bladesToTheLeft = density.getDirectionalDensity(0.001, 2).high[0]; double bladesToTheRight = density.getDirectionalDensity(0.001, 2).low[0]; assertEquals(value, bladeAboveInY + bladeBelowInY + bladesToTheLeft + bladesToTheRight, 1E-6); // the tests below have a freedom of 10% of the total value if (((degree >= 75) && (degree <= 85)) || ((degree >= 195) && (degree <= 205)) || ((degree >= 315) && (degree <= 325))) { assertTrue(bladeAboveInY + 0.1 * value > bladeBelowInY); assertTrue(bladeAboveInY + 0.1 * value > bladesToTheRight); } if (((degree >= 95) && (degree <= 105)) || ((degree >= 215) && (degree <= 225)) || ((degree >= 335) && (degree <= 345))) { assertTrue(bladeBelowInY + 0.1 * value > bladeAboveInY); assertTrue(bladeBelowInY + 0.1 * value > bladesToTheRight); } if (((degree >= 60) && (degree <= 75)) || ((degree >= 180) && (degree <= 195)) || ((degree >= 300) && (degree <= 315))) { assertTrue(bladeAboveInY + 0.1 * value > bladesToTheLeft); assertTrue(bladeAboveInY + 0.1 * value > bladesToTheRight); } if (((degree >= 105) && (degree <= 120)) || ((degree >= 225) && (degree <= 240)) || (degree >= 345)) { assertTrue(bladeBelowInY + 0.1 * value > bladesToTheLeft); assertTrue(bladeBelowInY + 0.1 * value > bladesToTheRight); } // fans are farthest to the left at 30,150 and 270 if (((degree >= 15) && (degree <= 45)) || ((degree >= 135) && (degree <= 165)) || ((degree >= 255) && (degree <= 285))) { assertTrue(bladesToTheLeft + 0.1 * value > bladeAboveInY + bladeBelowInY + bladesToTheRight); assertTrue(bladeAboveInY + bladeBelowInY + 0.1 * value > bladesToTheRight); } } } @Test public void movingNeighbors() { int newDimensions = 2; randomSeed = 123; RandomCutForest newForest = RandomCutForest.builder().dimensions(newDimensions).randomSeed(randomSeed) .timeDecay(1.0 / 800).centerOfMassEnabled(true).storeSequenceIndexesEnabled(true).build(); double[][] data = generateFan(1000, 3); double[] queryPoint = new double[] { 0.7, 0 }; for (int degree = 0; degree < 360; degree += 2) { for (int j = 0; j < data.length; j++) { newForest.update(rotateClockWise(data[j], 2 * PI * degree / 360)); } List ans = newForest.getNearNeighborsInSample(queryPoint, 1); List closeNeighBors = newForest.getNearNeighborsInSample(queryPoint, 0.1); Neighbor best = null; if (ans != null) { best = ans.get(0); for (int j = 1; j < ans.size(); j++) { assert (ans.get(j).distance >= best.distance); } } // fan is away at 30, 150 and 270 if (((degree > 15) && (degree < 45)) || ((degree >= 135) && (degree <= 165)) || ((degree >= 255) && (degree <= 285))) { assertTrue(closeNeighBors.size() == 0); // no close neighbor assertTrue(best.distance > 0.3); } // fan is overhead at 90, 210 and 330 if (((degree > 75) && (degree < 105)) || ((degree >= 195) && (degree <= 225)) || ((degree >= 315) && (degree <= 345))) { assertTrue(closeNeighBors.size() > 0); assertEquals(closeNeighBors.get(0).distance, best.distance, 1E-10); } } } } ================================================ FILE: Java/core/src/test/java/com/amazon/randomcutforest/ForecastTest.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest; import static com.amazon.randomcutforest.testutils.ShingledMultiDimDataWithKeys.generateShingledData; import static org.junit.jupiter.api.Assertions.assertEquals; import java.util.Random; import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; import com.amazon.randomcutforest.config.Precision; import com.amazon.randomcutforest.returntypes.RangeVector; import com.amazon.randomcutforest.testutils.MultiDimDataWithKey; import com.amazon.randomcutforest.testutils.ShingledMultiDimDataWithKeys; @Tag("functional") public class ForecastTest { @Test public void basic() { int sampleSize = 256; int baseDimensions = 1; int shingleSize = 8; int dimensions = baseDimensions * shingleSize; long seed = new Random().nextLong(); System.out.println(seed); int length = 4 * sampleSize; int outputAfter = 128; RandomCutForest forest = new RandomCutForest.Builder<>().compact(true).dimensions(dimensions) .precision(Precision.FLOAT_32).randomSeed(seed).internalShinglingEnabled(true).shingleSize(shingleSize) .outputAfter(outputAfter).build(); // as the ratio of amplitude (signal) to noise is changed, the estimation range // in forecast // (or any other inference) should increase MultiDimDataWithKey dataWithKeys = ShingledMultiDimDataWithKeys.getMultiDimData(length, 50, 100, 10, seed, baseDimensions); System.out.println(dataWithKeys.changes.length + " anomalies injected "); double[][] shingledData = generateShingledData(dataWithKeys.data, shingleSize, baseDimensions, false); assertEquals(shingledData.length, dataWithKeys.data.length - shingleSize + 1); int horizon = 20; double[] error = new double[horizon]; double[] lowerError = new double[horizon]; double[] upperError = new double[horizon]; for (int j = 0; j < dataWithKeys.data.length; j++) { // forecast first; change centrality to achieve a control over the sampling // setting centrality = 0 would correspond to random sampling from the leaves // reached by // impute visitor RangeVector forecast = forest.extrapolateFromShingle(forest.lastShingledPoint(), horizon, 1, 1.0); assert (forecast.values.length == horizon); for (int i = 0; i < horizon; i++) { // check ranges assert (forecast.values[i] >= forecast.lower[i]); assert (forecast.values[i] <= forecast.upper[i]); // compute errors if (j > outputAfter + shingleSize - 1 && j + i < dataWithKeys.data.length) { double t = dataWithKeys.data[j + i][0] - forecast.values[i]; error[i] += t * t; t = dataWithKeys.data[j + i][0] - forecast.lower[i]; lowerError[i] += t * t; t = dataWithKeys.data[j + i][0] - forecast.upper[i]; upperError[i] += t * t; } } forest.update(dataWithKeys.data[j]); } System.out.println("RMSE "); for (int i = 0; i < horizon; i++) { double t = error[i] / (dataWithKeys.data.length - shingleSize + 1 - outputAfter - i); System.out.print(Math.sqrt(t) + " "); } System.out.println(); System.out.println("RMSE Lower "); for (int i = 0; i < horizon; i++) { double t = lowerError[i] / (dataWithKeys.data.length - shingleSize + 1 - outputAfter - i); System.out.print(Math.sqrt(t) + " "); } System.out.println(); System.out.println("RMSE Upper "); for (int i = 0; i < horizon; i++) { double t = upperError[i] / (dataWithKeys.data.length - shingleSize + 1 - outputAfter - i); System.out.print(Math.sqrt(t) + " "); } System.out.println(); } } ================================================ FILE: Java/core/src/test/java/com/amazon/randomcutforest/MultiCenterTest.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest; import static com.amazon.randomcutforest.CommonUtils.toFloatArray; import static java.lang.Math.min; import static org.junit.jupiter.api.Assertions.assertArrayEquals; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertThrows; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; import java.util.Random; import java.util.function.BiFunction; import java.util.stream.Stream; import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; import org.junit.jupiter.params.provider.MethodSource; import com.amazon.randomcutforest.summarization.GenericMultiCenter; import com.amazon.randomcutforest.summarization.ICluster; import com.amazon.randomcutforest.summarization.MultiCenter; import com.amazon.randomcutforest.summarization.Summarizer; import com.amazon.randomcutforest.testutils.NormalMixtureTestData; import com.amazon.randomcutforest.util.Weighted; @Tag("functional") public class MultiCenterTest { private static double baseMu; private static double baseSigma; private static double anomalyMu; private static double anomalySigma; private static double transitionToAnomalyProbability; private static double transitionToBaseProbability; private static int dataSize; @Test public void constructorTest() { assertThrows(IllegalArgumentException.class, () -> MultiCenter.initialize(new float[4], 0, -1.0, 1)); assertThrows(IllegalArgumentException.class, () -> MultiCenter.initialize(new float[4], 0, 2.0, 1)); assertThrows(IllegalArgumentException.class, () -> MultiCenter.initialize(new float[4], 0, 1.0, 0)); assertThrows(IllegalArgumentException.class, () -> MultiCenter.initialize(new float[4], 0, 1.0, 1000)); assertThrows(IllegalArgumentException.class, () -> GenericMultiCenter.initialize(new float[4], 0, -1.0, 1)); assertThrows(IllegalArgumentException.class, () -> GenericMultiCenter.initialize(new float[4], 0, 2.0, 1)); assertThrows(IllegalArgumentException.class, () -> GenericMultiCenter.initialize(new float[4], 0, 1.0, 0)); assertThrows(IllegalArgumentException.class, () -> GenericMultiCenter.initialize(new float[4], 0, 1.0, 1000)); } @Test public void initializationTest() { GenericMultiCenter genericMultiCenter = GenericMultiCenter.initialize(new float[4], 0, 0.5, 1); MultiCenter multiCenter = MultiCenter.initialize(new float[4], 0, 0.5, 1); List> a = new ArrayList<>(); assertEquals(multiCenter.getAssignedPoints().getClass(), a.getClass()); assertEquals(genericMultiCenter.getAssignedPoints(), Collections.emptyList()); assertEquals(genericMultiCenter.averageRadius(), 0); assertEquals(genericMultiCenter.extentMeasure(), 0); } @ParameterizedTest @MethodSource("generateArguments") public void SummaryTest(BiFunction distance) { int over = 0; int under = 0; for (int numTrials = 0; numTrials < 10; numTrials++) { long seed = new Random().nextLong(); Random random = new Random(seed); int newDimensions = random.nextInt(10) + 3; dataSize = 200000; float[][] points = getData(dataSize, newDimensions, random.nextInt(), distance); List> summary = Summarizer.multiSummarize(points, 5 * newDimensions, 10 * newDimensions, 1, false, 0.8, distance, random.nextInt(), false, random.nextDouble(), 1); System.out.println("trial " + numTrials + " : " + summary.size() + " clusters for " + newDimensions + " dimensions, seed : " + seed); if (summary.size() < 2 * newDimensions) { ++under; } else if (summary.size() > 2 * newDimensions) { ++over; } } assert (under <= 1); } @ParameterizedTest @MethodSource("generateArguments") public void MultiSummaryTestGeneric(BiFunction distance) { int over = 0; int under = 0; for (int numTrials = 0; numTrials < 10; numTrials++) { long seed = new Random().nextLong(); Random random = new Random(seed); int newDimensions = random.nextInt(10) + 3; dataSize = 200000; float[][] points = getData(dataSize, newDimensions, random.nextInt(), distance); List> summary = Summarizer.multiSummarize(points, 5 * newDimensions, 10 * newDimensions, 1, false, 0.8, distance, random.nextInt(), false, random.nextDouble(), 5); System.out.println("trial " + numTrials + " : " + summary.size() + " clusters for " + newDimensions + " dimensions, seed : " + seed); if (summary.size() < 2 * newDimensions) { ++under; } else if (summary.size() > 2 * newDimensions) { ++over; } } assert (under <= 1); } @Test public void MultiSummaryTest() { int over = 0; int under = 0; for (int numTrials = 0; numTrials < 10; numTrials++) { long seed = new Random().nextLong(); Random random = new Random(seed); int newDimensions = random.nextInt(10) + 3; dataSize = 200000; float[][] points = getData(dataSize, newDimensions, random.nextInt(), Summarizer::L2distance); List> summary = Summarizer.multiSummarize(points, 5 * newDimensions, 0.9, true, 1, seed); System.out.println("trial " + numTrials + " : " + summary.size() + " clusters for " + newDimensions + " dimensions, seed : " + seed); if (summary.size() < 2 * newDimensions) { ++under; } else if (summary.size() > 2 * newDimensions) { ++over; } } assert (under <= 1); } @ParameterizedTest @MethodSource("generateArguments") public void ParallelTest(BiFunction distance) { long seed = new Random().nextLong(); Random random = new Random(seed); int newDimensions = random.nextInt(10) + 3; dataSize = 200000; float[][] points = getData(dataSize, newDimensions, random.nextInt(), distance); System.out.println("checking parallelEnabled seed : " + seed); int nextSeed = random.nextInt(); // these can differ for shinkage != 0 due to floating point issues List> summary1 = Summarizer.multiSummarize(points, 5 * newDimensions, 10 * newDimensions, 1, false, 0.8, distance, nextSeed, false, 0, 5); ArrayList list = new ArrayList<>(); for (float[] point : points) { list.add(point); } List> summary2 = Summarizer.multiSummarize(list, 5 * newDimensions, 10 * newDimensions, 1, false, 0.8, distance, nextSeed, true, 0, 5); assertEquals(summary2.size(), summary1.size(), " incorrect number of clusters"); for (int i = 0; i < summary2.size(); i++) { assertEquals(summary1.get(i).getWeight(), summary2.get(i).getWeight(), 1e-6); assertEquals(summary1.get(i).extentMeasure(), summary2.get(i).extentMeasure(), 1e-6); List> reps1 = summary1.get(i).getRepresentatives(); List> reps2 = summary2.get(i).getRepresentatives(); assertEquals(reps1.size(), reps2.size()); for (int j = 0; j < reps1.size(); j++) { assertEquals(reps1.get(j).weight, reps2.get(j).weight, 1e-6); assertArrayEquals(reps1.get(j).index, reps2.get(j).index, 1e-6f); } } } @Test public void StringTest() { long seed = new Random().nextLong(); System.out.println("checking String summarization seed : " + seed); Random random = new Random(seed); int size = 100; int numberOfStrings = 20000; String[] points = new String[numberOfStrings]; for (int i = 0; i < numberOfStrings; i++) { if (random.nextDouble() < 0.5) { points[i] = getABString(size, 0.8, random); } else { points[i] = getABString(size, 0.2, random); } } int nextSeed = random.nextInt(); List> summary = Summarizer.multiSummarize(points, 5, 10, 1, false, 0.8, MultiCenterTest::toyDistance, nextSeed, false, 0.1, 5); System.out.println(); assertEquals(summary.size(), 2); } public static double toyDistance(String a, String b) { if (a.length() > b.length()) { return toyDistance(b, a); } double[][] dist = new double[2][b.length() + 1]; for (int j = 0; j < b.length() + 1; j++) { dist[0][j] = j; } for (int i = 1; i < a.length() + 1; i++) { dist[1][0] = i; for (int j = 1; j < b.length() + 1; j++) { double t = dist[0][j - 1] + ((a.charAt(i - 1) == b.charAt(j - 1)) ? 0 : 1); dist[1][j] = min(min(t, dist[0][j] + 1), dist[1][j - 1] + 1); } for (int j = 0; j < b.length() + 1; j++) { dist[0][j] = dist[1][j]; } } return dist[1][b.length()]; } public float[][] getData(int dataSize, int newDimensions, int seed, BiFunction distance) { baseMu = 0.0; baseSigma = 1.0; anomalyMu = 0.0; anomalySigma = 1.0; transitionToAnomalyProbability = 0.0; // ignoring anomaly cluster for now transitionToBaseProbability = 1.0; Random prg = new Random(0); NormalMixtureTestData generator = new NormalMixtureTestData(baseMu, baseSigma, anomalyMu, anomalySigma, transitionToAnomalyProbability, transitionToBaseProbability); double[][] data = generator.generateTestData(dataSize, newDimensions, seed); float[][] floatData = new float[dataSize][]; float[] allZero = new float[newDimensions]; float[] sigma = new float[newDimensions]; Arrays.fill(sigma, 1f); double scale = distance.apply(allZero, sigma); for (int i = 0; i < dataSize; i++) { // shrink, shift at random int nextD = prg.nextInt(newDimensions); for (int j = 0; j < newDimensions; j++) { data[i][j] *= 1.0 / (3.0); // standard deviation adds up across dimension; taking square root // and using s 3 sigma ball if (j == nextD) { if (prg.nextDouble() < 0.5) data[i][j] += 2.0 * scale; else data[i][j] -= 2.0 * scale; } } floatData[i] = toFloatArray(data[i]); } return floatData; } public String getABString(int size, double probabilityOfA, Random random) { StringBuilder stringBuilder = new StringBuilder(); int newSize = size + random.nextInt(size / 5); for (int i = 0; i < newSize; i++) { if (random.nextDouble() < probabilityOfA) { stringBuilder.append("-"); } else { stringBuilder.append("_"); } } return stringBuilder.toString(); } private static Stream generateArguments() { return Stream.of(Arguments.of((BiFunction) Summarizer::L1distance), Arguments.of((BiFunction) Summarizer::L2distance)); } } ================================================ FILE: Java/core/src/test/java/com/amazon/randomcutforest/PredictiveRandomCutForestTest.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest; import static com.amazon.randomcutforest.CommonUtils.checkArgument; import static com.amazon.randomcutforest.CommonUtils.toFloatArray; import static com.amazon.randomcutforest.config.ForestMode.STANDARD; import static com.amazon.randomcutforest.config.ForestMode.TIME_AUGMENTED; import static com.amazon.randomcutforest.config.ImputationMethod.FIXED_VALUES; import static com.amazon.randomcutforest.config.ImputationMethod.NEXT; import static com.amazon.randomcutforest.config.ImputationMethod.RCF; import static com.amazon.randomcutforest.config.ImputationMethod.ZERO; import static com.amazon.randomcutforest.config.TransformMethod.NONE; import static com.amazon.randomcutforest.config.TransformMethod.NORMALIZE; import static org.junit.jupiter.api.Assertions.assertArrayEquals; import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; import java.util.Random; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.EnumSource; import com.amazon.randomcutforest.config.ForestMode; import com.amazon.randomcutforest.config.ImputationMethod; import com.amazon.randomcutforest.config.TransformMethod; import com.amazon.randomcutforest.preprocessor.Preprocessor; import com.amazon.randomcutforest.returntypes.SampleSummary; import com.amazon.randomcutforest.state.PredictiveRandomCutForestMapper; import com.amazon.randomcutforest.summarization.Summarizer; import com.amazon.randomcutforest.testutils.MultiDimDataWithKey; import com.amazon.randomcutforest.testutils.NormalMixtureTestData.NormalDistribution; import com.amazon.randomcutforest.testutils.ShingledMultiDimDataWithKeys; public class PredictiveRandomCutForestTest { @Test public void testConfig() { int sampleSize = 256; int baseDimensions = 2; int shingleSize = 4; int dimensions = baseDimensions * shingleSize; long seed = new Random().nextLong(); // have to enable internal shingling or keep it unspecified assertDoesNotThrow( () -> PredictiveRandomCutForest.builder().sampleSize(sampleSize).inputDimensions(baseDimensions) .randomSeed(seed).forestMode(ForestMode.TIME_AUGMENTED).shingleSize(shingleSize).build()); PredictiveRandomCutForest forest = PredictiveRandomCutForest.builder().sampleSize(sampleSize) .inputDimensions(baseDimensions).randomSeed(seed).startNormalization(1) .forestMode(ForestMode.TIME_AUGMENTED).shingleSize(shingleSize).build(); assertNotNull(((Preprocessor) forest.getPreprocessor()).getInitialTimeStamps()); assertEquals(forest.getForest().getDimensions(), (baseDimensions + 1) * shingleSize); assertThrows(IllegalArgumentException.class, () -> PredictiveRandomCutForest.builder().inputDimensions(baseDimensions).randomSeed(seed) .forestMode(STANDARD).weights(new double[] { -1.0, 0.0 }).shingleSize(shingleSize).build()); assertThrows(IllegalArgumentException.class, () -> PredictiveRandomCutForest.builder().inputDimensions(baseDimensions).randomSeed(seed) .forestMode(STANDARD).startNormalization(-10).shingleSize(shingleSize).threadPoolSize(1) .build()); assertThrows(IllegalArgumentException.class, () -> PredictiveRandomCutForest.builder().inputDimensions(baseDimensions).randomSeed(seed) .forestMode(STANDARD).outputAfter(1).startNormalization(shingleSize + 10) .shingleSize(shingleSize).build()); assertThrows(IllegalArgumentException.class, () -> PredictiveRandomCutForest.builder().inputDimensions(baseDimensions).randomSeed(seed) .forestMode(STANDARD).shingleSize(shingleSize).transformMethod(NORMALIZE) .startNormalization(111).stopNormalization(100).build()); } public void simpleExample(int dataSize, TransformMethod method, ForestMode mode, double error) { int shingleSize = 1; int numberOfTrees = 100; int sampleSize = 256; // 5 dimensions, three are known and 4,5 th unknown (and stochastic) int baseDimensions = 5; PredictiveRandomCutForest forest = new PredictiveRandomCutForest.Builder<>().inputDimensions(baseDimensions) .randomSeed(0).numberOfTrees(numberOfTrees).shingleSize(shingleSize).sampleSize(sampleSize) .forestMode(mode).startNormalization(32).transformMethod(method).build(); long seed = 17; NormalDistribution normal = new NormalDistribution(new Random(seed)); double total = 0; double extTotal = 0; Random random = new Random(seed + 10); for (int i = 0; i < dataSize; i++) { float[] record = generateRecordKey(random); checkArgument(record[3] == 0, " should not be filled"); checkArgument(record[4] == 0, " should not be filled"); SampleSummary answer = forest.predict(record, 0, new int[] { 3, 4 }); assertEquals(answer.summaryPoints.length, answer.measure.length); fillInValues(record, random, normal); forest.update(record, 0); double tag = Double.MAX_VALUE; double ext = Double.MAX_VALUE; for (int y = 0; y < answer.summaryPoints.length; y++) { double t = Summarizer.L2distance(record, answer.summaryPoints[y]); double u = Summarizer.L2distance(new float[5], answer.measure[y]); if (t < tag) { tag = t; ext = u; } } if (i > forest.forest.getOutputAfter()) { total += tag; extTotal += ext; } } assertTrue(5 * error > total / (dataSize - forest.getForest().getOutputAfter())); assertTrue(5 * error > extTotal / (dataSize - forest.getForest().getOutputAfter())); PredictiveRandomCutForestMapper mapper = new PredictiveRandomCutForestMapper(); PredictiveRandomCutForest second = mapper.toModel(mapper.toState(forest)); assertArrayEquals(second.preprocessor.getLastShingledPoint(), forest.preprocessor.getLastShingledPoint(), 1e-10f); } @Test public void configTest() { simpleExample(1000, NORMALIZE, STANDARD, 2); simpleExample(1000, NORMALIZE, TIME_AUGMENTED, 2); simpleExample(1000, NONE, STANDARD, 2); simpleExample(1000, NONE, TIME_AUGMENTED, 2); } float[] generateRecordKey(Random random) { float[] record = new float[5]; double firstToss = random.nextDouble(); double secondToss = random.nextDouble(); double thirdToss = random.nextDouble(); if (firstToss < 0.8) { record[0] = 1.0f; if (secondToss < 0.8) { record[1] = 19; } else { record[1] = 25; } record[2] = (float) thirdToss * 10; } else { record[0] = 0.0f; if (secondToss < 0.3) { record[1] = 16; record[2] = 12; } else { record[1] = 20; record[2] = 4; } } return record; } void fillInValues(float[] record, Random random, NormalDistribution normal) { if (record[0] < 0.5) { double next = random.nextDouble(); record[3] = (float) ((next < 0.5) ? normal.nextDouble(20, 5) : normal.nextDouble(40, 5)); record[4] = (float) normal.nextDouble(30, 3); } else { if (record[1] < 20) { record[3] = (float) normal.nextDouble(30, 10); record[4] = (float) normal.nextDouble(10, 3); } else { if (record[2] < 6) { double next = random.nextDouble(); record[3] = (float) ((next < 0.3) ? normal.nextDouble(20, 5) : normal.nextDouble(40, 3)); record[4] = (float) normal.nextDouble(50, 1); } else { double next = random.nextDouble(); record[3] = (float) normal.nextDouble(30, 1); record[4] = (float) ((next < 0.7) ? normal.nextDouble(10, 3) : normal.nextDouble(30, 5)); } } } } @ParameterizedTest @EnumSource(ImputationMethod.class) void testImpute(ImputationMethod method) { int baseDimensions = 1; // long seed = new Random().nextLong(); // shingle size 1 ie not useful for impute assertThrows(IllegalArgumentException.class, () -> { PredictiveRandomCutForest forest = PredictiveRandomCutForest.builder().inputDimensions(baseDimensions) .randomSeed(0).forestMode(ForestMode.STREAMING_IMPUTE).imputationMethod(method).shingleSize(1) .build(); }); int newShingleSize = 4; PredictiveRandomCutForest forest = PredictiveRandomCutForest.builder().inputDimensions(baseDimensions) .randomSeed(42).forestMode(ForestMode.STREAMING_IMPUTE).imputationMethod(method) .transformMethod(NORMALIZE).storeSequenceIndexesEnabled(true).shingleSize(newShingleSize) .useImputedFraction(0.76).fillValues(new double[] { 0 }).build(); float[] fixedData = new float[] { 1.0f }; float[] newData = new float[] { 10.0f }; float[] negativeData = new float[] { -10.0f }; Random random = new Random(0); int count = 0; for (int i = 0; i < 200 + new Random().nextInt(100); i++) { long timeStamp = (long) count * 113 + random.nextInt(10); float[] test = (random.nextDouble() < 0.5) ? newData : negativeData; double scoreA = forest.getExpectedInverseDepthScore(test, timeStamp); assertTrue(scoreA == 0.0 || scoreA > 2.0); double scoreB = forest.getExpectedInverseDepthAttribution(test, timeStamp).getHighLowSum(); assertEquals(scoreA, scoreB, 1e-6); double scoreC = forest.getRCFDistanceAttribution(test, timeStamp).getHighLowSum(); assertTrue(scoreC == 0.0 || scoreC > 8.0); if (i != 20 && random.nextDouble() < 0.9) { // few drops -- and definitely one during normalization forest.update(fixedData, timeStamp); } else { // note that the large should be imputed away forest.update(test, timeStamp, new int[] { 0 }); } ++count; } long timestamp = (long) count * 113 + 1000; double score = forest.getExpectedInverseDepthScore(newData, timestamp); assertEquals(score, forest.getExpectedInverseDepthAttribution(newData, timestamp).getHighLowSum(), 1e-6); assertTrue(score > 1.0); if (method != NEXT && method != ZERO && method != FIXED_VALUES) { if (method == RCF) { SampleSummary summary = forest.predict(newData, timestamp, new int[] { 0 }); assertArrayEquals(summary.summaryPoints[0], fixedData, 1e-6f); } } assertEquals(forest.getForest().getTotalUpdates(), count); // the next gap is 1226 + 113 which is about 11 times 113 long newstamp = (long) count * 113 + 1226; assertEquals(11, forest.preprocessor.numberOfImputes(newstamp)); forest.update(newData, newstamp); // time has to increase for streamingImpute assertThrows(IllegalArgumentException.class, () -> { forest.update(newData, newstamp - 1); }); } @ParameterizedTest @EnumSource(TransformMethod.class) public void timeAugmentedTest(TransformMethod transformMethod) { int sampleSize = 256; int baseDimensions = 1; int shingleSize = 4; int dimensions = baseDimensions * shingleSize; int numTrials = 1; // test is exact equality, reducing the number of trials int numberOfTrees = 30; // and using fewer trees to speed up test int length = 10 * sampleSize; int dataSize = 2 * length; for (int i = 0; i < numTrials; i++) { long seed = new Random().nextLong(); System.out.println("seed = " + seed); PredictiveRandomCutForest first = PredictiveRandomCutForest.builder().inputDimensions(baseDimensions) .randomSeed(0).numberOfTrees(numberOfTrees).shingleSize(shingleSize).sampleSize(sampleSize) .forestMode(ForestMode.STANDARD).transformMethod(transformMethod).outputAfter(32) .initialAcceptFraction(0.125).build(); PredictiveRandomCutForest second = PredictiveRandomCutForest.builder().inputDimensions(baseDimensions) .randomSeed(0).numberOfTrees(numberOfTrees).shingleSize(shingleSize).sampleSize(sampleSize) .forestMode(ForestMode.TIME_AUGMENTED).weightTime(0).transformMethod(transformMethod) .outputAfter(32).initialAcceptFraction(0.125).build(); Random noise = new Random(0); // change the last argument seed for a different run MultiDimDataWithKey dataWithKeys = ShingledMultiDimDataWithKeys.getMultiDimData(dataSize + shingleSize - 1, 50, 100, 5, seed, baseDimensions); int count = 0; for (int j = 0; j < length; j++) { long timestamp = 100 * count + noise.nextInt(10) - 5; assertEquals(first.getExpectedInverseDepthScore(toFloatArray(dataWithKeys.data[j]), timestamp), second.getExpectedInverseDepthScore(toFloatArray(dataWithKeys.data[j]), timestamp)); first.update(toFloatArray(dataWithKeys.data[j]), timestamp); second.update(toFloatArray(dataWithKeys.data[j]), timestamp); // grade will not be the same because dimension changes ++count; } PredictiveRandomCutForestMapper mapper = new PredictiveRandomCutForestMapper(); PredictiveRandomCutForest third = mapper.toModel(mapper.toState(second)); for (int j = length; j < 2 * length; j++) { // can be a different gap long timestamp = 150 * count + noise.nextInt(10) - 5; assertEquals(first.getExpectedInverseDepthScore(toFloatArray(dataWithKeys.data[j]), timestamp), second.getExpectedInverseDepthScore(toFloatArray(dataWithKeys.data[j]), timestamp)); assertEquals(first.getExpectedInverseDepthScore(toFloatArray(dataWithKeys.data[j]), timestamp), third.getExpectedInverseDepthScore(toFloatArray(dataWithKeys.data[j]), timestamp)); first.update(toFloatArray(dataWithKeys.data[j]), timestamp); second.update(toFloatArray(dataWithKeys.data[j]), timestamp); third.update(toFloatArray(dataWithKeys.data[j]), timestamp); } } } } ================================================ FILE: Java/core/src/test/java/com/amazon/randomcutforest/RandomCutForestBuilderTest.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest; import static com.amazon.randomcutforest.CommonUtils.validateInternalState; import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; import java.util.Random; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import com.amazon.randomcutforest.store.PointStore; public class RandomCutForestBuilderTest { private int numberOfTrees; private int sampleSize; private int outputAfter; private int dimensions; private double lambda; private long randomSeed; private int threadPoolSize; private RandomCutForest forest; public static final int DEFAULT_OUTPUT_AFTER_FRACTION = 4; @BeforeEach public void setUp() { numberOfTrees = 99; sampleSize = 201; outputAfter = 201 / 5; dimensions = 2; lambda = 0.12; randomSeed = 12345; threadPoolSize = 9; forest = RandomCutForest.builder().numberOfTrees(numberOfTrees).sampleSize(sampleSize).outputAfter(outputAfter) .dimensions(dimensions).timeDecay(lambda).randomSeed(randomSeed).storeSequenceIndexesEnabled(true) .centerOfMassEnabled(true).parallelExecutionEnabled(true).threadPoolSize(threadPoolSize).build(); } @Test public void testForestBuilderWithCustomArguments() { assertEquals(numberOfTrees, forest.getNumberOfTrees()); assertEquals(sampleSize, forest.getSampleSize()); assertEquals(outputAfter, forest.getOutputAfter()); assertEquals(dimensions, forest.getDimensions()); assertEquals(lambda, forest.getTimeDecay()); assertTrue(forest.isStoreSequenceIndexesEnabled()); assertTrue(forest.isCenterOfMassEnabled()); assertTrue(forest.isParallelExecutionEnabled()); assertEquals(threadPoolSize, forest.getThreadPoolSize()); } @Test public void testDefaultForestWithDimensionArgument() { RandomCutForest f = RandomCutForest.defaultForest(10); assertEquals(10, f.getDimensions()); assertEquals(256, f.getSampleSize()); assertEquals(256 / DEFAULT_OUTPUT_AFTER_FRACTION, f.getOutputAfter()); assertFalse(f.isStoreSequenceIndexesEnabled()); assertFalse(f.isCenterOfMassEnabled()); assertFalse(f.isParallelExecutionEnabled()); assertEquals(0, f.getThreadPoolSize()); } @Test public void testDefaultForestWithDimensionAndRandomSeedArguments() { RandomCutForest f = RandomCutForest.defaultForest(11, 123); assertEquals(11, f.getDimensions()); assertEquals(256, f.getSampleSize()); assertEquals(256 / DEFAULT_OUTPUT_AFTER_FRACTION, f.getOutputAfter()); assertFalse(f.isStoreSequenceIndexesEnabled()); assertFalse(f.isCenterOfMassEnabled()); assertFalse(f.isParallelExecutionEnabled()); assertEquals(0, f.getThreadPoolSize()); } @Test public void testDefaultForestWithCustomOutputAfterArgument() { RandomCutForest f = RandomCutForest.defaultForest(10); assertEquals(10, f.getDimensions()); assertEquals(256, f.getSampleSize()); assertEquals(256 / DEFAULT_OUTPUT_AFTER_FRACTION, f.getOutputAfter()); assertFalse(f.isStoreSequenceIndexesEnabled()); assertFalse(f.isCenterOfMassEnabled()); assertFalse(f.isParallelExecutionEnabled()); assertEquals(0, f.getThreadPoolSize()); } @Test public void testForestBuilderWithDefaultParallelExecutionThreadPoolSize() { RandomCutForest forest = RandomCutForest.builder().numberOfTrees(numberOfTrees).sampleSize(sampleSize) .outputAfter(outputAfter).dimensions(dimensions).timeDecay(lambda).randomSeed(randomSeed) .storeSequenceIndexesEnabled(true).centerOfMassEnabled(true).parallelExecutionEnabled(true).build(); assertEquals(numberOfTrees, forest.getNumberOfTrees()); assertEquals(sampleSize, forest.getSampleSize()); assertEquals(outputAfter, forest.getOutputAfter()); assertEquals(dimensions, forest.getDimensions()); assertEquals(lambda, forest.getTimeDecay()); assertTrue(forest.isStoreSequenceIndexesEnabled()); assertTrue(forest.isCenterOfMassEnabled()); assertTrue(forest.isParallelExecutionEnabled()); assertEquals(Runtime.getRuntime().availableProcessors() - 1, forest.getThreadPoolSize()); } @Test public void testForestBuilderWithDefaultLambdaValue() { RandomCutForest forest = RandomCutForest.builder().dimensions(4).sampleSize(sampleSize).build(); assertEquals(1.0 / (RandomCutForest.DEFAULT_SAMPLE_SIZE_COEFFICIENT_IN_TIME_DECAY * sampleSize), forest.getTimeDecay()); } @Test public void testIllegalExceptionIsThrownWhenNumberOfTreesIsZero() { assertThrows(IllegalArgumentException.class, () -> RandomCutForest.builder().numberOfTrees(0) .sampleSize(sampleSize).dimensions(dimensions).timeDecay(lambda).build()); } @Test public void testIllegalExceptionIsThrownWhenSampleSizeIsZero() { assertThrows(IllegalArgumentException.class, () -> RandomCutForest.builder().numberOfTrees(numberOfTrees) .sampleSize(0).dimensions(dimensions).timeDecay(lambda).build()); } @Test public void testIllegalExceptionIsThrownWhenOutputAfterIsNegative() { assertThrows(IllegalArgumentException.class, () -> RandomCutForest.builder().numberOfTrees(numberOfTrees) .sampleSize(sampleSize).outputAfter(-10).dimensions(dimensions).timeDecay(lambda).build()); } @Test public void testIllegalExceptionIsNotThrownWhenOutputAfterIsGreaterThanSample() { assertDoesNotThrow(() -> RandomCutForest.builder().numberOfTrees(numberOfTrees).sampleSize(sampleSize) .outputAfter(sampleSize + 1).dimensions(dimensions).timeDecay(lambda).build()); } @Test public void testIllegalExceptionIsThrownWhenDimensionIsNotProvided() { assertThrows(IllegalArgumentException.class, () -> RandomCutForest.builder().numberOfTrees(numberOfTrees) .sampleSize(sampleSize).timeDecay(lambda).build()); } @Test public void testIllegalExceptionIsThrownWhenLambdaIsNegative() { assertThrows(IllegalArgumentException.class, () -> RandomCutForest.builder().numberOfTrees(numberOfTrees) .sampleSize(sampleSize).dimensions(dimensions).timeDecay(-0.1).build()); } @Test public void testIllegalExceptionIsThrownWhenPoolSizeIsZero() { assertThrows(IllegalArgumentException.class, () -> RandomCutForest.builder().numberOfTrees(numberOfTrees).sampleSize(sampleSize) .dimensions(dimensions).threadPoolSize(0).parallelExecutionEnabled(true).build()); } @Test public void testIllegalExceptionIsThrownWhenPoolSizeIsNegative() { assertThrows(IllegalArgumentException.class, () -> RandomCutForest.builder().numberOfTrees(numberOfTrees) .sampleSize(sampleSize).dimensions(dimensions).threadPoolSize(-10).build()); } @Test public void testPoolSizeIsZeroWhenParallelExecutionIsDisabled() { RandomCutForest f = RandomCutForest.builder().numberOfTrees(numberOfTrees).sampleSize(sampleSize) .dimensions(dimensions).parallelExecutionEnabled(false).build(); assertFalse(f.isParallelExecutionEnabled()); assertEquals(0, f.getThreadPoolSize()); } @Test public void testShingleSize() { assertThrows(IllegalArgumentException.class, () -> RandomCutForest.builder().dimensions(dimensions).shingleSize(3).build()); } @Test public void testCache() { assertThrows(IllegalArgumentException.class, () -> RandomCutForest.builder().dimensions(dimensions).boundingBoxCacheFraction(-1).build()); assertThrows(IllegalArgumentException.class, () -> RandomCutForest.builder().dimensions(dimensions).boundingBoxCacheFraction(2).build()); } @Test public void initalPointStore() { assertThrows(IllegalArgumentException.class, () -> RandomCutForest.builder().dimensions(1).initialPointStoreSize(-1).build()); RandomCutForest f = RandomCutForest.builder().dimensions(1).numberOfTrees(1).initialPointStoreSize(10) .dynamicResizingEnabled(true).build(); assertEquals(((PointStore) f.stateCoordinator.getStore()).getCapacity(), 512); assertEquals(((PointStore) f.stateCoordinator.getStore()).getCurrentStoreCapacity(), 10); for (int i = 0; i < 1000; i++) { f.update(new double[] { new Random().nextDouble() }); } assertThrows(IllegalStateException.class, () -> validateInternalState(false, "message")); validateInternalState(((PointStore) f.stateCoordinator.getStore()).getCurrentStoreCapacity() > 10, "error"); } } ================================================ FILE: Java/core/src/test/java/com/amazon/randomcutforest/RandomCutForestConsistencyFunctionalTest.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertTrue; import java.util.Random; import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; import com.amazon.randomcutforest.config.Precision; import com.amazon.randomcutforest.testutils.NormalMixtureTestData; /** * This class validates that forests configured with different execution modes * (sequential or parallel) or different internal data representations are * executing the algorithm steps in the same way. */ @Tag("functional") public class RandomCutForestConsistencyFunctionalTest { private int dimensions = 5; private int sampleSize = 128; private long randomSeed = 123L; private int testSize = 2048; @Test public void testConsistentScoring() { RandomCutForest.Builder builder = RandomCutForest.builder().dimensions(dimensions).sampleSize(sampleSize) .randomSeed(randomSeed); RandomCutForest pointerCachedSequential = builder.compact(false).boundingBoxCacheFraction(1.0) .parallelExecutionEnabled(false).build(); RandomCutForest pointerCachedParallel = builder.compact(false).boundingBoxCacheFraction(1.0) .parallelExecutionEnabled(true).build(); RandomCutForest pointerCachedRandomSequential = builder.compact(false) .boundingBoxCacheFraction(new Random().nextDouble()).parallelExecutionEnabled(false).build(); RandomCutForest pointerCachedRandomParallel = builder.compact(false) .boundingBoxCacheFraction(new Random().nextDouble()).parallelExecutionEnabled(true).build(); RandomCutForest pointerUncachedSequential = builder.compact(false).boundingBoxCacheFraction(0.0) .parallelExecutionEnabled(false).build(); RandomCutForest pointerUncachedParallel = builder.compact(false).boundingBoxCacheFraction(0.0) .parallelExecutionEnabled(true).build(); RandomCutForest compactCachedSequential = builder.compact(true).boundingBoxCacheFraction(1.0) .parallelExecutionEnabled(false).build(); RandomCutForest compactCachedParallel = builder.compact(true).boundingBoxCacheFraction(1.0) .parallelExecutionEnabled(true).build(); RandomCutForest compactUncachedSequential = builder.compact(true).boundingBoxCacheFraction(0.0) .parallelExecutionEnabled(false).build(); RandomCutForest compactUncachedParallel = builder.compact(true).boundingBoxCacheFraction(0.0) .parallelExecutionEnabled(true).build(); RandomCutForest compactCachedRandomSequential = builder.compact(true) .boundingBoxCacheFraction(new Random().nextDouble()).parallelExecutionEnabled(false).build(); RandomCutForest compactCachedRandomParallel = builder.compact(true) .boundingBoxCacheFraction(new Random().nextDouble()).parallelExecutionEnabled(true).build(); NormalMixtureTestData testData = new NormalMixtureTestData(); double delta = 1e-10; int anomalies = 0; for (double[] point : testData.generateTestData(testSize, dimensions, 99)) { double score = pointerCachedSequential.getAnomalyScore(point); if (score > 0) { anomalies++; } assertEquals(score, pointerCachedParallel.getAnomalyScore(point), delta); assertEquals(score, pointerUncachedSequential.getAnomalyScore(point), delta); assertEquals(score, pointerUncachedParallel.getAnomalyScore(point), delta); assertEquals(score, compactCachedSequential.getAnomalyScore(point), delta); assertEquals(score, compactCachedParallel.getAnomalyScore(point), delta); assertEquals(score, compactUncachedSequential.getAnomalyScore(point), delta); assertEquals(score, compactUncachedParallel.getAnomalyScore(point), delta); assertEquals(score, pointerCachedRandomSequential.getAnomalyScore(point), delta); assertEquals(score, pointerCachedRandomParallel.getAnomalyScore(point), delta); assertEquals(score, compactCachedRandomSequential.getAnomalyScore(point), delta); assertEquals(score, compactCachedRandomParallel.getAnomalyScore(point), delta); pointerCachedSequential.update(point); pointerCachedParallel.update(point); pointerUncachedSequential.update(point); pointerUncachedParallel.update(point); pointerCachedRandomSequential.update(point); pointerCachedRandomParallel.update(point); compactCachedSequential.update(point); compactCachedParallel.update(point); compactUncachedSequential.update(point); compactUncachedParallel.update(point); compactCachedRandomSequential.update(point); compactCachedRandomParallel.update(point); } // verify that the test is nontrivial assertTrue(anomalies > 0); } @Test public void testConsistentScoringSinglePrecision() { RandomCutForest.Builder builder = RandomCutForest.builder().dimensions(dimensions).sampleSize(sampleSize) .randomSeed(randomSeed).parallelExecutionEnabled(false).compact(true); RandomCutForest compactFloatCached = builder.boundingBoxCacheFraction(1.0).precision(Precision.FLOAT_32) .build(); RandomCutForest compactFloatCachedParallel = builder.boundingBoxCacheFraction(1.0).precision(Precision.FLOAT_32) .parallelExecutionEnabled(true).build(); RandomCutForest compactFloatUncached = builder.boundingBoxCacheFraction(0.0).precision(Precision.FLOAT_32) .build(); RandomCutForest compactFloatCachedRandom = builder.boundingBoxCacheFraction(new Random().nextDouble()) .precision(Precision.FLOAT_32).build(); RandomCutForest compactFloatCachedRandomParallel = builder.boundingBoxCacheFraction(new Random().nextDouble()) .precision(Precision.FLOAT_32).parallelExecutionEnabled(true).build(); RandomCutForest compactFloatUncachedParallel = builder.boundingBoxCacheFraction(0.0) .precision(Precision.FLOAT_32).parallelExecutionEnabled(true).build(); RandomCutForest compactDoubleCached = builder.boundingBoxCacheFraction(1.0).precision(Precision.FLOAT_64) .build(); NormalMixtureTestData testData = new NormalMixtureTestData(); int anomalies = 0; for (double[] point : testData.generateTestData(testSize, dimensions, 99)) { double score = compactFloatCached.getAnomalyScore(point); if (score > 0) { anomalies++; } assertEquals(score, compactFloatUncached.getAnomalyScore(point), 1e-10); assertEquals(score, compactFloatUncachedParallel.getAnomalyScore(point), 1e-10); assertEquals(score, compactFloatCachedRandom.getAnomalyScore(point), 1e-10); assertEquals(score, compactFloatCachedRandomParallel.getAnomalyScore(point), 1e-10); // we expect some loss of precision when comparing to the score computed as a // double assertEquals(score, compactDoubleCached.getAnomalyScore(point), 1e-2); compactFloatCached.update(point); compactFloatCachedParallel.update(point); compactFloatUncached.update(point); compactFloatUncachedParallel.update(point); compactFloatCachedRandom.update(point); compactFloatCachedRandomParallel.update(point); compactDoubleCached.update(point); } // verify that the test is nontrivial assertTrue(anomalies > 0); } } ================================================ FILE: Java/core/src/test/java/com/amazon/randomcutforest/RandomCutForestFunctionalTest.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest; import static org.junit.jupiter.api.Assertions.assertArrayEquals; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertTrue; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.when; import java.util.Random; import java.util.stream.IntStream; import java.util.stream.Stream; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtensionContext; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; import org.junit.jupiter.params.provider.ArgumentsProvider; import org.junit.jupiter.params.provider.ArgumentsSource; import org.junit.jupiter.params.provider.CsvSource; import com.amazon.randomcutforest.returntypes.DensityOutput; import com.amazon.randomcutforest.returntypes.DiVector; import com.amazon.randomcutforest.testutils.NormalMixtureTestData; @Tag("functional") public class RandomCutForestFunctionalTest { private static int numberOfTrees; private static int sampleSize; private static int dimensions; private static int randomSeed; private static RandomCutForest parallelExecutionForest; private static RandomCutForest singleThreadedForest; private static RandomCutForest forestSpy; private static double baseMu; private static double baseSigma; private static double anomalyMu; private static double anomalySigma; private static double transitionToAnomalyProbability; private static double transitionToBaseProbability; private static int dataSize; @BeforeAll public static void oneTimeSetUp() { // this is a stochastic dataset and will have different values for different // runs numberOfTrees = 100; sampleSize = 256; dimensions = 3; randomSeed = 123; parallelExecutionForest = RandomCutForest.builder().numberOfTrees(numberOfTrees).sampleSize(sampleSize) .dimensions(dimensions).randomSeed(randomSeed).centerOfMassEnabled(true) .storeSequenceIndexesEnabled(true).build(); singleThreadedForest = RandomCutForest.builder().numberOfTrees(numberOfTrees).sampleSize(sampleSize) .dimensions(dimensions).randomSeed(randomSeed).centerOfMassEnabled(true) .storeSequenceIndexesEnabled(true).parallelExecutionEnabled(false).build(); dataSize = 10_000; baseMu = 0.0; baseSigma = 1.0; anomalyMu = 5.0; anomalySigma = 1.5; transitionToAnomalyProbability = 0.01; transitionToBaseProbability = 0.4; NormalMixtureTestData generator = new NormalMixtureTestData(baseMu, baseSigma, anomalyMu, anomalySigma, transitionToAnomalyProbability, transitionToBaseProbability); double[][] data = generator.generateTestData(dataSize, dimensions); for (int i = 0; i < dataSize; i++) { parallelExecutionForest.update(data[i]); singleThreadedForest.update(data[i]); } } // Use this ArgumentsProvider to run a test on both single-threaded and // multi-threaded forests static class TestForestProvider implements ArgumentsProvider { @Override public Stream provideArguments(ExtensionContext context) throws Exception { return Stream.of(singleThreadedForest, parallelExecutionForest).map(Arguments::of); } } // displacement scoring (multiplied by the normalizer log_2(treesize)) on the // fly !! // as introduced in Robust Random Cut Forest Based Anomaly Detection in Streams // @ICML 2016. This does not address co-displacement (duplicity). // seen function is (x,y) -> 1 which basically ignores everything // unseen function is (x,y) -> y which corresponds to mass of sibling // damp function is (x,y) -> 1 which is no dampening public static double getDisplacementScore(RandomCutForest forest, float[] point) { return forest.getDynamicScore(point, 0, (x, y) -> 1.0, (x, y) -> y, (x, y) -> 1.0); } public double getDisplacementScoreApproximate(RandomCutForest forest, float[] point, double precision) { return forest.getApproximateDynamicScore(point, precision, true, 0, (x, y) -> 1.0, (x, y) -> y, (x, y) -> 1.0); } // Expected height (multiplied by the normalizer log_2(treesize) ) scoring on // the fly !! // seen function is (x,y) -> x+log(Y)/log(2) which depth + duplicity converted // to depth // unseen function is (x,y) -> x which is depth // damp function is (x,y) -> 1 which is no dampening // note that this is *NOT* anything like the expected height in // Isolation Forest/Random Forest algorithms, because here // the Expected height takes into account the contrafactual // that "what would have happened had the point been available during // the construction of the forest" public static double getHeightScore(RandomCutForest forest, float[] point) { return forest.getDynamicScore(point, 0, (x, y) -> 1.0 * (x + Math.log(y)), (x, y) -> 1.0 * x, (x, y) -> 1.0); } public double getHeightScoreApproximate(RandomCutForest forest, float[] point, double precision) { return forest.getApproximateDynamicScore(point, precision, false, 0, (x, y) -> 1.0 * (x + Math.log(y)), (x, y) -> 1.0 * x, (x, y) -> 1.0); } @ParameterizedTest @ArgumentsSource(TestForestProvider.class) private void testGetAnomalyScore(RandomCutForest forest) { float[] point = { 0.0f, 0.0f, 0.0f }; double score = forest.getAnomalyScore(point); assertTrue(score < 1); assertTrue(forest.getApproximateAnomalyScore(point) < 1); /** * This part demonstrates testing of dynamic scoring where score functions are * changed on the fly. */ // displacement scoring on the fly!! score = getDisplacementScore(forest, point); assertTrue(score < 25); // testing that the leaf exclusion does not affect anything // tests the masking effect assertTrue(forest.getDynamicScore(point, 1, (x, y) -> 1.0, (x, y) -> y, (x, y) -> 1.0) < 25); double newScore = getDisplacementScoreApproximate(forest, point, 0); assertEquals(score, newScore, 1E-10); double otherScore = getDisplacementScoreApproximate(forest, point, 0.1); assertTrue(otherScore < 25); // the approximation bound is increased to accomodate the // larger variance of the probabilistic test // adjust the parameters in early convergence to // get 0.1*score+0.1 assertEquals(otherScore, newScore, 0.3 * score + 0.1); /** * Using expected height -- note that this height is not the same as the height * in a random forest, because it accounts for the contrafactual of having * constructed the forest with the knowledge of the point. */ score = getHeightScore(forest, point); assertTrue(score > 50); newScore = getHeightScoreApproximate(forest, point, 0); assertEquals(score, newScore, 1E-10); otherScore = getHeightScoreApproximate(forest, point, 0.1); assertTrue(otherScore > 50); // the approximation bound is increased to accomodate the // larger variance of the probabilistic test assertEquals(score, otherScore, 0.3 * score + 0.1); point = new float[] { 8.0f, 8.0f, 8.0f }; score = forest.getAnomalyScore(point); assertTrue(score > 1); assertTrue(forest.getApproximateAnomalyScore(point) > 1); // displacement scoring on the fly !! score = getDisplacementScore(forest, point); assertTrue(score > 100); // testing masking assertTrue(forest.getDynamicScore(point, 1, (x, y) -> 1.0, (x, y) -> y, (x, y) -> 1.0) > 100); newScore = getDisplacementScoreApproximate(forest, point, 0); assertEquals(score, newScore, 1E-10); otherScore = getDisplacementScoreApproximate(forest, point, 0.1); assertTrue(otherScore > 100); // the approximation bound is increased to accomodate the // larger variance of the probabilistic test assertEquals(score, otherScore, 0.3 * score + 0.1); // Expected height scoring on the fly !! score = getHeightScore(forest, point); assertTrue(score < 30); newScore = getHeightScoreApproximate(forest, point, 0); assertEquals(score, newScore, 1E-10); otherScore = getHeightScoreApproximate(forest, point, 0.1); assertTrue(otherScore < 30); // the approximation bound is increased to accomodate the // larger variance of the probabilistic test assertEquals(score, otherScore, 0.3 * score + 0.1); } @ParameterizedTest @ArgumentsSource(TestForestProvider.class) public void testSideEffectsA(RandomCutForest forest) { double score = forest.getAnomalyScore(new double[] { 0.0, 0.0, 0.0 }); NormalMixtureTestData generator2 = new NormalMixtureTestData(baseMu, baseSigma, anomalyMu, anomalySigma, transitionToAnomalyProbability, transitionToBaseProbability); double[][] newData = generator2.generateTestData(dataSize, dimensions); for (int i = 0; i < dataSize; i++) { forest.getAnomalyScore(newData[i]); } double newScore = forest.getAnomalyScore(new double[] { 0.0, 0.0, 0.0 }); assertEquals(score, newScore, 10E-10); } @ParameterizedTest @ArgumentsSource(TestForestProvider.class) public void testSideEffectsB(RandomCutForest forest) { /* the changes to score and attribution should be in sync */ DiVector initial = forest.getAnomalyAttribution(new double[] { 0.0, 0.0, 0.0 }); NormalMixtureTestData generator2 = new NormalMixtureTestData(baseMu, baseSigma, anomalyMu, anomalySigma, transitionToAnomalyProbability, transitionToBaseProbability); double[][] newData = generator2.generateTestData(dataSize, dimensions); for (int i = 0; i < dataSize; i++) { forest.getAnomalyAttribution(newData[i]); } double newScore = forest.getAnomalyScore(new double[] { 0.0, 0.0, 0.0 }); DiVector newVector = forest.getAnomalyAttribution(new double[] { 0.0, 0.0, 0.0 }); assertEquals(initial.getHighLowSum(), newVector.getHighLowSum(), 10E-10); assertEquals(initial.getHighLowSum(), newScore, 1E-10); assertArrayEquals(initial.high, newVector.high, 1E-10); assertArrayEquals(initial.low, newVector.low, 1E-10); } @ParameterizedTest @ArgumentsSource(TestForestProvider.class) public void testGetAnomalyAttribution(RandomCutForest forest) { /* This method checks that the scores and attributions are consistent */ double[] point = { 0.0, 0.0, 0.0 }; DiVector seenResult = forest.getAnomalyAttribution(point); double seenScore = forest.getAnomalyScore(point); assertTrue(seenResult.getHighLowSum(0) < 0.5); assertTrue(seenResult.getHighLowSum(1) < 0.5); assertTrue(seenResult.getHighLowSum(2) < 0.5); assertTrue(seenScore < 1.0); assertEquals(seenScore, seenResult.getHighLowSum(), 1E-10); DiVector likelyResult = forest.getApproximateAnomalyAttribution(point); double score = forest.getApproximateAnomalyScore(point); assertTrue(likelyResult.getHighLowSum(0) < 0.5); assertTrue(likelyResult.getHighLowSum(1) < 0.5); assertTrue(likelyResult.getHighLowSum(2) < 0.5); assertEquals(score, likelyResult.getHighLowSum(), 0.1); assertEquals(seenResult.getHighLowSum(), likelyResult.getHighLowSum(), 0.1); } @ParameterizedTest @ArgumentsSource(TestForestProvider.class) public void testMultipleAttributions(RandomCutForest forest) { /** * We will test the attribution over random runs. Narrow tests can fail -- we * will keep track of the aggregate number of narrow tests and test for large * characterization that would be misleading in failure. */ int hardPass = 0; int causal = 0; double[] point = { 6.0, 0.0, 0.0 }; DiVector result = forest.getAnomalyAttribution(point); assertTrue(result.low[0] < 0.2); if (result.getHighLowSum(1) < 0.5) ++hardPass; if (result.getHighLowSum(2) < 0.5) ++hardPass; assertTrue(result.getHighLowSum(1) + result.getHighLowSum(2) < 1.0); assertTrue(result.high[0] > forest.getAnomalyScore(point) / 3); if (result.high[0] > 0.5 * forest.getAnomalyScore(point)) ++causal; // the last line states that first coordinate was high and was a majority // contributor to the score // the previous test states that the contribution is twice the average of the 12 // possible contributors. // these tests all subparts of the score at once point = new double[] { -6.0, 0.0, 0.0 }; result = forest.getAnomalyAttribution(point); assertTrue(result.getHighLowSum() > 1.0); assertTrue(result.high[0] < 0.5); if (result.getHighLowSum(1) < 0.5) ++hardPass; if (result.getHighLowSum(2) < 0.5) ++hardPass; assertTrue(result.low[0] > forest.getAnomalyScore(point) / 3); if (result.low[0] > 0.5 * forest.getAnomalyScore(point)) ++causal; point = new double[] { 0.0, 6.0, 0.0 }; assertTrue(result.getHighLowSum() > 1.0); result = forest.getAnomalyAttribution(point); if (result.getHighLowSum(0) < 0.5) ++hardPass; if (result.getHighLowSum(2) < 0.5) ++hardPass; assertTrue(result.low[1] < 0.5); assertTrue(result.high[1] > forest.getAnomalyScore(point) / 3); if (result.high[1] > 0.5 * forest.getAnomalyScore(point)) ++causal; point = new double[] { 0.0, -6.0, 0.0 }; assertTrue(result.getHighLowSum() > 1.0); result = forest.getAnomalyAttribution(point); if (result.getHighLowSum(0) < 0.5) ++hardPass; if (result.getHighLowSum(2) < 0.5) ++hardPass; assertTrue(result.high[1] < 0.5); assertTrue(result.low[1] > forest.getAnomalyScore(point) / 3); if (result.low[1] > 0.5 * forest.getAnomalyScore(point)) ++causal; point = new double[] { 0.0, 0.0, 6.0 }; assertTrue(result.getHighLowSum() > 1.0); result = forest.getAnomalyAttribution(point); if (result.getHighLowSum(0) < 0.5) ++hardPass; if (result.getHighLowSum(1) < 0.5) ++hardPass; assertTrue(result.low[2] < 0.5); assertTrue(result.high[2] > forest.getAnomalyScore(point) / 3); if (result.high[2] > 0.5 * forest.getAnomalyScore(point)) ++causal; point = new double[] { 0.0, 0.0, -6.0 }; assertTrue(result.getHighLowSum() > 1.0); result = forest.getAnomalyAttribution(point); if (result.getHighLowSum(0) < 0.5) ++hardPass; if (result.getHighLowSum(1) < 0.5) ++hardPass; assertTrue(result.high[2] < 0.5); assertTrue(result.low[2] > forest.getAnomalyScore(point) / 3); if (result.low[2] > 0.5 * forest.getAnomalyScore(point)) ++causal; assertTrue(causal >= 5); // maximum is 6; there can be skew in one direction point = new double[] { -3.0, 0.0, 0.0 }; result = forest.getAnomalyAttribution(point); assertTrue(result.high[0] < 0.5); if (result.getHighLowSum(1) < 0.5) ++hardPass; if (result.getHighLowSum(2) < 0.5) ++hardPass; assertTrue(result.low[0] > forest.getAnomalyScore(point) / 3); /* * For multiple causes, the relationship of scores only hold for larger * distances. */ point = new double[] { -3.0, 6.0, 0.0 }; assertTrue(result.getHighLowSum() > 1.0); result = forest.getAnomalyAttribution(point); if (result.low[0] > 0.5) ++hardPass; assertTrue(result.high[0] < 0.5); assertTrue(result.low[1] < 0.5); assertTrue(result.high[1] > 0.5); if (result.high[1] > 0.9) ++hardPass; assertTrue(result.getHighLowSum(2) < 0.5); assertTrue(result.high[1] + result.low[0] > 0.8 * forest.getAnomalyScore(point)); point = new double[] { 6.0, -3.0, 0.0 }; assertTrue(result.getHighLowSum() > 1.0); result = forest.getAnomalyAttribution(point); assertTrue(result.low[0] < 0.5); assertTrue(result.high[0] > 0.5); if (result.high[0] > 0.9) ++hardPass; if (result.low[1] > 0.5) ++hardPass; assertTrue(result.high[1] < 0.5); assertTrue(result.getHighLowSum(2) < 0.5); assertTrue(result.high[0] + result.low[1] > 0.8 * forest.getAnomalyScore(point)); point = new double[] { 20.0, -10.0, 0.0 }; assertTrue(result.getHighLowSum() > 1.0); result = forest.getAnomalyAttribution(point); assertTrue(result.high[0] + result.low[1] > 0.8 * forest.getAnomalyScore(point)); if (result.high[0] > 1.8 * result.low[1]) ++hardPass; if (result.low[1] > result.high[0] / 2.2) ++hardPass; assertTrue(hardPass >= 15); // maximum is 20 } @Test public void testUpdateWithSignedZeros() { RandomCutForest forest = RandomCutForest.builder().numberOfTrees(numberOfTrees).sampleSize(2).dimensions(1) .randomSeed(randomSeed).centerOfMassEnabled(true).storeSequenceIndexesEnabled(true).build(); forest.update(new double[] { 0.0 }); forest.getAnomalyScore(new double[] { 0.0 }); forest.getAnomalyScore(new double[] { -0.0 }); forest.update(new double[] { -0.0 }); forest.getAnomalyScore(new double[] { 0.0 }); forest.getAnomalyScore(new double[] { -0.0 }); } @Test public void testShadowBuffer() { /** * This test checks that the attribution *DOES NOT* change as a ratio as more * copies of the points are added. The shadowbox in * the @DirectionalAttributionVisitor allows us to simulate a deletion without * performing a deletion. * * The goal is to measure the attribution and have many copies of the same point * and eventually the attribution will become uniform in all directions. * * we create a new forest so that other tests are unaffected. */ numberOfTrees = 100; sampleSize = 256; dimensions = 3; randomSeed = 123; RandomCutForest newForest = RandomCutForest.builder().numberOfTrees(numberOfTrees).sampleSize(sampleSize) .dimensions(dimensions).randomSeed(randomSeed).centerOfMassEnabled(true).timeDecay(1e-5) .storeSequenceIndexesEnabled(true).build(); dataSize = 10_000; baseMu = 0.0; baseSigma = 1.0; anomalyMu = 5.0; anomalySigma = 1.5; transitionToAnomalyProbability = 0.01; transitionToBaseProbability = 0.4; NormalMixtureTestData generator = new NormalMixtureTestData(baseMu, baseSigma, anomalyMu, anomalySigma, transitionToAnomalyProbability, transitionToBaseProbability); double[][] data = generator.generateTestData(dataSize, dimensions); for (int i = 0; i < dataSize; i++) { newForest.update(data[i]); } double[] point = new double[] { -8.0, -8.0, 0.0 }; DiVector result = newForest.getAnomalyAttribution(point); double score = newForest.getAnomalyScore(point); assertEquals(score, result.getHighLowSum(), 1E-5); assertTrue(score > 2); assertTrue(result.getHighLowSum(2) < 0.2); // the third dimension has little influence in classification // this is going to add {8,8,0} into the forest // but not enough to cause large scale changes // note the probability of a tree seeing a change is // 256/10_000 for (int i = 0; i < 5; i++) { newForest.update(point); } DiVector newResult = newForest.getAnomalyAttribution(point); double newScore = newForest.getAnomalyScore(point); assertEquals(newScore, newResult.getHighLowSum(), 1E-5); assertTrue(newScore < score); for (int j = 0; j < 3; j++) { // relationship holds at larger values if (result.high[j] > 0.2) { assertEquals(score * newResult.high[j], newScore * result.high[j], 0.1 * score); } else { assertTrue(newResult.high[j] < 0.2); } if (result.low[j] > 0.2) { assertEquals(score * newResult.low[j], newScore * result.low[j], 0.1 * score); } else { assertTrue(newResult.low[j] < 0.2); } } // this will make the point an inlier for (int i = 0; i < 5000; i++) { newForest.update(point); } DiVector finalResult = newForest.getAnomalyAttribution(point); double finalScore = newForest.getAnomalyScore(point); assertTrue(finalScore < 1); assertEquals(finalScore, finalResult.getHighLowSum(), 1E-5); for (int j = 0; j < 3; j++) { // relationship holds at larger values if (finalResult.high[j] > 0.2) { assertEquals(score * finalResult.high[j], finalScore * result.high[j], 0.1 * score); } else { assertTrue(newResult.high[j] < 0.2); } if (finalResult.low[j] > 0.2) { assertEquals(score * finalResult.low[j], finalScore * result.low[j], 0.1 * score); } else { assertTrue(finalResult.low[j] < 0.2); } } } @ParameterizedTest @ArgumentsSource(TestForestProvider.class) public void testSimpleDensity(RandomCutForest forest) { DensityOutput output1 = forest.getSimpleDensity(new double[] { 0.0, 0.0, 0.0 }); DensityOutput output2 = forest.getSimpleDensity(new double[] { 6.0, 6.0, 0.0 }); DensityOutput output3 = forest.getSimpleDensity(new double[] { -4.0, -4.0, 0.0 }); DensityOutput output4 = forest.getSimpleDensity(new double[] { -6.0, -6.0, 0.0 }); assertTrue(output1.getDensity(0.001, 3) > output2.getDensity(0.001, 3)); assertTrue(output1.getDensity(0.001, 3) > output3.getDensity(0.001, 3)); assertTrue(output1.getDensity(0.001, 3) > output4.getDensity(0.001, 3)); assertTrue(output3.getDensity(0.001, 3) > output4.getDensity(0.001, 3)); } @ParameterizedTest @ArgumentsSource(TestForestProvider.class) public void testSimpleDensityWhenSamplerNotFullThenDensityIsZero(RandomCutForest forest) { RandomCutForest forestSpy = spy(forest); when(forestSpy.isOutputReady()).thenReturn(false); DensityOutput output = forestSpy.getSimpleDensity(new double[] { 0.0, 0.0, 0.0 }); assertEquals(0, output.getDensity(0.001, 3)); } @ParameterizedTest @ArgumentsSource(TestForestProvider.class) public void testImputeMissingValues(RandomCutForest forest) { double[] queryPoint = new double[] { Double.NaN, 0.02, 0.01 }; int numberOfMissingValues = 1; int[] missingIndexes = new int[] { 0 }; double[] imputedPoint = forest.imputeMissingValues(queryPoint, numberOfMissingValues, missingIndexes); assertEquals(queryPoint[1], imputedPoint[1], 1e-5); assertTrue(Math.abs(imputedPoint[0]) < 0.5); } @Test public void getTotalUpdates_returnExpectedSize() { assertEquals(dataSize, singleThreadedForest.getTotalUpdates()); assertEquals(dataSize, parallelExecutionForest.getTotalUpdates()); } @ParameterizedTest(name = "{index} => numDims={0}, numTrees={1}, numSamples={2}, numTrainSamples={3}, " + "numTestSamples={4}, enableParallel={5}, numThreads={6}") @CsvSource({ "10, 50, 256, 50000, 0, 0, 0" }) public void dynamicCachingChangeTest(int numDims, int numTrees, int numSamples, int numTrainSamples, int numTestSamples, int enableParallel, int numThreads) { RandomCutForest.Builder forestBuilder = RandomCutForest.builder().dimensions(numDims).numberOfTrees(numTrees) .sampleSize(numSamples).randomSeed(0).boundingBoxCacheFraction(1.0).compact(false); if (enableParallel == 0) { forestBuilder.parallelExecutionEnabled(false); } if (numThreads > 0) { forestBuilder.threadPoolSize(numThreads); } RandomCutForest forest = forestBuilder.build(); RandomCutForest anotherForest = RandomCutForest.builder().dimensions(numDims).numberOfTrees(numTrees) .sampleSize(numSamples).randomSeed(0).compact(true).boundingBoxCacheFraction(1.0).build(); int count = 0; for (double[] point : generate(numTrainSamples, numDims, 0)) { ++count; double score = forest.getAnomalyScore(point); double anotherScore = anotherForest.getAnomalyScore(point); assertEquals(score, anotherScore, 1E-10); forest.update(point); anotherForest.update(point); if (count % 2000 == 1000) { double fraction = Math.random(); // System.out.println(" second forest fraction " + fraction); anotherForest.setBoundingBoxCacheFraction(fraction); } if (count % 2000 == 0) { double fraction = Math.random(); // System.out.println(" first forest fraction " + fraction); forest.setBoundingBoxCacheFraction(fraction); } } } @ParameterizedTest(name = "{index} => numDims={0}, numTrees={1}, numSamples={2}, numTrainSamples={3}, " + "numTestSamples={4}, enableParallel={5}, numThreads={6}") @CsvSource({ "10, 10, 30000, 50000, 0, 0, 0" }) public void dynamicCachingChangeTestLarge(int numDims, int numTrees, int numSamples, int numTrainSamples, int numTestSamples, int enableParallel, int numThreads) { RandomCutForest.Builder forestBuilder = RandomCutForest.builder().dimensions(numDims).numberOfTrees(numTrees) .sampleSize(numSamples).randomSeed(0).boundingBoxCacheFraction(1.0).compact(false); if (enableParallel == 0) { forestBuilder.parallelExecutionEnabled(false); } if (numThreads > 0) { forestBuilder.threadPoolSize(numThreads); } RandomCutForest forest = forestBuilder.build(); RandomCutForest anotherForest = RandomCutForest.builder().dimensions(numDims).numberOfTrees(numTrees) .sampleSize(numSamples).randomSeed(0).compact(true).boundingBoxCacheFraction(1.0).build(); int count = 0; for (double[] point : generate(numTrainSamples, numDims, 0)) { ++count; double score = forest.getAnomalyScore(point); double anotherScore = anotherForest.getAnomalyScore(point); assertEquals(score, anotherScore, 1E-10); forest.update(point); anotherForest.update(point); } } private double[][] generate(int numSamples, int numDimensions, int seed) { return IntStream.range(0, numSamples).mapToObj(i -> new Random(seed + i).doubles(numDimensions).toArray()) .toArray(double[][]::new); } } ================================================ FILE: Java/core/src/test/java/com/amazon/randomcutforest/RandomCutForestShingledFunctionalTest.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest; import static com.amazon.randomcutforest.CommonUtils.toDoubleArray; import static com.amazon.randomcutforest.testutils.ShingledMultiDimDataWithKeys.generateShingledData; import static java.lang.Math.PI; import static java.lang.Math.cos; import static org.junit.jupiter.api.Assertions.assertArrayEquals; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; import java.util.List; import java.util.Random; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; import com.amazon.randomcutforest.config.Precision; import com.amazon.randomcutforest.state.RandomCutForestMapper; import com.amazon.randomcutforest.state.RandomCutForestState; import com.amazon.randomcutforest.store.PointStore; import com.amazon.randomcutforest.summarization.ICluster; import com.amazon.randomcutforest.summarization.Summarizer; import com.amazon.randomcutforest.testutils.MultiDimDataWithKey; import com.amazon.randomcutforest.testutils.NormalMixtureTestData; import com.amazon.randomcutforest.testutils.ShingledMultiDimDataWithKeys; import com.amazon.randomcutforest.util.ShingleBuilder; @Tag("functional") public class RandomCutForestShingledFunctionalTest { private static int numberOfTrees; private static int sampleSize; private static int dimensions; private static int randomSeed; private static int shingleSize; private static ShingleBuilder shingleBuilder; private static RandomCutForest forest; private static double baseMu; private static double baseSigma; private static double anomalyMu; private static double anomalySigma; private static double transitionToAnomalyProbability; private static double transitionToBaseProbability; private static int dataSize; @BeforeAll public static void oneTimeSetUp() { numberOfTrees = 100; sampleSize = 256; dimensions = 2; randomSeed = 123; shingleSize = 3; shingleBuilder = new ShingleBuilder(dimensions, shingleSize); forest = RandomCutForest.builder().numberOfTrees(numberOfTrees).sampleSize(sampleSize) .dimensions(shingleBuilder.getShingledPointSize()).randomSeed(randomSeed).centerOfMassEnabled(true) .initialAcceptFraction(0.5).storeSequenceIndexesEnabled(true).build(); dataSize = 10_000; baseMu = 0.0; baseSigma = 1.0; anomalyMu = 5.0; anomalySigma = 1.5; transitionToAnomalyProbability = 0.01; transitionToBaseProbability = 0.4; NormalMixtureTestData generator = new NormalMixtureTestData(baseMu, baseSigma, anomalyMu, anomalySigma, transitionToAnomalyProbability, transitionToBaseProbability); double[][] data = generator.generateTestData(dataSize, dimensions); for (int i = 0; i < dataSize; i++) { shingleBuilder.addPoint(data[i]); if (shingleBuilder.isFull()) { forest.update(shingleBuilder.getShingle()); } } } @Test public void testExtrapolateBasic() { double[] result = forest.extrapolateBasic(shingleBuilder.getShingle(), 4, dimensions, false); assertEquals(4 * dimensions, result.length); result = forest.extrapolateBasic(shingleBuilder.getShingle(), 4, dimensions, true, 2); assertEquals(4 * dimensions, result.length); result = forest.extrapolateBasic(shingleBuilder, 4); assertEquals(4 * dimensions, result.length); // use a block size which is too big assertThrows(IllegalArgumentException.class, () -> forest.extrapolateBasic(shingleBuilder.getShingle(), 4, 4, true, 2)); } @ParameterizedTest @ValueSource(booleans = { true, false }) public void InternalShinglingTest(boolean rotation) { int sampleSize = 256; int baseDimensions = 2; int shingleSize = 2; int dimensions = baseDimensions * shingleSize; long seed = new Random().nextLong(); System.out.println(seed); Random rng = new Random(seed); int numTrials = 3; // test is exact equality, reducing the number of trials int length = 40 * sampleSize; for (int i = 0; i < numTrials; i++) { int outputAfter = 1 + rng.nextInt(10 * sampleSize); long newSeed = rng.nextLong(); RandomCutForest first = new RandomCutForest.Builder<>().compact(true).dimensions(dimensions) .precision(Precision.FLOAT_32).randomSeed(newSeed).internalShinglingEnabled(true) .outputAfter(outputAfter + shingleSize - 1).internalRotationEnabled(rotation) .shingleSize(shingleSize).build(); RandomCutForest second = new RandomCutForest.Builder<>().compact(true).dimensions(dimensions) .precision(Precision.FLOAT_32).randomSeed(newSeed).internalShinglingEnabled(false) .outputAfter(outputAfter).shingleSize(shingleSize).build(); RandomCutForest third = new RandomCutForest.Builder<>().compact(true).dimensions(dimensions) .precision(Precision.FLOAT_32).randomSeed(newSeed).internalShinglingEnabled(false).shingleSize(1) .outputAfter(outputAfter).build(); MultiDimDataWithKey dataWithKeys = ShingledMultiDimDataWithKeys.getMultiDimData(length, 50, 100, 5, seed + i, baseDimensions); double[][] shingledData = generateShingledData(dataWithKeys.data, shingleSize, baseDimensions, rotation); assertEquals(shingledData.length, dataWithKeys.data.length - shingleSize + 1); int count = shingleSize - 1; // insert initial points for (int j = 0; j < shingleSize - 1; j++) { first.update(dataWithKeys.data[j]); } for (int j = 0; j < shingledData.length; j++) { // validate equality of points for (int y = 0; y < baseDimensions; y++) { int position = (rotation) ? (count % shingleSize) : shingleSize - 1; assertEquals(dataWithKeys.data[count][y], shingledData[j][position * baseDimensions + y], 1e-10); } double firstResult = first.getAnomalyScore(dataWithKeys.data[count]); first.update(dataWithKeys.data[count]); ++count; double secondResult = second.getAnomalyScore(shingledData[j]); second.update(shingledData[j]); double thirdResult = third.getAnomalyScore(shingledData[j]); third.update(shingledData[j]); assertEquals(firstResult, secondResult, 1e-10); assertEquals(secondResult, thirdResult, 1e-10); } PointStore store = (PointStore) first.getUpdateCoordinator().getStore(); assertEquals(store.getCurrentStoreCapacity() * dimensions, store.getStore().length); List> firstSummary = store.summarize(5, 0.5, 3, 0.8, Summarizer::L2distance, null); store = (PointStore) second.getUpdateCoordinator().getStore(); assertEquals(store.getCurrentStoreCapacity() * dimensions, store.getStore().length); List> secondSummary = store.summarize(5, 0.5, 3, 0.8, Summarizer::L2distance, null); assert (secondSummary.size() == firstSummary.size()); for (int j = 0; j < firstSummary.size(); j++) { assertEquals(firstSummary.get(j).getWeight(), secondSummary.get(j).getWeight(), 1e-3); assertEquals(firstSummary.get(j).averageRadius(), secondSummary.get(j).averageRadius(), 1e-3); } store = (PointStore) third.getUpdateCoordinator().getStore(); assertEquals(store.getCurrentStoreCapacity() * dimensions, store.getStore().length); List> thirdSummary = store.summarize(5, 0.5, 3, 0.8, Summarizer::L2distance, null); assert (thirdSummary.size() == firstSummary.size()); for (int j = 0; j < firstSummary.size(); j++) { assertEquals(firstSummary.get(j).getWeight(), thirdSummary.get(j).getWeight(), 1e-3); assertEquals(firstSummary.get(j).averageRadius(), thirdSummary.get(j).averageRadius(), 1e-3); } } } @Test public void testExtrapolateShingleAwareSinglePrecision() { int numberOfTrees = 100; int sampleSize = 256; int shinglesize = 10; long randomSeed = 123; RandomCutForest newforest = RandomCutForest.builder().numberOfTrees(numberOfTrees).sampleSize(sampleSize) .dimensions(shinglesize).randomSeed(randomSeed).compact(true).shingleSize(shinglesize) .precision(Precision.FLOAT_32).build(); RandomCutForest anotherforest = RandomCutForest.builder().numberOfTrees(numberOfTrees).sampleSize(sampleSize) .dimensions(shinglesize).randomSeed(randomSeed).compact(true).shingleSize(1) .precision(Precision.FLOAT_32).build(); RandomCutForest yetAnotherforest = RandomCutForest.builder().numberOfTrees(numberOfTrees).sampleSize(sampleSize) .dimensions(shinglesize).randomSeed(randomSeed).compact(true).shingleSize(shinglesize) .internalShinglingEnabled(true).precision(Precision.FLOAT_32).build(); double amplitude = 50.0; double noise = 2.0; int entryIndex = 0; boolean filledShingleAtleastOnce = false; double[] history = new double[shinglesize]; int num = 850; double[] data = getDataA(amplitude, noise); double[] answer = null; double error = 0; double[] record = null; for (int j = 0; j < num; ++j) { // we stream here .... history[entryIndex] = data[j]; entryIndex = (entryIndex + 1) % shinglesize; if (entryIndex == 0) { filledShingleAtleastOnce = true; } // input is always double[], internal representation is float[] // input is 1 dimensional for internal shingling (for 1 dimensional sequences) yetAnotherforest.update(new double[] { data[j] }); if (filledShingleAtleastOnce) { record = getShinglePoint(history, entryIndex, shinglesize); newforest.update(record); anotherforest.update(record); } } answer = newforest.extrapolateBasic(record, 200, 1, false); double[] anotherAnswer = anotherforest.extrapolateBasic(record, 200, 1, false); double[] yetAnotherAnswer = yetAnotherforest.extrapolate(200); assertArrayEquals(anotherAnswer, answer, 1e-10); assertArrayEquals(yetAnotherAnswer, answer, 1e-10); error = 0; for (int j = 0; j < 200; j++) { double prediction = amplitude * cos((j + 850 - 50) * 2 * PI / 120); error += Math.abs(prediction - answer[j]); } error = error / 200; assertTrue(error < 4 * noise); } @Test public void testExtrapolateInternalRotationSinglePrecision() { int numberOfTrees = 100; int sampleSize = 256; int shinglesize = 120; long randomSeed = 123; RandomCutForest newforestA = RandomCutForest.builder().numberOfTrees(numberOfTrees).sampleSize(sampleSize) .dimensions(shinglesize).randomSeed(randomSeed).compact(true).precision(Precision.FLOAT_32).build(); RandomCutForest newforestB = RandomCutForest.builder().numberOfTrees(numberOfTrees).sampleSize(sampleSize) .dimensions(shinglesize).randomSeed(randomSeed).internalShinglingEnabled(true) .internalRotationEnabled(true).compact(true).shingleSize(shinglesize).precision(Precision.FLOAT_32) .build(); RandomCutForest newforestC = RandomCutForest.builder().numberOfTrees(numberOfTrees).sampleSize(sampleSize) .dimensions(shinglesize).randomSeed(randomSeed).compact(true).shingleSize(shinglesize) .precision(Precision.FLOAT_32).build(); double amplitude = 50.0; double noise = 2.0; Random noiseprg = new Random(72); int entryIndex = 0; boolean filledShingleAtleastOnce = false; double[] history = new double[shinglesize]; int num = 850; double[] data = getDataA(amplitude, noise); double[] answer = null; double error = 0; double[] record = null; for (int j = 0; j < num; ++j) { // we stream here .... history[entryIndex] = data[j]; entryIndex = (entryIndex + 1) % shinglesize; if (entryIndex == 0) { filledShingleAtleastOnce = true; } newforestB.update(new double[] { data[j] }); if (filledShingleAtleastOnce) { // produce cyclic vectors record = getShinglePoint(history, 0, shinglesize); newforestA.update(record); newforestC.update(record); } } answer = newforestA.extrapolateBasic(record, 200, 1, true, entryIndex); double[] anotherAnswer = newforestB.extrapolate(200); double[] yetAnotherAnswer = newforestC.extrapolateBasic(record, 200, 1, true, entryIndex); assertArrayEquals(answer, yetAnotherAnswer, 1e-10); double[] othershingle = toDoubleArray(newforestB.lastShingledPoint()); assertEquals(entryIndex, newforestB.nextSequenceIndex() % shinglesize); assertArrayEquals(record, othershingle, 1e-5); assertArrayEquals(answer, anotherAnswer, 1e-5); error = 0; for (int j = 0; j < 200; j++) { double prediction = amplitude * cos((j + 850 - 50) * 2 * PI / 120); error += Math.abs(prediction - answer[j]); } error = error / 200; assertTrue(error < 4 * noise); } @Test public void testExtrapolateC() { int numberOfTrees = 100; int sampleSize = 256; int shinglesize = 20; long randomSeed = 124; // build two identical copies; we will be giving them different // subsequent inputs and test adaptation to stream evolution RandomCutForest newforestC = RandomCutForest.builder().numberOfTrees(numberOfTrees).sampleSize(sampleSize) .dimensions(shinglesize).randomSeed(randomSeed).compact(true).timeDecay(1.0 / 300).build(); RandomCutForest newforestD = RandomCutForest.builder().numberOfTrees(numberOfTrees).sampleSize(sampleSize) .dimensions(shinglesize).randomSeed(randomSeed).compact(true).timeDecay(1.0 / 300).build(); double amplitude = 50.0; double noise = 2.0; Random noiseprg = new Random(72); int entryIndex = 0; boolean filledShingleAtleastOnce = false; double[] history = new double[shinglesize]; int num = 1330; double[] data = getDataB(amplitude, noise); double[] answer = null; double error = 0; double[] record = null; for (int j = 0; j < num; ++j) { // we stream here .... history[entryIndex] = data[j]; entryIndex = (entryIndex + 1) % shinglesize; if (entryIndex == 0) { filledShingleAtleastOnce = true; } if (filledShingleAtleastOnce) { record = getShinglePoint(history, entryIndex, shinglesize); newforestC.update(record); newforestD.update(record); } } /** * the two forests are identical up to this point we will now provide two * different input to each num+2*expLife=1930, but since the shape of the * pattern remains the same in a phase shift, the prediction comes back to * "normal" fairly quickly. */ for (int j = num; j < 1630; ++j) { // we stream here .... double t = cos(2 * PI * (j - 50) / 240); history[entryIndex] = amplitude * t + noise * noiseprg.nextDouble(); ; entryIndex = (entryIndex + 1) % shinglesize; if (entryIndex == 0) { filledShingleAtleastOnce = true; } if (filledShingleAtleastOnce) { record = getShinglePoint(history, entryIndex, shinglesize); newforestC.update(record); } } answer = newforestC.extrapolateBasic(record, 200, 1, false); error = 0; for (int j = 0; j < 200; j++) { double t = cos(2 * PI * (1630 + j - 50) / 240); double prediction = amplitude * t; error += Math.abs(prediction - answer[j]); } error = error / 200; assertTrue(error < 2 * noise); /** * Here num+2*expLife=1930 for a small explife such as 300, num+expLife is * already sufficient increase the factor for larger expLife or increase the * sampleSize to absorb the longer range dependencies of a larger expLife */ for (int j = num; j < 1630; ++j) { // we stream here .... double t = cos(2 * PI * (j + 50) / 120); int sign = (t > 0) ? 1 : -1; history[entryIndex] = amplitude * sign * Math.pow(t * sign, 1.0 / 3) + noise * noiseprg.nextDouble(); entryIndex = (entryIndex + 1) % shinglesize; if (entryIndex == 0) { filledShingleAtleastOnce = true; } if (filledShingleAtleastOnce) { record = getShinglePoint(history, entryIndex, shinglesize); newforestD.update(record); } } answer = newforestD.extrapolateBasic(record, 200, 1, false); error = 0; for (int j = 0; j < 200; j++) { double t = cos(2 * PI * (1630 + j + 50) / 120); int sign = (t > 0) ? 1 : -1; double prediction = amplitude * sign * Math.pow(t * sign, 1.0 / 3); error += Math.abs(prediction - answer[j]); } error = error / 200; assertTrue(error < 2 * noise); } double[] getDataA(double amplitude, double noise) { int num = 850; double[] data = new double[num]; Random noiseprg = new Random(9000); for (int i = 0; i < 510; i++) { data[i] = amplitude * cos(2 * PI * (i - 50) / 120) + noise * noiseprg.nextDouble(); } for (int i = 510; i < 525; i++) { // flatline data[i] = 0; } for (int i = 525; i < 825; i++) { data[i] = amplitude * cos(2 * PI * (i - 50) / 120) + noise * noiseprg.nextDouble(); } for (int i = 825; i < num; i++) { // high frequency noise data[i] = amplitude * cos(2 * PI * (i - 50) / 12) + noise * noiseprg.nextDouble(); } return data; } double[] getDataB(double amplitude, double noise) { int num = 1330; double[] data = new double[num]; Random noiseprg = new Random(9001); for (int i = 0; i < 990; i++) { data[i] = amplitude * cos(2 * PI * (i + 50) / 240) + noise * noiseprg.nextDouble(); } for (int i = 990; i < 1005; i++) { // flatline data[i] = 0; } for (int i = 1005; i < 1305; i++) { data[i] = amplitude * cos(2 * PI * (i + 50) / 240) + noise * noiseprg.nextDouble(); } for (int i = 1305; i < num; i++) { // high frequency noise data[i] = amplitude * cos(2 * PI * (i + 50) / 12) + noise * noiseprg.nextDouble(); } return data; } private static double[] getShinglePoint(double[] recentPointsSeen, int indexOfOldestPoint, int shingleLength) { double[] shingledPoint = new double[shingleLength]; int i = 0; for (int j = 0; j < shingleLength; ++j) { double point = recentPointsSeen[(j + indexOfOldestPoint) % shingleLength]; shingledPoint[i++] = point; } return shingledPoint; } @Test public void testUpdate() { int dimensions = 10; RandomCutForest forest = RandomCutForest.builder().numberOfTrees(100).compact(true).dimensions(dimensions) .randomSeed(0).sampleSize(200).precision(Precision.FLOAT_32).build(); double[][] trainingData = genShingledData(1000, dimensions, 0); double[][] testData = genShingledData(100, dimensions, 1); for (int i = 0; i < testData.length; i++) { RandomCutForestMapper mapper = new RandomCutForestMapper(); mapper.setSaveExecutorContextEnabled(true); mapper.setSaveTreeStateEnabled(true); double score = forest.getAnomalyScore(testData[i]); forest.update(testData[i]); RandomCutForestState forestState = mapper.toState(forest); forest = mapper.toModel(forestState); } } private static double[][] genShingledData(int size, int dimensions, long seed) { double[][] answer = new double[size][]; int entryIndex = 0; boolean filledShingleAtleastOnce = false; double[] history = new double[dimensions]; int count = 0; double[] data = getDataD(size + dimensions - 1, 100, 5, seed); for (int j = 0; j < size + dimensions - 1; ++j) { // we stream here .... history[entryIndex] = data[j]; entryIndex = (entryIndex + 1) % dimensions; if (entryIndex == 0) { filledShingleAtleastOnce = true; } if (filledShingleAtleastOnce) { // System.out.println("Adding " + j); answer[count++] = getShinglePoint(history, entryIndex, dimensions); } } return answer; } private static double[] getDataD(int num, double amplitude, double noise, long seed) { double[] data = new double[num]; Random noiseprg = new Random(seed); for (int i = 0; i < num; i++) { data[i] = amplitude * cos(2 * PI * (i + 50) / 1000) + noise * noiseprg.nextDouble(); } return data; } } ================================================ FILE: Java/core/src/test/java/com/amazon/randomcutforest/RandomCutForestTest.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest; import static com.amazon.randomcutforest.CommonUtils.toDoubleArray; import static com.amazon.randomcutforest.TestUtils.EPSILON; import static java.lang.Math.PI; import static java.lang.Math.abs; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.core.Is.is; import static org.junit.jupiter.api.Assertions.assertArrayEquals; import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; import static org.mockito.AdditionalMatchers.aryEq; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyDouble; import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.doNothing; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; import static org.mockito.Mockito.reset; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Optional; import java.util.Random; import java.util.function.BinaryOperator; import java.util.function.Function; import java.util.stream.Collector; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.powermock.reflect.Whitebox; import com.amazon.randomcutforest.config.Config; import com.amazon.randomcutforest.executor.AbstractForestTraversalExecutor; import com.amazon.randomcutforest.executor.AbstractForestUpdateExecutor; import com.amazon.randomcutforest.executor.IStateCoordinator; import com.amazon.randomcutforest.executor.PointStoreCoordinator; import com.amazon.randomcutforest.executor.SamplerPlusTree; import com.amazon.randomcutforest.executor.SequentialForestTraversalExecutor; import com.amazon.randomcutforest.executor.SequentialForestUpdateExecutor; import com.amazon.randomcutforest.returntypes.ConditionalTreeSample; import com.amazon.randomcutforest.returntypes.ConvergingAccumulator; import com.amazon.randomcutforest.returntypes.DensityOutput; import com.amazon.randomcutforest.returntypes.DiVector; import com.amazon.randomcutforest.returntypes.InterpolationMeasure; import com.amazon.randomcutforest.returntypes.Neighbor; import com.amazon.randomcutforest.returntypes.OneSidedConvergingDiVectorAccumulator; import com.amazon.randomcutforest.returntypes.OneSidedConvergingDoubleAccumulator; import com.amazon.randomcutforest.returntypes.RangeVector; import com.amazon.randomcutforest.returntypes.SampleSummary; import com.amazon.randomcutforest.sampler.CompactSampler; import com.amazon.randomcutforest.state.RandomCutForestMapper; import com.amazon.randomcutforest.state.RandomCutForestState; import com.amazon.randomcutforest.store.PointStore; import com.amazon.randomcutforest.summarization.ICluster; import com.amazon.randomcutforest.tree.ITree; import com.amazon.randomcutforest.tree.RandomCutTree; import com.amazon.randomcutforest.util.ShingleBuilder; public class RandomCutForestTest { private int dimensions; private int sampleSize; private int numberOfTrees; private ComponentList components; private AbstractForestTraversalExecutor traversalExecutor; private IStateCoordinator updateCoordinator; private AbstractForestUpdateExecutor updateExecutor; private RandomCutForest forest; @BeforeEach public void setUp() { dimensions = 2; sampleSize = 256; numberOfTrees = 10; components = new ComponentList<>(); for (int i = 0; i < numberOfTrees; i++) { CompactSampler sampler = mock(CompactSampler.class); when(sampler.getCapacity()).thenReturn(sampleSize); RandomCutTree tree = mock(RandomCutTree.class); components.add(spy(new SamplerPlusTree<>(sampler, tree))); } updateCoordinator = spy( new PointStoreCoordinator<>(new PointStore.Builder().dimensions(2).capacity(1).build())); traversalExecutor = spy(new SequentialForestTraversalExecutor(components)); updateExecutor = spy(new SequentialForestUpdateExecutor<>(updateCoordinator, components)); RandomCutForest.Builder builder = RandomCutForest.builder().dimensions(dimensions) .numberOfTrees(numberOfTrees).sampleSize(sampleSize); forest = spy(new RandomCutForest(builder, updateCoordinator, components, builder.getRandom())); Whitebox.setInternalState(forest, "traversalExecutor", traversalExecutor); Whitebox.setInternalState(forest, "updateExecutor", updateExecutor); } @Test void checkOutput() { assertFalse(forest.isOutputReady()); assertThrows(IllegalArgumentException.class, () -> forest.getConditionalField(null, new int[1], 1.0).size()); assertEquals(forest.extrapolateBasic(new float[2], 1, 1, false)[0], 0); assertEquals(forest.getDynamicScore(new float[2], 1, null, null, null), 0); assertEquals(forest.getDynamicAttribution(new float[2], 1, null, null, null).getHighLowSum(), 0); assertEquals(forest.getDynamicSimulatedScore(new float[2], null, null, null, null), 0); assertEquals(forest.getApproximateDynamicScore(new float[2], 0.1, true, 1, null, null, null), 0); assertEquals( forest.getApproximateDynamicAttribution(new float[2], 0.1, true, 1, null, null, null).getHighLowSum(), 0); } @Test void checkParameters() { assertThrows(IllegalArgumentException.class, () -> forest.getConditionalField(null, null, 1)); assertThrows(IllegalArgumentException.class, () -> forest.getConditionalField(null, new int[1], 1)); assertThrows(IllegalArgumentException.class, () -> forest.getConditionalField(null, new int[1], -1)); assertThrows(IllegalArgumentException.class, () -> forest.getConditionalField(null, new int[1], 2)); assertThrows(IllegalArgumentException.class, () -> forest.getConditionalFieldSummary(new float[2], new int[0], 1, 0, false, false, -1, 1)); assertThrows(IllegalArgumentException.class, () -> forest.getConditionalFieldSummary(new float[2], new int[0], 1, 0, false, false, 2, 1)); assertDoesNotThrow(() -> forest.getConditionalFieldSummary(new float[2], new int[0], 1, 0, false, false, 1, 1)); assertThrows(IllegalArgumentException.class, () -> forest.setTimeDecay(-2)); assertThrows(IllegalArgumentException.class, () -> forest.setBoundingBoxCacheFraction(-1)); assertThrows(IllegalArgumentException.class, () -> forest.setBoundingBoxCacheFraction(2)); assertThrows(IllegalArgumentException.class, () -> forest.getDynamicScore(new float[2], -1, null, null, null)); assertThrows(IllegalArgumentException.class, () -> forest.getApproximateDynamicScore(new float[2], 0.1, true, -1, null, null, null)); } @Test public void testUpdate() { float[] point = { 2.2f, -1.1f }; forest.update(point); verify(updateExecutor, times(1)).update(point, false); assertEquals(updateCoordinator.getStore().getCapacity(), 1); } @Test public void testUpdateShingled() { float[] point = { 2.2f, -1.1f }; RandomCutForest newForest = RandomCutForest.builder().internalShinglingEnabled(true).dimensions(2).build(); assertThrows(IllegalArgumentException.class, () -> newForest.update(point, 0L)); assertDoesNotThrow(() -> newForest.update(point)); } @Test public void testUpdateInvalid() { assertThrows(NullPointerException.class, () -> forest.update((double[]) null)); assertThrows(NullPointerException.class, () -> forest.update((float[]) null)); assertThrows(IllegalArgumentException.class, () -> forest.update(new double[] { 1.2, 3.4, -5.6 })); assertThrows(IllegalArgumentException.class, () -> forest.update(new float[3])); assertThrows(IllegalArgumentException.class, () -> forest.update(new float[3], 0l)); } @Test public void testTraverseForestBinaryAccumulator() { float[] point = { 2.2f, -1.1f }; BinaryOperator accumulator = Double::sum; Function finisher = x -> x / numberOfTrees; components.forEach(c -> doReturn(0.0).when(c).traverse(aryEq(point), any(VisitorFactory.class))); forest.traverseForest(point, TestUtils.DUMMY_GENERIC_VISITOR_FACTORY, accumulator, finisher); verify(traversalExecutor, times(1)).traverseForest(point, TestUtils.DUMMY_GENERIC_VISITOR_FACTORY, accumulator, finisher); } @Test public void testTraverseForestBinaryAccumulatorInvalid() { float[] point = { 2.2f, -1.1f }; BinaryOperator accumulator = Double::sum; Function finisher = x -> x / numberOfTrees; components.forEach(c -> when(c.traverse(aryEq(point), any())).thenReturn(0.0)); assertThrows(NullPointerException.class, () -> forest.traverseForest(null, TestUtils.DUMMY_GENERIC_VISITOR_FACTORY, accumulator, finisher)); assertThrows(IllegalArgumentException.class, () -> forest.traverseForest(new float[] { 2.2f, -1.1f, 3.3f }, TestUtils.DUMMY_GENERIC_VISITOR_FACTORY, accumulator, finisher)); assertThrows(NullPointerException.class, () -> forest.traverseForest(point, null, accumulator, finisher)); assertThrows(NullPointerException.class, () -> forest.traverseForest(point, TestUtils.DUMMY_GENERIC_VISITOR_FACTORY, (BinaryOperator) null, finisher)); assertThrows(NullPointerException.class, () -> forest.traverseForest(point, TestUtils.DUMMY_GENERIC_VISITOR_FACTORY, accumulator, null)); } @Test public void testTraverseForestCollector() { float[] point = { 2.2f, -1.1f }; components.forEach(c -> doReturn(0.0).when(c).traverse(aryEq(point), any(VisitorFactory.class))); forest.traverseForest(point, TestUtils.DUMMY_GENERIC_VISITOR_FACTORY, TestUtils.SORTED_LIST_COLLECTOR); verify(traversalExecutor, times(1)).traverseForest(point, TestUtils.DUMMY_GENERIC_VISITOR_FACTORY, TestUtils.SORTED_LIST_COLLECTOR); } @Test public void testTraverseForestCollectorInvalid() { float[] point = { 2.2f, -1.1f }; components.forEach(c -> when(c.traverse(aryEq(point), any())).thenReturn(0.0)); assertThrows(NullPointerException.class, () -> forest.traverseForest(null, TestUtils.DUMMY_GENERIC_VISITOR_FACTORY, TestUtils.SORTED_LIST_COLLECTOR)); assertThrows(IllegalArgumentException.class, () -> forest.traverseForest(new float[] { 2.2f, -1.1f, 3.3f }, TestUtils.DUMMY_GENERIC_VISITOR_FACTORY, TestUtils.SORTED_LIST_COLLECTOR)); assertThrows(NullPointerException.class, () -> forest.traverseForest(point, null, TestUtils.SORTED_LIST_COLLECTOR)); assertThrows(NullPointerException.class, () -> forest.traverseForest(point, TestUtils.DUMMY_GENERIC_VISITOR_FACTORY, null)); } @Test public void testTraverseForestConverging() { float[] point = new float[] { 1.2f, -3.4f }; int convergenceThreshold = numberOfTrees / 2; ConvergingAccumulator accumulator = TestUtils.convergeAfter(convergenceThreshold); Function finisher = x -> x / accumulator.getValuesAccepted(); components.forEach(c -> doReturn(0.0).when(c).traverse(aryEq(point), any(VisitorFactory.class))); forest.traverseForest(point, TestUtils.DUMMY_GENERIC_VISITOR_FACTORY, accumulator, finisher); verify(traversalExecutor, times(1)).traverseForest(point, TestUtils.DUMMY_GENERIC_VISITOR_FACTORY, accumulator, finisher); } @Test public void testTraverseForestConvergingInvalid() { float[] point = new float[] { 1.2f, -3.4f }; int convergenceThreshold = numberOfTrees / 2; ConvergingAccumulator accumulator = TestUtils.convergeAfter(convergenceThreshold); Function finisher = x -> x / accumulator.getValuesAccepted(); components.forEach(c -> when(c.traverse(aryEq(point), any())).thenReturn(0.0)); assertThrows(NullPointerException.class, () -> forest.traverseForest(null, TestUtils.DUMMY_GENERIC_VISITOR_FACTORY, accumulator, finisher)); assertThrows(IllegalArgumentException.class, () -> forest.traverseForest(new float[] { 1.2f, -3.4f, 5.6f }, TestUtils.DUMMY_GENERIC_VISITOR_FACTORY, accumulator, finisher)); assertThrows(NullPointerException.class, () -> forest.traverseForest(point, null, accumulator, finisher)); assertThrows(NullPointerException.class, () -> forest.traverseForest(point, TestUtils.DUMMY_GENERIC_VISITOR_FACTORY, (ConvergingAccumulator) null, finisher)); assertThrows(NullPointerException.class, () -> forest.traverseForest(point, TestUtils.DUMMY_GENERIC_VISITOR_FACTORY, accumulator, null)); } @Test public void traverseForestMultiBinaryAccumulator() { float[] point = { 2.2f, -1.1f }; BinaryOperator accumulator = Double::sum; Function finisher = x -> x / numberOfTrees; components.forEach(c -> doReturn(0.0).when(c).traverseMulti(aryEq(point), any(MultiVisitorFactory.class))); forest.traverseForestMulti(point, TestUtils.DUMMY_GENERIC_MULTI_VISITOR_FACTORY, accumulator, finisher); verify(traversalExecutor, times(1)).traverseForestMulti(point, TestUtils.DUMMY_GENERIC_MULTI_VISITOR_FACTORY, accumulator, finisher); } @Test public void testTraverseForestMultiBinaryAccumulatorInvalid() { float[] point = { 2.2f, -1.1f }; BinaryOperator accumulator = Double::sum; Function finisher = x -> x / numberOfTrees; components.forEach(c -> when(c.traverseMulti(aryEq(point), any())).thenReturn(0.0)); assertThrows(NullPointerException.class, () -> forest.traverseForestMulti(null, TestUtils.DUMMY_GENERIC_MULTI_VISITOR_FACTORY, accumulator, finisher)); assertThrows(IllegalArgumentException.class, () -> forest.traverseForestMulti(new float[] { 2.2f, -1.1f, 3.3f }, TestUtils.DUMMY_GENERIC_MULTI_VISITOR_FACTORY, accumulator, finisher)); assertThrows(NullPointerException.class, () -> forest.traverseForestMulti(point, null, accumulator, finisher)); assertThrows(NullPointerException.class, () -> forest.traverseForestMulti(point, TestUtils.DUMMY_GENERIC_MULTI_VISITOR_FACTORY, null, finisher)); assertThrows(NullPointerException.class, () -> forest.traverseForestMulti(point, TestUtils.DUMMY_GENERIC_MULTI_VISITOR_FACTORY, accumulator, null)); } @Test public void testTraverseForestMultiCollector() { float[] point = { 2.2f, -1.1f }; components.forEach(c -> doReturn(0.0).when(c).traverseMulti(aryEq(point), any(MultiVisitorFactory.class))); forest.traverseForestMulti(point, TestUtils.DUMMY_GENERIC_MULTI_VISITOR_FACTORY, TestUtils.SORTED_LIST_COLLECTOR); verify(traversalExecutor, times(1)).traverseForestMulti(point, TestUtils.DUMMY_GENERIC_MULTI_VISITOR_FACTORY, TestUtils.SORTED_LIST_COLLECTOR); } @Test public void testTraverseForestCollectorMultiInvalid() { float[] point = { 2.2f, -1.1f }; components.forEach(c -> when(c.traverse(aryEq(point), any())).thenReturn(0.0)); assertThrows(NullPointerException.class, () -> forest.traverseForestMulti(null, TestUtils.DUMMY_GENERIC_MULTI_VISITOR_FACTORY, TestUtils.SORTED_LIST_COLLECTOR)); assertThrows(IllegalArgumentException.class, () -> forest.traverseForestMulti(new float[] { 2.2f, -1.1f, 3.3f }, TestUtils.DUMMY_GENERIC_MULTI_VISITOR_FACTORY, TestUtils.SORTED_LIST_COLLECTOR)); assertThrows(NullPointerException.class, () -> forest.traverseForestMulti(point, null, TestUtils.SORTED_LIST_COLLECTOR)); assertThrows(NullPointerException.class, () -> forest.traverseForestMulti(point, TestUtils.DUMMY_GENERIC_MULTI_VISITOR_FACTORY, null)); } @Test public void testGetAnomalyScore() { float[] point = { 1.2f, -3.4f }; assertFalse(forest.isOutputReady()); assertEquals(0.0, forest.getAnomalyScore(point)); doReturn(true).when(forest).isOutputReady(); double expectedResult = 0.0; for (int i = 0; i < numberOfTrees; i++) { SamplerPlusTree component = (SamplerPlusTree) components.get(i); ITree tree = component.getTree(); double treeResult = Math.random(); when(tree.traverse(aryEq(point), any(IVisitorFactory.class))).thenReturn(treeResult); when(tree.getMass()).thenReturn(256); expectedResult += treeResult; } expectedResult /= numberOfTrees; assertEquals(expectedResult, forest.getAnomalyScore(point), EPSILON); } @Test public void testGetApproximateAnomalyScore() { float[] point = { 1.2f, -3.4f }; assertFalse(forest.isOutputReady()); assertEquals(0.0, forest.getApproximateAnomalyScore(point)); doReturn(true).when(forest).isOutputReady(); ConvergingAccumulator accumulator = new OneSidedConvergingDoubleAccumulator( RandomCutForest.DEFAULT_APPROXIMATE_ANOMALY_SCORE_HIGH_IS_CRITICAL, RandomCutForest.DEFAULT_APPROXIMATE_DYNAMIC_SCORE_PRECISION, RandomCutForest.DEFAULT_APPROXIMATE_DYNAMIC_SCORE_MIN_VALUES_ACCEPTED, numberOfTrees); for (int i = 0; i < numberOfTrees; i++) { SamplerPlusTree component = (SamplerPlusTree) components.get(i); ITree tree = component.getTree(); double treeResult = Math.random(); when(tree.traverse(aryEq(point), any(IVisitorFactory.class))).thenReturn(treeResult); when(tree.getMass()).thenReturn(256); if (!accumulator.isConverged()) { accumulator.accept(treeResult); } } double expectedResult = accumulator.getAccumulatedValue() / accumulator.getValuesAccepted(); assertEquals(expectedResult, forest.getApproximateAnomalyScore(point), EPSILON); } @Test public void testGetAnomalyAttribution() { float[] point = { 1.2f, -3.4f }; assertFalse(forest.isOutputReady()); DiVector zero = new DiVector(dimensions); DiVector result = forest.getAnomalyAttribution(point); assertArrayEquals(zero.high, result.high); assertArrayEquals(zero.low, result.low); doReturn(true).when(forest).isOutputReady(); DiVector expectedResult = new DiVector(dimensions); for (int i = 0; i < numberOfTrees; i++) { DiVector treeResult = new DiVector(dimensions); for (int j = 0; j < dimensions; j++) { treeResult.high[j] = Math.random(); treeResult.low[j] = Math.random(); } SamplerPlusTree component = (SamplerPlusTree) components.get(i); ITree tree = component.getTree(); when(tree.traverse(aryEq(point), any(VisitorFactory.class))).thenReturn(treeResult); when(tree.getMass()).thenReturn(256); DiVector.addToLeft(expectedResult, treeResult); } expectedResult = expectedResult.scale(1.0 / numberOfTrees); result = forest.getAnomalyAttribution(point); assertArrayEquals(expectedResult.high, result.high, EPSILON); assertArrayEquals(expectedResult.low, result.low, EPSILON); } @Test public void testGetApproximateAnomalyAttribution() { float[] point = { 1.2f, -3.4f }; DiVector zero = new DiVector(dimensions); DiVector result = forest.getApproximateAnomalyAttribution(point); assertFalse(forest.isOutputReady()); assertArrayEquals(zero.high, result.high, EPSILON); assertArrayEquals(zero.low, result.low, EPSILON); doReturn(true).when(forest).isOutputReady(); ConvergingAccumulator accumulator = new OneSidedConvergingDiVectorAccumulator(dimensions, RandomCutForest.DEFAULT_APPROXIMATE_ANOMALY_SCORE_HIGH_IS_CRITICAL, RandomCutForest.DEFAULT_APPROXIMATE_DYNAMIC_SCORE_PRECISION, RandomCutForest.DEFAULT_APPROXIMATE_DYNAMIC_SCORE_MIN_VALUES_ACCEPTED, numberOfTrees); for (int i = 0; i < numberOfTrees; i++) { SamplerPlusTree component = (SamplerPlusTree) components.get(i); ITree tree = component.getTree(); DiVector treeResult = new DiVector(dimensions); for (int j = 0; j < dimensions; j++) { treeResult.high[j] = Math.random(); treeResult.low[j] = Math.random(); } when(tree.traverse(aryEq(point), any(VisitorFactory.class))).thenReturn(treeResult); when(tree.getMass()).thenReturn(256); if (!accumulator.isConverged()) { accumulator.accept(treeResult); } } DiVector expectedResult = accumulator.getAccumulatedValue().scale(1.0 / accumulator.getValuesAccepted()); result = forest.getApproximateAnomalyAttribution(point); assertArrayEquals(expectedResult.high, result.high, EPSILON); assertArrayEquals(expectedResult.low, result.low, EPSILON); } @Test public void testGetSimpleDensity() { float[] point = { 12.3f, -45.6f }; DensityOutput zero = new DensityOutput(dimensions, sampleSize); assertFalse(forest.isOutputReady()); DensityOutput result = forest.getSimpleDensity(point); assertEquals(zero.getDensity(), result.getDensity(), EPSILON); doReturn(true).when(forest).isOutputReady(); List intermediateResults = new ArrayList<>(); for (int i = 0; i < numberOfTrees; i++) { InterpolationMeasure treeResult = new InterpolationMeasure(dimensions, sampleSize); for (int j = 0; j < dimensions; j++) { treeResult.measure.high[j] = Math.random(); treeResult.measure.low[j] = Math.random(); treeResult.distances.high[j] = Math.random(); treeResult.distances.low[j] = Math.random(); treeResult.probMass.high[j] = Math.random(); treeResult.probMass.low[j] = Math.random(); } SamplerPlusTree component = (SamplerPlusTree) components.get(i); ITree tree = component.getTree(); when(tree.traverse(aryEq(point), any(VisitorFactory.class))).thenReturn(treeResult); intermediateResults.add(treeResult); } Collector collector = InterpolationMeasure.collector(dimensions, 0, numberOfTrees); DensityOutput expectedResult = new DensityOutput(intermediateResults.stream().collect(collector)); result = forest.getSimpleDensity(point); assertEquals(expectedResult.getDensity(), result.getDensity(), EPSILON); } @Test public void testImputeMissingValuesInvalid() { float[] point = { 12.3f, -45.6f }; int numberOfMissingValues = 1; int[] missingIndexes = { 0, 1 }; assertThrows(IllegalArgumentException.class, () -> forest.imputeMissingValues((float[]) null, numberOfMissingValues, missingIndexes)); } @Test public void testImputeMissingValuesWithNoMissingValues() { float[] point = { 12.3f, -45.6f }; int[] missingIndexes = { 1, 1000 }; // second value doesn't matter since numberOfMissingValues is 1o double[] result = forest.imputeMissingValues(toDoubleArray(point), 0, missingIndexes); assertArrayEquals(new double[] { 0.0, 0.0 }, result); } @Test public void testImputeMissingValuesWithOutputNotReady() { double[] point = { 12.3, -45.6 }; int numberOfMissingValues = 1; int[] missingIndexes = { 1, 1000 }; // second value doesn't matter since numberOfMissingValues is 1o assertFalse(forest.isOutputReady()); double[] zero = new double[dimensions]; assertArrayEquals(zero, forest.imputeMissingValues(point, numberOfMissingValues, missingIndexes)); } @Test public void testExtrapolateBasic() { doNothing().when(forest).extrapolateBasicCyclic(any(RangeVector.class), anyInt(), anyInt(), anyInt(), any(float[].class), any(int[].class), anyDouble()); doNothing().when(forest).extrapolateBasicSliding(any(RangeVector.class), anyInt(), anyInt(), any(float[].class), any(int[].class), anyDouble()); double[] point = new double[] { 2.0, -3.0 }; int horizon = 2; int blockSize = 1; boolean cyclic = true; int shingleIndex = 1; forest.extrapolateBasic(point, horizon, blockSize, cyclic, shingleIndex); verify(forest).extrapolateBasicCyclic(any(RangeVector.class), eq(horizon), eq(blockSize), eq(shingleIndex), any(float[].class), any(int[].class), anyDouble()); forest.extrapolateBasic(point, horizon, blockSize, cyclic); verify(forest).extrapolateBasicCyclic(any(RangeVector.class), eq(horizon), eq(blockSize), eq(0), any(float[].class), any(int[].class), anyDouble()); cyclic = false; forest.extrapolateBasic(point, horizon, blockSize, cyclic, shingleIndex); forest.extrapolateBasic(point, horizon, blockSize, cyclic); verify(forest, times(2)).extrapolateBasicSliding(any(RangeVector.class), eq(horizon), eq(blockSize), any(float[].class), any(int[].class), anyDouble()); } @Test public void testExtrapolateBasicInvalid() { double[] point = new double[] { 2.0, -3.0 }; int horizon = 2; int blockSize = 1; boolean cyclic = true; int shingleIndex = 1; assertThrows(IllegalArgumentException.class, () -> forest.extrapolateBasic(point, horizon, -10, cyclic, shingleIndex)); assertThrows(IllegalArgumentException.class, () -> forest.extrapolateBasic(point, horizon, 0, cyclic, shingleIndex)); assertThrows(IllegalArgumentException.class, () -> forest.extrapolateBasic(point, horizon, dimensions, cyclic, shingleIndex)); assertThrows(IllegalArgumentException.class, () -> forest.extrapolateBasic(point, horizon, dimensions * 2, cyclic, shingleIndex)); assertThrows(NullPointerException.class, () -> forest.extrapolateBasic((double[]) null, horizon, blockSize, cyclic, shingleIndex)); RandomCutForest f = RandomCutForest.defaultForest(20); double[] p = new double[20]; // dimensions not divisible by blockSize assertThrows(IllegalArgumentException.class, () -> f.extrapolateBasic(p, horizon, 7, cyclic, shingleIndex)); // invalid shingle index values assertThrows(IllegalArgumentException.class, () -> f.extrapolateBasic(point, horizon, 5, cyclic, -1)); assertThrows(IllegalArgumentException.class, () -> f.extrapolateBasic(point, horizon, 5, cyclic, 4)); assertThrows(IllegalArgumentException.class, () -> f.extrapolateBasic(point, horizon, 4, cyclic, 44)); } @Test public void testExtrapolateBasicWithShingleBuilder() { doNothing().when(forest).extrapolateBasicCyclic(any(RangeVector.class), anyInt(), anyInt(), anyInt(), any(float[].class), any(int[].class), anyDouble()); doNothing().when(forest).extrapolateBasicSliding(any(RangeVector.class), anyInt(), anyInt(), any(float[].class), any(int[].class), anyDouble()); ShingleBuilder shingleBuilder = new ShingleBuilder(1, 2, true); int horizon = 3; forest.extrapolateBasic(shingleBuilder, horizon); verify(forest, times(1)).extrapolateBasicCyclic(any(RangeVector.class), eq(horizon), eq(1), eq(0), any(float[].class), any(int[].class), anyDouble()); shingleBuilder = new ShingleBuilder(1, 2, false); forest.extrapolateBasic(shingleBuilder, horizon); verify(forest, times(1)).extrapolateBasicSliding(any(RangeVector.class), eq(horizon), eq(1), any(float[].class), any(int[].class), anyDouble()); } @Test public void testExtrapolateBasicSliding() { int horizon = 3; int blockSize = 2; RangeVector result = new RangeVector(dimensions * horizon); float[] queryPoint = new float[] { 1.0f, -2.0f }; int[] missingIndexes = new int[blockSize]; doReturn(new SampleSummary(new float[] { 2.0f, -3.0f })) .doReturn(new SampleSummary(new float[] { 4.0f, -5.0f })) .doReturn(new SampleSummary(new float[] { 6.0f, -7.0f })).when(forest) .getConditionalFieldSummary(aryEq(queryPoint), any(int[].class), anyInt(), anyDouble(), any(Boolean.class), any(Boolean.class), anyDouble(), anyInt()); forest.extrapolateBasicSliding(result, horizon, blockSize, queryPoint, missingIndexes, 1.0); float[] expectedResult = new float[] { 2.0f, -3.0f, 4.0f, -5.0f, 6.0f, -7.0f }; assertArrayEquals(expectedResult, result.values); // test properties of RangeVector as well for (int i = 0; i < 6; i++) { assert (result.upper[i] >= result.values[i]); assert (result.lower[i] <= result.values[i]); } // validate subsequent operations (typically used in parkservices) expectedResult[0] = 0f; RangeVector newVector = new RangeVector(expectedResult); RangeVector another = new RangeVector(result); another.shift(0, -2.0f); another.scale(2, 0.25f); newVector.scale(2, 0.25f); assertArrayEquals(newVector.values, another.values, 1e-6f); for (int i = 0; i < 6; i++) { assert (another.upper[i] >= another.values[i]); assert (another.lower[i] <= another.values[i]); } } @Test public void testExtrapolateBasicCyclic() { int horizon = 3; int blockSize = 2; RangeVector result = new RangeVector(dimensions * horizon); int shingleIndex = 1; float[] queryPoint = new float[] { 1.0f, -2.0f }; int[] missingIndexes = new int[blockSize]; doReturn(new SampleSummary(new float[] { 2.0f, -3.0f })) .doReturn(new SampleSummary(new float[] { 4.0f, -5.0f })) .doReturn(new SampleSummary(new float[] { 6.0f, -7.0f })).when(forest) .getConditionalFieldSummary(aryEq(queryPoint), any(int[].class), anyInt(), anyDouble(), any(Boolean.class), any(Boolean.class), anyDouble(), anyInt()); forest.extrapolateBasicCyclic(result, horizon, blockSize, shingleIndex, queryPoint, missingIndexes, 1.0); float[] expectedResult = new float[] { -3.0f, 2.0f, -5.0f, 4.0f, -7.0f, 6.0f }; assertArrayEquals(expectedResult, result.values); // test properties of RangeVector as well for (int i = 0; i < 6; i++) { assert (result.upper[i] >= result.values[i]); assert (result.lower[i] <= result.values[i]); } } @Test public void testGetNearNeighborInSample() { List indexes1 = new ArrayList<>(); indexes1.add(1L); indexes1.add(3L); List indexes2 = new ArrayList<>(); indexes2.add(2L); indexes2.add(4L); List indexes4 = new ArrayList<>(); indexes4.add(1L); indexes4.add(3L); List indexes5 = new ArrayList<>(); indexes5.add(2L); indexes5.add(4L); Neighbor neighbor1 = new Neighbor(new float[] { 1, 2 }, 5, indexes1); when(((SamplerPlusTree) components.get(0)).getTree().traverse(any(float[].class), any(IVisitorFactory.class))).thenReturn(Optional.of(neighbor1)); Neighbor neighbor2 = new Neighbor(new float[] { 1, 2 }, 5, indexes2); when(((SamplerPlusTree) components.get(1)).getTree().traverse(any(float[].class), any(IVisitorFactory.class))).thenReturn(Optional.of(neighbor2)); when(((SamplerPlusTree) components.get(2)).getTree().traverse(any(float[].class), any(IVisitorFactory.class))).thenReturn(Optional.empty()); Neighbor neighbor4 = new Neighbor(new float[] { 2, 3 }, 4, indexes4); when(((SamplerPlusTree) components.get(3)).getTree().traverse(any(float[].class), any(IVisitorFactory.class))).thenReturn(Optional.of(neighbor4)); Neighbor neighbor5 = new Neighbor(new float[] { 2, 3 }, 4, indexes5); when(((SamplerPlusTree) components.get(4)).getTree().traverse(any(float[].class), any(IVisitorFactory.class))).thenReturn(Optional.of(neighbor5)); for (int i = 5; i < components.size(); i++) { when(((SamplerPlusTree) components.get(i)).getTree().traverse(any(float[].class), any(IVisitorFactory.class))).thenReturn(Optional.empty()); } Whitebox.setInternalState(forest, "storeSequenceIndexesEnabled", true); doReturn(true).when(forest).isOutputReady(); List neighbors = forest.getNearNeighborsInSample(new double[] { 0, 0 }, 5); List expectedIndexes = Arrays.asList(1L, 2L, 3L, 4L); assertEquals(2, neighbors.size()); assertTrue(neighbors.get(0).point[0] == 2 && neighbors.get(0).point[1] == 3); assertEquals(4, neighbors.get(0).distance); assertEquals(4, neighbors.get(0).sequenceIndexes.size()); assertThat(neighbors.get(0).sequenceIndexes, is(expectedIndexes)); assertTrue(neighbors.get(1).point[0] == 1 && neighbors.get(1).point[1] == 2); assertEquals(5, neighbors.get(1).distance); assertEquals(4, neighbors.get(1).sequenceIndexes.size()); assertThat(neighbors.get(1).sequenceIndexes, is(expectedIndexes)); } @Test public void testGetNearNeighborsInSampleBeforeOutputReady() { assertFalse(forest.isOutputReady()); assertTrue(forest.getNearNeighborsInSample(new double[] { 0.1, 0.2 }, 5.0).isEmpty()); } @Test public void testGetNearNeighborsInSampleNoDistanceThreshold() { forest.getNearNeighborsInSample(new double[] { 0.1, 0.2 }); verify(forest, times(1)).getNearNeighborsInSample(aryEq(new float[] { 0.1f, 0.2f }), eq(Double.POSITIVE_INFINITY)); } @Test public void testGetNearNeighborsInSampleInvalid() { assertThrows(NullPointerException.class, () -> forest.getNearNeighborsInSample((double[]) null, 101.1)); assertThrows(IllegalArgumentException.class, () -> forest.getNearNeighborsInSample(new double[] { 1.1, 2.2 }, -101.1)); assertThrows(IllegalArgumentException.class, () -> forest.getNearNeighborsInSample(new double[] { 1.1, 2.2 }, 0.0)); } @Test public void testUpdateOnSmallBoundingBox() { // verifies on small bounding boxes random cuts and tree updates are functional RandomCutForest.Builder forestBuilder = RandomCutForest.builder().dimensions(1).numberOfTrees(1).sampleSize(3) .timeDecay(0.5).randomSeed(0).parallelExecutionEnabled(false); RandomCutForest forest = forestBuilder.build(); double[][] data = new double[][] { { 48.08 }, { 48.08000000000001 } }; for (int i = 0; i < 20000; i++) { forest.update(data[i % data.length]); } } @Test public void testSamplersFull() { long totalUpdates = sampleSize / 2; when(updateCoordinator.getTotalUpdates()).thenReturn(totalUpdates); assertFalse(forest.samplersFull()); totalUpdates = sampleSize; when(updateCoordinator.getTotalUpdates()).thenReturn(totalUpdates); assertTrue(forest.samplersFull()); totalUpdates = sampleSize * 10; when(updateCoordinator.getTotalUpdates()).thenReturn(totalUpdates); assertTrue(forest.samplersFull()); } @Test public void testGetTotalUpdates() { long totalUpdates = 987654321L; when(updateCoordinator.getTotalUpdates()).thenReturn(totalUpdates); assertEquals(totalUpdates, forest.getTotalUpdates()); } @Test public void testIsOutputReady() { assertFalse(forest.isOutputReady()); for (int i = 0; i < numberOfTrees / 2; i++) { doReturn(true).when(components.get(i)).isOutputReady(); } assertFalse(forest.isOutputReady()); for (int i = 0; i < numberOfTrees; i++) { doReturn(true).when(components.get(i)).isOutputReady(); } assertFalse(forest.isOutputReady()); when(updateCoordinator.getTotalUpdates()).thenReturn((long) sampleSize); assertTrue(forest.isOutputReady()); // After forest.isOutputReady() returns true once, the result should be cached for (int i = 0; i < numberOfTrees; i++) { IComponentModel component = components.get(i); reset(component); doReturn(true).when(component).isOutputReady(); } assertTrue(forest.isOutputReady()); for (int i = 0; i < numberOfTrees; i++) { IComponentModel component = components.get(i); verify(component, never()).isOutputReady(); } } @Test public void testUpdateAfterRoundTrip() { int dimensions = 10; for (int trials = 0; trials < 10; trials++) { RandomCutForest forest = RandomCutForest.builder().dimensions(dimensions).sampleSize(64).build(); Random r = new Random(); for (int i = 0; i < new Random(trials).nextInt(3000); i++) { forest.update(r.ints(dimensions, 0, 50).asDoubleStream().toArray()); } // serialize + deserialize RandomCutForestMapper mapper = new RandomCutForestMapper(); mapper.setSaveExecutorContextEnabled(true); mapper.setSaveTreeStateEnabled(true); RandomCutForest forest2 = mapper.toModel(mapper.toState(forest)); // update re-instantiated forest for (int i = 0; i < 10000; i++) { double[] point = r.ints(dimensions, 0, 50).asDoubleStream().toArray(); double score = forest.getAnomalyScore(point); assertEquals(score, forest2.getAnomalyScore(point), 1e-5); forest2.update(point); forest.update(point); } } } @Test public void testUpdateAfterRoundTripWithPause() { int dimensions = 10; int shingleSize = 5; for (int trials = 0; trials < 10; trials++) { RandomCutForest forest = RandomCutForest.builder().dimensions(dimensions).sampleSize(64) .shingleSize(shingleSize).internalShinglingEnabled(true).build(); RandomCutForest reference = RandomCutForest.builder().dimensions(dimensions).sampleSize(64) .shingleSize(shingleSize).internalShinglingEnabled(true).build(); Random r = new Random(); for (int i = 0; i < new Random(trials).nextInt(3000); i++) { double[] vec = r.ints(dimensions / shingleSize, 0, 50).asDoubleStream().toArray(); forest.update(vec); reference.update(vec); } assertTrue(forest.isCurrentlySampling()); forest.pauseSampling(); assertFalse(forest.isCurrentlySampling()); // serialize + deserialize RandomCutForestMapper mapper = new RandomCutForestMapper(); mapper.setSaveExecutorContextEnabled(true); mapper.setSaveTreeStateEnabled(true); RandomCutForest forest2 = mapper.toModel(mapper.toState(forest)); assertFalse(forest2.isCurrentlySampling()); // update re-instantiated forest for (int i = 0; i < 1000; i++) { double[] point = r.ints(dimensions / shingleSize, 0, 50).asDoubleStream().toArray(); if (i % 100 == 0) { if (forest2.isCurrentlySampling()) { forest.pauseSampling(); forest.resumeSampling(); } else { forest.resumeSampling(); forest2.resumeSampling(); } } double score = forest.getAnomalyScore(point); assertEquals(score, forest2.getAnomalyScore(point), 1e-5); forest2.update(point); forest.update(point); reference.update(point); } assertArrayEquals(reference.transformToShingledPoint(new float[dimensions / shingleSize]), forest.transformToShingledPoint(new float[dimensions / shingleSize]), 1e-10f); } } @Test public void testUpdateAfterRoundTripMediumNodeStore() { int dimensions = 5; for (int trials = 0; trials < 10; trials++) { RandomCutForest forest = RandomCutForest.builder().dimensions(dimensions).numberOfTrees(1).sampleSize(20000) .build(); Random r = new Random(); for (int i = 0; i < 30000 + new Random().nextInt(300); i++) { forest.update(r.ints(dimensions, 0, 50).asDoubleStream().toArray()); } // serialize + deserialize RandomCutForestMapper mapper = new RandomCutForestMapper(); mapper.setSaveTreeStateEnabled(true); mapper.setSaveExecutorContextEnabled(true); RandomCutForestState state = mapper.toState(forest); RandomCutForest forest2 = mapper.toModel(state); // update re-instantiated forest for (int i = 0; i < 10000; i++) { double[] point = r.ints(dimensions, 0, 50).asDoubleStream().toArray(); double score = forest.getAnomalyScore(point); assertEquals(score, forest2.getAnomalyScore(point), 1E-10); forest2.update(point); forest.update(point); } List first = forest.getConditionalField(new float[dimensions], new int[1], 1.0); List second = forest2.getConditionalField(new float[dimensions], new int[1], 1.0); assertEquals(first.size(), second.size()); for (int i = 0; i < first.size(); i++) { assertEquals(first.get(i).pointStoreIndex, second.get(i).pointStoreIndex); } } } @Test public void testUpdateAfterRoundTripLargeNodeStore() { int dimensions = 5; for (int trials = 0; trials < 1; trials++) { long seed = new Random().nextLong(); System.out.println(" this seed " + seed); RandomCutForest forest = RandomCutForest.builder().dimensions(dimensions).numberOfTrees(1) .sampleSize(200000).centerOfMassEnabled(true).randomSeed(seed).build(); Random r = new Random(seed); for (int i = 0; i < 300000 + new Random().nextInt(300); i++) { forest.update(r.ints(dimensions, 0, 50).asDoubleStream().toArray()); } // serialize + deserialize RandomCutForestMapper mapper = new RandomCutForestMapper(); mapper.setSaveTreeStateEnabled(true); mapper.setSaveExecutorContextEnabled(true); RandomCutForestState state = mapper.toState(forest); RandomCutForest forest2 = mapper.toModel(state); assert (forest2.isCenterOfMassEnabled()); // update re-instantiated forest for (int i = 0; i < 10000; i++) { double[] point = r.ints(dimensions, 0, 50).asDoubleStream().toArray(); double score = forest.getAnomalyScore(point); assertEquals(score, forest2.getAnomalyScore(point), 1E-10); forest2.update(point); forest.update(point); } List> first = forest.summarize(10, 1, 1, null); System.out.println("DONE 1"); List> second = forest2.summarize(10, 1, 1, null); assert (abs(first.size() - second.size()) < 1); } } @Test public void testInternalShinglingRotated() { RandomCutForest forest = new RandomCutForest.Builder<>().internalShinglingEnabled(true) .internalRotationEnabled(true).shingleSize(2).dimensions(4).numberOfTrees(1).build(); assertThrows(IllegalArgumentException.class, () -> forest.update(new double[] { 0 })); forest.update(new double[] { 0.0, -0.0 }); assertArrayEquals(forest.lastShingledPoint(), new float[] { 0, 0, 0, 0 }); forest.update(new double[] { 1.0, -1.0 }); assertArrayEquals(forest.transformIndices(new int[] { 0, 1 }, 2), new int[] { 0, 1 }); forest.update(new double[] { 2.0, -2.0 }); assertEquals(forest.nextSequenceIndex(), 3); assertArrayEquals(forest.lastShingledPoint(), new float[] { 2, -2, 1, -1 }); assertArrayEquals(forest.transformToShingledPoint(new float[] { 7, 8 }), new float[] { 2, -2, 7, 8 }); assertArrayEquals(forest.transformIndices(new int[] { 0, 1 }, 2), new int[] { 2, 3 }); assertThrows(IllegalArgumentException.class, () -> forest.update(new double[] { 0, 0, 0, 0 })); } @Test public void testComponents() { RandomCutForest forest = new RandomCutForest.Builder<>().dimensions(2).sampleSize(10).numberOfTrees(2).build(); for (IComponentModel model : forest.getComponents()) { assertEquals(model.getConfig(Config.BOUNDING_BOX_CACHE_FRACTION), 1.0); model.getConfig(Config.TIME_DECAY); assertEquals(model.getConfig(Config.TIME_DECAY), 1.0 / 100); assertThrows(IllegalArgumentException.class, () -> model.getConfig("foo")); assertThrows(IllegalArgumentException.class, () -> model.setConfig("bar", 0)); } } @Test public void testOutOfOrderUpdate() { RandomCutForest forest = new RandomCutForest.Builder<>().dimensions(2).sampleSize(10).numberOfTrees(2).build(); forest.setTimeDecay(100); // will act almost like a sliding window buffer forest.setBoundingBoxCacheFraction(0.2); forest.update(new double[] { 20.0, -20.0 }, 20); forest.update(new double[] { 0.0, -0.0 }, 0); assertEquals(forest.getNearNeighborsInSample(new double[] { 0.0, -0.0 }, 1).size(), 1); for (int i = 1; i < 19; i++) { forest.update(new double[] { i, -i }, i); } // the {0,0} point should be flushed out assertEquals(forest.getNearNeighborsInSample(new double[] { 0.0, -0.0 }, 1).size(), 0); // the {20,-20} point is present still assertEquals(forest.getNearNeighborsInSample(new double[] { 20.0, -20.0 }, 1).size(), 1); } @Test public void testFloatingPointRandomCut() { int dimensions = 16; int numberOfTrees = 41; int sampleSize = 64; long seed = new Random().nextLong(); System.out.println(" seed " + seed); int dataSize = 4000 * sampleSize; double[][] big = generateShingledData(dataSize, dimensions, 2); RandomCutForest forest = RandomCutForest.builder().dimensions(dimensions).numberOfTrees(numberOfTrees) .sampleSize(sampleSize).randomSeed(seed).boundingBoxCacheFraction(1.0).build(); int num = 0; for (double[] point : big) { forest.update(point); } } public static double[][] generateShingledData(int size, int dimensions, long seed) { double[][] answer = new double[size][]; int entryIndex = 0; boolean filledShingleAtleastOnce = false; double[] history = new double[dimensions]; int count = 0; double[] data = getDataD(size + dimensions - 1, 100, 5, seed); for (int j = 0; j < size + dimensions - 1; ++j) { // we stream here .... history[entryIndex] = data[j]; entryIndex = (entryIndex + 1) % dimensions; if (entryIndex == 0) { filledShingleAtleastOnce = true; } if (filledShingleAtleastOnce) { // System.out.println("Adding " + j); answer[count++] = getShinglePoint(history, entryIndex, dimensions); } } return answer; } private static double[] getShinglePoint(double[] recentPointsSeen, int indexOfOldestPoint, int shingleLength) { double[] shingledPoint = new double[shingleLength]; int i = 0; for (int j = 0; j < shingleLength; ++j) { double point = recentPointsSeen[(j + indexOfOldestPoint) % shingleLength]; shingledPoint[i++] = point; } return shingledPoint; } static double[] getDataD(int num, double amplitude, double noise, long seed) { double[] data = new double[num]; Random noiseprg = new Random(seed); for (int i = 0; i < num; i++) { data[i] = amplitude * Math.cos(2 * PI * (i + 50) / 1000) + noise * noiseprg.nextDouble(); } return data; } } ================================================ FILE: Java/core/src/test/java/com/amazon/randomcutforest/SampleSummaryTest.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest; import static com.amazon.randomcutforest.CommonUtils.toFloatArray; import static org.junit.jupiter.api.Assertions.assertArrayEquals; import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.Comparator; import java.util.List; import java.util.Random; import java.util.function.BiFunction; import java.util.function.Function; import java.util.stream.Stream; import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; import org.junit.jupiter.params.provider.MethodSource; import com.amazon.randomcutforest.returntypes.SampleSummary; import com.amazon.randomcutforest.summarization.Center; import com.amazon.randomcutforest.summarization.ICluster; import com.amazon.randomcutforest.summarization.MultiCenter; import com.amazon.randomcutforest.summarization.Summarizer; import com.amazon.randomcutforest.testutils.NormalMixtureTestData; import com.amazon.randomcutforest.util.Weighted; @Tag("functional") public class SampleSummaryTest { private static double baseMu; private static double baseSigma; private static double anomalyMu; private static double anomalySigma; private static double transitionToAnomalyProbability; private static double transitionToBaseProbability; private static int dataSize; @Test public void configAndAbsorbTest() { long seed = new Random().nextLong(); Random random = new Random(seed); int newDimensions = random.nextInt(10) + 3; dataSize = 2000; Summarizer summarizer = new Summarizer(); float[][] points = getData(dataSize, newDimensions, random.nextInt(), Summarizer::L2distance); ArrayList> weighted = new ArrayList<>(); ArrayList> refs = new ArrayList<>(); int count = 0; for (float[] point : points) { // testing 0 weight weighted.add(new Weighted<>(point, 0.0f)); refs.add(new Weighted(count, 0.0f)); ++count; } assertThrows(IllegalArgumentException.class, () -> Summarizer.summarize(weighted, 500, 10 * newDimensions, false, Summarizer::L2distance, random.nextInt(), false)); BiFunction> clusterInitializer = (a, b) -> MultiCenter.initialize(a, b, 0.8, 3); Function getPoint = (i) -> weighted.get(i).index; assertThrows(IllegalArgumentException.class, () -> Summarizer.summarize(weighted, 500, 10 * newDimensions, 1, false, 0.1, Summarizer::L2distance, clusterInitializer, 0, false, null)); assertThrows(IllegalArgumentException.class, () -> Summarizer.summarize(weighted, 50, 10, false, Summarizer::L2distance, random.nextInt(), false)); assertThrows(IllegalArgumentException.class, () -> Summarizer.summarize(weighted, 50, 10, 1, false, 0.1, Summarizer::L2distance, clusterInitializer, 0, false, null)); assertThrows(IllegalArgumentException.class, () -> Summarizer.summarize(weighted, 50, 10 * newDimensions, 0, false, 0.1, Summarizer::L2distance, clusterInitializer, 0, false, null)); assertThrows(IllegalArgumentException.class, () -> Summarizer.summarize(weighted, 50, 10 * newDimensions, 100, false, 0.1, Summarizer::L2distance, clusterInitializer, 0, false, null)); assertThrows(IllegalArgumentException.class, () -> Summarizer.iterativeClustering(5, 10 * newDimensions, 0, refs, getPoint, Summarizer::L2distance, clusterInitializer, 0, false, false, 0.1, null)); assertThrows(IllegalArgumentException.class, () -> Summarizer.iterativeClustering(5, 10 * newDimensions, 7, refs, getPoint, Summarizer::L2distance, clusterInitializer, 0, false, false, 0.1, null)); assertThrows(IllegalArgumentException.class, () -> Summarizer.iterativeClustering(5, 10 * newDimensions, 1, Collections.emptyList(), getPoint, Summarizer::L2distance, clusterInitializer, 0, false, false, 0.1, null)); assertThrows(IllegalArgumentException.class, () -> Summarizer.iterativeClustering(5, 10 * newDimensions, 1, refs, getPoint, Summarizer::L2distance, clusterInitializer, 0, false, false, 0.1, null)); assertThrows(IllegalArgumentException.class, () -> Summarizer.summarize(weighted, 5, 10 * newDimensions, false, Summarizer::L2distance, random.nextInt(), false)); assertThrows(IllegalArgumentException.class, () -> Summarizer.summarize(weighted, 5, 10 * newDimensions, 1, false, 0.1, Summarizer::L2distance, clusterInitializer, 0, false, null)); Weighted a = weighted.get(0); a.weight = -1; assertThrows(IllegalArgumentException.class, () -> Summarizer.summarize(weighted, 5, 10 * newDimensions, 1, false, 0.1, Summarizer::L2distance, clusterInitializer, 0, false, null)); assertThrows(IllegalArgumentException.class, () -> Summarizer.summarize(weighted, 5, 10 * newDimensions, false, Summarizer::L2distance, random.nextInt(), false)); a.weight = Float.NaN; assertThrows(IllegalArgumentException.class, () -> Summarizer.summarize(weighted, 5, 10 * newDimensions, 1, false, 0.1, Summarizer::L2distance, clusterInitializer, 0, false, null)); assertThrows(IllegalArgumentException.class, () -> Summarizer.summarize(weighted, 5, 10 * newDimensions, false, Summarizer::L2distance, random.nextInt(), false)); a.weight = Float.POSITIVE_INFINITY; assertThrows(IllegalArgumentException.class, () -> Summarizer.summarize(weighted, 5, 10 * newDimensions, 1, false, 0.1, Summarizer::L2distance, clusterInitializer, 0, false, null)); assertThrows(IllegalArgumentException.class, () -> Summarizer.summarize(weighted, 5, 10 * newDimensions, false, Summarizer::L2distance, random.nextInt(), false)); a.weight = 1; assertDoesNotThrow(() -> Summarizer.summarize(weighted, 5, 10 * newDimensions, false, Summarizer::L2distance, random.nextInt(), false)); assertDoesNotThrow(() -> Summarizer.summarize(weighted, 5, 10 * newDimensions, 1, false, 0.1, Summarizer::L2distance, clusterInitializer, 0, false, null)); refs.get(0).weight = -1; assertThrows(IllegalArgumentException.class, () -> Summarizer.iterativeClustering(5, 10 * newDimensions, 1, refs, getPoint, Summarizer::L2distance, clusterInitializer, 0, false, false, 0.1, null)); refs.get(0).weight = Float.POSITIVE_INFINITY; assertThrows(IllegalArgumentException.class, () -> Summarizer.iterativeClustering(5, 10 * newDimensions, 1, refs, getPoint, Summarizer::L2distance, clusterInitializer, 0, false, false, 0.1, null)); refs.get(0).weight = Float.NaN; assertThrows(IllegalArgumentException.class, () -> Summarizer.iterativeClustering(5, 10 * newDimensions, 1, refs, getPoint, Summarizer::L2distance, clusterInitializer, 0, false, false, 0.1, null)); refs.get(0).weight = 0; assertThrows(IllegalArgumentException.class, () -> Summarizer.iterativeClustering(5, 10 * newDimensions, 1, refs, getPoint, Summarizer::L2distance, clusterInitializer, 0, false, false, 0.1, null)); refs.get(0).weight = 1; assertDoesNotThrow(() -> Summarizer.iterativeClustering(5, 10 * newDimensions, 1, refs, getPoint, Summarizer::L2distance, clusterInitializer, 0, false, false, 0.1, null)); assertThrows(IllegalArgumentException.class, () -> Summarizer.assignAndRecompute(refs, getPoint, Collections.emptyList(), Summarizer::L2distance, false)); List> list = new ArrayList<>(); list.add(clusterInitializer.apply(new float[newDimensions], 1f)); assertThrows(IllegalArgumentException.class, () -> Summarizer.assignAndRecompute(Collections.emptyList(), getPoint, list, Summarizer::L2distance, false)); assertDoesNotThrow(() -> Summarizer.assignAndRecompute(refs, getPoint, list, Summarizer::L2distance, false)); assertArrayEquals(list.get(0).primaryRepresentative(Summarizer::L2distance), new float[newDimensions], 1e-6f); float[] newPoint = new float[newDimensions]; Arrays.fill(newPoint, 1.01f); list.get(0).absorb(clusterInitializer.apply(newPoint, 1f), Summarizer::L2distance); BiFunction badDistance = mock(); when(badDistance.apply(any(), any())).thenReturn(-1.0); assertThrows(IllegalArgumentException.class, () -> Summarizer.assignAndRecompute(refs, getPoint, list, badDistance, false)); } @Test public void TestMultiCenter() { BiFunction> clusterInitializer = (a, b) -> MultiCenter.initialize(a, b, 0.8, 3); Function getPoint = (i) -> { return new float[1]; }; ICluster newCluster = clusterInitializer.apply(new float[1], 1f); float[] newPoint = new float[] { 1 }; BiFunction badDistance = mock(); when(badDistance.apply(any(), any())).thenReturn(-1.0); ICluster cluster = clusterInitializer.apply(new float[1], 1.0f); ICluster another = clusterInitializer.apply(new float[1], 1.0f); assertThrows(IllegalArgumentException.class, () -> cluster.absorb(another, badDistance)); when(badDistance.apply(any(), any())).thenReturn(-1.0).thenReturn(-1.0); assertThrows(IllegalArgumentException.class, () -> cluster.distance(new float[1], badDistance)); assertThrows(IllegalArgumentException.class, () -> cluster.absorb(another, badDistance)); newCluster.absorb(clusterInitializer.apply(newPoint, 1f), Summarizer::L2distance); when(badDistance.apply(any(), any())).thenReturn(1.0).thenReturn(1.0).thenReturn(1.0).thenReturn(-1.0); assertThrows(IllegalArgumentException.class, () -> newCluster.absorb(another, badDistance)); ICluster newCluster2 = clusterInitializer.apply(new float[1], 1f); newCluster2.absorb(clusterInitializer.apply(newPoint, 1f), Summarizer::L2distance); when(badDistance.apply(any(), any())).thenReturn(1.0).thenReturn(1.0).thenReturn(1.0).thenReturn(1.0) .thenReturn(1.0); newCluster2.absorb(clusterInitializer.apply(newPoint, 1f), badDistance); when(badDistance.apply(any(), any())).thenReturn(1.0).thenReturn(-1.0); assertThrows(IllegalArgumentException.class, () -> newCluster2.distance(new float[1], badDistance)); another.absorb(clusterInitializer.apply(newPoint, 1f), Summarizer::L2distance); when(badDistance.apply(any(), any())).thenReturn(-1.0).thenReturn(1.0).thenReturn(-1.0); assertThrows(IllegalArgumentException.class, () -> newCluster2.distance(another, badDistance)); // error at a different location assertThrows(IllegalArgumentException.class, () -> newCluster2.distance(another, badDistance)); when(badDistance.apply(any(), any())).thenReturn(1.0).thenReturn(1.0).thenReturn(1.0).thenReturn(1.0) .thenReturn(1.0).thenReturn(1.0).thenReturn(1.0).thenReturn(1.0).thenReturn(1.0).thenReturn(1.0) .thenReturn(1.0).thenReturn(-1.0); assertThrows(IllegalArgumentException.class, () -> newCluster2.absorb(another, badDistance)); ICluster newCluster3 = MultiCenter.initialize(new float[1], 0f, 0, 1); assertEquals(newCluster3.recompute(getPoint, false, Summarizer::L2distance), 0); assertEquals(newCluster3.recompute(getPoint, true, Summarizer::L2distance), 0); newCluster3.getAssignedPoints().add(new Weighted<>(1, 1.0f)); assertEquals(newCluster3.recompute(getPoint, true, Summarizer::L2distance), 0); ICluster newCluster4 = MultiCenter.initialize(new float[1], 1f, 0, 1); when(badDistance.apply(any(), any())).thenReturn(-1.0).thenReturn(-1.0); newCluster4.getAssignedPoints().add(new Weighted<>(1, 1.0f)); assertThrows(IllegalArgumentException.class, () -> newCluster4.recompute(getPoint, true, badDistance)); assertThrows(IllegalArgumentException.class, () -> newCluster4.absorb(newCluster3, badDistance)); } @Test public void testCenter() { int newDimensions = 1; Function getPoint = (i) -> { return new float[1]; }; BiFunction badDistance = mock(); ICluster newCluster5 = Center.initialize(new float[newDimensions], 0f); assertEquals(newCluster5.extentMeasure(), newCluster5.averageRadius()); assertEquals(newCluster5.recompute(getPoint, true, Summarizer::L2distance), 0); newCluster5.getAssignedPoints().add(new Weighted<>(1, 1.0f)); assertEquals(newCluster5.recompute(getPoint, true, Summarizer::L2distance), 0); when(badDistance.apply(any(), any())).thenReturn(-1.0).thenReturn(-1.0); assertThrows(IllegalArgumentException.class, () -> newCluster5.distance(new float[1], badDistance)); ICluster newCluster6 = Center.initialize(new float[newDimensions], 10f); newCluster6.getAssignedPoints().add(new Weighted<>(1, 1.0f)); newCluster6.getAssignedPoints().add(new Weighted<>(1, 1.0f)); when(badDistance.apply(any(), any())).thenReturn(-1.0).thenReturn(-1.0); assertThrows(IllegalArgumentException.class, () -> newCluster6.absorb(newCluster5, badDistance)); assertThrows(IllegalArgumentException.class, () -> newCluster6.recompute(getPoint, true, badDistance)); ICluster multiCenter1 = MultiCenter.initialize(new float[] { 1 }, 5.0f, 0.8, 2); ICluster multiCenter2 = MultiCenter.initialize(new float[] { 2 }, 5.0f, 0.8, 2); multiCenter1.absorb(multiCenter2, Summarizer::L2distance); // weight 10 newCluster6.absorb(multiCenter1, Summarizer::L2distance); assertEquals(newCluster6.primaryRepresentative(Summarizer::L2distance)[0], 0.5, 1e-6f); ICluster newCluster7 = Center.initialize(new float[newDimensions], -10f); newCluster7.getAssignedPoints().add(new Weighted<>(1, 1.0f)); newCluster7.getAssignedPoints().add(new Weighted<>(1, 1.0f)); when(badDistance.apply(any(), any())).thenReturn(-1.0); assertThrows(IllegalArgumentException.class, () -> newCluster7.recompute(getPoint, true, badDistance)); ICluster newCluster8 = Center.initialize(new float[newDimensions], 1.9f); newCluster8.getAssignedPoints().add(new Weighted<>(1, 1.0f)); newCluster8.getAssignedPoints().add(new Weighted<>(1, 1.0f)); when(badDistance.apply(any(), any())).thenReturn(-1.0); assertThrows(IllegalArgumentException.class, () -> newCluster8.recompute(getPoint, true, badDistance)); } @Test public void zeroTest() { Random random = new Random(0); dataSize = 2000; float[][] points = new float[dataSize][]; for (int y = 0; y < dataSize; y++) { points[y] = new float[] { (float) (random.nextInt(100) + 0.5 * random.nextDouble()) }; } ArrayList> weighted = new ArrayList<>(); ArrayList> refs = new ArrayList<>(); Function getPoint = (x) -> weighted.get(x).index; int count = 0; for (float[] point : points) { // testing 0 weight weighted.add(new Weighted<>(point, 1.0f)); refs.add(new Weighted(count, 1.0f)); ++count; } BiFunction> clusterInitializer = (a, b) -> Center.initialize(a, b); List> list = new ArrayList<>(); for (int y = 0; y < 200; y++) { list.add(clusterInitializer.apply(new float[] { -1.0f }, 1.0f)); } assertDoesNotThrow(() -> Summarizer.iterativeClustering(100, 0, 1, refs, getPoint, Summarizer::L2distance, clusterInitializer, 0, false, true, 0.1, list)); } @ParameterizedTest @MethodSource("generateArguments") public void SummaryTest(BiFunction distance) { int over = 0; int under = 0; for (int numTrials = 0; numTrials < 20; numTrials++) { long seed = new Random().nextLong(); Random random = new Random(seed); int newDimensions = random.nextInt(10) + 3; dataSize = 200000; float[][] points = getData(dataSize, newDimensions, random.nextInt(), distance); SampleSummary summary = Summarizer.summarize(points, 5 * newDimensions, 10 * newDimensions, false, distance, random.nextInt(), false); System.out.println("trial " + numTrials + " : " + summary.summaryPoints.length + " clusters for " + newDimensions + " dimensions, seed : " + seed); if (summary.summaryPoints.length < 2 * newDimensions) { ++under; } else if (summary.summaryPoints.length > 2 * newDimensions) { ++over; } } assert (under <= 1); assert (over <= 1); } @ParameterizedTest @MethodSource("generateArguments") public void ParallelTest(BiFunction distance) { long seed = new Random().nextLong(); Random random = new Random(seed); int newDimensions = random.nextInt(10) + 3; dataSize = 200000; float[][] points = getData(dataSize, newDimensions, random.nextInt(), distance); System.out.println("checking seed : " + seed); int nextSeed = random.nextInt(); SampleSummary summary1 = Summarizer.summarize(points, 5 * newDimensions, 10 * newDimensions, false, distance, nextSeed, false); SampleSummary summary2 = Summarizer.summarize(points, 5 * newDimensions, 10 * newDimensions, false, distance, nextSeed, true); ArrayList> pointList = new ArrayList<>(); for (float[] point : points) { pointList.add(new Weighted<>(point, 1.0f)); } List> clusters = Summarizer.singleCentroidSummarize(pointList, 5 * newDimensions, 10 * newDimensions, 1, true, distance, nextSeed, false, null); assertEquals(summary2.weightOfSamples, summary1.weightOfSamples, " sampling inconsistent"); assertEquals(summary2.summaryPoints.length, summary1.summaryPoints.length, " incorrect length of typical points"); // due to randomization, they might not equal assertTrue(Math.abs(clusters.size() - summary1.summaryPoints.length) <= 1, "The difference between clusters.size() and summary1.summaryPoints.length should be at most 1"); double total = clusters.stream().map(ICluster::getWeight).reduce(0.0, Double::sum); assertEquals(total, summary1.weightOfSamples, 1e-3); // parallelization can produce reordering of merges } @Test public void SampleSummaryTestL2() { long seed = new Random().nextLong(); Random random = new Random(seed); int newDimensions = random.nextInt(10) + 3; dataSize = 200000; float[][] points = getData(dataSize, newDimensions, random.nextInt(), Summarizer::L2distance); System.out.println("checking L2 seed : " + seed); int nextSeed = random.nextInt(); ArrayList> pointList = new ArrayList<>(); for (float[] point : points) { pointList.add(new Weighted<>(point, 1.0f)); } SampleSummary summary1 = Summarizer.summarize(points, 5 * newDimensions, 20 * newDimensions, false, Summarizer::L2distance, nextSeed, false); SampleSummary summary2 = Summarizer.l2summarize(points, 5 * newDimensions, nextSeed); SampleSummary summary3 = Summarizer.l2summarize(pointList, 5 * newDimensions, 20 * newDimensions, false, nextSeed); assertEquals(summary2.weightOfSamples, summary1.weightOfSamples, " sampling inconsistent"); assertEquals(summary3.weightOfSamples, summary1.weightOfSamples, " sampling inconsistent"); assertEquals(summary2.summaryPoints.length, summary1.summaryPoints.length, " incorrect length of typical points"); assertEquals(summary3.summaryPoints.length, summary1.summaryPoints.length, " incorrect length of typical points"); for (int i = 0; i < summary2.summaryPoints.length; i++) { assertArrayEquals(summary1.summaryPoints[i], summary2.summaryPoints[i], 1e-6f); assertArrayEquals(summary1.summaryPoints[i], summary3.summaryPoints[i], 1e-6f); assertEquals(summary1.relativeWeight[i], summary2.relativeWeight[i], 1e-6f); assertEquals(summary1.relativeWeight[i], summary3.relativeWeight[i], 1e-6f); } } @Test public void IdempotenceTestL2() { long seed = new Random().nextLong(); Random random = new Random(seed); int newDimensions = random.nextInt(10) + 3; dataSize = 200000; float[][] points = getData(dataSize, newDimensions, random.nextInt(), Summarizer::L2distance); System.out.println("checking idempotence L2 seed : " + seed); int nextSeed = random.nextInt(); ArrayList> pointList = new ArrayList<>(); for (float[] point : points) { pointList.add(new Weighted<>(point, 1.0f)); } List> clusters = Summarizer.singleCentroidSummarize(pointList, 5 * newDimensions, 20 * newDimensions, 1, true, Summarizer::L2distance, nextSeed, false, null); List> clusters2 = Summarizer.singleCentroidSummarize(pointList, 5 * newDimensions, 20 * newDimensions, 1, true, Summarizer::L2distance, nextSeed, false, clusters); assertEquals(clusters.size(), clusters2.size(), " incorrect sizes"); for (int i = 0; i < clusters.size(); i++) { // note clusters can have same weight and get permuted assertEquals(clusters.get(i).getWeight(), clusters2.get(i).getWeight()); } clusters.sort(Comparator.comparingDouble(ICluster::extentMeasure)); clusters2.sort(Comparator.comparingDouble(ICluster::extentMeasure)); assertEquals(clusters.size(), clusters2.size(), " incorrect sizes"); for (int i = 0; i < clusters.size(); i++) { // note clusters can have same weight and get permuted assertEquals(clusters.get(i).extentMeasure(), clusters2.get(i).extentMeasure()); assertEquals(clusters.get(i).averageRadius(), clusters2.get(i).averageRadius()); assertEquals(clusters.get(i).averageRadius(), clusters.get(i).extentMeasure()); } } public float[][] getData(int dataSize, int newDimensions, int seed, BiFunction distance) { baseMu = 0.0; baseSigma = 1.0; anomalyMu = 0.0; anomalySigma = 1.0; transitionToAnomalyProbability = 0.0; // ignoring anomaly cluster for now transitionToBaseProbability = 1.0; Random prg = new Random(0); NormalMixtureTestData generator = new NormalMixtureTestData(baseMu, baseSigma, anomalyMu, anomalySigma, transitionToAnomalyProbability, transitionToBaseProbability); double[][] data = generator.generateTestData(dataSize, newDimensions, seed); float[][] floatData = new float[dataSize][]; float[] allZero = new float[newDimensions]; float[] sigma = new float[newDimensions]; Arrays.fill(sigma, 1f); double scale = distance.apply(allZero, sigma); for (int i = 0; i < dataSize; i++) { // shrink, shift at random int nextD = prg.nextInt(newDimensions); for (int j = 0; j < newDimensions; j++) { data[i][j] *= 1.0 / (3.0); // standard deviation adds up across dimension; taking square root // and using s 3 sigma ball if (j == nextD) { if (prg.nextDouble() < 0.5) data[i][j] += 2.0 * scale; else data[i][j] -= 2.0 * scale; } } floatData[i] = toFloatArray(data[i]); } return floatData; } private static Stream generateArguments() { return Stream.of(Arguments.of((BiFunction) Summarizer::L1distance), Arguments.of((BiFunction) Summarizer::L2distance), Arguments.of((BiFunction) Summarizer::LInfinitydistance)); } } ================================================ FILE: Java/core/src/test/java/com/amazon/randomcutforest/TestUtils.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest; import java.util.ArrayList; import java.util.List; import java.util.function.Function; import java.util.stream.Collector; import com.amazon.randomcutforest.returntypes.ConvergingAccumulator; import com.amazon.randomcutforest.tree.INodeView; import com.amazon.randomcutforest.tree.RandomCutTree; public class TestUtils { public static final double EPSILON = 1e-6; /** * Return a visitor that does nothing. */ public static final VisitorFactory DUMMY_GENERIC_VISITOR_FACTORY = new VisitorFactory( (tree, x) -> new Visitor() { @Override public void accept(INodeView node, int depthOfNode) { } @Override public Double getResult() { return Double.NaN; } }); /** * Return a multi-visitor that does nothing. */ public static final Function> DUMMY_MULTI_VISITOR_FACTORY = tree -> new MultiVisitor() { @Override public void accept(INodeView node, int depthOfNode) { } @Override public Double getResult() { return Double.NaN; } @Override public boolean trigger(INodeView node) { return false; } @Override public MultiVisitor newPartialCopy() { return null; } @Override public void combine(MultiVisitor other) { } }; /** * A collector that accumulates values into a sorted list. */ public static final Collector, List> SORTED_LIST_COLLECTOR = Collector .of(ArrayList::new, List::add, (left, right) -> { left.addAll(right); return left; }, list -> { list.sort(Double::compare); return list; }); /** * Return a converging accumulator that converges after seeing numberOfEntries * values. The returned value is the sum of all accepted values. * * @param numberOfEntries The number of entries that need to be accepted for * this accumulator to converge. * @return a new converging accumulator that converges after seeing * numberOfEntries values. */ public static ConvergingAccumulator convergeAfter(int numberOfEntries) { return new ConvergingAccumulator() { private int valuesAccepted = 0; private double total = 0.0; @Override public void accept(Double value) { valuesAccepted++; total += value; } @Override public boolean isConverged() { return valuesAccepted >= numberOfEntries; } @Override public int getValuesAccepted() { return valuesAccepted; } @Override public Double getAccumulatedValue() { return total; } }; } /** * Return a multi-visitor that does nothing. */ public static final MultiVisitorFactory DUMMY_GENERIC_MULTI_VISITOR_FACTORY = new MultiVisitorFactory<>( (tree, y) -> new MultiVisitor() { @Override public void accept(INodeView node, int depthOfNode) { } @Override public Double getResult() { return Double.NaN; } @Override public boolean trigger(INodeView node) { return false; } @Override public MultiVisitor newPartialCopy() { return null; } @Override public void combine(MultiVisitor other) { } }); } ================================================ FILE: Java/core/src/test/java/com/amazon/randomcutforest/anomalydetection/AnomalyAttributionVisitorTest.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.anomalydetection; import static com.amazon.randomcutforest.CommonUtils.defaultScalarNormalizerFunction; import static com.amazon.randomcutforest.CommonUtils.defaultScoreUnseenFunction; import static com.amazon.randomcutforest.TestUtils.EPSILON; import static org.junit.jupiter.api.Assertions.assertArrayEquals; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertTrue; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; import com.amazon.randomcutforest.CommonUtils; import com.amazon.randomcutforest.returntypes.DiVector; import com.amazon.randomcutforest.tree.BoundingBox; import com.amazon.randomcutforest.tree.INodeView; import com.amazon.randomcutforest.tree.NodeView; public class AnomalyAttributionVisitorTest { @Test public void testNew() { float[] point = new float[] { 1.1f, -2.2f, 3.3f }; int treeMass = 99; AnomalyAttributionVisitor visitor = new AnomalyAttributionVisitor(point, treeMass); assertFalse(visitor.pointInsideBox); for (int i = 0; i < point.length; i++) { assertFalse(visitor.coordInsideBox[i]); } assertFalse(visitor.ignoreLeaf); assertEquals(0, visitor.ignoreLeafMassThreshold); DiVector result = visitor.getResult(); double[] zero = new double[point.length]; assertArrayEquals(zero, result.high); assertArrayEquals(zero, result.low); } @Test public void testNewWithIgnoreOptions() { float[] point = new float[] { 1.1f, -2.2f, 3.3f }; int treeMass = 99; AnomalyAttributionVisitor visitor = new AnomalyAttributionVisitor(point, treeMass, 7); assertFalse(visitor.pointInsideBox); for (int i = 0; i < point.length; i++) { assertFalse(visitor.coordInsideBox[i]); } assertTrue(visitor.ignoreLeaf); assertEquals(7, visitor.ignoreLeafMassThreshold); DiVector result = visitor.getResult(); double[] zero = new double[point.length]; assertArrayEquals(zero, result.high); assertArrayEquals(zero, result.low); } @Test public void testAcceptLeafEquals() { float[] point = { 1.1f, -2.2f, 3.3f }; INodeView leafNode = mock(NodeView.class); when(leafNode.getLeafPoint()).thenReturn(point); when(leafNode.getBoundingBox()).thenReturn(new BoundingBox(point, point)); int leafDepth = 100; int leafMass = 10; when(leafNode.getMass()).thenReturn(leafMass); int treeMass = 21; AnomalyAttributionVisitor visitor = new AnomalyAttributionVisitor(point, treeMass, 0); visitor.acceptLeaf(leafNode, leafDepth); assertTrue(visitor.hitDuplicates); assertEquals(visitor.sumOfNewRange, 0); double expectedScoreSum = CommonUtils.defaultDampFunction(leafMass, treeMass) / (leafDepth + Math.log(leafMass + 1) / Math.log(2)); double expectedScore = expectedScoreSum / (2 * point.length); DiVector result = visitor.getResult(); for (int i = 0; i < point.length; i++) { assertEquals(defaultScalarNormalizerFunction(expectedScore, treeMass), result.low[i], EPSILON); assertEquals(defaultScalarNormalizerFunction(expectedScore, treeMass), result.high[i], EPSILON); } } @Test public void testAcceptLeafNotEquals() { float[] point = new float[] { 1.1f, -2.2f, 3.3f }; float[] anotherPoint = new float[] { -4.0f, 5.0f, 6.0f }; INodeView leafNode = mock(NodeView.class); when(leafNode.getLeafPoint()).thenReturn(anotherPoint); when(leafNode.getBoundingBox()).thenReturn(new BoundingBox(anotherPoint, anotherPoint)); int leafDepth = 100; int leafMass = 4; when(leafNode.getMass()).thenReturn(leafMass); int treeMass = 21; AnomalyAttributionVisitor visitor = new AnomalyAttributionVisitor(point, treeMass, 0); visitor.acceptLeaf(leafNode, leafDepth); double expectedScoreSum = defaultScoreUnseenFunction(leafDepth, leafMass); double sumOfNewRange = (1.1 - (-4.0)) + (5.0 - (-2.2)) + (6.0 - 3.3); DiVector result = visitor.getResult(); assertEquals(defaultScalarNormalizerFunction(expectedScoreSum * (1.1 - (-4.0)) / sumOfNewRange, treeMass), result.high[0], EPSILON); assertEquals(0.0, result.low[0]); assertEquals(0.0, result.high[1]); assertEquals(defaultScalarNormalizerFunction(expectedScoreSum * (5.0 - (-2.2)) / sumOfNewRange, treeMass), result.low[1], EPSILON); assertEquals(0.0, result.high[2]); assertEquals(defaultScalarNormalizerFunction(expectedScoreSum * (6.0 - 3.3) / sumOfNewRange, treeMass), result.low[2], EPSILON); visitor = new AnomalyAttributionVisitor(point, treeMass, 3); visitor.acceptLeaf(leafNode, leafDepth); result = visitor.getResult(); assertEquals(defaultScalarNormalizerFunction(expectedScoreSum * (1.1 - (-4.0)) / sumOfNewRange, treeMass), result.high[0], EPSILON); assertEquals(0.0, result.low[0]); assertEquals(0.0, result.high[1]); assertEquals(defaultScalarNormalizerFunction(expectedScoreSum * (5.0 - (-2.2)) / sumOfNewRange, treeMass), result.low[1], EPSILON); assertEquals(0.0, result.high[2]); assertEquals(defaultScalarNormalizerFunction(expectedScoreSum * (6.0 - 3.3) / sumOfNewRange, treeMass), result.low[2], EPSILON); visitor = new AnomalyAttributionVisitor(point, treeMass, 4); visitor.acceptLeaf(leafNode, leafDepth); double expectedScore = expectedScoreSum / (2 * point.length); result = visitor.getResult(); for (int i = 0; i < point.length; i++) { assertEquals(defaultScalarNormalizerFunction(expectedScore, treeMass), result.low[i], EPSILON); assertEquals(defaultScalarNormalizerFunction(expectedScore, treeMass), result.high[i], EPSILON); } } @Test public void testAccept() { float[] pointToScore = { 0.0f, 0.0f }; int treeMass = 50; AnomalyAttributionVisitor visitor = new AnomalyAttributionVisitor(pointToScore, treeMass, 0); INodeView leafNode = mock(NodeView.class); float[] point = new float[] { 1.0f, -2.0f }; when(leafNode.getLeafPoint()).thenReturn(point); when(leafNode.getBoundingBox()).thenReturn(new BoundingBox(point, point)); int leafMass = 3; when(leafNode.getMass()).thenReturn(leafMass); int depth = 4; visitor.acceptLeaf(leafNode, depth); DiVector result = visitor.getResult(); double expectedScoreSum = defaultScoreUnseenFunction(depth, leafNode.getMass()); double sumOfNewRange = 1.0 + 2.0; double[] expectedUnnormalizedLow = new double[] { expectedScoreSum * 1.0 / sumOfNewRange, 0.0 }; double[] expectedUnnormalizedHigh = new double[] { 0.0, expectedScoreSum * 2.0 / sumOfNewRange }; for (int i = 0; i < pointToScore.length; i++) { assertEquals(defaultScalarNormalizerFunction(expectedUnnormalizedLow[i], treeMass), result.low[i], EPSILON); assertEquals(defaultScalarNormalizerFunction(expectedUnnormalizedHigh[i], treeMass), result.high[i], EPSILON); } // parent does not contain pointToScore depth--; INodeView sibling = mock(NodeView.class); int siblingMass = 2; when(sibling.getMass()).thenReturn(siblingMass); INodeView parent = mock(NodeView.class); int parentMass = leafMass + siblingMass; when(parent.getMass()).thenReturn(parentMass); BoundingBox boundingBox = new BoundingBox(point, new float[] { 2.0f, -0.5f }); when(parent.getBoundingBox()).thenReturn(boundingBox); visitor.accept(parent, depth); result = visitor.getResult(); double expectedSumOfNewRange2 = 2.0 + 2.0; double expectedProbOfCut2 = (1.0 + 0.5) / expectedSumOfNewRange2; double[] expectedDifferenceInRangeVector2 = { 0.0, 1.0, 0.5, 0.0 }; double expectedScore2 = defaultScoreUnseenFunction(depth, parent.getMass()); double[] expectedUnnormalizedLow2 = new double[pointToScore.length]; double[] expectedUnnormalizedHigh2 = new double[pointToScore.length]; for (int i = 0; i < pointToScore.length; i++) { double prob = expectedDifferenceInRangeVector2[2 * i] / expectedSumOfNewRange2; expectedUnnormalizedHigh2[i] = prob * expectedScore2 + (1 - expectedProbOfCut2) * expectedUnnormalizedHigh[i]; prob = expectedDifferenceInRangeVector2[2 * i + 1] / expectedSumOfNewRange2; expectedUnnormalizedLow2[i] = prob * expectedScore2 + (1 - expectedProbOfCut2) * expectedUnnormalizedLow[i]; } for (int i = 0; i < pointToScore.length; i++) { assertEquals(defaultScalarNormalizerFunction(expectedUnnormalizedLow2[i], treeMass), result.low[i], EPSILON); assertEquals(defaultScalarNormalizerFunction(expectedUnnormalizedHigh2[i], treeMass), result.high[i], EPSILON); } // grandparent contains pointToScore assertFalse(visitor.pointInsideBox); depth--; INodeView grandParent = mock(NodeView.class); when(grandParent.getMass()).thenReturn(parentMass + 2); when(grandParent.getBoundingBox()).thenReturn(boundingBox .getMergedBox(new BoundingBox(new float[] { -1.0f, 1.0f }).getMergedBox(new float[] { -0.5f, -1.5f }))); visitor.accept(grandParent, depth); result = visitor.getResult(); for (int i = 0; i < pointToScore.length; i++) { assertEquals(defaultScalarNormalizerFunction(expectedUnnormalizedLow2[i], treeMass), result.low[i], EPSILON); assertEquals(defaultScalarNormalizerFunction(expectedUnnormalizedHigh2[i], treeMass), result.high[i], EPSILON); } } @ParameterizedTest @ValueSource(ints = { 3, 5 }) public void reNormalizeNotEqual(int mass) { float[] pointToScore = { 0.0f, 0.0f }; int treeMass = 50; AnomalyAttributionVisitor visitor = new AnomalyAttributionVisitor(pointToScore, treeMass, 4); INodeView leafNode = mock(NodeView.class); float[] point = new float[] { 1.0f, -2.0f }; when(leafNode.getLeafPoint()).thenReturn(point); when(leafNode.getBoundingBox()).thenReturn(new BoundingBox(point, point)); int leafMass = mass; when(leafNode.getMass()).thenReturn(leafMass); visitor.acceptLeaf(leafNode, 1); INodeView parent = mock(NodeView.class); int parentMass = leafMass + 2; when(parent.getMass()).thenReturn(parentMass); BoundingBox boundingBox = new BoundingBox(point, new float[] { 2.0f, 2.0f }); when(parent.getBoundingBox()).thenReturn(boundingBox); when(parent.getSiblingBoundingBox(any())).thenReturn(new BoundingBox(new float[] { 2.0f, 2.0f })); visitor.accept(parent, 0); DiVector result = visitor.directionalAttribution; assertEquals(result.getHighLowSum(), visitor.savedScore, 1e-6); } @ParameterizedTest @ValueSource(ints = { 3, 5 }) public void reNormalize(int mass) { float[] pointToScore = { 0.0f, 0.0f }; int treeMass = 50; AnomalyAttributionVisitor visitor = new AnomalyAttributionVisitor(pointToScore, treeMass, 4); INodeView leafNode = mock(NodeView.class); float[] point = pointToScore; when(leafNode.getLeafPoint()).thenReturn(point); when(leafNode.getBoundingBox()).thenReturn(new BoundingBox(point, point)); int leafMass = mass; when(leafNode.getMass()).thenReturn(leafMass); visitor.acceptLeaf(leafNode, 1); INodeView parent = mock(NodeView.class); int parentMass = leafMass + 2; when(parent.getMass()).thenReturn(parentMass); BoundingBox boundingBox = new BoundingBox(point, new float[] { 2.0f, 2.0f }); when(parent.getBoundingBox()).thenReturn(boundingBox); when(parent.getSiblingBoundingBox(any())).thenReturn(new BoundingBox(new float[] { 2.0f, 2.0f })); visitor.accept(parent, 0); DiVector result = visitor.directionalAttribution; assertEquals(result.getHighLowSum(), visitor.savedScore, 1e-6); } } ================================================ FILE: Java/core/src/test/java/com/amazon/randomcutforest/anomalydetection/AnomalyScoreVisitorTest.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.anomalydetection; import static com.amazon.randomcutforest.TestUtils.EPSILON; import static com.amazon.randomcutforest.tree.AbstractNodeStore.Null; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.closeTo; import static org.hamcrest.Matchers.is; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNotEquals; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import java.util.Arrays; import org.junit.jupiter.api.Test; import com.amazon.randomcutforest.CommonUtils; import com.amazon.randomcutforest.tree.BoundingBox; import com.amazon.randomcutforest.tree.IBoundingBoxView; import com.amazon.randomcutforest.tree.INodeView; import com.amazon.randomcutforest.tree.NodeView; public class AnomalyScoreVisitorTest { @Test public void testNew() { float[] point = new float[] { 1.0f, 2.0f }; int sampleSize = 9; AnomalyScoreVisitor visitor = new AnomalyScoreVisitor(point, sampleSize); assertFalse(visitor.pointInsideBox); for (int i = 0; i < point.length; i++) { assertFalse(visitor.coordInsideBox[i]); } assertFalse(visitor.ignoreLeafEquals); assertEquals(0, visitor.ignoreLeafMassThreshold); assertThat(visitor.getResult(), is(0.0)); } @Test public void testNewWithIgnoreOptions() { float[] point = new float[] { 1.0f, 2.0f }; int sampleSize = 9; AnomalyScoreVisitor visitor = new AnomalyScoreVisitor(point, sampleSize, 7); assertFalse(visitor.pointInsideBox); for (int i = 0; i < point.length; i++) { assertFalse(visitor.coordInsideBox[i]); } assertTrue(visitor.ignoreLeafEquals); assertEquals(7, visitor.ignoreLeafMassThreshold); assertThat(visitor.getResult(), is(0.0)); } @Test public void testAcceptLeafEquals() { float[] point = { 1.0f, 2.0f, 3.0f }; INodeView leafNode = mock(NodeView.class); when(leafNode.getLeafPoint()).thenReturn(point); when(leafNode.getBoundingBox()).thenReturn(new BoundingBox(point, point)); int leafDepth = 100; int leafMass = 10; when(leafNode.getMass()).thenReturn(leafMass); int subSampleSize = 21; AnomalyScoreVisitor visitor = new AnomalyScoreVisitor(point, subSampleSize); visitor.acceptLeaf(leafNode, leafDepth); double expectedScore = CommonUtils.defaultDampFunction(leafMass, subSampleSize) / (leafDepth + Math.log(leafMass + 1) / Math.log(2)); assertThat(visitor.getResult(), closeTo(CommonUtils.defaultScalarNormalizerFunction(expectedScore, subSampleSize), EPSILON)); assertTrue(visitor.pointInsideBox); visitor = new AnomalyScoreVisitor(point, subSampleSize); visitor.acceptLeaf(leafNode, 0); expectedScore = CommonUtils.defaultDampFunction(leafMass, subSampleSize) / (Math.log(leafMass + 1) / Math.log(2.0)); assertThat(visitor.getResult(), closeTo(CommonUtils.defaultScalarNormalizerFunction(expectedScore, subSampleSize), EPSILON)); assertTrue(visitor.pointInsideBox); AnomalyScoreVisitor anotherVisitor = new AnomalyScoreVisitor(point, subSampleSize, 7); anotherVisitor.acceptLeaf(leafNode, 0); assertEquals(anotherVisitor.score, visitor.score); AnomalyScoreVisitor yetAnotherVisitor = new AnomalyScoreVisitor(point, subSampleSize, 12); yetAnotherVisitor.acceptLeaf(leafNode, 0); assertNotEquals(yetAnotherVisitor.score, visitor.score); } @Test public void testAcceptLeafNotEquals() { float[] point = new float[] { 1.0f, 2.0f, 3.0f }; float[] anotherPoint = new float[] { 4.0f, 5.0f, 6.0f }; INodeView leafNode = mock(NodeView.class); when(leafNode.getLeafPoint()).thenReturn(anotherPoint); when(leafNode.getBoundingBox()).thenReturn(new BoundingBox(anotherPoint, anotherPoint)); int leafDepth = 100; AnomalyScoreVisitor visitor = new AnomalyScoreVisitor(point, 2); visitor.acceptLeaf(leafNode, leafDepth); double expectedScore = 1.0 / (leafDepth + 1); assertThat(visitor.getResult(), closeTo(CommonUtils.defaultScalarNormalizerFunction(expectedScore, 2), EPSILON)); assertFalse(visitor.pointInsideBox); int leafMass = 10; when(leafNode.getMass()).thenReturn(leafMass); AnomalyScoreVisitor anotherVisitor = new AnomalyScoreVisitor(point, 2, 7); anotherVisitor.acceptLeaf(leafNode, 100); assertEquals(anotherVisitor.score, visitor.score); AnomalyScoreVisitor yetAnotherVisitor = new AnomalyScoreVisitor(point, 2, 12); yetAnotherVisitor.acceptLeaf(leafNode, 100); assertEquals(yetAnotherVisitor.score, visitor.score); } @Test public void testAcceptEqualsLeafPoint() { float[] pointToScore = { 0.0f, 0.0f }; int sampleSize = 50; AnomalyScoreVisitor visitor = new AnomalyScoreVisitor(pointToScore, sampleSize); float[] point = Arrays.copyOf(pointToScore, pointToScore.length); INodeView node = mock(NodeView.class); when(node.getLeafPoint()).thenReturn(point); when(node.getBoundingBox()).thenReturn(new BoundingBox(point, point)); int depth = 2; visitor.acceptLeaf(node, depth); double expectedScore = CommonUtils.defaultDampFunction(node.getMass(), sampleSize) / (depth + Math.log(node.getMass() + 1) / Math.log(2)); assertThat(visitor.getResult(), closeTo(CommonUtils.defaultScalarNormalizerFunction(expectedScore, sampleSize), EPSILON)); depth--; IBoundingBoxView boundingBox = node.getBoundingBox().getMergedBox(new float[] { 1.0f, 1.0f }); node = new NodeView(null, null, Null); visitor.accept(node, depth); assertThat(visitor.getResult(), closeTo(CommonUtils.defaultScalarNormalizerFunction(expectedScore, sampleSize), EPSILON)); depth--; boundingBox = boundingBox.getMergedBox(new float[] { -1.0f, -1.0f }); node = new NodeView(null, null, Null); visitor.accept(node, depth); assertThat(visitor.getResult(), closeTo(CommonUtils.defaultScalarNormalizerFunction(expectedScore, sampleSize), EPSILON)); } @Test public void testAccept() { float[] pointToScore = new float[] { 0.0f, 0.0f }; int sampleSize = 50; AnomalyScoreVisitor visitor = new AnomalyScoreVisitor(pointToScore, sampleSize); NodeView node = mock(NodeView.class); float[] otherPoint = new float[] { 1.0f, 1.0f }; when(node.getLeafPoint()).thenReturn(otherPoint); when(node.getBoundingBox()).thenReturn(new BoundingBox(otherPoint, otherPoint)); int depth = 4; visitor.acceptLeaf(node, depth); double expectedScore = 1.0 / (depth + 1); assertThat(visitor.getResult(), closeTo(CommonUtils.defaultScalarNormalizerFunction(expectedScore, sampleSize), EPSILON)); depth--; IBoundingBoxView boundingBox = node.getBoundingBox().getMergedBox(new float[] { 2.0f, 0.0f }); when(node.getBoundingBox()).thenReturn(boundingBox); when(node.probailityOfSeparation(any())).thenReturn(1.0 / 3); visitor.accept(node, depth); double p = visitor.getProbabilityOfSeparation(boundingBox); expectedScore = p * (1.0 / (depth + 1)) + (1 - p) * expectedScore; assertThat(visitor.getResult(), closeTo(CommonUtils.defaultScalarNormalizerFunction(expectedScore, sampleSize), EPSILON)); depth--; boundingBox = boundingBox.getMergedBox(new float[] { -1.0f, 0.0f }); when(node.getBoundingBox()).thenReturn(boundingBox); when(node.probailityOfSeparation(any())).thenReturn(0.0); visitor.accept(node, depth); p = visitor.getProbabilityOfSeparation(boundingBox); expectedScore = p * (1.0 / (depth + 1)) + (1 - p) * expectedScore; assertThat(visitor.getResult(), closeTo(CommonUtils.defaultScalarNormalizerFunction(expectedScore, sampleSize), EPSILON)); depth--; boundingBox = boundingBox.getMergedBox(new float[] { -1.0f, -1.0f }); when(node.probailityOfSeparation(any())).thenReturn(0.0); visitor.accept(node, depth); p = visitor.getProbabilityOfSeparation(boundingBox); assertThat(visitor.getResult(), closeTo(CommonUtils.defaultScalarNormalizerFunction(expectedScore, sampleSize), EPSILON)); assertTrue(visitor.pointInsideBox); } @Test public void testGetProbabilityOfSeparation() { float[] minPoint = { 0.0f, 0.0f, 0.0f }; float[] maxPoint = { 1.0f, 2.0f, 3.0f }; IBoundingBoxView boundingBox = new BoundingBox(minPoint); boundingBox = boundingBox.getMergedBox(maxPoint); float[] point = { 0.5f, 0.5f, 0.5f }; int sampleSize = 2; AnomalyScoreVisitor visitor = new AnomalyScoreVisitor(point, sampleSize); double p = visitor.getProbabilityOfSeparation(boundingBox); assertThat(p, closeTo(0.0, EPSILON)); assertTrue(visitor.coordInsideBox[0]); assertTrue(visitor.coordInsideBox[1]); assertTrue(visitor.coordInsideBox[2]); visitor = new AnomalyScoreVisitor(point, sampleSize); visitor.coordInsideBox[1] = visitor.coordInsideBox[2] = true; p = visitor.getProbabilityOfSeparation(boundingBox); assertThat(p, closeTo(0.0, EPSILON)); assertTrue(visitor.coordInsideBox[0]); assertTrue(visitor.coordInsideBox[1]); assertTrue(visitor.coordInsideBox[2]); point = new float[] { 2.0f, 0.5f, 0.5f }; visitor = new AnomalyScoreVisitor(point, sampleSize); p = visitor.getProbabilityOfSeparation(boundingBox); assertThat(p, closeTo(1.0 / (2.0 + 2.0 + 3.0), EPSILON)); assertFalse(visitor.coordInsideBox[0]); assertTrue(visitor.coordInsideBox[1]); assertTrue(visitor.coordInsideBox[2]); visitor = new AnomalyScoreVisitor(point, sampleSize); visitor.coordInsideBox[1] = visitor.coordInsideBox[2] = true; p = visitor.getProbabilityOfSeparation(boundingBox); assertThat(p, closeTo(1.0 / (2.0 + 2.0 + 3.0), EPSILON)); assertFalse(visitor.coordInsideBox[0]); assertTrue(visitor.coordInsideBox[1]); assertTrue(visitor.coordInsideBox[2]); point = new float[] { 0.5f, -3.0f, 4.0f }; visitor = new AnomalyScoreVisitor(point, sampleSize); p = visitor.getProbabilityOfSeparation(boundingBox); assertThat(p, closeTo((3.0 + 1.0) / (1.0 + 5.0 + 4.0), EPSILON)); assertTrue(visitor.coordInsideBox[0]); assertFalse(visitor.coordInsideBox[1]); assertFalse(visitor.coordInsideBox[2]); visitor = new AnomalyScoreVisitor(point, sampleSize); visitor.coordInsideBox[0] = true; p = visitor.getProbabilityOfSeparation(boundingBox); assertThat(p, closeTo((3.0 + 1.0) / (1.0 + 5.0 + 4.0), EPSILON)); assertTrue(visitor.coordInsideBox[0]); assertFalse(visitor.coordInsideBox[1]); assertFalse(visitor.coordInsideBox[2]); } @Test public void test_getProbabilityOfSeparation_leafNode() { float[] point = new float[] { 1.0f, 2.0f, 3.0f }; float[] leafPoint = Arrays.copyOf(point, point.length); BoundingBox boundingBox = new BoundingBox(leafPoint); AnomalyScoreVisitor visitor = new AnomalyScoreVisitor(point, 2); assertThrows(IllegalStateException.class, () -> visitor.getProbabilityOfSeparation(boundingBox)); TransductiveScalarScoreVisitor esotericVisitor = new TransductiveScalarScoreVisitor(leafPoint, 2, CommonUtils::defaultScoreSeenFunction, CommonUtils::defaultScoreUnseenFunction, CommonUtils::defaultDampFunction, b -> new double[3]); assertThrows(IllegalStateException.class, () -> esotericVisitor.getProbabilityOfSeparation(boundingBox)); } } ================================================ FILE: Java/core/src/test/java/com/amazon/randomcutforest/anomalydetection/DynamicAttributionVisitorTest.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.anomalydetection; import static org.junit.jupiter.api.Assertions.assertEquals; import java.util.function.BiFunction; import org.junit.jupiter.api.Test; public class DynamicAttributionVisitorTest { @Test public void testScoringMethods() { BiFunction scoreSeen = (x, y) -> (x + y) / 2; BiFunction scoreUneen = (x, y) -> 0.75 * x + 0.25 * y; BiFunction damp = (x, y) -> Math.sqrt(x * y); DynamicAttributionVisitor visitor = new DynamicAttributionVisitor(new float[] { 1.1f, -2.2f }, 100, 2, scoreSeen, scoreUneen, damp); int x = 9; int y = 4; assertEquals((x + y) / 2.0, visitor.scoreSeen(x, y)); assertEquals(0.75 * x + 0.25 * y, visitor.scoreUnseen(x, y)); assertEquals(Math.sqrt(x * y), visitor.damp(x, y)); } } ================================================ FILE: Java/core/src/test/java/com/amazon/randomcutforest/anomalydetection/DynamicScoreVisitorTest.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.anomalydetection; import static org.junit.jupiter.api.Assertions.assertEquals; import java.util.function.BiFunction; import org.junit.jupiter.api.Test; public class DynamicScoreVisitorTest { @Test public void testScoringMethods() { BiFunction scoreSeen = (x, y) -> (x + y) / 2; BiFunction scoreUneen = (x, y) -> 0.75 * x + 0.25 * y; BiFunction damp = (x, y) -> Math.sqrt(x * y); DynamicScoreVisitor visitor = new DynamicScoreVisitor(new float[] { 1.1f, -2.2f }, 100, 2, scoreSeen, scoreUneen, damp); int x = 9; int y = 4; assertEquals((x + y) / 2.0, visitor.scoreSeen(x, y)); assertEquals(0.75 * x + 0.25 * y, visitor.scoreUnseen(x, y)); assertEquals(Math.sqrt(x * y), visitor.damp(x, y)); } } ================================================ FILE: Java/core/src/test/java/com/amazon/randomcutforest/executor/ForestTraversalExecutorTest.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.executor; import static com.amazon.randomcutforest.TestUtils.EPSILON; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; import static org.mockito.AdditionalMatchers.aryEq; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.atMost; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import java.util.Arrays; import java.util.List; import java.util.function.BinaryOperator; import java.util.stream.Stream; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtensionContext; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; import org.junit.jupiter.params.provider.ArgumentsProvider; import org.junit.jupiter.params.provider.ArgumentsSource; import com.amazon.randomcutforest.ComponentList; import com.amazon.randomcutforest.IComponentModel; import com.amazon.randomcutforest.IMultiVisitorFactory; import com.amazon.randomcutforest.IVisitorFactory; import com.amazon.randomcutforest.RandomCutForest; import com.amazon.randomcutforest.TestUtils; import com.amazon.randomcutforest.anomalydetection.AnomalyScoreVisitor; import com.amazon.randomcutforest.imputation.ImputeVisitor; import com.amazon.randomcutforest.returntypes.ConditionalTreeSample; import com.amazon.randomcutforest.returntypes.ConvergingAccumulator; import com.amazon.randomcutforest.sampler.CompactSampler; import com.amazon.randomcutforest.tree.ITree; import com.amazon.randomcutforest.tree.RandomCutTree; public class ForestTraversalExecutorTest { private static int numberOfTrees = 10; private static int threadPoolSize = 2; private static class TestExecutorProvider implements ArgumentsProvider { @Override public Stream provideArguments(ExtensionContext context) throws Exception { ComponentList sequentialExecutors = new ComponentList<>(); ComponentList parallelExecutors = new ComponentList<>(); for (int i = 0; i < numberOfTrees; i++) { CompactSampler sampler = mock(CompactSampler.class); RandomCutTree tree = mock(RandomCutTree.class); sequentialExecutors.add(spy(new SamplerPlusTree<>(sampler, tree))); } for (int i = 0; i < numberOfTrees; i++) { CompactSampler sampler = mock(CompactSampler.class); RandomCutTree tree = mock(RandomCutTree.class); parallelExecutors.add(spy(new SamplerPlusTree<>(sampler, tree))); } SequentialForestTraversalExecutor sequentialExecutor = new SequentialForestTraversalExecutor( sequentialExecutors); ParallelForestTraversalExecutor parallelExecutor = new ParallelForestTraversalExecutor(parallelExecutors, threadPoolSize); return Stream.of(sequentialExecutor, parallelExecutor).map(Arguments::of); } } @ParameterizedTest @ArgumentsSource(TestExecutorProvider.class) public void testTraverseForestBinaryAccumulator(AbstractForestTraversalExecutor executor) { float[] point = new float[] { 1.2f, -3.4f }; double expectedResult = 0.0; for (int i = 0; i < numberOfTrees; i++) { double treeResult = Math.random(); ITree tree = ((SamplerPlusTree) executor.components.get(i)).getTree(); when(tree.traverse(aryEq(point), any())).thenReturn(treeResult); expectedResult += treeResult; } expectedResult /= numberOfTrees; double result = executor.traverseForest(point, TestUtils.DUMMY_GENERIC_VISITOR_FACTORY, Double::sum, x -> x / 10.0); for (IComponentModel component : executor.components) { verify(component, times(1)).traverse(aryEq(point), any()); } assertEquals(expectedResult, result, EPSILON); } @ParameterizedTest @ArgumentsSource(TestExecutorProvider.class) public void testTraverseForestCollector(AbstractForestTraversalExecutor executor) { float[] point = new float[] { 1.2f, -3.4f }; double[] expectedResult = new double[numberOfTrees]; for (int i = 0; i < numberOfTrees; i++) { double treeResult = Math.random(); ITree tree = ((SamplerPlusTree) executor.components.get(i)).getTree(); when(tree.traverse(aryEq(point), any())).thenReturn(treeResult); expectedResult[i] = treeResult; } Arrays.sort(expectedResult); List result = executor.traverseForest(point, TestUtils.DUMMY_GENERIC_VISITOR_FACTORY, TestUtils.SORTED_LIST_COLLECTOR); for (IComponentModel component : executor.components) { verify(component, times(1)).traverse(aryEq(point), any()); } assertEquals(numberOfTrees, result.size()); for (int i = 0; i < numberOfTrees; i++) { assertEquals(expectedResult[i], result.get(i), EPSILON); } } @ParameterizedTest @ArgumentsSource(TestExecutorProvider.class) public void testTraverseForestConverging(AbstractForestTraversalExecutor executor) { float[] point = new float[] { 1.2f, -3.4f }; for (int i = 0; i < numberOfTrees; i++) { double treeResult = Math.random(); ITree tree = ((SamplerPlusTree) executor.components.get(i)).getTree(); when(tree.traverse(aryEq(point), any())).thenReturn(treeResult); } int convergenceThreshold = numberOfTrees / 2; ConvergingAccumulator accumulator = TestUtils.convergeAfter(convergenceThreshold); double result = executor.traverseForest(point, TestUtils.DUMMY_GENERIC_VISITOR_FACTORY, accumulator, x -> x / accumulator.getValuesAccepted()); for (IComponentModel component : executor.components) { verify(component, atMost(1)).traverse(aryEq(point), any()); } assertTrue(accumulator.getValuesAccepted() >= convergenceThreshold); assertTrue(accumulator.getValuesAccepted() < numberOfTrees); assertEquals(accumulator.getAccumulatedValue() / accumulator.getValuesAccepted(), result, EPSILON); } @ParameterizedTest @ArgumentsSource(TestExecutorProvider.class) public void testTraverseForestMultiBinaryAccumulator(AbstractForestTraversalExecutor executor) { float[] point = new float[] { 1.2f, -3.4f }; double expectedResult = 0.0; for (int i = 0; i < numberOfTrees; i++) { double treeResult = Math.random(); ITree tree = ((SamplerPlusTree) executor.components.get(i)).getTree(); when(tree.traverseMulti(aryEq(point), any())).thenReturn(treeResult); expectedResult += treeResult; } expectedResult /= numberOfTrees; double result = executor.traverseForestMulti(point, TestUtils.DUMMY_GENERIC_MULTI_VISITOR_FACTORY, Double::sum, x -> x / 10.0); for (IComponentModel component : executor.components) { verify(component, times(1)).traverseMulti(aryEq(point), any()); } assertEquals(expectedResult, result, EPSILON); } @ParameterizedTest @ArgumentsSource(TestExecutorProvider.class) public void testTraverseForestMultiCollector(AbstractForestTraversalExecutor executor) { float[] point = new float[] { 1.2f, -3.4f }; double[] expectedResult = new double[numberOfTrees]; for (int i = 0; i < numberOfTrees; i++) { double treeResult = Math.random(); ITree tree = ((SamplerPlusTree) executor.components.get(i)).getTree(); when(tree.traverseMulti(aryEq(point), any())).thenReturn(treeResult); expectedResult[i] = treeResult; } Arrays.sort(expectedResult); List result = executor.traverseForestMulti(point, TestUtils.DUMMY_GENERIC_MULTI_VISITOR_FACTORY, TestUtils.SORTED_LIST_COLLECTOR); for (IComponentModel component : executor.components) { verify(component, times(1)).traverseMulti(aryEq(point), any()); } assertEquals(numberOfTrees, result.size()); for (int i = 0; i < numberOfTrees; i++) { assertEquals(expectedResult[i], result.get(i), EPSILON); } } @Test public void testException() { ParallelForestTraversalExecutor executor = new ParallelForestTraversalExecutor(new ComponentList<>(0), 2); SequentialForestTraversalExecutor executor1 = new SequentialForestTraversalExecutor(new ComponentList<>(0)); IVisitorFactory visitorFactory = (tree, x) -> new AnomalyScoreVisitor(tree.projectToTree(x), tree.getMass()); assertThrows(IllegalStateException.class, () -> executor.traverseForest(new float[1], visitorFactory, Double::sum, x -> x)); assertThrows(IllegalStateException.class, () -> executor1.traverseForest(new float[1], visitorFactory, Double::sum, x -> x)); IMultiVisitorFactory multiVisitorFactory = (tree, y) -> new ImputeVisitor(y, tree.projectToTree(y), null, null, 1.0, tree.getRandomSeed()); BinaryOperator accumulator = (x, y) -> x; assertThrows(IllegalStateException.class, () -> executor.traverseForestMulti(new float[1], multiVisitorFactory, accumulator, x -> x)); assertThrows(IllegalStateException.class, () -> executor1.traverseForestMulti(new float[1], multiVisitorFactory, accumulator, x -> x)); } @Test public void threadpoolOne() { RandomCutForest f = RandomCutForest.builder().dimensions(1).numberOfTrees(5).parallelExecutionEnabled(true) .threadPoolSize(1).outputAfter(1).build(); f.update(new float[1]); f.getApproximateAnomalyScore(new float[1]); } @Test public void constructorTest() { ParallelForestTraversalExecutor executor = new ParallelForestTraversalExecutor(null, 1); executor.forkJoinPool = null; executor.submitAndJoin(() -> { return 0; }); assertEquals(executor.forkJoinPool.getPoolSize(), 1); } } ================================================ FILE: Java/core/src/test/java/com/amazon/randomcutforest/executor/ForestUpdateExecutorTest.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.executor; import static com.amazon.randomcutforest.util.ArrayUtils.cleanCopy; import static org.junit.jupiter.api.Assertions.assertArrayEquals; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotSame; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyLong; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import java.util.List; import java.util.stream.Stream; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.junit.jupiter.api.extension.ExtensionContext; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; import org.junit.jupiter.params.provider.ArgumentsProvider; import org.junit.jupiter.params.provider.ArgumentsSource; import org.mockito.ArgumentCaptor; import org.mockito.Captor; import org.mockito.junit.jupiter.MockitoExtension; import com.amazon.randomcutforest.ComponentList; import com.amazon.randomcutforest.IComponentModel; import com.amazon.randomcutforest.store.PointStore; @ExtendWith(MockitoExtension.class) public class ForestUpdateExecutorTest { private static final int numberOfTrees = 10; private static final int threadPoolSize = 2; @Captor private ArgumentCaptor>> updateResultCaptor; private static class TestExecutorProvider implements ArgumentsProvider { @Override public Stream provideArguments(ExtensionContext context) throws Exception { ComponentList sequentialComponents = new ComponentList<>(); ComponentList parallelComponents = new ComponentList<>(); for (int i = 0; i < numberOfTrees; i++) { sequentialComponents.add(mock(IComponentModel.class)); parallelComponents.add(mock(IComponentModel.class)); } PointStore pointStore = mock(PointStore.class); IStateCoordinator sequentialUpdateCoordinator = spy( new PointStoreCoordinator<>(pointStore)); AbstractForestUpdateExecutor sequentialExecutor = new SequentialForestUpdateExecutor<>( sequentialUpdateCoordinator, sequentialComponents); IStateCoordinator parallelUpdateCoordinator = spy( new PointStoreCoordinator<>(pointStore)); AbstractForestUpdateExecutor parallelExecutor = new ParallelForestUpdateExecutor<>( parallelUpdateCoordinator, parallelComponents, threadPoolSize); return Stream.of(sequentialExecutor, parallelExecutor).map(Arguments::of); } } @ParameterizedTest @ArgumentsSource(TestExecutorProvider.class) public void testUpdate(AbstractForestUpdateExecutor executor) { int addAndDelete = 4; int addOnly = 4; ComponentList components = executor.components; for (int i = 0; i < addAndDelete; i++) { IComponentModel model = components.get(i); UpdateResult result = new UpdateResult<>(i, 2 * i); when(model.update(any(), anyLong())).thenReturn(result); } for (int i = addAndDelete; i < addAndDelete + addOnly; i++) { IComponentModel model = components.get(i); UpdateResult result = UpdateResult.builder().addedPoint(i).build(); when(model.update(any(), anyLong())).thenReturn(result); } for (int i = addAndDelete + addOnly; i < numberOfTrees; i++) { IComponentModel model = components.get(i); when(model.update(any(), anyLong())).thenReturn(UpdateResult.noop()); } float[] point = new float[] { 1.0f }; executor.update(point); executor.components.forEach(model -> verify(model).update(any(), eq(0L))); IStateCoordinator coordinator = executor.updateCoordinator; verify(coordinator, times(1)).completeUpdate(updateResultCaptor.capture(), any()); List> updateResults = updateResultCaptor.getValue(); assertEquals(addAndDelete + addOnly, updateResults.size()); int actualAddAndAndDelete = 0; int actualAddOnly = 0; for (int i = 0; i < updateResults.size(); i++) { UpdateResult result = updateResults.get(i); if (result.getDeletedPoint().isPresent()) { actualAddAndAndDelete++; } else { actualAddOnly++; } } assertEquals(addAndDelete, actualAddAndAndDelete); assertEquals(addOnly, actualAddOnly); } @ParameterizedTest @ArgumentsSource(TestExecutorProvider.class) public void testCleanCopy(AbstractForestUpdateExecutor executor) { float[] point1 = new float[] { 1.0f, -22.2f, 30.9f }; float[] point1Copy = cleanCopy(point1); assertNotSame(point1, point1Copy); assertArrayEquals(point1, point1Copy); float[] point2 = new float[] { -0.0f, -22.2f, 30.9f }; float[] point2Copy = cleanCopy(point2); assertNotSame(point2, point2Copy); assertEquals(0.0, point2Copy[0]); point2Copy[0] = -0.0f; assertArrayEquals(point2, point2Copy); } @Test public void constructorTest() { ParallelForestUpdateExecutor executor = new ParallelForestUpdateExecutor(null, null, 1); executor.forkJoinPool = null; executor.submitAndJoin(() -> { return 0; }); assertEquals(executor.forkJoinPool.getPoolSize(), 1); } } ================================================ FILE: Java/core/src/test/java/com/amazon/randomcutforest/executor/PointStoreCoordinatorTest.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.executor; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.mockito.ArgumentMatchers.anyBoolean; import static org.mockito.ArgumentMatchers.anyLong; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import java.util.ArrayList; import java.util.Collections; import java.util.List; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.mockito.ArgumentCaptor; import com.amazon.randomcutforest.store.PointStore; public class PointStoreCoordinatorTest { private PointStore store; private PointStoreCoordinator coordinator; @BeforeEach public void setUp() { store = mock(PointStore.class); coordinator = new PointStoreCoordinator(store); } @Test public void testInitUpdate() { float[] point = { 1.2f, -3.4f }; int index = 123; ArgumentCaptor captor = ArgumentCaptor.forClass(float[].class); when(store.add(captor.capture(), anyLong(), anyBoolean())).thenReturn(index); int result = coordinator.initUpdate(point, 0, false); verify(store, times(1)).add(point, 0, false); assertEquals(result, index); } @Test public void testCompleteUpdate() { List> updateResults = new ArrayList<>(); UpdateResult result1 = UpdateResult.builder().addedPoint(1).deletedPoint(100).build(); updateResults.add(result1); UpdateResult result2 = UpdateResult.builder().addedPoint(2).deletedPoint(200).build(); updateResults.add(result2); UpdateResult result3 = UpdateResult.builder().addedPoint(3).build(); updateResults.add(result3); UpdateResult result4 = UpdateResult.noop(); updateResults.add(result4); // order shouldn't matter Collections.shuffle(updateResults); Integer updateInput = 1000; coordinator.completeUpdate(updateResults, updateInput); ArgumentCaptor captor1 = ArgumentCaptor.forClass(Integer.class); verify(store, times(3)).incrementRefCount(captor1.capture()); List arguments = captor1.getAllValues(); Collections.sort(arguments); assertEquals(1, arguments.get(0)); assertEquals(2, arguments.get(1)); assertEquals(3, arguments.get(2)); ArgumentCaptor captor2 = ArgumentCaptor.forClass(Integer.class); verify(store, times(3)).decrementRefCount(captor2.capture()); arguments = captor2.getAllValues(); Collections.sort(arguments); assertEquals(100, arguments.get(0)); assertEquals(200, arguments.get(1)); assertEquals(1000, arguments.get(2)); } } ================================================ FILE: Java/core/src/test/java/com/amazon/randomcutforest/executor/SamplerPlusTreeTest.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.executor; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertTrue; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyLong; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import java.util.Optional; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; import com.amazon.randomcutforest.sampler.ISampled; import com.amazon.randomcutforest.sampler.IStreamSampler; import com.amazon.randomcutforest.tree.ITree; @ExtendWith(MockitoExtension.class) public class SamplerPlusTreeTest { @Mock private ITree tree; @Mock private IStreamSampler sampler; private SamplerPlusTree samplerPlusTree; @BeforeEach public void setUp() { samplerPlusTree = new SamplerPlusTree<>(sampler, tree); } @Test public void testUpdateAddPoint() { int pointReference = 2; long sequenceIndex = 100L; int existingPointReference = 222; when(sampler.acceptPoint(sequenceIndex)).thenReturn(true); when(sampler.getEvictedPoint()).thenReturn(Optional.empty()); when(tree.addPoint(pointReference, sequenceIndex)).thenReturn(existingPointReference); UpdateResult result = samplerPlusTree.update(pointReference, sequenceIndex); assertTrue(result.getAddedPoint().isPresent()); assertEquals(existingPointReference, result.getAddedPoint().get()); assertFalse(result.getDeletedPoint().isPresent()); verify(tree, never()).deletePoint(any(), anyLong()); verify(sampler, times(1)).addPoint(existingPointReference); } @Test public void testUpdateAddAndDeletePoint() { int pointReference = 2; long sequenceIndex = 100L; int existingPointReference = 222; int evictedPoint = 333; long evictedSequenceIndex = 50L; ISampled evictedPointSampled = mock(ISampled.class); when(evictedPointSampled.getValue()).thenReturn(evictedPoint); when(evictedPointSampled.getSequenceIndex()).thenReturn(evictedSequenceIndex); when(sampler.acceptPoint(sequenceIndex)).thenReturn(true); when(sampler.getEvictedPoint()).thenReturn(Optional.of(evictedPointSampled)); when(tree.addPoint(pointReference, sequenceIndex)).thenReturn(existingPointReference); UpdateResult result = samplerPlusTree.update(pointReference, sequenceIndex); assertTrue(result.getAddedPoint().isPresent()); assertEquals(existingPointReference, result.getAddedPoint().get()); assertTrue(result.getDeletedPoint().isPresent()); assertEquals(evictedPoint, result.getDeletedPoint().get()); verify(tree, times(1)).deletePoint(evictedPoint, evictedSequenceIndex); verify(sampler, times(1)).addPoint(existingPointReference); } @Test public void testRejectPoint() { when(sampler.acceptPoint(anyLong())).thenReturn(false); UpdateResult result = samplerPlusTree.update(2, 100L); assertFalse(result.isStateChange()); verify(tree, never()).addPoint(any(), anyLong()); verify(tree, never()).deletePoint(any(), anyLong()); verify(sampler, never()).addPoint(any()); } } ================================================ FILE: Java/core/src/test/java/com/amazon/randomcutforest/executor/UpdateResultTest.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.executor; import static org.junit.jupiter.api.Assertions.assertFalse; import org.junit.jupiter.api.Test; public class UpdateResultTest { @Test public void testNoop() { UpdateResult result = UpdateResult.noop(); assertFalse(result.getAddedPoint().isPresent()); assertFalse(result.getDeletedPoint().isPresent()); assertFalse(result.isStateChange()); } } ================================================ FILE: Java/core/src/test/java/com/amazon/randomcutforest/imputation/ConditionalSampleSummarizerTest.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.imputation; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertNull; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; import java.util.ArrayList; import java.util.Collections; import java.util.Random; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import com.amazon.randomcutforest.returntypes.ConditionalTreeSample; import com.amazon.randomcutforest.returntypes.SampleSummary; import com.amazon.randomcutforest.summarization.Summarizer; public class ConditionalSampleSummarizerTest { private float[] queryPoint; private int[] missingIndexes; ConditionalSampleSummarizer summarizer; ConditionalSampleSummarizer projectedSummarizer; @BeforeEach public void setUp() { queryPoint = new float[] { 50, 70, 90, 100 }; missingIndexes = new int[] { 2, 3 }; summarizer = new ConditionalSampleSummarizer(missingIndexes, queryPoint, 0.2, false, 1, 0, 1); projectedSummarizer = new ConditionalSampleSummarizer(missingIndexes, queryPoint, 0.2, true, 5, 0.3, 1); } @Test public void testSummarize() { assertThrows(IllegalArgumentException.class, () -> summarizer.summarize(Collections.emptyList())); Random random = new Random(42); ArrayList list = new ArrayList<>(); for (int i = 0; i < 999; i++) { float[] point = new float[] { 50, 70, 90, 100 + 2 * random.nextFloat() }; list.add(new ConditionalTreeSample(i, null, Summarizer.L1distance(point, queryPoint), point)); } list.add(new ConditionalTreeSample(999, null, 100, new float[] { 50, 70, 90, 200 })); SampleSummary summary = summarizer.summarize(list, false); assertNull(summary.summaryPoints); SampleSummary summaryTwo = summarizer.summarize(list, true); assertNotNull(summaryTwo.summaryPoints); for (float[] element : summaryTwo.summaryPoints) { assertEquals(element.length, 4); assertEquals(element[0], 50); assertEquals(element[1], 70); assertEquals(element[2], 90); assertTrue(100 < element[3] && element[3] < 102); } assertEquals(4, summaryTwo.mean.length); assertEquals(0, summaryTwo.deviation[0]); SampleSummary summaryThree = projectedSummarizer.summarize(list); assertNotNull(summaryThree.summaryPoints); for (float[] element : summaryThree.summaryPoints) { assertEquals(element.length, missingIndexes.length); } } @Test public void testZero() { ArrayList list = new ArrayList<>(); for (int i = 0; i < 1000; i++) { list.add(new ConditionalTreeSample(i, null, 0, queryPoint)); } assert (summarizer.summarize(list, true).summaryPoints.length == 1); } } ================================================ FILE: Java/core/src/test/java/com/amazon/randomcutforest/imputation/ImputeVisitorTest.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.imputation; import static com.amazon.randomcutforest.CommonUtils.defaultScoreSeenFunction; import static com.amazon.randomcutforest.CommonUtils.defaultScoreUnseenFunction; import static com.amazon.randomcutforest.TestUtils.EPSILON; import static org.junit.jupiter.api.Assertions.assertArrayEquals; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNotEquals; import static org.junit.jupiter.api.Assertions.assertNotSame; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import com.amazon.randomcutforest.CommonUtils; import com.amazon.randomcutforest.tree.BoundingBox; import com.amazon.randomcutforest.tree.IBoundingBoxView; import com.amazon.randomcutforest.tree.INodeView; import com.amazon.randomcutforest.tree.NodeView; public class ImputeVisitorTest { private float[] queryPoint; private int numberOfMissingValues; private int[] missingIndexes; private ImputeVisitor visitor; private ImputeVisitor anotherVisitor; @BeforeEach public void setUp() { // create a point where the 2nd value is missing // The second value of queryPoint and the 2nd and 3rd values of missingIndexes // should be ignored in all tests queryPoint = new float[] { -1.0f, 1000.0f, 3.0f }; numberOfMissingValues = 1; missingIndexes = new int[] { 1, 99, -888 }; visitor = new ImputeVisitor(queryPoint, numberOfMissingValues, missingIndexes); anotherVisitor = new ImputeVisitor(queryPoint, queryPoint, null, null, 0.8, 42); } @Test public void testNew() { assertArrayEquals(queryPoint, visitor.getResult().leafPoint); assertNotSame(queryPoint, visitor.getResult()); assertEquals(ImputeVisitor.DEFAULT_INIT_VALUE, visitor.getAnomalyRank()); assertEquals(ImputeVisitor.DEFAULT_INIT_VALUE, visitor.adjustedRank()); assertEquals(ImputeVisitor.DEFAULT_INIT_VALUE, anotherVisitor.getAnomalyRank()); assertNotEquals(ImputeVisitor.DEFAULT_INIT_VALUE, anotherVisitor.adjustedRank()); assertEquals(visitor.getDistance(), Double.MAX_VALUE); assertFalse(visitor.isConverged()); assertThrows(IllegalArgumentException.class, () -> new ImputeVisitor(queryPoint, queryPoint, null, null, -1.0, 42)); assertThrows(IllegalArgumentException.class, () -> new ImputeVisitor(queryPoint, queryPoint, null, null, 2.0, 42)); assertThrows(IllegalArgumentException.class, () -> new ImputeVisitor(queryPoint, queryPoint, null, new int[] { -1 }, 1.0, 42)); assertThrows(IllegalArgumentException.class, () -> new ImputeVisitor(queryPoint, queryPoint, null, new int[] { 4 }, 1.0, 42)); } @Test public void testCopyConstructor() { ImputeVisitor copy = new ImputeVisitor(visitor); assertArrayEquals(queryPoint, copy.getResult().leafPoint); assertNotSame(copy.getResult(), visitor.getResult()); assertEquals(ImputeVisitor.DEFAULT_INIT_VALUE, visitor.getAnomalyRank()); } @Test public void testAcceptLeafEquals() { float[] point = { queryPoint[0], 2.0f, queryPoint[2] }; INodeView leafNode = mock(NodeView.class); when(leafNode.getLeafPoint()).thenReturn(point); when(leafNode.getLiftedLeafPoint()).thenReturn(point); when(leafNode.getBoundingBox()).thenReturn(new BoundingBox(point, point)); int leafDepth = 100; int leafMass = 10; when(leafNode.getMass()).thenReturn(leafMass); visitor.acceptLeaf(leafNode, leafDepth); anotherVisitor.acceptLeaf(leafNode, leafDepth); float[] expected = new float[] { -1.0f, 2.0f, 3.0f }; assertArrayEquals(expected, visitor.getResult().leafPoint); assertEquals(visitor.getDistance(), 0, 1e-6); assertEquals(defaultScoreSeenFunction(leafDepth, leafMass), visitor.getAnomalyRank()); } @Test public void testAcceptLeafEqualsZeroDepth() { float[] point = { queryPoint[0], 2.0f, queryPoint[2] }; INodeView leafNode = mock(NodeView.class); when(leafNode.getLeafPoint()).thenReturn(point); when(leafNode.getLiftedLeafPoint()).thenReturn(point); when(leafNode.getBoundingBox()).thenReturn(new BoundingBox(point, point)); int leafDepth = 0; int leafMass = 10; when(leafNode.getMass()).thenReturn(leafMass); visitor.acceptLeaf(leafNode, leafDepth); float[] expected = new float[] { -1.0f, 2.0f, 3.0f }; assertArrayEquals(expected, visitor.getResult().leafPoint); assertEquals(0.0, visitor.getAnomalyRank()); } @Test public void testAcceptLeafNotEquals() { float[] point = { queryPoint[0], 2.0f, -111.11f }; INodeView leafNode = mock(NodeView.class); when(leafNode.getLeafPoint()).thenReturn(point); when(leafNode.getLiftedLeafPoint()).thenReturn(point); when(leafNode.getBoundingBox()).thenReturn(new BoundingBox(point, point)); int leafDepth = 100; int leafMass = 10; when(leafNode.getMass()).thenReturn(leafMass); visitor.acceptLeaf(leafNode, leafDepth); float[] expected = new float[] { -1.0f, 2.0f, 3.0f }; assertArrayEquals(expected, visitor.getResult().leafPoint); assertEquals(defaultScoreUnseenFunction(leafDepth, leafMass), visitor.getAnomalyRank()); } @Test public void testAccept() { float[] point = { queryPoint[0], 2.0f, -111.11f }; INodeView node = mock(NodeView.class); when(node.getLeafPoint()).thenReturn(point); when(node.getLiftedLeafPoint()).thenReturn(point); when(node.getBoundingBox()).thenReturn(new BoundingBox(point, point)); int depth = 100; int leafMass = 10; when(node.getMass()).thenReturn(leafMass); visitor.acceptLeaf(node, depth); float[] expected = new float[] { -1.0f, 2.0f, 3.0f }; assertArrayEquals(expected, visitor.getResult().leafPoint); assertEquals(defaultScoreUnseenFunction(depth, leafMass), visitor.getAnomalyRank()); depth--; IBoundingBoxView boundingBox = node.getBoundingBox().getMergedBox(new float[] { 99.0f, 4.0f, -19.0f }); when(node.getBoundingBox()).thenReturn(boundingBox); when(node.probailityOfSeparation(any())) .thenReturn(CommonUtils.getProbabilityOfSeparation(boundingBox, expected)); when(node.getMass()).thenReturn(leafMass + 2); double oldRank = visitor.getAnomalyRank(); visitor.accept(node, depth); assertArrayEquals(expected, visitor.getResult().leafPoint); double p = CommonUtils.getProbabilityOfSeparation(boundingBox, expected); double expectedRank = p * defaultScoreUnseenFunction(depth, node.getMass()) + (1 - p) * oldRank; assertEquals(expectedRank, visitor.getAnomalyRank(), EPSILON); } @Test public void testNewCopy() { ImputeVisitor copy = (ImputeVisitor) visitor.newPartialCopy(); assertArrayEquals(queryPoint, copy.getResult().leafPoint); assertNotSame(copy.getResult(), visitor.getResult()); assertEquals(ImputeVisitor.DEFAULT_INIT_VALUE, visitor.getAnomalyRank()); } @Test public void testMerge() { float[] otherPoint = new float[] { 99, 100, 101 }; ImputeVisitor other = new ImputeVisitor(otherPoint, 0, new int[0]); // set other.rank to a small value NodeView node = mock(NodeView.class); when(node.getLeafPoint()).thenReturn(new float[] { 0, 0, 0 }); when(node.getLiftedLeafPoint()).thenReturn(new float[] { 0, 0, 0 }); when(node.getBoundingBox()).thenReturn(new BoundingBox(new float[] { 0, 0, 0 })); other.acceptLeaf(node, 99); assertTrue(other.getAnomalyRank() < visitor.getAnomalyRank()); other.combine(visitor); assertArrayEquals(otherPoint, other.getResult().leafPoint); visitor.combine(other); assertArrayEquals(otherPoint, visitor.getResult().leafPoint); } } ================================================ FILE: Java/core/src/test/java/com/amazon/randomcutforest/inspect/NearNeighborVisitorTest.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.inspect; import static com.amazon.randomcutforest.TestUtils.EPSILON; import static org.junit.jupiter.api.Assertions.assertArrayEquals; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNotSame; import static org.junit.jupiter.api.Assertions.assertTrue; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Optional; import java.util.stream.Collector; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import com.amazon.randomcutforest.returntypes.Neighbor; import com.amazon.randomcutforest.tree.INodeView; import com.amazon.randomcutforest.tree.NodeView; public class NearNeighborVisitorTest { private float[] queryPoint; private double distanceThreshold; private NearNeighborVisitor visitor; @BeforeEach public void setUp() { queryPoint = new float[] { 7.7f, 8.8f, -6.6f }; distanceThreshold = 10.0; visitor = new NearNeighborVisitor(queryPoint, distanceThreshold); } @Test public void acceptLeafNear() { float[] leafPoint = new float[] { 8.8f, 9.9f, -5.5f }; INodeView leafNode = mock(NodeView.class); when(leafNode.getLeafPoint()).thenReturn(Arrays.copyOf(leafPoint, leafPoint.length)); when(leafNode.getLiftedLeafPoint()).thenReturn(Arrays.copyOf(leafPoint, leafPoint.length)); HashMap sequenceIndexes = new HashMap<>(); sequenceIndexes.put(1234L, 1); sequenceIndexes.put(5678L, 1); when(leafNode.getSequenceIndexes()).thenReturn(sequenceIndexes); int depth = 12; visitor.acceptLeaf(leafNode, depth); Optional optional = visitor.getResult(); assertTrue(optional.isPresent()); Neighbor neighbor = optional.get(); assertNotSame(leafPoint, neighbor.point); assertArrayEquals(leafPoint, neighbor.point); assertEquals(Math.sqrt(3 * 1.1 * 1.1), neighbor.distance, EPSILON); assertNotSame(leafNode.getSequenceIndexes(), neighbor.sequenceIndexes); } @Test public void acceptLeafNearTimestampsDisabled() { float[] leafPoint = new float[] { 8.8f, 9.9f, -5.5f }; INodeView leafNode = mock(NodeView.class); when(leafNode.getLiftedLeafPoint()).thenReturn(Arrays.copyOf(leafPoint, leafPoint.length)); when(leafNode.getLeafPoint()).thenReturn(Arrays.copyOf(leafPoint, leafPoint.length)); assertEquals(0, leafNode.getSequenceIndexes().size()); int depth = 12; visitor.acceptLeaf(leafNode, depth); Optional optional = visitor.getResult(); assertTrue(optional.isPresent()); NearNeighborVisitor nearNeighborVisitor = new NearNeighborVisitor(queryPoint); nearNeighborVisitor.acceptLeaf(leafNode, depth); Map map1 = new HashMap<>(); Map map2 = new HashMap<>(); // an equality test Collector, Map, List> collector = Neighbor.collector(); map1.put(Arrays.hashCode(optional.get().point), optional.get()); map2.put(Arrays.hashCode(nearNeighborVisitor.getResult().get().point), optional.get()); collector.combiner().apply(map1, map2); assertEquals(map1.size(), 1); Neighbor neighbor = optional.get(); assertNotSame(leafPoint, neighbor.point); assertArrayEquals(leafPoint, neighbor.point); assertEquals(Math.sqrt(3 * 1.1 * 1.1), neighbor.distance, EPSILON); assertTrue(neighbor.sequenceIndexes.isEmpty()); } @Test public void acceptLeafNotNear() { float[] leafPoint = new float[] { 108.8f, 209.9f, -305.5f }; INodeView leafNode = mock(NodeView.class); HashMap sequenceIndexes = new HashMap<>(); sequenceIndexes.put(1234L, 1); sequenceIndexes.put(5678L, 1); when(leafNode.getLeafPoint()).thenReturn(leafPoint); when(leafNode.getLiftedLeafPoint()).thenReturn(leafPoint); when(leafNode.getSequenceIndexes()).thenReturn(sequenceIndexes); int depth = 12; visitor.acceptLeaf(leafNode, depth); Optional optional = visitor.getResult(); assertFalse(optional.isPresent()); } } ================================================ FILE: Java/core/src/test/java/com/amazon/randomcutforest/interpolation/SimpleInterpolationVisitorTest.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.interpolation; import static org.junit.jupiter.api.Assertions.assertArrayEquals; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import java.util.Arrays; import org.junit.jupiter.api.Test; import com.amazon.randomcutforest.returntypes.InterpolationMeasure; import com.amazon.randomcutforest.tree.BoundingBox; import com.amazon.randomcutforest.tree.INodeView; import com.amazon.randomcutforest.tree.NodeView; public class SimpleInterpolationVisitorTest { private static final int SEED = 1002; @Test public void testNew() { float[] point = { 1.0f, 2.0f }; int sampleSize = 9; SimpleInterpolationVisitor visitor = new SimpleInterpolationVisitor(point, sampleSize, 1, false); assertFalse(visitor.pointInsideBox); assertEquals(2, visitor.coordInsideBox.length); for (int i = 0; i < point.length; i++) { assertFalse(visitor.coordInsideBox[i]); } InterpolationMeasure output = visitor.getResult(); double[] zero = new double[point.length]; assertArrayEquals(zero, output.measure.high); assertArrayEquals(zero, output.distances.high); assertArrayEquals(zero, output.probMass.high); assertArrayEquals(zero, output.measure.low); assertArrayEquals(zero, output.distances.low); assertArrayEquals(zero, output.probMass.low); } @Test public void testAcceptLeafEquals() { float[] point = { 1.0f, 2.0f, 3.0f }; INodeView leafNode = mock(NodeView.class); when(leafNode.getLeafPoint()).thenReturn(point); when(leafNode.getBoundingBox()).thenReturn(new BoundingBox(point, point)); int leafDepth = 100; int leafMass = 10; when(leafNode.getMass()).thenReturn(leafMass); int sampleSize = 21; SimpleInterpolationVisitor visitor = new SimpleInterpolationVisitor(point, sampleSize, 1, false); visitor.acceptLeaf(leafNode, leafDepth); InterpolationMeasure result = visitor.getResult(); double[] expected = new double[point.length]; Arrays.fill(expected, 0.5 * (1 + leafMass) / point.length); assertArrayEquals(expected, result.measure.high); assertArrayEquals(expected, result.measure.low); Arrays.fill(expected, 0.5 / point.length); assertArrayEquals(expected, result.probMass.high); assertArrayEquals(expected, result.probMass.low); Arrays.fill(expected, 0.0); assertArrayEquals(expected, result.distances.high); assertArrayEquals(expected, result.distances.low); } @Test public void testAcceptLeafNotEquals() { float[] point = { 1.0f, 9.0f, 4.0f }; float[] anotherPoint = { 4.0f, 5.0f, 6.0f }; INodeView leafNode = mock(NodeView.class); when(leafNode.getLeafPoint()).thenReturn(anotherPoint); when(leafNode.getBoundingBox()).thenReturn(new BoundingBox(anotherPoint, anotherPoint)); when(leafNode.getMass()).thenReturn(4); int leafDepth = 100; int sampleSize = 99; SimpleInterpolationVisitor visitor = new SimpleInterpolationVisitor(point, sampleSize, 1, false); visitor.acceptLeaf(leafNode, leafDepth); InterpolationMeasure result = visitor.getResult(); double expectedSumOfNewRange = 3.0 + 4.0 + 2.0; double[] expectedDifferenceInRangeVector = { 0.0, 3.0, 4.0, 0.0, 0.0, 2.0 }; double[] expectedProbVector = Arrays.stream(expectedDifferenceInRangeVector).map(x -> x / expectedSumOfNewRange) .toArray(); double[] expectedmeasure = Arrays.stream(expectedProbVector).toArray(); double[] expectedDistances = new double[2 * point.length]; for (int i = 0; i < 2 * point.length; i++) { expectedDistances[i] = expectedProbVector[i] * expectedDifferenceInRangeVector[i]; } for (int i = 0; i < 2 * point.length; i++) { expectedmeasure[i] = expectedmeasure[i] * 5; } for (int i = 0; i < point.length; i++) { assertEquals(expectedProbVector[2 * i], result.probMass.high[i]); assertEquals(expectedProbVector[2 * i + 1], result.probMass.low[i]); assertEquals(expectedmeasure[2 * i], result.measure.high[i]); assertEquals(expectedmeasure[2 * i + 1], result.measure.low[i]); assertEquals(expectedDistances[2 * i], result.distances.high[i]); assertEquals(expectedDistances[2 * i + 1], result.distances.low[i]); } } @Test public void testAcceptEqualsLeafPoint() { float[] pointToScore = { 0.0f, 0.0f }; int sampleSize = 50; SimpleInterpolationVisitor visitor = new SimpleInterpolationVisitor(pointToScore, sampleSize, 1, false); float[] point = Arrays.copyOf(pointToScore, pointToScore.length); INodeView node = mock(NodeView.class); when(node.getLeafPoint()).thenReturn(point); when(node.getBoundingBox()).thenReturn(new BoundingBox(point, point)); when(node.getMass()).thenReturn(1); int depth = 2; visitor.acceptLeaf(node, depth); InterpolationMeasure result = visitor.getResult(); double[] expected = new double[point.length]; Arrays.fill(expected, 0.5 * (1 + node.getMass()) / point.length); assertArrayEquals(expected, result.measure.high); assertArrayEquals(expected, result.measure.low); Arrays.fill(expected, 0.5 / point.length); assertArrayEquals(expected, result.probMass.high); assertArrayEquals(expected, result.probMass.low); Arrays.fill(expected, 0.0); assertArrayEquals(expected, result.distances.high); assertArrayEquals(expected, result.distances.low); depth--; float[] siblingPoint = { 1.0f, -2.0f }; INodeView sibling = mock(NodeView.class); int siblingMass = 2; when(sibling.getMass()).thenReturn(siblingMass); INodeView parent = mock(NodeView.class); when(parent.getMass()).thenReturn(1 + siblingMass); BoundingBox boundingBox = new BoundingBox(point, siblingPoint); when(parent.getBoundingBox()).thenReturn(boundingBox); when(parent.getSiblingBoundingBox(any())).thenReturn(new BoundingBox(siblingPoint)); visitor.accept(parent, depth); result = visitor.getResult(); // compute using shadow box (sibling leaf node at {1.0, -2.0} and parent // bounding box double[] directionalDistance = { 0.0, 1.0, 2.0, 0.0 }; double[] differenceInRange = { 0.0, 1.0, 2.0, 0.0 }; double sumOfNewRange = 1.0 + 2.0; double[] probVector = Arrays.stream(differenceInRange).map(x -> x / sumOfNewRange).toArray(); expected = new double[2 * pointToScore.length]; for (int i = 0; i < expected.length; i++) { expected[i] = probVector[i] * (1 + node.getMass() + parent.getMass()); } for (int i = 0; i < pointToScore.length; i++) { assertEquals(expected[2 * i], result.measure.high[i]); assertEquals(expected[2 * i + 1], result.measure.low[i]); } for (int i = 0; i < expected.length; i++) { expected[i] = probVector[i]; } for (int i = 0; i < pointToScore.length; i++) { assertEquals(expected[2 * i], result.probMass.high[i]); assertEquals(expected[2 * i + 1], result.probMass.low[i]); } for (int i = 0; i < expected.length; i++) { expected[i] = probVector[i] * directionalDistance[i]; } for (int i = 0; i < pointToScore.length; i++) { assertEquals(expected[2 * i], result.distances.high[i]); assertEquals(expected[2 * i + 1], result.distances.low[i]); } // reset to probmass for (int i = 0; i < expected.length; i++) { expected[i] = probVector[i]; } // testing shawbox setup for grandparent INodeView uncle = mock(NodeView.class); int uncleMass = 2; when(sibling.getMass()).thenReturn(uncleMass); INodeView grandParent = mock(NodeView.class); when(grandParent.getMass()).thenReturn(1 + siblingMass + uncleMass); BoundingBox grandBox = boundingBox.getMergedBox(new float[] { 2.0f, 2.0f }); when(grandParent.getBoundingBox()).thenReturn(grandBox); when(grandParent.getSiblingBoundingBox(any())).thenReturn(new BoundingBox(new float[] { 2.0f, 2.0f })); visitor.accept(grandParent, depth - 1); result = visitor.getResult(); directionalDistance = new double[] { 0.0, 2.0, 0.0, 0.0 }; differenceInRange = new double[] { 0.0, 1.0, 0.0, 0.0 }; double newSumOfNewRange = 1.0 + 2.0 + 1.0 + 2.0; probVector = Arrays.stream(differenceInRange).map(x -> x / newSumOfNewRange).toArray(); double prob = Arrays.stream(probVector).sum(); for (int i = 0; i < expected.length; i++) { expected[i] = probVector[i] + (1 - prob) * expected[i]; } for (int i = 0; i < pointToScore.length; i++) { System.out.println(i); assertEquals(expected[2 * i], result.probMass.high[i]); assertEquals(expected[2 * i + 1], result.probMass.low[i]); } } @Test public void testAccept() { float[] pointToScore = { 0.0f, 0.0f }; int sampleSize = 50; SimpleInterpolationVisitor visitor = new SimpleInterpolationVisitor(pointToScore, sampleSize, 1, false); INodeView leafNode = mock(NodeView.class); float[] point = new float[] { 1.0f, -2.0f }; when(leafNode.getLeafPoint()).thenReturn(point); when(leafNode.getBoundingBox()).thenReturn(new BoundingBox(point, point)); int leafMass = 3; when(leafNode.getMass()).thenReturn(leafMass); int depth = 4; visitor.acceptLeaf(leafNode, depth); InterpolationMeasure result = visitor.getResult(); double expectedSumOfNewRange = 1.0 + 2.0; double[] expectedDifferenceInRangeVector = { 0.0, 1.0, 2.0, 0.0 }; double[] expectedProbVector = Arrays.stream(expectedDifferenceInRangeVector).map(x -> x / expectedSumOfNewRange) .toArray(); double[] expectedNumPts = Arrays.stream(expectedProbVector).toArray(); double[] expectedDistances = new double[2 * pointToScore.length]; for (int i = 0; i < 2 * pointToScore.length; i++) { expectedDistances[i] = expectedProbVector[i] * expectedDifferenceInRangeVector[i]; } for (int i = 0; i < 2 * pointToScore.length; i++) { expectedNumPts[i] = expectedNumPts[i] * 4; } for (int i = 0; i < pointToScore.length; i++) { assertEquals(expectedProbVector[2 * i], result.probMass.high[i]); assertEquals(expectedProbVector[2 * i + 1], result.probMass.low[i]); assertEquals(expectedNumPts[2 * i], result.measure.high[i]); assertEquals(expectedNumPts[2 * i + 1], result.measure.low[i]); assertEquals(expectedDistances[2 * i], result.distances.high[i]); assertEquals(expectedDistances[2 * i + 1], result.distances.low[i]); } // parent does not contain pointToScore depth--; INodeView sibling = mock(NodeView.class); int siblingMass = 2; when(sibling.getMass()).thenReturn(siblingMass); INodeView parent = mock(NodeView.class); int parentMass = leafMass + siblingMass; when(parent.getMass()).thenReturn(parentMass); when(parent.getBoundingBox()).thenReturn(new BoundingBox(point, new float[] { 2.0f, -0.5f })); visitor.accept(parent, depth); result = visitor.getResult(); double expectedSumOfNewRange2 = 2.0 + 2.0; double expectedProbOfCut2 = (1.0 + 0.5) / expectedSumOfNewRange2; double[] expectedDifferenceInRangeVector2 = { 0.0, 1.0, 0.5, 0.0 }; double[] expectedDirectionalDistanceVector2 = { 0.0, 2.0, 2.0, 0.0 }; for (int i = 0; i < 2 * pointToScore.length; i++) { double prob = expectedDifferenceInRangeVector2[i] / expectedSumOfNewRange2; expectedProbVector[i] = prob + (1 - expectedProbOfCut2) * expectedProbVector[i]; expectedNumPts[i] = prob * (1 + parent.getMass()) + (1 - expectedProbOfCut2) * expectedNumPts[i]; expectedDistances[i] = prob * expectedDirectionalDistanceVector2[i] + (1 - expectedProbOfCut2) * expectedDistances[i]; } for (int i = 0; i < pointToScore.length; i++) { assertEquals(expectedProbVector[2 * i], result.probMass.high[i]); assertEquals(expectedProbVector[2 * i + 1], result.probMass.low[i]); assertEquals(expectedNumPts[2 * i], result.measure.high[i]); assertEquals(expectedNumPts[2 * i + 1], result.measure.low[i]); assertEquals(expectedDistances[2 * i], result.distances.high[i]); assertEquals(expectedDistances[2 * i + 1], result.distances.low[i]); } // grandparent contains pointToScore assertFalse(visitor.pointInsideBox); depth--; } } ================================================ FILE: Java/core/src/test/java/com/amazon/randomcutforest/preprocessor/PreprocessorTest.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.preprocessor; import static com.amazon.randomcutforest.CommonUtils.toFloatArray; import static com.amazon.randomcutforest.config.ForestMode.STANDARD; import static com.amazon.randomcutforest.config.ForestMode.STREAMING_IMPUTE; import static com.amazon.randomcutforest.config.ForestMode.TIME_AUGMENTED; import static com.amazon.randomcutforest.config.ImputationMethod.FIXED_VALUES; import static com.amazon.randomcutforest.config.ImputationMethod.LINEAR; import static com.amazon.randomcutforest.config.ImputationMethod.NEXT; import static com.amazon.randomcutforest.config.ImputationMethod.PREVIOUS; import static com.amazon.randomcutforest.config.ImputationMethod.RCF; import static com.amazon.randomcutforest.config.ImputationMethod.ZERO; import static com.amazon.randomcutforest.config.TransformMethod.NONE; import static com.amazon.randomcutforest.config.TransformMethod.NORMALIZE; import static com.amazon.randomcutforest.config.TransformMethod.NORMALIZE_DIFFERENCE; import static com.amazon.randomcutforest.preprocessor.Preprocessor.copyAtEnd; import static java.lang.Math.abs; import static org.junit.jupiter.api.Assertions.assertArrayEquals; import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotEquals; import static org.junit.jupiter.api.Assertions.assertNull; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; import java.util.Random; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.EnumSource; import com.amazon.randomcutforest.RandomCutForest; import com.amazon.randomcutforest.config.ForestMode; import com.amazon.randomcutforest.config.ImputationMethod; import com.amazon.randomcutforest.config.TransformMethod; import com.amazon.randomcutforest.returntypes.RangeVector; import com.amazon.randomcutforest.returntypes.SampleSummary; import com.amazon.randomcutforest.returntypes.TimedRangeVector; import com.amazon.randomcutforest.state.preprocessor.PreprocessorMapper; import com.amazon.randomcutforest.statistics.Deviation; import com.amazon.randomcutforest.testutils.MultiDimDataWithKey; import com.amazon.randomcutforest.testutils.ShingledMultiDimDataWithKeys; public class PreprocessorTest { @Test void testConfig() { assertThrows(IllegalArgumentException.class, () -> copyAtEnd(new double[2], new double[3])); assertThrows(IllegalArgumentException.class, () -> copyAtEnd(new float[4], new float[5])); assertNull(Preprocessor.copyIfNotnull((float[]) null)); assertNull(Preprocessor.copyIfNotnull((double[]) null)); assertThrows(IllegalArgumentException.class, () -> new Preprocessor.Builder<>().transformMethod(null).build()); assertThrows(IllegalArgumentException.class, () -> new Preprocessor.Builder<>().transformMethod(NONE).forestMode(null).build()); assertThrows(IllegalArgumentException.class, () -> new Preprocessor.Builder<>().transformMethod(NONE).forestMode(STANDARD).build()); assertThrows(IllegalArgumentException.class, () -> new Preprocessor.Builder<>().transformMethod(NONE).forestMode(STANDARD).inputLength(10).build()); assertThrows(IllegalArgumentException.class, () -> new Preprocessor.Builder<>().transformMethod(NONE) .forestMode(STANDARD).inputLength(10).dimensions(12).build()); assertDoesNotThrow(() -> { new Preprocessor.Builder<>().transformMethod(NONE).forestMode(STANDARD).inputLength(12).dimensions(12) .build(); }); assertThrows(IllegalArgumentException.class, () -> new Preprocessor.Builder<>().transformMethod(NONE) .forestMode(STANDARD).inputLength(12).dimensions(12).initialShingledInput(new double[1]).build()); assertDoesNotThrow(() -> new Preprocessor.Builder<>().transformMethod(NONE).forestMode(STANDARD).inputLength(12) .dimensions(12).initialShingledInput(new double[12]).build()); assertThrows(IllegalArgumentException.class, () -> new Preprocessor.Builder<>().transformMethod(NONE).forestMode(STANDARD).inputLength(6) .dimensions(12).shingleSize(2).initialShingledInput(new double[6]).build()); assertDoesNotThrow(() -> new Preprocessor.Builder<>().transformMethod(NONE).forestMode(STANDARD).inputLength(6) .dimensions(12).shingleSize(2).initialShingledInput(new double[12]).build()); assertThrows(IllegalArgumentException.class, () -> new Preprocessor.Builder<>().transformMethod(NORMALIZE) .forestMode(STANDARD).inputLength(12).dimensions(12).startNormalization(0).build()); assertThrows(IllegalArgumentException.class, () -> new Preprocessor.Builder<>().transformMethod(NORMALIZE_DIFFERENCE).forestMode(STANDARD) .inputLength(12).dimensions(12).startNormalization(0).build()); assertThrows(IllegalArgumentException.class, () -> new Preprocessor.Builder<>().transformMethod(NONE) .forestMode(TIME_AUGMENTED).inputLength(12).dimensions(12).build()); assertDoesNotThrow(() -> { new Preprocessor.Builder<>().transformMethod(NONE).forestMode(TIME_AUGMENTED).inputLength(12).dimensions(13) .build(); }); assertThrows(IllegalArgumentException.class, () -> new Preprocessor.Builder<>().transformMethod(NONE) .shingleSize(2).forestMode(TIME_AUGMENTED).inputLength(12).dimensions(13).build()); assertThrows(IllegalArgumentException.class, () -> new Preprocessor.Builder<>().transformMethod(NONE) .shingleSize(2).forestMode(TIME_AUGMENTED).inputLength(12).dimensions(14).build()); assertThrows(IllegalArgumentException.class, () -> new Preprocessor.Builder<>().transformMethod(NONE) .shingleSize(2).forestMode(STREAMING_IMPUTE).inputLength(12).dimensions(12).shingleSize(1).build()); assertDoesNotThrow(() -> new Preprocessor.Builder<>().transformMethod(NONE).shingleSize(2) .forestMode(TIME_AUGMENTED).inputLength(6).dimensions(14).build()); assertThrows(IllegalArgumentException.class, () -> new Preprocessor.Builder<>().transformMethod(NONE).shingleSize(2).forestMode(TIME_AUGMENTED) .inputLength(6).dimensions(14).initialShingledInput(new double[14]).build()); assertDoesNotThrow(() -> new Preprocessor.Builder<>().transformMethod(NONE).shingleSize(2) .forestMode(TIME_AUGMENTED).inputLength(6).dimensions(14).initialShingledInput(new double[12]).build()); assertThrows(IllegalArgumentException.class, () -> new Preprocessor.Builder<>().transformMethod(NONE).shingleSize(2).forestMode(TIME_AUGMENTED) .inputLength(6).initialPoint(new float[12]).dimensions(14).build()); assertDoesNotThrow(() -> { new Preprocessor.Builder<>().transformMethod(NONE).shingleSize(2).forestMode(TIME_AUGMENTED).inputLength(6) .dimensions(14).initialPoint(new float[14]).build(); }); assertThrows(IllegalArgumentException.class, () -> new Preprocessor.Builder<>().transformMethod(NONE) .shingleSize(-2).forestMode(TIME_AUGMENTED).inputLength(6).dimensions(14).build()); assertDoesNotThrow(() -> { new Preprocessor.Builder<>().transformMethod(NONE).shingleSize(2).normalizeTime(true) .forestMode(TIME_AUGMENTED).inputLength(6).dimensions(14).build(); }); // external shingling in STANDARD mode assertDoesNotThrow(() -> { IPreprocessor preprocessor = new Preprocessor.Builder<>().transformMethod(NONE).shingleSize(2) .forestMode(TIME_AUGMENTED).inputLength(6).dimensions(14).build(); // need a forest assertThrows(IllegalArgumentException.class, () -> preprocessor.getScaledShingledInput(new double[6], 0L, null, null)); }); // internal shingling assertDoesNotThrow(() -> { IPreprocessor preprocessor = new Preprocessor.Builder<>().transformMethod(NONE).shingleSize(2) .forestMode(STANDARD).inputLength(6).dimensions(12).build(); assertDoesNotThrow(() -> preprocessor.getScaledShingledInput(new double[6], 0L, null, null)); assertNull(preprocessor.invertInPlaceRecentSummaryBlock(null)); SampleSummary summary = new SampleSummary(6); summary.summaryPoints = new float[1][6]; summary.measure = new float[1][2]; assertThrows(IllegalArgumentException.class, () -> preprocessor.invertInPlaceRecentSummaryBlock(summary)); assertThrows(IllegalArgumentException.class, () -> preprocessor.setDefaultFill(new double[7])); assertDoesNotThrow(() -> preprocessor.setDefaultFill(new double[6])); assertThrows(IllegalArgumentException.class, () -> ((Preprocessor) preprocessor).setPreviousTimeStamps(new long[5])); }); assertThrows(IllegalArgumentException.class, () -> new Preprocessor.Builder<>().transformMethod(NONE) .shingleSize(2).forestMode(STANDARD).weights(new double[1]).inputLength(6).dimensions(12).build()); assertThrows(IllegalArgumentException.class, () -> new Preprocessor.Builder<>().transformMethod(NONE) .shingleSize(2).forestMode(STANDARD).weights(new double[2]).inputLength(6).dimensions(12).build()); assertThrows(IllegalArgumentException.class, () -> new Preprocessor.Builder<>().transformMethod(NONE).shingleSize(2).forestMode(STANDARD) .weights(new double[] { 1.0, 1.0 }).inputLength(6).dimensions(12).build()); assertThrows(IllegalArgumentException.class, () -> new Preprocessor.Builder<>().transformMethod(NONE) .forestMode(STANDARD).inputLength(6).dimensions(12).build()); assertDoesNotThrow(() -> { new Preprocessor.Builder<>().transformMethod(NONE).shingleSize(2).normalizeTime(true).forestMode(STANDARD) .inputLength(6).dimensions(12).build(); }); assertThrows(IllegalArgumentException.class, () -> new Preprocessor.Builder<>().transformMethod(NONE) .shingleSize(2).forestMode(STANDARD).inputLength(5).dimensions(12).build()); assertThrows(IllegalArgumentException.class, () -> new Preprocessor.Builder<>().transformMethod(NONE) .inputLength(5).dimensions(5).startNormalization(0).normalizeTime(true).build()); assertThrows(IllegalArgumentException.class, () -> new Preprocessor.Builder<>().transformMethod(NONE) .inputLength(1).dimensions(1).weights(new double[] { 0.5 }).build()); assertThrows(IllegalArgumentException.class, () -> new Preprocessor.Builder<>().inputLength(1).dimensions(1) .startNormalization(0).transformMethod(NORMALIZE_DIFFERENCE).build()); assertThrows(IllegalArgumentException.class, () -> new Preprocessor.Builder<>().inputLength(1).dimensions(1) .startNormalization(0).transformMethod(NORMALIZE_DIFFERENCE).build()); assertThrows(IllegalArgumentException.class, () -> new Preprocessor.Builder<>().inputLength(1).dimensions(1) .forestMode(STREAMING_IMPUTE).imputationMethod(FIXED_VALUES).build()); assertThrows(IllegalArgumentException.class, () -> new Preprocessor.Builder<>().inputLength(1).dimensions(2) .forestMode(STREAMING_IMPUTE).imputationMethod(FIXED_VALUES).shingleSize(2).build()); assertThrows(IllegalArgumentException.class, () -> new Preprocessor.Builder<>().inputLength(1).dimensions(2).forestMode(STREAMING_IMPUTE) .imputationMethod(FIXED_VALUES).shingleSize(2).fillValues(new double[2]).build()); assertDoesNotThrow(() -> new Preprocessor.Builder<>().inputLength(1).dimensions(2).forestMode(STREAMING_IMPUTE) .imputationMethod(FIXED_VALUES).shingleSize(2).fillValues(new double[1]).build()); } public void preprocessorPlusForest(int seed, ForestMode mode, TransformMethod method, ImputationMethod imputeMethod, boolean internalShinglingHint, int shingleSize) { int dataSize = 1000; int sampleSize = 256; int tempDimensions = (mode == TIME_AUGMENTED) ? 2 * shingleSize : shingleSize; MultiDimDataWithKey dataWithKey = ShingledMultiDimDataWithKeys.getMultiDimData(dataSize, 70, 50, 5, seed, 1, false); Preprocessor.Builder builder = Preprocessor.builder().inputLength(1).dimensions(tempDimensions) .weights(new double[] { 1.0 }).shingleSize(shingleSize).transformMethod(method).randomSeed(seed + 1) .forestMode(mode); if (mode == STREAMING_IMPUTE) { builder.imputationMethod(imputeMethod); builder.fastForward(new Random().nextDouble() < 0.5); if (imputeMethod == FIXED_VALUES) { builder.fillValues(new double[] { 5 }); } } if (imputeMethod != null) { builder.imputationMethod(imputeMethod); } boolean internal = ((internalShinglingHint || method != NONE) && mode != STREAMING_IMPUTE); Preprocessor preprocessor = builder.build(); // polymorphism RandomCutForest forest = RandomCutForest.builder().dimensions(tempDimensions).randomSeed(seed + 2) .outputAfter(50).shingleSize(shingleSize).sampleSize(sampleSize).internalShinglingEnabled(internal) .build(); Random random = new Random(seed + 4); double score = 0; double error = 0; for (int i = 0; i < dataSize - 1; i++) { long timestamp = i * 100 + random.nextInt(20); if (mode != STREAMING_IMPUTE) { assertEquals(preprocessor.numberOfImputes(timestamp), 0); } PreprocessorMapper mapper = new PreprocessorMapper(); Preprocessor newPre = mapper.toModel(mapper.toState(preprocessor)); float[] shingle = preprocessor.getScaledShingledInput(dataWithKey.data[i], timestamp, null, forest); assertArrayEquals(shingle, newPre.getScaledShingledInput(dataWithKey.data[i], timestamp, null, forest)); if (shingle != null && (mode != STREAMING_IMPUTE || i != 3 || random.nextDouble() > 0.1)) { if (i > 100 + shingleSize - 1) { double currentScore = forest.getAnomalyScore(shingle); if (currentScore > 1.5) { float[] value = forest.imputeMissingValues(shingle, 1, new int[] { shingle.length - 1 }); double expected = preprocessor.getExpectedValue(0, dataWithKey.data[i], shingle, value)[0]; System.out.println(" expected " + expected + " in place of " + dataWithKey.data[i][0]); } score += currentScore; } } if (internal) { float[] input = preprocessor.getScaledInput(toFloatArray(dataWithKey.data[i]), timestamp); if (i != 20 && random.nextDouble() > 0.1) { preprocessor.update(dataWithKey.data[i], input, timestamp, null, forest); } else { // drop first coordinate preprocessor.update(dataWithKey.data[i], input, timestamp, new int[1], forest); } if (shingleSize > 1) { RangeVector rangeVector = forest.extrapolateWithRanges(preprocessor.getLastShingledPoint(), 1, tempDimensions / shingleSize, false, 0, 1.0); TimedRangeVector timedRanges = preprocessor.invertForecastRange(rangeVector, timestamp, null, false, timestamp); // error of lookahead if (i > 100 + shingleSize - 1) { error += abs(timedRanges.rangeVector.values[0] - dataWithKey.data[i + 1][0]); } } } else { // force two subsequent drops if (i != 0 && i != 5 && i != preprocessor.startNormalization - 1 && i != 500 && i != 501 && i != 502 && random.nextDouble() > 0.1) { if (random.nextDouble() > 0.7) { preprocessor.update(dataWithKey.data[i], shingle, timestamp, null, forest); } else if (random.nextDouble() > 0.5) { // same as null preprocessor.update(dataWithKey.data[i], shingle, timestamp, new int[0], forest); } else { preprocessor.update(dataWithKey.data[i], shingle, timestamp, new int[] {}, forest); } } else { if (i != 5 && i != 6 && i != 500 && i != 501 && i != 502) { // force initial; note 5 is dropped preprocessor.update(dataWithKey.data[i], shingle, timestamp, new int[] { 0 }, forest); } // drop } } } assertTrue((score) / (dataSize - 100 - shingleSize + 1) < 1); // note for time-augmentation the noise in the time will overwhelm the noise in // the signal if (mode != TIME_AUGMENTED && (imputeMethod == null || imputeMethod == RCF)) { assertTrue((error) / (dataSize - 200 - shingleSize + 1) < 10); // twice the noise } PreprocessorMapper mapper = new PreprocessorMapper(); Preprocessor second = mapper.toModel(mapper.toState(preprocessor)); assertArrayEquals(second.getSmoothedDeviations(), preprocessor.getSmoothedDeviations(), 1e-10f); assertArrayEquals(second.getShift(), preprocessor.getShift(), 1e-10f); assertArrayEquals(second.getScale(), preprocessor.getScale(), 1e-10f); } @ParameterizedTest @EnumSource(TransformMethod.class) public void preprocessorTest(TransformMethod method) { preprocessorPlusForest(0, STANDARD, method, null, true, 10); preprocessorPlusForest(0, STANDARD, method, null, true, 1); preprocessorPlusForest(0, STANDARD, method, null, false, 2); preprocessorPlusForest(0, STANDARD, method, RCF, false, 1); preprocessorPlusForest(0, TIME_AUGMENTED, method, null, true, 1); preprocessorPlusForest(0, TIME_AUGMENTED, method, null, true, 3); preprocessorPlusForest(0, STREAMING_IMPUTE, method, RCF, true, 10); preprocessorPlusForest(0, STREAMING_IMPUTE, method, PREVIOUS, false, 5); preprocessorPlusForest(0, STREAMING_IMPUTE, method, ZERO, false, 11); preprocessorPlusForest(0, STREAMING_IMPUTE, method, FIXED_VALUES, true, 12); preprocessorPlusForest(0, STREAMING_IMPUTE, method, NEXT, false, 7); preprocessorPlusForest(0, STREAMING_IMPUTE, method, LINEAR, false, 2); } @ParameterizedTest @EnumSource(TransformMethod.class) public void allMissing(TransformMethod method) { int dataSize = 1000; int shingleSize = 2; long seed = new Random().nextLong(); Random random = new Random(seed + 4); double[] defaultFill = null; if (method == NORMALIZE) { defaultFill = new double[] { random.nextInt(10) }; } MultiDimDataWithKey dataWithKey = ShingledMultiDimDataWithKeys.getMultiDimData(dataSize, 70, 50, 5, 0, 1, false); Preprocessor.Builder builder = Preprocessor.builder().inputLength(1).dimensions(shingleSize) .weights(new double[] { 1.0 }).shingleSize(shingleSize).transformMethod(method).randomSeed(seed + 1) .weightTime(0).normalizeTime(true).forestMode(STANDARD).fillValues(defaultFill); Preprocessor preprocessor = builder.build(); // testing length of deviation list assertThrows(IllegalArgumentException.class, () -> preprocessor.manageDeviations(new Deviation[12], null, 0)); for (int i = 0; i < preprocessor.getStartNormalization(); i++) { long timestamp = i * 100 + random.nextInt(20); PreprocessorMapper mapper = new PreprocessorMapper(); Preprocessor newPre = mapper.toModel(mapper.toState(preprocessor)); float[] shingle = preprocessor.getScaledShingledInput(dataWithKey.data[i], timestamp, null, null); assertArrayEquals(shingle, newPre.getScaledShingledInput(dataWithKey.data[i], timestamp, null, null)); preprocessor.update(dataWithKey.data[i], shingle, timestamp, new int[] { 0 }, null); } assertTrue(preprocessor.getInitialValues() == null); assertTrue(preprocessor.isOutputReady()); assertEquals(preprocessor.getScale().length, 1); assertEquals(preprocessor.getShift().length, 1); if (method == NORMALIZE) { assertTrue(preprocessor.getDeviationList()[0].getMean() == defaultFill[0]); assertEquals(preprocessor.getLastShingledInput()[0], defaultFill[0]); } else { assertTrue(preprocessor.getDeviationList()[0].getMean() == 0); } assertThrows(IllegalArgumentException.class, () -> preprocessor.inverseMapTime(0, -(shingleSize + 1))); assertEquals(preprocessor.inverseMapTimeValue(1L, 1L), 0); assertEquals(preprocessor.getShingledInput().length, shingleSize); assertEquals(preprocessor.dataQuality(), 0); assertTrue(preprocessor.normalize(-200, 1) < 0); assertEquals(preprocessor.getScale().length, 1); assertEquals(preprocessor.getShift().length, 1); } @ParameterizedTest @EnumSource(TransformMethod.class) public void allMissingWithForest(TransformMethod method) { int dataSize = 1000; int shingleSize = 2; long seed = 0L; MultiDimDataWithKey dataWithKey = ShingledMultiDimDataWithKeys.getMultiDimData(dataSize, 70, 50, 5, 0, 1, false); Preprocessor.Builder builder = Preprocessor.builder().inputLength(1).dimensions(2 * shingleSize) .weights(new double[] { 1.0 }).shingleSize(shingleSize).transformMethod(method).randomSeed(seed + 1) .forestMode(TIME_AUGMENTED).weightTime(0).normalizeTime(false); RandomCutForest forest = new RandomCutForest.Builder().dimensions(2 * shingleSize) .internalShinglingEnabled(false) // not recommended .shingleSize(shingleSize).build(); Preprocessor preprocessor = builder.build(); Random random = new Random(seed + 4); assertTrue(!preprocessor.isOutputReady()); assertThrows(IllegalArgumentException.class, () -> preprocessor.getScaledShingledInput(dataWithKey.data[0], 0, null, null)); for (int i = 0; i < preprocessor.getStartNormalization() + 1; i++) { long timestamp = i * 100 + random.nextInt(20); PreprocessorMapper mapper = new PreprocessorMapper(); Preprocessor newPre = mapper.toModel(mapper.toState(preprocessor)); float[] shingle = preprocessor.getScaledShingledInput(dataWithKey.data[i], timestamp, null, forest); assertArrayEquals(shingle, newPre.getScaledShingledInput(dataWithKey.data[i], timestamp, null, forest)); preprocessor.update(dataWithKey.data[i], shingle, timestamp, new int[] { 0 }, forest); } assertTrue(preprocessor.getInitialValues() == null); assertTrue(preprocessor.getDeviationList()[0].getMean() == 0); assertEquals(preprocessor.getScale().length, 2); assertEquals(preprocessor.getShift().length, 2); assertThrows(IllegalArgumentException.class, () -> preprocessor.inverseMapTime(0, -(shingleSize + 1))); assertEquals(preprocessor.inverseMapTimeValue(1L, 1L), 0); assertEquals(preprocessor.getShingledInput().length, shingleSize); assertEquals(preprocessor.dataQuality(), 0); assertTrue(preprocessor.normalize(0, 1) < 0); assertThrows(IllegalArgumentException.class, () -> preprocessor.invertForecastRange(new RangeVector(11), preprocessor.internalTimeStamp + 1, new double[0], false, 0)); assertThrows(IllegalArgumentException.class, () -> preprocessor.invertForecastRange(new RangeVector(10), preprocessor.internalTimeStamp + 1, new double[0], false, 0)); long[] values = preprocessor.invertForecastRange(new RangeVector(10), preprocessor.internalTimeStamp - 1, new double[1], false, -100).timeStamps; long[] otherValues = preprocessor.invertForecastRange(new RangeVector(10), preprocessor.internalTimeStamp - 1, new double[1], true, -100).timeStamps; assertTrue(values[0] == otherValues[0]); assertThrows(IllegalArgumentException.class, () -> preprocessor.invertInPlace(new float[10], null, -1)); assertDoesNotThrow(() -> preprocessor.invertInPlace(new float[2], new double[1], -1)); } @ParameterizedTest @EnumSource(value = TransformMethod.class, names = { "NONE", "WEIGHTED", "DIFFERENCE" }) public void basicPreProcessor(TransformMethod method) { int dataSize = 1000; int shingleSize = 2; long seed = 0L; MultiDimDataWithKey dataWithKey = ShingledMultiDimDataWithKeys.getMultiDimData(dataSize, 70, 50, 5, 0, 1, false); Preprocessor.Builder builder = Preprocessor.builder().inputLength(1).dimensions(shingleSize) .weights(new double[] { 1.0 }).shingleSize(shingleSize).transformMethod(method).randomSeed(seed + 1) .forestMode(STANDARD).imputationMethod(ZERO); RandomCutForest forest = new RandomCutForest.Builder().dimensions(shingleSize).internalShinglingEnabled(false) // not // recommended .shingleSize(shingleSize).build(); Preprocessor preprocessor = builder.build(); Random random = new Random(seed + 4); assertDoesNotThrow(() -> preprocessor.getScaledShingledInput(dataWithKey.data[0], 0, null, null)); for (int i = 0; i < preprocessor.getStartNormalization() + 1; i++) { long timestamp = i * 100 + random.nextInt(20); PreprocessorMapper mapper = new PreprocessorMapper(); Preprocessor newPre = mapper.toModel(mapper.toState(preprocessor)); float[] shingle = preprocessor.getScaledShingledInput(dataWithKey.data[i], timestamp, null, forest); assertArrayEquals(shingle, newPre.getScaledShingledInput(dataWithKey.data[i], timestamp, null, forest)); preprocessor.update(dataWithKey.data[i], shingle, timestamp, new int[] { 0 }, forest); } assertTrue(preprocessor.getInitialValues() == null); assertTrue(preprocessor.getDeviationList()[0].getMean() == 0); assertThrows(IllegalArgumentException.class, () -> preprocessor.inverseMapTime(0, -(shingleSize + 1))); assertNotEquals(preprocessor.inverseMapTimeValue(1L, 1L), 0); assertEquals(preprocessor.getShingledInput().length, shingleSize); assertEquals(preprocessor.dataQuality(), 0); assertTrue(preprocessor.normalize(0, 1) < 0); assertThrows(IllegalArgumentException.class, () -> preprocessor.getExpectedValue(-2, null, null, new float[1])); assertThrows(IllegalArgumentException.class, () -> preprocessor.getExpectedValue(-2, null, null, new float[2])); preprocessor.getExpectedValue(-1, null, null, new float[2]); assertDoesNotThrow(() -> preprocessor.getExpectedValue(-1, null, null, new float[2])); } @ParameterizedTest @EnumSource(value = ImputationMethod.class) public void streamingImputeLargeGap(ImputationMethod method) { int dataSize = 1000; int shingleSize = 4; long seed = 0L; MultiDimDataWithKey dataWithKey = ShingledMultiDimDataWithKeys.getMultiDimData(dataSize, 70, 50, 5, 0, 1, false); Preprocessor.Builder builder = Preprocessor.builder().inputLength(1).dimensions(shingleSize) .weights(new double[] { 1.0 }).shingleSize(shingleSize).randomSeed(seed + 1) .forestMode(STREAMING_IMPUTE).imputationMethod(method).transformMethod(NORMALIZE).fastForward(true); if (method == FIXED_VALUES) { builder.fillValues(new double[] { 0 }); } RandomCutForest forest = new RandomCutForest.Builder().dimensions(shingleSize).internalShinglingEnabled(true) .shingleSize(shingleSize).build(); Preprocessor preprocessor = builder.build(); Random random = new Random(seed + 4); assertDoesNotThrow(() -> preprocessor.getScaledShingledInput(dataWithKey.data[0], 0, null, null)); for (int i = 0; i < dataSize; i++) { long timestamp = i * 100 + random.nextInt(20); PreprocessorMapper mapper = new PreprocessorMapper(); Preprocessor newPre = mapper.toModel(mapper.toState(preprocessor)); float[] shingle = preprocessor.getScaledShingledInput(dataWithKey.data[i], timestamp, null, forest); assertArrayEquals(shingle, newPre.getScaledShingledInput(dataWithKey.data[i], timestamp, null, forest)); preprocessor.update(dataWithKey.data[i], shingle, timestamp, null, forest); } long updates = forest.getTotalUpdates(); double[] newData = new double[] { -11.11 }; float[] shingle = preprocessor.getScaledShingledInput(newData, 100 * dataSize + 10000L, null, forest); assertEquals(forest.getTotalUpdates(), updates); preprocessor.update(newData, shingle, 100 * dataSize + 10000L, null, forest); if (method == RCF) { assertEquals(forest.getTotalUpdates(), updates + shingleSize); } else { assertEquals(forest.getTotalUpdates(), updates + 100 + shingleSize / 2); } } } ================================================ FILE: Java/core/src/test/java/com/amazon/randomcutforest/preprocessor/transform/WeightedTransformerTest.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.preprocessor.transform; import static com.amazon.randomcutforest.preprocessor.transform.WeightedTransformer.NUMBER_OF_STATS; import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; import org.junit.jupiter.api.Test; import com.amazon.randomcutforest.returntypes.RangeVector; import com.amazon.randomcutforest.statistics.Deviation; public class WeightedTransformerTest { public void checkTransformer(WeightedTransformer w, double value, double another) { w.setWeights(new double[1]); float[] test = new float[] { 1.0f }; w.invertInPlace(test, new double[] { 2.0 }); assertEquals(test[0], value, 1e-6); assertEquals(w.getScale()[0], 0, 1e-6); RangeVector r = new RangeVector(1); r.shift(0, 10); assertEquals(r.values[0], 10, 1e-6); assertEquals(r.upper[0], 10, 1e-6); assertEquals(r.lower[0], 10, 1e-6); assertThrows(IllegalArgumentException.class, () -> w.invertForecastRange(r, 1, new double[] { 1.0 }, new double[0])); w.invertForecastRange(r, 1, new double[] { 1.0 }, new double[1]); assertEquals(r.values[0], another, 1e-6); assertEquals(r.upper[0], another, 1e-6); assertEquals(r.lower[0], another, 1e-6); } @Test void constructorTest() { assertThrows(IllegalArgumentException.class, () -> new WeightedTransformer(new double[2], new Deviation[5])); assertThrows(IllegalArgumentException.class, () -> new WeightedTransformer(new double[2], new Deviation[2 * NUMBER_OF_STATS])); Deviation[] deviations = new Deviation[NUMBER_OF_STATS]; for (int i = 0; i < NUMBER_OF_STATS; i++) { deviations[i] = new Deviation(0); } WeightedTransformer w = new WeightedTransformer(new double[1], deviations); assertThrows(IllegalArgumentException.class, () -> w.setWeights(new double[2])); checkTransformer(w, 0, 0); checkTransformer(new NormalizedDifferenceTransformer(new double[1], deviations), 2.0, 1.0); assertThrows(IllegalArgumentException.class, () -> new NormalizedDifferenceTransformer(new double[1], deviations).invertInPlace(new float[1], new double[2])); checkTransformer(new DifferenceTransformer(new double[1], deviations), 2.0, 1.0); assertThrows(IllegalArgumentException.class, () -> new DifferenceTransformer(new double[1], deviations).invertInPlace(new float[1], new double[2])); } @Test void updateDeviationsTest() { Deviation[] deviations = new Deviation[2 * NUMBER_OF_STATS]; for (int y = 0; y < deviations.length; y++) { deviations[y] = new Deviation(0); } WeightedTransformer transformer = new WeightedTransformer(new double[2], deviations); assertThrows(IllegalArgumentException.class, () -> transformer.updateDeviation(new double[1], new double[1], null)); assertThrows(IllegalArgumentException.class, () -> transformer.updateDeviation(new double[2], new double[1], null)); assertDoesNotThrow(() -> transformer.updateDeviation(new double[2], new double[2], null)); } @Test void normalizeTest() { Deviation[] deviations = new Deviation[2 * NUMBER_OF_STATS]; for (int y = 0; y < deviations.length; y++) { deviations[y] = new Deviation(0); } WeightedTransformer transformer = new WeightedTransformer(new double[2], deviations); assertThrows(IllegalArgumentException.class, () -> transformer.normalize(10, 5, 0, 10)); assertTrue(transformer.normalize(10, 5, 0.5, 9) == 9); assertTrue(transformer.normalize(-10, -5, 0.5, 9) == -9); } } ================================================ FILE: Java/core/src/test/java/com/amazon/randomcutforest/returntypes/DensityOutputTest.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.returntypes; import static com.amazon.randomcutforest.TestUtils.EPSILON; import static org.junit.jupiter.api.Assertions.assertArrayEquals; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertTrue; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; public class DensityOutputTest { private int dimensions; private int sampleSize; private DensityOutput output; @BeforeEach public void setUp() { dimensions = 3; sampleSize = 99; output = new DensityOutput(dimensions, sampleSize); } @Test public void testNew() { double[] zero = new double[3]; assertArrayEquals(zero, output.measure.high); assertArrayEquals(zero, output.distances.high); assertArrayEquals(zero, output.probMass.high); assertArrayEquals(zero, output.measure.low); assertArrayEquals(zero, output.distances.low); assertArrayEquals(zero, output.probMass.low); } @Test public void testAddToLeft() { DensityOutput other1 = new DensityOutput(dimensions, sampleSize); DensityOutput other2 = new DensityOutput(dimensions, sampleSize); for (int i = 0; i < dimensions; i++) { output.probMass.high[i] = 2 * i; output.probMass.low[i] = 2 * i + 1; output.distances.high[i] = 4 * i; output.distances.low[i] = 4 * i + 2; output.measure.high[i] = 6 * i; output.measure.low[i] = 6 * i + 3; other1.probMass.high[i] = other2.probMass.high[i] = 8 * i; other1.distances.high[i] = other2.distances.high[i] = 10 * i; other1.measure.high[i] = other2.measure.high[i] = 12 * i; other1.probMass.low[i] = other2.probMass.low[i] = 8 * i + 4; other1.distances.low[i] = other2.distances.low[i] = 10 * i + 5; other1.measure.low[i] = other2.measure.low[i] = 12 * i + 6; } assertArrayEquals(other1.probMass.high, other2.probMass.high); assertArrayEquals(other1.distances.high, other2.distances.high); assertArrayEquals(other1.measure.high, other2.measure.high); assertArrayEquals(other1.probMass.low, other2.probMass.low); assertArrayEquals(other1.distances.low, other2.distances.low); assertArrayEquals(other1.measure.low, other2.measure.low); DensityOutput.addToLeft(output, other1); for (int i = 0; i < dimensions; i++) { assertEquals(2 * i + 8 * i, output.probMass.high[i]); assertEquals(4 * i + 10 * i, output.distances.high[i]); assertEquals(6 * i + 12 * i, output.measure.high[i]); assertEquals(2 * i + 8 * i + 5, output.probMass.low[i]); assertEquals(4 * i + 10 * i + 7, output.distances.low[i]); assertEquals(6 * i + 12 * i + 9, output.measure.low[i]); } assertArrayEquals(other1.probMass.high, other2.probMass.high); assertArrayEquals(other1.distances.high, other2.distances.high); assertArrayEquals(other1.measure.high, other2.measure.high); assertArrayEquals(other1.probMass.low, other2.probMass.low); assertArrayEquals(other1.distances.low, other2.distances.low); assertArrayEquals(other1.measure.low, other2.measure.low); } @Test public void testGetDensity() { assertTrue(output.getDensity(0.5, 3) == 0); for (int i = 0; i < dimensions; i++) { output.probMass.high[i] = 2 * i; output.distances.high[i] = 4 * i; output.measure.high[i] = 6 * i; output.probMass.low[i] = 2 * i; output.distances.low[i] = 4 * i + 2; output.measure.low[i] = 6 * i + 3; } double q = 0.5; double density = output.getDensity(q, 3); DiVector densityVector = output.getDirectionalDensity(q, 3); double sumOfPoints = output.measure.getHighLowSum() / sampleSize; double sumOfFactors = 0.0; for (int i = 0; i < dimensions; i++) { double mass = output.probMass.getHighLowSum(i); double distance = output.distances.getHighLowSum(i); double t = (mass != 0) ? distance / mass : 0; t = Math.pow(t, dimensions) * mass; sumOfFactors += t; } assertEquals(sumOfPoints / (q * sumOfPoints + sumOfFactors), density, EPSILON); // for contrib, do not scale sum of points by sample size sumOfPoints = output.measure.getHighLowSum(); for (int i = 0; i < dimensions; i++) { assertEquals(output.measure.high[i] * density / sumOfPoints, densityVector.high[i], EPSILON); assertEquals(output.measure.low[i] * density / sumOfPoints, densityVector.low[i], EPSILON); } assertEquals(output.getDensity(DensityOutput.DEFAULT_SUM_OF_POINTS_SCALING_FACTOR, dimensions), output.getDensity()); densityVector = output.getDirectionalDensity(DensityOutput.DEFAULT_SUM_OF_POINTS_SCALING_FACTOR, dimensions); DiVector defaultDensityVector = output.getDirectionalDensity(); for (int i = 0; i < dimensions; i++) { assertEquals(densityVector.high[i], defaultDensityVector.high[i], EPSILON); assertEquals(densityVector.low[i], defaultDensityVector.low[i], EPSILON); } } } ================================================ FILE: Java/core/src/test/java/com/amazon/randomcutforest/returntypes/DiVectorTest.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.returntypes; import static com.amazon.randomcutforest.TestUtils.EPSILON; import static org.junit.jupiter.api.Assertions.assertArrayEquals; import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNull; import static org.junit.jupiter.api.Assertions.assertSame; import static org.junit.jupiter.api.Assertions.assertThrows; import java.util.Arrays; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import com.amazon.randomcutforest.state.returntypes.DiVectorMapper; import com.amazon.randomcutforest.state.returntypes.DiVectorState; public class DiVectorTest { int dimensions; private DiVector vector; @BeforeEach public void setUp() { dimensions = 3; vector = new DiVector(dimensions); } @Test public void testNew() { double[] expected = new double[dimensions]; assertEquals(dimensions, vector.getDimensions()); assertArrayEquals(expected, vector.high); assertArrayEquals(expected, vector.low); assertThrows(IllegalArgumentException.class, () -> new DiVector(0)); assertThrows(IllegalArgumentException.class, () -> new DiVector(new double[10], new double[9])); assertDoesNotThrow(() -> new DiVector(new double[10], new double[10])); } @Test public void testAddToLeft() { DiVector left = new DiVector(dimensions); DiVector right = new DiVector(dimensions); for (int i = 0; i < dimensions; i++) { left.low[i] = Math.random(); left.high[i] = Math.random(); right.low[i] = Math.random(); right.high[i] = Math.random(); } assertThrows(IllegalArgumentException.class, () -> DiVector.addToLeft(left, new DiVector(dimensions + 1))); DiVector leftCopy = new DiVector(dimensions); System.arraycopy(left.low, 0, leftCopy.low, 0, dimensions); System.arraycopy(left.high, 0, leftCopy.high, 0, dimensions); DiVector rightCopy = new DiVector(dimensions); System.arraycopy(right.low, 0, rightCopy.low, 0, dimensions); System.arraycopy(right.high, 0, rightCopy.high, 0, dimensions); DiVector result = DiVector.addToLeft(left, right); assertSame(result, left); assertArrayEquals(rightCopy.low, right.low); assertArrayEquals(rightCopy.high, right.high); for (int i = 0; i < dimensions; i++) { assertEquals(leftCopy.low[i] + right.low[i], left.low[i]); assertEquals(leftCopy.high[i] + right.high[i], left.high[i]); } } @Test public void testScale() { vector.high[0] = 1.1; vector.high[2] = 3.1; vector.low[1] = 2.2; double z = 9.9; DiVector result = vector.scale(z); double[] expected = new double[] { 1.1 * 9.9, 0.0, 3.1 * 9.9 }; assertArrayEquals(expected, result.high); expected = new double[] { 0.0, 2.2 * 9.9, 0.0 }; assertArrayEquals(expected, result.low); DiVector emptyVector = new DiVector(dimensions); emptyVector.scale(123.0); expected = new double[dimensions]; assertArrayEquals(expected, emptyVector.low); assertArrayEquals(expected, emptyVector.high); } @Test public void testGetHighLowSum() { vector.high[2] = 3.1; vector.low[1] = 2.2; assertEquals(3.1 + 2.2, vector.getHighLowSum()); } @Test public void testRenormalize() { DiVector testVector = new DiVector(10); // cannot renormalize really testVector.renormalize(100); assertEquals(testVector.getHighLowSum(), 0); vector.high[0] = 1.1; vector.high[2] = 3.1; vector.low[1] = 2.2; assertEquals(1.1 + 3.1 + 2.2, vector.getHighLowSum()); vector.renormalize(100.0); assertEquals(100.0, vector.getHighLowSum()); } @Test public void testComponentwiseTransform() { vector.high[0] = 1.1; vector.high[1] = 2.1; vector.high[2] = 3.1; vector.low[0] = 101.1; vector.low[1] = 202.1; vector.low[2] = 303.1; double[] highCopy = Arrays.copyOf(vector.high, dimensions); double[] lowCopy = Arrays.copyOf(vector.low, dimensions); vector.componentwiseTransform(x -> 2 * x - 1); for (int i = 0; i < dimensions; i++) { assertEquals(2 * highCopy[i] - 1, vector.high[i], EPSILON); assertEquals(2 * lowCopy[i] - 1, vector.low[i], EPSILON); } } @Test public void testMapper() { DiVector left = new DiVector(dimensions); for (int i = 0; i < dimensions; i++) { left.low[i] = Math.random(); left.high[i] = Math.random(); } DiVectorMapper mapper = new DiVectorMapper(); DiVector another = mapper.toModel(mapper.toState(left)); assertArrayEquals(another.high, left.high, 1e-10); assertArrayEquals(another.low, left.low, 1e-10); assertNull(mapper.toModel(mapper.toState(null))); DiVectorState state = new DiVectorState(); state.setHigh(left.high); assertNull(mapper.toModel(state)); state.setHigh(null); state.setLow(left.low); assertNull(mapper.toModel(state)); } } ================================================ FILE: Java/core/src/test/java/com/amazon/randomcutforest/returntypes/InterpolationMeasureTest.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.returntypes; import static org.junit.jupiter.api.Assertions.assertArrayEquals; import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertThrows; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; public class InterpolationMeasureTest { private int dimensions; private int sampleSize; private InterpolationMeasure output; @BeforeEach public void setUp() { dimensions = 3; sampleSize = 99; output = new InterpolationMeasure(dimensions, sampleSize); } @Test public void testNew() { double[] zero = new double[3]; assertArrayEquals(zero, output.measure.high); assertArrayEquals(zero, output.distances.high); assertArrayEquals(zero, output.probMass.high); assertArrayEquals(zero, output.measure.low); assertArrayEquals(zero, output.distances.low); assertArrayEquals(zero, output.probMass.low); assertEquals(output.getSampleSize(), sampleSize); assertThrows(IllegalArgumentException.class, () -> new InterpolationMeasure(0, sampleSize)); assertThrows(IllegalArgumentException.class, () -> new InterpolationMeasure(1, new DiVector(1), new DiVector(2), new DiVector(3))); assertThrows(IllegalArgumentException.class, () -> new InterpolationMeasure(1, new DiVector(2), new DiVector(2), new DiVector(3))); assertDoesNotThrow(() -> new InterpolationMeasure(1, new DiVector(2), new DiVector(2), new DiVector(2))); } @Test public void testAddToLeft() { InterpolationMeasure other1 = new InterpolationMeasure(dimensions, sampleSize); InterpolationMeasure other2 = new InterpolationMeasure(dimensions, sampleSize); assertThrows(IllegalArgumentException.class, () -> InterpolationMeasure.addToLeft(other1, new InterpolationMeasure(dimensions + 1, sampleSize))); for (int i = 0; i < dimensions; i++) { output.probMass.high[i] = 2 * i; output.probMass.low[i] = 2 * i + 1; output.distances.high[i] = 4 * i; output.distances.low[i] = 4 * i + 2; output.measure.high[i] = 6 * i; output.measure.low[i] = 6 * i + 3; other1.probMass.high[i] = other2.probMass.high[i] = 8 * i; other1.distances.high[i] = other2.distances.high[i] = 10 * i; other1.measure.high[i] = other2.measure.high[i] = 12 * i; other1.probMass.low[i] = other2.probMass.low[i] = 8 * i + 4; other1.distances.low[i] = other2.distances.low[i] = 10 * i + 5; other1.measure.low[i] = other2.measure.low[i] = 12 * i + 6; } assertArrayEquals(other1.probMass.high, other2.probMass.high); assertArrayEquals(other1.distances.high, other2.distances.high); assertArrayEquals(other1.measure.high, other2.measure.high); assertArrayEquals(other1.probMass.low, other2.probMass.low); assertArrayEquals(other1.distances.low, other2.distances.low); assertArrayEquals(other1.measure.low, other2.measure.low); InterpolationMeasure.addToLeft(output, other1); for (int i = 0; i < dimensions; i++) { assertEquals(2 * i + 8 * i, output.probMass.high[i]); assertEquals(4 * i + 10 * i, output.distances.high[i]); assertEquals(6 * i + 12 * i, output.measure.high[i]); assertEquals(2 * i + 8 * i + 5, output.probMass.low[i]); assertEquals(4 * i + 10 * i + 7, output.distances.low[i]); assertEquals(6 * i + 12 * i + 9, output.measure.low[i]); } assertArrayEquals(other1.probMass.high, other2.probMass.high); assertArrayEquals(other1.distances.high, other2.distances.high); assertArrayEquals(other1.measure.high, other2.measure.high); assertArrayEquals(other1.probMass.low, other2.probMass.low); assertArrayEquals(other1.distances.low, other2.distances.low); assertArrayEquals(other1.measure.low, other2.measure.low); } @Test public void testScale() { InterpolationMeasure copy = new InterpolationMeasure(dimensions, sampleSize); for (int i = 0; i < dimensions; i++) { output.probMass.high[i] = copy.probMass.high[i] = 2 * i; output.distances.high[i] = copy.distances.high[i] = 4 * i; output.measure.high[i] = copy.measure.high[i] = 6 * i; output.probMass.low[i] = copy.probMass.low[i] = 2 * i + 1; output.distances.low[i] = copy.distances.low[i] = 4 * i + 2; output.measure.low[i] = copy.measure.low[i] = 6 * i + 3; } assertArrayEquals(copy.probMass.high, output.probMass.high); assertArrayEquals(copy.distances.high, output.distances.high); assertArrayEquals(copy.measure.high, output.measure.high); assertArrayEquals(copy.probMass.low, output.probMass.low); assertArrayEquals(copy.distances.low, output.distances.low); assertArrayEquals(copy.measure.low, output.measure.low); InterpolationMeasure result = output.scale(0.9); assertArrayEquals(copy.probMass.low, output.probMass.low); assertArrayEquals(copy.distances.low, output.distances.low); assertArrayEquals(copy.measure.low, output.measure.low); assertArrayEquals(copy.probMass.high, output.probMass.high); assertArrayEquals(copy.distances.high, output.distances.high); assertArrayEquals(copy.measure.high, output.measure.high); for (int i = 0; i < dimensions; i++) { assertEquals(2 * i * 0.9, result.probMass.high[i]); assertEquals(4 * i * 0.9, result.distances.high[i]); assertEquals(6 * i * 0.9, result.measure.high[i]); assertEquals((2 * i + 1) * 0.9, result.probMass.low[i]); assertEquals((4 * i + 2) * 0.9, result.distances.low[i]); assertEquals((6 * i + 3) * 0.9, result.measure.low[i]); } } } ================================================ FILE: Java/core/src/test/java/com/amazon/randomcutforest/returntypes/NeighborTest.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.returntypes; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.containsInAnyOrder; import static org.junit.jupiter.api.Assertions.assertArrayEquals; import static org.junit.jupiter.api.Assertions.assertEquals; import java.util.ArrayList; import java.util.List; import org.junit.jupiter.api.Test; public class NeighborTest { @Test public void testNew() { float[] point = new float[] { 1.0f, -2.0f, 3.3f }; double distance = 1234.5; List timestamps = new ArrayList<>(); timestamps.add(99999L); timestamps.add(99L); Neighbor neighbor = new Neighbor(point, distance, timestamps); assertArrayEquals(point, neighbor.point); assertEquals(distance, neighbor.distance); assertThat(neighbor.sequenceIndexes, containsInAnyOrder(timestamps.toArray())); } } ================================================ FILE: Java/core/src/test/java/com/amazon/randomcutforest/returntypes/OneSidedConvergingDiVectorTest.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.returntypes; import static com.amazon.randomcutforest.TestUtils.EPSILON; import static org.junit.jupiter.api.Assertions.assertArrayEquals; import static org.junit.jupiter.api.Assertions.assertEquals; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; public class OneSidedConvergingDiVectorTest { private boolean highIsCritical; private double precision; private int minValuesAccepted; private int maxValuesAccepted; private int dimensions; private OneSidedConvergingDiVectorAccumulator accumulator; @BeforeEach public void setUp() { highIsCritical = true; precision = 0.1; minValuesAccepted = 5; maxValuesAccepted = 100; dimensions = 2; accumulator = new OneSidedConvergingDiVectorAccumulator(dimensions, highIsCritical, precision, minValuesAccepted, maxValuesAccepted); } @Test public void testGetConvergingValue() { DiVector vector = new DiVector(dimensions); vector.high[0] = 1.1; vector.low[1] = 2.3; vector.high[1] = 9.6; assertEquals(1.1 + 2.3 + 9.6, accumulator.getConvergingValue(vector), EPSILON); } @Test public void testAccumulateValue() { assertEquals(accumulator.getWitnesses(), 0); assertEquals(accumulator.getMean(), 0); assertEquals(accumulator.getDeviation(), 0); DiVector vector1 = new DiVector(dimensions); vector1.high[0] = 1.1; vector1.low[1] = 2.3; vector1.high[1] = 9.6; accumulator.accept(vector1); DiVector result = accumulator.getAccumulatedValue(); assertArrayEquals(vector1.high, result.high, EPSILON); assertArrayEquals(vector1.low, result.low, EPSILON); DiVector vector2 = new DiVector(dimensions); vector2.high[0] = 1.1; vector2.low[1] = 2.3; vector2.high[1] = 9.6; accumulator.accept(vector2); result = accumulator.getAccumulatedValue(); DiVector.addToLeft(vector1, vector2); assertArrayEquals(vector1.high, result.high, EPSILON); assertArrayEquals(vector1.low, result.low, EPSILON); for (int i = 0; i < 5; i++) { accumulator.accept(vector2); } assertEquals(accumulator.getWitnesses(), 3); assertEquals(accumulator.getDeviation(), 0, 1e-6f); assertEquals(accumulator.getMean(), 13, 1e-6f); } } ================================================ FILE: Java/core/src/test/java/com/amazon/randomcutforest/returntypes/OneSidedConvergingDoubleAccumulatorTest.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.returntypes; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertTrue; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; /** * This test doubles as a test of the abstract OneSidedStdDevAccumulator class */ public class OneSidedConvergingDoubleAccumulatorTest { private boolean highIsCritical; private double precision; private int minValuesAccepted; private int maxValuesAccepted; private OneSidedConvergingDoubleAccumulator accumulator; @BeforeEach public void setUp() { highIsCritical = true; precision = 0.1; minValuesAccepted = 5; maxValuesAccepted = 100; accumulator = new OneSidedConvergingDoubleAccumulator(highIsCritical, precision, minValuesAccepted, maxValuesAccepted); } @Test public void testGetConvergingValue() { assertEquals(1.23, accumulator.getConvergingValue(1.23)); assertEquals(-1001.1001, accumulator.getConvergingValue(-1001.1001)); } @Test public void testAccumulateValue() { double sum = 0.0; for (int i = 0; i < 10; i++) { double value = Math.random(); accumulator.accept(value); sum += value; assertEquals(sum, accumulator.getAccumulatedValue()); } } @Test public void testConvergenceHighIsCritical() { accumulator.accept(0.0); accumulator.accept(10.0); accumulator.accept(0.0); accumulator.accept(10.0); // less than minValuesAccepted assertEquals(4, accumulator.getValuesAccepted()); assertFalse(accumulator.isConverged()); double expectedSum = 20.0; assertEquals(expectedSum, accumulator.getAccumulatedValue()); // each high value should result in a witness to convergence // we need 1.0 / precision witnesses in order to converge for (int i = 0; i < 1.0 / precision - 1; i++) { accumulator.accept(0.0); accumulator.accept(10.0); assertEquals(6 + 2 * i, accumulator.getValuesAccepted()); assertFalse(accumulator.isConverged()); expectedSum += 10.0; assertEquals(expectedSum, accumulator.getAccumulatedValue()); } accumulator.accept(0.0); assertFalse(accumulator.isConverged()); // the last required high value accumulator.accept(10.0); assertTrue(accumulator.isConverged()); expectedSum += 10.0; assertEquals(expectedSum, accumulator.getAccumulatedValue()); } @Test public void testConvergenceLowIsCritical() { highIsCritical = false; accumulator = new OneSidedConvergingDoubleAccumulator(highIsCritical, precision, minValuesAccepted, maxValuesAccepted); accumulator.accept(0.0); accumulator.accept(10.0); accumulator.accept(0.0); accumulator.accept(10.0); // less than minValuesAccepted assertFalse(accumulator.isConverged()); double expectedSum = 20.0; assertEquals(expectedSum, accumulator.getAccumulatedValue()); // each high value should result in a witness to convergence // we need 1.0 / precision witnesses in order to converge for (int i = 0; i < 1.0 / precision - 1; i++) { accumulator.accept(0.0); accumulator.accept(10.0); assertFalse(accumulator.isConverged()); expectedSum += 10.0; assertEquals(expectedSum, accumulator.getAccumulatedValue()); } accumulator.accept(10.0); assertFalse(accumulator.isConverged()); // the last required low value accumulator.accept(0.0); assertTrue(accumulator.isConverged()); expectedSum += 10.0; assertEquals(expectedSum, accumulator.getAccumulatedValue()); } } ================================================ FILE: Java/core/src/test/java/com/amazon/randomcutforest/returntypes/RangeVectorTest.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.returntypes; import static org.junit.jupiter.api.Assertions.assertArrayEquals; import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; import static org.junit.jupiter.api.Assertions.assertThrows; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; public class RangeVectorTest { int dimensions; private RangeVector vector; @BeforeEach public void setUp() { dimensions = 3; vector = new RangeVector(dimensions); } @Test public void testNew() { assertThrows(IllegalArgumentException.class, () -> new RangeVector(0)); assertThrows(IllegalArgumentException.class, () -> new RangeVector(new float[0])); float[] expected = new float[dimensions]; assertArrayEquals(expected, vector.values); assertArrayEquals(expected, vector.upper); assertArrayEquals(expected, vector.lower); float[] another = new float[0]; assertThrows(IllegalArgumentException.class, () -> new RangeVector(another, another, another)); assertThrows(IllegalArgumentException.class, () -> new RangeVector(expected, expected, new float[dimensions + 1])); assertThrows(IllegalArgumentException.class, () -> new RangeVector(expected, new float[dimensions + 1], expected)); assertThrows(IllegalArgumentException.class, () -> new RangeVector(new float[dimensions + 1], expected, expected)); assertDoesNotThrow(() -> new RangeVector(expected, expected, expected)); assertThrows(IllegalArgumentException.class, () -> new RangeVector(expected, new float[] { -1f, 0f, 0f }, expected)); assertDoesNotThrow(() -> new RangeVector(expected, expected, new float[] { -1f, 0f, 0f })); assertThrows(IllegalArgumentException.class, () -> new RangeVector(expected, new float[] { 1f, 0f, 0f }, new float[] { 1f, 0f, 0f })); assertDoesNotThrow(() -> new RangeVector(expected, new float[] { 1f, 0f, 0f }, new float[] { -1f, 0f, 0f })); } @Test public void testScale() { vector.upper[0] = 1.1f; vector.upper[2] = 3.1f; vector.upper[1] = 3.1f; vector.lower[1] = -2.2f; float z = 9.9f; assertThrows(IllegalArgumentException.class, () -> vector.scale(0, -1.0f)); assertThrows(IllegalArgumentException.class, () -> vector.scale(-1, 1.0f)); assertThrows(IllegalArgumentException.class, () -> vector.scale(dimensions + 1, 1.0f)); vector.scale(0, z); float[] expected = new float[] { 1.1f * 9.9f, 3.1f, 3.1f }; assertArrayEquals(expected, vector.upper, 1e-6f); expected = new float[] { 0.0f, -2.2f, 0.0f }; assertArrayEquals(expected, vector.lower); vector.scale(1, 2 * z); assertArrayEquals(new float[] { 1.1f * 9.9f, 3.1f * 2 * z, 3.1f }, vector.upper, 1e-6f); assertArrayEquals(new float[] { 0f, -2.2f * 2 * z, 0f }, vector.lower, 1e-6f); } @Test public void testShift() { vector.upper[0] = 1.1f; vector.upper[2] = 3.1f; vector.lower[1] = -2.2f; float z = -9.9f; assertThrows(IllegalArgumentException.class, () -> vector.shift(-1, z)); assertThrows(IllegalArgumentException.class, () -> vector.shift(dimensions + 1, z)); vector.shift(0, z); float[] expected = new float[] { 1.1f - 9.9f, 0.0f, 3.1f }; assertArrayEquals(expected, vector.upper, 1e-6f); expected = new float[] { z, -2.2f, 0.0f }; assertArrayEquals(expected, vector.lower); assertArrayEquals(new float[] { z, 0, 0 }, vector.values, 1e-6f); } } ================================================ FILE: Java/core/src/test/java/com/amazon/randomcutforest/returntypes/SampleSummaryTest.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.returntypes; import static com.amazon.randomcutforest.CommonUtils.toFloatArray; import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; import static org.junit.jupiter.api.Assertions.assertThrows; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.Random; import java.util.function.BiFunction; import org.junit.jupiter.api.Test; import com.amazon.randomcutforest.summarization.Summarizer; import com.amazon.randomcutforest.testutils.NormalMixtureTestData; import com.amazon.randomcutforest.util.Weighted; public class SampleSummaryTest { /** * this class tests the return type data structure whereas * randomcutforest.SampleSummaryTest tests tha summarization algorithms. */ int dataSize = 20000; int newDimensions = 2; Random random = new Random(); @Test public void testConstructor() { assertThrows(IllegalArgumentException.class, () -> new SampleSummary(Collections.emptyList(), 0.6)); float[][] points = getData(dataSize, newDimensions, random.nextInt(), Summarizer::L2distance); ArrayList> weighted = new ArrayList<>(); for (float[] point : points) { // testing 0 weight weighted.add(new Weighted<>(point, 0.0f)); } assertThrows(IllegalArgumentException.class, () -> new SampleSummary(weighted, 0.1)); assertThrows(IllegalArgumentException.class, () -> new SampleSummary(weighted, 1.3)); assertThrows(IllegalArgumentException.class, () -> new SampleSummary(weighted)); weighted.get(0).weight = Float.NaN; assertThrows(IllegalArgumentException.class, () -> new SampleSummary(weighted)); weighted.get(0).weight = Float.POSITIVE_INFINITY; assertThrows(IllegalArgumentException.class, () -> new SampleSummary(weighted)); weighted.get(0).weight = -1.0f; assertThrows(IllegalArgumentException.class, () -> new SampleSummary(weighted)); weighted.get(0).weight = 1.0f; assertDoesNotThrow(() -> new SampleSummary(weighted)); weighted.get(1).index = new float[newDimensions + 1]; assertThrows(IllegalArgumentException.class, () -> new SampleSummary(weighted)); weighted.get(1).index = new float[newDimensions]; weighted.get(1).index[0] = Float.NaN; assertThrows(IllegalArgumentException.class, () -> new SampleSummary(weighted)); weighted.get(1).index[0] = Float.NEGATIVE_INFINITY; assertThrows(IllegalArgumentException.class, () -> new SampleSummary(weighted)); weighted.get(1).index[0] = -1.0f; SampleSummary summary = new SampleSummary(weighted); } @Test public void addTypicalTest() { float[][] points = getData(dataSize, newDimensions, random.nextInt(), Summarizer::L2distance); ArrayList> weighted = new ArrayList<>(); for (float[] point : points) { // testing 0 weight weighted.add(new Weighted<>(point, 1.0f)); } SampleSummary summary = new SampleSummary(weighted); assertThrows(IllegalArgumentException.class, () -> summary.addTypical(new float[1][2], new float[2], new float[2][2])); assertDoesNotThrow(() -> summary.addTypical(new float[0][2], new float[0], new float[0][2])); assertDoesNotThrow(() -> summary.addTypical(new float[2][4], new float[2], new float[2][4])); assertThrows(IllegalArgumentException.class, () -> summary.addTypical(new float[2][4], new float[2], new float[2][2])); assertThrows(IllegalArgumentException.class, () -> summary.addTypical(new float[][] { new float[2], new float[3] }, new float[2], new float[2][2])); assertThrows(IllegalArgumentException.class, () -> summary.addTypical(new float[][] { new float[2], new float[3] }, new float[2], new float[2][1])); assertThrows(IllegalArgumentException.class, () -> summary.addTypical(new float[2][4], new float[2], new float[1][4])); } public float[][] getData(int dataSize, int newDimensions, int seed, BiFunction distance) { double baseMu = 0.0; double baseSigma = 1.0; double anomalyMu = 0.0; double anomalySigma = 1.0; double transitionToAnomalyProbability = 0.0; // ignoring anomaly cluster for now double transitionToBaseProbability = 1.0; Random prg = new Random(0); NormalMixtureTestData generator = new NormalMixtureTestData(baseMu, baseSigma, anomalyMu, anomalySigma, transitionToAnomalyProbability, transitionToBaseProbability); double[][] data = generator.generateTestData(dataSize, newDimensions, seed); float[][] floatData = new float[dataSize][]; float[] allZero = new float[newDimensions]; float[] sigma = new float[newDimensions]; Arrays.fill(sigma, 1f); double scale = distance.apply(allZero, sigma); for (int i = 0; i < dataSize; i++) { // shrink, shift at random int nextD = prg.nextInt(newDimensions); for (int j = 0; j < newDimensions; j++) { data[i][j] *= 1.0 / (3.0); // standard deviation adds up across dimension; taking square root // and using s 3 sigma ball if (j == nextD) { if (prg.nextDouble() < 0.5) data[i][j] += 2.0 * scale; else data[i][j] -= 2.0 * scale; } } floatData[i] = toFloatArray(data[i]); } return floatData; } } ================================================ FILE: Java/core/src/test/java/com/amazon/randomcutforest/returntypes/TimedRangeVectorTest.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.returntypes; import static org.junit.jupiter.api.Assertions.assertArrayEquals; import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; public class TimedRangeVectorTest { int dimensions; int horizon; private TimedRangeVector vector; @BeforeEach public void setUp() { dimensions = 4; horizon = 2; vector = new TimedRangeVector(dimensions, horizon); } @Test public void testNew() { assertThrows(IllegalArgumentException.class, () -> new TimedRangeVector(2, -2)); assertThrows(IllegalArgumentException.class, () -> new TimedRangeVector(-2, 2)); assertThrows(IllegalArgumentException.class, () -> new TimedRangeVector(5, 2)); assertDoesNotThrow(() -> new TimedRangeVector(6, 2)); assertThrows(IllegalArgumentException.class, () -> new TimedRangeVector(new RangeVector(8), 3)); assertDoesNotThrow(() -> new TimedRangeVector(new RangeVector(9), 3)); assertThrows(IllegalArgumentException.class, () -> new TimedRangeVector(new RangeVector(5), new long[2], new long[2], new long[2])); assertThrows(IllegalArgumentException.class, () -> new TimedRangeVector(new RangeVector(4), new long[2], new long[2], new long[1])); assertThrows(IllegalArgumentException.class, () -> new TimedRangeVector(new RangeVector(4), new long[2], new long[1], new long[1])); } @Test public void testScale() { assertTrue(vector.timeStamps.length == 2); vector.timeStamps[0] = 100L; vector.upperTimeStamps[0] = 120L; vector.lowerTimeStamps[0] = -82L; vector.lowerTimeStamps[1] = -100L; assertThrows(IllegalArgumentException.class, () -> vector.scaleTime(-1, 1.0)); assertThrows(IllegalArgumentException.class, () -> vector.scaleTime(3, 1.0)); assertThrows(IllegalArgumentException.class, () -> vector.scaleTime(0, -1.0)); vector.scaleTime(0, 0.5); assertArrayEquals(vector.timeStamps, new long[] { 50, 0 }); assertArrayEquals(vector.upperTimeStamps, new long[] { 60, 0 }); assertArrayEquals(vector.lowerTimeStamps, new long[] { -41, -100 }); } @Test public void testShift() { vector.timeStamps[0] = 100L; vector.upperTimeStamps[0] = 120L; vector.lowerTimeStamps[0] = -82L; vector.lowerTimeStamps[1] = -100L; assertThrows(IllegalArgumentException.class, () -> vector.shiftTime(-1, 1L)); assertThrows(IllegalArgumentException.class, () -> vector.shiftTime(3, 1L)); vector.shiftTime(1, 13); TimedRangeVector newVector = new TimedRangeVector(vector); assertArrayEquals(newVector.timeStamps, new long[] { 100, 13 }); assertArrayEquals(newVector.upperTimeStamps, new long[] { 120, 13 }); assertArrayEquals(newVector.lowerTimeStamps, new long[] { -82, -87 }); newVector.shiftTime(1, -130); assertArrayEquals(vector.timeStamps, new long[] { 100, 13 }); assertArrayEquals(vector.upperTimeStamps, new long[] { 120, 13 }); assertArrayEquals(vector.lowerTimeStamps, new long[] { -82, -87 }); assertThrows(IllegalArgumentException.class, () -> new TimedRangeVector(new RangeVector(4), newVector.timeStamps, new long[2], new long[2])); assertThrows(IllegalArgumentException.class, () -> new TimedRangeVector(new RangeVector(4), newVector.timeStamps, new long[] { 101L, 0L }, new long[2])); TimedRangeVector another = new TimedRangeVector(new RangeVector(4), newVector.timeStamps, new long[] { 101L, 0L }, newVector.lowerTimeStamps); assertArrayEquals(another.timeStamps, new long[] { 100, -117 }); assertArrayEquals(another.upperTimeStamps, new long[] { 101, 0 }); assertArrayEquals(another.lowerTimeStamps, new long[] { -82, -217 }); } } ================================================ FILE: Java/core/src/test/java/com/amazon/randomcutforest/runner/AnomalyAttributionRunnerTest.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.runner; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import java.io.BufferedReader; import java.io.IOException; import java.io.PrintWriter; import java.util.Arrays; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import com.amazon.randomcutforest.RandomCutForest; import com.amazon.randomcutforest.returntypes.DiVector; public class AnomalyAttributionRunnerTest { private int numberOfTrees; private int sampleSize; private int shingleSize; private int windowSize; private String delimiter; private boolean headerRow; private AnomalyAttributionRunner runner; private BufferedReader in; private PrintWriter out; @BeforeEach public void setUp() { numberOfTrees = 50; sampleSize = 100; shingleSize = 1; windowSize = 10; delimiter = ","; headerRow = true; runner = new AnomalyAttributionRunner(); runner.parse("--number-of-trees", Integer.toString(numberOfTrees), "--sample-size", Integer.toString(sampleSize), "--shingle-size", Integer.toString(shingleSize), "--window-size", Integer.toString(windowSize), "--delimiter", delimiter, "--header-row", Boolean.toString(headerRow)); in = mock(BufferedReader.class); out = mock(PrintWriter.class); } @Test public void testRun() throws IOException { when(in.readLine()).thenReturn("a,b").thenReturn("1.0,2.0").thenReturn("4.0,5.0").thenReturn(null); runner.run(in, out); verify(out).println("a,b,anomaly_low_0,anomaly_high_0,anomaly_low_1,anomaly_high_1"); verify(out).println("1.0,2.0,0.0,0.0,0.0,0.0"); verify(out).println("4.0,5.0,0.0,0.0,0.0,0.0"); } @Test public void testWriteHeader() { String[] line = new String[] { "a", "b" }; runner.prepareAlgorithm(2); runner.writeHeader(line, out); verify(out).println("a,b,anomaly_low_0,anomaly_high_0,anomaly_low_1,anomaly_high_1"); } @Test public void testProcessLine() { String[] line = new String[] { "1.0", "2.0" }; runner.prepareAlgorithm(2); runner.processLine(line, out); verify(out).println("1.0,2.0,0.0,0.0,0.0,0.0"); } @Test public void testAnomalyAttributionTransformer() { RandomCutForest forest = mock(RandomCutForest.class); when(forest.getDimensions()).thenReturn(2); AnomalyAttributionRunner.AnomalyAttributionTransformer transformer = new AnomalyAttributionRunner.AnomalyAttributionTransformer( forest); DiVector vector = new DiVector(2); vector.low[0] = 1.1; vector.high[1] = 2.2; when(forest.getAnomalyAttribution(new double[] { 1.0, 2.0 })).thenReturn(vector); assertEquals(Arrays.asList("1.1", "0.0", "0.0", "2.2"), transformer.getResultValues(1.0, 2.0)); assertEquals(Arrays.asList("anomaly_low_0", "anomaly_high_0", "anomaly_low_1", "anomaly_high_1"), transformer.getResultColumnNames()); assertEquals(Arrays.asList("NA", "NA", "NA", "NA"), transformer.getEmptyResultValue()); } } ================================================ FILE: Java/core/src/test/java/com/amazon/randomcutforest/runner/AnomalyScoreRunnerTest.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.runner; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import java.io.BufferedReader; import java.io.IOException; import java.io.PrintWriter; import java.util.Collections; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import com.amazon.randomcutforest.RandomCutForest; public class AnomalyScoreRunnerTest { private int numberOfTrees; private int sampleSize; private int shingleSize; private int windowSize; private String delimiter; private boolean headerRow; private AnomalyScoreRunner runner; private BufferedReader in; private PrintWriter out; @BeforeEach public void setUp() { numberOfTrees = 50; sampleSize = 100; shingleSize = 1; windowSize = 10; delimiter = ","; headerRow = true; runner = new AnomalyScoreRunner(); runner.parse("--number-of-trees", Integer.toString(numberOfTrees), "--sample-size", Integer.toString(sampleSize), "--shingle-size", Integer.toString(shingleSize), "--window-size", Integer.toString(windowSize), "--delimiter", delimiter, "--header-row", Boolean.toString(headerRow)); in = mock(BufferedReader.class); out = mock(PrintWriter.class); } @Test public void testRun() throws IOException { when(in.readLine()).thenReturn("a,b,c").thenReturn("1.0,2.0,3.0").thenReturn("4.0,5.0,6.0").thenReturn(null); runner.run(in, out); verify(out).println("a,b,c,anomaly_score"); verify(out).println("1.0,2.0,3.0,0.0"); verify(out).println("4.0,5.0,6.0,0.0"); } @Test public void testWriteHeader() { String[] line = new String[] { "a", "b", "c" }; runner.prepareAlgorithm(3); runner.writeHeader(line, out); verify(out).println("a,b,c,anomaly_score"); } @Test public void testProcessLine() { String[] line = new String[] { "1.0", "2.0", "3.0" }; runner.prepareAlgorithm(3); runner.processLine(line, out); verify(out).println("1.0,2.0,3.0,0.0"); } @Test public void testAnomalyScoreTransformer() { RandomCutForest forest = mock(RandomCutForest.class); AnomalyScoreRunner.AnomalyScoreTransformer transformer = new AnomalyScoreRunner.AnomalyScoreTransformer(forest); when(forest.getAnomalyScore(new double[] { 1.0, 2.0, 3.0 })).thenReturn(11.0); assertEquals(Collections.singletonList("11.0"), transformer.getResultValues(1.0, 2.0, 3.0)); assertEquals(Collections.singletonList("anomaly_score"), transformer.getResultColumnNames()); assertEquals(Collections.singletonList("NA"), transformer.getEmptyResultValue()); } } ================================================ FILE: Java/core/src/test/java/com/amazon/randomcutforest/runner/ArgumentParserTest.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.runner; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertTrue; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; public class ArgumentParserTest { private ArgumentParser parser; @BeforeEach public void setUp() { parser = new ArgumentParser("runner-class", "runner-description"); } @Test public void testNew() { assertEquals(100, parser.getNumberOfTrees()); assertEquals(256, parser.getSampleSize()); assertEquals(0, parser.getWindowSize()); assertEquals(0.0, parser.getTimeDecay()); assertEquals(1, parser.getShingleSize()); assertFalse(parser.getShingleCyclic()); assertEquals(",", parser.getDelimiter()); assertFalse(parser.getHeaderRow()); } @Test public void testParse() { parser.parse("--number-of-trees", "222", "--sample-size", "123", "--window-size", "50", "--shingle-size", "4", "--shingle-cyclic", "true", "--delimiter", "\t", "--header-row", "true"); assertEquals(222, parser.getNumberOfTrees()); assertEquals(123, parser.getSampleSize()); assertEquals(50, parser.getWindowSize()); assertEquals(0.02, parser.getTimeDecay()); assertEquals(4, parser.getShingleSize()); assertTrue(parser.getShingleCyclic()); assertEquals("\t", parser.getDelimiter()); assertTrue(parser.getHeaderRow()); } @Test public void testParseShortFlags() { parser.parse("-n", "222", "-s", "123", "-w", "50", "-g", "4", "-c", "true", "-d", "\t"); assertEquals(222, parser.getNumberOfTrees()); assertEquals(123, parser.getSampleSize()); assertEquals(50, parser.getWindowSize()); assertEquals(0.02, parser.getTimeDecay()); assertEquals(4, parser.getShingleSize()); assertEquals("\t", parser.getDelimiter()); } } ================================================ FILE: Java/core/src/test/java/com/amazon/randomcutforest/runner/ImputeRunnerTest.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.runner; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import java.io.BufferedReader; import java.io.PrintWriter; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; public class ImputeRunnerTest { private int numberOfTrees; private int sampleSize; private int windowSize; private String delimiter; private boolean headerRow; private String missingValueMarker; private ImputeRunner runner; private BufferedReader in; private PrintWriter out; @BeforeEach public void setUp() { numberOfTrees = 50; sampleSize = 100; windowSize = 10; delimiter = ","; missingValueMarker = "X"; headerRow = true; runner = new ImputeRunner(); runner.parse("--number-of-trees", Integer.toString(numberOfTrees), "--sample-size", Integer.toString(sampleSize), "--window-size", Integer.toString(windowSize), "--delimiter", delimiter, "--missing-value-marker", missingValueMarker, "--header-row", Boolean.toString(headerRow)); in = mock(BufferedReader.class); out = mock(PrintWriter.class); } @Test public void testRun() throws Exception { when(in.readLine()).thenReturn("a,b").thenReturn("1.0,2.0").thenReturn("4.0,X").thenReturn(null); runner.run(in, out); verify(out).println("a,b"); verify(out).println("1.0,2.0"); verify(out).println("0.0,0.0"); } @Test public void testWriteHeader() { String[] line = new String[] { "a", "b" }; runner.prepareAlgorithm(2); runner.writeHeader(line, out); verify(out).println("a,b"); } @Test public void testProcessLine() { String[] line = new String[] { "1.0", "2.0" }; runner.prepareAlgorithm(2); runner.processLine(line, out); verify(out).println("1.0,2.0"); line = new String[] { missingValueMarker, "2.0" }; runner.processLine(line, out); verify(out).println("0.0,0.0"); } } ================================================ FILE: Java/core/src/test/java/com/amazon/randomcutforest/runner/SimpleDensityRunnerTest.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.runner; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import java.io.BufferedReader; import java.io.IOException; import java.io.PrintWriter; import java.util.Arrays; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import com.amazon.randomcutforest.RandomCutForest; import com.amazon.randomcutforest.returntypes.DensityOutput; public class SimpleDensityRunnerTest { private int numberOfTrees; private int sampleSize; private int shingleSize; private int windowSize; private String delimiter; private boolean headerRow; private SimpleDensityRunner runner; private BufferedReader in; private PrintWriter out; @BeforeEach public void setUp() { numberOfTrees = 50; sampleSize = 100; shingleSize = 1; windowSize = 10; delimiter = ","; headerRow = true; runner = new SimpleDensityRunner(); runner.parse("--number-of-trees", Integer.toString(numberOfTrees), "--sample-size", Integer.toString(sampleSize), "--shingle-size", Integer.toString(shingleSize), "--window-size", Integer.toString(windowSize), "--delimiter", delimiter, "--header-row", Boolean.toString(headerRow)); in = mock(BufferedReader.class); out = mock(PrintWriter.class); } @Test public void testRun() throws IOException { when(in.readLine()).thenReturn("a,b").thenReturn("1.0,2.0").thenReturn("4.0,5.0").thenReturn(null); runner.run(in, out); verify(out).println("a,b,prob_mass_0_up,prob_mass_0_down,prob_mass_1_up,prob_mass_1_down"); verify(out).println("1.0,2.0,0.000000,0.000000,0.000000,0.000000"); verify(out).println("4.0,5.0,0.000000,0.000000,0.000000,0.000000"); } @Test public void testWriteHeader() { String[] line = new String[] { "a", "b" }; runner.prepareAlgorithm(2); runner.writeHeader(line, out); verify(out).println("a,b,prob_mass_0_up,prob_mass_0_down,prob_mass_1_up,prob_mass_1_down"); } @Test public void testProcessLine() { String[] line = new String[] { "1.0", "2.0" }; runner.prepareAlgorithm(2); runner.processLine(line, out); verify(out).println("1.0,2.0,0.000000,0.000000,0.000000,0.000000"); } @Test public void testSimpleDensityTransformer() { RandomCutForest forest = mock(RandomCutForest.class); when(forest.getDimensions()).thenReturn(2); SimpleDensityRunner.SimpleDensityTransformer transformer = new SimpleDensityRunner.SimpleDensityTransformer( forest); DensityOutput expected = new DensityOutput(2, 1); expected.probMass.high[0] = 0.0; expected.probMass.low[0] = 0.5; expected.probMass.high[1] = 0.25; expected.probMass.low[1] = 0.25; expected.measure.high[0] = 0.0; expected.measure.low[0] = 8.0; expected.measure.high[1] = 8.0; expected.measure.low[1] = 4.0; when(forest.getSimpleDensity(new double[] { 1.0, 2.0 })).thenReturn(expected); assertEquals(Arrays.asList("0.000000", "400.000000", "400.000000", "200.000000"), transformer.getResultValues(1.0, 2.0)); assertEquals(Arrays.asList("prob_mass_0_up", "prob_mass_0_down", "prob_mass_1_up", "prob_mass_1_down"), transformer.getResultColumnNames()); assertEquals(Arrays.asList("NA", "NA", "NA", "NA"), transformer.getEmptyResultValue()); } } ================================================ FILE: Java/core/src/test/java/com/amazon/randomcutforest/runner/UpdateOnlyTransformerTest.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.runner; import static org.junit.jupiter.api.Assertions.assertTrue; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import java.util.List; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import com.amazon.randomcutforest.RandomCutForest; public class UpdateOnlyTransformerTest { private RandomCutForest forest; private UpdateOnlyTransformer transformer; @BeforeEach public void setUp() { forest = mock(RandomCutForest.class); transformer = new UpdateOnlyTransformer(forest); } @Test public void testGetResultValues() { List result = transformer.getResultValues(1.0, 2.0, 3.0); assertTrue(result.isEmpty()); verify(forest).update(new double[] { 1.0, 2.0, 3.0 }); } @Test public void testGetEmptyResultValue() { assertTrue(transformer.getEmptyResultValue().isEmpty()); } @Test public void testGetResultColumnNames() { assertTrue(transformer.getResultColumnNames().isEmpty()); } } ================================================ FILE: Java/core/src/test/java/com/amazon/randomcutforest/sampler/CompactSamplerTest.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.sampler; import static com.amazon.randomcutforest.TestUtils.EPSILON; import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNotEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertNull; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.reset; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import java.util.Arrays; import java.util.Comparator; import java.util.List; import java.util.Random; import java.util.stream.Stream; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtensionContext; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; import org.junit.jupiter.params.provider.ArgumentsProvider; import org.junit.jupiter.params.provider.ArgumentsSource; import com.amazon.randomcutforest.config.Config; public class CompactSamplerTest { private static int sampleSize = 256; private static double lambda = 0.01; private static long seed = 42L; private static class SamplerProvider implements ArgumentsProvider { @Override public Stream provideArguments(ExtensionContext context) throws Exception { Random random1 = spy(new Random(seed)); CompactSampler sampler1 = CompactSampler.builder().capacity(sampleSize).timeDecay(lambda).random(random1) .initialAcceptFraction(0.1).storeSequenceIndexesEnabled(false).build(); Random random2 = spy(new Random(seed)); CompactSampler sampler2 = CompactSampler.builder().capacity(sampleSize).timeDecay(lambda).random(random2) .initialAcceptFraction(0.1).storeSequenceIndexesEnabled(true).build(); CompactSampler sampler3 = CompactSampler.builder().capacity(sampleSize).timeDecay(lambda).random(random1) .initialAcceptFraction(1.0).storeSequenceIndexesEnabled(false).build(); return Stream.of(Arguments.of(random1, sampler1), Arguments.of(random2, sampler2), Arguments.of(random1, sampler3)); } } @ParameterizedTest @ArgumentsSource(SamplerProvider.class) public void testNew(Random random, CompactSampler sampler) { // test CompactSampler fields not defined in the IStreamSampler interface assertEquals(lambda, sampler.getTimeDecay()); assertNotNull(sampler.getWeightArray()); assertNotNull(sampler.getPointIndexArray()); long seq = new Random().nextLong(); sampler.setMaxSequenceIndex(seq); assertEquals(sampler.getMaxSequenceIndex(), seq); assertFalse(sampler.isFull()); assertFalse(sampler.isReady()); double newLambda = new Random().nextDouble(); sampler.setTimeDecay(newLambda); assertEquals(sampler.getConfig(Config.TIME_DECAY), newLambda); sampler.setConfig(Config.TIME_DECAY, lambda + newLambda); assertEquals(sampler.getTimeDecay(), lambda + newLambda, 1e-10); assertEquals(sampler.getMostRecentTimeDecayUpdate(), seq); sampler.setMostRecentTimeDecayUpdate(0L); assertEquals(sampler.getMostRecentTimeDecayUpdate(), 0L); assertThrows(IllegalArgumentException.class, () -> sampler.getConfig("foo")); assertThrows(IllegalArgumentException.class, () -> sampler.setConfig("bar", 0L)); if (sampler.isStoreSequenceIndexesEnabled()) { assertNotNull(sampler.getSequenceIndexArray()); } else { assertNull(sampler.getSequenceIndexArray()); } assertThrows(IllegalStateException.class, () -> sampler.addPoint(1)); assertDoesNotThrow(() -> sampler.addPoint(null)); } @Test public void testNewFromExistingWeightsParameters() { int sampleSize = 3; double lambda = 0.1; // weight array is valid heap float[] weight = { 0.4f, 0.3f, 0.2f }; int[] pointIndex = { 1, 2, 3 }; assertThrows(IllegalArgumentException.class, () -> new CompactSampler.Builder<>().capacity(sampleSize).size(weight.length).timeDecay(lambda) .random(new Random()).weight(weight).pointIndex(pointIndex).sequenceIndex(null) .storeSequenceIndexesEnabled(true).validateHeap(true).build()); } @Test public void testNewFromExistingWeights() { int sampleSize = 3; double lambda = 0.1; // weight array is valid heap float[] weight = { 0.4f, 0.3f, 0.2f }; int[] pointIndex = { 1, 2, 3 }; CompactSampler sampler = new CompactSampler.Builder<>().capacity(sampleSize).size(weight.length) .timeDecay(lambda).random(new Random()).weight(weight).pointIndex(pointIndex).sequenceIndex(null) .validateHeap(true).build(); assertFalse(sampler.getEvictedPoint().isPresent()); assertFalse(sampler.isStoreSequenceIndexesEnabled()); assertEquals(3, sampler.size()); assertNull(sampler.getSequenceIndexArray()); for (int i = 0; i < 3; i++) { assertEquals(weight[i], sampler.weight[i]); assertEquals(pointIndex[i], sampler.pointIndex[i]); } sampler.setMaxSequenceIndex(10L); sampler.setTimeDecay(lambda * 2); assertNotEquals(sampler.accumuluatedTimeDecay, 0); sampler.getWeightedSample(); assertEquals(sampler.accumuluatedTimeDecay, 0); } @Test public void testUniformSampler() { CompactSampler uniformSampler = CompactSampler.uniformSampler(sampleSize, seed, false); assertFalse(uniformSampler.getEvictedPoint().isPresent()); assertFalse(uniformSampler.isReady()); assertFalse(uniformSampler.isFull()); assertEquals(sampleSize, uniformSampler.getCapacity()); assertEquals(0, uniformSampler.size()); assertEquals(0.0, uniformSampler.getTimeDecay()); } @Test public void testBuilderClass() { assertThrows(IllegalArgumentException.class, () -> new CompactSampler.Builder<>().capacity(0).initialAcceptFraction(0.5).build()); assertThrows(IllegalArgumentException.class, () -> new CompactSampler.Builder<>().capacity(1).initialAcceptFraction(0).build()); assertThrows(IllegalArgumentException.class, () -> new CompactSampler.Builder<>().capacity(1).size(1).build()); assertThrows(IllegalArgumentException.class, () -> new CompactSampler.Builder<>().capacity(1).validateHeap(true).build()); assertThrows(IllegalArgumentException.class, () -> new CompactSampler.Builder<>().capacity(1).weight(new float[] { 0 }).build()); assertThrows(IllegalArgumentException.class, () -> new CompactSampler.Builder<>().capacity(1) .sequenceIndex(new long[] { 0 }).storeSequenceIndexesEnabled(true).build()); assertThrows(IllegalArgumentException.class, () -> new CompactSampler.Builder<>().capacity(1).pointIndex(new int[] { 0 }).build()); assertThrows(IllegalArgumentException.class, () -> new CompactSampler.Builder<>().capacity(1) .weight(new float[0]).pointIndex(new int[] { 0 }).build()); assertThrows(IllegalArgumentException.class, () -> new CompactSampler.Builder<>().capacity(1) .weight(new float[] { 0 }).pointIndex(new int[0]).build()); assertThrows(IllegalArgumentException.class, () -> new CompactSampler.Builder<>().capacity(1).weight(new float[] { 0 }).pointIndex(new int[] { 0 }) .sequenceIndex(new long[0]).storeSequenceIndexesEnabled(true).build()); assertDoesNotThrow(() -> new CompactSampler.Builder<>().capacity(1).weight(new float[] { 0 }) .pointIndex(new int[] { 0 }).sequenceIndex(new long[] { 0 }).storeSequenceIndexesEnabled(true).build()); assertDoesNotThrow(() -> new CompactSampler.Builder<>().capacity(1).weight(new float[] { 0 }) .pointIndex(new int[] { 0 }).build()); } @ParameterizedTest @ArgumentsSource(SamplerProvider.class) public void testAddPoint(Random random, CompactSampler sampler) { when(random.nextDouble()).thenReturn(0.0).thenReturn(0.5).thenReturn(0.0).thenReturn(0.01).thenReturn(0.0) .thenReturn(0.99); sampler.acceptPoint(10L); double weight1 = sampler.acceptPointState.getWeight(); sampler.addPoint(1); sampler.acceptPoint(11L); double weight2 = sampler.acceptPointState.getWeight(); // acceptstate is non-null assertThrows(IllegalArgumentException.class, () -> sampler.addPoint(12, 2.0f, 0L)); sampler.addPoint(12); assertThrows(IllegalArgumentException.class, () -> sampler.acceptPoint(12L, -1f)); sampler.acceptPoint(12L, 0f); assertNull(sampler.acceptPointState); sampler.acceptPoint(12L); double weight3 = sampler.acceptPointState.getWeight(); sampler.addPoint(123); assertEquals(3, sampler.size()); assertEquals(sampleSize, sampler.getCapacity()); List> samples = sampler.getWeightedSample(); samples.sort(Comparator.comparing(Weighted::getWeight)); assertEquals(3, samples.size()); assertEquals(123, samples.get(0).getValue()); assertEquals(weight3, samples.get(0).getWeight()); assertEquals(1, samples.get(1).getValue()); assertEquals(weight1, samples.get(1).getWeight()); assertEquals(12, samples.get(2).getValue()); assertEquals(weight2, samples.get(2).getWeight()); } @ParameterizedTest @ArgumentsSource(SamplerProvider.class) public void testAcceptPoint(Random random, CompactSampler sampler) { assertThrows(IllegalArgumentException.class, () -> sampler.addPoint(null, 1, 0L)); assertThrows(IllegalArgumentException.class, () -> sampler.addPoint(null, -1, 0L)); assertDoesNotThrow(() -> sampler.addPoint(0, 0f, 0L)); assertEquals(sampler.size, 1); // The sampler should accept all samples until initial fraction for (int i = 0; i < sampleSize * sampler.initialAcceptFraction; i++) { assertTrue(sampler.acceptPoint(i)); assertNotNull(sampler.acceptPointState); sampler.addPoint(i); } assertTrue(sampler.initialAcceptProbability(sampler.size) < 1.0); for (int i = 0; i < sampleSize * 10; i++) { if (sampler.acceptPoint(i)) { sampler.addPoint(i); } } assertTrue(sampler.isFull()); assertTrue(sampler.isReady()); assertThrows(IllegalStateException.class, () -> sampler.addPoint(sampleSize)); assertThrows(IllegalArgumentException.class, () -> sampler.addPoint(sampleSize, 1.0f, 0L)); sampler.setTimeDecay(0); // we should only accept sequences of value samplesize - 1 or higher assertThrows(IllegalStateException.class, () -> sampler.acceptPoint(sampleSize - 2)); // In subsequent calls to sample, either the result is empty or else // the new weight is smaller than the evicted weight int numAccepted = 0; for (int i = 10 * sampleSize; i < 12 * sampleSize; i++) { if (sampler.acceptPoint(i)) { numAccepted++; assertTrue(sampler.getEvictedPoint().isPresent()); assertNotNull(sampler.acceptPointState); Weighted evictedPoint = (Weighted) sampler.getEvictedPoint().get(); assertTrue(sampler.acceptPointState.getWeight() < evictedPoint.getWeight()); sampler.addPoint(i); } } assertTrue(numAccepted > 0, "the sampler did not accept any points"); } @ParameterizedTest @ArgumentsSource(SamplerProvider.class) public void testUpdate(Random random, CompactSampler compactSampler) { CompactSampler sampler = spy(compactSampler); for (int i = 0; i < sampleSize * sampler.initialAcceptFraction; i++) { assertTrue(sampler.update(i, i)); } int num = (int) Math.ceil(sampleSize * sampler.initialAcceptFraction); // all points should be added to the sampler until the sampler is full assertEquals(num, sampler.size()); verify(sampler, times(num)).addPoint(any()); reset(sampler); int numSampled = 0; for (int i = num; i < 2 * sampleSize; i++) { if (sampler.update(i, i)) { numSampled++; } } assertTrue(numSampled > 0, "no new values were sampled"); assertTrue(sampler.initialAcceptFraction > 0.5 || numSampled < 2 * sampleSize - num, "all values were sampled"); verify(sampler, times(numSampled)).addPoint(any()); } @ParameterizedTest @ArgumentsSource(SamplerProvider.class) public void testGetScore(Random random, CompactSampler sampler) { when(random.nextDouble()).thenReturn(0.0).thenReturn(0.25).thenReturn(0.0).thenReturn(0.75).thenReturn(0.0) .thenReturn(0.50).thenReturn(0.5).thenReturn(0.1).thenReturn(1.3); sampler.update(1, 101); sampler.update(2, 102); sampler.update(3, 103); double[] expectedScores = new double[3]; expectedScores[0] = -lambda * 101L + Math.log(-Math.log(0.25)); expectedScores[1] = -lambda * 102L + Math.log(-Math.log(0.75)); expectedScores[2] = -lambda * 103L + Math.log(-Math.log(0.50)); Arrays.sort(expectedScores); assertFalse(sampler.acceptPoint(104)); List> samples = sampler.getWeightedSample(); samples.sort(Comparator.comparing(Weighted::getWeight)); for (int i = 0; i < 3; i++) { assertEquals(expectedScores[i], samples.get(i).getWeight(), EPSILON); } } @ParameterizedTest @ArgumentsSource(SamplerProvider.class) public void testValidateHeap(Random random, CompactSampler sampler) { // populate the heap for (int i = 0; i < 2 * sampleSize; i++) { sampler.update(i, i); } float[] weightArray = sampler.getWeightArray(); // swapping a weight value with one of its children will break the heap property int i = sampleSize / 4; float f = weightArray[i]; weightArray[i] = weightArray[2 * i + 1]; weightArray[2 * i + 1] = f; assertThrows(IllegalStateException.class, () -> new CompactSampler.Builder<>().capacity(sampleSize).size(sampleSize).timeDecay(lambda) .random(random).weight(weightArray).pointIndex(sampler.getPointIndexArray()) .sequenceIndex(sampler.getSequenceIndexArray()).validateHeap(true).build()); } } ================================================ FILE: Java/core/src/test/java/com/amazon/randomcutforest/state/RandomCutForestMapperTest.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.state; import static org.junit.jupiter.api.Assertions.assertArrayEquals; import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.fail; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.nio.charset.StandardCharsets; import java.util.Random; import java.util.stream.Stream; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.EnumSource; import org.junit.jupiter.params.provider.MethodSource; import com.amazon.randomcutforest.ComponentList; import com.amazon.randomcutforest.RandomCutForest; import com.amazon.randomcutforest.config.Precision; import com.amazon.randomcutforest.executor.PointStoreCoordinator; import com.amazon.randomcutforest.executor.SamplerPlusTree; import com.amazon.randomcutforest.preprocessor.IPreprocessor; import com.amazon.randomcutforest.sampler.CompactSampler; import com.amazon.randomcutforest.state.preprocessor.PreprocessorMapper; import com.amazon.randomcutforest.state.preprocessor.PreprocessorState; import com.amazon.randomcutforest.store.PointStore; import com.amazon.randomcutforest.testutils.NormalMixtureTestData; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.MapperFeature; import com.fasterxml.jackson.databind.ObjectMapper; public class RandomCutForestMapperTest { private static int dimensions = 5; private static int sampleSize = 128; private Version version = new Version(); private static Stream compactForestProvider() { RandomCutForest.Builder builder = RandomCutForest.builder().compact(true).dimensions(dimensions) .sampleSize(sampleSize); RandomCutForest cachedFloat = builder.boundingBoxCacheFraction(new Random().nextDouble()).build(); RandomCutForest uncachedFloat = builder.boundingBoxCacheFraction(0.0).build(); return Stream.of(cachedFloat, uncachedFloat); } private RandomCutForestMapper mapper; @BeforeEach public void setUp() { mapper = new RandomCutForestMapper(); mapper.setSaveExecutorContextEnabled(true); } public void assertCompactForestEquals(RandomCutForest forest, RandomCutForest forest2, boolean saveTree) { assertEquals(forest.getDimensions(), forest2.getDimensions()); assertEquals(forest.getSampleSize(), forest2.getSampleSize()); assertEquals(forest.getOutputAfter(), forest2.getOutputAfter()); assertEquals(forest.getNumberOfTrees(), forest2.getNumberOfTrees()); assertEquals(forest.getTimeDecay(), forest2.getTimeDecay()); assertEquals(forest.isStoreSequenceIndexesEnabled(), forest2.isStoreSequenceIndexesEnabled()); assertEquals(forest.isCompact(), forest2.isCompact()); assertEquals(forest.getPrecision(), forest2.getPrecision()); assertEquals(forest.getBoundingBoxCacheFraction(), forest2.getBoundingBoxCacheFraction()); assertEquals(forest.isCenterOfMassEnabled(), forest2.isCenterOfMassEnabled()); assertEquals(forest.isParallelExecutionEnabled(), forest2.isParallelExecutionEnabled()); assertEquals(forest.getThreadPoolSize(), forest2.getThreadPoolSize()); PointStoreCoordinator coordinator = (PointStoreCoordinator) forest.getUpdateCoordinator(); PointStoreCoordinator coordinator2 = (PointStoreCoordinator) forest2.getUpdateCoordinator(); PointStore store = (PointStore) coordinator.getStore(); PointStore store2 = (PointStore) coordinator2.getStore(); assertArrayEquals(store.getRefCount(), store2.getRefCount()); assertArrayEquals(store.getStore(), store2.getStore()); assertEquals(store.getCapacity(), store2.getCapacity()); assertEquals(store.size(), store2.size()); ComponentList components = forest.getComponents(); ComponentList otherComponents = new ComponentList(forest2.getComponents()); for (int i = 0; i < components.size(); i++) { SamplerPlusTree first = (SamplerPlusTree) components.get(i); SamplerPlusTree second = (SamplerPlusTree) otherComponents.get(i); if (saveTree) { assertEquals(first.getTree().getRandomSeed(), second.getTree().getRandomSeed()); } assertEquals(((CompactSampler) first.getSampler()).getRandomSeed(), ((CompactSampler) second.getSampler()).getRandomSeed()); } } void testForest(RandomCutForest forest, Boolean saveTree) { NormalMixtureTestData testData = new NormalMixtureTestData(); for (double[] point : testData.generateTestData(sampleSize, dimensions)) { forest.update(point); } RandomCutForest forest2 = mapper.toModel(mapper.toState(forest)); assertCompactForestEquals(forest, forest2, saveTree); } @ParameterizedTest @MethodSource("compactForestProvider") public void testRoundTripForCompactForest(RandomCutForest forest) { testForest(forest, false); } @ParameterizedTest @MethodSource("compactForestProvider") public void testRoundTripForCompactForestSaveTreeState(RandomCutForest forest) { mapper.setSaveTreeStateEnabled(true); testForest(forest, true); } @ParameterizedTest @MethodSource("compactForestProvider") public void testRoundTripForCompactForestSaveTreeStatePartial(RandomCutForest forest) { mapper.setSaveTreeStateEnabled(true); mapper.setPartialTreeStateEnabled(true); testRoundTripForCompactForest(forest); } @Test void testSaveSamplers() { RandomCutForest forest = RandomCutForest.builder().compact(true).dimensions(dimensions).sampleSize(sampleSize) .numberOfTrees(1).build(); NormalMixtureTestData testData = new NormalMixtureTestData(); for (double[] point : testData.generateTestData(sampleSize, dimensions)) { forest.update(point); } mapper.setSaveSamplerStateEnabled(false); assertThrows(IllegalArgumentException.class, () -> mapper.toModel(mapper.toState(forest), 10)); mapper.setSaveSamplerStateEnabled(true); } @Test void executionContext() { ExecutionContext ec = new ExecutionContext(); RandomCutForest forest = RandomCutForest.builder().compact(true).dimensions(dimensions).sampleSize(sampleSize) .parallelExecutionEnabled(true).threadPoolSize(23).numberOfTrees(1).build(); RandomCutForest forest2 = mapper.toModel(mapper.toState(forest), ec); assertFalse(forest2.isParallelExecutionEnabled()); assertEquals(0, forest2.getThreadPoolSize()); } @Test void testVersion() { RandomCutForest forest = RandomCutForest.builder().compact(true).dimensions(dimensions).sampleSize(sampleSize) .parallelExecutionEnabled(true).threadPoolSize(23).numberOfTrees(1).build(); assertEquals(mapper.toState(forest).getVersion(), version.V4_0); } @Test void testPrecisionException() { RandomCutForest forest = RandomCutForest.builder().compact(true).dimensions(dimensions).sampleSize(sampleSize) .parallelExecutionEnabled(true).threadPoolSize(23).numberOfTrees(1).build(); RandomCutForestState state = mapper.toState(forest); assertDoesNotThrow(() -> mapper.toModel(state, 0L)); state.setPrecision(Precision.FLOAT_64.name()); assertThrows(IllegalStateException.class, () -> mapper.toModel(state, 0)); } @Test public void testRoundTripForEmptyForest() { Precision precision = Precision.FLOAT_64; RandomCutForest forest = RandomCutForest.builder().dimensions(dimensions).sampleSize(sampleSize) .numberOfTrees(1).build(); mapper.setSaveTreeStateEnabled(true); RandomCutForest forest2 = mapper.toModel(mapper.toState(forest)); assertCompactForestEquals(forest, forest2, true); } @Test public void testRoundTripForSingleNodeForest() { int dimensions = 10; long seed = new Random().nextLong(); System.out.println(" Seed " + seed); RandomCutForest forest = RandomCutForest.builder().compact(true).dimensions(dimensions).numberOfTrees(1) .precision(Precision.FLOAT_32).internalShinglingEnabled(false).randomSeed(seed).build(); Random r = new Random(seed + 1); double[] point = r.ints(dimensions, 0, 50).asDoubleStream().toArray(); for (int i = 0; i < new Random().nextInt(1000); i++) { forest.update(point); } RandomCutForestMapper mapper = new RandomCutForestMapper(); mapper.setSaveExecutorContextEnabled(true); mapper.setSaveTreeStateEnabled(true); mapper.setPartialTreeStateEnabled(true); RandomCutForest copyForest = mapper.toModel(mapper.toState(forest)); for (int i = 0; i < new Random(seed + 2).nextInt(1000); i++) { double[] anotherPoint = r.ints(dimensions, 0, 50).asDoubleStream().toArray(); assertEquals(forest.getAnomalyScore(anotherPoint), copyForest.getAnomalyScore(anotherPoint), 1e-10); forest.update(anotherPoint); copyForest.update(anotherPoint); } } private static float[] generate(int input) { return new float[] { (float) (20 * Math.sin(input / 10.0)), (float) (20 * Math.cos(input / 10.0)) }; } @Test void benchmarkMappers() { long seed = new Random().nextLong(); System.out.println(" Seed " + seed); Random random = new Random(seed); RandomCutForest rcf = RandomCutForest.builder().dimensions(2 * 10).shingleSize(10).sampleSize(628) .internalShinglingEnabled(true).randomSeed(random.nextLong()).build(); for (int i = 0; i < 10000; i++) { rcf.update(generate(i)); } RandomCutForestMapper mapper = new RandomCutForestMapper(); mapper.setSaveExecutorContextEnabled(true); mapper.setSaveTreeStateEnabled(true); for (int j = 0; j < 1000; j++) { RandomCutForest newRCF = mapper.toModel(mapper.toState(rcf)); float[] test = generate(10000 + j); assertEquals(newRCF.getAnomalyScore(test), rcf.getAnomalyScore(test), 1e-6); rcf.update(test); } } @ParameterizedTest @EnumSource(V2RCFJsonResource.class) public void testJson(V2RCFJsonResource jsonResource) throws JsonProcessingException { RandomCutForestMapper rcfMapper = new RandomCutForestMapper(); String json = getStateFromFile(jsonResource.getResource()); assertNotNull(json); ObjectMapper mapper = new ObjectMapper(); mapper.configure(MapperFeature.ACCEPT_CASE_INSENSITIVE_PROPERTIES, true); RandomCutForestState state = mapper.readValue(json, RandomCutForestState.class); RandomCutForest forest = rcfMapper.toModel(state); Random r = new Random(0); for (int i = 0; i < 20000; i++) { double[] point = r.ints(forest.getDimensions(), 0, 50).asDoubleStream().toArray(); forest.getAnomalyScore(point); forest.update(point, 0L); } assertNotNull(forest); } @ParameterizedTest @EnumSource(V2PreProcessorJsonResource.class) public void testPreprocessorJson(V2PreProcessorJsonResource jsonResource) throws JsonProcessingException { PreprocessorMapper preMapper = new PreprocessorMapper(); String json = getStateFromFile(jsonResource.getResource()); assertNotNull(json); ObjectMapper mapper = new ObjectMapper(); mapper.configure(MapperFeature.ACCEPT_CASE_INSENSITIVE_PROPERTIES, true); PreprocessorState state = mapper.readValue(json, PreprocessorState.class); IPreprocessor preprocessor = preMapper.toModel(state); assertNotNull(preprocessor); } private String getStateFromFile(String resourceFile) { try (InputStream is = RandomCutForestMapperTest.class.getResourceAsStream(resourceFile); BufferedReader rr = new BufferedReader(new InputStreamReader(is, StandardCharsets.UTF_8))) { StringBuilder b = new StringBuilder(); String line; while ((line = rr.readLine()) != null) { b.append(line); } return b.toString(); } catch (IOException e) { fail("Unable to load resource"); } return null; } } ================================================ FILE: Java/core/src/test/java/com/amazon/randomcutforest/state/V2PreProcessorJsonResource.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.state; import lombok.Getter; @Getter public enum V2PreProcessorJsonResource { Preprocessor_1("Preprocessor_1.json"), Preprocessor_2("Preprocessor_2.json"), Preprocessor_3("Preprocessor_3.json"); private final String resource; V2PreProcessorJsonResource(String resource) { this.resource = resource; } } ================================================ FILE: Java/core/src/test/java/com/amazon/randomcutforest/state/V2RCFJsonResource.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.state; import lombok.Getter; @Getter public enum V2RCFJsonResource { RCF_1("state_1.json"), RCF_2("state_2.json"), RCF_3("state_2.json"); private final String resource; V2RCFJsonResource(String resource) { this.resource = resource; } } ================================================ FILE: Java/core/src/test/java/com/amazon/randomcutforest/state/sampler/CompactSamplerMapperTest.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.state.sampler; import static org.junit.jupiter.api.Assertions.assertArrayEquals; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNull; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; import java.util.Random; import java.util.stream.Stream; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; import org.junit.jupiter.params.provider.MethodSource; import com.amazon.randomcutforest.sampler.CompactSampler; public class CompactSamplerMapperTest { private static int sampleSize = 20; private static double lambda = 0.01; private static long seed = 4444; public static Stream nonemptySamplerProvider() { CompactSampler fullSampler1 = CompactSampler.builder().capacity(sampleSize).timeDecay(lambda).randomSeed(seed) .storeSequenceIndexesEnabled(false).build(); CompactSampler fullSampler2 = CompactSampler.builder().capacity(sampleSize).timeDecay(lambda).randomSeed(seed) .storeSequenceIndexesEnabled(true).build(); Random random = new Random(); long baseIndex = 10_000; for (int i = 0; i < 100; i++) { int pointReference = random.nextInt(); fullSampler1.update(pointReference, baseIndex + i); fullSampler2.update(pointReference, baseIndex + i); } CompactSampler partiallyFullSampler1 = CompactSampler.builder().capacity(sampleSize).timeDecay(lambda) .randomSeed(seed).storeSequenceIndexesEnabled(false).build(); CompactSampler partiallyFullSampler2 = CompactSampler.builder().capacity(sampleSize).timeDecay(lambda) .randomSeed(seed).storeSequenceIndexesEnabled(true).build(); for (int i = 0; i < sampleSize / 2; i++) { int pointReference = random.nextInt(); partiallyFullSampler1.update(pointReference, baseIndex + i); partiallyFullSampler2.update(pointReference, baseIndex + i); } return Stream.of(Arguments.of("full sampler without sequence indexes", fullSampler1), Arguments.of("full sampler with sequence indexes", fullSampler2), Arguments.of("partially full sampler without sequence indexes", partiallyFullSampler1), Arguments.of("partially full sampler with sequence indexes", partiallyFullSampler2)); } public static Stream samplerProvider() { CompactSampler emptySampler1 = CompactSampler.builder().capacity(sampleSize).timeDecay(lambda).randomSeed(seed) .storeSequenceIndexesEnabled(false).build(); CompactSampler emptySampler2 = CompactSampler.builder().capacity(sampleSize).timeDecay(lambda).randomSeed(seed) .storeSequenceIndexesEnabled(true).build(); return Stream.concat(nonemptySamplerProvider(), Stream.of(Arguments.of("empty sampler without sequence indexes", emptySampler1), Arguments.of("empty sampler with sequence indexes", emptySampler2))); } private CompactSamplerMapper mapper; @BeforeEach public void setUp() { mapper = new CompactSamplerMapper(); mapper.setValidateHeapEnabled(false); } private void assertValidMapping(CompactSampler original, CompactSampler mapped) { assertArrayEquals(original.getWeightArray(), mapped.getWeightArray(), "different weight arrays"); assertArrayEquals(original.getPointIndexArray(), mapped.getPointIndexArray(), "different point index arrays"); assertEquals(original.getCapacity(), mapped.getCapacity()); assertEquals(original.size(), mapped.size()); assertEquals(original.getTimeDecay(), mapped.getTimeDecay()); assertFalse(mapped.getEvictedPoint().isPresent()); if (original.isStoreSequenceIndexesEnabled()) { assertTrue(mapped.isStoreSequenceIndexesEnabled()); assertArrayEquals(original.getSequenceIndexArray(), mapped.getSequenceIndexArray(), "different sequence index arrays"); } else { assertFalse(mapped.isStoreSequenceIndexesEnabled()); assertNull(mapped.getSequenceIndexArray()); } } @ParameterizedTest @MethodSource("nonemptySamplerProvider") public void testRoundTripInvalidHeap(String description, CompactSampler sampler) { mapper.setValidateHeapEnabled(true); CompactSamplerState state = mapper.toState(sampler); // swap to weights in the weight array in order to violate the heap property float[] weights = state.getWeight(); int index = state.getSize() / 4; float temp = weights[index]; weights[index] = weights[2 * index + 1]; weights[2 * index + 1] = temp; assertThrows(IllegalStateException.class, () -> mapper.toModel(state)); mapper.setValidateHeapEnabled(false); CompactSampler sampler2 = mapper.toModel(state); assertArrayEquals(sampler.getWeightArray(), sampler2.getWeightArray()); } } ================================================ FILE: Java/core/src/test/java/com/amazon/randomcutforest/state/store/PointStoreMapperTest.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.state.store; import static org.junit.jupiter.api.Assertions.assertArrayEquals; import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertThrows; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import com.amazon.randomcutforest.config.Precision; import com.amazon.randomcutforest.store.PointStore; import com.amazon.randomcutforest.store.PointStoreSmall; public class PointStoreMapperTest { private PointStoreMapper mapper; @BeforeEach public void setUp() { mapper = new PointStoreMapper(); } @Test public void testRoundTrip() { int dimensions = 2; int capacity = 4; PointStore store = new PointStoreSmall(dimensions, capacity); float[] point1 = { 1.1f, -22.2f }; int index1 = store.add(point1, 1); float[] point2 = { 3.3f, -4.4f }; int index2 = store.add(point2, 2); float[] point3 = { 10.1f, 100.1f }; int index3 = store.add(point3, 3); PointStore store2 = mapper.toModel(mapper.toState(store)); assertEquals(capacity, store2.getCapacity()); assertEquals(3, store2.size()); assertEquals(dimensions, store2.getDimensions()); assertArrayEquals(store.getStore(), store2.getStore()); PointStoreState state = mapper.toState(store); state.setDuplicateRefs(null); assertDoesNotThrow(() -> mapper.toModel(state)); state.setDuplicateRefs(new int[1]); assertThrows(IllegalArgumentException.class, () -> mapper.toModel(state)); state.setDuplicateRefs(new int[2]); assertDoesNotThrow(() -> mapper.toModel(state)); state.setPrecision(Precision.FLOAT_64.name()); assertThrows(IllegalArgumentException.class, () -> mapper.toModel(state)); } } ================================================ FILE: Java/core/src/test/java/com/amazon/randomcutforest/statistics/StatisticsTest.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.statistics; import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; import java.util.Random; import org.junit.jupiter.api.Test; public class StatisticsTest { @Test void constructorTest() { assertThrows(IllegalArgumentException.class, () -> new Deviation(-1)); assertThrows(IllegalArgumentException.class, () -> new Deviation(2)); Deviation newDeviation = new Deviation(new Random().nextDouble()); assertThrows(IllegalArgumentException.class, () -> newDeviation.setDiscount(-1)); assertThrows(IllegalArgumentException.class, () -> newDeviation.setDiscount(2)); assertDoesNotThrow(() -> newDeviation.setDiscount(0.519)); assertEquals(newDeviation.getDiscount(), 0.519); } @Test void getMeanTest() { double discount = new Random().nextDouble(); Deviation deviation = new Deviation(discount); assertEquals(deviation.getMean(), 0); assertTrue(deviation.isEmpty()); deviation.setCount(100); assertTrue(deviation.isEmpty()); assertTrue(deviation.count == 100); deviation.update(-0); assertEquals(101, deviation.count); assertEquals(deviation.getMean(), 0); assertFalse(deviation.isEmpty()); deviation.reset(); assertEquals(deviation.getDiscount(), discount); assertTrue(deviation.isEmpty()); } } ================================================ FILE: Java/core/src/test/java/com/amazon/randomcutforest/store/PointStoreTest.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.store; import static org.junit.jupiter.api.Assertions.assertArrayEquals; import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNotEquals; import static org.junit.jupiter.api.Assertions.assertNotSame; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; import java.util.Arrays; import java.util.Random; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; public class PointStoreTest { private int dimensions; private int capacity; private PointStore pointStore; @BeforeEach public void setUp() { dimensions = 2; capacity = 4; pointStore = new PointStoreSmall(dimensions, capacity); } @Test public void testNew() { assertEquals(dimensions, pointStore.getDimensions()); assertEquals(capacity, pointStore.getCapacity()); assertEquals(0, pointStore.size()); for (int i = 0; i < pointStore.getIndexCapacity(); i++) { assertEquals(0, pointStore.getRefCount(i)); } pointStore.add(new float[2], 0); int index = pointStore.add(new float[2], 0); assertEquals(index, 1); for (int y = 0; y < 1000; y++) { pointStore.incrementRefCount(index); } assertEquals(pointStore.getRefCount(index), 1001); int[] counts = pointStore.getRefCount(); assertEquals(counts[0], 1); assertEquals(counts[index], 1001); assertThrows(AssertionError.class, () -> pointStore.setLocation(0, 13)); assertThrows(AssertionError.class, () -> pointStore.extendLocationList(-10)); } @Test public void testConstructors() { PointStore.Builder builder = new PointStore.Builder().dynamicResizingEnabled(true); assertThrows(IllegalArgumentException.class, () -> new PointStoreSmall(builder)); builder.dimensions(1000); assertThrows(IllegalArgumentException.class, () -> new PointStoreSmall(builder)); builder.capacity(100000); assertThrows(IllegalArgumentException.class, () -> new PointStoreSmall(builder)); assertDoesNotThrow(() -> new PointStoreLarge(builder)); builder.shingleSize(3); assertThrows(IllegalArgumentException.class, () -> new PointStoreLarge(builder)); builder.shingleSize(1); builder.dimensions(2); PointStoreLarge large = new PointStoreLarge(builder); assertThrows(IllegalArgumentException.class, () -> large.checkFeasible(0)); assertEquals(large.size(), 0); large.add(new float[2], 0L); assertEquals(large.size(), 1); } @Test public void testAdd() { float[] point1 = { 1.2f, -3.4f }; int offset1 = pointStore.add(point1, 1); assertTrue(offset1 >= 0 && offset1 < capacity); assertEquals(1, pointStore.getRefCount(offset1)); assertEquals(1, pointStore.size()); float[] retrievedPoint1 = pointStore.getNumericVector(offset1); assertNotSame(point1, retrievedPoint1); assertArrayEquals(point1, retrievedPoint1); float[] point2 = { 111.2f, -333.4f }; int offset2 = pointStore.add(point2, 2); assertTrue(offset2 >= 0 && offset2 < capacity); assertEquals(1, pointStore.getRefCount(offset2)); assertEquals(2, pointStore.size()); assertNotEquals(offset1, offset2); float[] retrievedPoint2 = pointStore.getNumericVector(offset2); assertNotSame(point2, retrievedPoint2); assertArrayEquals(point2, retrievedPoint2); // check that adding a second point didn't change the first stored point's value retrievedPoint1 = pointStore.getNumericVector(offset1); assertNotSame(point1, retrievedPoint1); assertArrayEquals(point1, retrievedPoint1); } @Test public void testAddInvalid() { assertThrows(IllegalArgumentException.class, () -> pointStore.add(new float[] { 1.1f, -2.2f, 3.0f }, 0)); for (int i = 0; i < capacity; i++) { float[] point = new float[dimensions]; point[0] = (float) Math.random(); point[1] = (float) Math.random(); pointStore.add(point, i + 2); } // point store is full assertThrows(IllegalStateException.class, () -> pointStore.add(new float[] { 1.1f, -2.2f }, 0)); } @Test public void testGetInvalid() { assertThrows(IllegalArgumentException.class, () -> pointStore.getNumericVector(-1)); assertThrows(IllegalArgumentException.class, () -> pointStore.getNumericVector(capacity)); } @Test public void testIncrementRefCount() { float[] point = { 1.2f, -3.4f }; int offset = pointStore.add(point, 0); assertEquals(1, pointStore.getRefCount(offset)); pointStore.incrementRefCount(offset); assertEquals(2, pointStore.getRefCount(offset)); } @Test public void testIncrementRefCountInvalid() { assertThrows(IllegalArgumentException.class, () -> pointStore.incrementRefCount(-1)); assertThrows(IllegalArgumentException.class, () -> pointStore.incrementRefCount(0)); } @Test public void testDecrementRefCount() { float[] point = { 1.2f, -3.4f }; int offset = pointStore.add(point, 0); pointStore.incrementRefCount(offset); assertEquals(2, pointStore.getRefCount(offset)); assertEquals(1, pointStore.size()); pointStore.decrementRefCount(offset); assertEquals(1, pointStore.getRefCount(offset)); assertEquals(1, pointStore.size()); pointStore.decrementRefCount(offset); assertEquals(0, pointStore.getRefCount(offset)); assertEquals(0, pointStore.size()); } @Test public void testDecrementRefCountInvalid() { assertThrows(IllegalArgumentException.class, () -> pointStore.decrementRefCount(-1)); assertThrows(IllegalArgumentException.class, () -> pointStore.decrementRefCount(0)); } @Test public void testPointEquals() { float[] point = { 1.2f, -3.4f }; int offset = pointStore.add(point, 0); assertArrayEquals(pointStore.getNumericVector(offset), point); assertNotEquals(pointStore.getNumericVector(offset), new float[] { 5.6f, -7.8f }); } @Test public void testPointEqualsInvalid() { float[] point = { 1.2f, -3.4f }; assertThrows(IllegalArgumentException.class, () -> pointStore.getNumericVector(-1)); assertThrows(IllegalArgumentException.class, () -> pointStore.getNumericVector(0)); } @Test public void internalShinglingTestNoRotation() { int shinglesize = 10; PointStore store = new PointStore.Builder().capacity(20 * shinglesize).dimensions(shinglesize) .shingleSize(shinglesize).indexCapacity(shinglesize).internalShinglingEnabled(true) .currentStoreCapacity(1).build(); assertFalse(store.isInternalRotationEnabled()); Random random = new Random(0); float[] shingle = new float[shinglesize]; for (int i = 0; i < 10 * shinglesize - 3; i++) { shingle[(i + 3) % shinglesize] = (float) random.nextDouble(); store.add(new float[] { shingle[(i + 3) % shinglesize] }, i); } assertArrayEquals(store.getNumericVector(9 * shinglesize - 3), shingle, (float) 1e-6); assertArrayEquals(store.getInternalShingle(), shingle, (float) 1e-6); assertArrayEquals(store.transformIndices(new int[] { 0 }), new int[] { shinglesize - 1 }); assertThrows(IllegalArgumentException.class, () -> store.transformIndices(new int[] { 1 })); assertThrows(IllegalArgumentException.class, () -> store.transformIndices(new int[] { 0, 0 })); assertArrayEquals(store.transformToShingledPoint(new float[] { 0.0f }), store.transformToShingledPoint(new float[] { -0.0f }), (float) 1e-6); assertThrows(IllegalArgumentException.class, () -> store.add(new float[] { 0, 0 }, 0)); } @Test public void internalShinglingTestWithRotation() { int shinglesize = 10; PointStore store = new PointStore.Builder().capacity(20 * shinglesize).dimensions(shinglesize) .shingleSize(shinglesize).indexCapacity(shinglesize).internalShinglingEnabled(true) .internalRotationEnabled(true).currentStoreCapacity(1).build(); assertTrue(store.isInternalRotationEnabled()); Random random = new Random(0); float[] shingle = new float[shinglesize]; float[] temp = null; for (int i = 0; i < 10 * shinglesize + 5; i++) { shingle[i % shinglesize] = (float) random.nextDouble(); temp = store.transformToShingledPoint(new float[] { shingle[i % shinglesize] }); store.add(new float[] { shingle[i % shinglesize] }, i); } assertEquals(store.getNextSequenceIndex(), 10 * shinglesize + 5); assertArrayEquals(temp, shingle, (float) 1e-6); assertArrayEquals(store.getNumericVector(9 * shinglesize + 5), shingle, (float) 1e-6); assertNotEquals(store.internalShingle, store.getInternalShingle()); assertArrayEquals(store.getNumericVector(9 * shinglesize + 5), shingle); assertNotEquals(store.getNumericVector(9 * shinglesize + 4), shingle); assertArrayEquals(store.getInternalShingle(), shingle, (float) 1e-6); assertArrayEquals(store.transformIndices(new int[] { 0 }), new int[] { 5 }); assertThrows(IllegalArgumentException.class, () -> store.transformIndices(new int[] { 1 })); assertEquals(store.transformToShingledPoint(new float[] { 1, 2 }).length, 2); assertArrayEquals(store.transformToShingledPoint(new float[] { 0.0f }), store.transformToShingledPoint(new float[] { -0.0f }), (float) 1e-6); } @Test public void checkRotationAndCompact() { int shinglesize = 4; PointStore store = new PointStore.Builder().capacity(2 * shinglesize).dimensions(shinglesize) .shingleSize(shinglesize).indexCapacity(shinglesize).internalShinglingEnabled(true) .internalRotationEnabled(true).currentStoreCapacity(1).build(); for (int i = 0; i < 2 * shinglesize; i++) { store.add(new float[] { -i - 1 }, i); } for (int i = 0; i < 2 * shinglesize - shinglesize + 1; i++) { if (i != shinglesize - 1) { store.decrementRefCount(i); } } assertThrows(IllegalArgumentException.class, () -> store.getNumericVector(0)); float[] test = new float[shinglesize]; for (int i = 0; i < shinglesize; i++) { test[i] = -(i + shinglesize + 1); } test[shinglesize - 1] = -shinglesize; assertArrayEquals(store.getNumericVector(shinglesize - 1), test, 1e-6f); store.compact(); for (int i = 2 * shinglesize; i < 4 * shinglesize - 1; i++) { store.add(new float[] { -i - 1 }, i); } assertThrows(IllegalStateException.class, () -> store.add(new float[] { -4 * shinglesize }, 0)); for (int i = 0; i < 2 * shinglesize; i++) { if (i != shinglesize - 1) { store.decrementRefCount(i); } } assertEquals(store.toString(shinglesize - 1), Arrays.toString(test)); for (int i = 4 * shinglesize; i < 6 * shinglesize - 1; i++) { store.add(new float[] { -i - 1 }, i); } assertThrows(IllegalStateException.class, () -> store.add(new float[] { -6 * shinglesize }, 6 * shinglesize - 1)); store.decrementRefCount(shinglesize - 1); store.add(new float[] { -6 * shinglesize }, 6 * shinglesize - 1); store.decrementRefCount(shinglesize); store.compact(); } @Test void CompactionTest() { int shinglesize = 2; PointStore store = new PointStore.Builder().capacity(6).dimensions(shinglesize).shingleSize(shinglesize) .indexCapacity(6).directLocationEnabled(false).internalShinglingEnabled(true).build(); store.add(new float[] { 0 }, 0L); for (int i = 0; i < 5; i++) { store.add(new float[] { i + 1 }, 0L); } int finalIndex = store.add(new float[] { 4 + 2 }, 0L); assertArrayEquals(store.getNumericVector(finalIndex), new float[] { 5, 6 }); store.decrementRefCount(1); store.decrementRefCount(2); int index = store.add(new float[] { 7 }, 0L); assertArrayEquals(store.getNumericVector(index), new float[] { 6, 7 }); store.decrementRefCount(index); assertTrue(store.size() < store.capacity); index = store.add(new float[] { 8 }, 0L); assertArrayEquals(store.getNumericVector(index), new float[] { 7, 8 }); } @Test public void indexIntervalTest() { assertThrows(IllegalArgumentException.class, () -> new IndexIntervalManager(0)); assertThrows(IllegalArgumentException.class, () -> new IndexIntervalManager(1, 0, null)); assertThrows(IllegalArgumentException.class, () -> IndexIntervalManager.toBits(null)); IndexIntervalManager a = new IndexIntervalManager(new int[] { 0, 1 }, 2); IndexIntervalManager manager = new IndexIntervalManager(1); manager.takeIndex(); assertThrows(IllegalStateException.class, () -> manager.takeIndex()); assertThrows(IllegalArgumentException.class, () -> manager.extendCapacity(1)); manager.extendCapacity(2); manager.extendCapacity(3); assertEquals(manager.getCapacity(), 3); } } ================================================ FILE: Java/core/src/test/java/com/amazon/randomcutforest/store/StreamSamplerTest.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.store; import static com.amazon.randomcutforest.RandomCutForest.DEFAULT_SAMPLE_SIZE; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; import org.junit.jupiter.api.Test; public class StreamSamplerTest { @Test void testBuilder() { StreamSampler.Builder builder = StreamSampler.builder().capacity(10).timeDecay(0).randomSeed(0); assertTrue(builder.getCapacity() == 10); assertTrue(builder.getRandomSeed() == 0); assertTrue(builder.getTimeDecay() == 0); } @Test void testConstructor() { StreamSampler sampler = StreamSampler.builder().initialAcceptFraction(1.0) .storeSequenceIndexesEnabled(true).build(); assertEquals(sampler.getEntriesSeen(), 0); assertEquals(sampler.getSequenceNumber(), -1L); sampler.sample(new float[] {}, 1f); StreamSampler second = StreamSampler.builder().initialAcceptFraction(0.5) .storeSequenceIndexesEnabled(false).build(); second.sample(new float[] {}, 0.5f); second.sample(new float[] {}, 2f); assertThrows(IllegalArgumentException.class, () -> new StreamSampler(sampler, second, 0, 0, 0L)); StreamSampler merged = new StreamSampler(sampler, second, 10, 0, 0L); assertEquals(merged.entriesSeen, 3); assertEquals(merged.sampler.getInitialAcceptFraction(), 1.0); assertEquals(merged.getSequenceNumber(), 1); } @Test public void testConfig() { StreamSampler sampler = StreamSampler.builder().initialAcceptFraction(1.0).build(); assertTrue(sampler.isCurrentlySampling()); assertTrue(sampler.getEntriesSeen() == 0); sampler.pauseSampling(); assertFalse(sampler.isCurrentlySampling()); sampler.sample(new float[] {}, 0.1f); assertTrue(sampler.getEntriesSeen() == 1); assertTrue(sampler.getObjectList().size() == 0); sampler.resumeSampling(); assertTrue(sampler.isCurrentlySampling()); sampler.sample(new float[] { 1.0f, 1.0f }, 0.2f); assertTrue(sampler.getEntriesSeen() == 2); assertTrue(sampler.getObjectList().size() == 1); sampler.pauseSampling(); assertFalse(sampler.isCurrentlySampling()); sampler.sample(new float[] { 1.0f, 1.0f }, 0.2f); assertTrue(sampler.getEntriesSeen() == 3); assertTrue(sampler.getObjectList().size() == 1); assertEquals(sampler.getCapacity(), DEFAULT_SAMPLE_SIZE); sampler.resumeSampling(); for (int i = 0; i < 10000; i++) { sampler.sample(new float[] { 1.0f, 1.0f }, 1f); } } } ================================================ FILE: Java/core/src/test/java/com/amazon/randomcutforest/tree/BoundingBoxTest.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.tree; import static com.amazon.randomcutforest.CommonUtils.defaultRCFgVecFunction; import static com.amazon.randomcutforest.CommonUtils.getProbabilityOfSeparation; import static com.amazon.randomcutforest.TestUtils.EPSILON; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.closeTo; import static org.hamcrest.Matchers.is; import static org.junit.jupiter.api.Assertions.assertArrayEquals; import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; public class BoundingBoxTest { private float[] point1; private float[] point2; private BoundingBox box1; private BoundingBox box2; @BeforeEach public void setUp() { point1 = new float[] { 1.5f, 2.7f }; point2 = new float[] { 3.0f, 1.2f }; box1 = new BoundingBox(point1); box2 = new BoundingBox(point2); } @Test public void dimensionTest() { assertThrows(IllegalArgumentException.class, () -> new BoundingBox(point1, new float[1])); assertThrows(IllegalArgumentException.class, () -> box1.getMergedBox(new float[1])); assertThrows(IllegalArgumentException.class, () -> box1.contains(new float[1])); assertThrows(IllegalArgumentException.class, () -> box1.contains(new BoundingBox(new float[1]))); } @Test public void equalsTest() { assertFalse(box1.equals(point1)); assertFalse(box1.equals(box2)); assertFalse(box1.equals(new BoundingBox(point1, new float[] { 3.0f, 2.7f }))); assertTrue(box1.equals(box1.copy())); } @Test public void testNewFromSinglePoint() { assertThat(box1.getDimensions(), is(2)); assertThat((float) box1.getMinValue(0), is(point1[0])); assertThat((float) box1.getMaxValue(0), is(point1[0])); assertThat(box1.getRange(0), is(0.0)); assertThat((float) box1.getMinValue(1), is(point1[1])); assertThat((float) box1.getMaxValue(1), is(point1[1])); assertThat(box1.getRange(1), is(0.0)); assertThat(box1.getRangeSum(), is(0.0)); assertThat(box2.getDimensions(), is(2)); assertThat((float) box2.getMinValue(0), is(point2[0])); assertThat((float) box2.getMaxValue(0), is(point2[0])); assertThat(box2.getRange(0), is(0.0)); assertThat((float) box2.getMinValue(1), is(point2[1])); assertThat((float) box2.getMaxValue(1), is(point2[1])); assertThat(box2.getRange(1), is(0.0)); assertThat(box2.getRangeSum(), is(0.0)); assertTrue(box1.probabilityOfCut(point2) == 1.0); assertTrue(box1.probabilityOfCut(point1) == 0.0); } @Test public void testGetMergedBoxWithOtherBox() { assertThrows(IllegalStateException.class, () -> box1.addBox(box2)); assertThrows(IllegalArgumentException.class, () -> box1.addPoint(new float[1])); assertThrows(IllegalArgumentException.class, () -> box1.addPoint(new float[2])); assertDoesNotThrow(() -> box1.copy().addPoint(new float[2])); BoundingBox mergedBox = box1.getMergedBox(box2); assertThat(mergedBox.getDimensions(), is(2)); assertThat((float) mergedBox.getMinValue(0), is(1.5f)); assertThat((float) mergedBox.getMaxValue(0), is(3.0f)); assertThat(mergedBox.getRange(0), closeTo(3.0 - 1.5, EPSILON)); assertThat((float) mergedBox.getMinValue(1), is(1.2f)); assertThat((float) mergedBox.getMaxValue(1), is(2.7f)); assertThat(mergedBox.getRange(1), closeTo(2.7 - 1.2, EPSILON)); double rangeSum = (3.0 - 1.5) + (2.7 - 1.2); assertThat(mergedBox.getRangeSum(), closeTo(rangeSum, EPSILON)); // check that box1 and box2 were not changed assertThat(box1.getDimensions(), is(2)); assertThat((float) box1.getMinValue(0), is(point1[0])); assertThat((float) box1.getMaxValue(0), is(point1[0])); assertThat(box1.getRange(0), is(0.0)); assertThat((float) box1.getMinValue(1), is(point1[1])); assertThat((float) box1.getMaxValue(1), is(point1[1])); assertThat(box1.getRange(1), is(0.0)); assertThat(box1.getRangeSum(), is(0.0)); assertThat(box2.getDimensions(), is(2)); assertThat((float) box2.getMinValue(0), is(point2[0])); assertThat((float) box2.getMaxValue(0), is(point2[0])); assertThat(box2.getRange(0), is(0.0)); assertThat((float) box2.getMinValue(1), is(point2[1])); assertThat((float) box2.getMaxValue(1), is(point2[1])); assertThat(box2.getRange(1), is(0.0)); assertThat(box2.getRangeSum(), is(0.0)); } @Test public void testContainsBoundingBox() { BoundingBox box1 = new BoundingBox(new float[] { 0.0f, 0.0f }) .getMergedBox(new BoundingBox(new float[] { 10.0f, 10.0f })); BoundingBox box2 = new BoundingBox(new float[] { 2.0f, 2.0f }) .getMergedBox(new BoundingBox(new float[] { 8.0f, 8.0f })); BoundingBox box3 = new BoundingBox(new float[] { -4.0f, -4.0f }) .getMergedBox(new BoundingBox(new float[] { -1.0f, -1.0f })); BoundingBox box4 = new BoundingBox(new float[] { -1.0f, -1.0f }) .getMergedBox(new BoundingBox(new float[] { 5.0f, 5.0f })); // completely contains assertTrue(box1.contains(box2)); assertFalse(box2.contains(box1)); // completely disjoint assertFalse(box1.contains(box3)); assertFalse(box3.contains(box1)); // partially intersect assertFalse(box1.contains(box4)); assertFalse(box4.contains(box1)); } @Test public void testContainsPoint() { BoundingBox box1 = new BoundingBox(new float[] { 0.0f, 0.0f }) .getMergedBox(new BoundingBox(new float[] { 10.0f, 10.0f })); assertTrue(box1.contains(new float[] { 0.0f, 0.1f })); assertTrue(box1.contains(new float[] { 5.5f, 6.5f })); assertFalse(box1.contains(new float[] { -0.7f, -4.5f })); assertFalse(box1.contains(new float[] { 5.0f, 11.0f })); assertFalse(box1.contains(new float[] { -5.0f, 10.0f })); } @Test public void probability() { IBoundingBoxView box = new BoundingBox(new float[1], new float[1]); assertEquals(0, getProbabilityOfSeparation(box, new float[1])); assertArrayEquals(new double[1], defaultRCFgVecFunction(box)); } } ================================================ FILE: Java/core/src/test/java/com/amazon/randomcutforest/tree/BoxCacheTest.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.tree; import static org.junit.jupiter.api.Assertions.assertEquals; import java.util.Random; import org.junit.jupiter.api.Test; import com.amazon.randomcutforest.RandomCutForest; import com.amazon.randomcutforest.RandomCutForestTest; import com.amazon.randomcutforest.config.Precision; public class BoxCacheTest { @Test public void testChangingBoundingBoxFloat32() { int dimensions = 4; int numberOfTrees = 1; int sampleSize = 64; int dataSize = 1000 * sampleSize; Random random = new Random(); long seed = random.nextLong(); double[][] big = RandomCutForestTest.generateShingledData(dataSize, dimensions, 2); RandomCutForest forest = RandomCutForest.builder().compact(true).dimensions(dimensions) .numberOfTrees(numberOfTrees).sampleSize(sampleSize).precision(Precision.FLOAT_32).randomSeed(seed) .boundingBoxCacheFraction(0).build(); RandomCutForest otherForest = RandomCutForest.builder().compact(true).dimensions(dimensions) .numberOfTrees(numberOfTrees).sampleSize(sampleSize).precision(Precision.FLOAT_32).randomSeed(seed) .boundingBoxCacheFraction(1).build(); int num = 0; for (double[] point : big) { ++num; if (num % sampleSize == 0) { forest.setBoundingBoxCacheFraction(random.nextDouble()); } assertEquals(forest.getAnomalyScore(point), otherForest.getAnomalyScore(point)); forest.update(point); otherForest.update(point); } } } ================================================ FILE: Java/core/src/test/java/com/amazon/randomcutforest/tree/CutTest.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.tree; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.is; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertTrue; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; public class CutTest { private int splitDimension; private double splitValue; private Cut cut; @BeforeEach public void setUp() { splitDimension = 2; splitValue = 3.4; cut = new Cut(splitDimension, splitValue); } @Test public void testNew() { assertThat(cut.getDimension(), is(splitDimension)); assertThat(cut.getValue(), is(splitValue)); } @Test public void testIsLeftOf() { double[] point = new double[] { 1.0, 2.0, 3.0, 4.0 }; assertTrue(Cut.isLeftOf(point, cut)); point[2] = 99.9; assertFalse(Cut.isLeftOf(point, cut)); } } ================================================ FILE: Java/core/src/test/java/com/amazon/randomcutforest/tree/HyperTreeTest.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.tree; import static com.amazon.randomcutforest.CommonUtils.checkArgument; import static com.amazon.randomcutforest.CommonUtils.toFloatArray; import java.util.ArrayList; import java.util.List; import java.util.Random; import java.util.function.BiFunction; import java.util.function.BinaryOperator; import java.util.function.Function; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; import com.amazon.randomcutforest.CommonUtils; import com.amazon.randomcutforest.RandomCutForest; import com.amazon.randomcutforest.VisitorFactory; import com.amazon.randomcutforest.anomalydetection.TransductiveScalarScoreVisitor; import com.amazon.randomcutforest.store.PointStore; import com.amazon.randomcutforest.testutils.NormalMixtureTestData; public class HyperTreeTest { private static int numberOfTrees; private static int sampleSize; private static int dimensions; private static int randomSeed; private static double baseMu; private static double baseSigma; private static double anomalyMu; private static double anomalySigma; private static double transitionToAnomalyProbability; private static double transitionToBaseProbability; private static int dataSize; private static NormalMixtureTestData generator; private static int numTrials = 5; private static int numTest = 5; public static Function LAlphaSeparation(final double alpha) { return (IBoundingBoxView boundingBox) -> { double[] answer = new double[boundingBox.getDimensions()]; for (int i = 0; i < boundingBox.getDimensions(); ++i) { double maxVal = boundingBox.getMaxValue(i); double minVal = boundingBox.getMinValue(i); double oldRange = maxVal - minVal; if (oldRange > 0) { if (alpha == 0) answer[i] = 1.0; else answer[i] = Math.pow(oldRange, alpha); } } return answer; }; } public static Function GTFSeparation(final double gauge) { return (IBoundingBoxView boundingBox) -> { double[] answer = new double[boundingBox.getDimensions()]; for (int i = 0; i < boundingBox.getDimensions(); ++i) { double maxVal = boundingBox.getMaxValue(i); double minVal = boundingBox.getMinValue(i); double oldRange = maxVal - minVal; if (oldRange > 0) { answer[i] = Math.log(1 + oldRange / gauge); } } return answer; }; } class HyperForest { int dimensions; int seed; Random random; int sampleSize; int numberOfTrees; PointStore pointStore; ArrayList trees; public HyperForest(int dimensions, int numberOfTrees, int sampleSize, int seed, Function vecSeparation) { this.numberOfTrees = numberOfTrees; this.seed = seed; this.sampleSize = sampleSize; this.dimensions = dimensions; pointStore = PointStore.builder().capacity(numberOfTrees * sampleSize).dimensions(dimensions).shingleSize(1) .build(); trees = new ArrayList<>(); random = new Random(seed); for (int i = 0; i < numberOfTrees; i++) { trees.add(new HyperTree.Builder().pointStoreView(pointStore).dimension(dimensions) .buildGVec(vecSeparation).randomSeed(random.nextInt()).build()); } } // displacement scoring (multiplied by the normalizer log_2(treesize)) on the // fly !! // as introduced in Robust Random Cut Forest Based Anomaly Detection in Streams // @ICML 2016. This does not address co-displacement (duplicity). // seen function is (x,y) -> 1 which basically ignores everything // unseen function is (x,y) -> y which corresponds to mass of sibling // damp function is (x,y) -> 1 which is no dampening public double getDisplacementScore(float[] point) { return getDynamicScore(point, (x, y) -> 1.0, (x, y) -> y, (x, y) -> 1.0); } // Expected height (multiplied by the normalizer log_2(treesize) ) scoring on // the fly !! // seen function is (x,y) -> x+log(Y)/log(2) which depth + duplicity converted // to depth // unseen function is (x,y) -> x which is depth // damp function is (x,y) -> 1 which is no dampening // note that this is *NOT* anything like the expected height in // Isolation Forest/Random Forest algorithms, because here // the Expected height takes into account the contrafactual // that "what would have happened had the point been available during // the construction of the forest" public double getHeightScore(float[] point) { return getDynamicScore(point, (x, y) -> 1.0 * (x + Math.log(y)), (x, y) -> 1.0 * x, (x, y) -> 1.0); } public double getAnomalyScore(float[] point) { return getDynamicScore(point, CommonUtils::defaultScoreSeenFunction, CommonUtils::defaultScoreUnseenFunction, CommonUtils::defaultDampFunction); } public double getDynamicScore(float[] point, BiFunction seen, BiFunction unseen, BiFunction newDamp) { checkArgument(dimensions == point.length, "incorrect dimensions"); VisitorFactory visitorFactory = new VisitorFactory<>( (tree, y) -> new TransductiveScalarScoreVisitor(tree.projectToTree(y), tree.getMass(), seen, unseen, newDamp, ((HyperTree) tree).getgVec())); BinaryOperator accumulator = Double::sum; Function finisher = sum -> sum / numberOfTrees; return trees.parallelStream().map(tree -> tree.traverse(point, visitorFactory)).reduce(accumulator) .map(finisher).orElseThrow(() -> new IllegalStateException("accumulator returned an empty result")); } void makeForest(double[][] pointList, int prefix) { for (int i = 0; i < pointList.length; i++) { if (pointList[i].length != dimensions) { throw new IllegalArgumentException("Points have incorrect dimensions"); } } boolean[][] status = new boolean[numberOfTrees + 1][pointList.length]; for (int i = 0; i < numberOfTrees; i++) { int y = 0; while (y < sampleSize) { int z = random.nextInt(prefix); if (!status[i][z]) { status[i + 1][z] = true; status[0][z] = true; // will compute union across trees ++y; } } } int[] reference = new int[pointList.length]; List[] lists = new List[numberOfTrees]; for (int i = 0; i < numberOfTrees; i++) { lists[i] = new ArrayList<>(); } for (int i = 0; i < pointList.length; i++) { if (status[0][i]) { reference[i] = pointStore.add(toFloatArray(pointList[i]), 0L); for (int j = 0; j < numberOfTrees; j++) { if (status[j + 1][i]) { lists[j].add(reference[i]); } } } ; } for (int i = 0; i < numberOfTrees; i++) { trees.get(i).makeTree(lists[i], random.nextInt()); } } } // =========================================================== public static double getSimulatedAnomalyScore(RandomCutForest forest, float[] point, Function gVec) { return forest.getDynamicSimulatedScore(point, CommonUtils::defaultScoreSeenFunction, CommonUtils::defaultScoreUnseenFunction, CommonUtils::defaultDampFunction, gVec); } public static double getSimulatedHeightScore(RandomCutForest forest, float[] point, Function gvec) { return forest.getDynamicSimulatedScore(point, (x, y) -> 1.0 * (x + Math.log(y)), (x, y) -> 1.0 * x, (x, y) -> 1.0, gvec); } public static double getSimulatedDisplacementScore(RandomCutForest forest, float[] point, Function gvec) { return forest.getDynamicSimulatedScore(point, (x, y) -> 1.0, (x, y) -> y, (x, y) -> 1.0, gvec); } // =========================================================== @BeforeAll public static void setup() { dataSize = 2000; numberOfTrees = 1; // this is a tree test sampleSize = 256; dimensions = 30; baseMu = 0.0; baseSigma = 1.0; anomalyMu = 0.0; anomalySigma = 1.5; transitionToAnomalyProbability = 0.0; // ignoring anomaly cluster for now transitionToBaseProbability = 1.0; generator = new NormalMixtureTestData(baseMu, baseSigma, anomalyMu, anomalySigma, transitionToAnomalyProbability, transitionToBaseProbability); } private class TestScores { double sumCenterScore = 0; double sumCenterDisp = 0; double sumCenterHeight = 0; double sumLeftScore = 0; double sumRightScore = 0; double sumLeftDisp = 0; double sumRightDisp = 0; double sumLeftHeight = 0; double sumRightHeight = 0; } public static void runRCF(TestScores testScore, Function gVec) { Random prg = new Random(randomSeed); for (int trials = 0; trials < numTrials; trials++) { double[][] data = generator.generateTestData(dataSize + numTest, dimensions, 100 + trials); RandomCutForest newForest = RandomCutForest.builder().dimensions(dimensions).numberOfTrees(numberOfTrees) .sampleSize(sampleSize).randomSeed(prg.nextInt()).build(); for (int i = 0; i < dataSize; i++) { // shrink, shift at random for (int j = 0; j < dimensions; j++) data[i][j] *= 0.01; if (prg.nextDouble() < 0.5) data[i][0] += 5.0; else data[i][0] -= 5.0; newForest.update(data[i]); // the points are streamed } for (int i = dataSize; i < dataSize + numTest; i++) { for (int j = 0; j < dimensions; j++) data[i][j] *= 0.01; testScore.sumCenterScore += getSimulatedAnomalyScore(newForest, toFloatArray(data[i]), gVec); testScore.sumCenterHeight += getSimulatedHeightScore(newForest, toFloatArray(data[i]), gVec); testScore.sumCenterDisp += getSimulatedDisplacementScore(newForest, toFloatArray(data[i]), gVec); data[i][0] += 5; // move to right cluster testScore.sumRightScore += getSimulatedAnomalyScore(newForest, toFloatArray(data[i]), gVec); testScore.sumRightHeight += getSimulatedHeightScore(newForest, toFloatArray(data[i]), gVec); testScore.sumRightDisp += getSimulatedDisplacementScore(newForest, toFloatArray(data[i]), gVec); data[i][0] -= 10; // move to left cluster testScore.sumLeftScore += getSimulatedAnomalyScore(newForest, toFloatArray(data[i]), gVec); testScore.sumLeftHeight += getSimulatedHeightScore(newForest, toFloatArray(data[i]), gVec); testScore.sumLeftDisp += getSimulatedDisplacementScore(newForest, toFloatArray(data[i]), gVec); } } assert (testScore.sumCenterScore > 2 * testScore.sumLeftScore); assert (testScore.sumCenterScore > 2 * testScore.sumRightScore); assert (testScore.sumCenterDisp > 10 * testScore.sumLeftDisp); assert (testScore.sumCenterDisp > 10 * testScore.sumRightDisp); assert (2 * testScore.sumCenterHeight < testScore.sumLeftHeight); assert (2 * testScore.sumCenterHeight < testScore.sumRightHeight); } public void runGTFLAlpha(TestScores testScore, boolean flag, double gaugeOrAlpha) { Random prg = new Random(randomSeed); for (int trials = 0; trials < numTrials; trials++) { double[][] data = generator.generateTestData(dataSize + numTest, dimensions, 100 + trials); HyperForest newForest; if (flag) newForest = new HyperForest(dimensions, numberOfTrees, sampleSize, prg.nextInt(), GTFSeparation(gaugeOrAlpha)); else newForest = new HyperForest(dimensions, numberOfTrees, sampleSize, prg.nextInt(), LAlphaSeparation(gaugeOrAlpha)); for (int i = 0; i < dataSize; i++) { // shrink, shift at random for (int j = 0; j < dimensions; j++) data[i][j] *= 0.01; if (prg.nextDouble() < 0.5) data[i][0] += 5.0; else data[i][0] -= 5.0; } newForest.makeForest(data, dataSize); for (int i = dataSize; i < dataSize + numTest; i++) { for (int j = 0; j < dimensions; j++) data[i][j] *= 0.01; testScore.sumCenterScore += newForest.getAnomalyScore(toFloatArray(data[i])); testScore.sumCenterHeight += newForest.getHeightScore(toFloatArray(data[i])); testScore.sumCenterDisp += newForest.getDisplacementScore(toFloatArray(data[i])); data[i][0] += 5; // move to right cluster testScore.sumRightScore += newForest.getAnomalyScore(toFloatArray(data[i])); testScore.sumRightHeight += newForest.getHeightScore(toFloatArray(data[i])); testScore.sumRightDisp += newForest.getDisplacementScore(toFloatArray(data[i])); data[i][0] -= 10; // move to left cluster testScore.sumLeftScore += newForest.getAnomalyScore(toFloatArray(data[i])); testScore.sumLeftHeight += newForest.getHeightScore(toFloatArray(data[i])); testScore.sumLeftDisp += newForest.getDisplacementScore(toFloatArray(data[i])); } } assert (testScore.sumCenterScore > 1.5 * testScore.sumLeftScore); assert (testScore.sumCenterScore > 1.5 * testScore.sumRightScore); assert (testScore.sumCenterDisp > 10 * testScore.sumLeftDisp); assert (testScore.sumCenterDisp > 10 * testScore.sumRightDisp); assert (1.5 * testScore.sumCenterHeight < testScore.sumLeftHeight); assert (1.5 * testScore.sumCenterHeight < testScore.sumRightHeight); } public void simulateGTFLAlpha(TestScores testScore, boolean flag, double gaugeOrAlpha) { Function gVec = LAlphaSeparation(gaugeOrAlpha); if (flag) gVec = GTFSeparation(gaugeOrAlpha); runRCF(testScore, gVec); } @Test public void GaugeTransductiveForestTest() { TestScores testScoreA = new TestScores(); runGTFLAlpha(testScoreA, true, 1); TestScores testScoreB = new TestScores(); simulateGTFLAlpha(testScoreB, true, 1); } @Test public void LAlphaForestTest() { TestScores testScoreA = new TestScores(); runGTFLAlpha(testScoreA, false, 0.5); TestScores testScoreB = new TestScores(); simulateGTFLAlpha(testScoreB, false, 0.5); } } ================================================ FILE: Java/core/src/test/java/com/amazon/randomcutforest/tree/RandomCutTreeTest.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.tree; import static com.amazon.randomcutforest.CommonUtils.toDoubleArray; import static com.amazon.randomcutforest.CommonUtils.toFloatArray; import static com.amazon.randomcutforest.CommonUtils.validateInternalState; import static com.amazon.randomcutforest.tree.AbstractNodeStore.Null; import static java.lang.Math.max; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.closeTo; import static org.hamcrest.Matchers.is; import static org.junit.jupiter.api.Assertions.assertArrayEquals; import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNotEquals; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import java.util.ArrayList; import java.util.List; import java.util.Random; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; import com.amazon.randomcutforest.MultiVisitor; import com.amazon.randomcutforest.MultiVisitorFactory; import com.amazon.randomcutforest.config.Config; import com.amazon.randomcutforest.sampler.Weighted; import com.amazon.randomcutforest.state.tree.CompactRandomCutTreeContext; import com.amazon.randomcutforest.state.tree.CompactRandomCutTreeState; import com.amazon.randomcutforest.state.tree.RandomCutTreeMapper; import com.amazon.randomcutforest.store.PointStore; public class RandomCutTreeTest { private static final double EPSILON = 1e-8; private Random rng; private RandomCutTree tree; private PointStore pointStoreFloat; @BeforeEach public void setUp() { rng = mock(Random.class); pointStoreFloat = new PointStore.Builder().indexCapacity(100).capacity(100).initialSize(100).dimensions(2) .build(); tree = RandomCutTree.builder().random(rng).centerOfMassEnabled(true).pointStoreView(pointStoreFloat) .storeSequenceIndexesEnabled(true).storeParent(true).dimension(2).build(); // Create the following tree structure (in the second diagram., backticks denote // cuts) // The leaf point 0,1 has mass 2, all other nodes have mass 1. // // /\ // / \ // -1,-1 / \ // / \ // /\ 1,1 // / \ // -1,0 0,1 // // // 0,1 1,1 // ----------*---------* // | ` | ` | // | ` | ` | // | ` | ` | // -1,0 *-------------------| // | | // |```````````````````| // | | // -1,-1 *-------------------- // // We choose the insertion order and random draws carefully so that each split // divides its parent in half. // The random values are used to set the cut dimensions and values. assertEquals(pointStoreFloat.add(new float[] { -1, -1 }, 1), 0); assertEquals(pointStoreFloat.add(new float[] { 1, 1 }, 2), 1); assertEquals(pointStoreFloat.add(new float[] { -1, 0 }, 3), 2); assertEquals(pointStoreFloat.add(new float[] { 0, 1 }, 4), 3); assertEquals(pointStoreFloat.add(new float[] { 0, 1 }, 5), 4); assertEquals(pointStoreFloat.add(new float[] { 0, 0 }, 6), 5); assertThrows(IllegalArgumentException.class, () -> tree.deletePoint(0, 1)); tree.addPoint(0, 1); tree.deletePoint(0, 1); assertTrue(tree.root == Null); tree.addPoint(0, 1); when(rng.nextDouble()).thenReturn(0.625); tree.addPoint(1, 2); when(rng.nextDouble()).thenReturn(0.5); tree.addPoint(2, 3); when(rng.nextDouble()).thenReturn(0.25); tree.addPoint(3, 4); // add mass to 0,1 tree.addPoint(4, 5); assertArrayEquals(tree.liftFromTree(new float[] { 17, 18 }), new float[] { 17, 18 }); } @Test public void testConfig() { Config config = new Config(); assertThrows(IllegalArgumentException.class, () -> tree.setBoundingBoxCacheFraction(-0.5)); assertThrows(IllegalArgumentException.class, () -> tree.setBoundingBoxCacheFraction(2.0)); assertThrows(IllegalArgumentException.class, () -> tree.setConfig("foo", 0)); assertThrows(IllegalArgumentException.class, () -> tree.getConfig("bar")); assertEquals(tree.getConfig(Config.BOUNDING_BOX_CACHE_FRACTION), 1.0); assertThrows(IllegalArgumentException.class, () -> tree.setConfig(config.BOUNDING_BOX_CACHE_FRACTION, true)); assertThrows(IllegalArgumentException.class, () -> tree.getConfig(Config.BOUNDING_BOX_CACHE_FRACTION, boolean.class)); tree.setConfig(Config.BOUNDING_BOX_CACHE_FRACTION, 0.2); } @Test public void testConfigStore() { assertEquals(tree.nodeStore.isLeaf(-1), tree.isLeaf(-1)); assertEquals(tree.nodeStore.isLeaf(256), tree.isLeaf(256)); assertEquals(tree.nodeStore.isInternal(-1), tree.isInternal(-1)); assertEquals(tree.nodeStore.isInternal(0), tree.isInternal(0)); assertEquals(tree.nodeStore.isInternal(255), tree.isInternal(255)); assertEquals(tree.nodeStore.isInternal(256), tree.isInternal(256)); } @Test public void testParent() { PointStore pointStore = mock(PointStore.class); tree = RandomCutTree.builder().random(rng).centerOfMassEnabled(true).pointStoreView(pointStore) .storeSequenceIndexesEnabled(true).storeParent(false).dimension(3).build(); assertThrows(IllegalArgumentException.class, () -> tree.nodeStore.getParentIndex(tree.root)); } @Test public void testConfigDelete() { PointStore pointStore = mock(PointStore.class); tree = RandomCutTree.builder().random(rng).centerOfMassEnabled(true).pointStoreView(pointStore) .storeSequenceIndexesEnabled(true).storeParent(true).dimension(3).build(); when(pointStore.getNumericVector(any(Integer.class))).thenReturn(new float[] { 0 }).thenReturn(new float[3]) .thenReturn(new float[3]); tree.addPoint(0, 1); // fails vor dimension assertThrows(IllegalArgumentException.class, () -> tree.deletePoint(0, 1)); assertThrows(IllegalArgumentException.class, () -> tree.deletePoint(2, 1)); // wrong sequence index assertThrows(IllegalArgumentException.class, () -> tree.deletePoint(0, 2)); // state is corrupted assertThrows(IllegalArgumentException.class, () -> tree.deletePoint(0, 1)); } @Test public void testConfigAdd() { PointStore pointStore = mock(PointStore.class); float[] test = new float[] { 1.119f, 0f, -3.11f, 100f }; float[] copies = new float[] { 0, 17, 0, 0 }; tree = RandomCutTree.builder().random(rng).centerOfMassEnabled(true).pointStoreView(pointStore) .centerOfMassEnabled(true).storeSequenceIndexesEnabled(true).storeParent(true).dimension(4).build(); when(pointStore.getNumericVector(any(Integer.class))).thenReturn(new float[0]).thenReturn(test) .thenReturn(new float[62]).thenReturn(new float[4]).thenReturn(new float[17]).thenReturn(new float[4]) .thenReturn(new float[4]).thenReturn(new float[5]).thenReturn(copies).thenReturn(test) .thenReturn(copies).thenReturn(copies).thenReturn(test); // cannot have partial addition to empty tree assertThrows(IllegalArgumentException.class, () -> tree.addPointToPartialTree(0, 1)); // the following does not consume any points tree.addPoint(0, 1); // consumes from pointstore but gets 0 length vector assertThrows(IllegalArgumentException.class, () -> tree.getPointSum(tree.getRoot())); // passes, consumes pointstore assertArrayEquals(tree.getPointSum(tree.getRoot()), test); // sequel fails because dimension is 62 assertThrows(IllegalArgumentException.class, () -> tree.getBox(tree.root)); // in the sequel point is [0,0,0,0] fails because old point appears to have 17 // dimensions assertThrows(IllegalArgumentException.class, () -> tree.addPoint(1, 1)); // this invocation succeeds, but points are same tree.addPoint(1, 1); assertTrue(tree.isLeaf(tree.getRoot())); // dimension = 5 assertThrows(IllegalArgumentException.class, () -> tree.addPoint(2, 1)); // switch the vector assertArrayEquals(tree.getPointSum(tree.getRoot()), new float[] { 0, 34, 0, 0 }); // adding test, consumes the copy tree.addPoint(2, 1); assertEquals(tree.getMass(), 3); assertArrayEquals(tree.getPointSum(tree.getRoot()), new float[] { 1.119f, 34, -3.11f, 100 }, 1e-3f); // bounding boxes are incorrect they are minvalues = test, maxvalues = test assertThrows(IllegalStateException.class, () -> tree.validateAndReconstruct(tree.root)); assertTrue(tree.getCutDimension(tree.root) == 3); // cut cannot be the same as right minvalue tree.nodeStore.cutValue[tree.root] = 100; assertThrows(IllegalStateException.class, () -> tree.validateAndReconstruct(tree.root)); } @Test public void testConfigPartialAdd() { PointStore pointStore = mock(PointStore.class); float[] test = new float[] { 1.119f, 0f, -3.11f, 100f }; float[] copies = new float[] { 0, 17, 0, 0 }; tree = RandomCutTree.builder().random(rng).centerOfMassEnabled(true).pointStoreView(pointStore) .centerOfMassEnabled(true).storeSequenceIndexesEnabled(true).storeParent(true).dimension(4).build(); when(pointStore.getNumericVector(any(Integer.class))).thenReturn(new float[0]).thenReturn(test) .thenReturn(new float[0]).thenReturn(test).thenReturn(new float[4]).thenReturn(new float[5]) .thenReturn(copies).thenReturn(test).thenReturn(copies).thenReturn(copies).thenReturn(test); // the following does not consume any points tree.addPoint(0, 1); assertThrows(IllegalArgumentException.class, () -> tree.addPointToPartialTree(1, 1)); // fails at check of dimension of retrieved point assertThrows(IllegalArgumentException.class, () -> tree.addPointToPartialTree(1, 1)); // fails at equality check assertThrows(IllegalArgumentException.class, () -> tree.addPointToPartialTree(1, 1)); } @Test public void testCut() { PointStore pointStore = mock(PointStore.class); Random random = mock(Random.class); tree = RandomCutTree.builder().random(rng).centerOfMassEnabled(true).pointStoreView(pointStore).random(random) .storeSequenceIndexesEnabled(true).storeParent(true).dimension(1).build(); when(pointStore.getNumericVector(any(Integer.class))).thenReturn(new float[1]).thenReturn(new float[] { 1 }) .thenReturn(new float[] { 0 }).thenReturn(new float[] { 0 }).thenReturn(new float[] { 2 }) .thenReturn(new float[] { 1 }).thenReturn(new float[0]).thenReturn(new float[] { 2 }) .thenReturn(new float[] { 1 }).thenReturn(new float[1]); // testing the cut assumptions -- the values should not be 1 or larger, but is // useful for testing when(random.nextDouble()).thenReturn(1.2).thenReturn(1.5).thenReturn(1.5).thenReturn(0.0); // following does not query pointstore tree.addPoint(0, 1); // following tries to add [0.0], and discovers point index 0 is [1.0] tree.addPoint(1, 1); assertTrue(tree.getCutValue(tree.getRoot()) == (double) Math.nextAfter(1.0f, 0.0)); assertThrows(IllegalArgumentException.class, () -> tree.addPoint(1, 2)); // copy tree.addPoint(1, 2); // passes assertTrue(tree.getRoot() == 0); assertTrue(tree.getCutValue(0) == (double) Math.nextAfter(1.0f, 0.0)); assertTrue(tree.getCutValue(1) == (double) Math.nextAfter(2.0f, 1.0)); assertFalse(tree.checkStrictlyContains(1, new float[] { 2 })); assertTrue(tree.checkStrictlyContains(1, new float[] { 1.001f })); } /** * Verify that the tree has the form described in the setUp method. */ @Test public void testInitialTreeState() { int node = tree.getRoot(); // the second double[] is intentional IBoundingBoxView expectedBox = new BoundingBox(new float[] { -1, -1 }).getMergedBox(new float[] { 1, 1 }); assertThat(tree.getBox(node), is(expectedBox)); assertThat(tree.getCutDimension(node), is(1)); assertThat(tree.getCutValue(node), closeTo(-0.5, EPSILON)); assertThat(tree.getMass(), is(5)); assertArrayEquals(new double[] { -1, 2 }, toDoubleArray(tree.getPointSum(node)), EPSILON); assertThat(tree.isLeaf(tree.getLeftChild(node)), is(true)); assertThat(tree.pointStoreView.getNumericVector(tree.getPointIndex(tree.getLeftChild(node))), is(new float[] { -1, -1 })); assertThat(tree.getMass(tree.getLeftChild(node)), is(1)); assertEquals(tree.getSequenceMap(tree.getPointIndex(tree.getLeftChild(node))).get(1L), 1); // testing inappropriate assertThrows(IllegalArgumentException.class, () -> tree.getLeftChild(Integer.MAX_VALUE)); assertThrows(IllegalArgumentException.class, () -> tree.getRightChild(500)); assertThrows(IllegalArgumentException.class, () -> tree.getCutValue(-1)); assertThrows(IllegalArgumentException.class, () -> tree.getCutDimension(-1)); // pointIndex should have a value at least as large as number of leaves assertThrows(IllegalArgumentException.class, () -> tree.getPointIndex(0)); NodeStoreSmall nodeStoreSmall = (NodeStoreSmall) tree.nodeStore; assert (nodeStoreSmall.getParentIndex(tree.getRightChild(node)) == node); node = tree.getRightChild(node); expectedBox = new BoundingBox(new float[] { -1, 0 }).getMergedBox(new BoundingBox(new float[] { 1, 1 })); assertThat(tree.getBox(node), is(expectedBox)); assertThat(tree.getCutDimension(node), is(0)); assertThat(tree.getCutValue(node), closeTo(0.5, EPSILON)); assertThat(tree.getMass(node), is(4)); assertArrayEquals(new double[] { 0.0, 3.0 }, toDoubleArray(tree.getPointSum(node)), EPSILON); assertThat(tree.isLeaf(tree.getRightChild(node)), is(true)); assertThat(tree.pointStoreView.getNumericVector(tree.getPointIndex(tree.getRightChild(node))), is(new float[] { 1, 1 })); assertThat(tree.getMass(tree.getRightChild(node)), is(1)); assertEquals(tree.getSequenceMap(tree.getPointIndex(tree.getRightChild(node))).get(2L), 1); assert (nodeStoreSmall.getParentIndex(tree.getLeftChild(node)) == node); node = tree.getLeftChild(node); expectedBox = new BoundingBox(new float[] { -1, 0 }).getMergedBox(new float[] { 0, 1 }); assertThat(tree.getBox(node), is(expectedBox)); assertThat(tree.getCutDimension(node), is(0)); assertThat(tree.getCutValue(node), closeTo(-0.5, EPSILON)); assertThat(tree.getMass(node), is(3)); assertArrayEquals(new double[] { -1.0, 2.0 }, toDoubleArray(tree.getPointSum(node)), EPSILON); assertThat(tree.isLeaf(tree.getLeftChild(node)), is(true)); assertThat(tree.pointStoreView.getNumericVector(tree.getPointIndex(tree.getLeftChild(node))), is(new float[] { -1, 0 })); assertThat(tree.getMass(tree.getLeftChild(node)), is(1)); assertEquals(tree.getSequenceMap(tree.getPointIndex(tree.getLeftChild(node))).get(3L), 1); assertThat(tree.isLeaf(tree.getRightChild(node)), is(true)); assertThat(tree.pointStoreView.getNumericVector(tree.getPointIndex(tree.getRightChild(node))), is(new float[] { 0, 1 })); assertThat(tree.getMass(tree.getRightChild(node)), is(2)); assertEquals(tree.getSequenceMap(tree.getPointIndex(tree.getRightChild(node))).get(4L), 1); assertEquals(tree.getSequenceMap(tree.getPointIndex(tree.getRightChild(node))).get(5L), 1); assertThrows(IllegalArgumentException.class, () -> tree.deletePoint(5, 6)); } @Test public void testTreeMapper() { RandomCutTreeMapper mapper = new RandomCutTreeMapper(); CompactRandomCutTreeState state = mapper.toState(tree); CompactRandomCutTreeContext context = new CompactRandomCutTreeContext(); context.setPointStore(pointStoreFloat); context.setDimension(tree.getDimension()); state.setDimensions(0); RandomCutTree newTree = mapper.toModel(state, context); assertEquals(newTree.getDimension(), 2); } @Test public void treeTraversal() { class DepthCounter implements MultiVisitor { int depth = 0; DepthCounter(int num) { depth = 0; } @Override public boolean trigger(INodeView node) { return true; } @Override public MultiVisitor newPartialCopy() { return new DepthCounter(depth); } @Override public void combine(MultiVisitor other) { depth = max(depth, other.getResult()); } @Override public void accept(INodeView node, int depthOfNode) { validateInternalState(!isConverged(), "error"); depth++; } @Override public Integer getResult() { return depth; } } MultiVisitorFactory factory = new MultiVisitorFactory<>((tree, x) -> new DepthCounter(0)); assertEquals((int) tree.traverseMulti(new float[2], factory), 4); } @Test public void testDeletePointWithLeafSibling() { tree.deletePoint(2, 3); // root node bounding box and cut remains unchanged, mass and centerOfMass are // updated int node = tree.getRoot(); IBoundingBoxView expectedBox = new BoundingBox(new float[] { -1, -1 }).getMergedBox(new float[] { 1, 1 }); assertThat(tree.getBox(node), is(expectedBox)); assertThat(tree.getCutDimension(node), is(1)); assertThat(tree.getCutValue(node), closeTo(-0.5, EPSILON)); assertThat(tree.getMass(), is(4)); assertArrayEquals(new double[] { 0.0, 2.0 }, toDoubleArray(tree.getPointSum(node)), EPSILON); assertThat(tree.isLeaf(tree.getLeftChild(node)), is(true)); assertThat(tree.pointStoreView.getNumericVector(tree.getPointIndex(tree.getLeftChild(node))), is(new float[] { -1, -1 })); assertThat(tree.getMass(tree.getLeftChild(node)), is(1)); assertEquals(tree.getSequenceMap(tree.getPointIndex(tree.getLeftChild(node))).get(1L), 1); // sibling node moves up and bounding box recomputed NodeStoreSmall nodeStoreSmall = (NodeStoreSmall) tree.nodeStore; assert (nodeStoreSmall.getParentIndex(tree.getRightChild(node)) == node); node = tree.getRightChild(node); expectedBox = new BoundingBox(new float[] { 0, 1 }).getMergedBox(new float[] { 1, 1 }); assertThat(tree.getBox(node), is(expectedBox)); assertThat(tree.getCutDimension(node), is(0)); assertThat(tree.getCutValue(node), closeTo(0.5, EPSILON)); assertThat(tree.getMass(node), is(3)); assertArrayEquals(new double[] { 1.0, 3.0 }, toDoubleArray(tree.getPointSum(node)), EPSILON); assertThat(tree.isLeaf(tree.getLeftChild(node)), is(true)); assertThat(tree.pointStoreView.getNumericVector(tree.getPointIndex(tree.getLeftChild(node))), is(new float[] { 0, 1 })); assertThat(tree.getMass(tree.getLeftChild(node)), is(2)); assertEquals(tree.getSequenceMap(tree.getPointIndex(tree.getLeftChild(node))).get(4L), 1); assertEquals(tree.getSequenceMap(tree.getPointIndex(tree.getLeftChild(node))).get(5L), 1); assertThat(tree.isLeaf(tree.getRightChild(node)), is(true)); assertThat(tree.pointStoreView.getNumericVector(tree.getPointIndex(tree.getRightChild(node))), is(new float[] { 1, 1 })); assertThat(tree.getMass(tree.getRightChild(node)), is(1)); assertEquals(tree.getSequenceMap(tree.getPointIndex(tree.getRightChild(node))).get(2L), 1); } @Test public void testDeletePointWithNonLeafSibling() { tree.deletePoint(1, 2); // root node bounding box recomputed int node = tree.getRoot(); IBoundingBoxView expectedBox = new BoundingBox(new float[] { -1, -1 }).getMergedBox(new float[] { 0, 1 }); assertThat(tree.getBox(node), is(expectedBox)); assertThat(tree.getCutDimension(node), is(1)); assertThat(tree.getCutValue(node), closeTo(-0.5, EPSILON)); assertThat(tree.getMass(), is(4)); assertThat(tree.isLeaf(tree.getLeftChild(node)), is(true)); assertThat(tree.pointStoreView.getNumericVector(tree.getPointIndex(tree.getLeftChild(node))), is(new float[] { -1, -1 })); assertThat(tree.getMass(tree.getLeftChild(node)), is(1)); assertEquals(tree.getSequenceMap(tree.getPointIndex(tree.getLeftChild(node))).get(1L), 1); // sibling node moves up and bounding box stays the same NodeStoreSmall nodeStoreSmall = (NodeStoreSmall) tree.nodeStore; assert (nodeStoreSmall.getParentIndex(tree.getRightChild(node)) == node); node = tree.getRightChild(node); expectedBox = new BoundingBox(new float[] { -1, 0 }).getMergedBox(new float[] { 0, 1 }); assertThat(tree.getBox(node), is(expectedBox)); assertThat(tree.getCutDimension(node), is(0)); assertThat(tree.getCutValue(node), closeTo(-0.5, EPSILON)); assertThat(tree.isLeaf(tree.getLeftChild(node)), is(true)); assertThat(tree.pointStoreView.getNumericVector(tree.getPointIndex(tree.getLeftChild(node))), is(new float[] { -1, 0 })); assertThat(tree.getMass(tree.getLeftChild(node)), is(1)); assertEquals(tree.getSequenceMap(tree.getPointIndex(tree.getLeftChild(node))).get(3L), 1); assertThat(tree.isLeaf(tree.getRightChild(node)), is(true)); assertThat(tree.pointStoreView.getNumericVector(tree.getPointIndex(tree.getRightChild(node))), is(new float[] { 0, 1 })); assertThat(tree.getMass(tree.getRightChild(node)), is(2)); assertEquals(tree.getSequenceMap(tree.getPointIndex(tree.getRightChild(node))).get(4L), 1); assertEquals(tree.getSequenceMap(tree.getPointIndex(tree.getRightChild(node))).get(5L), 1); } @Test public void testDeletePointWithMassGreaterThan1() { assertTrue(tree.boundingBoxCacheFraction == 1.0); tree.setConfig(Config.BOUNDING_BOX_CACHE_FRACTION, 0.5); assertTrue(tree.boundingBoxData != null); assertTrue(tree.boundingBoxData.length == ((tree.numberOfLeaves - 1) / 2) * 4); assertTrue(tree.rangeSumData != null); assertTrue(tree.rangeSumData.length == (tree.numberOfLeaves - 1) / 2); int root = tree.getRoot(); assertTrue(tree.checkStrictlyContains(root, new float[2])); tree.setConfig(Config.BOUNDING_BOX_CACHE_FRACTION, 0.0); assertTrue(tree.boundingBoxData == null); assertTrue(tree.rangeSumData == null); assertFalse(tree.checkStrictlyContains(root, new float[2])); tree.deletePoint(3, 4); tree.setConfig(Config.BOUNDING_BOX_CACHE_FRACTION, 0.5); assertTrue(tree.boundingBoxData != null); assertTrue(tree.boundingBoxData.length == ((tree.numberOfLeaves - 1) / 2) * 4); assertTrue(tree.rangeSumData != null); assertTrue(tree.rangeSumData.length == (tree.numberOfLeaves - 1) / 2); // same as initial state except mass at 0,1 is 1 int node = tree.getRoot(); IBoundingBoxView expectedBox = new BoundingBox(new float[] { -1, -1 }).getMergedBox(new float[] { 1, 1 }); assertThat(tree.getBox(node), is(expectedBox)); assertThat(tree.getCutDimension(node), is(1)); assertThat(tree.getCutValue(node), closeTo(-0.5, EPSILON)); assertThat(tree.getMass(), is(4)); assertThat(tree.isLeaf(tree.getLeftChild(node)), is(true)); assertThat(tree.pointStoreView.getNumericVector(tree.getPointIndex(tree.getLeftChild(node))), is(new float[] { -1, -1 })); assertThat(tree.getMass(tree.getLeftChild(node)), is(1)); assertEquals(tree.getSequenceMap(tree.getPointIndex(tree.getLeftChild(node))).get(1L), 1); assertArrayEquals(new double[] { -1.0, 1.0 }, toDoubleArray(tree.getPointSum(node)), EPSILON); assertThat(tree.isLeaf(tree.getLeftChild(node)), is(true)); assertThat(tree.pointStoreView.getNumericVector(tree.getPointIndex(tree.getLeftChild(node))), is(new float[] { -1, -1 })); assertThat(tree.getMass(tree.getLeftChild(node)), is(1)); assertEquals(tree.getSequenceMap(tree.getPointIndex(tree.getLeftChild(node))).get(1L), 1); node = tree.getRightChild(node); expectedBox = new BoundingBox(new float[] { -1, 0 }).getMergedBox(new float[] { 1, 1 }); assertThat(tree.getBox(node), is(expectedBox)); assertThat(tree.getCutDimension(node), is(0)); assertThat(tree.getCutValue(node), closeTo(0.5, EPSILON)); assertThat(tree.getMass(node), is(3)); NodeView nodeView = new NodeView(tree, tree.pointStoreView, node); assertTrue(nodeView.getCutDimension() == 0); assertTrue(nodeView.getCutValue() == 0.5); assertArrayEquals(new double[] { 0.0, 2.0 }, toDoubleArray(tree.getPointSum(node)), EPSILON); assertThat(tree.isLeaf(tree.getRightChild(node)), is(true)); assertThat(tree.pointStoreView.getNumericVector(tree.getPointIndex(tree.getRightChild(node))), is(new float[] { 1, 1 })); assertThat(tree.getMass(tree.getRightChild(node)), is(1)); assertEquals(tree.getSequenceMap(tree.getPointIndex(tree.getRightChild(node))).get(2L), 1); NodeStoreSmall nodeStoreSmall = (NodeStoreSmall) tree.nodeStore; assert (nodeStoreSmall.getParentIndex(tree.getLeftChild(node)) == node); node = tree.getLeftChild(node); expectedBox = new BoundingBox(new float[] { -1, 0 }).getMergedBox(new float[] { 0, 1 }); assertThat(tree.getBox(node), is(expectedBox)); assertEquals(expectedBox.toString(), tree.getBox(node).toString()); assertThat(tree.getCutDimension(node), is(0)); assertThat(tree.getCutValue(node), closeTo(-0.5, EPSILON)); assertThat(tree.getMass(), is(4)); assertArrayEquals(new double[] { -1.0, 1.0 }, toDoubleArray(tree.getPointSum(node)), EPSILON); assertThat(tree.isLeaf(tree.getLeftChild(node)), is(true)); assertThat(tree.pointStoreView.getNumericVector(tree.getPointIndex(tree.getLeftChild(node))), is(new float[] { -1, 0 })); assertThat(tree.getMass(tree.getLeftChild(node)), is(1)); assertEquals(tree.getSequenceMap(tree.getPointIndex(tree.getLeftChild(node))).get(3L), 1); assertThat(tree.isLeaf(tree.getRightChild(node)), is(true)); assertThat(tree.pointStoreView.getNumericVector(tree.getPointIndex(tree.getRightChild(node))), is(new float[] { 0, 1 })); assertThat(tree.getMass(tree.getRightChild(node)), is(1)); assertEquals(tree.getSequenceMap(tree.getPointIndex(tree.getRightChild(node))).get(5L), 1); } @Test public void testDeletePointInvalid() { // specified sequence index does not exist assertThrows(IllegalArgumentException.class, () -> tree.deletePoint(2, 99)); // point does not exist in tree assertThrows(IllegalArgumentException.class, () -> tree.deletePoint(7, 3)); } @Test public void testUpdatesOnSmallBoundingBox() { // verifies on small bounding boxes random cuts and tree updates are functional PointStore pointStoreFloat = new PointStore.Builder().indexCapacity(10).capacity(10).currentStoreCapacity(10) .dimensions(1).build(); RandomCutTree tree = RandomCutTree.builder().random(rng).pointStoreView(pointStoreFloat).build(); List> points = new ArrayList<>(); points.add(new Weighted<>(new double[] { 48.08 }, 0, 1L)); points.add(new Weighted<>(new double[] { 48.08001 }, 0, 2L)); pointStoreFloat.add(toFloatArray(points.get(0).getValue()), 0); pointStoreFloat.add(toFloatArray(points.get(1).getValue()), 1); tree.addPoint(0, points.get(0).getSequenceIndex()); tree.addPoint(1, points.get(1).getSequenceIndex()); assertNotEquals(pointStoreFloat.getNumericVector(0)[0], pointStoreFloat.getNumericVector(1)[0]); for (int i = 0; i < 10000; i++) { Weighted point = points.get(i % points.size()); tree.deletePoint(i % points.size(), point.getSequenceIndex()); tree.addPoint(i % points.size(), point.getSequenceIndex()); } } @Test public void testfloat() { float x = 110.13f; double sum = 0; int trials = 230000; for (int i = 0; i < trials; i++) { float z = (x * (trials - i + 1) - x); sum += z; } System.out.println(sum); for (int i = 0; i < trials - 1; i++) { float z = (x * (trials - i + 1) - x); sum -= z; } System.out.println(sum + " " + (double) x + " " + (sum <= (double) x)); float[] possible = new float[trials]; float[] alsoPossible = new float[trials]; for (int i = 0; i < trials; i++) { possible[i] = x; alsoPossible[i] = (trials - i + 1) * x; } BoundingBox box = new BoundingBox(possible, alsoPossible); System.out.println("rangesum " + box.getRangeSum()); double factor = 1.0 - 1e-16; System.out.println(factor); RandomCutTree tree = RandomCutTree.builder().dimension(trials).build(); // tries both path tree.randomCut(factor, possible, box); tree.randomCut(1.0 - 1e-17, possible, box); } @ParameterizedTest @ValueSource(ints = { 100, 10000, 100000 }) void testNodeStore(int size) { PointStore pointStoreFloat = new PointStore.Builder().indexCapacity(100).capacity(100).initialSize(100) .dimensions(2).build(); tree = RandomCutTree.builder().random(rng).centerOfMassEnabled(true).pointStoreView(pointStoreFloat) .capacity(size).storeSequenceIndexesEnabled(true).storeParent(true).dimension(2).build(); long seed = new Random().nextLong(); System.out.println("seed :" + seed); Random rng = new Random(seed); for (int i = 0; i < 100; i++) { pointStoreFloat.add(new double[] { rng.nextDouble(), rng.nextDouble() }, 0L); } ArrayList> list = new ArrayList<>(); for (int i = 0; i < 100; i++) { tree.addPoint(i, 0L); list.add(new Weighted<>(i, rng.nextFloat(), 0)); } list.sort((o1, o2) -> Float.compare(o1.getWeight(), o2.getWeight())); for (int i = 0; i < 50; i++) { tree.deletePoint(list.remove(0).getValue(), 0L); } AbstractNodeStore nodeStore = tree.getNodeStore(); for (int i = 0; i < 25; i++) { if (!tree.isLeaf(tree.getLeftChild(tree.getRoot()))) { assert (nodeStore.getParentIndex(tree.getLeftChild(tree.getRoot())) == tree.root); } if (!tree.isLeaf(tree.getRightChild(tree.getRoot()))) { assert (nodeStore.getParentIndex(tree.getRightChild(tree.getRoot())) == tree.root); } tree.deletePoint(list.remove(0).getValue(), 0L); } } // spoofs the cut (using a changing box) to hit illegal state @Test public void cutTest1() { BoundingBox box1 = mock(BoundingBox.class); when(box1.getMinValue(anyInt())).thenReturn(0.0).thenReturn(0.0).thenReturn(1.0); assertThrows(IllegalStateException.class, () -> tree.randomCut(1.2, new float[] { 1.0f }, box1)); } // spoofs the cut (usina a changing box) to hit illegal state @Test public void cutTest2() { BoundingBox box1 = mock(BoundingBox.class); when(box1.getMinValue(anyInt())).thenReturn(0.0).thenReturn(0.0).thenReturn(1.0); assertThrows(IllegalStateException.class, () -> tree.randomCut(1.5, new float[] { 1.0f }, box1)); } @Test public void cutTestMultiD() { float[] point = new float[2]; float[] newPoint = new float[] { 0.1f + new Random().nextFloat(), 0.1f + new Random().nextFloat() }; float[] testPoint = new float[] { point[0], newPoint[1] }; float[] testPoint2 = new float[] { newPoint[0], point[1] }; BoundingBox box1 = new BoundingBox(point, point); BoundingBox box2 = new BoundingBox(newPoint, newPoint); assertThrows(IllegalArgumentException.class, () -> tree.randomCut(new Random().nextDouble(), point, box1)); assertDoesNotThrow(() -> tree.randomCut(new Random().nextDouble(), point, box2)); assertDoesNotThrow(() -> tree.randomCut(new Random().nextDouble(), newPoint, box1)); Cut cut1 = tree.randomCut(0, new float[] { 0, 1.0f }, box1); // first dimension is identical assertTrue(cut1.getDimension() == 1); assertTrue(cut1.getValue() == 0f); assertEquals(cut1.toString(), "Cut(1, 0.000000)"); Cut cut2 = tree.randomCut(1.2, point, box2); assertTrue(cut2.getDimension() == 0); assertTrue(cut2.getValue() == Math.nextAfter(newPoint[0], point[0])); Cut largeCut = tree.randomCut(1.2, newPoint, box1); assertTrue(largeCut.getDimension() == 0); assertTrue(largeCut.getValue() == Math.nextAfter(newPoint[0], point[0])); Cut testCut = tree.randomCut(1.2, testPoint, box2); assertTrue(testCut.getDimension() == 0); assertTrue(testCut.getValue() == Math.nextAfter(newPoint[0], testPoint[0])); Cut testCut2 = tree.randomCut(1.2, testPoint2, box2); assertTrue(testCut2.getDimension() == 1); assertTrue(testCut2.getValue() == Math.nextAfter(newPoint[1], point[1])); Cut another = tree.randomCut(1.5, point, box2); assertTrue(another.getDimension() == 1); assertTrue(another.getValue() == Math.nextAfter(newPoint[1], point[1])); Cut anotherLargeCut = tree.randomCut(1.5, newPoint, box1); assertTrue(anotherLargeCut.getDimension() == 1); assertTrue(anotherLargeCut.getValue() == Math.nextAfter(newPoint[1], point[1])); Cut anotherTestCut = tree.randomCut(1.5, testPoint, box1); assertTrue(testCut.getDimension() == 0); assertTrue(testCut.getValue() == Math.nextAfter(newPoint[0], point[0])); Cut anotherTestCut2 = tree.randomCut(1.5, testPoint2, box1); assertTrue(testCut2.getDimension() == 1); assertTrue(testCut2.getValue() == Math.nextAfter(newPoint[1], point[1])); } // the following are tested directly since they are unreachable @Test public void traverseTest() { PointStore pointStoreFloat = new PointStore.Builder().indexCapacity(100).capacity(100).initialSize(100) .dimensions(2).build(); tree = RandomCutTree.builder().random(rng).centerOfMassEnabled(true).pointStoreView(pointStoreFloat) .capacity(188).storeSequenceIndexesEnabled(true).storeParent(true).dimension(2).build(); assertDoesNotThrow(() -> tree.validateAndReconstruct()); assertThrows(IllegalArgumentException.class, () -> tree.traverse(null, null)); assertThrows(IllegalArgumentException.class, () -> tree.traverseMulti(null, null)); } @Test public void invalidNodeTest() { PointStore pointStoreFloat = new PointStore.Builder().indexCapacity(100).capacity(100).initialSize(100) .dimensions(2).build(); tree = RandomCutTree.builder().random(rng).centerOfMassEnabled(true).pointStoreView(pointStoreFloat) .capacity(188).storeSequenceIndexesEnabled(true).storeParent(true).dimension(2).build(); tree.root = 187; assertThrows(IllegalStateException.class, () -> tree.validateAndReconstruct()); assertThrows(IllegalStateException.class, () -> tree.traversePathToLeafAndVisitNodes(null, null, null, tree.root, 0)); assertThrows(IllegalStateException.class, () -> tree.traverseTreeMulti(null, null, null, tree.root, 0)); assertThrows(IllegalStateException.class, () -> tree.growNodeBox(null, pointStoreFloat, 0, 187)); assertThrows(IllegalStateException.class, () -> tree.getBox(187)); } } ================================================ FILE: Java/core/src/test/java/com/amazon/randomcutforest/util/ArrayPackingTest.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.util; import static com.amazon.randomcutforest.util.ArrayPacking.pack; import static com.amazon.randomcutforest.util.ArrayPacking.unpackDoubles; import static com.amazon.randomcutforest.util.ArrayPacking.unpackFloats; import static com.amazon.randomcutforest.util.ArrayPacking.unpackInts; import static com.amazon.randomcutforest.util.ArrayPacking.unpackShorts; import static org.junit.jupiter.api.Assertions.assertArrayEquals; import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; import java.util.Arrays; import java.util.Random; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; public class ArrayPackingTest { private Random rng; @BeforeEach public void setUp() { rng = new Random(); ArrayPacking arrayPacking = new ArrayPacking(); } @Test public void testLogMax() { long[] bases = new long[] { 2, 101, 3_456_789 }; Arrays.stream(bases).forEach(base -> { int log = ArrayPacking.logMax(base); assertTrue(Math.pow(base, log + 1) >= Integer.MAX_VALUE); assertTrue(Math.pow(base, log) < Integer.MAX_VALUE); }); } @Test public void testLogMaxInvalid() { assertThrows(IllegalArgumentException.class, () -> ArrayPacking.logMax(1)); assertThrows(IllegalArgumentException.class, () -> ArrayPacking.logMax(0)); assertThrows(IllegalArgumentException.class, () -> ArrayPacking.logMax(-123467890)); } @ParameterizedTest @ValueSource(ints = { 0, 1, 2, 3, 11, 100 }) public void testIntsPackRoundTrip(int inputLength) { int[] inputArray = rng.ints().limit(inputLength).toArray(); assertArrayEquals(inputArray, ArrayPacking.unpackInts(ArrayPacking.pack(inputArray, false), false)); assertArrayEquals(inputArray, ArrayPacking.unpackInts(ArrayPacking.pack(inputArray, true), true)); } @ParameterizedTest @ValueSource(ints = { 0, 1, 2, 3, 17, 100 }) public void testShortsPackRoundTrip(int inputLength) { short[] inputArray = new short[inputLength]; for (int i = 0; i < inputLength; i++) { inputArray[i] = (short) (rng.nextInt() % 100); } assertArrayEquals(inputArray, ArrayPacking.unpackShorts(ArrayPacking.pack(inputArray, false), false)); assertArrayEquals(inputArray, ArrayPacking.unpackShorts(ArrayPacking.pack(inputArray, true), true)); } @ParameterizedTest @ValueSource(ints = { 0, 1, 2, 3, 11, 100 }) public void testIdenticalInts(int inputLength) { int[] inputArray = new int[inputLength]; Arrays.fill(inputArray, rng.nextInt()); assertArrayEquals(inputArray, ArrayPacking.unpackInts(ArrayPacking.pack(inputArray, false), false)); int[] result = ArrayPacking.pack(inputArray, true); assertTrue(result.length == 3 || inputLength < 3 && result.length == inputLength); assertArrayEquals(inputArray, ArrayPacking.unpackInts(result, true)); } @ParameterizedTest @ValueSource(ints = { 0, 1, 2, 3, 17, 100 }) public void testIdenticalShorts(int inputLength) { short item = (short) (rng.nextInt() % 100); short[] inputArray = new short[inputLength]; for (int i = 0; i < inputLength; i++) { inputArray[i] = item; } assertArrayEquals(inputArray, ArrayPacking.unpackShorts(ArrayPacking.pack(inputArray, false), false)); int[] result = ArrayPacking.pack(inputArray, true); assertTrue(result.length == 3 || inputLength < 3 && result.length == inputLength); assertArrayEquals(inputArray, ArrayPacking.unpackShorts(result, true)); } @Test public void testUnpackIntsWithLengthGiven() { int inputLength = 100; int[] inputArray = rng.ints().limit(inputLength).toArray(); assertThrows(IllegalArgumentException.class, () -> pack(inputArray, inputLength + 1, false)); assertThrows(IllegalArgumentException.class, () -> pack(inputArray, inputLength + 1, true)); assertThrows(IllegalArgumentException.class, () -> pack(inputArray, -1, false)); assertThrows(IllegalArgumentException.class, () -> pack(inputArray, -1, true)); assertDoesNotThrow(() -> pack(inputArray, 0, true)); assertDoesNotThrow(() -> pack(inputArray, 0, false)); int[] uncompressed = ArrayPacking.pack(inputArray, false); int[] compressed = ArrayPacking.pack(inputArray, true); int[] result = ArrayPacking.unpackInts(uncompressed, 50, false); assertThrows(IllegalArgumentException.class, () -> unpackInts(compressed, -1, true)); assertEquals(50, result.length); assertArrayEquals(Arrays.copyOf(inputArray, 50), result); result = ArrayPacking.unpackInts(compressed, 50, true); assertEquals(50, result.length); assertArrayEquals(Arrays.copyOf(inputArray, 50), result); result = ArrayPacking.unpackInts(uncompressed, 200, false); assertEquals(200, result.length); assertArrayEquals(inputArray, Arrays.copyOf(result, 100)); for (int i = 100; i < 200; i++) { assertEquals(0, result[i]); } result = ArrayPacking.unpackInts(compressed, 200, true); assertEquals(200, result.length); assertArrayEquals(inputArray, Arrays.copyOf(result, 100)); for (int i = 100; i < 200; i++) { assertEquals(0, result[i]); } } @Test public void testUnpackShortsWithLengthGiven() { int inputLength = 100; short[] inputArray = new short[50]; Arrays.fill(inputArray, (short) 2); short[] test = new short[2]; short[] test2 = new short[3]; int[] uncompressed = ArrayPacking.pack(inputArray, false); int[] compressed = ArrayPacking.pack(inputArray, true); assertArrayEquals(test, unpackShorts(new int[2], true)); assertArrayEquals(test, unpackShorts(new int[2], false)); assertArrayEquals(test2, unpackShorts(new int[3], false)); assertThrows(IllegalArgumentException.class, () -> unpackShorts(uncompressed, -1, false)); short[] result = ArrayPacking.unpackShorts(uncompressed, 50, false); assertEquals(50, result.length); assertArrayEquals(Arrays.copyOf(inputArray, 50), result); result = ArrayPacking.unpackShorts(compressed, 100, true); assertEquals(100, result.length); for (int y = 0; y < 50; y++) { assertTrue(result[y] == 2); } for (int y = 50; y < 100; y++) { assertTrue(result[y] == 0); } } @ParameterizedTest @ValueSource(ints = { 0, 1, 2, 3, 17, 100 }) public void testPackDoublesRoundTrip(int inputLength) { double[] inputArray = rng.doubles().limit(inputLength).toArray(); assertArrayEquals(inputArray, ArrayPacking.unpackDoubles(ArrayPacking.pack(inputArray))); } @ParameterizedTest @ValueSource(ints = { 0, 1, 2, 3, 5, 100 }) public void testPackFloatsRoundTrip(int inputLength) { float[] inputArray = new float[inputLength]; for (int i = 0; i < inputLength; i++) { inputArray[i] = rng.nextFloat(); } assertArrayEquals(inputArray, unpackFloats(ArrayPacking.pack(inputArray))); } @ParameterizedTest @ValueSource(booleans = { true, false }) public void testPackShortsWithLength(boolean compress) { int inputLength = 100; int packLength = 76; short[] inputArray = new short[inputLength]; for (int i = 0; i < inputLength; i++) { inputArray[i] = (short) (rng.nextInt() % 100); } assertThrows(IllegalArgumentException.class, () -> pack(inputArray, inputLength + 10, compress)); assertThrows(IllegalArgumentException.class, () -> pack(inputArray, -10, compress)); int[] array = ArrayPacking.pack(inputArray, packLength, compress); short[] outputArray = ArrayPacking.unpackShorts(array, compress); assertEquals(packLength, outputArray.length); assertArrayEquals(Arrays.copyOf(inputArray, packLength), outputArray); } @Test public void testPackDoublesWithLength() { int inputLength = 100; int packLength = 76; double[] inputArray = rng.doubles().limit(inputLength).toArray(); byte[] bytes = ArrayPacking.pack(inputArray, packLength); double[] outputArray = ArrayPacking.unpackDoubles(bytes); assertEquals(packLength, outputArray.length); assertArrayEquals(Arrays.copyOf(inputArray, packLength), outputArray); assertDoesNotThrow(() -> pack(new double[0], 0)); assertThrows(IllegalArgumentException.class, () -> pack(new double[10], 11)); assertThrows(IllegalArgumentException.class, () -> pack(new double[10], -1)); } @Test public void testPackFloatsWithLength() { int inputLength = 100; int packLength = 76; float[] inputArray = new float[inputLength]; for (int i = 0; i < inputLength; i++) { inputArray[i] = rng.nextFloat(); } byte[] bytes = ArrayPacking.pack(inputArray, packLength); assertThrows(IllegalArgumentException.class, () -> pack(inputArray, inputLength + 10)); float[] outputArray = unpackFloats(bytes); assertEquals(packLength, outputArray.length); assertArrayEquals(Arrays.copyOf(inputArray, packLength), outputArray); assertDoesNotThrow(() -> pack(new float[0], 0)); assertThrows(IllegalArgumentException.class, () -> pack(new float[10], -1)); } @Test public void testUnpackDoublesWithLength() { int inputLength = 100; double[] inputArray = rng.doubles().limit(inputLength).toArray(); byte[] bytes = ArrayPacking.pack(inputArray); int unpackLength1 = 25; double[] outputArray1 = ArrayPacking.unpackDoubles(bytes, unpackLength1); assertEquals(unpackLength1, outputArray1.length); assertArrayEquals(Arrays.copyOf(inputArray, unpackLength1), outputArray1); int unpackLength2 = 123; assertThrows(IllegalArgumentException.class, () -> pack(inputArray, unpackLength2)); double[] outputArray2 = ArrayPacking.unpackDoubles(bytes, unpackLength2); assertEquals(unpackLength2, outputArray2.length); assertArrayEquals(inputArray, Arrays.copyOf(outputArray2, inputLength)); for (int i = inputLength; i < unpackLength2; i++) { assertEquals(0.0, outputArray2[i]); } } @Test public void testUnpackFloatWithLength() { int inputLength = 100; float[] inputArray = new float[inputLength]; for (int i = 0; i < inputLength; i++) { inputArray[i] = rng.nextFloat(); } byte[] bytes = ArrayPacking.pack(inputArray); int unpackLength1 = 25; float[] outputArray1 = unpackFloats(bytes, unpackLength1); assertEquals(unpackLength1, outputArray1.length); assertArrayEquals(Arrays.copyOf(inputArray, unpackLength1), outputArray1); int unpackLength2 = 123; float[] outputArray2 = unpackFloats(bytes, unpackLength2); assertEquals(unpackLength2, outputArray2.length); assertArrayEquals(inputArray, Arrays.copyOf(outputArray2, inputLength)); for (int i = inputLength; i < unpackLength2; i++) { assertEquals(0.0, outputArray2[i]); } } @Test public void testConfig() { byte[] array = new byte[1]; assertThrows(IllegalArgumentException.class, () -> unpackFloats(array, 1)); assertThrows(IllegalArgumentException.class, () -> unpackDoubles(array, 1)); byte[] newArray = new byte[Double.BYTES]; assertDoesNotThrow(() -> unpackDoubles(newArray, 1)); assertDoesNotThrow(() -> unpackFloats(newArray, 1)); assertThrows(IllegalArgumentException.class, () -> unpackFloats(newArray, -1)); assertThrows(IllegalArgumentException.class, () -> unpackDoubles(newArray, -1)); } } ================================================ FILE: Java/core/src/test/java/com/amazon/randomcutforest/util/ArrayUtilsTest.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.util; import static com.amazon.randomcutforest.CommonUtils.toDoubleArray; import static com.amazon.randomcutforest.CommonUtils.toDoubleArrayNullable; import static com.amazon.randomcutforest.CommonUtils.toFloatArray; import static com.amazon.randomcutforest.CommonUtils.toFloatArrayNullable; import static org.junit.jupiter.api.Assertions.assertArrayEquals; import static org.junit.jupiter.api.Assertions.assertNotSame; import static org.junit.jupiter.api.Assertions.assertNull; import static org.junit.jupiter.api.Assertions.assertThrows; import java.util.Arrays; import java.util.Random; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.CsvSource; public class ArrayUtilsTest { ArrayUtils utils = new ArrayUtils(); @ParameterizedTest @CsvSource({ "-0.0,0.0", "0.0,0.0", "-0.0:0.0:1.0,0.0:0.0:1.0" }) public void cleanCopy(String input, String expected) { double[] inputArray = array(input); double[] cleanCopy = ArrayUtils.cleanCopy(inputArray); assertNotSame(inputArray, cleanCopy); assertArrayEquals(array(expected), cleanCopy); } private double[] array(String arrayString) { return Arrays.stream(arrayString.split(":")).mapToDouble(Double::valueOf).toArray(); } @Test void testNullable() { assertNull(toDoubleArrayNullable(null)); assertNull(toFloatArrayNullable(null)); float random = new Random().nextFloat(); assertArrayEquals(toFloatArrayNullable(new double[] { random }), toFloatArray(new double[] { random })); assertArrayEquals(toDoubleArrayNullable(new float[] { random }), toDoubleArray(new float[] { random })); assertThrows(NullPointerException.class, () -> toDoubleArray(null)); assertThrows(NullPointerException.class, () -> toFloatArray(null)); } } ================================================ FILE: Java/core/src/test/java/com/amazon/randomcutforest/util/ShingleBuilderTest.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.util; import static org.junit.jupiter.api.Assertions.assertArrayEquals; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertThrows; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; public class ShingleBuilderTest { private int dimensions; private int shingleSize; private ShingleBuilder builder; @BeforeEach public void setUp() { dimensions = 2; shingleSize = 3; builder = new ShingleBuilder(dimensions, shingleSize); } @Test public void testNew() { assertEquals(dimensions, builder.getInputPointSize()); assertEquals(dimensions * shingleSize, builder.getShingledPointSize()); assertFalse(builder.isCyclic()); } @Test public void testNewWithInvalidArguments() { assertThrows(IllegalArgumentException.class, () -> new ShingleBuilder(0, shingleSize)); assertThrows(IllegalArgumentException.class, () -> new ShingleBuilder(dimensions, 0)); } @Test public void testAddPoint() { double[] shingle = builder.getShingle(); assertArrayEquals(new double[] { 0, 0, 0, 0, 0, 0 }, shingle); builder.addPoint(new double[] { 9, 10 }); shingle = builder.getShingle(); assertArrayEquals(new double[] { 0, 0, 0, 0, 9, 10 }, shingle); builder.addPoint(new double[] { 7, 8 }); shingle = builder.getShingle(); assertArrayEquals(new double[] { 0, 0, 9, 10, 7, 8 }, shingle); builder.addPoint(new double[] { 5, 6 }); shingle = builder.getShingle(); assertArrayEquals(new double[] { 9, 10, 7, 8, 5, 6 }, shingle); builder.addPoint(new double[] { 3, 4 }); shingle = builder.getShingle(); assertArrayEquals(new double[] { 7, 8, 5, 6, 3, 4 }, shingle); } @Test public void testAddPointCyclic() { builder = new ShingleBuilder(dimensions, shingleSize, true); double[] shingle = builder.getShingle(); assertArrayEquals(new double[] { 0, 0, 0, 0, 0, 0 }, shingle); builder.addPoint(new double[] { 9, 10 }); shingle = builder.getShingle(); assertArrayEquals(new double[] { 9, 10, 0, 0, 0, 0 }, shingle); builder.addPoint(new double[] { 7, 8 }); shingle = builder.getShingle(); assertArrayEquals(new double[] { 9, 10, 7, 8, 0, 0 }, shingle); builder.addPoint(new double[] { 5, 6 }); shingle = builder.getShingle(); assertArrayEquals(new double[] { 9, 10, 7, 8, 5, 6 }, shingle); builder.addPoint(new double[] { 3, 4 }); shingle = builder.getShingle(); assertArrayEquals(new double[] { 3, 4, 7, 8, 5, 6 }, shingle); } @Test public void testAddPointWithInvalidArguments() { assertThrows(NullPointerException.class, () -> builder.addPoint(null)); double[] point = new double[9]; // wrong size of array assertThrows(IllegalArgumentException.class, () -> builder.addPoint(point)); } @Test public void testShingleCopy() { double[] buffer = new double[dimensions * shingleSize]; builder.addPoint(new double[] { 2, 1 }); builder.addPoint(new double[] { 4, 3 }); builder.addPoint(new double[] { 6, 5 }); double[] shingle = builder.getShingle(); assertArrayEquals(new double[] { 2, 1, 4, 3, 6, 5 }, shingle); assertArrayEquals(new double[] { 0, 0, 0, 0, 0, 0 }, buffer); builder.getShingle(buffer); assertArrayEquals(shingle, buffer); buffer[0] = 0; assertEquals(2, shingle[0]); } @Test public void testGetShingleWithInvalidArguments() { assertThrows(NullPointerException.class, () -> builder.getShingle(null)); double[] buffer = new double[2]; // wrong size of array assertThrows(IllegalArgumentException.class, () -> builder.getShingle(buffer)); } } ================================================ FILE: Java/core/src/test/java/com/amazon/randomcutforest/util/WeightedTest.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.util; import static com.amazon.randomcutforest.util.Weighted.createSample; import static com.amazon.randomcutforest.util.Weighted.prefixPick; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; import java.util.ArrayList; import java.util.List; import java.util.Random; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; public class WeightedTest { private Random rng; int size = 10000; int heavyIndex; ArrayList> list = new ArrayList<>(); @BeforeEach public void setUp() { rng = new Random(); list = new ArrayList<>(); for (int i = 0; i < size; i++) { list.add(new Weighted<>(i, (float) (0.1 + rng.nextDouble()))); } heavyIndex = size + 7; list.add(new Weighted<>(heavyIndex, size)); } @Test public void testCreateSample() { // forcedSample 0 will return a null list assertTrue(createSample(list, 0, 10, 0, 1.0).size() == 0); // the following should add the last item first List> sampledList = createSample(list, 0, 10, 0.1, 1.0); assertTrue(sampledList.size() > 0); assertTrue(sampledList.get(0).index == heavyIndex); assertTrue(sampledList.get(0).weight == (float) size); } @Test public void testPrefixPick() { double total = list.stream().mapToDouble(e -> e.weight).sum(); assertTrue(total < 2 * size); Weighted item = prefixPick(list, size / 3.0); assertTrue(item.index < size); assertTrue(item.weight <= 1.1); // should be the last element Weighted heavyItem = prefixPick(list, 3.0 * size / 4); assertTrue(heavyItem.index == heavyIndex); assertTrue(heavyItem.weight == (float) size); // checking extreme weights heavyItem = prefixPick(list, 2 * size); assertTrue(heavyItem.index == heavyIndex); assertTrue(heavyItem.weight == (float) size); } @Test public void emptyList() { List> list = new ArrayList<>(); assertThrows(IllegalArgumentException.class, () -> prefixPick(list, 1.0f)); } } ================================================ FILE: Java/core/src/test/resources/com/amazon/randomcutforest/state/Preprocessor_1.json ================================================ { "version": "2.1", "useImputedFraction": 0.5, "imputationMethod": "PREVIOUS", "forestMode": "STANDARD", "transformMethod": "NONE", "weights": [ 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0 ], "lastShingledPoint": [ 0.0, 79.5, 83.0, 76.0, 0.0, 94.0, 94.0, 94.0, 0.0, 85.0, 85.0, 85.0, 0.0, 53.0, 53.0, 53.0, 0.0, 53.0, 53.0, 53.0, 0.0, 97.0, 97.0, 97.0, 0.0, 66.0, 66.0, 66.0, 0.0, 53.0, 53.0, 53.0 ], "lastShingledInput": [ 0.0, 79.5, 83.0, 76.0, 0.0, 94.0, 94.0, 94.0, 0.0, 85.0, 85.0, 85.0, 0.0, 53.0, 53.0, 53.0, 0.0, 53.0, 53.0, 53.0, 0.0, 97.0, 97.0, 97.0, 0.0, 66.0, 66.0, 66.0, 0.0, 53.0, 53.0, 53.0 ], "timeDecay": 0.0, "startNormalization": 10, "stopNormalization": 2147483647, "shingleSize": 8, "dimensions": 32, "inputLength": 32, "clipFactor": 10.0, "normalizeTime": false, "previousTimeStamps": [ 0, 0, 0, 0, 0, 0, 0, 0 ], "valuesSeen": 1257, "internalTimeStamp": 1257, "dataQualityState": { "discount": 1.0e-4, "weight": 629.4992050874407, "sumSquared": 629.4992050874407, "sum": 629.4992050874407, "count": 1257 }, "timeStampDeviationState": { "discount": 1.0e-4, "weight": 629.4992050874407, "sumSquared": 0.0, "sum": 0.0, "count": 1257 } } ================================================ FILE: Java/core/src/test/resources/com/amazon/randomcutforest/state/Preprocessor_2.json ================================================ { "version": "2.1", "useImputedFraction": 0.5, "imputationMethod": "PREVIOUS", "forestMode": "STANDARD", "transformMethod": "NONE", "weights": [ 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0 ], "lastShingledPoint": [ 0.0, 81.1, 98.0, 54.0, 0.0, 72.875, 92.0, 53.0, 0.0, 64.3, 84.0, 50.0, 0.0, 84.9, 97.0, 55.0, 0.0, 72.11111111111111, 92.0, 51.0, 0.0, 70.36363636363636, 84.0, 51.0, 0.0, 85.66666666666667, 96.0, 65.0, 0.0, 75.875, 97.0, 53.0 ], "lastShingledInput": [ 0.0, 81.1, 98.0, 54.0, 0.0, 72.875, 92.0, 53.0, 0.0, 64.3, 84.0, 50.0, 0.0, 84.9, 97.0, 55.0, 0.0, 72.11111111111111, 92.0, 51.0, 0.0, 70.36363636363636, 84.0, 51.0, 0.0, 85.66666666666667, 96.0, 65.0, 0.0, 75.875, 97.0, 53.0 ], "timeDecay": 0.0, "startNormalization": 10, "stopNormalization": 2147483647, "shingleSize": 8, "dimensions": 32, "inputLength": 32, "clipFactor": 10.0, "normalizeTime": false, "previousTimeStamps": [ 0, 0, 0, 0, 0, 0, 0, 0 ], "valuesSeen": 505, "internalTimeStamp": 505, "dataQualityState": { "discount": 1.0E-4, "weight": 253.49802371541492, "sumSquared": 253.49802371541492, "sum": 253.49802371541492, "count": 505 }, "timeStampDeviationState": { "discount": 1.0E-4, "weight": 253.49802371541492, "sumSquared": 0.0, "sum": 0.0, "count": 505 } } ================================================ FILE: Java/core/src/test/resources/com/amazon/randomcutforest/state/Preprocessor_3.json ================================================ { "version": "2.1", "useImputedFraction": 0.5, "imputationMethod": "PREVIOUS", "forestMode": "STANDARD", "transformMethod": "NONE", "weights": [1.0, 1.0], "lastShingledPoint": [81.0, 82.0, 83.0, 84.0, 86.0, 87.0, 88.0, 88.0], "lastShingledInput": [81.0, 82.0, 83.0, 84.0, 86.0, 87.0, 88.0, 88.0], "timeDecay": 0.0, "startNormalization": 10, "stopNormalization": 2147483647, "shingleSize": 8, "dimensions": 8, "inputLength": 1, "clipFactor": 10.0, "normalizeTime": false, "previousTimeStamps": [0, 0, 0, 0, 0, 0, 0, 0], "valuesSeen": 1502, "internalTimeStamp": 1502, "dataQualityState": { "discount": 1.0e-4, "weight": 751.9993346640052, "sumSquared": 751.9993346640052, "sum": 751.9993346640052, "count": 1502 }, "timeStampDeviationState": { "discount": 1.0e-4, "weight": 751.9993346640052, "sumSquared": 0.0, "sum": 0.0, "count": 1502 } } ================================================ FILE: Java/core/src/test/resources/com/amazon/randomcutforest/state/state_1.json ================================================ { "version": "2.0", "totalUpdates": 1257, "timeDecay": 1.0e-4, "numberOfTrees": 30, "sampleSize": 256, "shingleSize": 8, "dimensions": 32, "outputAfter": 32, "compressed": true, "partialTreeState": true, "boundingBoxCacheFraction": 0.0, "storeSequenceIndexesEnabled": false, "compact": true, "internalShinglingEnabled": false, "centerOfMassEnabled": false, "precision": "FLOAT_32", "pointStoreState": { "version": "2.0", "dimensions": 32, "capacity": 7681, "shingleSize": 8, "precision": "FLOAT_32", "startOfFreeSegment": 9536, "pointData": [ 0, 0, 0, 0, 66, -114, 0, 0, 66, -114, 0, 0, 66, -114, 0, 0, 0, 0, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 0, 0, 0, 0, 66, -76, 0, 0, 66, -76, 0, 0, 66, -76, 0, 0, 0, 0, 0, 0, 66, -76, 0, 0, 66, -76, 0, 0, 66, -76, 0, 0, 0, 0, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 0, 0, 0, 0, 66, 72, 0, 0, 66, 72, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, 100, 0, 0, 66, 100, 0, 0, 66, 100, 0, 0, 0, 0, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 0, 0, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 0, 0, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 0, 0, 0, 0, 66, 72, 0, 0, 66, 72, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, 100, 0, 0, 66, 100, 0, 0, 66, 100, 0, 0, 0, 0, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 0, 0, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 0, 0, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 0, 0, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -70, 0, 0, 66, -70, 0, 0, 66, -70, 0, 0, 0, 0, 0, 0, 66, -85, 0, 0, 66, -64, 0, 0, 66, -106, 0, 0, 0, 0, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 0, 0, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 0, 0, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -70, 0, 0, 66, -70, 0, 0, 66, -70, 0, 0, 0, 0, 0, 0, 66, -85, 0, 0, 66, -64, 0, 0, 66, -106, 0, 0, 0, 0, 0, 0, 66, -106, 0, 0, 66, -106, 0, 0, 66, -106, 0, 0, 0, 0, 0, 0, 66, -106, 0, 0, 66, -106, 0, 0, 66, -106, 0, 0, 0, 0, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -96, 0, 0, 66, -96, 0, 0, 66, -96, 0, 0, 0, 0, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 0, 0, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 0, 0, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 0, 0, 0, 0, 66, -62, 0, 0, 66, -62, 0, 0, 66, -62, 0, 0, 0, 0, 0, 0, 66, -120, 0, 0, 66, -120, 0, 0, 66, -120, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, -104, 0, 0, 66, -104, 0, 0, 66, -104, 0, 0, 0, 0, 0, 0, 66, -102, 0, 0, 66, -102, 0, 0, 66, -102, 0, 0, 0, 0, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 0, 0, 0, 0, 66, -74, 0, 0, 66, -74, 0, 0, 66, -74, 0, 0, 0, 0, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 0, 0, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 0, 0, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -102, 0, 0, 66, -102, 0, 0, 66, -102, 0, 0, 0, 0, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 0, 0, 0, 0, 66, -74, 0, 0, 66, -74, 0, 0, 66, -74, 0, 0, 0, 0, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 0, 0, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 0, 0, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, 106, 0, 0, 66, 116, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, 106, 0, 0, 66, 116, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 0, 0, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, 104, 0, 0, 66, 104, 0, 0, 66, 104, 0, 0, 0, 0, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 0, 0, 0, 0, 66, -62, 0, 0, 66, -58, 0, 0, 66, -66, 0, 0, 0, 0, 0, 0, 66, -70, 0, 0, 66, -70, 0, 0, 66, -70, 0, 0, 0, 0, 0, 0, 66, -112, 0, 0, 66, -112, 0, 0, 66, -112, 0, 0, 0, 0, 0, 0, 66, -102, 0, 0, 66, -102, 0, 0, 66, -102, 0, 0, 0, 0, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 0, 0, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 0, 0, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 0, 0, 0, 0, 66, -102, 0, 0, 66, -102, 0, 0, 66, -102, 0, 0, 0, 0, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 0, 0, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 0, 0, 0, 0, 66, -98, 0, 0, 66, -68, 0, 0, 66, -128, 0, 0, 0, 0, 0, 0, 66, -111, 0, 0, 66, -90, 0, 0, 66, 120, 0, 0, 0, 0, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 0, 0, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 0, 0, 0, 0, 66, -80, 0, 0, 66, -80, 0, 0, 66, -80, 0, 0, 0, 0, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 0, 0, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 0, 0, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 0, 0, 0, 0, 66, -114, 0, 0, 66, -76, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 0, 0, 0, 0, 66, -80, 0, 0, 66, -80, 0, 0, 66, -80, 0, 0, 0, 0, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 0, 0, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 0, 0, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 0, 0, 0, 0, 66, -114, 0, 0, 66, -76, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, -104, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, -104, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -62, 0, 0, 66, -62, 0, 0, 66, -62, 0, 0, 0, 0, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 0, 0, 0, 0, 66, -127, 0, 0, 66, -98, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 0, 0, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 0, 0, 0, 0, 66, -127, 0, 0, 66, -98, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 0, 0, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, 72, 0, 0, 66, 72, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -122, 0, 0, 66, -122, 0, 0, 66, -122, 0, 0, 0, 0, 0, 0, 66, -98, 0, 0, 66, -98, 0, 0, 66, -98, 0, 0, 0, 0, 0, 0, 66, -62, 0, 0, 66, -62, 0, 0, 66, -62, 0, 0, 0, 0, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 0, 0, 0, 0, 66, 104, 0, 0, 66, 104, 0, 0, 66, 104, 0, 0, 0, 0, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 0, 0, 0, 0, 66, -106, 0, 0, 66, -106, 0, 0, 66, -106, 0, 0, 0, 0, 0, 0, 66, -106, 0, 0, 66, -106, 0, 0, 66, -106, 0, 0, 0, 0, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 0, 0, 0, 0, 66, -102, 0, 0, 66, -102, 0, 0, 66, -102, 0, 0, 0, 0, 0, 0, 66, 110, 0, 0, 66, -116, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 0, 0, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 0, 0, 0, 0, 66, -102, 0, 0, 66, -102, 0, 0, 66, -102, 0, 0, 0, 0, 0, 0, 66, 92, 0, 0, 66, 100, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 0, 0, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 0, 0, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 0, 0, 0, 0, 66, -102, 0, 0, 66, -102, 0, 0, 66, -102, 0, 0, 0, 0, 0, 0, 66, 92, 0, 0, 66, 100, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 0, 0, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 0, 0, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 0, 0, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 0, 0, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 0, 0, 0, 0, 66, 120, 0, 0, 66, 120, 0, 0, 66, 120, 0, 0, 0, 0, 0, 0, 66, -74, 0, 0, 66, -74, 0, 0, 66, -74, 0, 0, 0, 0, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 0, 0, 0, 0, 66, -96, 0, 0, 66, -96, 0, 0, 66, -96, 0, 0, 0, 0, 0, 0, 66, -104, 0, 0, 66, -104, 0, 0, 66, -104, 0, 0, 0, 0, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 0, 0, 0, 0, 66, -80, 0, 0, 66, -80, 0, 0, 66, -80, 0, 0, 0, 0, 0, 0, 66, -108, 0, 0, 66, -80, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 0, 0, 0, 0, 66, -96, 0, 0, 66, -96, 0, 0, 66, -96, 0, 0, 0, 0, 0, 0, 66, -104, 0, 0, 66, -104, 0, 0, 66, -104, 0, 0, 0, 0, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 0, 0, 0, 0, 66, -80, 0, 0, 66, -80, 0, 0, 66, -80, 0, 0, 0, 0, 0, 0, 66, -108, 0, 0, 66, -80, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, -111, 0, 0, 66, -106, 0, 0, 66, -116, 0, 0, 0, 0, 0, 0, 66, -111, 0, 0, 66, -106, 0, 0, 66, -116, 0, 0, 0, 0, 0, 0, 66, -104, 0, 0, 66, -104, 0, 0, 66, -104, 0, 0, 0, 0, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 0, 0, 0, 0, 66, -80, 0, 0, 66, -80, 0, 0, 66, -80, 0, 0, 0, 0, 0, 0, 66, -108, 0, 0, 66, -80, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, -111, 0, 0, 66, -106, 0, 0, 66, -116, 0, 0, 0, 0, 0, 0, 66, -111, 0, 0, 66, -106, 0, 0, 66, -116, 0, 0, 0, 0, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 0, 0, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, -120, 0, 0, 66, -108, 0, 0, 66, 120, 0, 0, 0, 0, 0, 0, 66, -60, 0, 0, 66, -60, 0, 0, 66, -60, 0, 0, 0, 0, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 0, 0, 0, 0, 66, 96, 0, 0, 66, 108, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, -120, 0, 0, 66, -108, 0, 0, 66, 120, 0, 0, 0, 0, 0, 0, 66, -60, 0, 0, 66, -60, 0, 0, 66, -60, 0, 0, 0, 0, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 0, 0, 0, 0, 66, 96, 0, 0, 66, 108, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -60, 0, 0, 66, -60, 0, 0, 66, -60, 0, 0, 0, 0, 0, 0, 66, -60, 0, 0, 66, -60, 0, 0, 66, -60, 0, 0, 0, 0, 0, 0, 66, 72, 0, 0, 66, 72, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -65, 0, 0, 66, -64, 0, 0, 66, -66, 0, 0, 0, 0, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 0, 0, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 0, 0, 0, 0, 66, -122, 0, 0, 66, -122, 0, 0, 66, -122, 0, 0, 0, 0, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 0, 0, 0, 0, 66, -98, 0, 0, 66, -98, 0, 0, 66, -98, 0, 0, 0, 0, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 0, 0, 0, 0, 66, -64, 0, 0, 66, -64, 0, 0, 66, -64, 0, 0, 0, 0, 0, 0, 66, -74, 0, 0, 66, -74, 0, 0, 66, -74, 0, 0, 0, 0, 0, 0, 66, 126, 0, 0, 66, -100, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -98, 0, 0, 66, -98, 0, 0, 66, -98, 0, 0, 0, 0, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 0, 0, 0, 0, 66, -64, 0, 0, 66, -64, 0, 0, 66, -64, 0, 0, 0, 0, 0, 0, 66, -74, 0, 0, 66, -74, 0, 0, 66, -74, 0, 0, 0, 0, 0, 0, 66, 126, 0, 0, 66, -100, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -106, 0, 0, 66, -74, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, -106, 0, 0, 66, -74, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, -62, 0, 0, 66, -62, 0, 0, 66, -62, 0, 0, 0, 0, 0, 0, 66, -102, 0, 0, 66, -102, 0, 0, 66, -102, 0, 0, 0, 0, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 0, 0, 0, 0, 66, -112, 0, 0, 66, -112, 0, 0, 66, -112, 0, 0, 0, 0, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 0, 0, 0, 0, 66, -98, 0, 0, 66, -98, 0, 0, 66, -98, 0, 0, 0, 0, 0, 0, 66, -109, 0, 0, 66, -86, 0, 0, 66, 120, 0, 0, 0, 0, 0, 0, 66, -80, 0, 0, 66, -80, 0, 0, 66, -80, 0, 0, 0, 0, 0, 0, 66, -112, 0, 0, 66, -112, 0, 0, 66, -112, 0, 0, 0, 0, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 0, 0, 0, 0, 66, -98, 0, 0, 66, -98, 0, 0, 66, -98, 0, 0, 0, 0, 0, 0, 66, -109, 0, 0, 66, -86, 0, 0, 66, 120, 0, 0, 0, 0, 0, 0, 66, -80, 0, 0, 66, -80, 0, 0, 66, -80, 0, 0, 0, 0, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 0, 0, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 0, 0, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 0, 0, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 0, 0, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 0, 0, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 0, 0, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 0, 0, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 0, 0, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 0, 0, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 0, 0, 0, 0, 66, -89, 0, 0, 66, -62, 0, 0, 66, -116, 0, 0, 0, 0, 0, 0, 66, -89, 0, 0, 66, -62, 0, 0, 66, -116, 0, 0, 0, 0, 0, 0, 66, -64, 0, 0, 66, -64, 0, 0, 66, -64, 0, 0, 0, 0, 0, 0, 66, -85, 0, 0, 66, -68, 0, 0, 66, -102, 0, 0, 0, 0, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 0, 0, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 0, 0, 0, 0, 66, -89, 0, 0, 66, -62, 0, 0, 66, -116, 0, 0, 0, 0, 0, 0, 66, -89, 0, 0, 66, -62, 0, 0, 66, -116, 0, 0, 0, 0, 0, 0, 66, -64, 0, 0, 66, -64, 0, 0, 66, -64, 0, 0, 0, 0, 0, 0, 66, -85, 0, 0, 66, -68, 0, 0, 66, -102, 0, 0, 0, 0, 0, 0, 66, -111, 0, 0, 66, -78, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, -111, 0, 0, 66, -78, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, -89, 0, 0, 66, -62, 0, 0, 66, -116, 0, 0, 0, 0, 0, 0, 66, -64, 0, 0, 66, -64, 0, 0, 66, -64, 0, 0, 0, 0, 0, 0, 66, -85, 0, 0, 66, -68, 0, 0, 66, -102, 0, 0, 0, 0, 0, 0, 66, -111, 0, 0, 66, -78, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, -111, 0, 0, 66, -78, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 0, 0, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 0, 0, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 0, 0, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -114, 0, 0, 66, -114, 0, 0, 66, -114, 0, 0, 0, 0, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 0, 0, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 0, 0, 0, 0, 66, -82, 0, 0, 66, -82, 0, 0, 66, -82, 0, 0, 0, 0, 0, 0, 66, -102, 0, 0, 66, -102, 0, 0, 66, -102, 0, 0, 0, 0, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 0, 0, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 0, 0, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 0, 0, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 0, 0, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, -76, 0, 0, 66, -76, 0, 0, 66, -76, 0, 0, 0, 0, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 0, 0, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 0, 0, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 0, 0, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 0, 0, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, -76, 0, 0, 66, -76, 0, 0, 66, -76, 0, 0, 0, 0, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 0, 0, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 0, 0, 0, 0, 66, -109, 0, 0, 66, -72, 0, 0, 66, 92, 0, 0, 0, 0, 0, 0, 66, -64, 0, 0, 66, -64, 0, 0, 66, -64, 0, 0, 0, 0, 0, 0, 66, 104, 0, 0, 66, 104, 0, 0, 66, 104, 0, 0, 0, 0, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 0, 0, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -60, 0, 0, 66, -60, 0, 0, 66, -60, 0, 0, 0, 0, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 0, 0, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 0, 0, 0, 0, 66, -113, 0, 0, 66, -102, 0, 0, 66, -124, 0, 0, 0, 0, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 0, 0, 0, 0, 66, -76, 0, 0, 66, -76, 0, 0, 66, -76, 0, 0, 0, 0, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -122, 0, 0, 66, -122, 0, 0, 66, -122, 0, 0, 0, 0, 0, 0, 66, -120, 0, 0, 66, -120, 0, 0, 66, -120, 0, 0, 0, 0, 0, 0, 66, -113, 0, 0, 66, -102, 0, 0, 66, -124, 0, 0, 0, 0, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 0, 0, 0, 0, 66, -76, 0, 0, 66, -76, 0, 0, 66, -76, 0, 0, 0, 0, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -122, 0, 0, 66, -122, 0, 0, 66, -122, 0, 0, 0, 0, 0, 0, 66, -120, 0, 0, 66, -120, 0, 0, 66, -120, 0, 0, 0, 0, 0, 0, 66, -105, 0, 0, 66, -64, 0, 0, 66, 92, 0, 0, 0, 0, 0, 0, 66, -105, 0, 0, 66, -64, 0, 0, 66, 92, 0, 0, 0, 0, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, 100, 0, 0, 66, 116, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -120, 0, 0, 66, -120, 0, 0, 66, -120, 0, 0, 0, 0, 0, 0, 66, -105, 0, 0, 66, -64, 0, 0, 66, 92, 0, 0, 0, 0, 0, 0, 66, -105, 0, 0, 66, -64, 0, 0, 66, 92, 0, 0, 0, 0, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, 100, 0, 0, 66, 116, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 0, 0, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 0, 0, 0, 0, 66, -106, 0, 0, 66, -100, 0, 0, 66, -112, 0, 0, 0, 0, 0, 0, 66, -62, 0, 0, 66, -62, 0, 0, 66, -62, 0, 0, 0, 0, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 0, 0, 0, 0, 66, -94, 0, 0, 66, -78, 0, 0, 66, -110, 0, 0, 0, 0, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 0, 0, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 0, 0, 0, 0, 66, -106, 0, 0, 66, -100, 0, 0, 66, -112, 0, 0, 0, 0, 0, 0, 66, -62, 0, 0, 66, -62, 0, 0, 66, -62, 0, 0, 0, 0, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 0, 0, 0, 0, 66, -94, 0, 0, 66, -78, 0, 0, 66, -110, 0, 0, 0, 0, 0, 0, 66, 100, 0, 0, 66, 120, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, 100, 0, 0, 66, 120, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 0, 0, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 0, 0, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 0, 0, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 0, 0, 0, 0, 66, 120, 0, 0, 66, 120, 0, 0, 66, 120, 0, 0, 0, 0, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 0, 0, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, 72, 0, 0, 66, 72, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 0, 0, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 0, 0, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 0, 0, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 0, 0, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 0, 0, 0, 0, 66, -70, 0, 0, 66, -70, 0, 0, 66, -70, 0, 0, 0, 0, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, 104, 0, 0, 66, 104, 0, 0, 66, 104, 0, 0, 0, 0, 0, 0, 66, -84, 0, 0, 66, -84, 0, 0, 66, -84, 0, 0, 0, 0, 0, 0, 66, -64, 0, 0, 66, -64, 0, 0, 66, -64, 0, 0, 0, 0, 0, 0, 66, -70, 0, 0, 66, -70, 0, 0, 66, -70, 0, 0, 0, 0, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, -110, 0, 0, 66, -80, 0, 0, 66, 104, 0, 0, 0, 0, 0, 0, 66, 104, 0, 0, 66, 104, 0, 0, 66, 104, 0, 0, 0, 0, 0, 0, 66, -84, 0, 0, 66, -84, 0, 0, 66, -84, 0, 0, 0, 0, 0, 0, 66, -64, 0, 0, 66, -64, 0, 0, 66, -64, 0, 0, 0, 0, 0, 0, 66, -70, 0, 0, 66, -70, 0, 0, 66, -70, 0, 0, 0, 0, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, -110, 0, 0, 66, -80, 0, 0, 66, 104, 0, 0, 0, 0, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 0, 0, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 0, 0, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 0, 0, 0, 0, 66, 104, 0, 0, 66, 104, 0, 0, 66, 104, 0, 0, 0, 0, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 0, 0, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -74, 0, 0, 66, -74, 0, 0, 66, -74, 0, 0, 0, 0, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 0, 0, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 0, 0, 0, 0, 66, -104, 0, 0, 66, -104, 0, 0, 66, -104, 0, 0, 0, 0, 0, 0, 66, -82, 0, 0, 66, -76, 0, 0, 66, -88, 0, 0, 0, 0, 0, 0, 66, -98, 0, 0, 66, -98, 0, 0, 66, -98, 0, 0, 0, 0, 0, 0, 66, -102, 0, 0, 66, -102, 0, 0, 66, -102, 0, 0, 0, 0, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 0, 0, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 0, 0, 0, 0, 66, -121, 0, 0, 66, -98, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, -102, 0, 0, 66, -102, 0, 0, 66, -102, 0, 0, 0, 0, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 0, 0, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 0, 0, 0, 0, 66, -121, 0, 0, 66, -98, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, -70, 0, 0, 66, -70, 0, 0, 66, -70, 0, 0, 0, 0, 0, 0, 66, -70, 0, 0, 66, -70, 0, 0, 66, -70, 0, 0, 0, 0, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 0, 0, 0, 0, 66, 108, 0, 0, 66, -126, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, -70, 0, 0, 66, -70, 0, 0, 66, -70, 0, 0, 0, 0, 0, 0, 66, -70, 0, 0, 66, -70, 0, 0, 66, -70, 0, 0, 0, 0, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 0, 0, 0, 0, 66, 108, 0, 0, 66, -126, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, -64, 0, 0, 66, -64, 0, 0, 66, -64, 0, 0, 0, 0, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 0, 0, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 0, 0, 0, 0, 66, -62, 0, 0, 66, -62, 0, 0, 66, -62, 0, 0, 0, 0, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 0, 0, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 0, 0, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 0, 0, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 0, 0, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 0, 0, 0, 0, 66, -125, 0, 0, 66, -114, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, 120, 0, 0, 66, 120, 0, 0, 66, 120, 0, 0, 0, 0, 0, 0, 66, -114, 0, 0, 66, -114, 0, 0, 66, -114, 0, 0, 0, 0, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 0, 0, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 0, 0, 0, 0, 66, -125, 0, 0, 66, -114, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, 120, 0, 0, 66, 120, 0, 0, 66, 120, 0, 0, 0, 0, 0, 0, 66, -114, 0, 0, 66, -114, 0, 0, 66, -114, 0, 0, 0, 0, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 0, 0, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 0, 0, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 0, 0, 0, 0, 66, -106, 0, 0, 66, -106, 0, 0, 66, -106, 0, 0, 0, 0, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 0, 0, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 0, 0, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 0, 0, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 0, 0, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 0, 0, 0, 0, 66, -106, 0, 0, 66, -106, 0, 0, 66, -106, 0, 0, 0, 0, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 0, 0, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 0, 0, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 0, 0, 0, 0, 66, -68, 0, 0, 66, -62, 0, 0, 66, -74, 0, 0, 0, 0, 0, 0, 66, -68, 0, 0, 66, -62, 0, 0, 66, -74, 0, 0, 0, 0, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 0, 0, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 0, 0, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 0, 0, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 0, 0, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 0, 0, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -102, 0, 0, 66, -102, 0, 0, 66, -102, 0, 0, 0, 0, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 0, 0, 0, 0, 66, -84, 0, 0, 66, -84, 0, 0, 66, -84, 0, 0, 0, 0, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 0, 0, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 0, 0, 0, 0, 66, 120, 0, 0, 66, 120, 0, 0, 66, 120, 0, 0, 0, 0, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 0, 0, 0, 0, 66, -84, 0, 0, 66, -84, 0, 0, 66, -84, 0, 0, 0, 0, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 0, 0, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 0, 0, 0, 0, 66, 120, 0, 0, 66, 120, 0, 0, 66, 120, 0, 0, 0, 0, 0, 0, 66, -107, 0, 0, 66, -102, 0, 0, 66, -112, 0, 0, 0, 0, 0, 0, 66, -107, 0, 0, 66, -102, 0, 0, 66, -112, 0, 0, 0, 0, 0, 0, 66, -123, 0, 0, 66, -108, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 0, 0, 0, 0, 66, 120, 0, 0, 66, 120, 0, 0, 66, 120, 0, 0, 0, 0, 0, 0, 66, -107, 0, 0, 66, -102, 0, 0, 66, -112, 0, 0, 0, 0, 0, 0, 66, -107, 0, 0, 66, -102, 0, 0, 66, -112, 0, 0, 0, 0, 0, 0, 66, -123, 0, 0, 66, -108, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, 120, 0, 0, 66, 120, 0, 0, 66, 120, 0, 0, 0, 0, 0, 0, 66, 120, 0, 0, 66, 120, 0, 0, 66, 120, 0, 0, 0, 0, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 0, 0, 0, 0, 66, -107, 0, 0, 66, -102, 0, 0, 66, -112, 0, 0, 0, 0, 0, 0, 66, -123, 0, 0, 66, -108, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, 120, 0, 0, 66, 120, 0, 0, 66, 120, 0, 0, 0, 0, 0, 0, 66, 120, 0, 0, 66, 120, 0, 0, 66, 120, 0, 0, 0, 0, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 0, 0, 0, 0, 66, -109, 0, 0, 66, -96, 0, 0, 66, -122, 0, 0, 0, 0, 0, 0, 66, -109, 0, 0, 66, -96, 0, 0, 66, -122, 0, 0, 0, 0, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 0, 0, 0, 0, 66, 120, 0, 0, 66, 120, 0, 0, 66, 120, 0, 0, 0, 0, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 0, 0, 0, 0, 66, -109, 0, 0, 66, -96, 0, 0, 66, -122, 0, 0, 0, 0, 0, 0, 66, -109, 0, 0, 66, -96, 0, 0, 66, -122, 0, 0, 0, 0, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 0, 0, 0, 0, 66, -96, 0, 0, 66, -96, 0, 0, 66, -96, 0, 0, 0, 0, 0, 0, 66, -96, 0, 0, 66, -96, 0, 0, 66, -96, 0, 0, 0, 0, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 0, 0, 0, 0, 66, -116, 0, 0, 66, -112, 0, 0, 66, -120, 0, 0, 0, 0, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 0, 0, 0, 0, 66, -96, 0, 0, 66, -96, 0, 0, 66, -96, 0, 0, 0, 0, 0, 0, 66, -96, 0, 0, 66, -96, 0, 0, 66, -96, 0, 0, 0, 0, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 0, 0, 0, 0, 66, -116, 0, 0, 66, -112, 0, 0, 66, -120, 0, 0, 0, 0, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 0, 0, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 0, 0, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -120, 0, 0, 66, -120, 0, 0, 66, -120, 0, 0, 0, 0, 0, 0, 66, -71, 0, 0, 66, -62, 0, 0, 66, -80, 0, 0, 0, 0, 0, 0, 66, -70, 0, 0, 66, -70, 0, 0, 66, -70, 0, 0, 0, 0, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 0, 0, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 0, 0, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 0, 0, 0, 0, 66, -98, 0, 0, 66, -98, 0, 0, 66, -98, 0, 0, 0, 0, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 0, 0, 0, 0, 66, -64, 0, 0, 66, -64, 0, 0, 66, -64, 0, 0, 0, 0, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 0, 0, 0, 0, 66, -60, 0, 0, 66, -60, 0, 0, 66, -60, 0, 0, 0, 0, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, -104, 0, 0, 66, -104, 0, 0, 66, -104, 0, 0, 0, 0, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, -84, 0, 0, 66, -84, 0, 0, 66, -84, 0, 0, 0, 0, 0, 0, 66, 108, 0, 0, 66, 112, 0, 0, 66, 104, 0, 0, 0, 0, 0, 0, 66, -84, 0, 0, 66, -84, 0, 0, 66, -84, 0, 0, 0, 0, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 0, 0, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 0, 0, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 0, 0, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 0, 0, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -95, 0, 0, 66, -88, 0, 0, 66, -102, 0, 0, 0, 0, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 0, 0, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -95, 0, 0, 66, -88, 0, 0, 66, -102, 0, 0, 0, 0, 0, 0, 66, -122, 0, 0, 66, -100, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, -122, 0, 0, 66, -100, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -95, 0, 0, 66, -88, 0, 0, 66, -102, 0, 0, 0, 0, 0, 0, 66, -122, 0, 0, 66, -100, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, -122, 0, 0, 66, -100, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, -62, 0, 0, 66, -62, 0, 0, 66, -62, 0, 0, 0, 0, 0, 0, 66, -62, 0, 0, 66, -62, 0, 0, 66, -62, 0, 0, 0, 0, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 0, 0, 0, 0, 66, -60, 0, 0, 66, -60, 0, 0, 66, -60, 0, 0, 0, 0, 0, 0, 66, -122, 0, 0, 66, -122, 0, 0, 66, -122, 0, 0, 0, 0, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 0, 0, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 0, 0, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, 72, 0, 0, 66, 72, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -60, 0, 0, 66, -60, 0, 0, 66, -60, 0, 0, 0, 0, 0, 0, 66, -122, 0, 0, 66, -122, 0, 0, 66, -122, 0, 0, 0, 0, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 0, 0, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 0, 0, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, 72, 0, 0, 66, 72, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -92, 0, 0, 66, -68, 0, 0, 66, -116, 0, 0, 0, 0, 0, 0, 66, -92, 0, 0, 66, -68, 0, 0, 66, -116, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, -120, 0, 0, 66, -120, 0, 0, 66, -120, 0, 0, 0, 0, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 0, 0, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 0, 0, 0, 0, 66, -102, 0, 0, 66, -102, 0, 0, 66, -102, 0, 0, 0, 0, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 0, 0, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 0, 0, 0, 0, 66, -70, 0, 0, 66, -70, 0, 0, 66, -70, 0, 0, 0, 0, 0, 0, 66, -82, 0, 0, 66, -82, 0, 0, 66, -82, 0, 0, 0, 0, 0, 0, 66, -112, 0, 0, 66, -112, 0, 0, 66, -112, 0, 0, 0, 0, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 0, 0, 0, 0, 66, -120, 0, 0, 66, -120, 0, 0, 66, -120, 0, 0, 0, 0, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 0, 0, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 0, 0, 0, 0, 66, -82, 0, 0, 66, -82, 0, 0, 66, -82, 0, 0, 0, 0, 0, 0, 66, -112, 0, 0, 66, -112, 0, 0, 66, -112, 0, 0, 0, 0, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 0, 0, 0, 0, 66, -120, 0, 0, 66, -120, 0, 0, 66, -120, 0, 0, 0, 0, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 0, 0, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 0, 0, 0, 0, 66, -73, 0, 0, 66, -70, 0, 0, 66, -76, 0, 0, 0, 0, 0, 0, 66, -73, 0, 0, 66, -70, 0, 0, 66, -76, 0, 0, 0, 0, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 0, 0, 0, 0, 66, -120, 0, 0, 66, -120, 0, 0, 66, -120, 0, 0, 0, 0, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 0, 0, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 0, 0, 0, 0, 66, -73, 0, 0, 66, -70, 0, 0, 66, -76, 0, 0, 0, 0, 0, 0, 66, -73, 0, 0, 66, -70, 0, 0, 66, -76, 0, 0, 0, 0, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 0, 0, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 0, 0, 0, 0, 66, -62, 0, 0, 66, -62, 0, 0, 66, -62, 0, 0, 0, 0, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 0, 0, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 0, 0, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, -80, 0, 0, 66, -80, 0, 0, 66, -80, 0, 0, 0, 0, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 0, 0, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 0, 0, 0, 0, 66, 114, 0, 0, 66, -126, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -112, 0, 0, 66, -112, 0, 0, 66, -112, 0, 0, 0, 0, 0, 0, 66, -80, 0, 0, 66, -80, 0, 0, 66, -80, 0, 0, 0, 0, 0, 0, 66, -104, 0, 0, 66, -104, 0, 0, 66, -104, 0, 0, 0, 0, 0, 0, 66, -114, 0, 0, 66, -114, 0, 0, 66, -114, 0, 0, 0, 0, 0, 0, 66, 114, 0, 0, 66, -126, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -112, 0, 0, 66, -112, 0, 0, 66, -112, 0, 0, 0, 0, 0, 0, 66, -80, 0, 0, 66, -80, 0, 0, 66, -80, 0, 0, 0, 0, 0, 0, 66, -104, 0, 0, 66, -104, 0, 0, 66, -104, 0, 0, 0, 0, 0, 0, 66, -114, 0, 0, 66, -114, 0, 0, 66, -114, 0, 0, 0, 0, 0, 0, 66, -107, 0, 0, 66, -90, 0, 0, 66, -124, 0, 0, 0, 0, 0, 0, 66, -107, 0, 0, 66, -90, 0, 0, 66, -124, 0, 0, 0, 0, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, -112, 0, 0, 66, -112, 0, 0, 66, -112, 0, 0, 0, 0, 0, 0, 66, -104, 0, 0, 66, -104, 0, 0, 66, -104, 0, 0, 0, 0, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, 120, 0, 0, 66, 120, 0, 0, 66, 120, 0, 0, 0, 0, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 0, 0, 0, 0, 66, 72, 0, 0, 66, 72, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 0, 0, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 0, 0, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, -62, 0, 0, 66, -62, 0, 0, 66, -62, 0, 0, 0, 0, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -84, 0, 0, 66, -84, 0, 0, 66, -84, 0, 0, 0, 0, 0, 0, 66, 72, 0, 0, 66, 72, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -112, 0, 0, 66, -112, 0, 0, 66, -112, 0, 0, 0, 0, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 0, 0, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -84, 0, 0, 66, -84, 0, 0, 66, -84, 0, 0, 0, 0, 0, 0, 66, 72, 0, 0, 66, 72, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -112, 0, 0, 66, -112, 0, 0, 66, -112, 0, 0, 0, 0, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 0, 0, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, -102, 0, 0, 66, -102, 0, 0, 66, -102, 0, 0, 0, 0, 0, 0, 66, -102, 0, 0, 66, -102, 0, 0, 66, -102, 0, 0, 0, 0, 0, 0, 66, -62, 0, 0, 66, -62, 0, 0, 66, -62, 0, 0, 0, 0, 0, 0, 66, -128, 0, 0, 66, -102, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 0, 0, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 0, 0, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 0, 0, 0, 0, 66, -98, 0, 0, 66, -98, 0, 0, 66, -98, 0, 0, 0, 0, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 0, 0, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 0, 0, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 0, 0, 0, 0, 66, -98, 0, 0, 66, -98, 0, 0, 66, -98, 0, 0, 0, 0, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -116, 0, 0, 66, -104, 0, 0, 66, -128, 0, 0, 0, 0, 0, 0, 66, -116, 0, 0, 66, -104, 0, 0, 66, -128, 0, 0, 0, 0, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 0, 0, 0, 0, 66, -98, 0, 0, 66, -98, 0, 0, 66, -98, 0, 0, 0, 0, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -116, 0, 0, 66, -104, 0, 0, 66, -128, 0, 0, 0, 0, 0, 0, 66, -116, 0, 0, 66, -104, 0, 0, 66, -128, 0, 0, 0, 0, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, 120, 0, 0, 66, 120, 0, 0, 66, 120, 0, 0, 0, 0, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 0, 0, 0, 0, 66, -70, 0, 0, 66, -70, 0, 0, 66, -70, 0, 0, 0, 0, 0, 0, 66, -120, 0, 0, 66, -120, 0, 0, 66, -120, 0, 0, 0, 0, 0, 0, 66, -92, 0, 0, 66, -58, 0, 0, 66, -126, 0, 0, 0, 0, 0, 0, 66, -98, 0, 0, 66, -98, 0, 0, 66, -98, 0, 0, 0, 0, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, -70, 0, 0, 66, -70, 0, 0, 66, -70, 0, 0, 0, 0, 0, 0, 66, -120, 0, 0, 66, -120, 0, 0, 66, -120, 0, 0, 0, 0, 0, 0, 66, -92, 0, 0, 66, -58, 0, 0, 66, -126, 0, 0, 0, 0, 0, 0, 66, -98, 0, 0, 66, -98, 0, 0, 66, -98, 0, 0, 0, 0, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, -88, 0, 0, 66, -72, 0, 0, 66, -104, 0, 0, 0, 0, 0, 0, 66, -88, 0, 0, 66, -72, 0, 0, 66, -104, 0, 0, 0, 0, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -60, 0, 0, 66, -60, 0, 0, 66, -60, 0, 0, 0, 0, 0, 0, 66, 104, 0, 0, 66, 104, 0, 0, 66, 104, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, -88, 0, 0, 66, -72, 0, 0, 66, -104, 0, 0, 0, 0, 0, 0, 66, -88, 0, 0, 66, -72, 0, 0, 66, -104, 0, 0, 0, 0, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -60, 0, 0, 66, -60, 0, 0, 66, -60, 0, 0, 0, 0, 0, 0, 66, 104, 0, 0, 66, 104, 0, 0, 66, 104, 0, 0, 0, 0, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 0, 0, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 0, 0, 0, 0, 66, -85, 0, 0, 66, -60, 0, 0, 66, -110, 0, 0, 0, 0, 0, 0, 66, 104, 0, 0, 66, 104, 0, 0, 66, 104, 0, 0, 0, 0, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 0, 0, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 0, 0, 0, 0, 66, -85, 0, 0, 66, -60, 0, 0, 66, -110, 0, 0, 0, 0, 0, 0, 66, -112, 0, 0, 66, -112, 0, 0, 66, -112, 0, 0, 0, 0, 0, 0, 66, -112, 0, 0, 66, -112, 0, 0, 66, -112, 0, 0, 0, 0, 0, 0, 66, -92, 0, 0, 66, -88, 0, 0, 66, -96, 0, 0, 0, 0, 0, 0, 66, -70, 0, 0, 66, -70, 0, 0, 66, -70, 0, 0, 0, 0, 0, 0, 66, -60, 0, 0, 66, -60, 0, 0, 66, -60, 0, 0, 0, 0, 0, 0, 66, -98, 0, 0, 66, -98, 0, 0, 66, -98, 0, 0, 0, 0, 0, 0, 66, -84, 0, 0, 66, -84, 0, 0, 66, -84, 0, 0, 0, 0, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 0, 0, 0, 0, 66, -92, 0, 0, 66, -88, 0, 0, 66, -96, 0, 0, 0, 0, 0, 0, 66, -70, 0, 0, 66, -70, 0, 0, 66, -70, 0, 0, 0, 0, 0, 0, 66, -60, 0, 0, 66, -60, 0, 0, 66, -60, 0, 0, 0, 0, 0, 0, 66, -98, 0, 0, 66, -98, 0, 0, 66, -98, 0, 0, 0, 0, 0, 0, 66, -84, 0, 0, 66, -84, 0, 0, 66, -84, 0, 0, 0, 0, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 0, 0, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 0, 0, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 0, 0, 0, 0, 66, -112, 0, 0, 66, -112, 0, 0, 66, -112, 0, 0, 0, 0, 0, 0, 66, -126, 0, 0, 66, -100, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 0, 0, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 0, 0, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 0, 0, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 0, 0, 0, 0, 66, -112, 0, 0, 66, -112, 0, 0, 66, -112, 0, 0, 0, 0, 0, 0, 66, -126, 0, 0, 66, -100, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 0, 0, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 0, 0, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 0, 0, 0, 0, 66, -84, 0, 0, 66, -84, 0, 0, 66, -84, 0, 0, 0, 0, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 0, 0, 0, 0, 66, -112, 0, 0, 66, -112, 0, 0, 66, -112, 0, 0, 0, 0, 0, 0, 66, 122, 0, 0, 66, -118, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 0, 0, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 0, 0, 0, 0, 66, -84, 0, 0, 66, -84, 0, 0, 66, -84, 0, 0, 0, 0, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 0, 0, 0, 0, 66, -112, 0, 0, 66, -112, 0, 0, 66, -112, 0, 0, 0, 0, 0, 0, 66, 122, 0, 0, 66, -118, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, -114, 0, 0, 66, -114, 0, 0, 66, -114, 0, 0, 0, 0, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 0, 0, 0, 0, 66, -84, 0, 0, 66, -84, 0, 0, 66, -84, 0, 0, 0, 0, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -98, 0, 0, 66, -98, 0, 0, 66, -98, 0, 0, 0, 0, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 0, 0, 0, 0, 66, -114, 0, 0, 66, -114, 0, 0, 66, -114, 0, 0, 0, 0, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 0, 0, 0, 0, 66, -84, 0, 0, 66, -84, 0, 0, 66, -84, 0, 0, 0, 0, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -98, 0, 0, 66, -98, 0, 0, 66, -98, 0, 0, 0, 0, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, -124, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, -124, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 0, 0, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 0, 0, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 0, 0, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 0, 0, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 0, 0, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 0, 0, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 0, 0, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 0, 0, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -122, 0, 0, 66, -122, 0, 0, 66, -122, 0, 0, 0, 0, 0, 0, 66, -122, 0, 0, 66, -122, 0, 0, 66, -122, 0, 0, 0, 0, 0, 0, 66, -60, 0, 0, 66, -60, 0, 0, 66, -60, 0, 0, 0, 0, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 0, 0, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -122, 0, 0, 66, -122, 0, 0, 66, -122, 0, 0, 0, 0, 0, 0, 66, -122, 0, 0, 66, -122, 0, 0, 66, -122, 0, 0, 0, 0, 0, 0, 66, -60, 0, 0, 66, -60, 0, 0, 66, -60, 0, 0, 0, 0, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -122, 0, 0, 66, -122, 0, 0, 66, -122, 0, 0, 0, 0, 0, 0, 66, -98, 0, 0, 66, -98, 0, 0, 66, -98, 0, 0, 0, 0, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 0, 0, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 0, 0, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 0, 0, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 0, 0, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 0, 0, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 0, 0, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 0, 0, 0, 0, 66, -86, 0, 0, 66, -68, 0, 0, 66, -104, 0, 0, 0, 0, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 0, 0, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 0, 0, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 0, 0, 0, 0, 66, -86, 0, 0, 66, -68, 0, 0, 66, -104, 0, 0, 0, 0, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 0, 0, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 0, 0, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 0, 0, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 0, 0, 0, 0, 66, -86, 0, 0, 66, -68, 0, 0, 66, -104, 0, 0, 0, 0, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 0, 0, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 0, 0, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 0, 0, 0, 0, 66, -119, 0, 0, 66, -112, 0, 0, 66, -126, 0, 0, 0, 0, 0, 0, 66, -119, 0, 0, 66, -112, 0, 0, 66, -126, 0, 0, 0, 0, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 0, 0, 0, 0, 66, 110, 0, 0, 66, 124, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 0, 0, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 0, 0, 0, 0, 66, -119, 0, 0, 66, -112, 0, 0, 66, -126, 0, 0, 0, 0, 0, 0, 66, -119, 0, 0, 66, -112, 0, 0, 66, -126, 0, 0, 0, 0, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 0, 0, 0, 0, 66, 110, 0, 0, 66, 124, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 0, 0, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 0, 0, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 0, 0, 0, 0, 66, -119, 0, 0, 66, -112, 0, 0, 66, -126, 0, 0, 0, 0, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 0, 0, 0, 0, 66, 110, 0, 0, 66, 124, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 0, 0, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 0, 0, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 0, 0, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 0, 0, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 0, 0, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 0, 0, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 0, 0, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, -99, 0, 0, 66, -96, 0, 0, 66, -102, 0, 0, 0, 0, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 0, 0, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 0, 0, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, -99, 0, 0, 66, -96, 0, 0, 66, -102, 0, 0, 0, 0, 0, 0, 66, -76, 0, 0, 66, -76, 0, 0, 66, -76, 0, 0, 0, 0, 0, 0, 66, -76, 0, 0, 66, -76, 0, 0, 66, -76, 0, 0, 0, 0, 0, 0, 66, -106, 0, 0, 66, -106, 0, 0, 66, -106, 0, 0, 0, 0, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 0, 0, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 0, 0, 0, 0, 66, -99, 0, 0, 66, -96, 0, 0, 66, -102, 0, 0, 0, 0, 0, 0, 66, -76, 0, 0, 66, -76, 0, 0, 66, -76, 0, 0, 0, 0, 0, 0, 66, -76, 0, 0, 66, -76, 0, 0, 66, -76, 0, 0, 0, 0, 0, 0, 66, -106, 0, 0, 66, -106, 0, 0, 66, -106, 0, 0, 0, 0, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 0, 0, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 0, 0, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 0, 0, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 0, 0, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 0, 0, 0, 0, 66, -117, 0, 0, 66, -84, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -114, 0, 0, 66, -114, 0, 0, 66, -114, 0, 0, 0, 0, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -98, 0, 0, 66, -98, 0, 0, 66, -98, 0, 0, 0, 0, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 0, 0, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 0, 0, 0, 0, 66, 104, 0, 0, 66, 104, 0, 0, 66, 104, 0, 0, 0, 0, 0, 0, 66, -104, 0, 0, 66, -104, 0, 0, 66, -104, 0, 0, 0, 0, 0, 0, 66, -70, 0, 0, 66, -70, 0, 0, 66, -70, 0, 0, 0, 0, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 0, 0, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -106, 0, 0, 66, -106, 0, 0, 66, -106, 0, 0, 0, 0, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 0, 0, 0, 0, 66, -106, 0, 0, 66, -106, 0, 0, 66, -106, 0, 0, 0, 0, 0, 0, 66, -97, 0, 0, 66, -94, 0, 0, 66, -100, 0, 0, 0, 0, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 0, 0, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 0, 0, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 0, 0, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, -80, 0, 0, 66, -80, 0, 0, 66, -80, 0, 0, 0, 0, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 0, 0, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 0, 0, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 0, 0, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, -80, 0, 0, 66, -80, 0, 0, 66, -80, 0, 0, 0, 0, 0, 0, 66, 126, 0, 0, 66, -100, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, 126, 0, 0, 66, -100, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 0, 0, 0, 0, 66, 100, 0, 0, 66, 100, 0, 0, 66, 100, 0, 0, 0, 0, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, -80, 0, 0, 66, -80, 0, 0, 66, -80, 0, 0, 0, 0, 0, 0, 66, 126, 0, 0, 66, -100, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, 126, 0, 0, 66, -100, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 0, 0, 0, 0, 66, 100, 0, 0, 66, 100, 0, 0, 66, 100, 0, 0, 0, 0, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 0, 0, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 0, 0, 0, 0, 66, -123, 0, 0, 66, -114, 0, 0, 66, 120, 0, 0, 0, 0, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 0, 0, 0, 0, 66, 100, 0, 0, 66, 100, 0, 0, 66, 100, 0, 0, 0, 0, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 0, 0, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 0, 0, 0, 0, 66, -123, 0, 0, 66, -114, 0, 0, 66, 120, 0, 0, 0, 0, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, -128, 0, 0, 66, -118, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, -128, 0, 0, 66, -118, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 0, 0, 0, 0, 66, -123, 0, 0, 66, -114, 0, 0, 66, 120, 0, 0, 0, 0, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, -128, 0, 0, 66, -118, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, -128, 0, 0, 66, -118, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, -70, 0, 0, 66, -70, 0, 0, 66, -70, 0, 0, 0, 0, 0, 0, 66, -70, 0, 0, 66, -70, 0, 0, 66, -70, 0, 0, 0, 0, 0, 0, 66, -122, 0, 0, 66, -122, 0, 0, 66, -122, 0, 0, 0, 0, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 0, 0, 0, 0, 66, -60, 0, 0, 66, -60, 0, 0, 66, -60, 0, 0, 0, 0, 0, 0, 66, -98, 0, 0, 66, -76, 0, 0, 66, -120, 0, 0, 0, 0, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 0, 0, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 0, 0, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 0, 0, 0, 0, 66, -82, 0, 0, 66, -82, 0, 0, 66, -82, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 0, 0, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 0, 0, 0, 0, 66, -111, 0, 0, 66, -84, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, -102, 0, 0, 66, -102, 0, 0, 66, -102, 0, 0, 0, 0, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 0, 0, 0, 0, 66, -99, 0, 0, 66, -70, 0, 0, 66, -128, 0, 0, 0, 0, 0, 0, 66, 72, 0, 0, 66, 72, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 0, 0, 0, 0, 66, -111, 0, 0, 66, -84, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, -102, 0, 0, 66, -102, 0, 0, 66, -102, 0, 0, 0, 0, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 0, 0, 0, 0, 66, -99, 0, 0, 66, -70, 0, 0, 66, -128, 0, 0, 0, 0, 0, 0, 66, 72, 0, 0, 66, 72, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 0, 0, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 0, 0, 0, 0, 66, -74, 0, 0, 66, -74, 0, 0, 66, -74, 0, 0, 0, 0, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 0, 0, 0, 0, 66, -106, 0, 0, 66, -106, 0, 0, 66, -106, 0, 0, 0, 0, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 0, 0, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 0, 0, 0, 0, 66, -125, 0, 0, 66, -92, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 0, 0, 0, 0, 66, -106, 0, 0, 66, -106, 0, 0, 66, -106, 0, 0, 0, 0, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 0, 0, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 0, 0, 0, 0, 66, -125, 0, 0, 66, -92, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 0, 0, 0, 0, 66, -72, 0, 0, 66, -64, 0, 0, 66, -80, 0, 0, 0, 0, 0, 0, 66, -72, 0, 0, 66, -64, 0, 0, 66, -80, 0, 0, 0, 0, 0, 0, 66, -120, 0, 0, 66, -120, 0, 0, 66, -120, 0, 0, 0, 0, 0, 0, 66, -62, 0, 0, 66, -62, 0, 0, 66, -62, 0, 0, 0, 0, 0, 0, 66, 102, 0, 0, 66, -128, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -93, 0, 0, 66, -66, 0, 0, 66, -120, 0, 0, 0, 0, 0, 0, 66, -72, 0, 0, 66, -64, 0, 0, 66, -80, 0, 0, 0, 0, 0, 0, 66, -72, 0, 0, 66, -64, 0, 0, 66, -80, 0, 0, 0, 0, 0, 0, 66, -120, 0, 0, 66, -120, 0, 0, 66, -120, 0, 0, 0, 0, 0, 0, 66, -62, 0, 0, 66, -62, 0, 0, 66, -62, 0, 0, 0, 0, 0, 0, 66, 102, 0, 0, 66, -128, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -93, 0, 0, 66, -66, 0, 0, 66, -120, 0, 0, 0, 0, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -109, 0, 0, 66, -82, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 0, 0, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 0, 0, 0, 0, 66, -125, 0, 0, 66, -124, 0, 0, 66, -126, 0, 0, 0, 0, 0, 0, 66, -109, 0, 0, 66, -82, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 0, 0, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 0, 0, 0, 0, 66, -125, 0, 0, 66, -124, 0, 0, 66, -126, 0, 0, 0, 0, 0, 0, 66, -101, 0, 0, 66, -64, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, -101, 0, 0, 66, -64, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -106, 0, 0, 66, -106, 0, 0, 66, -106, 0, 0, 0, 0, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 0, 0, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 0, 0, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 0, 0, 0, 0, 66, -84, 0, 0, 66, -84, 0, 0, 66, -84, 0, 0, 0, 0, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 0, 0, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 0, 0, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 0, 0, 0, 0, 66, -82, 0, 0, 66, -82, 0, 0, 66, -82, 0, 0, 0, 0, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 0, 0, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -122, 0, 0, 66, -122, 0, 0, 66, -122, 0, 0, 0, 0, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 0, 0, 0, 0, 66, -74, 0, 0, 66, -74, 0, 0, 66, -74, 0, 0, 0, 0, 0, 0, 66, -56, 0, 0, 66, -56, 0, 0, 66, -56, 0, 0, 0, 0, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 0, 0, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -122, 0, 0, 66, -122, 0, 0, 66, -122, 0, 0, 0, 0, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 0, 0, 0, 0, 66, -74, 0, 0, 66, -74, 0, 0, 66, -74, 0, 0, 0, 0, 0, 0, 66, -56, 0, 0, 66, -56, 0, 0, 66, -56, 0, 0, 0, 0, 0, 0, 66, -74, 0, 0, 66, -74, 0, 0, 66, -74, 0, 0, 0, 0, 0, 0, 66, -74, 0, 0, 66, -74, 0, 0, 66, -74, 0, 0, 0, 0, 0, 0, 66, -96, 0, 0, 66, -66, 0, 0, 66, -126, 0, 0, 0, 0, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 0, 0, 0, 0, 66, -102, 0, 0, 66, -88, 0, 0, 66, -116, 0, 0, 0, 0, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, -62, 0, 0, 66, -62, 0, 0, 66, -62, 0, 0, 0, 0, 0, 0, 66, 72, 0, 0, 66, 72, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 0, 0, 0, 0, 66, -102, 0, 0, 66, -88, 0, 0, 66, -116, 0, 0, 0, 0, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, -62, 0, 0, 66, -62, 0, 0, 66, -62, 0, 0, 0, 0, 0, 0, 66, 72, 0, 0, 66, 72, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 0, 0, 0, 0, 66, -112, 0, 0, 66, -112, 0, 0, 66, -112, 0, 0, 0, 0, 0, 0, 66, -112, 0, 0, 66, -112, 0, 0, 66, -112, 0, 0, 0, 0, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 0, 0, 0, 0, 66, -104, 0, 0, 66, -104, 0, 0, 66, -104, 0, 0, 0, 0, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 0, 0, 0, 0, 66, -84, 0, 0, 66, -84, 0, 0, 66, -84, 0, 0, 0, 0, 0, 0, 66, -60, 0, 0, 66, -60, 0, 0, 66, -60, 0, 0, 0, 0, 0, 0, 66, -60, 0, 0, 66, -60, 0, 0, 66, -60, 0, 0, 0, 0, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 0, 0, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 0, 0, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 0, 0, 0, 0, 66, -84, 0, 0, 66, -84, 0, 0, 66, -84, 0, 0, 0, 0, 0, 0, 66, -60, 0, 0, 66, -60, 0, 0, 66, -60, 0, 0, 0, 0, 0, 0, 66, -60, 0, 0, 66, -60, 0, 0, 66, -60, 0, 0, 0, 0, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 0, 0, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 0, 0, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 0, 0, 0, 0, 66, -62, 0, 0, 66, -62, 0, 0, 66, -62, 0, 0, 0, 0, 0, 0, 66, -62, 0, 0, 66, -62, 0, 0, 66, -62, 0, 0, 0, 0, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 0, 0, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 0, 0, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 0, 0, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 0, 0, 0, 0, 66, -62, 0, 0, 66, -62, 0, 0, 66, -62, 0, 0, 0, 0, 0, 0, 66, -62, 0, 0, 66, -62, 0, 0, 66, -62, 0, 0, 0, 0, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 0, 0, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 0, 0, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 0, 0, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 0, 0, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 0, 0, 0, 0, 66, 74, 0, 0, 66, 80, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 0, 0, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 0, 0, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 0, 0, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 0, 0, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 0, 0, 0, 0, 66, 74, 0, 0, 66, 80, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -80, 0, 0, 66, -80, 0, 0, 66, -80, 0, 0, 0, 0, 0, 0, 66, 76, 0, 0, 66, 80, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 0, 0, 0, 0, 66, 74, 0, 0, 66, 80, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -80, 0, 0, 66, -80, 0, 0, 66, -80, 0, 0, 0, 0, 0, 0, 66, 76, 0, 0, 66, 80, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -102, 0, 0, 66, -102, 0, 0, 66, -102, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 0, 0, 0, 0, 66, -60, 0, 0, 66, -60, 0, 0, 66, -60, 0, 0, 0, 0, 0, 0, 66, -96, 0, 0, 66, -96, 0, 0, 66, -96, 0, 0, 0, 0, 0, 0, 66, -80, 0, 0, 66, -80, 0, 0, 66, -80, 0, 0, 0, 0, 0, 0, 66, 120, 0, 0, 66, 120, 0, 0, 66, 120, 0, 0, 0, 0, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 0, 0, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 0, 0, 0, 0, 66, -102, 0, 0, 66, -102, 0, 0, 66, -102, 0, 0, 0, 0, 0, 0, 66, 100, 0, 0, 66, 100, 0, 0, 66, 100, 0, 0, 0, 0, 0, 0, 66, 104, 0, 0, 66, 104, 0, 0, 66, 104, 0, 0, 0, 0, 0, 0, 66, -108, 0, 0, 66, -86, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 0, 0, 0, 0, 66, -102, 0, 0, 66, -102, 0, 0, 66, -102, 0, 0, 0, 0, 0, 0, 66, 100, 0, 0, 66, 100, 0, 0, 66, 100, 0, 0, 0, 0, 0, 0, 66, 104, 0, 0, 66, 104, 0, 0, 66, 104, 0, 0, 0, 0, 0, 0, 66, -108, 0, 0, 66, -86, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 0, 0, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 0, 0, 0, 0, 66, -99, 0, 0, 66, -94, 0, 0, 66, -104, 0, 0, 0, 0, 0, 0, 66, -74, 0, 0, 66, -74, 0, 0, 66, -74, 0, 0, 0, 0, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 0, 0, 0, 0, 66, 100, 0, 0, 66, 100, 0, 0, 66, 100, 0, 0, 0, 0, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 0, 0, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 0, 0, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 0, 0, 0, 0, 66, -76, 0, 0, 66, -76, 0, 0, 66, -76, 0, 0, 0, 0, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 0, 0, 0, 0, 66, -84, 0, 0, 66, -84, 0, 0, 66, -84, 0, 0, 0, 0, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 0, 0, 0, 0, 66, -76, 0, 0, 66, -76, 0, 0, 66, -76, 0, 0, 0, 0, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 0, 0, 0, 0, 66, -84, 0, 0, 66, -84, 0, 0, 66, -84, 0, 0, 0, 0, 0, 0, 66, -70, 0, 0, 66, -70, 0, 0, 66, -70, 0, 0, 0, 0, 0, 0, 66, -70, 0, 0, 66, -70, 0, 0, 66, -70, 0, 0, 0, 0, 0, 0, 66, 72, 0, 0, 66, 72, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, 100, 0, 0, 66, 100, 0, 0, 66, 100, 0, 0, 0, 0, 0, 0, 66, -104, 0, 0, 66, -104, 0, 0, 66, -104, 0, 0, 0, 0, 0, 0, 66, 104, 0, 0, 66, 104, 0, 0, 66, 104, 0, 0, 0, 0, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 0, 0, 0, 0, 66, 116, 0, 0, 66, -110, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 0, 0, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 0, 0, 0, 0, 66, -104, 0, 0, 66, -104, 0, 0, 66, -104, 0, 0, 0, 0, 0, 0, 66, 104, 0, 0, 66, 104, 0, 0, 66, 104, 0, 0, 0, 0, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 0, 0, 0, 0, 66, 116, 0, 0, 66, -110, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 0, 0, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 0, 0, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 0, 0, 0, 0, 66, 104, 0, 0, 66, 104, 0, 0, 66, 104, 0, 0, 0, 0, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 0, 0, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 0, 0, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 0, 0, 0, 0, 66, 104, 0, 0, 66, 104, 0, 0, 66, 104, 0, 0, 0, 0, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 0, 0, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, 100, 0, 0, 66, 100, 0, 0, 66, 100, 0, 0, 0, 0, 0, 0, 66, 104, 0, 0, 66, 104, 0, 0, 66, 104, 0, 0, 0, 0, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 0, 0, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, 100, 0, 0, 66, 100, 0, 0, 66, 100, 0, 0, 0, 0, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 0, 0, 0, 0, 66, -116, 0, 0, 66, -74, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, 100, 0, 0, 66, 100, 0, 0, 66, 100, 0, 0, 0, 0, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 0, 0, 0, 0, 66, -116, 0, 0, 66, -74, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 0, 0, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 0, 0, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 0, 0, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, 104, 0, 0, 66, 104, 0, 0, 66, 104, 0, 0, 0, 0, 0, 0, 66, -95, 0, 0, 66, -80, 0, 0, 66, -110, 0, 0, 0, 0, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -76, 0, 0, 66, -76, 0, 0, 66, -76, 0, 0, 0, 0, 0, 0, 66, -98, 0, 0, 66, -98, 0, 0, 66, -98, 0, 0, 0, 0, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 0, 0, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 0, 0, 0, 0, 66, -80, 0, 0, 66, -80, 0, 0, 66, -80, 0, 0, 0, 0, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, -104, 0, 0, 66, -104, 0, 0, 66, -104, 0, 0, 0, 0, 0, 0, 66, -98, 0, 0, 66, -98, 0, 0, 66, -98, 0, 0, 0, 0, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 0, 0, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 0, 0, 0, 0, 66, -80, 0, 0, 66, -80, 0, 0, 66, -80, 0, 0, 0, 0, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, -104, 0, 0, 66, -104, 0, 0, 66, -104, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, 106, 0, 0, 66, 116, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, -80, 0, 0, 66, -80, 0, 0, 66, -80, 0, 0, 0, 0, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, -104, 0, 0, 66, -104, 0, 0, 66, -104, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, 106, 0, 0, 66, 116, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, -96, 0, 0, 66, -96, 0, 0, 66, -96, 0, 0, 0, 0, 0, 0, 66, -96, 0, 0, 66, -96, 0, 0, 66, -96, 0, 0, 0, 0, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -102, 0, 0, 66, -94, 0, 0, 66, -110, 0, 0, 0, 0, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 0, 0, 0, 0, 66, 106, 0, 0, 66, 116, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, -96, 0, 0, 66, -96, 0, 0, 66, -96, 0, 0, 0, 0, 0, 0, 66, -96, 0, 0, 66, -96, 0, 0, 66, -96, 0, 0, 0, 0, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -102, 0, 0, 66, -94, 0, 0, 66, -110, 0, 0, 0, 0, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 0, 0, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 0, 0, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 0, 0, 0, 0, 66, -60, 0, 0, 66, -60, 0, 0, 66, -60, 0, 0, 0, 0, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 0, 0, 0, 0, 66, -120, 0, 0, 66, -120, 0, 0, 66, -120, 0, 0, 0, 0, 0, 0, 66, -82, 0, 0, 66, -82, 0, 0, 66, -82, 0, 0, 0, 0, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 0, 0, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 0, 0, 0, 0, 66, -60, 0, 0, 66, -60, 0, 0, 66, -60, 0, 0, 0, 0, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 0, 0, 0, 0, 66, -120, 0, 0, 66, -120, 0, 0, 66, -120, 0, 0, 0, 0, 0, 0, 66, -82, 0, 0, 66, -82, 0, 0, 66, -82, 0, 0, 0, 0, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 0, 0, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 0, 0, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 0, 0, 0, 0, 66, 110, 0, 0, 66, -124, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 0, 0, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 0, 0, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 0, 0, 0, 0, 66, 110, 0, 0, 66, -124, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 0, 0, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, -116, 0, 0, 66, -88, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 0, 0, 0, 0, 66, -60, 0, 0, 66, -60, 0, 0, 66, -60, 0, 0, 0, 0, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 0, 0, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 0, 0, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 0, 0, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 0, 0, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -120, 0, 0, 66, -120, 0, 0, 66, -120, 0, 0, 0, 0, 0, 0, 66, -98, 0, 0, 66, -98, 0, 0, 66, -98, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 0, 0, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -120, 0, 0, 66, -120, 0, 0, 66, -120, 0, 0, 0, 0, 0, 0, 66, -98, 0, 0, 66, -98, 0, 0, 66, -98, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 0, 0, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 0, 0, 0, 0, 66, -59, 0, 0, 66, -58, 0, 0, 66, -60, 0, 0, 0, 0, 0, 0, 66, -98, 0, 0, 66, -98, 0, 0, 66, -98, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 0, 0, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 0, 0, 0, 0, 66, -59, 0, 0, 66, -58, 0, 0, 66, -60, 0, 0, 0, 0, 0, 0, 66, -96, 0, 0, 66, -96, 0, 0, 66, -96, 0, 0, 0, 0, 0, 0, 66, -96, 0, 0, 66, -96, 0, 0, 66, -96, 0, 0, 0, 0, 0, 0, 66, 100, 0, 0, 66, 100, 0, 0, 66, 100, 0, 0, 0, 0, 0, 0, 66, 72, 0, 0, 66, 72, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 0, 0, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 0, 0, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 0, 0, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, 72, 0, 0, 66, 72, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, 120, 0, 0, 66, 120, 0, 0, 66, 120, 0, 0, 0, 0, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 0, 0, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 0, 0, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 0, 0, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, 72, 0, 0, 66, 72, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, 120, 0, 0, 66, 120, 0, 0, 66, 120, 0, 0, 0, 0, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 0, 0, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 0, 0, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 0, 0, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 0, 0, 0, 0, 66, -95, 0, 0, 66, -94, 0, 0, 66, -96, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, -104, 0, 0, 66, -104, 0, 0, 66, -104, 0, 0, 0, 0, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 0, 0, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 0, 0, 0, 0, 66, -95, 0, 0, 66, -94, 0, 0, 66, -96, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, -104, 0, 0, 66, -104, 0, 0, 66, -104, 0, 0, 0, 0, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 0, 0, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, -76, 0, 0, 66, -76, 0, 0, 66, -76, 0, 0, 0, 0, 0, 0, 66, -76, 0, 0, 66, -76, 0, 0, 66, -76, 0, 0, 0, 0, 0, 0, 66, -104, 0, 0, 66, -104, 0, 0, 66, -104, 0, 0, 0, 0, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, -122, 0, 0, 66, -122, 0, 0, 66, -122, 0, 0, 0, 0, 0, 0, 66, 100, 0, 0, 66, 100, 0, 0, 66, 100, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 0, 0, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 0, 0, 0, 0, 66, -124, 0, 0, 66, -118, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, -96, 0, 0, 66, -96, 0, 0, 66, -96, 0, 0, 0, 0, 0, 0, 66, -98, 0, 0, 66, -98, 0, 0, 66, -98, 0, 0, 0, 0, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, 120, 0, 0, 66, 120, 0, 0, 66, 120, 0, 0, 0, 0, 0, 0, 66, -103, 0, 0, 66, -96, 0, 0, 66, -110, 0, 0, 0, 0, 0, 0, 66, -104, 0, 0, 66, -104, 0, 0, 66, -104, 0, 0, 0, 0, 0, 0, 66, -122, 0, 0, 66, -122, 0, 0, 66, -122, 0, 0, 0, 0, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, 120, 0, 0, 66, 120, 0, 0, 66, 120, 0, 0, 0, 0, 0, 0, 66, -103, 0, 0, 66, -96, 0, 0, 66, -110, 0, 0, 0, 0, 0, 0, 66, -104, 0, 0, 66, -104, 0, 0, 66, -104, 0, 0, 0, 0, 0, 0, 66, -122, 0, 0, 66, -122, 0, 0, 66, -122, 0, 0, 0, 0, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, -96, 0, 0, 66, -74, 0, 0, 66, -118, 0, 0, 0, 0, 0, 0, 66, -76, 0, 0, 66, -76, 0, 0, 66, -76, 0, 0, 0, 0, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 0, 0, 0, 0, 66, 120, 0, 0, 66, 120, 0, 0, 66, 120, 0, 0, 0, 0, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 0, 0, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 0, 0, 0, 0, 66, 120, 0, 0, 66, 120, 0, 0, 66, 120, 0, 0, 0, 0, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 0, 0, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -120, 0, 0, 66, -120, 0, 0, 66, -120, 0, 0, 0, 0, 0, 0, 66, -120, 0, 0, 66, -120, 0, 0, 66, -120, 0, 0, 0, 0, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 0, 0, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 0, 0, 0, 0, 66, -102, 0, 0, 66, -102, 0, 0, 66, -102, 0, 0, 0, 0, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -120, 0, 0, 66, -120, 0, 0, 66, -120, 0, 0, 0, 0, 0, 0, 66, -120, 0, 0, 66, -120, 0, 0, 66, -120, 0, 0, 0, 0, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 0, 0, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 0, 0, 0, 0, 66, -102, 0, 0, 66, -102, 0, 0, 66, -102, 0, 0, 0, 0, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 0, 0, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 0, 0, 0, 0, 66, 104, 0, 0, 66, 104, 0, 0, 66, 104, 0, 0, 0, 0, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 0, 0, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, 72, 0, 0, 66, 72, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 0, 0, 0, 0, 66, -70, 0, 0, 66, -70, 0, 0, 66, -70, 0, 0, 0, 0, 0, 0, 66, -108, 0, 0, 66, -74, 0, 0, 66, 100, 0, 0, 0, 0, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 0, 0, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, 72, 0, 0, 66, 72, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 0, 0, 0, 0, 66, -70, 0, 0, 66, -70, 0, 0, 66, -70, 0, 0, 0, 0, 0, 0, 66, -108, 0, 0, 66, -74, 0, 0, 66, 100, 0, 0, 0, 0, 0, 0, 66, -120, 0, 0, 66, -120, 0, 0, 66, -120, 0, 0, 0, 0, 0, 0, 66, -120, 0, 0, 66, -120, 0, 0, 66, -120, 0, 0, 0, 0, 0, 0, 66, -112, 0, 0, 66, -112, 0, 0, 66, -112, 0, 0, 0, 0, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 0, 0, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 0, 0, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -125, 0, 0, 66, -118, 0, 0, 66, 120, 0, 0, 0, 0, 0, 0, 66, -62, 0, 0, 66, -62, 0, 0, 66, -62, 0, 0, 0, 0, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 0, 0, 0, 0, 66, -102, 0, 0, 66, -102, 0, 0, 66, -102, 0, 0, 0, 0, 0, 0, 66, -64, 0, 0, 66, -58, 0, 0, 66, -70, 0, 0, 0, 0, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 0, 0, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 0, 0, 0, 0, 66, 126, 0, 0, 66, -122, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 0, 0, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 0, 0, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 0, 0, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 0, 0, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 0, 0, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 0, 0, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 0, 0, 0, 0, 66, -62, 0, 0, 66, -62, 0, 0, 66, -62, 0, 0, 0, 0, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 0, 0, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 0, 0, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 0, 0, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 0, 0, 0, 0, 66, -62, 0, 0, 66, -62, 0, 0, 66, -62, 0, 0, 0, 0, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 0, 0, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 0, 0, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 0, 0, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 0, 0, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 0, 0, 0, 0, 66, -62, 0, 0, 66, -62, 0, 0, 66, -62, 0, 0, 0, 0, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 0, 0, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 0, 0, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 0, 0, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 0, 0, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -106, 0, 0, 66, -106, 0, 0, 66, -106, 0, 0, 0, 0, 0, 0, 66, -84, 0, 0, 66, -84, 0, 0, 66, -84, 0, 0, 0, 0, 0, 0, 66, 100, 0, 0, 66, 100, 0, 0, 66, 100, 0, 0, 0, 0, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 0, 0, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 0, 0, 0, 0, 66, -82, 0, 0, 66, -82, 0, 0, 66, -82, 0, 0, 0, 0, 0, 0, 66, -102, 0, 0, 66, -102, 0, 0, 66, -102, 0, 0, 0, 0, 0, 0, 66, -84, 0, 0, 66, -84, 0, 0, 66, -84, 0, 0, 0, 0, 0, 0, 66, 100, 0, 0, 66, 100, 0, 0, 66, 100, 0, 0, 0, 0, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 0, 0, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 0, 0, 0, 0, 66, -82, 0, 0, 66, -82, 0, 0, 66, -82, 0, 0, 0, 0, 0, 0, 66, -102, 0, 0, 66, -102, 0, 0, 66, -102, 0, 0, 0, 0, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 0, 0, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 0, 0, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 0, 0, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 0, 0, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 0, 0, 0, 0, 66, -114, 0, 0, 66, -114, 0, 0, 66, -114, 0, 0, 0, 0, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, 120, 0, 0, 66, 120, 0, 0, 66, 120, 0, 0, 0, 0, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 0, 0, 0, 0, 66, -110, 0, 0, 66, -86, 0, 0, 66, 116, 0, 0, 0, 0, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -74, 0, 0, 66, -74, 0, 0, 66, -74, 0, 0, 0, 0, 0, 0, 66, -102, 0, 0, 66, -102, 0, 0, 66, -102, 0, 0, 0, 0, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 0, 0, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 0, 0, 0, 0, 66, -112, 0, 0, 66, -112, 0, 0, 66, -112, 0, 0, 0, 0, 0, 0, 66, -102, 0, 0, 66, -102, 0, 0, 66, -102, 0, 0, 0, 0, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 0, 0, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 0, 0, 0, 0, 66, -112, 0, 0, 66, -112, 0, 0, 66, -112, 0, 0, 0, 0, 0, 0, 66, -87, 0, 0, 66, -80, 0, 0, 66, -94, 0, 0, 0, 0, 0, 0, 66, -87, 0, 0, 66, -80, 0, 0, 66, -94, 0, 0, 0, 0, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 0, 0, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 0, 0, 0, 0, 66, -62, 0, 0, 66, -62, 0, 0, 66, -62, 0, 0, 0, 0, 0, 0, 66, -70, 0, 0, 66, -70, 0, 0, 66, -70, 0, 0, 0, 0, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 0, 0, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 0, 0, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 0, 0, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -84, 0, 0, 66, -84, 0, 0, 66, -84, 0, 0, 0, 0, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 0, 0, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 0, 0, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -84, 0, 0, 66, -84, 0, 0, 66, -84, 0, 0, 0, 0, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 0, 0, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 0, 0, 0, 0, 66, -104, 0, 0, 66, -104, 0, 0, 66, -104, 0, 0, 0, 0, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 0, 0, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 0, 0, 0, 0, 66, -104, 0, 0, 66, -104, 0, 0, 66, -104, 0, 0, 0, 0, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 0, 0, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 0, 0, 0, 0, 66, -84, 0, 0, 66, -64, 0, 0, 66, -104, 0, 0, 0, 0, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 0, 0, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 0, 0, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 0, 0, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 0, 0, 0, 0, 66, -84, 0, 0, 66, -64, 0, 0, 66, -104, 0, 0, 0, 0, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 0, 0, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 0, 0, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, 110, 0, 0, 66, -122, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, 110, 0, 0, 66, -122, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -84, 0, 0, 66, -64, 0, 0, 66, -104, 0, 0, 0, 0, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 0, 0, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 0, 0, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, 110, 0, 0, 66, -122, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, 110, 0, 0, 66, -122, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 0, 0, 0, 0, 66, -76, 0, 0, 66, -76, 0, 0, 66, -76, 0, 0, 0, 0, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 0, 0, 0, 0, 66, 104, 0, 0, 66, 104, 0, 0, 66, 104, 0, 0, 0, 0, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 0, 0, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 0, 0, 0, 0, 66, -76, 0, 0, 66, -76, 0, 0, 66, -76, 0, 0, 0, 0, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 0, 0, 0, 0, 66, 104, 0, 0, 66, 104, 0, 0, 66, 104, 0, 0, 0, 0, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 0, 0, 0, 0, 66, -91, 0, 0, 66, -64, 0, 0, 66, -118, 0, 0, 0, 0, 0, 0, 66, -91, 0, 0, 66, -64, 0, 0, 66, -118, 0, 0, 0, 0, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -82, 0, 0, 66, -82, 0, 0, 66, -82, 0, 0, 0, 0, 0, 0, 66, -64, 0, 0, 66, -64, 0, 0, 66, -64, 0, 0, 0, 0, 0, 0, 66, 120, 0, 0, 66, 120, 0, 0, 66, 120, 0, 0, 0, 0, 0, 0, 66, -102, 0, 0, 66, -102, 0, 0, 66, -102, 0, 0, 0, 0, 0, 0, 66, -104, 0, 0, 66, -104, 0, 0, 66, -104, 0, 0, 0, 0, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 0, 0, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 0, 0, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 0, 0, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 0, 0, 0, 0, 66, -102, 0, 0, 66, -102, 0, 0, 66, -102, 0, 0, 0, 0, 0, 0, 66, -104, 0, 0, 66, -104, 0, 0, 66, -104, 0, 0, 0, 0, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 0, 0, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 0, 0, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 0, 0, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 0, 0, 0, 0, 66, -102, 0, 0, 66, -102, 0, 0, 66, -102, 0, 0, 0, 0, 0, 0, 66, -102, 0, 0, 66, -102, 0, 0, 66, -102, 0, 0, 0, 0, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 0, 0, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 0, 0, 0, 0, 66, 106, 0, 0, 66, 116, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, -82, 0, 0, 66, -82, 0, 0, 66, -82, 0, 0, 0, 0, 0, 0, 66, -127, 0, 0, 66, -96, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 0, 0, 0, 0, 66, -82, 0, 0, 66, -82, 0, 0, 66, -82, 0, 0, 0, 0, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 0, 0, 0, 0, 66, -98, 0, 0, 66, -98, 0, 0, 66, -98, 0, 0, 0, 0, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 0, 0, 0, 0, 66, -82, 0, 0, 66, -82, 0, 0, 66, -82, 0, 0, 0, 0, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 0, 0, 0, 0, 66, -98, 0, 0, 66, -98, 0, 0, 66, -98, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, -116, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, -116, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 0, 0, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, -102, 0, 0, 66, -102, 0, 0, 66, -102, 0, 0, 0, 0, 0, 0, 66, -122, 0, 0, 66, -122, 0, 0, 66, -122, 0, 0, 0, 0, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 0, 0, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 0, 0, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 0, 0, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 0, 0, 0, 0, 66, -94, 0, 0, 66, -78, 0, 0, 66, -110, 0, 0, 0, 0, 0, 0, 66, -122, 0, 0, 66, -122, 0, 0, 66, -122, 0, 0, 0, 0, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 0, 0, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 0, 0, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 0, 0, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 0, 0, 0, 0, 66, -94, 0, 0, 66, -78, 0, 0, 66, -110, 0, 0, 0, 0, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 0, 0, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, -92, 0, 0, 66, -64, 0, 0, 66, -120, 0, 0, 0, 0, 0, 0, 66, -94, 0, 0, 66, -78, 0, 0, 66, -110, 0, 0, 0, 0, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 0, 0, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, -92, 0, 0, 66, -64, 0, 0, 66, -120, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 0, 0, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, -81, 0, 0, 66, -64, 0, 0, 66, -98, 0, 0, 0, 0, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -73, 0, 0, 66, -60, 0, 0, 66, -86, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, -120, 0, 0, 66, -120, 0, 0, 66, -120, 0, 0, 0, 0, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 0, 0, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -73, 0, 0, 66, -60, 0, 0, 66, -86, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, -120, 0, 0, 66, -120, 0, 0, 66, -120, 0, 0, 0, 0, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 0, 0, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 0, 0, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 0, 0, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 0, 0, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, -84, 0, 0, 66, -84, 0, 0, 66, -84, 0, 0, 0, 0, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, -114, 0, 0, 66, -104, 0, 0, 66, -124, 0, 0, 0, 0, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 0, 0, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 0, 0, 0, 0, 66, -64, 0, 0, 66, -64, 0, 0, 66, -64, 0, 0, 0, 0, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 0, 0, 0, 0, 66, -60, 0, 0, 66, -60, 0, 0, 66, -60, 0, 0, 0, 0, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 0, 0, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -70, 0, 0, 66, -70, 0, 0, 66, -70, 0, 0, 0, 0, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 0, 0, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 0, 0, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 0, 0, 0, 0, 66, 100, 0, 0, 66, 100, 0, 0, 66, 100, 0, 0, 0, 0, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -70, 0, 0, 66, -70, 0, 0, 66, -70, 0, 0, 0, 0, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 0, 0, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 0, 0, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 0, 0, 0, 0, 66, 100, 0, 0, 66, 100, 0, 0, 66, 100, 0, 0, 0, 0, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 0, 0, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 0, 0, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 0, 0, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 0, 0, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 0, 0, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 0, 0, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 0, 0, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 0, 0, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 0, 0, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 0, 0, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 0, 0, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 0, 0, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 0, 0, 0, 0, 66, -120, 0, 0, 66, -120, 0, 0, 66, -120, 0, 0, 0, 0, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 0, 0, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 0, 0, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 0, 0, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 0, 0, 0, 0, 66, -120, 0, 0, 66, -120, 0, 0, 66, -120, 0, 0, 0, 0, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 0, 0, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, -106, 0, 0, 66, -102, 0, 0, 66, -110, 0, 0, 0, 0, 0, 0, 66, -106, 0, 0, 66, -102, 0, 0, 66, -110, 0, 0, 0, 0, 0, 0, 66, 104, 0, 0, 66, 104, 0, 0, 66, 104, 0, 0, 0, 0, 0, 0, 66, -120, 0, 0, 66, -120, 0, 0, 66, -120, 0, 0, 0, 0, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 0, 0, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, -106, 0, 0, 66, -102, 0, 0, 66, -110, 0, 0, 0, 0, 0, 0, 66, -106, 0, 0, 66, -102, 0, 0, 66, -110, 0, 0, 0, 0, 0, 0, 66, 104, 0, 0, 66, 104, 0, 0, 66, 104, 0, 0, 0, 0, 0, 0, 66, -114, 0, 0, 66, -106, 0, 0, 66, -122, 0, 0, 0, 0, 0, 0, 66, -114, 0, 0, 66, -106, 0, 0, 66, -122, 0, 0, 0, 0, 0, 0, 66, -120, 0, 0, 66, -120, 0, 0, 66, -120, 0, 0, 0, 0, 0, 0, 66, -70, 0, 0, 66, -70, 0, 0, 66, -70, 0, 0, 0, 0, 0, 0, 66, 104, 0, 0, 66, 104, 0, 0, 66, 104, 0, 0, 0, 0, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 0, 0, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 0, 0, 0, 0, 66, -103, 0, 0, 66, -94, 0, 0, 66, -112, 0, 0, 0, 0, 0, 0, 66, -120, 0, 0, 66, -120, 0, 0, 66, -120, 0, 0, 0, 0, 0, 0, 66, -70, 0, 0, 66, -70, 0, 0, 66, -70, 0, 0, 0, 0, 0, 0, 66, 104, 0, 0, 66, 104, 0, 0, 66, 104, 0, 0, 0, 0, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 0, 0, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 0, 0, 0, 0, 66, -103, 0, 0, 66, -94, 0, 0, 66, -112, 0, 0, 0, 0, 0, 0, 66, -98, 0, 0, 66, -98, 0, 0, 66, -98, 0, 0, 0, 0, 0, 0, 66, -98, 0, 0, 66, -98, 0, 0, 66, -98, 0, 0, 0, 0, 0, 0, 66, -112, 0, 0, 66, -112, 0, 0, 66, -112, 0, 0, 0, 0, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, 104, 0, 0, 66, 104, 0, 0, 66, 104, 0, 0, 0, 0, 0, 0, 66, -98, 0, 0, 66, -98, 0, 0, 66, -98, 0, 0, 0, 0, 0, 0, 66, -112, 0, 0, 66, -112, 0, 0, 66, -112, 0, 0, 0, 0, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, 104, 0, 0, 66, 104, 0, 0, 66, 104, 0, 0, 0, 0, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 0, 0, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 0, 0, 0, 0, 66, -122, 0, 0, 66, -122, 0, 0, 66, -122, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 0, 0, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 0, 0, 0, 0, 66, -80, 0, 0, 66, -80, 0, 0, 66, -80, 0, 0, 0, 0, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 0, 0, 0, 0, 66, -76, 0, 0, 66, -76, 0, 0, 66, -76, 0, 0, 0, 0, 0, 0, 66, 96, 0, 0, 66, 112, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 0, 0, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 0, 0, 0, 0, 66, -80, 0, 0, 66, -80, 0, 0, 66, -80, 0, 0, 0, 0, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 0, 0, 0, 0, 66, -76, 0, 0, 66, -76, 0, 0, 66, -76, 0, 0, 0, 0, 0, 0, 66, 96, 0, 0, 66, 112, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 0, 0, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 0, 0, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 0, 0, 0, 0, 66, -122, 0, 0, 66, -122, 0, 0, 66, -122, 0, 0, 0, 0, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 0, 0, 0, 0, 66, 72, 0, 0, 66, 72, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 0, 0, 0, 0, 66, -62, 0, 0, 66, -62, 0, 0, 66, -62, 0, 0, 0, 0, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 0, 0, 0, 0, 66, -115, 0, 0, 66, -100, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, 72, 0, 0, 66, 72, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 0, 0, 0, 0, 66, -62, 0, 0, 66, -62, 0, 0, 66, -62, 0, 0, 0, 0, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 0, 0, 0, 0, 66, -115, 0, 0, 66, -100, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, -87, 0, 0, 66, -72, 0, 0, 66, -102, 0, 0, 0, 0, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 0, 0, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 0, 0, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 0, 0, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, -87, 0, 0, 66, -72, 0, 0, 66, -102, 0, 0, 0, 0, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 0, 0, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 0, 0, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 0, 0, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 0, 0, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 0, 0, 0, 0, 66, -88, 0, 0, 66, -58, 0, 0, 66, -118, 0, 0, 0, 0, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 0, 0, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 0, 0, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 0, 0, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 0, 0, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 0, 0, 0, 0, 66, -88, 0, 0, 66, -58, 0, 0, 66, -118, 0, 0, 0, 0, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 0, 0, 0, 0, 66, -78, 0, 0, 66, -64, 0, 0, 66, -92, 0, 0, 0, 0, 0, 0, 66, -70, 0, 0, 66, -70, 0, 0, 66, -70, 0, 0, 0, 0, 0, 0, 66, -80, 0, 0, 66, -80, 0, 0, 66, -80, 0, 0, 0, 0, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 0, 0, 0, 0, 66, -112, 0, 0, 66, -112, 0, 0, 66, -112, 0, 0, 0, 0, 0, 0, 66, 72, 0, 0, 66, 72, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -111, 0, 0, 66, -108, 0, 0, 66, -114, 0, 0, 0, 0, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 0, 0, 0, 0, 66, -80, 0, 0, 66, -80, 0, 0, 66, -80, 0, 0, 0, 0, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 0, 0, 0, 0, 66, -112, 0, 0, 66, -112, 0, 0, 66, -112, 0, 0, 0, 0, 0, 0, 66, 72, 0, 0, 66, 72, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -111, 0, 0, 66, -108, 0, 0, 66, -114, 0, 0, 0, 0, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 0, 0, 0, 0, 66, -112, 0, 0, 66, -112, 0, 0, 66, -112, 0, 0, 0, 0, 0, 0, 66, -112, 0, 0, 66, -112, 0, 0, 66, -112, 0, 0, 0, 0, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 0, 0, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 0, 0, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 0, 0, 0, 0, 66, 120, 0, 0, 66, 120, 0, 0, 66, 120, 0, 0, 0, 0, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 0, 0, 0, 0, 66, -112, 0, 0, 66, -112, 0, 0, 66, -112, 0, 0, 0, 0, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 0, 0, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 0, 0, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 0, 0, 0, 0, 66, 120, 0, 0, 66, 120, 0, 0, 66, 120, 0, 0, 0, 0, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 0, 0, 0, 0, 66, -114, 0, 0, 66, -114, 0, 0, 66, -114, 0, 0, 0, 0, 0, 0, 66, -114, 0, 0, 66, -114, 0, 0, 66, -114, 0, 0, 0, 0, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 0, 0, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 0, 0, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 0, 0, 0, 0, 66, -98, 0, 0, 66, -58, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 0, 0, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 0, 0, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 0, 0, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 0, 0, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 0, 0, 0, 0, 66, -98, 0, 0, 66, -58, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 0, 0, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 0, 0, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 0, 0, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 0, 0, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 0, 0, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 0, 0, 0, 0, 66, -122, 0, 0, 66, -122, 0, 0, 66, -122, 0, 0, 0, 0, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 0, 0, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 0, 0, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 0, 0, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 0, 0, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 0, 0, 0, 0, 66, -122, 0, 0, 66, -122, 0, 0, 66, -122, 0, 0, 0, 0, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 0, 0, 0, 0, 66, -112, 0, 0, 66, -90, 0, 0, 66, 116, 0, 0, 0, 0, 0, 0, 66, -112, 0, 0, 66, -90, 0, 0, 66, 116, 0, 0, 0, 0, 0, 0, 66, 72, 0, 0, 66, 72, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 0, 0, 0, 0, 66, -122, 0, 0, 66, -122, 0, 0, 66, -122, 0, 0, 0, 0, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 0, 0, 0, 0, 66, -112, 0, 0, 66, -90, 0, 0, 66, 116, 0, 0, 0, 0, 0, 0, 66, -112, 0, 0, 66, -90, 0, 0, 66, 116, 0, 0, 0, 0, 0, 0, 66, 72, 0, 0, 66, 72, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -114, 0, 0, 66, -92, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, -114, 0, 0, 66, -92, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, -112, 0, 0, 66, -90, 0, 0, 66, 116, 0, 0, 0, 0, 0, 0, 66, 72, 0, 0, 66, 72, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -114, 0, 0, 66, -92, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, -114, 0, 0, 66, -92, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, -82, 0, 0, 66, -82, 0, 0, 66, -82, 0, 0, 0, 0, 0, 0, 66, -82, 0, 0, 66, -82, 0, 0, 66, -82, 0, 0, 0, 0, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 0, 0, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 0, 0, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 0, 0, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 0, 0, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 0, 0, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 0, 0, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, 116, 0, 0, 66, 120, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, 116, 0, 0, 66, 120, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, -64, 0, 0, 66, -64, 0, 0, 66, -64, 0, 0, 0, 0, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 0, 0, 0, 0, 66, -122, 0, 0, 66, -122, 0, 0, 66, -122, 0, 0, 0, 0, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 0, 0, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 0, 0, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 0, 0, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 0, 0, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 0, 0, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, -112, 0, 0, 66, -112, 0, 0, 66, -112, 0, 0, 0, 0, 0, 0, 66, -114, 0, 0, 66, -114, 0, 0, 66, -114, 0, 0, 0, 0, 0, 0, 66, -112, 0, 0, 66, -112, 0, 0, 66, -112, 0, 0, 0, 0, 0, 0, 66, -76, 0, 0, 66, -76, 0, 0, 66, -76, 0, 0, 0, 0, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 0, 0, 0, 0, 66, -96, 0, 0, 66, -96, 0, 0, 66, -96, 0, 0, 0, 0, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 0, 0, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 0, 0, 0, 0, 66, -96, 0, 0, 66, -96, 0, 0, 66, -96, 0, 0, 0, 0, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 0, 0, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 0, 0, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 0, 0, 0, 0, 66, -68, 0, 0, 66, -64, 0, 0, 66, -72, 0, 0, 0, 0, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 0, 0, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 0, 0, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 0, 0, 0, 0, 66, -68, 0, 0, 66, -64, 0, 0, 66, -72, 0, 0, 0, 0, 0, 0, 66, -84, 0, 0, 66, -84, 0, 0, 66, -84, 0, 0, 0, 0, 0, 0, 66, -84, 0, 0, 66, -84, 0, 0, 66, -84, 0, 0, 0, 0, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 0, 0, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 0, 0, 0, 0, 66, -74, 0, 0, 66, -74, 0, 0, 66, -74, 0, 0, 0, 0, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 0, 0, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 0, 0, 0, 0, 66, 116, 0, 0, 66, -124, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 0, 0, 0, 0, 66, -74, 0, 0, 66, -74, 0, 0, 66, -74, 0, 0, 0, 0, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 0, 0, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 0, 0, 0, 0, 66, 116, 0, 0, 66, -124, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 0, 0, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 0, 0, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 0, 0, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 0, 0, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 0, 0, 0, 0, 66, -84, 0, 0, 66, -84, 0, 0, 66, -84, 0, 0, 0, 0, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 0, 0, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 0, 0, 0, 0, 66, -102, 0, 0, 66, -96, 0, 0, 66, -108, 0, 0, 0, 0, 0, 0, 66, -64, 0, 0, 66, -64, 0, 0, 66, -64, 0, 0, 0, 0, 0, 0, 66, -88, 0, 0, 66, -68, 0, 0, 66, -108, 0, 0, 0, 0, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 0, 0, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 0, 0, 0, 0, 66, -102, 0, 0, 66, -96, 0, 0, 66, -108, 0, 0, 0, 0, 0, 0, 66, -64, 0, 0, 66, -64, 0, 0, 66, -64, 0, 0, 0, 0, 0, 0, 66, -88, 0, 0, 66, -68, 0, 0, 66, -108, 0, 0, 0, 0, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 0, 0, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 0, 0, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 0, 0, 0, 0, 66, 120, 0, 0, 66, 120, 0, 0, 66, 120, 0, 0, 0, 0, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 0, 0, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 0, 0, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 0, 0, 0, 0, 66, -80, 0, 0, 66, -80, 0, 0, 66, -80, 0, 0, 0, 0, 0, 0, 66, -102, 0, 0, 66, -102, 0, 0, 66, -102, 0, 0, 0, 0, 0, 0, 66, 120, 0, 0, 66, 120, 0, 0, 66, 120, 0, 0, 0, 0, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 0, 0, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, -112, 0, 0, 66, -110, 0, 0, 66, -114, 0, 0, 0, 0, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 0, 0, 0, 0, 66, 100, 0, 0, 66, 100, 0, 0, 66, 100, 0, 0, 0, 0, 0, 0, 66, -56, 0, 0, 66, -56, 0, 0, 66, -56, 0, 0, 0, 0, 0, 0, 66, -104, 0, 0, 66, -104, 0, 0, 66, -104, 0, 0, 0, 0, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, 100, 0, 0, 66, 100, 0, 0, 66, 100, 0, 0, 0, 0, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, 100, 0, 0, 66, 100, 0, 0, 66, 100, 0, 0, 0, 0, 0, 0, 66, -56, 0, 0, 66, -56, 0, 0, 66, -56, 0, 0, 0, 0, 0, 0, 66, -104, 0, 0, 66, -104, 0, 0, 66, -104, 0, 0, 0, 0, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, 100, 0, 0, 66, 100, 0, 0, 66, 100, 0, 0, 0, 0, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 0, 0, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 0, 0, 0, 0, 66, -70, 0, 0, 66, -70, 0, 0, 66, -70, 0, 0, 0, 0, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 0, 0, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 0, 0, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -102, 0, 0, 66, -90, 0, 0, 66, -114, 0, 0, 0, 0, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 0, 0, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 0, 0, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -102, 0, 0, 66, -90, 0, 0, 66, -114, 0, 0, 0, 0, 0, 0, 66, -124, 0, 0, 66, -122, 0, 0, 66, -126, 0, 0, 0, 0, 0, 0, 66, -124, 0, 0, 66, -122, 0, 0, 66, -126, 0, 0, 0, 0, 0, 0, 66, 120, 0, 0, 66, 120, 0, 0, 66, 120, 0, 0, 0, 0, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 0, 0, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -102, 0, 0, 66, -90, 0, 0, 66, -114, 0, 0, 0, 0, 0, 0, 66, -124, 0, 0, 66, -122, 0, 0, 66, -126, 0, 0, 0, 0, 0, 0, 66, -124, 0, 0, 66, -122, 0, 0, 66, -126, 0, 0, 0, 0, 0, 0, 66, 120, 0, 0, 66, 120, 0, 0, 66, 120, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, -102, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, 100, 0, 0, 66, 100, 0, 0, 66, 100, 0, 0, 0, 0, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, -102, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, 100, 0, 0, 66, 100, 0, 0, 66, 100, 0, 0, 0, 0, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 0, 0, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 0, 0, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 0, 0, 0, 0, 66, -84, 0, 0, 66, -84, 0, 0, 66, -84, 0, 0, 0, 0, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 0, 0, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 0, 0, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 0, 0, 0, 0, 66, -84, 0, 0, 66, -84, 0, 0, 66, -84, 0, 0, 0, 0, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 0, 0, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 0, 0, 0, 0, 66, -100, 0, 0, 66, -92, 0, 0, 66, -108, 0, 0, 0, 0, 0, 0, 66, -100, 0, 0, 66, -92, 0, 0, 66, -108, 0, 0, 0, 0, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 0, 0, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 0, 0, 0, 0, 66, -100, 0, 0, 66, -92, 0, 0, 66, -108, 0, 0, 0, 0, 0, 0, 66, -100, 0, 0, 66, -92, 0, 0, 66, -108, 0, 0, 0, 0, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 0, 0, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 0, 0, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, -98, 0, 0, 66, -98, 0, 0, 66, -98, 0, 0, 0, 0, 0, 0, 66, -100, 0, 0, 66, -92, 0, 0, 66, -108, 0, 0, 0, 0, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 0, 0, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 0, 0, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, -98, 0, 0, 66, -98, 0, 0, 66, -98, 0, 0, 0, 0, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 0, 0, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 0, 0, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 0, 0, 0, 0, 66, 100, 0, 0, 66, 100, 0, 0, 66, 100, 0, 0, 0, 0, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 0, 0, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, -106, 0, 0, 66, -106, 0, 0, 66, -106, 0, 0, 0, 0, 0, 0, 66, -114, 0, 0, 66, -84, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 0, 0, 0, 0, 66, -60, 0, 0, 66, -60, 0, 0, 66, -60, 0, 0, 0, 0, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 0, 0, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 0, 0, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 0, 0, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 0, 0, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 0, 0, 0, 0, 66, -104, 0, 0, 66, -104, 0, 0, 66, -104, 0, 0, 0, 0, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 0, 0, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 0, 0, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 0, 0, 0, 0, 66, -98, 0, 0, 66, -98, 0, 0, 66, -98, 0, 0, 0, 0, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 0, 0, 0, 0, 66, -62, 0, 0, 66, -62, 0, 0, 66, -62, 0, 0, 0, 0, 0, 0, 66, -124, 0, 0, 66, -108, 0, 0, 66, 104, 0, 0, 0, 0, 0, 0, 66, -64, 0, 0, 66, -64, 0, 0, 66, -64, 0, 0, 0, 0, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 0, 0, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 0, 0, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 0, 0, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 0, 0, 0, 0, 66, -70, 0, 0, 66, -62, 0, 0, 66, -78, 0, 0, 0, 0, 0, 0, 66, -114, 0, 0, 66, -98, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 0, 0, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 0, 0, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 0, 0, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 0, 0, 0, 0, 66, -70, 0, 0, 66, -62, 0, 0, 66, -78, 0, 0, 0, 0, 0, 0, 66, -114, 0, 0, 66, -98, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 0, 0, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 0, 0, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, -106, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 0, 0, 0, 0, 66, -114, 0, 0, 66, -98, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 0, 0, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 0, 0, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, -106, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 0, 0, 0, 0, 66, -122, 0, 0, 66, -122, 0, 0, 66, -122, 0, 0, 0, 0, 0, 0, 66, -122, 0, 0, 66, -122, 0, 0, 66, -122, 0, 0, 0, 0, 0, 0, 66, -115, 0, 0, 66, -80, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 0, 0, 0, 0, 66, -112, 0, 0, 66, -112, 0, 0, 66, -112, 0, 0, 0, 0, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 0, 0, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 0, 0, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 0, 0, 0, 0, 66, -120, 0, 0, 66, -120, 0, 0, 66, -120, 0, 0, 0, 0, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 0, 0, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, 100, 0, 0, 66, 100, 0, 0, 66, 100, 0, 0, 0, 0, 0, 0, 66, -74, 0, 0, 66, -74, 0, 0, 66, -74, 0, 0, 0, 0, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 0, 0, 0, 0, 66, 120, 0, 0, 66, 120, 0, 0, 66, 120, 0, 0, 0, 0, 0, 0, 66, -120, 0, 0, 66, -120, 0, 0, 66, -120, 0, 0, 0, 0, 0, 0, 66, -74, 0, 0, 66, -74, 0, 0, 66, -74, 0, 0, 0, 0, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 0, 0, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 0, 0, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 0, 0, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 0, 0, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 0, 0, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 0, 0, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 0, 0, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 0, 0, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 0, 0, 0, 0, 66, 126, 0, 0, 66, -124, 0, 0, 66, 116, 0, 0, 0, 0, 0, 0, 66, 126, 0, 0, 66, -124, 0, 0, 66, 116, 0, 0, 0, 0, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 0, 0, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, -64, 0, 0, 66, -64, 0, 0, 66, -64, 0, 0, 0, 0, 0, 0, 66, -112, 0, 0, 66, -112, 0, 0, 66, -112, 0, 0, 0, 0, 0, 0, 66, 126, 0, 0, 66, -124, 0, 0, 66, 116, 0, 0, 0, 0, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 0, 0, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, -64, 0, 0, 66, -64, 0, 0, 66, -64, 0, 0, 0, 0, 0, 0, 66, -112, 0, 0, 66, -112, 0, 0, 66, -112, 0, 0, 0, 0, 0, 0, 66, -120, 0, 0, 66, -102, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, -120, 0, 0, 66, -102, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 0, 0, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, -64, 0, 0, 66, -64, 0, 0, 66, -64, 0, 0, 0, 0, 0, 0, 66, -112, 0, 0, 66, -112, 0, 0, 66, -112, 0, 0, 0, 0, 0, 0, 66, -120, 0, 0, 66, -102, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, -120, 0, 0, 66, -102, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 0, 0, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 0, 0, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 0, 0, 0, 0, 66, -111, 0, 0, 66, -96, 0, 0, 66, -126, 0, 0, 0, 0, 0, 0, 66, -120, 0, 0, 66, -102, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 0, 0, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 0, 0, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 0, 0, 0, 0, 66, -111, 0, 0, 66, -96, 0, 0, 66, -126, 0, 0, 0, 0, 0, 0, 66, -122, 0, 0, 66, -122, 0, 0, 66, -122, 0, 0, 0, 0, 0, 0, 66, -122, 0, 0, 66, -122, 0, 0, 66, -122, 0, 0, 0, 0, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, -74, 0, 0, 66, -74, 0, 0, 66, -74, 0, 0, 0, 0, 0, 0, 66, -120, 0, 0, 66, -120, 0, 0, 66, -120, 0, 0, 0, 0, 0, 0, 66, -98, 0, 0, 66, -98, 0, 0, 66, -98, 0, 0, 0, 0, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 0, 0, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, -74, 0, 0, 66, -74, 0, 0, 66, -74, 0, 0, 0, 0, 0, 0, 66, -120, 0, 0, 66, -120, 0, 0, 66, -120, 0, 0, 0, 0, 0, 0, 66, -98, 0, 0, 66, -98, 0, 0, 66, -98, 0, 0, 0, 0, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 0, 0, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, -114, 0, 0, 66, -114, 0, 0, 66, -114, 0, 0, 0, 0, 0, 0, 66, -114, 0, 0, 66, -114, 0, 0, 66, -114, 0, 0, 0, 0, 0, 0, 66, -106, 0, 0, 66, -106, 0, 0, 66, -106, 0, 0, 0, 0, 0, 0, 66, -106, 0, 0, 66, -106, 0, 0, 66, -106, 0, 0, 0, 0, 0, 0, 66, -82, 0, 0, 66, -82, 0, 0, 66, -82, 0, 0, 0, 0, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 0, 0, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 0, 0, 0, 0, 66, -62, 0, 0, 66, -62, 0, 0, 66, -62, 0, 0, 0, 0, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 0, 0, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 0, 0, 0, 0, 66, -100, 0, 0, 66, -62, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, -96, 0, 0, 66, -96, 0, 0, 66, -96, 0, 0, 0, 0, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 0, 0, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 0, 0, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 0, 0, 0, 0, 66, -109, 0, 0, 66, -106, 0, 0, 66, -112, 0, 0, 0, 0, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -82, 0, 0, 66, -82, 0, 0, 66, -82, 0, 0, 0, 0, 0, 0, 66, -86, 0, 0, 66, -76, 0, 0, 66, -96, 0, 0, 0, 0, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 0, 0, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 0, 0, 0, 0, 66, -109, 0, 0, 66, -106, 0, 0, 66, -112, 0, 0, 0, 0, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -82, 0, 0, 66, -82, 0, 0, 66, -82, 0, 0, 0, 0, 0, 0, 66, -86, 0, 0, 66, -76, 0, 0, 66, -96, 0, 0, 0, 0, 0, 0, 66, -62, 0, 0, 66, -62, 0, 0, 66, -62, 0, 0, 0, 0, 0, 0, 66, -62, 0, 0, 66, -62, 0, 0, 66, -62, 0, 0, 0, 0, 0, 0, 66, -117, 0, 0, 66, -108, 0, 0, 66, -126, 0, 0, 0, 0, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 0, 0, 0, 0, 66, -82, 0, 0, 66, -82, 0, 0, 66, -82, 0, 0, 0, 0, 0, 0, 66, -86, 0, 0, 66, -76, 0, 0, 66, -96, 0, 0, 0, 0, 0, 0, 66, -62, 0, 0, 66, -62, 0, 0, 66, -62, 0, 0, 0, 0, 0, 0, 66, -62, 0, 0, 66, -62, 0, 0, 66, -62, 0, 0, 0, 0, 0, 0, 66, -117, 0, 0, 66, -108, 0, 0, 66, -126, 0, 0, 0, 0, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, -116, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, -116, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, -116, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, -99, 0, 0, 66, -90, 0, 0, 66, -108, 0, 0, 0, 0, 0, 0, 66, -99, 0, 0, 66, -90, 0, 0, 66, -108, 0, 0, 0, 0, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 0, 0, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 0, 0, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 0, 0, 0, 0, 66, -76, 0, 0, 66, -76, 0, 0, 66, -76, 0, 0, 0, 0, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, -99, 0, 0, 66, -90, 0, 0, 66, -108, 0, 0, 0, 0, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 0, 0, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 0, 0, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 0, 0, 0, 0, 66, -76, 0, 0, 66, -76, 0, 0, 66, -76, 0, 0, 0, 0, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, -80, 0, 0, 66, -80, 0, 0, 66, -80, 0, 0, 0, 0, 0, 0, 66, -80, 0, 0, 66, -80, 0, 0, 66, -80, 0, 0, 0, 0, 0, 0, 66, -106, 0, 0, 66, -106, 0, 0, 66, -106, 0, 0, 0, 0, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 0, 0, 0, 0, 66, -76, 0, 0, 66, -76, 0, 0, 66, -76, 0, 0, 0, 0, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, -80, 0, 0, 66, -80, 0, 0, 66, -80, 0, 0, 0, 0, 0, 0, 66, -80, 0, 0, 66, -80, 0, 0, 66, -80, 0, 0, 0, 0, 0, 0, 66, -106, 0, 0, 66, -106, 0, 0, 66, -106, 0, 0, 0, 0, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 0, 0, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 0, 0, 0, 0, 66, -70, 0, 0, 66, -70, 0, 0, 66, -70, 0, 0, 0, 0, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 0, 0, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 0, 0, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 0, 0, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 0, 0, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 0, 0, 0, 0, 66, -76, 0, 0, 66, -76, 0, 0, 66, -76, 0, 0, 0, 0, 0, 0, 66, 112, 0, 0, 66, 124, 0, 0, 66, 100, 0, 0, 0, 0, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 0, 0, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 0, 0, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 0, 0, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 0, 0, 0, 0, 66, -76, 0, 0, 66, -76, 0, 0, 66, -76, 0, 0, 0, 0, 0, 0, 66, 112, 0, 0, 66, 124, 0, 0, 66, 100, 0, 0, 0, 0, 0, 0, 66, -114, 0, 0, 66, -114, 0, 0, 66, -114, 0, 0, 0, 0, 0, 0, 66, -114, 0, 0, 66, -114, 0, 0, 66, -114, 0, 0, 0, 0, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 0, 0, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, -64, 0, 0, 66, -64, 0, 0, 66, -64, 0, 0, 0, 0, 0, 0, 66, 112, 0, 0, 66, 124, 0, 0, 66, 100, 0, 0, 0, 0, 0, 0, 66, -114, 0, 0, 66, -114, 0, 0, 66, -114, 0, 0, 0, 0, 0, 0, 66, -114, 0, 0, 66, -114, 0, 0, 66, -114, 0, 0, 0, 0, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 0, 0, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, -64, 0, 0, 66, -64, 0, 0, 66, -64, 0, 0, 0, 0, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 0, 0, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 0, 0, 0, 0, 66, -96, 0, 0, 66, -96, 0, 0, 66, -96, 0, 0, 0, 0, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, -64, 0, 0, 66, -64, 0, 0, 66, -64, 0, 0, 0, 0, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 0, 0, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 0, 0, 0, 0, 66, -96, 0, 0, 66, -96, 0, 0, 66, -96, 0, 0, 0, 0, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, -91, 0, 0, 66, -80, 0, 0, 66, -102, 0, 0, 0, 0, 0, 0, 66, -91, 0, 0, 66, -80, 0, 0, 66, -102, 0, 0, 0, 0, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 0, 0, 0, 0, 66, -113, 0, 0, 66, -78, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, 104, 0, 0, 66, 104, 0, 0, 66, 104, 0, 0, 0, 0, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, -91, 0, 0, 66, -80, 0, 0, 66, -102, 0, 0, 0, 0, 0, 0, 66, -91, 0, 0, 66, -80, 0, 0, 66, -102, 0, 0, 0, 0, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 0, 0, 0, 0, 66, -113, 0, 0, 66, -78, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, 104, 0, 0, 66, 104, 0, 0, 66, 104, 0, 0, 0, 0, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -112, 0, 0, 66, -112, 0, 0, 66, -112, 0, 0, 0, 0, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 0, 0, 0, 0, 66, 72, 0, 0, 66, 72, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 0, 0, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 0, 0, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, -112, 0, 0, 66, -112, 0, 0, 66, -112, 0, 0, 0, 0, 0, 0, 66, -64, 0, 0, 66, -64, 0, 0, 66, -64, 0, 0, 0, 0, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 0, 0, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 0, 0, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 0, 0, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -84, 0, 0, 66, -84, 0, 0, 66, -84, 0, 0, 0, 0, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 0, 0, 0, 0, 66, -90, 0, 0, 66, -70, 0, 0, 66, -110, 0, 0, 0, 0, 0, 0, 66, -82, 0, 0, 66, -82, 0, 0, 66, -82, 0, 0, 0, 0, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 0, 0, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -84, 0, 0, 66, -84, 0, 0, 66, -84, 0, 0, 0, 0, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 0, 0, 0, 0, 66, -90, 0, 0, 66, -70, 0, 0, 66, -110, 0, 0, 0, 0, 0, 0, 66, -82, 0, 0, 66, -82, 0, 0, 66, -82, 0, 0, 0, 0, 0, 0, 66, 100, 0, 0, 66, 100, 0, 0, 66, 100, 0, 0, 0, 0, 0, 0, 66, 100, 0, 0, 66, 100, 0, 0, 66, 100, 0, 0, 0, 0, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 0, 0, 0, 0, 66, -100, 0, 0, 66, -88, 0, 0, 66, -112, 0, 0, 0, 0, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 0, 0, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, 100, 0, 0, 66, 100, 0, 0, 66, 100, 0, 0, 0, 0, 0, 0, 66, 100, 0, 0, 66, 100, 0, 0, 66, 100, 0, 0, 0, 0, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 0, 0, 0, 0, 66, -100, 0, 0, 66, -88, 0, 0, 66, -112, 0, 0, 0, 0, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 0, 0, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, -70, 0, 0, 66, -70, 0, 0, 66, -70, 0, 0, 0, 0, 0, 0, 66, -70, 0, 0, 66, -70, 0, 0, 66, -70, 0, 0, 0, 0, 0, 0, 66, -103, 0, 0, 66, -96, 0, 0, 66, -110, 0, 0, 0, 0, 0, 0, 66, -106, 0, 0, 66, -106, 0, 0, 66, -106, 0, 0, 0, 0, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 0, 0, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, -70, 0, 0, 66, -70, 0, 0, 66, -70, 0, 0, 0, 0, 0, 0, 66, -70, 0, 0, 66, -70, 0, 0, 66, -70, 0, 0, 0, 0, 0, 0, 66, -103, 0, 0, 66, -96, 0, 0, 66, -110, 0, 0, 0, 0, 0, 0, 66, -106, 0, 0, 66, -106, 0, 0, 66, -106, 0, 0, 0, 0, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 0, 0, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 0, 0, 0, 0, 66, -80, 0, 0, 66, -80, 0, 0, 66, -80, 0, 0, 0, 0, 0, 0, 66, -60, 0, 0, 66, -60, 0, 0, 66, -60, 0, 0, 0, 0, 0, 0, 66, -76, 0, 0, 66, -60, 0, 0, 66, -92, 0, 0, 0, 0, 0, 0, 66, -106, 0, 0, 66, -106, 0, 0, 66, -106, 0, 0, 0, 0, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 0, 0, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 0, 0, 0, 0, 66, -80, 0, 0, 66, -80, 0, 0, 66, -80, 0, 0, 0, 0, 0, 0, 66, -60, 0, 0, 66, -60, 0, 0, 66, -60, 0, 0, 0, 0, 0, 0, 66, -76, 0, 0, 66, -60, 0, 0, 66, -92, 0, 0, 0, 0, 0, 0, 66, -97, 0, 0, 66, -88, 0, 0, 66, -106, 0, 0, 0, 0, 0, 0, 66, -97, 0, 0, 66, -88, 0, 0, 66, -106, 0, 0, 0, 0, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -80, 0, 0, 66, -80, 0, 0, 66, -80, 0, 0, 0, 0, 0, 0, 66, -60, 0, 0, 66, -60, 0, 0, 66, -60, 0, 0, 0, 0, 0, 0, 66, -76, 0, 0, 66, -60, 0, 0, 66, -92, 0, 0, 0, 0, 0, 0, 66, -97, 0, 0, 66, -88, 0, 0, 66, -106, 0, 0, 0, 0, 0, 0, 66, -97, 0, 0, 66, -88, 0, 0, 66, -106, 0, 0, 0, 0, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 0, 0, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 0, 0, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -80, 0, 0, 66, -80, 0, 0, 66, -80, 0, 0, 0, 0, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 0, 0, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 0, 0, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 0, 0, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -80, 0, 0, 66, -80, 0, 0, 66, -80, 0, 0, 0, 0, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 0, 0, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 0, 0, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 0, 0, 0, 0, 66, -112, 0, 0, 66, -108, 0, 0, 66, -116, 0, 0, 0, 0, 0, 0, 66, 100, 0, 0, 66, 100, 0, 0, 66, 100, 0, 0, 0, 0, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 0, 0, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 0, 0, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 0, 0, 0, 0, 66, -112, 0, 0, 66, -108, 0, 0, 66, -116, 0, 0, 0, 0, 0, 0, 66, 100, 0, 0, 66, 100, 0, 0, 66, 100, 0, 0, 0, 0, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, -110, 0, 0, 66, -100, 0, 0, 66, -120, 0, 0, 0, 0, 0, 0, 66, -110, 0, 0, 66, -100, 0, 0, 66, -120, 0, 0, 0, 0, 0, 0, 66, 72, 0, 0, 66, 72, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -112, 0, 0, 66, -108, 0, 0, 66, -116, 0, 0, 0, 0, 0, 0, 66, 100, 0, 0, 66, 100, 0, 0, 66, 100, 0, 0, 0, 0, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, -110, 0, 0, 66, -100, 0, 0, 66, -120, 0, 0, 0, 0, 0, 0, 66, -110, 0, 0, 66, -100, 0, 0, 66, -120, 0, 0, 0, 0, 0, 0, 66, 72, 0, 0, 66, 72, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, 72, 0, 0, 66, 72, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 0, 0, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 0, 0, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 0, 0, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 0, 0, 0, 0, 66, -74, 0, 0, 66, -62, 0, 0, 66, -86, 0, 0, 0, 0, 0, 0, 66, 72, 0, 0, 66, 72, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 0, 0, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 0, 0, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 0, 0, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 0, 0, 0, 0, 66, -74, 0, 0, 66, -62, 0, 0, 66, -86, 0, 0, 0, 0, 0, 0, 66, -80, 0, 0, 66, -80, 0, 0, 66, -80, 0, 0, 0, 0, 0, 0, 66, -80, 0, 0, 66, -80, 0, 0, 66, -80, 0, 0, 0, 0, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 0, 0, 0, 0, 66, -82, 0, 0, 66, -82, 0, 0, 66, -82, 0, 0, 0, 0, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 0, 0, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 0, 0, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 0, 0, 0, 0, 66, -80, 0, 0, 66, -80, 0, 0, 66, -80, 0, 0, 0, 0, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 0, 0, 0, 0, 66, -82, 0, 0, 66, -82, 0, 0, 66, -82, 0, 0, 0, 0, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 0, 0, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 0, 0, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 0, 0, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -74, 0, 0, 66, -74, 0, 0, 66, -74, 0, 0, 0, 0, 0, 0, 66, -105, 0, 0, 66, -80, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 0, 0, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 0, 0, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -74, 0, 0, 66, -74, 0, 0, 66, -74, 0, 0, 0, 0, 0, 0, 66, -105, 0, 0, 66, -80, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, -109, 0, 0, 66, -86, 0, 0, 66, 120, 0, 0, 0, 0, 0, 0, 66, -109, 0, 0, 66, -86, 0, 0, 66, 120, 0, 0, 0, 0, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 0, 0, 0, 0, 66, -74, 0, 0, 66, -74, 0, 0, 66, -74, 0, 0, 0, 0, 0, 0, 66, -105, 0, 0, 66, -80, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, -109, 0, 0, 66, -86, 0, 0, 66, 120, 0, 0, 0, 0, 0, 0, 66, -109, 0, 0, 66, -86, 0, 0, 66, 120, 0, 0, 0, 0, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 0, 0, 0, 0, 66, -123, 0, 0, 66, -112, 0, 0, 66, 116, 0, 0, 0, 0, 0, 0, 66, -123, 0, 0, 66, -112, 0, 0, 66, 116, 0, 0, 0, 0, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -122, 0, 0, 66, -122, 0, 0, 66, -122, 0, 0, 0, 0, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 0, 0, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 0, 0, 0, 0, 66, 104, 0, 0, 66, 104, 0, 0, 66, 104, 0, 0, 0, 0, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 0, 0, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 0, 0, 0, 0, 66, -104, 0, 0, 66, -104, 0, 0, 66, -104, 0, 0, 0, 0, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 0, 0, 0, 0, 66, 104, 0, 0, 66, 104, 0, 0, 66, 104, 0, 0, 0, 0, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 0, 0, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 0, 0, 0, 0, 66, -104, 0, 0, 66, -104, 0, 0, 66, -104, 0, 0, 0, 0, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 0, 0, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 0, 0, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 0, 0, 0, 0, 66, -76, 0, 0, 66, -76, 0, 0, 66, -76, 0, 0, 0, 0, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 0, 0, 0, 0, 66, -76, 0, 0, 66, -76, 0, 0, 66, -76, 0, 0, 0, 0, 0, 0, 66, -74, 0, 0, 66, -74, 0, 0, 66, -74, 0, 0, 0, 0, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 0, 0, 0, 0, 66, -64, 0, 0, 66, -64, 0, 0, 66, -64, 0, 0, 0, 0, 0, 0, 66, -120, 0, 0, 66, -120, 0, 0, 66, -120, 0, 0, 0, 0, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 0, 0, 0, 0, 66, -76, 0, 0, 66, -76, 0, 0, 66, -76, 0, 0, 0, 0, 0, 0, 66, -74, 0, 0, 66, -74, 0, 0, 66, -74, 0, 0, 0, 0, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 0, 0, 0, 0, 66, -64, 0, 0, 66, -64, 0, 0, 66, -64, 0, 0, 0, 0, 0, 0, 66, -120, 0, 0, 66, -120, 0, 0, 66, -120, 0, 0, 0, 0, 0, 0, 66, -97, 0, 0, 66, -90, 0, 0, 66, -104, 0, 0, 0, 0, 0, 0, 66, -97, 0, 0, 66, -90, 0, 0, 66, -104, 0, 0, 0, 0, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 0, 0, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 0, 0, 0, 0, 66, -64, 0, 0, 66, -64, 0, 0, 66, -64, 0, 0, 0, 0, 0, 0, 66, -120, 0, 0, 66, -120, 0, 0, 66, -120, 0, 0, 0, 0, 0, 0, 66, -97, 0, 0, 66, -90, 0, 0, 66, -104, 0, 0, 0, 0, 0, 0, 66, -97, 0, 0, 66, -90, 0, 0, 66, -104, 0, 0, 0, 0, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 0, 0, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 0, 0, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -62, 0, 0, 66, -62, 0, 0, 66, -62, 0, 0, 0, 0, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 0, 0, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0 ], "compressed": true, "refCount": [ 1, 14, 1257, 890731498, 374221668, 253604528, 650321227, 793411785, 959695834, 259937023, 679318644, 560624350, 815504289, 437912711, 537835778, 656352711, 768154046, 447744646, 816151886, 237848008, 347168801, 349292853, 643946593, 890679179, 364428614, 687504757, 484396673, 674678697, 476681853, 1110239934, 235302022, 575603917, 566644786, 350555497, 454130325, 492737986, 446444997, 478864503, 558547701, 1011233667, 463355641, 568763853, 364277821, 660081620, 808048492, 659541431, 906453230, 560775240, 339423827, 786043959, 455161553, 772974277, 788075462, 341332677, 702531530, 356746157, 454052692, 793952200, 538535356, 334118729, 454585985, 454064120, 342254895, 680513489, 686521829, 678482664, 432537945, 778498523, 483737874, 666644502, 664463976, 364815644, 885388692, 438493209, 352097009, 476601308, 862366586, 688037103, 372255050, 258559718, 891383955, 553680254, 484635160, 448710446, 348409645, 761313087, 364852355, 598146072, 657273937, 334802373, 578296323, 145926973, 465002236, 787083911, 673562882, 703183826, 764298562, 357319020, 795686981, 884469075, 778023464, 891458028, 273912611, 693964365, 891845519, 363120831, 326551167, 380495310, 1018352344, 454048928, 687441502, 348330462, 915001195, 657968130, 808534764, 371300136, 798293151, 853725099, 250991796, 454124785, 694085102, 656854093, 464425577, 437380865, 787161091, 665457119, 544981452, 673071948, 989228900, 664795999, 981826014, 988842809, 686001116, 470800728, 591365799, 439109097, 679934225, 130357591, 667728580, 762920903, 988255765, 776717853, 692413349, 242183545, 342224473, 251019601, 267538542, 658033846, 574103676, 462696983, 265889949, 546167198, 236321922, 462249978, 1011933754, 483203552, 566188034, 597644660, 846903695, 1064483747, 5 ], "directLocationMap": false, "locationList": [ 0, 9504, 1257, 38020, 114068, 456284, 798472, 874548, 950596, 1026644, 1102692, 1178740, 1254788, 1330836, 1673024, 1749100, 1825148, 1901196, 1977244, 2053292, 2129340, 2205388, 2281436, 2357484, 2433532, 2509580, 2585628, 2927844, 3003892, 3079940, 3155988, 3498204, 3574252, 3650300, 3726348, 3802396, 3878444, 3954492, 4030540, 4106588, 4182636, 4258684, 4600900, 4676948, 4752996, 4829044, 5171232, 5513476, 5589524, 5665572, 6007788, 6083836, 6159884, 6235932, 6311980, 6388028, 6730216, 6806292, 6882340, 6958388, 7034436, 7376624, 7452700, 7528748, 7870964, 8213152, 8555396, 8631444, 8707492, 8783540, 8859588, 8935636, 9011684, 9353872, 9429948, 9505996, 9582044, 9658092, 9734140, 9810188, 9886236, 10228424, 10304500, 10646688, 10722764, 10798812, 11141028, 11217076, 11293124, 11369172, 11445220, 11521268, 11597316, 11673364, 11749412, 11825460, 11901508, 11977556, 12319744, 12395820, 12471868, 12547916, 12623964, 12700012, 12776060, 12852108, 12928156, 13270344, 13346420, 13688636, 13764684, 13840732, 13916780, 13992828, 14068876, 14144924, 14220972, 14563188, 14639236, 14715284, 14791332, 15133548, 15209596, 15285644, 15361692, 15437740, 15513788, 15589836, 15932052, 16274268, 16882624, 16958700, 17300916, 17376964, 17453012, 17529060, 17605108, 17681156, 17757204, 17833252, 17909300, 17985348, 18061396, 18137444, 18213492, 18555708, 19164064, 19240140, 19316188, 19392236, 19734452, 19810500, 19886548, 19962596, 20038644, 20114692, 20190740, 20266788, 20875144, 20951220, 21027268, 21103316, 21179364, 21255412, 21331460, 21673648, 21749724, 21825772, 21901820, 21977868, 22053916, 22129964, 22206012, 22282060, 22358108, 22700296, 22776372, 22852420, 22928468, 23004516, 23612872, 23688948, 23764996, 23841044, 23917092, 24259280, 24335356, 24677544, 24753620, 25095808, 25171884, 25247932, 25323980, 25666196, 25742244, 26084460, 26160508, 26502696, 26578772, 26654820, 26730868, 27073084, 27149132, 27225180, 27567368, 27643444, 27985660, 28061708, 28137756, 28213804, 28289852, 28632068, 28974284, 29316500, 29658716, 30000932, 30076980, 30153028, 30495216, 30571292, 30913480, 30989556, 31065604, 31141652, 31217700, 31293748, 31369796, 31445844, 31521892, 31597940, 31673988, 31750036, 31826084, 32168300, 32510488, 32586564, 33194920, 33270996, 33347044, 33423092, 33499140, 33575188, 33651236, 33727284, 34069472, 34145548, 34221596, 34297644, 34373692, 34715908, 34791956, 35134144, 35210220, 35286268, 35362316, 35704532, 35780580, 35856628, 35932676, 36008724, 36084772, 36160820, 36236868, 36579056, 36655132, 36731180, 36807228, 36883276, 37225492, 37301540, 37377588, 37453636, 37529684, 37605732, 37947948, 38023996, 38366212, 38708428, 39050616, 39126692, 39202740, 39278788, 39354836, 39430884, 39506932, 39582980, 39925168, 40001244, 40077292, 40153340, 40229388, 40305436, 40381484, 40723672, 40799748, 40875796, 40951844, 41027892, 41370108, 41446156, 41788372, 42130560, 42206636, 42548852, 42624900, 42700948, 42776996, 42853044, 42929092, 43005140, 43081188, 43423404, 43765620, 43841668, 44183884, 44259932, 44335980, 44412028, 44754216, 44830292, 44906340, 45248528, 45324604, 45400652, 45476700, 45552748, 45628796, 45704844, 45780892, 46123108, 46465324, 46541372, 46617420, 46693468, 47035656, 47111732, 47187780, 47263828, 47606016, 47682092, 47758140, 47834188, 47910236, 47986284, 48062332, 48138380, 48214428, 48556616, 48632692, 48708740, 48784788, 48860836, 49203024, 49279100, 49621288, 49697364, 49773412, 49849460, 50191648, 50267724, 50343772, 50419820, 50495868, 50571916, 50647964, 50724012, 50800060, 50876108, 50952156, 51028204, 51104252, 51180300, 51522516, 51864704, 51940780, 52016828, 52092876, 52435064, 52511140, 52587188, 52663236, 52739284, 52815332, 52891380, 52967428, 53043476, 53385664, 53461740, 53537788, 53613836, 53689884, 53765932, 54108120, 54184196, 54526384, 54602460, 54678508, 55286864, 55362940, 55438988, 55781176, 55857252, 55933300, 56009348, 56085396, 56161444, 56503660, 56579708, 56655756, 56731804, 56807852, 56883900, 57226116, 57302164, 57378212, 57454260, 57530308, 57872524, 57948572, 58290788, 58366836, 58442884, 58518932, 58594980, 58937168, 59013244, 59089292, 59165340, 59241388, 59317436, 59393484, 59469532, 59545580, 59621628, 59963816, 60039892, 60115940, 60458128, 60534204, 60610252, 60952440, 61294656, 61370732, 61446780, 61522828, 61865044, 61941092, 62017140, 62359356, 62435404, 62511452, 62587500, 62663548, 63005764, 63081812, 63157860, 63233908, 63576096, 63652172, 63728220, 64070408, 64412624, 64488700, 64564748, 64640796, 64716844, 65059032, 65135108, 65211156, 65553344, 65629420, 65705468, 65781516, 65857564, 66199780, 66275828, 66618044, 67226400, 67302476, 67378524, 67720740, 67796788, 67872836, 67948884, 68024932, 68100980, 68177028, 68253076, 68329124, 68405172, 68747360, 69089576, 69165652, 69241700, 69317748, 69393796, 69735984, 69812060, 69888108, 69964156, 70040204, 70116252, 70458468, 70534516, 70610564, 70686612, 70762660, 70838708, 70914756, 70990804, 71066852, 71409068, 71485116, 71561164, 71637212, 71979428, 72321644, 72397692, 72473740, 72815956, 72892004, 72968052, 73576408, 73652484, 73994672, 74070748, 74146796, 74222844, 74298892, 74374940, 74450988, 74527036, 74603084, 74679132, 74755180, 74831228, 74907276, 74983324, 75059372, 75401588, 75477636, 75819852, 75895900, 75971948, 76047996, 76124044, 76200092, 76276140, 76352188, 76428236, 76504284, 76580332, 76656380, 76732428, 77074616, 77150692, 77226740, 77568928, 77911144, 78253360, 78329436, 78405484, 78481532, 78823748, 78899796, 78975844, 79051892, 79127940, 79203988, 79280036, 79356084, 79432132, 79508180, 79850396, 80192584, 80800968, 81143184, 81219260, 81295308, 81371356, 81447404, 81523452, 81865640, 81941716, 82283904, 82359980, 82702196, 82778244, 83120460, 83196508, 83272556, 83348604, 83424652, 83500700, 83576748, 83652796, 83728844, 84071060, 84147108, 84489296, 84565372, 84907588, 84983636, 85325852, 85668068, 85744116, 86086332, 86162380, 86504596, 86846812, 86922860, 86998908, 87341096, 87417172, 87493220, 87835408, 87911484, 88253700, 88595888, 88671964, 88748012, 88824060, 88900108, 89242296, 89318372, 89394420, 89470468, 89546516, 89888732, 90230920, 90306996, 9504 ], "reverseAvailable": false, "internalShinglingEnabled": false, "lastTimeStamp": 1257, "rotationEnabled": false, "dynamicResizingEnabled": true, "currentStoreCapacity": 512, "indexCapacity": 2048 }, "compactSamplerStates": [ { "version": "2.0", "weight": [ -1.5861195, -1.605452, -1.5982624, -1.6388674, -1.6310605, -1.6108241, -1.6641783, -1.6470399, -1.662391, -1.66458, -1.6381367, -1.6604348, -1.722461, -1.6904022, -1.6829594, -1.6586255, -1.8328778, -1.6663431, -1.8191967, -1.7615604, -1.7148815, -1.7484502, -1.6753336, -1.7183716, -1.688128, -1.7450564, -2.1241255, -1.755236, -1.716314, -1.6855574, -1.8352082, -1.6686058, -1.7088614, -1.975995, -2.1331093, -1.7441834, -1.7506566, -2.0483587, -2.2547653, -1.8327026, -1.8121274, -1.7302328, -1.7633137, -1.8724989, -1.7519345, -1.7819105, -1.9474361, -1.8973167, -1.8720074, -1.8968571, -1.8915143, -1.8632329, -2.01883, -2.1812334, -2.350511, -1.8697002, -1.8398154, -1.7831405, -1.7950289, -1.932773, -1.715132, -2.1989625, -1.9009744, -1.7144396, -2.7446961, -1.7951992, -2.4029047, -1.9952371, -2.3514855, -2.1877155, -2.3432517, -1.9697201, -2.670341, -2.2128923, -1.972904, -2.251253, -2.5463715, -2.7085016, -2.3085272, -1.9825817, -2.072967, -1.8706789, -1.8189924, -2.3386497, -2.0664465, -3.33256, -2.0368118, -2.2420359, -2.6768208, -1.9206775, -2.5956569, -3.1106741, -1.9571904, -1.9927236, -2.3674033, -1.93867, -2.7404048, -2.3078642, -2.6232505, -2.0971937, -2.4987488, -2.0778205, -2.7914362, -2.1456559, -2.5070734, -2.059889, -2.2235098, -2.9149077, -2.3681848, -2.396997, -2.5068617, -2.5728097, -1.8709942, -2.1455302, -1.9927701, -2.7714732, -2.5182734, -2.1565442, -1.8815223, -2.0475667, -2.3105578, -2.0638764, -2.2973845, -2.3146381, -2.6567106, -2.4039922, -2.6203403, -3.4856248, -5.081313, -3.220412, -4.812422, -1.9047714, -3.6176436, -2.6161025, -3.0316484, -3.013686, -3.5585165, -2.4007401, -2.6348982, -2.766112, -2.9318974, -5.7781105, -3.107272, -2.4127505, -3.3237684, -3.803411, -4.290522, -2.4230351, -3.0978012, -2.1676643, -1.9878286, -2.5379953, -2.336568, -2.6192954, -6.017296, -2.8725154, -6.3045855, -3.6723707, -2.8172421, -2.1898556, -2.3871565, -2.51744, -2.7863479, -2.5990326, -2.4863505, -2.1796257, -1.8518976, -3.370079, -6.063179, -3.258116, -5.121849, -6.345082, -3.6713245, -2.6670954, -3.3832657, -4.917982, -2.97081, -3.0248885, -2.7550912, -2.8822653, -3.8920598, -2.8241985, -4.593358, -4.472623, -3.2764409, -2.8249595, -2.1388478, -2.8180516, -3.9035788, -4.516092, -2.3858354, -3.4240582, -1.9947791, -5.736862, -3.374941, -3.9094043, -5.1914043, -4.203039, -2.6490705, -2.395437, -2.304084, -2.9620337, -3.2512295, -3.9594069, -2.2474992, -2.946548, -4.6885777, -2.8522136, -2.4729125, -2.7774913, -3.1150968, -3.0363977, -4.197292, -2.7846549, -2.6680098, -4.2414436, -3.8353665, -4.186747, -5.6943493, -3.8587017, -3.2020812, -2.5837743, -3.115129, -5.767825, -3.1498506, -4.139573, -2.4234726, -2.7053547, -4.19672, -3.4625618, -2.1197746, -3.3355079, -3.1506562, -2.8635252, -3.1254945, -2.259082, -3.146692, -1.9144876, -4.487445, -4.18177, -2.8036504, -3.9046266, -3.1428185, -3.6163304, -3.2034893, -2.6041164, -2.3078747, -3.577054, -2.5983744, -3.4380496, -3.7947206, -2.8015137, -2.9079344, -5.612013, -3.2981741, -3.4895682 ], "pointIndex": [ 6, 1256, 256, 1580125493, 1009964779, 456934816, 1616333668, 1152569338, 108808059, 1358432074, 502384566, 1024448265, 1708452424, 1129878003, 1087712861, 1944483281, 1546063584, 68288588, 1273962710, 1220350266, 306704637, 1103944160, 1939752041, 1617814426, 1196814165, 313202232, 821422964, 1232975405, 511497819, 1879840308, 1710721726, 57714776, 426392352, 144334141, 919039593, 1301558173, 233030408, 984855939, 1016643541, 710104877, 1534287009, 1312146233, 1033950820, 1773005522, 1528561472, 976559285, 839263811, 515207941, 88259328, 999862042, 278485947, 337423713, 1396659120, 403778703, 1123720273, 1280314890, 1229704194, 1575998767, 1600038320, 453521515, 866331345, 412877840, 60755345, 14196166, 1493975856, 713593, 487101666, 500744337, 548561977, 552017438, 1948597105, 1060517442, 782972501, 653096203, 31812331, 1929607279, 1627551512, 1074301150, 19053580, 1291784360, 333312049, 1903734870, 966448202, 1883562658, 1350440220, 1448644102, 1489459036, 1700831799, 1250 ], "storeSequenceIndicesEnabled": false, "size": 256, "capacity": 256, "initialAcceptFraction": 0.125, "timeDecay": 1.0e-4, "sequenceIndexOfMostRecentTimeDecayUpdate": 0, "maxSequenceIndex": 1256, "compressed": true, "randomSeed": 3760827122461395656 }, { "version": "2.0", "weight": [ -1.6600187, -1.6628351, -1.6632024, -1.6885065, -1.6844633, -1.673482, -1.6683668, -1.703622, -1.6935254, -1.7039138, -1.7054497, -1.6792103, -1.72292, -1.7178843, -1.7129887, -1.7370491, -1.9077396, -1.7476121, -1.8414545, -1.9110444, -1.801772, -1.7981725, -1.7427167, -1.7117282, -1.8734525, -1.758567, -1.7399035, -1.7192584, -1.7428987, -1.766276, -1.8003932, -1.8911016, -1.8654419, -1.9670025, -1.9240105, -1.7802987, -1.8447324, -1.967483, -1.8591907, -2.2108433, -1.9602256, -1.8811072, -1.8307586, -1.8283223, -1.8461, -1.8134967, -1.9581954, -1.8520461, -2.2066836, -1.8763704, -1.8831326, -1.8191657, -2.065619, -1.7961874, -1.8889962, -1.7972072, -1.7482319, -1.8282884, -1.9215875, -1.7745942, -1.934545, -1.9956965, -1.9398265, -2.018418, -1.9581808, -1.8738496, -2.2210963, -2.4836748, -2.6438246, -2.8173716, -2.0052333, -1.8060782, -1.8316134, -2.104083, -2.064001, -2.0468729, -2.700277, -2.055099, -2.107124, -2.8776038, -4.302666, -2.7787154, -2.3238614, -2.3610747, -2.1134987, -1.8448327, -2.189839, -1.8508947, -2.1103697, -2.0987751, -1.9045995, -2.364662, -1.9768771, -2.3049514, -2.373978, -2.013711, -2.3665648, -3.1223068, -2.4642084, -2.2965417, -2.0021834, -2.0005822, -2.0901864, -2.5504415, -1.8880817, -2.134783, -2.2326784, -1.942063, -2.0569196, -1.966368, -1.9174302, -2.1160188, -2.2602866, -2.4733515, -2.23828, -1.9670134, -1.8519195, -2.0879674, -1.9622679, -2.7823813, -2.1206293, -2.3471045, -1.9580667, -3.0643625, -2.1881764, -2.4692035, -2.1028755, -2.6679616, -2.442942, -2.224716, -2.0679758, -2.283862, -1.9222883, -2.846171, -2.9377835, -2.5189304, -4.815355, -3.8114474, -3.1087315, -3.1940696, -2.9174712, -2.1778202, -2.2337835, -1.843772, -4.1040983, -2.920102, -4.2883368, -2.5598578, -2.9980335, -2.3457928, -3.4544246, -2.3266225, -2.9991736, -4.0963154, -2.8809404, -2.822911, -2.7196505, -3.5385666, -3.0671763, -4.2318783, -3.1986744, -5.5718246, -6.046677, -3.9159167, -3.5294237, -2.4407678, -3.2104867, -3.3342721, -3.589185, -4.893906, -2.4044142, -3.7951546, -2.498565, -3.4903483, -3.1365232, -1.9214913, -2.196149, -2.4012504, -3.4272356, -2.222576, -4.959666, -2.093998, -2.2162402, -2.6007705, -3.4578567, -2.2444172, -3.3098018, -3.1957138, -3.1875644, -2.9233613, -3.6141636, -4.2357774, -2.3627012, -3.0946198, -2.704567, -4.9396143, -3.7426734, -3.4212067, -3.576373, -4.9750557, -2.3576858, -2.2333653, -2.5606627, -3.0442796, -2.2103524, -4.6263657, -2.1121235, -3.3557963, -2.6780543, -2.0564954, -4.5643115, -4.3294086, -3.104085, -3.434541, -2.2409294, -2.0642347, -4.495369, -2.8710287, -3.2579474, -2.7349076, -5.1881814, -2.744094, -2.8721514, -5.458582, -2.5830178, -3.0423794, -2.320381, -3.1947503, -6.776149, -2.886313, -2.7594192, -4.1165075, -2.2551475, -2.4149053, -2.3541772, -2.18199, -2.1128635, -4.0967073, -2.4572492, -3.3653438, -5.049421, -2.8168807, -4.1294785, -3.91239, -2.467887, -3.4557223, -3.03364, -4.037852, -3.395431, -3.4063814, -3.2614224, -3.9141514, -3.2676873, -3.3500817 ], "pointIndex": [ 7, 1251, 254, 1525571388, 1252725678, 734617135, 667315246, 1657761947, 45159910, 1062461257, 366110, 641470608, 1064143194, 646559403, 1483898601, 859588358, 53598049, 855516880, 818783012, 519999467, 1645049211, 992924574, 220907159, 1841205239, 1342706414, 1224164520, 1198234193, 1736488113, 207560065, 345929946, 1488342345, 1395321750, 929518491, 853333241, 578273904, 1912236575, 828120018, 1770853159, 204242299, 1734994724, 751271264, 1516603618, 1916659496, 1225596508, 1873712255, 126275624, 1592779605, 1818674086, 1048352023, 273865496, 918513937, 1335984142, 1503695003, 1575075756, 131181001, 74515481, 1741445112, 638558354, 1206870861, 1359667607, 111902919, 400935972, 1669091394, 682883091, 1510216409, 937889914, 226937294, 628214313, 1082311274, 202884689, 509614016, 1324335895, 315225316, 574261824, 735561627, 1070805347, 1383128251, 1721308942, 729293802, 1235113953, 276931205, 1140715726, 12209130, 1532289813, 1218043062, 1428698071, 1424460215, 1549987 ], "storeSequenceIndicesEnabled": false, "size": 254, "capacity": 256, "initialAcceptFraction": 0.125, "timeDecay": 1.0e-4, "sequenceIndexOfMostRecentTimeDecayUpdate": 0, "maxSequenceIndex": 1256, "compressed": true, "randomSeed": -1114890292068028840 }, { "version": "2.0", "weight": [ -1.7043537, -1.7149372, -1.7166703, -1.7321012, -1.7449932, -1.7227896, -1.7189212, -1.7613436, -1.7871635, -1.7572314, -1.9100767, -1.8015554, -1.7829351, -1.745284, -1.7499497, -1.7995156, -1.8531065, -1.8204864, -1.8014812, -1.7835534, -1.7953764, -1.9277264, -2.0113738, -1.8776013, -1.8830832, -1.8430904, -1.9128852, -1.7552594, -1.7954891, -1.8587546, -1.8159387, -1.8180984, -2.0760508, -1.9116563, -1.8913791, -1.8495423, -2.3682237, -1.85536, -1.8663213, -1.8894315, -1.8001022, -1.9510405, -2.0332441, -2.300753, -1.9995476, -2.3203413, -2.022984, -2.4649758, -1.9842328, -1.9025321, -2.0115871, -1.9769313, -1.9613022, -2.3817139, -1.9380883, -1.9054426, -1.7931068, -1.8823017, -2.0860248, -1.9546908, -1.8849564, -1.8492993, -2.1535194, -1.8650378, -1.9573538, -2.232175, -2.7863712, -2.6460342, -2.3452928, -2.1120064, -2.1006784, -2.188658, -1.8926909, -2.4513972, -2.63265, -1.89713, -1.9279783, -2.0149734, -2.3423433, -1.9609698, -2.8362937, -2.5565622, -2.5604684, -2.0057104, -2.191599, -2.223279, -3.202308, -2.3193972, -2.7031338, -2.5877492, -2.016321, -2.7814374, -2.8090856, -2.025436, -2.1793358, -2.4806178, -4.986853, -2.0887856, -1.992191, -2.2180266, -2.1675045, -2.785531, -2.471143, -2.0163069, -2.1689491, -2.176144, -2.142885, -2.805913, -2.7247162, -1.9667814, -3.225324, -1.9381685, -2.148721, -1.8139349, -2.243579, -2.0078924, -1.9078774, -2.228902, -2.2091773, -2.0057032, -2.161559, -2.1420436, -2.3776362, -1.8866057, -1.9161162, -2.997531, -3.6017506, -1.8844341, -3.650594, -2.0622656, -2.4955025, -6.297177, -2.4560344, -2.827355, -3.3375702, -4.2595506, -3.6476152, -5.298893, -4.6368704, -2.5827596, -4.727267, -2.9171727, -3.3863933, -2.998544, -3.1508188, -2.3191326, -3.1005151, -2.5385091, -2.9375808, -5.3113475, -4.4594173, -2.7024257, -1.9682808, -3.3948848, -5.8313107, -2.652302, -3.31744, -2.7928, -2.4913106, -2.1816418, -3.0713098, -2.9353008, -3.9156651, -3.589956, -3.0757117, -3.907892, -4.369662, -3.1807384, -5.566969, -2.5556684, -3.356561, -4.061002, -2.6578262, -3.358592, -4.061826, -3.035102, -2.3694582, -6.079366, -4.249974, -2.6013722, -2.5957072, -2.3388069, -2.0346706, -3.5047348, -4.197596, -4.9675274, -3.9339316, -4.9094734, -2.1441245, -3.6834774, -2.2312505, -3.477304, -5.026757, -7.4546056, -5.137707, -2.6693206, -2.614613, -3.6004379, -4.7180634, -2.28078, -2.42328, -2.7575917, -2.2931254, -3.3485951, -3.7159684, -3.7249277, -4.1952395, -2.490811, -2.0773237, -2.708938, -2.8349159, -2.1985443, -2.5952754, -3.3955815, -2.7381892, -2.8703403, -3.5668871, -2.8732376, -3.704257, -1.9876751, -5.8961663, -3.6108832, -5.704544, -2.116727, -2.1399906, -3.2782805, -3.2339072, -4.4758325, -2.4205503, -3.610604, -3.8915148, -4.0522075, -2.0418868, -7.400977, -4.301539, -2.3623009, -3.504025, -2.3166306, -3.0060487, -3.201693, -2.291483, -3.7904406, -3.120234, -2.4891293, -2.1493428, -2.5106375, -3.7456133, -2.1408231, -3.118479, -2.2031925, -2.4266295, -3.3329139, -4.2434278, -4.0106225, -6.332322, -2.2949204 ], "pointIndex": [ 1, 1256, 256, 1800496310, 189774369, 1190351877, 196117206, 1209024955, 119934254, 1060414962, 477995845, 1078535456, 1080003549, 269955583, 484283630, 137292677, 1183501254, 440274210, 1267133467, 1592147376, 817636891, 1473156248, 1463437761, 1788508518, 1194396926, 1773629862, 1137494071, 989375137, 1445520569, 726923453, 985493177, 857505566, 1568025519, 459218697, 474222116, 510601635, 943791427, 1120837853, 613003481, 49457990, 1414445346, 927181008, 1087892123, 1239384044, 1588103553, 1031660723, 105739915, 1975683509, 280236125, 1693635831, 25808913, 313240311, 250470390, 337217296, 1350402607, 829898214, 84780018, 1321833974, 140438629, 1625445113, 1235862771, 31884402, 731165007, 1124183235, 306538204, 708956841, 1789299587, 1665028448, 1790693330, 1617910472, 543099424, 1793169650, 584141920, 1896596068, 1551822291, 616405006, 700958677, 1210142631, 122109340, 1978669206, 507042740, 1070449643, 1067804100, 1832375323, 1185628390, 1315264144, 1390927903, 1837634414, 1255 ], "storeSequenceIndicesEnabled": false, "size": 256, "capacity": 256, "initialAcceptFraction": 0.125, "timeDecay": 1.0e-4, "sequenceIndexOfMostRecentTimeDecayUpdate": 0, "maxSequenceIndex": 1256, "compressed": true, "randomSeed": -8998098257901219462 }, { "version": "2.0", "weight": [ -1.4847924, -1.50701, -1.4874974, -1.509434, -1.5804005, -1.517309, -1.4889102, -1.5924674, -1.5380169, -1.5827285, -1.5945977, -1.6033465, -1.522429, -1.5085082, -1.5259198, -1.6608759, -1.7157124, -1.6005316, -1.7098669, -1.6417782, -1.7827258, -1.6653897, -1.761043, -1.6149433, -1.8048114, -1.6053822, -1.5297601, -1.5150692, -1.5335847, -1.5741924, -1.5903218, -1.6950215, -1.6855102, -1.7289294, -1.7847432, -1.7010726, -1.7668756, -1.9151553, -1.9073898, -1.7360523, -1.8851597, -1.8604245, -1.820512, -1.7844313, -1.6933676, -1.9365067, -1.8104782, -1.8791007, -1.6876923, -1.8407286, -1.87232, -1.613756, -1.66301, -1.5603495, -1.7004238, -1.6415001, -1.721441, -2.1622522, -1.5830246, -1.7812307, -1.5904065, -1.61179, -1.7648445, -2.074227, -2.0032582, -1.6958426, -1.7092977, -2.421047, -1.9955932, -2.127096, -2.2460995, -2.0733979, -2.1900704, -2.218347, -1.9587811, -2.30464, -2.3489394, -2.2056513, -2.4812882, -2.078726, -2.0368192, -2.1401744, -1.9548048, -2.2267509, -2.3673909, -1.8815244, -2.0716653, -1.8121344, -1.9581162, -1.7133777, -1.8833144, -2.7113278, -2.1894011, -2.0413165, -2.2483463, -2.0375435, -2.023743, -1.7335436, -1.8081505, -1.9442836, -1.9203551, -2.0609462, -1.9958264, -1.8094562, -1.7540293, -1.7631687, -1.9121307, -1.7658973, -1.6152104, -2.3850179, -1.7996753, -1.9506682, -2.1833467, -1.836597, -2.4442554, -2.2432363, -2.3038113, -1.69391, -2.0176008, -1.9852964, -2.22754, -1.5936773, -2.037487, -2.4741428, -1.724286, -2.2496772, -2.1840785, -2.8905258, -2.5314753, -3.2166378, -3.863982, -1.7463908, -2.2845786, -2.1900523, -1.9322034, -2.7665477, -5.5880685, -5.0508027, -2.4426787, -2.914124, -3.4584386, -2.4449632, -2.3848393, -2.6335444, -4.1916275, -2.6579905, -2.668138, -4.2272997, -3.0954368, -4.5089917, -2.0358038, -7.6616907, -3.7811038, -2.4330842, -2.4255292, -3.343035, -4.25475, -2.5636013, -3.1577828, -5.828969, -2.755335, -2.1080794, -2.4202938, -3.3008184, -3.6514235, -2.5095358, -3.8863716, -2.957376, -3.5885198, -2.5151875, -2.5355968, -2.064986, -2.024324, -3.3344228, -2.124326, -2.6870174, -1.8441193, -3.208695, -2.3718288, -1.7876742, -5.6086903, -2.0368898, -2.1928809, -4.623443, -3.5671632, -2.7656476, -2.826614, -2.6780763, -2.2869632, -2.5077014, -2.7039807, -2.983468, -2.171145, -2.48659, -3.0943327, -1.8994596, -1.8423891, -2.0048766, -2.3960173, -2.6402557, -2.8885286, -2.8480966, -2.2679713, -4.381718, -2.0998023, -2.8364131, -3.0806136, -2.1412249, -1.8483372, -2.3394818, -3.4883568, -2.0058262, -2.246459, -3.0723298, -2.3015406, -2.499738, -2.8829854, -2.6171253, -2.0047848, -2.90026, -6.3821893, -1.9659716, -2.7831266, -2.6806984, -5.0689373, -2.3406537, -2.19754, -2.8538144, -2.9117985, -3.5243957, -2.9115815, -3.5294943, -3.2356849, -3.04845, -2.9486272, -3.6131105, -1.977847, -6.3758364, -2.1673677, -2.0754735, -2.849869, -3.628077, -2.2775931, -2.9878826, -1.9839334, -2.5885856, -2.2625816, -4.0681295, -3.3519099, -2.0539382, -3.1593044, -4.923024, -2.3891122, -4.795825, -4.269026 ], "pointIndex": [ 0, 1255, 255, 710517003, 550006573, 1460889948, 278313358, 1928382954, 1457868774, 375750180, 659759259, 1245010209, 1393816621, 1636103232, 4955704, 320083063, 7681779, 952566350, 47071417, 1922726604, 703184345, 1166656767, 1673490262, 1537542088, 267954450, 123703178, 1580307934, 1819137992, 192979481, 1164935904, 1382586570, 1219881396, 516977693, 1870190553, 1809325884, 584116891, 147195552, 669041452, 837313472, 731650393, 471068713, 1265016102, 1211335961, 1217334750, 1427413919, 1822094254, 769160, 265112274, 969608639, 627954958, 1097449659, 974211871, 1811479358, 1339015972, 1232402352, 30077149, 1551276114, 1814770485, 1115304358, 762235225, 591355174, 627715801, 406647944, 1666268896, 1320446352, 474012195, 4550334, 1336588673, 916815690, 1115793964, 980593224, 637951823, 1489716944, 414502382, 813421999, 1643886547, 1470838323, 1925194630, 1453541655, 975575488, 1013479497, 923605226, 390447053, 942631434, 1204611503, 1686576751, 1845234451, 1981264463 ], "storeSequenceIndicesEnabled": false, "size": 255, "capacity": 256, "initialAcceptFraction": 0.125, "timeDecay": 1.0e-4, "sequenceIndexOfMostRecentTimeDecayUpdate": 0, "maxSequenceIndex": 1256, "compressed": true, "randomSeed": 38561163469837675 }, { "version": "2.0", "weight": [ -1.4610527, -1.48245, -1.4639573, -1.5015463, -1.5454192, -1.4826655, -1.4737648, -1.6106573, -1.525192, -1.5471185, -1.6125231, -1.505095, -1.5421757, -1.5058594, -1.5234768, -1.6741594, -1.9094331, -1.7995727, -1.6336598, -1.8679664, -1.595384, -1.6628966, -1.6441401, -1.7069467, -1.6833416, -1.9401432, -1.588832, -1.5424707, -1.7687211, -1.5431672, -1.5274942, -1.8162181, -1.7659051, -1.9308692, -1.9288825, -1.9051023, -1.9985346, -1.6765146, -1.6832094, -1.8760269, -1.9810698, -1.6409447, -1.6005028, -1.9358605, -2.1724792, -1.6857752, -1.6740047, -1.8685497, -1.9233545, -1.8496706, -1.6932981, -2.1886141, -1.9640974, -1.6953177, -2.0331624, -1.9634979, -1.6556059, -1.8025886, -1.9032472, -1.5521348, -1.7520154, -1.5808368, -1.5562763, -2.6935897, -2.6085107, -2.0786266, -1.9147294, -1.9673487, -2.1261866, -2.8225563, -3.1242068, -2.2550943, -2.5607169, -2.4968712, -2.1055422, -2.3150427, -1.7537509, -1.737771, -2.0998735, -2.077217, -2.2581348, -2.054537, -2.0298986, -1.9485894, -1.792361, -1.7761369, -2.2579038, -2.0488272, -2.5935009, -2.393297, -2.56187, -3.085866, -1.7331612, -1.8431895, -1.9609962, -2.9646697, -2.5008316, -2.0777664, -1.9832842, -1.9663002, -2.3825483, -1.9030224, -1.8568329, -2.2311988, -2.5922384, -2.0080917, -2.460374, -2.4697714, -1.7773494, -2.2537482, -2.8810356, -2.011637, -2.4875133, -2.241009, -2.056611, -1.8162489, -1.9599434, -2.1026204, -1.9309919, -1.6801635, -2.6104155, -1.9660062, -1.8532897, -1.9000486, -2.7101104, -1.6306072, -1.6173607, -3.9097295, -3.8940182, -2.6971962, -3.3223963, -3.4434423, -3.4364245, -2.1258404, -2.3368773, -2.441312, -2.1282659, -3.1267962, -3.5049665, -3.6809883, -3.9945335, -3.6619272, -5.4106927, -2.2863889, -2.4651685, -2.6824324, -2.964626, -3.6960573, -3.0068357, -2.2048318, -4.7914104, -2.3593392, -2.8784318, -6.197217, -3.3857186, -3.8565915, -4.5197845, -2.6455338, -2.2545123, -2.4242928, -3.8621643, -2.764206, -2.6078105, -2.3123567, -2.1793225, -2.3973627, -3.571396, -2.1274083, -3.0041566, -1.8787048, -1.8227599, -4.072172, -2.113721, -3.4936752, -3.411475, -4.599114, -2.5682142, -2.9804878, -4.6184344, -5.995202, -2.5762093, -3.5060537, -4.381844, -3.2079947, -5.117505, -3.109518, -1.779692, -2.0144317, -3.0996954, -4.316557, -2.463515, -3.9305122, -3.3319016, -2.8997607, -3.4705358, -2.4835873, -5.850858, -1.9866576, -3.528817, -3.0366244, -3.3330505, -2.718776, -2.718735, -1.9553635, -3.5689576, -2.9435978, -4.1096764, -2.6101785, -4.1002913, -2.6639524, -2.9546604, -2.4940739, -2.1748304, -4.535578, -4.664909, -2.7323165, -4.75438, -3.2862427, -3.2614667, -2.484071, -3.7774487, -3.1729262, -7.547099, -2.623589, -2.038379, -3.7038631, -2.7044697, -3.5491626, -4.805202, -2.4135547, -2.1463873, -2.3763375, -2.5803976, -2.7008436, -5.6769996, -4.0309668, -3.6546214, -4.3860655, -3.794969, -3.0905387, -3.366902, -3.4968405, -5.5036583, -2.1061406, -2.2766025, -2.2931263, -2.0818744, -3.2892034, -1.9717209, -4.085529, -3.8437142, -3.004554, -1.7959849, -5.085871, -1.8072813 ], "pointIndex": [ 3, 1247, 255, 1199942421, 562999165, 1070673656, 1648005124, 1929122355, 1827691693, 1321528356, 1421296621, 1292041204, 1667219473, 600183277, 274451700, 305722385, 1287568165, 524209408, 1579828185, 1488493102, 1440127259, 1187010258, 1115156372, 1611712180, 1609013166, 435872960, 963643107, 1092400314, 260870723, 941609578, 330439147, 1452373916, 369867335, 1413235891, 453582315, 1807834238, 1883437356, 560520063, 1380675025, 731172719, 822295120, 1176500626, 1030630770, 884990575, 1562333977, 704088563, 35590968, 1814568983, 825249153, 1832027883, 323386335, 842455318, 1335947106, 1529407566, 300958270, 979530004, 319923248, 1589275081, 758569902, 351543768, 144906887, 375687507, 1671274399, 1111674965, 471064683, 451480909, 1673206955, 1014142190, 1607091130, 1352018168, 516567802, 746070329, 1688411892, 1085929213, 630386208, 719834486, 202105144, 751110218, 793271136, 1220769635, 814291763, 213857926, 1774853900, 1546837229, 1143631568, 1537069672, 1597334650, 1918918486 ], "storeSequenceIndicesEnabled": false, "size": 255, "capacity": 256, "initialAcceptFraction": 0.125, "timeDecay": 1.0e-4, "sequenceIndexOfMostRecentTimeDecayUpdate": 0, "maxSequenceIndex": 1256, "compressed": true, "randomSeed": -6370827395103410126 }, { "version": "2.0", "weight": [ -1.5445218, -1.5465407, -1.5504966, -1.547764, -1.560619, -1.5533254, -1.5759339, -1.5785238, -1.6054047, -1.5841495, -1.576058, -1.5569911, -1.5982715, -1.612058, -1.5798635, -1.5861368, -1.6388417, -1.6204617, -1.6824679, -1.6229888, -1.6407508, -1.6453023, -1.5819863, -1.566079, -1.5928731, -1.6855135, -1.783996, -1.7316606, -1.6485487, -1.7861702, -1.6092962, -1.6261423, -2.1053495, -1.6423863, -1.7105014, -1.7465937, -1.6570605, -1.8360097, -1.9010681, -1.6361474, -1.77335, -1.6803484, -2.0501294, -1.7019562, -1.7934632, -2.0073125, -1.768919, -1.6914185, -1.7652011, -1.66249, -1.6217879, -1.8140017, -1.7681481, -1.9364661, -1.8415885, -1.7473153, -1.9307748, -1.6952391, -1.7963362, -2.0055091, -1.8705586, -1.8039247, -1.6238333, -1.8887676, -2.1948328, -2.1852083, -2.309651, -1.8040459, -1.8527874, -1.8589574, -1.801687, -2.8378289, -3.095742, -2.419655, -1.6732262, -1.8548335, -2.3534513, -2.5250976, -2.485404, -1.7551335, -2.627682, -1.804988, -1.9720448, -1.7464341, -2.1275232, -2.0847194, -2.2849941, -1.864146, -1.8242195, -1.986032, -2.1918647, -2.9306834, -3.3716435, -1.7709521, -2.3122852, -2.3475082, -2.1665761, -2.0726194, -2.2897077, -1.8331085, -1.9517444, -1.7562053, -1.8337712, -1.8928871, -2.0578384, -1.8316461, -1.8601738, -2.2226956, -2.4449635, -2.0460827, -1.9298851, -1.9729121, -1.8871083, -1.9636409, -2.0409806, -1.7165915, -2.568095, -2.0460265, -2.384036, -3.0289366, -2.0829391, -3.1761105, -2.3723962, -2.9863064, -1.8120085, -1.9704975, -1.7034762, -1.9443214, -3.274785, -3.090201, -2.448313, -3.8890853, -2.2987845, -2.445577, -3.3676233, -2.4992247, -1.8911582, -7.054657, -3.7401574, -2.9138978, -2.9643297, -3.8779972, -1.8223864, -3.0082738, -2.850572, -3.2850523, -4.746652, -4.583561, -2.705282, -3.0956216, -3.2120516, -4.7790074, -2.0452852, -2.407949, -3.5124986, -3.506919, -2.8316567, -2.4972572, -4.2897453, -3.2318325, -2.0848386, -2.7511337, -2.825714, -2.2840638, -2.1273985, -4.573858, -3.5196013, -2.3099709, -1.9768105, -2.6367333, -3.5040345, -2.2665486, -2.7077358, -2.5872097, -3.828445, -3.6953075, -4.895928, -2.4355423, -2.0899951, -2.0495608, -2.7160594, -3.9311116, -3.3196929, -4.747052, -3.7480927, -4.6403666, -3.5007823, -1.8442141, -2.6454961, -4.8937225, -5.3806396, -4.3192015, -2.6148129, -2.677922, -2.215932, -3.3537917, -2.6788485, -2.9680216, -4.078896, -1.8529885, -2.0642333, -2.340028, -1.9987302, -3.3039026, -2.392308, -2.1998007, -3.9700627, -2.3132365, -1.9336995, -3.8793678, -3.0573602, -3.6135347, -4.379453, -1.9174479, -3.2993047, -3.3862681, -2.5543268, -2.916683, -6.335731, -2.5580328, -2.3565786, -2.3169065, -2.1767182, -2.2160468, -2.853828, -4.616713, -3.1134565, -3.1778045, -2.9624515, -2.313375, -2.166796, -1.996399, -3.6453948, -4.732854, -3.3619401, -2.051775, -2.1180842, -2.8457713, -2.5686061, -3.9750416, -3.261386, -3.2534878, -2.3567991, -3.843067, -3.2058804, -3.351548, -4.033013, -3.2406118, -4.746862, -1.873855, -2.789624, -2.095337, -2.0180707, -5.4625974, -3.1724863, -2.760957 ], "pointIndex": [ 2, 1238, 256, 858419605, 469297476, 1490599725, 1005017321, 1605967623, 1016732321, 374594265, 466246996, 838168704, 252609730, 1175134998, 25339492, 23200487, 1619181267, 805357786, 461366673, 633311396, 1065483570, 787080239, 1444081752, 1298668912, 244844311, 1410626199, 291709064, 1305596026, 763341988, 342862589, 629194162, 1611349848, 414202777, 934582831, 1219546, 168058702, 1328702083, 1554074388, 1766367113, 918632197, 1621630829, 886727885, 1063006415, 1128582551, 231273008, 1488830882, 681790444, 1700116165, 285796646, 1137975848, 405847511, 8924900, 1405645472, 1738960049, 679238652, 64002872, 666276996, 734704128, 371354107, 1484993525, 508819804, 1850027246, 792953121, 1580734430, 438885431, 95284342, 408412746, 1577909765, 861150228, 749262352, 961671547, 1291606525, 1279110026, 684142540, 187173978, 1579637657, 227902840, 1686808732, 1616456420, 872611235, 866293550, 1390806705, 1131570308, 1076710441, 1656938670, 1218981380, 1514339915, 1813021837, 1236 ], "storeSequenceIndicesEnabled": false, "size": 256, "capacity": 256, "initialAcceptFraction": 0.125, "timeDecay": 1.0e-4, "sequenceIndexOfMostRecentTimeDecayUpdate": 0, "maxSequenceIndex": 1256, "compressed": true, "randomSeed": 8772489341801893028 }, { "version": "2.0", "weight": [ -1.0728947, -1.5259328, -1.5271281, -1.5343946, -1.560383, -1.5384734, -1.5312777, -1.5520419, -1.6264254, -1.6279063, -1.5762386, -1.54961, -1.5745214, -1.670223, -1.5665997, -1.6381234, -1.7441238, -1.6393917, -1.6364237, -1.6332041, -1.6408373, -1.6322473, -1.7203869, -1.7163656, -1.7157981, -1.6053427, -1.6213709, -1.6732472, -1.8829713, -1.5831262, -1.5804985, -1.8121722, -1.9040909, -1.855875, -1.7723962, -1.756655, -1.7166331, -1.7561811, -1.7495925, -1.7460877, -1.8043892, -2.0242321, -1.6566799, -1.8006837, -1.7637908, -1.7983268, -1.8492807, -1.938855, -1.8046734, -1.9368708, -1.7219111, -1.647257, -1.8743986, -1.9102929, -1.6376833, -1.8193051, -1.7348002, -1.9335852, -1.8950299, -1.6522033, -1.8217105, -1.8316988, -1.583854, -1.8243084, -1.9072149, -2.0794513, -1.9411082, -2.0080197, -2.3706264, -3.8453596, -1.9341033, -1.7909273, -2.22557, -1.8950368, -1.8222072, -2.0923498, -1.9481359, -1.9054334, -1.8847692, -1.9231081, -1.8395206, -1.816015, -2.1411002, -2.6224537, -2.1703074, -1.8760118, -1.7247542, -2.1039886, -1.941013, -2.1875296, -2.6584635, -2.4773474, -2.0004907, -2.427941, -1.8578634, -1.993672, -1.9411371, -2.4460554, -2.4973977, -2.587589, -2.143168, -1.9661105, -1.8435761, -1.7624182, -1.8321925, -2.2877474, -1.8888198, -1.9872756, -2.3712525, -2.053333, -2.304413, -1.8495423, -1.8473682, -1.7911122, -2.255487, -1.9753639, -2.8610258, -2.6455243, -1.9160482, -2.0074358, -1.7680875, -2.0996945, -2.1236439, -3.1808512, -2.3633845, -2.0920115, -1.5991555, -2.0979178, -3.580935, -3.3564754, -2.1720605, -3.337978, -2.8830314, -2.6280017, -2.653904, -2.2192788, -2.0428448, -4.37789, -3.6127176, -3.9183333, -4.027198, -2.2029734, -2.4479206, -4.0643425, -2.4019227, -2.8332531, -3.725749, -2.8588874, -2.51254, -2.4987812, -3.2159305, -5.0033402, -3.5965152, -2.3439965, -5.258561, -2.116983, -2.1509147, -2.1029966, -2.2929664, -2.0077374, -2.858487, -2.585806, -5.1803718, -2.1305256, -2.8780572, -3.130301, -3.3613229, -3.407688, -2.8195002, -3.5945868, -2.1957138, -2.7049334, -3.6004672, -3.220083, -5.7187304, -2.3223257, -4.639869, -2.3436725, -2.6810954, -3.5382938, -2.8885171, -5.0835733, -3.452059, -2.9016135, -4.5785546, -2.4024642, -2.6227605, -5.620513, -2.71551, -1.8989049, -2.6357558, -2.3210332, -2.2360513, -2.0786529, -2.1857975, -4.588789, -2.746207, -2.5993383, -3.357406, -3.7500455, -4.308708, -6.10445, -2.2139173, -3.3152285, -3.428218, -2.914128, -2.5067766, -3.2157886, -1.8737192, -2.5115092, -1.9986128, -2.4794385, -4.047551, -2.1282003, -2.304178, -2.4129395, -3.613385, -3.106013, -2.9582293, -4.256424, -2.186439, -2.4176476, -2.6717122, -2.3630428, -2.2466805, -2.6661818, -1.8820276, -2.5826948, -2.4682412, -2.6981506, -3.0258257, -2.1245618, -3.3690262, -3.0876715, -4.162996, -4.5142965, -3.7879217, -2.9665167, -2.791171, -3.5369656, -2.3917305, -2.2554045, -2.6315799, -2.3195806, -2.5932949, -2.5324724, -2.643968, -3.478174, -3.8480647, -4.838305, -4.7640142, -5.7706485, -3.7859595, -1.890822, -3.0025935, -6.5981126 ], "pointIndex": [ 0, 1255, 256, 451332295, 476844765, 353449948, 560430769, 524584, 316601115, 394867709, 1089903807, 681991040, 1250248753, 1465322267, 1221666542, 1459131120, 1521923180, 158727042, 493217101, 1954551683, 1608806476, 816219709, 739309430, 1924093989, 586175080, 1083141184, 1514287099, 383171479, 335468273, 353301328, 1087214337, 1155612821, 422631183, 1753804395, 473325151, 699257600, 555443726, 1751772757, 869201381, 787347922, 1146538503, 1656581780, 596168698, 1687312381, 1815453422, 101975884, 95255200, 954426855, 809120055, 1809655805, 119992139, 1700763601, 559408775, 912305271, 932752032, 1105958944, 649154500, 717035920, 98100460, 310978596, 147069943, 1203687429, 1553807374, 1786111910, 1834199016, 1235945729, 482756131, 500599205, 516810663, 936616447, 1778816992, 587427863, 185535326, 1799358676, 1004637632, 200082407, 746739784, 1457045496, 804396910, 840863913, 858856371, 916721559, 1447419325, 1154031319, 1679446170, 1585138145, 1452617747, 1976564591, 153 ], "storeSequenceIndicesEnabled": false, "size": 256, "capacity": 256, "initialAcceptFraction": 0.125, "timeDecay": 1.0e-4, "sequenceIndexOfMostRecentTimeDecayUpdate": 0, "maxSequenceIndex": 1256, "compressed": true, "randomSeed": 5684369017740460239 }, { "version": "2.0", "weight": [ -1.4911071, -1.4948497, -1.4967381, -1.5310053, -1.5021715, -1.4987854, -1.5207069, -1.5417862, -1.6222419, -1.5158104, -1.575677, -1.5464264, -1.5918624, -1.6376232, -1.5584885, -1.5438135, -1.7702165, -1.7226433, -1.669732, -1.6314669, -1.5866266, -1.6306599, -1.5853622, -1.6076901, -1.7002006, -1.7073035, -1.6342174, -1.733735, -1.7246922, -1.5689619, -1.6232954, -2.2763486, -1.5731705, -1.7965978, -1.9153309, -2.4673932, -1.9342862, -1.6788498, -1.8781089, -1.7806269, -1.9041122, -1.6793627, -1.6082995, -1.6951773, -1.6438974, -1.6304628, -1.8834292, -1.7857707, -1.8056086, -1.7213256, -1.8343105, -1.7301867, -1.9566417, -2.0860317, -1.8436301, -1.7512348, -2.2028763, -1.982251, -1.7824874, -1.5767955, -2.0471509, -1.7501755, -1.810705, -2.4892054, -2.5443416, -1.584471, -1.8527033, -2.0867581, -1.9452515, -2.5781212, -2.4684212, -3.2122548, -2.4690588, -1.9902788, -2.1398559, -2.1078768, -3.1068273, -2.477722, -2.173951, -1.9940237, -2.3296304, -2.3379073, -1.9337028, -1.7934093, -1.7880102, -2.239576, -1.7530417, -1.8559335, -1.7293302, -1.6868128, -1.8564905, -1.7350532, -1.7223151, -2.2533605, -2.07792, -1.903341, -1.8106148, -1.9080479, -1.8621694, -1.7881052, -1.7325954, -2.2205815, -2.3311322, -2.471289, -2.7758646, -2.4677973, -2.3256052, -2.9003494, -2.2866623, -2.0297635, -1.9258659, -1.8620938, -2.0275686, -2.7264936, -2.297328, -2.0284185, -2.2965612, -2.2951462, -2.0015132, -2.1415493, -2.186847, -2.1374779, -2.862179, -2.3183577, -1.7961106, -2.3331249, -1.8480538, -2.5384324, -5.1544867, -3.026151, -5.105571, -3.2670376, -3.3749888, -3.138002, -3.2801085, -2.3727238, -2.2907364, -3.2307806, -3.6300344, -2.747922, -2.8748686, -3.0952058, -2.580954, -4.8073583, -3.73439, -2.5728266, -3.479313, -2.0984015, -4.709388, -2.9657722, -2.2065113, -2.3346984, -2.6162956, -3.309454, -3.9598234, -2.563438, -5.2532086, -3.0477846, -2.2498612, -3.195835, -2.1837943, -2.565356, -2.3919415, -4.014871, -2.4170105, -3.0006533, -2.1708453, -2.0211153, -4.1956906, -3.5515172, -4.3578415, -2.9570305, -4.4781837, -2.6243632, -2.7781944, -2.0778558, -2.5789433, -2.71087, -3.7467637, -2.1903725, -2.521412, -2.07979, -1.9037058, -2.5047266, -2.299304, -2.8141892, -2.1038964, -2.707932, -3.5448616, -3.4673579, -2.5393233, -2.2156534, -3.419818, -1.8480599, -2.6456294, -1.9716583, -2.0067434, -2.6639864, -3.4829478, -2.005168, -2.0726898, -3.549752, -2.0862799, -2.6057477, -3.413592, -4.0227575, -2.3710632, -2.8646724, -5.5461245, -4.6805344, -5.1303153, -2.591475, -2.4750278, -3.6639812, -2.8366256, -4.1023946, -2.9231687, -2.5331335, -2.953019, -2.6595, -2.183007, -2.2965136, -2.019997, -4.1200275, -3.0445871, -2.3739119, -3.5416205, -6.0304656, -2.7609074, -3.1862056, -3.6426349, -2.0630581, -2.0421371, -2.590611, -3.177964, -4.961881, -4.281495, -2.7978115, -7.188777, -2.5101128, -2.6189158, -2.3621762, -4.326628, -3.0647418, -2.8780253, -4.0096097, -5.4045615, -4.073947, -2.9886022, -2.6005065, -2.0170605, -4.1553526, -2.8099904, -4.852867, -3.1955338 ], "pointIndex": [ 0, 1256, 255, 1125197114, 82857922, 1461216781, 1048294166, 1233241938, 1072651067, 1396385587, 379592286, 817359583, 1161848244, 1080687724, 910355443, 1066392929, 947891366, 472461480, 509175965, 1695562823, 628293117, 205968688, 1283772976, 1904959238, 1848038017, 1962492536, 926798269, 417231182, 1726165423, 1306473602, 145177136, 1697987296, 465815333, 594818656, 1629364985, 1574606, 950373332, 1814719573, 629547692, 841675527, 1435863509, 798550530, 1121046315, 1580042310, 1723551849, 267455636, 1428579383, 464360136, 1756191336, 303660858, 1753359406, 1561260355, 1049502988, 325953841, 337209313, 356530729, 138208649, 381091212, 413443146, 1974615274, 869727989, 1209973784, 71686395, 1348683888, 739318597, 501851431, 1803830512, 102456874, 1575876331, 1069757925, 1894928579, 1064803339, 1116966482, 1918248381, 619871104, 1534741660, 687015658, 1495284408, 1537003602, 770132244, 745400391, 858751993, 546446138, 1538264577, 1184394218, 1581041753, 1498943238, 1986067271 ], "storeSequenceIndicesEnabled": false, "size": 255, "capacity": 256, "initialAcceptFraction": 0.125, "timeDecay": 1.0e-4, "sequenceIndexOfMostRecentTimeDecayUpdate": 0, "maxSequenceIndex": 1256, "compressed": true, "randomSeed": -5961011759105000572 }, { "version": "2.0", "weight": [ -1.6237711, -1.628153, -1.6416693, -1.6389134, -1.6589046, -1.6476755, -1.696056, -1.696213, -1.6725714, -1.6640321, -1.6763895, -1.6636418, -1.6921222, -1.6966518, -1.7628441, -1.7269291, -1.6983651, -1.6831176, -1.6787539, -1.6936954, -1.7841918, -1.74626, -1.7725044, -1.6873757, -1.7203944, -1.8625002, -1.8564576, -1.73292, -1.8435144, -1.855701, -1.7792147, -1.8557831, -1.8105886, -1.9192698, -1.7947007, -2.216442, -1.8588217, -2.415632, -1.8353658, -1.7428002, -1.8348613, -2.0291662, -1.9624325, -2.0259523, -1.9174504, -1.986738, -2.2747478, -1.8286602, -1.8884032, -1.9634504, -1.7983656, -1.8889049, -1.9644171, -1.9637636, -2.1408167, -1.7981789, -2.1016233, -2.00415, -2.0105994, -2.1065261, -2.141287, -1.9218062, -1.9633807, -1.8852696, -2.7141705, -1.8775206, -2.0123956, -2.3604717, -2.3413675, -2.055255, -2.4611597, -2.3919573, -2.874939, -1.9921714, -1.8891987, -2.7240236, -2.5091233, -1.8974257, -2.3336713, -2.04924, -1.8874867, -2.400239, -2.0225604, -3.2573667, -2.5920815, -2.237946, -2.6125925, -2.4049811, -2.571699, -2.3181803, -3.2518358, -2.529661, -2.347575, -2.3412488, -2.302599, -1.8972478, -2.1023102, -2.2392087, -3.5990577, -2.2514434, -1.9948503, -1.9095303, -1.8573929, -2.6482105, -1.9383067, -2.068555, -2.6944559, -2.0890465, -2.3229322, -2.2482884, -2.4190507, -1.9795253, -2.1934295, -3.05396, -2.646185, -2.3653991, -3.164765, -3.1067479, -2.0248604, -2.127616, -2.3515325, -2.2254272, -2.1740985, -2.2719512, -2.085722, -2.4028237, -2.0253525, -1.9308548, -2.6048572, -4.0182304, -4.4086246, -1.9217116, -3.025395, -3.6621032, -2.9816504, -4.321547, -2.4466884, -3.1595805, -2.6285114, -2.931134, -2.7492023, -3.6441271, -3.034636, -2.4775612, -2.9013302, -4.2080584, -4.958086, -2.3812592, -2.7652755, -3.1284442, -4.9177685, -4.059228, -3.0657902, -3.2866814, -2.5140004, -3.395545, -3.394022, -4.1792674, -5.2798567, -2.3089683, -2.8747897, -3.5250952, -4.1287413, -2.963254, -3.250532, -2.1863542, -2.416417, -3.6281595, -3.6139681, -4.0049005, -3.2939267, -2.3069274, -2.6169567, -3.554352, -3.1421096, -4.0918937, -2.8538375, -2.9486341, -4.11142, -2.662579, -3.101394, -4.9599957, -3.5882397, -2.598755, -5.9695992, -2.760794, -2.4963899, -2.5378249, -5.551288, -2.7500703, -2.7607353, -1.9182537, -3.4631934, -2.3276725, -5.1479826, -2.8500469, -4.8279233, -4.042882, -3.806317, -3.0019336, -3.7066808, -2.7486873, -5.8026333, -4.1605725, -2.3630943, -2.1956322, -4.7438784, -3.8152585, -3.0708437, -2.610038, -3.1883404, -4.153042, -3.6384819, -4.625368, -4.6413755, -5.181517, -2.506795, -2.6399064, -2.368988, -2.6294613, -2.5832407, -5.06332, -3.4438636, -2.2855315, -2.087224, -2.5356748, -3.0395882, -4.248704, -4.914877, -3.9012988, -3.2828252, -3.193225, -5.193056, -5.249597, -3.2919266, -3.3869119, -5.7165804, -2.650207, -2.1123464, -2.431872, -2.584526, -4.189752, -2.4254708, -2.8907857, -2.560145, -3.9329863, -2.6766164, -4.6441774, -2.7055318, -6.3359137, -3.4322157, -2.986393, -4.379887, -5.3462477, -2.6393416, -3.140426 ], "pointIndex": [ 9, 1253, 256, 961539270, 1673099742, 292864876, 93406520, 1605143282, 1130920593, 1312898789, 882579986, 749347743, 1075064541, 838538357, 272853188, 548798662, 355454806, 232841713, 1432004312, 469242221, 442134772, 1150795113, 995911589, 1768180843, 756759527, 261221975, 95213649, 996738658, 1559270182, 1209279388, 358920143, 388999972, 605928230, 1345802258, 517882258, 1419006519, 1559783413, 1301851733, 1008879669, 1786576935, 1060918451, 1374777785, 1772599360, 1137569967, 1585666898, 725303212, 239785903, 310201483, 6508745, 537940759, 1873686440, 379902131, 341355727, 1617006820, 312920987, 1650707723, 954643590, 911482995, 50904291, 1655019542, 1366056569, 1708581567, 438009943, 598454845, 211496435, 1199696213, 1754048226, 1684998472, 928944341, 566199032, 197470124, 878762558, 472550127, 681922101, 30036178, 1808191772, 1002679164, 960291440, 1123215918, 908044003, 943742961, 985172922, 1522888374, 1286150540, 1527864856, 1244078233, 1450403722, 1796263298, 1244 ], "storeSequenceIndicesEnabled": false, "size": 256, "capacity": 256, "initialAcceptFraction": 0.125, "timeDecay": 1.0e-4, "sequenceIndexOfMostRecentTimeDecayUpdate": 0, "maxSequenceIndex": 1256, "compressed": true, "randomSeed": 9095889982550489397 }, { "version": "2.0", "weight": [ -1.5965683, -1.605474, -1.5998874, -1.6115742, -1.6243737, -1.6085265, -1.6020123, -1.634418, -1.6425602, -1.6400524, -1.629464, -1.6297138, -1.6337343, -1.6033086, -1.6097484, -1.6624259, -1.6742873, -1.7130513, -1.7128102, -1.6477957, -1.670843, -1.6317906, -1.6782671, -1.6773082, -1.8203907, -1.7286334, -1.806726, -1.6300648, -1.7287886, -1.6415924, -1.6448572, -1.6650454, -1.7876563, -1.7708933, -1.7046733, -1.9888271, -1.972927, -1.8556824, -1.9030229, -1.9477214, -1.8496878, -1.6738344, -1.8104644, -1.6836578, -1.6649296, -1.7982227, -1.7100314, -1.8672014, -1.687297, -2.4574585, -1.9116623, -1.7777321, -1.7388297, -2.0904682, -2.171662, -2.0474243, -2.047354, -1.8827441, -1.7973624, -1.6882379, -1.7449267, -1.6694207, -1.8786082, -1.685836, -2.4038177, -3.2515216, -1.8661153, -1.903327, -2.5530834, -2.1660123, -2.7789965, -2.1661847, -2.5386386, -2.577987, -2.0202804, -2.6948571, -2.0975728, -2.4518397, -2.322574, -2.0369956, -2.3269794, -1.980619, -1.8654743, -2.132766, -1.7511171, -2.1872008, -1.899768, -1.8329855, -2.0645735, -1.793986, -1.9067699, -2.3587954, -1.9459684, -1.7774417, -1.7305173, -2.106843, -2.2295704, -1.7658864, -1.8917775, -2.6521816, -3.1080632, -2.6481214, -1.9151706, -1.9945921, -1.8536875, -2.0041533, -1.8389709, -2.201991, -2.526123, -2.8499606, -2.2844756, -2.0961516, -2.7727692, -2.337646, -2.2693615, -2.6762223, -1.98051, -1.9966611, -2.4551325, -2.1908934, -1.6984668, -2.9126124, -1.754821, -1.8608118, -1.778809, -2.1995912, -1.8802121, -1.754069, -1.9750528, -3.3643022, -3.0671022, -5.499051, -6.351326, -4.5714335, -2.0859892, -2.5843184, -2.7171652, -3.3848102, -2.7166994, -2.4720547, -2.4142833, -4.8606153, -4.5415883, -3.3840468, -2.6464822, -3.5753329, -3.2476146, -2.6213663, -3.1917949, -2.6942282, -2.42582, -3.2648609, -3.1270168, -2.307064, -4.374364, -3.885179, -3.0397565, -2.5333095, -2.4329717, -2.2332306, -2.294948, -3.1335053, -4.5621243, -3.0722396, -2.3758736, -5.0332875, -2.6144414, -3.4925108, -3.4594991, -2.6730094, -1.995602, -5.004476, -2.4933708, -1.9064989, -3.145163, -2.6776807, -2.5378213, -2.7086794, -3.2757256, -1.8860871, -2.3013015, -2.6716664, -3.6417656, -2.7129445, -3.0108495, -2.7780106, -2.0601518, -2.9248378, -2.9490836, -2.2054753, -3.5714936, -3.9003718, -2.609097, -2.988914, -2.3022199, -3.5478654, -3.9104757, -2.8510497, -2.9600012, -3.0319679, -5.06519, -4.875351, -4.142768, -5.731296, -3.408339, -6.5622587, -2.80811, -3.0746014, -3.469099, -4.501739, -2.066536, -2.7396262, -3.2183354, -2.774808, -2.3921945, -4.8227572, -2.8792684, -3.2473035, -2.8974328, -4.7501125, -3.4837053, -2.9300468, -2.5738401, -2.8842216, -3.1261454, -4.581744, -2.9203901, -2.6495404, -3.342783, -2.4231517, -3.1346366, -3.2866194, -3.8044457, -3.9290097, -2.220442, -3.2857993, -2.317145, -3.182098, -2.5939918, -2.685288, -2.73855, -2.1080241, -2.4743004, -4.901883, -4.4570746, -2.675061, -2.5903609, -2.8296156, -3.7289162, -2.9241652, -3.2727346, -4.1241984, -3.8632848, -2.914715, -2.1849167, -2.0690107 ], "pointIndex": [ 2, 1256, 256, 1503582068, 559482190, 1337102976, 562729286, 1739611809, 967291313, 425541850, 871408859, 1146672822, 1122805082, 395320915, 24473670, 630240406, 400611615, 148617549, 867539900, 810810247, 751919595, 1609394900, 1136416181, 1929048211, 612684984, 1527301945, 1577898435, 305795120, 1880831748, 367138434, 22172056, 1874272017, 1304492081, 505980363, 1231071935, 139656808, 961302118, 822970169, 1666978862, 173863570, 1554254010, 1236234523, 1635648513, 1492888839, 1732013932, 694525718, 872762421, 455204267, 1773693362, 781273967, 1676485434, 63093379, 174927860, 312100965, 330474076, 637861492, 555140684, 1812290006, 1636756093, 1445119631, 1836815181, 456820272, 474696245, 491235964, 502555223, 1940258051, 530706178, 1489639818, 523814770, 586608468, 76358020, 653663382, 1327743328, 1851203310, 1673754727, 1523023867, 857828327, 1941160626, 830782756, 1601969504, 1845615641, 1401517138, 1068653717, 1111281952, 1140141877, 1971318335, 1757514124, 1743241112, 1254 ], "storeSequenceIndicesEnabled": false, "size": 256, "capacity": 256, "initialAcceptFraction": 0.125, "timeDecay": 1.0e-4, "sequenceIndexOfMostRecentTimeDecayUpdate": 0, "maxSequenceIndex": 1256, "compressed": true, "randomSeed": -4568414323862123324 }, { "version": "2.0", "weight": [ -1.6138266, -1.6200708, -1.614556, -1.6233939, -1.6260647, -1.6201645, -1.6304435, -1.669478, -1.6389856, -1.651674, -1.6661147, -1.6698132, -1.6513977, -1.6688465, -1.6691176, -1.7950977, -1.7260531, -1.7063082, -1.6564782, -1.669986, -1.903447, -1.6774566, -1.7375205, -1.9316454, -1.7064815, -1.7414997, -1.6840204, -1.9541612, -1.9007772, -2.018441, -1.7255052, -1.8393124, -2.0276234, -1.8696972, -1.8448665, -1.7897143, -1.7640897, -1.8238368, -1.8092318, -1.8617193, -1.7547783, -2.0482876, -2.110692, -1.7365395, -1.7024146, -2.3914833, -1.850182, -2.068951, -2.242601, -1.7162504, -1.78647, -1.7638264, -2.090236, -1.7976038, -1.7387117, -2.1137908, -2.472179, -2.1319265, -2.2775311, -2.038422, -2.1415591, -2.094432, -1.726505, -2.575303, -1.9282467, -2.8848033, -2.4613793, -1.9956578, -1.9995972, -2.0498257, -1.8999822, -1.968389, -2.1845083, -1.998322, -2.3053951, -2.185676, -1.8633871, -2.577086, -2.3613966, -1.8704422, -2.3792217, -1.9110062, -2.2505798, -2.1216521, -2.0548737, -2.2406547, -2.1248424, -2.1456785, -2.1103835, -2.0191789, -3.127058, -3.0576043, -2.6811328, -1.8934972, -1.8617606, -2.2808363, -2.4195814, -2.9486563, -2.5926979, -1.9886698, -2.084278, -2.182579, -1.8508092, -2.1939347, -2.5398748, -2.717566, -2.4137757, -1.8228891, -3.6212134, -1.7930357, -2.044137, -2.839537, -2.3011444, -2.7147546, -3.0784369, -2.3831677, -3.5555866, -2.469817, -2.3973162, -2.2536638, -2.0598986, -2.2986326, -2.5735557, -2.1581638, -2.221038, -2.3564098, -1.9919771, -5.206828, -3.0944185, -2.483788, -2.118705, -3.271962, -8.166502, -5.0891895, -3.2259262, -5.996233, -7.8219643, -5.435928, -4.096331, -2.0845773, -2.3608477, -2.382382, -2.571299, -2.3727942, -2.1107092, -3.9825644, -5.0206003, -2.0619795, -2.4728963, -2.3282006, -6.0645623, -3.7792861, -2.5139346, -2.4748445, -2.5115914, -3.2220566, -4.2849445, -3.2265825, -3.7718532, -4.087799, -2.0863242, -3.5737815, -2.8400545, -2.1448634, -2.0088718, -2.6729875, -4.4135776, -2.8767314, -2.8736422, -2.6131053, -2.6826117, -2.5429437, -3.638273, -2.4608417, -2.7961802, -2.2718759, -2.3121276, -2.6518314, -2.3440542, -2.045319, -4.7715955, -3.9468198, -3.5987012, -3.7612112, -4.406169, -3.0142753, -2.9591682, -2.205534, -1.9212265, -3.6447978, -2.0212262, -3.6987958, -3.2881184, -2.9900627, -3.8477633, -5.032719, -5.106605, -3.327592, -2.7105112, -2.4769652, -2.9611087, -3.0738149, -2.8768263, -7.121635, -3.7444797, -2.0688655, -2.374881, -2.4311557, -2.7882764, -2.6756434, -11.394501, -2.7900372, -2.7363017, -2.440126, -2.477741, -4.5160103, -2.7817466, -4.2179155, -4.096831, -2.6643949, -6.123933, -2.4551187, -3.8375704, -4.0790167, -2.8787398, -5.083254, -3.9775193, -4.593228, -2.8289692, -3.9375958, -6.2126374, -3.015584, -3.2844162, -3.608685, -4.183773, -3.0704916, -4.6877394, -2.875446, -3.779652, -2.4573023, -2.2609415, -2.8825245, -2.9201965, -2.360224, -3.3201356, -4.1180134, -3.2411907, -2.2871995, -3.1855159, -2.308338, -4.0716915, -3.783447, -2.4058626, -2.3971012 ], "pointIndex": [ 1, 1252, 254, 274547076, 976034967, 315587402, 1649179100, 1843551661, 1376484141, 180538131, 980182133, 861182697, 1233326548, 250222193, 576939298, 331323215, 540501137, 1394344577, 1834460469, 276498685, 1039219316, 1437267118, 1216370238, 1904011025, 1224188161, 268514160, 666171480, 1477003370, 1592529095, 13868853, 1195328452, 424364948, 68286543, 1021973364, 1840717453, 1628669221, 1482849275, 685094737, 742769426, 1260848491, 1258393488, 1697048226, 1027507217, 1381884431, 1786484634, 1487562547, 1617412411, 266446638, 1450798852, 1932821008, 1644546020, 1238420991, 1122575941, 1858877151, 1752517175, 1085366049, 549552616, 772172480, 1700395270, 362405413, 32350723, 80062926, 1507765598, 1832014160, 871120223, 1037491377, 167472094, 504934741, 177951359, 500670106, 971261282, 1275056365, 588879903, 1924589827, 768038482, 687266305, 1938893689, 227921150, 1467022746, 1039928366, 1280589980, 1491414349, 1019670730, 1447688018, 658286145, 1821877343, 1523321737, 1563638 ], "storeSequenceIndicesEnabled": false, "size": 254, "capacity": 256, "initialAcceptFraction": 0.125, "timeDecay": 1.0e-4, "sequenceIndexOfMostRecentTimeDecayUpdate": 0, "maxSequenceIndex": 1256, "compressed": true, "randomSeed": -7769275059528997346 }, { "version": "2.0", "weight": [ -1.467028, -1.4670975, -1.4674501, -1.4778205, -1.4689364, -1.4841985, -1.4681206, -1.4894453, -1.5780511, -1.4848005, -1.5843028, -1.4873016, -1.5212706, -1.477742, -1.4705982, -1.528797, -1.6605811, -1.5975436, -1.6015737, -1.518848, -1.4887893, -1.8078047, -1.6950811, -1.4955248, -1.5334237, -1.5501573, -1.653275, -1.7648107, -1.7915306, -1.4838738, -2.0933008, -1.5549726, -1.5799541, -1.8778653, -2.0852897, -1.598548, -1.6157726, -1.6360085, -1.6091611, -1.5994772, -1.7040111, -1.5370618, -1.5624154, -1.930429, -2.0199976, -1.7245322, -1.7301582, -1.7585945, -1.5455968, -1.7815795, -1.6114988, -1.741401, -1.6412951, -1.7372777, -1.6953312, -1.9503698, -1.8603348, -1.8601714, -1.8995856, -1.7357519, -1.6103076, -2.1440177, -2.3009224, -1.7057087, -1.5696069, -1.8150089, -3.4212294, -2.101055, -2.87118, -2.098325, -2.436333, -1.628527, -2.0695157, -1.7023493, -1.9100912, -1.6787161, -1.6959999, -1.923348, -1.7236828, -1.7092505, -2.1551113, -1.8813591, -2.2988782, -2.1261275, -1.6131617, -1.8154691, -1.8053954, -2.2895265, -2.074795, -2.494754, -3.2932467, -1.8201196, -1.7812427, -1.9736366, -2.131185, -2.472943, -2.473403, -1.7512174, -1.6387186, -2.4311333, -2.6189053, -1.7664279, -2.0674803, -1.8106017, -1.9222755, -1.7646991, -1.8440909, -2.0587785, -2.2700589, -2.2341561, -1.8995575, -2.1170647, -2.1305034, -1.9458102, -2.2541769, -1.8630131, -2.3247356, -2.011005, -2.0010917, -2.0726094, -1.7903583, -1.9421533, -2.0684798, -2.3165772, -2.2252998, -2.8308153, -2.3763773, -2.0261903, -2.3376548, -1.6005598, -5.1900268, -3.3060582, -1.9668535, -4.4343815, -5.726982, -6.5618143, -7.1521225, -3.9599025, -3.087707, -3.7807233, -2.1584404, -3.3265028, -4.7556677, -2.0542948, -1.7263491, -2.553137, -3.8031938, -2.0881627, -3.6006567, -1.9714303, -4.027929, -2.9679847, -2.084463, -2.5373173, -1.7270668, -3.3460476, -2.2720094, -1.9646698, -1.7665315, -2.1895826, -3.1057694, -2.5851593, -2.3558624, -2.7720058, -4.548722, -2.794429, -2.9128704, -2.2261264, -2.5785084, -2.3850858, -3.0014517, -2.3341982, -2.0401964, -3.7656128, -4.918224, -2.3436055, -3.3159294, -2.8349006, -2.212059, -2.8434274, -3.250644, -6.301172, -3.4591837, -2.829273, -5.1736913, -1.8322675, -2.6087058, -2.7446747, -1.9850545, -2.7042725, -2.2928898, -2.8400059, -7.0028443, -3.1880243, -2.7262745, -2.933164, -2.522319, -5.064997, -2.2153957, -2.8580453, -2.6116455, -2.7077794, -2.875213, -1.8732623, -4.516843, -3.31612, -2.9638295, -2.528539, -1.9243155, -3.2457132, -3.8606894, -4.193019, -1.9437845, -2.818514, -2.0880072, -4.4739275, -2.1363142, -3.224624, -4.357141, -2.5012124, -2.285748, -2.908747, -2.3669345, -2.3116171, -2.3229961, -2.6012707, -2.9103174, -2.409648, -2.921963, -2.7194922, -2.717911, -2.218835, -1.9833001, -2.865098, -2.5878224, -2.833754, -3.606414, -2.3370578, -3.9532104, -2.3224201, -3.205591, -2.004258, -2.3421495, -3.8120599, -2.659517, -4.6359572, -3.6126306, -2.8724058, -3.2156265, -3.7808232, -5.067774, -3.3008513, -4.3762145, -3.2654536, -4.3478055, -3.4660358 ], "pointIndex": [ 6, 1249, 256, 795392217, 638392962, 150061942, 1614475866, 1147699865, 1191819344, 279537301, 551298788, 95573517, 1280571584, 800982649, 797086801, 1445793454, 146122949, 60691280, 1321646822, 985916881, 122025031, 1066252937, 1678302431, 1815055294, 1539998588, 1060685771, 430818523, 330705144, 449039476, 662066961, 821265261, 397155296, 207819166, 1853345899, 877469758, 756263593, 1024183649, 835997518, 1899422496, 203404796, 1368794025, 175599895, 1007365797, 1669139218, 1379846804, 1796674342, 1791417225, 7905622, 167346105, 1058947104, 1858394257, 1467292877, 298716694, 1047781028, 1629806720, 327779287, 294734916, 865485941, 956674799, 388742043, 142688661, 625743782, 438297810, 1456649084, 1603635718, 500480003, 512765450, 1883280749, 1915537434, 486385823, 17492566, 1499864378, 1410301699, 649940136, 673716751, 737319243, 928071726, 1896315503, 834726615, 55181900, 896101042, 1209358992, 790024189, 1033022128, 1211074512, 1246998788, 1531517863, 1777879970, 1243 ], "storeSequenceIndicesEnabled": false, "size": 256, "capacity": 256, "initialAcceptFraction": 0.125, "timeDecay": 1.0e-4, "sequenceIndexOfMostRecentTimeDecayUpdate": 0, "maxSequenceIndex": 1256, "compressed": true, "randomSeed": 4541724188348374211 }, { "version": "2.0", "weight": [ -1.5965717, -1.6001675, -1.6039135, -1.6013881, -1.6059641, -1.6264149, -1.6109191, -1.6168767, -1.6837949, -1.6154885, -1.6385336, -1.6628644, -1.71156, -1.6524342, -1.6569929, -1.6551793, -1.6284081, -1.7612597, -1.7535372, -1.6980925, -1.8142519, -1.7219537, -1.6645398, -1.717013, -1.6743274, -1.7404604, -1.7513614, -1.7165102, -1.8172222, -1.6647087, -1.6899586, -1.8019162, -1.9604771, -1.7325345, -1.8862405, -1.763366, -1.7779802, -1.7706667, -1.927861, -2.421426, -2.0788026, -1.919324, -1.9871373, -1.7431914, -1.8885114, -1.6989186, -1.7150781, -1.8874427, -1.8246077, -1.6761974, -1.700487, -1.8789678, -1.83192, -1.9647466, -1.9222289, -1.7642535, -1.7872288, -2.122375, -1.8567419, -2.0587893, -1.8710225, -1.7320795, -2.0157423, -1.8617587, -1.9388741, -2.1291158, -2.3377938, -1.8759451, -1.9586152, -2.4294631, -2.0866654, -2.352787, -2.368293, -2.4037426, -1.8538191, -2.3876994, -3.388962, -2.0128324, -2.1810913, -2.4652147, -2.760965, -2.1185374, -2.4552193, -1.9905087, -2.6480858, -2.1137474, -2.64262, -2.3192794, -1.7611603, -2.0723884, -2.1697767, -1.6992674, -1.7801843, -2.0863554, -1.7544373, -2.4301438, -2.3560226, -1.9150974, -2.0139015, -2.266037, -2.0130007, -2.3793597, -2.4544587, -1.9949479, -1.9759467, -1.9641852, -3.6359153, -2.1987228, -2.1116462, -2.1017444, -2.194392, -2.273187, -1.8679112, -2.1140149, -3.5964894, -2.7098334, -3.1281495, -1.8930235, -2.5202293, -2.903093, -2.2792664, -2.310557, -2.0356898, -2.211646, -1.7527771, -2.7364557, -2.0347674, -1.9049851, -2.9417238, -2.533384, -3.1451507, -3.901787, -2.65957, -3.1533628, -4.368806, -2.3373902, -2.8215654, -3.2734756, -3.0295422, -2.7848854, -2.8667374, -2.545905, -2.3083808, -2.7107656, -3.1513333, -7.0312195, -2.4134543, -4.3557734, -2.4205604, -2.0935204, -2.3436384, -3.6850507, -2.594825, -3.7675693, -4.1618886, -2.4946504, -2.3559964, -5.823009, -3.4856424, -3.8307014, -3.9933295, -3.2719202, -2.831582, -2.1212502, -2.7761233, -4.082748, -2.6616712, -2.6365888, -2.0699306, -5.487333, -3.191381, -3.5252602, -2.469596, -3.3871434, -3.2145245, -3.2415304, -2.7563546, -2.6392884, -4.5272846, -2.825336, -3.0379832, -3.686642, -3.3420174, -2.0666325, -4.6929336, -2.4952083, -2.9958043, -4.134448, -2.3739684, -1.9288124, -2.210782, -2.81132, -3.663362, -2.3939419, -2.3698654, -3.599692, -3.1023452, -3.5171332, -3.2203267, -2.2895916, -3.1158347, -2.0357246, -5.3228574, -3.8063614, -4.1641517, -2.4883325, -3.3343816, -2.5615892, -3.0179958, -3.1521022, -2.9317567, -2.186532, -2.6344547, -5.570923, -4.1481714, -2.3711085, -2.6832128, -2.4854255, -3.639394, -4.0815396, -2.7622623, -5.2310658, -2.480021, -3.1463213, -3.8098817, -3.2311997, -3.0973024, -4.378947, -2.1186829, -8.498683, -3.7873533, -2.9777024, -3.6439102, -3.3209803, -4.437536, -2.9741552, -1.9432625, -2.984181, -2.892447, -3.4080548, -4.1191716, -3.8573587, -3.966833, -4.4431806, -2.609818, -2.5466335, -4.1361165, -3.8374505, -4.8389907, -2.4686964, -3.7323036, -3.4660387, -4.2187986, -2.5719957, -2.15731, -2.0255377 ], "pointIndex": [ 0, 1253, 256, 1163611739, 961304106, 517944468, 562997821, 1727370439, 742897309, 396628742, 511453566, 1096347742, 1721157150, 983949737, 430285, 168060032, 140638341, 1326071702, 472850819, 852727987, 1611448073, 790833056, 1332688549, 1873278899, 549179258, 1330390782, 899569511, 975063105, 1675110494, 51875298, 1269258147, 1692507144, 1619167988, 221196918, 1071487429, 1831608236, 1639183998, 1759677201, 664469218, 1206540885, 1038238500, 1084208527, 1099085665, 1304517068, 1598745802, 1269019311, 42447411, 1505522038, 34865842, 1539704003, 1066873370, 233723665, 292835379, 1204790347, 806415541, 329431560, 89350503, 1736721386, 32635574, 592479413, 392883167, 1806938453, 1388860555, 433930275, 1481100752, 1934702137, 17665771, 1028187503, 1538389950, 1324475678, 1887458445, 1879803483, 1715261712, 184791230, 1878106178, 1137472729, 192408864, 1901791939, 1037148005, 486557147, 919595168, 950974538, 1178624483, 1125249092, 1179853800, 1285762245, 1768686352, 1860189661, 1247 ], "storeSequenceIndicesEnabled": false, "size": 256, "capacity": 256, "initialAcceptFraction": 0.125, "timeDecay": 1.0e-4, "sequenceIndexOfMostRecentTimeDecayUpdate": 0, "maxSequenceIndex": 1256, "compressed": true, "randomSeed": 2974389039810781744 }, { "version": "2.0", "weight": [ -1.6764992, -1.6958274, -1.6906761, -1.6997926, -1.7197431, -1.7105455, -1.699538, -1.7480061, -1.7183363, -1.7617513, -1.7665355, -1.7205622, -1.7229751, -1.7095234, -1.712063, -1.7610425, -2.0025625, -1.7190348, -1.8428125, -1.7734516, -1.8737025, -1.784302, -1.7758138, -1.8650142, -1.9094932, -1.7641912, -1.7876068, -1.770861, -1.9609163, -1.7481569, -1.8737556, -1.7909487, -1.8254586, -2.0344076, -2.0933356, -1.8535492, -1.7756407, -1.9534725, -2.2208147, -1.8998641, -1.8039731, -1.9330158, -1.8930149, -1.8418735, -1.8315548, -1.8492849, -1.7767801, -2.0619454, -1.9183084, -1.9914724, -2.1994247, -1.893529, -1.9167924, -1.8534486, -1.8540635, -1.8360285, -1.8018483, -2.0149078, -2.156264, -1.7783345, -1.8414056, -2.0906248, -2.3711946, -1.8415192, -2.3714786, -2.9022906, -1.9636358, -2.8221817, -2.3486662, -2.4554226, -2.6083274, -2.6525185, -1.9475011, -2.313022, -1.8175609, -2.8928878, -2.000999, -2.89704, -2.7926826, -2.1103365, -1.9930633, -2.6354682, -2.0399613, -2.033366, -2.20878, -2.487807, -2.1843228, -1.8659741, -1.881563, -2.3812628, -1.9711432, -2.1501844, -2.2721488, -1.813301, -1.8368465, -2.1128387, -2.3040423, -2.6563406, -1.9628875, -2.2360194, -2.3045492, -2.2451193, -2.5775018, -2.047439, -2.3106627, -2.1124313, -1.9980546, -2.2577305, -1.9977155, -2.0085564, -2.1718853, -3.9304676, -1.8986434, -1.9047749, -1.9229028, -2.1014469, -2.537519, -2.6529217, -2.31025, -1.9334949, -1.796481, -2.9063954, -2.0648232, -2.3255317, -2.2250478, -2.5736194, -3.5998192, -2.1379678, -2.723008, -2.939169, -3.053105, -3.9497592, -3.1534941, -3.3767736, -2.1855912, -3.4670146, -6.3716393, -4.2738733, -2.434441, -4.7714667, -4.589805, -4.959077, -2.7561874, -4.3232794, -2.740808, -2.8243487, -3.9605234, -3.4604313, -2.7065961, -6.068086, -6.0786867, -3.5492153, -5.709071, -2.1999042, -4.1939697, -3.6098812, -5.782508, -4.0327687, -6.203905, -2.1922278, -2.2782393, -2.4290404, -2.4427545, -3.199056, -5.023345, -2.2551022, -2.9791067, -3.2474163, -2.243982, -3.5441117, -2.7690384, -3.6095276, -3.255176, -2.6776273, -2.6551788, -2.4600167, -2.2966177, -1.9961336, -2.4975839, -2.5526073, -3.0071547, -2.8752391, -7.322864, -3.6169648, -2.8751423, -4.7001524, -6.7427464, -3.6106853, -2.4639018, -4.794964, -3.2962768, -2.7963517, -2.5175323, -3.3550315, -3.2839267, -4.0063868, -2.938738, -3.2653677, -2.0275402, -2.5693622, -3.3391628, -4.112069, -2.4103444, -2.5815146, -2.4570982, -2.9206357, -2.6522524, -2.232228, -2.307984, -5.9732804, -4.825717, -3.8391047, -2.2225866, -3.9098666, -4.889138, -3.6301153, -2.7953954, -2.2403986, -2.09101, -3.7887583, -3.6717098, -2.5485013, -2.2754288, -4.413657, -4.2619123, -3.6700647, -3.6085973, -2.2921927, -3.1419306, -2.2765403, -2.431947, -2.2881124, -2.2225246, -2.843642, -2.7188275, -2.9016843, -3.3257384, -2.4257905, -4.3817286, -2.0652525, -2.0353162, -3.4925709, -2.8533604, -3.0184164, -2.9160662, -3.452129, -3.3308847, -3.1446595, -2.7629244, -4.060753, -3.3641934, -4.5306907, -2.7997391, -5.0139904, -3.9912064, -2.5082939 ], "pointIndex": [ 0, 1255, 256, 1595624174, 420418603, 1336138779, 503927129, 1359566407, 280802615, 150136042, 3692996, 665504981, 949475038, 50286260, 1125686072, 1282042985, 1872162215, 157102042, 454994246, 1587410745, 609665789, 1200082062, 1171214805, 1902230760, 847331506, 1598252240, 1445118495, 1610068947, 1194442377, 1896710392, 359547984, 497749265, 282571950, 531963305, 678620578, 502828948, 1303457028, 733044781, 824345301, 1134757455, 1757924619, 1708658538, 1508296009, 949874839, 1764962526, 22071435, 112983632, 1479820342, 1893770907, 1318621710, 284053641, 552124488, 735926860, 438794502, 1284105615, 326809658, 1917781586, 1860744660, 1153253229, 1497199698, 1969057161, 1974720042, 1486644109, 174979513, 1658510367, 440166081, 1232412144, 1928663421, 500575328, 648431842, 769368113, 1235260006, 573095955, 658807788, 34545359, 208497870, 1805281587, 1692857443, 1679577101, 910172434, 805831328, 1941170410, 1772364771, 1400744872, 957287994, 1070402280, 1306036065, 1678467741, 1255 ], "storeSequenceIndicesEnabled": false, "size": 256, "capacity": 256, "initialAcceptFraction": 0.125, "timeDecay": 1.0e-4, "sequenceIndexOfMostRecentTimeDecayUpdate": 0, "maxSequenceIndex": 1256, "compressed": true, "randomSeed": -7325120448755709923 }, { "version": "2.0", "weight": [ -1.4789896, -1.4813277, -1.4817868, -1.4927266, -1.4817274, -1.494836, -1.4951668, -1.5189464, -1.4971339, -1.4891075, -1.494705, -1.5260731, -1.6166315, -1.5730482, -1.5089144, -1.5422033, -1.5432531, -1.6478055, -1.5075778, -1.4952298, -1.5665935, -1.583639, -1.5436229, -1.6401356, -1.5861496, -1.6939223, -1.6734645, -1.7411418, -1.6076918, -1.6060724, -1.5620602, -1.5942497, -1.6047797, -1.9373966, -1.6813858, -1.6566732, -1.6520962, -1.7416009, -1.5672114, -1.5435431, -1.5410064, -1.6136974, -1.575288, -1.8296115, -1.635954, -1.6432008, -1.5914276, -1.8453808, -1.8873544, -1.9382782, -1.8738217, -1.7060682, -1.8990436, -1.8289719, -1.6985285, -1.7595074, -1.7536279, -1.7418392, -1.8090104, -1.9695964, -1.6294744, -1.6043773, -1.6309644, -1.6044484, -3.3081942, -1.6289575, -1.6165967, -2.5297084, -2.8675802, -2.765154, -1.864613, -1.958626, -2.2022676, -1.6808785, -1.8817226, -1.7862926, -2.30006, -1.9910297, -2.413693, -1.6648751, -1.8299508, -1.547286, -3.0589058, -1.8049306, -1.7710308, -1.7064773, -1.7509496, -1.8867807, -2.0005727, -1.6649243, -2.0950646, -2.0428991, -2.936637, -2.86679, -3.4534729, -2.1623518, -1.9664167, -2.0203717, -1.9363478, -2.8894434, -2.441115, -2.0852993, -2.1043887, -1.7624108, -1.8068472, -2.2669864, -1.9438679, -2.0263252, -2.809571, -3.5156472, -2.0535638, -2.7014992, -1.9866724, -2.115246, -2.4434855, -1.7675318, -2.2506127, -1.8771663, -1.8373984, -1.99535, -2.0801814, -1.7359631, -2.1916656, -1.6493181, -2.2410676, -1.6915656, -2.0914423, -1.6744939, -2.904893, -4.338845, -4.0180583, -1.713513, -2.0375726, -3.845712, -1.8471489, -2.6868517, -5.378029, -5.954161, -2.868096, -3.3108563, -4.0419126, -5.047232, -3.3756578, -2.0724225, -2.0070157, -3.366248, -2.2862413, -7.0287, -2.3656926, -1.8847853, -2.4822066, -2.2740889, -1.8520479, -2.5333264, -3.8444266, -2.0047996, -2.339066, -3.0678396, -6.6533227, -2.544771, -2.0255227, -2.0628326, -2.344547, -3.2596714, -1.5772738, -3.762522, -3.442151, -2.8425343, -2.5368123, -3.4553957, -3.7509146, -1.9215556, -2.4849117, -1.809928, -2.1047919, -2.1177597, -2.006969, -2.1972163, -2.0462108, -1.9388325, -1.9577699, -2.6966898, -2.8698642, -3.760625, -2.2737677, -3.137625, -3.1042125, -2.9655306, -3.3402255, -8.947269, -3.5496058, -2.331477, -7.22113, -2.038032, -2.2908099, -2.40332, -3.0953493, -6.5161424, -2.2471056, -3.0264566, -3.6173818, -2.663741, -3.1969995, -4.6820235, -2.3960974, -3.5762146, -3.4620936, -4.7139273, -3.4655447, -1.925014, -1.8825349, -2.921921, -2.4039183, -2.037784, -3.0472116, -3.1644752, -2.3709059, -5.91918, -3.0437999, -3.6559024, -5.0809813, -3.1907015, -2.965922, -5.205322, -3.1386008, -2.574078, -2.78269, -3.4993951, -2.2372167, -4.0201955, -3.0609505, -2.824737, -1.7775307, -3.563109, -2.7900605, -2.907892, -2.1786776, -2.11636, -3.7923527, -2.48394, -4.18271, -3.610519, -2.114958, -3.14728, -2.2880132, -3.141728, -2.349664, -3.7127583, -3.242941, -2.8023453, -2.5635731, -2.2638948, -2.2723649, -2.7769027, -3.9965684, -1.709681 ], "pointIndex": [ 2, 1247, 256, 927118680, 1728068399, 275525989, 542996925, 1329648133, 746207253, 840245279, 470796809, 736120960, 426255950, 54291877, 546082091, 867037754, 997001643, 1670410354, 157329379, 571876769, 1448766970, 640676627, 312859989, 1820217497, 1073931095, 1711070860, 1409810180, 352270578, 1120091963, 443839731, 1122704792, 393898066, 78365861, 463014431, 1756508935, 609016580, 172879032, 1579063848, 824482771, 1418019519, 1904054526, 983596714, 615713350, 1407659374, 1592542167, 231319847, 5983785, 104215344, 815232617, 1515343063, 1089772401, 274186175, 740797040, 577096301, 1473655022, 1766792412, 1843099405, 1081775419, 1027182103, 377312116, 1860317336, 1114222603, 1314021632, 465250561, 1722105342, 1924589275, 498332310, 1918415625, 1874800468, 1760567206, 1731511184, 596688843, 176007985, 1576630510, 670559844, 1232878898, 1463803296, 1172106116, 854619453, 1599826603, 945325839, 1035374295, 1183946262, 1202664088, 1529404870, 1839767242, 1601917146, 9204005, 1245 ], "storeSequenceIndicesEnabled": false, "size": 256, "capacity": 256, "initialAcceptFraction": 0.125, "timeDecay": 1.0e-4, "sequenceIndexOfMostRecentTimeDecayUpdate": 0, "maxSequenceIndex": 1256, "compressed": true, "randomSeed": 5966322168077801063 }, { "version": "2.0", "weight": [ -1.359602, -1.3747983, -1.3669475, -1.3917516, -1.3749169, -1.3978804, -1.3743601, -1.3946548, -1.4078739, -1.4120302, -1.4068153, -1.5031053, -1.4189385, -1.4294072, -1.3918122, -1.4187685, -1.451527, -1.5439616, -1.572372, -1.5431609, -1.4799433, -1.4809572, -1.5019768, -1.5062917, -1.6155772, -1.4287484, -1.4429781, -1.4321111, -1.4374574, -1.4256124, -1.4440918, -1.6143839, -1.4548193, -2.1818051, -1.521527, -1.7077321, -1.594992, -1.6788688, -2.0228424, -1.5561807, -1.7651178, -1.4828888, -1.6438819, -1.6252949, -1.5230577, -1.905284, -1.8408743, -1.5944843, -1.599917, -1.6622891, -1.6484537, -1.4462303, -1.5112286, -1.6332244, -1.4575502, -1.488177, -1.7010106, -1.6937976, -1.5946316, -1.4753292, -1.438668, -1.6429601, -1.4513603, -2.2772639, -1.7143407, -1.5759331, -1.5740432, -2.8094275, -3.3058069, -2.1396427, -1.5359617, -2.1293366, -2.0036054, -1.7648398, -1.8915709, -1.770045, -1.9245359, -2.1247864, -2.9160671, -1.7070603, -1.9920924, -2.032921, -1.9603047, -1.747028, -1.8338137, -2.3822255, -1.9893866, -1.8081368, -2.1531112, -1.7730501, -2.1450498, -3.132966, -2.2067213, -1.924489, -2.756486, -1.7515236, -1.8227607, -2.4800415, -1.8187356, -2.2551625, -2.1342087, -2.6814182, -2.2624876, -2.3270738, -1.9789789, -2.0078046, -1.5552356, -2.0232923, -1.7029153, -1.4964641, -2.9953322, -1.6763792, -2.9508388, -1.9122832, -2.121463, -1.8967429, -1.9978342, -1.6310147, -1.7970418, -2.0497434, -1.4872304, -1.9258558, -2.6047144, -2.3391123, -1.666762, -1.6153685, -1.4929992, -2.3954306, -2.6757016, -2.0115712, -3.2982168, -1.8071309, -4.732093, -2.86006, -1.6296129, -3.9723382, -3.5085964, -3.8349621, -4.332474, -3.9460185, -2.1973403, -2.2070367, -3.469926, -2.7214763, -2.7626624, -4.706231, -2.5175548, -2.3759713, -5.3709946, -2.9945693, -3.9092703, -2.2447438, -1.8524231, -1.9837755, -3.076053, -4.0829, -4.77054, -4.881027, -4.1488724, -4.4731345, -2.218555, -2.7092788, -2.4048133, -3.8219318, -2.6914885, -2.0651407, -3.2814193, -2.644386, -2.9437237, -1.9948936, -4.206107, -6.2308683, -2.5094018, -2.0590875, -2.1312287, -4.2151265, -2.7633343, -5.1526904, -3.3049357, -2.1771789, -1.9143611, -2.174454, -2.895144, -3.2811656, -3.7764373, -2.2945032, -2.8516362, -2.284171, -2.7553618, -3.522863, -4.0175667, -4.0974483, -2.0300355, -4.1277246, -2.806212, -3.3823714, -3.3424401, -2.6951935, -2.4054852, -3.0757685, -4.821749, -2.8912666, -2.3331127, -3.8103104, -3.4520514, -5.378011, -2.5183861, -3.231196, -2.606206, -2.0731435, -2.005029, -2.679055, -2.581851, -1.9455084, -2.0369332, -4.7684417, -2.5067194, -4.576556, -4.450429, -1.8643699, -2.1515625, -3.862825, -5.5100384, -2.1516352, -2.974032, -4.912022, -3.0503857, -3.2343678, -2.8258865, -2.246921, -5.2116704, -2.021993, -1.9658217, -3.0767105, -2.3124611, -4.3563266, -2.8614416, -2.0766013, -5.007502, -3.0026526, -3.7666762, -3.6385636, -2.8427145, -3.7251058, -3.909793, -3.4142978, -3.6704612, -2.6715941, -3.6530285, -1.9842077, -1.8425122, -4.820701, -1.7397573, -3.8442929 ], "pointIndex": [ 1, 1254, 254, 784888285, 1186575131, 789189176, 1400803504, 1772303693, 308336973, 67293351, 526444841, 1621772241, 1269871206, 899643397, 305167009, 310470336, 1651984956, 165952774, 513691375, 182197367, 1100310439, 978851783, 1191155089, 1861395843, 1034802101, 156803733, 551822515, 317361259, 1519332308, 523016884, 1462094261, 394615233, 1016367154, 1135725509, 3108653, 567819053, 186342505, 1236149782, 1837210046, 1685297421, 1297883652, 862509255, 1489238425, 1111998914, 1221306814, 1889841812, 1290135051, 267762769, 1818043055, 279002659, 25181910, 744215253, 1761708314, 485415160, 241274699, 340750885, 1918191838, 364652689, 755478218, 470482903, 121135392, 402187451, 547412642, 450747522, 1833931018, 493003335, 251741409, 844852725, 18667531, 1218005248, 1711986371, 720129522, 609568344, 1271094102, 1082130952, 680078710, 1337202443, 735316700, 244707662, 1587430410, 1913931677, 1640869653, 990635708, 986766945, 1560781711, 1507851713, 1526411016, 1572475 ], "storeSequenceIndicesEnabled": false, "size": 254, "capacity": 256, "initialAcceptFraction": 0.125, "timeDecay": 1.0e-4, "sequenceIndexOfMostRecentTimeDecayUpdate": 0, "maxSequenceIndex": 1256, "compressed": true, "randomSeed": 5863646346142641006 }, { "version": "2.0", "weight": [ -1.575608, -1.5814409, -1.5781481, -1.6155031, -1.5828708, -1.6040213, -1.5803695, -1.6196128, -1.6891334, -1.5856794, -1.6220452, -1.6704509, -1.6055237, -1.6525494, -1.5969791, -1.6239997, -1.7467704, -1.8449363, -2.0470545, -1.812362, -1.6207516, -1.9919968, -1.6685889, -1.7008271, -1.6975868, -1.6878153, -1.6768947, -1.6593972, -1.7077638, -1.6490749, -1.7063341, -1.7464024, -1.7496744, -1.8403921, -1.794143, -1.863235, -2.5615525, -2.1757193, -2.2156215, -1.9555329, -1.9124904, -1.8627983, -1.6415664, -2.0704143, -2.0065598, -1.7881496, -1.9410346, -1.7241747, -1.9910812, -1.7615238, -2.0226061, -1.7233528, -1.734961, -1.8799304, -2.1976762, -1.8057204, -1.6640658, -1.7348346, -1.7793133, -1.7161245, -1.9093564, -1.7863426, -1.782226, -1.748099, -1.9819493, -1.9970762, -2.3123357, -1.8498224, -2.2264159, -1.8386749, -3.345277, -1.883858, -1.9660522, -2.8395278, -2.9833143, -2.3452234, -2.2418785, -2.795027, -2.6312294, -2.8163066, -1.9591815, -1.9430947, -1.9477563, -1.9072555, -2.464852, -1.7954881, -2.0065253, -2.4018254, -3.7181277, -2.1584997, -2.0945082, -2.143602, -2.129317, -2.2141273, -2.14982, -1.958308, -2.2566347, -2.0064788, -2.3119383, -1.8199244, -1.8838389, -2.1038854, -2.8273778, -2.204648, -1.773783, -2.058429, -1.9341174, -2.0440369, -2.2040834, -2.2547963, -2.5701208, -1.887871, -2.0140364, -2.740925, -2.2461722, -1.9907988, -1.8508942, -2.2053757, -2.3237412, -2.1764266, -1.8121494, -2.2599766, -2.0563395, -2.2131538, -2.101571, -1.8369926, -2.1113522, -1.9830061, -1.8985038, -2.0979133, -5.289009, -2.5313275, -2.0532134, -4.012346, -3.6139667, -2.0709507, -1.9825712, -2.4745681, -2.5805273, -4.426341, -4.355678, -3.5989287, -4.8145404, -2.1951988, -2.3304834, -3.2525547, -4.0202074, -3.2697027, -3.6303856, -4.2800465, -3.1944683, -3.215791, -4.1126847, -2.9608352, -3.155402, -3.1948025, -3.4552639, -3.7967749, -3.6374478, -3.9048827, -3.5179439, -3.2579017, -3.5275407, -2.9210572, -4.9047728, -3.7414958, -2.8654935, -2.240625, -2.3643675, -4.65246, -3.8078144, -1.9313331, -3.3564284, -2.3961694, -3.6561205, -4.623437, -2.4091523, -5.6450777, -5.337534, -2.49797, -2.4037368, -4.982056, -5.2365403, -2.202554, -2.1648428, -2.956364, -3.4817119, -4.1723804, -3.3398435, -3.7754629, -2.468077, -1.9774877, -3.2842422, -5.4654374, -2.7166097, -2.459306, -3.7167258, -3.2403567, -3.3395982, -2.4355524, -2.1046832, -2.7346094, -2.687636, -3.116037, -3.7386253, -4.0494804, -6.3595433, -2.8649182, -2.4392982, -2.4244318, -2.0033848, -3.9102988, -2.9147055, -3.494289, -2.4981205, -4.4003124, -5.03912, -2.496209, -4.6680713, -3.4900355, -2.2696192, -4.592746, -4.233194, -3.0151408, -2.5300114, -3.3627484, -2.2335417, -3.8549244, -3.4596527, -4.547544, -2.9830463, -2.4512615, -6.091157, -2.3038387, -2.8788407, -2.7567303, -4.153861, -3.0705404, -3.3430862, -2.7613983, -4.5446625, -2.7000647, -2.2375746, -2.679622, -5.9046073, -3.7500348, -2.0826974, -3.1326358, -2.3658702, -2.9701922, -2.2291567, -3.1797545, -3.7251885, -4.6901045, -4.6262054, -1.9968588 ], "pointIndex": [ 1, 1251, 256, 1306762992, 565865793, 124121482, 1738965356, 1408181594, 430654305, 1411568429, 1171867843, 1047777375, 1119647973, 266038704, 25368794, 1841871691, 1862650395, 1274069771, 1474173702, 1946760321, 1708540483, 1290361016, 1546358337, 1378278783, 1583166718, 740915715, 1456470874, 313253948, 62598705, 60392692, 229433700, 246820125, 1294601145, 1692135495, 523355825, 798583808, 1317097459, 695367492, 1427432701, 1262025497, 1529849795, 1466036129, 999579821, 1866554081, 1809138432, 910825491, 373589947, 507923371, 1182244497, 1074960353, 1532937894, 1157218619, 1302326523, 320144715, 1668549230, 788611575, 585858314, 362707653, 139653123, 396733880, 1690075672, 466833284, 1858004361, 191645971, 351239354, 502669945, 6692671, 1835161702, 554683535, 592019263, 588578366, 732981881, 689650548, 656897546, 664088272, 713102952, 1081854367, 1528558585, 1324596181, 1648569542, 1612941687, 1351288215, 469215660, 1033732722, 1114450720, 1333201431, 1577051617, 1384545, 1250 ], "storeSequenceIndicesEnabled": false, "size": 256, "capacity": 256, "initialAcceptFraction": 0.125, "timeDecay": 1.0e-4, "sequenceIndexOfMostRecentTimeDecayUpdate": 0, "maxSequenceIndex": 1256, "compressed": true, "randomSeed": -3485342436052657063 }, { "version": "2.0", "weight": [ -1.4646834, -1.4667517, -1.4848248, -1.4955488, -1.4748328, -1.4996586, -1.5102067, -1.5423312, -1.5171639, -1.5108787, -1.5430261, -1.5118963, -1.5083525, -1.5142311, -1.5558296, -1.58652, -1.5521219, -1.5663732, -1.5962416, -1.5707482, -1.5287815, -1.5511978, -1.5490642, -1.8354799, -1.6619667, -1.5551033, -1.5756073, -1.667111, -1.5569456, -1.6726259, -1.564499, -1.6257182, -1.6528468, -1.5773174, -1.6714104, -1.6499722, -1.8766035, -1.6815758, -1.6395549, -1.6178705, -1.6063552, -1.9306438, -1.610218, -1.64699, -1.6621773, -1.8209532, -1.5760742, -1.8630723, -2.0983984, -1.982195, -1.7652756, -1.7825636, -1.6701146, -1.6431956, -1.6910659, -1.7496774, -1.8248948, -1.5788943, -1.7409449, -1.7139764, -1.7687455, -2.3207808, -1.5775722, -2.337894, -1.8376864, -2.0159893, -1.7816584, -2.2645795, -1.8502923, -2.4336076, -1.958431, -1.9566456, -1.6514288, -1.9508808, -2.0869696, -1.8643857, -1.8263228, -1.9006462, -1.9109508, -2.375001, -1.6502724, -2.424987, -1.9207541, -1.9790317, -2.4335063, -1.9445292, -1.767669, -1.7854769, -2.0634897, -2.0707114, -1.7828038, -1.987555, -1.9973936, -1.7249879, -1.617046, -1.9723246, -2.5366223, -2.6620522, -2.2095118, -2.2030852, -3.3440301, -1.9094471, -2.7955794, -1.8991795, -2.0969698, -1.8752227, -1.8043672, -2.1406016, -2.1403084, -2.2700257, -2.9699655, -2.087489, -2.1303475, -1.8860812, -1.9416108, -1.6463115, -2.4058745, -1.9469516, -1.7948481, -1.9236622, -1.968078, -2.482212, -2.043224, -2.6402094, -2.669888, -1.9306325, -1.6355859, -2.4234571, -4.2518926, -2.8369408, -2.070781, -2.1696022, -3.0118892, -2.9100466, -1.9155637, -2.3898082, -3.611016, -2.1233342, -2.417018, -2.6857314, -4.0778794, -2.3300252, -4.301172, -4.639753, -2.4882767, -1.7226529, -4.915581, -2.089176, -2.3308697, -2.1675203, -2.1050093, -5.076467, -2.0216632, -2.3076777, -1.8784783, -4.519786, -2.816605, -6.4273553, -3.5487063, -2.7025511, -2.7042325, -2.0779943, -1.8412688, -2.822589, -3.3284762, -3.7763994, -3.213167, -2.7693353, -1.9806886, -2.5737548, -3.1934195, -2.1217012, -2.1747608, -1.9155222, -2.1172097, -2.39838, -1.9219064, -2.439878, -2.5006132, -5.60645, -2.0933144, -3.2653193, -3.3058648, -3.427139, -3.3744586, -2.867972, -2.6194758, -1.8476988, -3.124068, -2.5218716, -1.6921393, -5.984711, -2.1221485, -2.6376462, -5.501952, -2.9553864, -2.7800412, -4.575756, -2.4023063, -2.88531, -3.1735258, -6.147703, -3.7064834, -2.2638023, -2.342982, -3.5818238, -5.544716, -3.0300126, -5.0124764, -5.1720357, -2.489125, -2.1045215, -2.5063248, -2.5694091, -2.4880934, -4.0698066, -3.3531225, -3.9052632, -3.8701982, -2.6745663, -3.0083475, -4.558422, -3.5705185, -2.1124594, -2.4647415, -3.4744031, -2.2037675, -2.4264262, -5.6101284, -2.4054873, -2.2422447, -4.917252, -1.9251585, -2.590822, -2.6595664, -2.2246978, -2.3974667, -2.8268957, -2.4082587, -1.9532785, -4.3572836, -7.100543, -1.9996116, -2.8446536, -3.6927261, -3.9367738, -2.9279373, -3.4739842, -4.2427716, -4.3492055, -3.573538, -3.8667417, -2.2903125, -4.8911166, -3.1270065 ], "pointIndex": [ 11, 1255, 255, 1125095316, 1225162176, 266281107, 145079851, 1823422636, 1444177912, 1468908580, 746670828, 1326526904, 1552504204, 1641656912, 1809083391, 42269167, 156643563, 500660808, 1613598470, 514128595, 1735397476, 943131624, 810301342, 1890323476, 1737317963, 1744212142, 1664960398, 1836727015, 827400922, 340694445, 1681448655, 997949940, 390304714, 1183284360, 1616489069, 462266295, 508799902, 930032643, 921531117, 1011764571, 718598253, 704388491, 1570811030, 972584919, 1400711983, 713078717, 789564898, 1610032627, 246278113, 1487608946, 1729543265, 130011520, 922436406, 1608818438, 1548858618, 1239620460, 322350255, 1023052825, 14181121, 349967450, 361023885, 369940490, 1467829099, 1132872206, 1336230914, 621519519, 449632149, 1814336297, 1208394719, 1073046822, 498435614, 658340617, 1352005, 1664189276, 1404052473, 1826399365, 616785564, 1837282565, 769356216, 970320150, 1367241621, 1334791867, 1112420348, 847842300, 995865010, 1056532534, 1374257984, 1928407706 ], "storeSequenceIndicesEnabled": false, "size": 255, "capacity": 256, "initialAcceptFraction": 0.125, "timeDecay": 1.0e-4, "sequenceIndexOfMostRecentTimeDecayUpdate": 0, "maxSequenceIndex": 1256, "compressed": true, "randomSeed": -566338866570349155 }, { "version": "2.0", "weight": [ -1.6110169, -1.6257101, -1.6132237, -1.6336024, -1.6341721, -1.6298529, -1.632508, -1.6436764, -1.6744068, -1.6673356, -1.6571995, -1.662185, -1.6644176, -1.7309585, -1.6500595, -1.670506, -1.802056, -1.7575324, -1.80587, -1.7163657, -1.7433038, -1.674397, -1.9227827, -1.8037908, -1.8172027, -1.6667875, -1.7015543, -1.8367963, -1.7550453, -1.6542269, -1.697557, -1.7011623, -1.9053563, -1.8065615, -1.9608865, -1.789415, -2.0639627, -2.0471902, -2.0799065, -1.8248667, -1.9222915, -1.8206872, -1.8429751, -1.7309147, -1.6954039, -2.3076153, -1.9629672, -2.556063, -1.9714468, -2.0777094, -1.9243582, -1.9282019, -1.7226651, -1.7366803, -1.7797271, -1.8666673, -1.8559352, -2.0115576, -2.0343313, -2.3465438, -1.7615066, -1.7925524, -1.7505562, -1.8233827, -1.7639633, -2.5499158, -2.0778117, -2.393876, -2.1003664, -2.4747236, -2.0314233, -2.6079473, -2.0488465, -2.0726097, -2.420869, -2.1173067, -3.612475, -2.2708921, -2.2564926, -2.619866, -2.0709743, -2.1717794, -2.234867, -3.5616586, -1.8582594, -2.2900496, -2.5066276, -1.7869142, -2.2555428, -1.739632, -1.7395467, -2.7097666, -2.593255, -2.9155746, -2.1162503, -2.8907096, -3.022455, -2.0814097, -1.9743068, -2.6041746, -2.7876935, -2.1046832, -2.2939086, -1.9349879, -1.9833627, -2.1678498, -2.122495, -1.9412091, -1.8106226, -1.8935112, -2.7455416, -2.1053557, -2.0693269, -1.9052274, -1.8595452, -3.2098026, -2.1161914, -2.6492712, -2.1443713, -2.5484862, -2.5748754, -1.8049053, -1.8047763, -2.359784, -2.242467, -2.145636, -1.7720666, -1.8494686, -2.4786148, -3.2393236, -2.545857, -2.5782166, -3.0330493, -3.2381384, -2.7825084, -4.427443, -2.4144044, -2.4751902, -2.1578116, -2.694748, -4.1466045, -3.1840563, -2.1466255, -2.6621218, -3.1598535, -2.0791852, -2.5672572, -2.3185058, -2.7774062, -4.564393, -2.682265, -2.536275, -5.773803, -3.7649782, -3.791073, -2.53297, -2.7084506, -3.979404, -2.3734815, -2.8669748, -2.7112288, -2.3446472, -2.3289793, -2.5032165, -3.599362, -2.8568487, -2.863185, -4.8855476, -8.4651, -2.6190147, -3.374161, -3.6828594, -2.9956791, -2.5724895, -3.271289, -2.27042, -3.229629, -2.7546244, -3.3204, -1.8723733, -2.225646, -6.912936, -3.2054763, -4.020286, -8.263332, -3.6173582, -2.6950696, -4.516153, -4.0550213, -4.3354163, -2.9266644, -3.224055, -4.048556, -4.0799303, -3.4536102, -2.6236393, -2.9264743, -4.9663267, -2.129841, -2.8336856, -3.5423813, -3.6727676, -3.2670007, -2.616068, -3.2305954, -3.4472659, -3.2471404, -2.6500194, -2.8602796, -1.9934101, -3.1204846, -2.2264602, -2.9697616, -6.267233, -3.3636794, -7.565011, -3.5965343, -1.9816792, -2.0770934, -1.9365543, -2.0132627, -2.8048935, -4.533492, -2.4005785, -5.5340495, -2.0961595, -2.2101908, -2.0628667, -2.1616464, -2.7200656, -2.3370745, -4.169037, -6.5144353, -2.5519133, -5.150039, -3.290528, -4.880377, -2.9813533, -3.8787777, -6.4337726, -2.9560385, -3.278851, -3.3013442, -3.0591831, -2.538268, -1.9257783, -2.6350656, -2.376288, -4.180156, -2.671247, -6.815842, -3.3597534, -2.939458, -4.6065555, -2.9247332, -1.9990978 ], "pointIndex": [ 6, 1255, 256, 856366176, 1331580477, 121162326, 1861397757, 1784140675, 722625927, 369512698, 999326733, 631722989, 1147316518, 1889250899, 676780164, 948684465, 823038541, 58269054, 495469040, 867805346, 849223592, 821504320, 558589563, 1557329491, 832437078, 29889774, 1526663079, 1698982164, 464463946, 1587517277, 69230377, 1550349704, 884708891, 1714424156, 1320667169, 158292080, 579023462, 611679432, 1030184143, 211940121, 795876162, 1703808486, 1738281610, 1786066150, 1465617222, 232889955, 23590000, 1347610470, 1502168760, 389273338, 548657299, 112569024, 1150635185, 749910194, 10760582, 1374598658, 928145740, 364345111, 534775007, 1345172731, 435641728, 1850689153, 1457779896, 577917354, 458279036, 520015476, 1256635884, 724898515, 1907397043, 548371635, 1238248680, 1598492494, 32791065, 639123069, 634188682, 1881397161, 674880170, 1385660437, 779881167, 1149958022, 864778067, 1885143112, 1006943369, 1209156139, 1638461945, 1223199723, 1902694839, 1917072287, 1249 ], "storeSequenceIndicesEnabled": false, "size": 256, "capacity": 256, "initialAcceptFraction": 0.125, "timeDecay": 1.0e-4, "sequenceIndexOfMostRecentTimeDecayUpdate": 0, "maxSequenceIndex": 1256, "compressed": true, "randomSeed": 4189210767075612828 }, { "version": "2.0", "weight": [ -1.5809543, -1.6052395, -1.5824018, -1.6341741, -1.6220462, -1.6090232, -1.587091, -1.672407, -1.7943244, -1.6540173, -1.6431609, -1.7253053, -1.656684, -1.7000749, -1.5897003, -1.7035328, -1.7050048, -1.7974013, -1.8766737, -1.7098727, -1.8727963, -1.710227, -1.6779032, -1.7963215, -1.7875885, -1.6611732, -1.6593343, -1.8127413, -1.8638108, -1.6368163, -1.5975319, -1.7131653, -1.7733179, -1.754794, -1.7803135, -1.8625493, -1.8076078, -2.101797, -1.9411423, -1.9826176, -1.7513057, -1.915989, -2.0829697, -1.7271876, -2.0167289, -1.9224572, -2.0267813, -1.8872782, -1.9540212, -1.8734661, -1.8287128, -1.8533505, -1.6984493, -1.7122878, -1.767857, -1.833617, -1.8400757, -1.9171269, -1.8674517, -1.67116, -1.650148, -2.213368, -1.6337502, -1.9484588, -2.0833864, -1.794819, -1.8741286, -1.7609497, -1.8035247, -2.120493, -1.8810593, -2.0289762, -2.8589911, -2.7678647, -1.8345987, -2.4043863, -2.262942, -1.956295, -1.9800524, -2.6081913, -2.3866434, -2.3147933, -1.8962301, -2.3161876, -2.0217319, -2.3371081, -2.0991838, -2.1103528, -2.0742226, -2.9598522, -2.7799296, -1.9263036, -2.0695686, -2.340692, -3.773643, -2.1007228, -2.529532, -2.0259535, -2.5129123, -2.2907164, -1.8977658, -1.9150738, -1.8403314, -2.215647, -2.2819843, -1.8791007, -2.59138, -1.7411674, -2.092544, -2.0886123, -2.1413665, -2.1140273, -1.920856, -1.8703722, -2.0212836, -2.1943898, -2.301725, -2.5547743, -2.0424213, -2.4508665, -2.4707499, -1.8075922, -1.8725858, -3.5640264, -2.6105704, -2.165559, -2.1232579, -2.6026196, -3.8884327, -2.1737967, -2.728757, -2.7798426, -2.0043423, -2.439043, -2.4831007, -1.8531009, -2.0460627, -2.9669995, -3.371271, -2.7603664, -5.145329, -3.5285287, -1.9487286, -2.1082284, -2.2038436, -4.115193, -5.2521424, -3.1030037, -3.3301845, -2.8608727, -2.355765, -2.9226215, -5.292759, -2.8541307, -5.8843527, -2.9329383, -4.2045536, -2.4997535, -2.1682842, -3.929541, -2.8143623, -3.2451994, -4.985799, -2.5752323, -5.0215697, -3.2431254, -2.9068696, -2.3326433, -5.0619807, -4.032271, -2.251037, -2.4568508, -2.573857, -3.296703, -3.1517873, -2.388365, -3.1821537, -2.3441288, -3.32923, -3.3475256, -5.413077, -4.935657, -3.4767509, -3.1256387, -2.2770538, -2.696921, -4.8854313, -3.588679, -7.3792324, -3.8347638, -4.33273, -3.9180882, -2.7039533, -2.640478, -3.0467978, -2.8800092, -3.728069, -2.8766658, -3.2154396, -3.0740054, -2.8467777, -3.4180677, -2.7143333, -2.076263, -2.0485897, -5.0210037, -2.7091832, -2.9298787, -2.4252849, -3.3718836, -2.4471207, -3.6353476, -2.2861705, -2.7411432, -5.5288014, -1.7537444, -3.9634967, -2.5614748, -4.5685825, -2.5693524, -2.8589904, -4.052606, -3.0085058, -8.247205, -3.4645865, -2.7214427, -2.5838864, -4.3286037, -2.4010165, -3.414822, -2.885385, -2.4666367, -4.323651, -3.8383358, -3.139137, -3.4275022, -3.237697, -3.1840107, -2.252056, -3.050251, -3.1270928, -2.7886403, -3.3036432, -3.7236898, -4.4391513, -3.3557675, -2.2811415, -4.0825143, -3.5760353, -3.5455575, -2.8113878, -3.084719, -5.0754757, -6.223174, -2.2824337 ], "pointIndex": [ 1, 1255, 255, 1017284302, 1089734496, 10949292, 1652093439, 1596861574, 1262420369, 30885259, 1899089182, 702589526, 226343027, 650443794, 938940964, 204420704, 449388811, 684278980, 484967400, 1865413300, 624197316, 792817202, 1057627947, 1911730982, 49351379, 269342876, 1366723898, 465991636, 317674381, 568846759, 474593987, 25762502, 397721334, 876847266, 945371139, 786347852, 1099848013, 1463711320, 1779232933, 1218049435, 1038543087, 1886678781, 1338489441, 1355967911, 191822678, 73117530, 1172672466, 1929280355, 265143882, 276538306, 286271887, 508121392, 1622063844, 952218103, 130496378, 500479695, 333865593, 467046039, 1913019693, 1509216529, 384146715, 1617139672, 1314713586, 1846961643, 962770663, 1626111478, 456196157, 1804321800, 518594326, 547655169, 361125140, 92283015, 1293741157, 1103822982, 1531462748, 741344085, 721349132, 1695309884, 772484344, 435411073, 1857039100, 915276005, 979134019, 1420299320, 1245253122, 1506772618, 105372024, 1976398838 ], "storeSequenceIndicesEnabled": false, "size": 255, "capacity": 256, "initialAcceptFraction": 0.125, "timeDecay": 1.0e-4, "sequenceIndexOfMostRecentTimeDecayUpdate": 0, "maxSequenceIndex": 1256, "compressed": true, "randomSeed": 5716410955948198572 }, { "version": "2.0", "weight": [ -1.4723679, -1.4748684, -1.4796734, -1.4989817, -1.4847839, -1.5271605, -1.4858755, -1.6206623, -1.5259806, -1.5336944, -1.5135266, -1.5312008, -1.544349, -1.4907415, -1.5200644, -1.8607095, -1.71595, -1.6295044, -1.6614683, -1.5787373, -1.5668296, -1.6186606, -1.7220145, -1.6395398, -1.637389, -1.5587585, -1.6250982, -1.574669, -1.5053121, -1.5367, -1.6281161, -1.9685827, -2.0332274, -1.8441141, -1.8605316, -1.6806389, -2.0616343, -1.7017778, -2.018361, -1.6003023, -1.7140663, -1.5801271, -1.5731896, -1.6345347, -2.0808349, -1.9523935, -1.7433275, -1.9722502, -1.6819129, -1.7351564, -1.6872911, -1.6488663, -1.6682271, -1.6863096, -1.7568988, -1.6824553, -1.9729172, -1.5136033, -1.5075728, -1.9928776, -1.7682136, -1.9389695, -1.6388328, -2.048581, -2.7856648, -2.678215, -2.0568538, -2.279208, -2.3106277, -2.098067, -2.046037, -2.4830816, -2.1151178, -2.151959, -2.2791963, -1.7717863, -2.2011366, -2.4435546, -2.215945, -1.8173331, -1.6686308, -1.7595752, -1.8025055, -1.6080472, -1.6296883, -1.7254086, -3.258416, -2.5550792, -1.8049688, -2.0818071, -3.0147269, -2.116284, -2.5157568, -2.0794017, -1.9321847, -2.090745, -2.0223753, -1.7609588, -1.833841, -3.121823, -2.0643542, -2.269138, -2.14882, -2.6094937, -2.3333528, -2.1854448, -1.7575346, -1.717381, -1.8458064, -1.797531, -1.922467, -2.4076557, -2.198741, -2.005758, -2.3674817, -1.5723048, -2.205375, -1.9498025, -1.6438376, -2.7989624, -2.2850306, -2.0528595, -1.8120686, -2.024037, -1.9523389, -2.3633564, -2.2165782, -5.296845, -2.6003857, -3.3466606, -3.048333, -2.975929, -4.850967, -3.008884, -2.6241615, -3.4881067, -7.5118446, -3.2324533, -2.4897316, -2.1628304, -3.6258216, -3.848587, -3.0612652, -2.6791778, -3.2420094, -2.194795, -2.1248574, -2.9027042, -2.3620207, -2.8662558, -2.6906807, -1.7725453, -2.0574784, -4.02859, -3.6893065, -3.6238759, -2.5562239, -3.8399627, -3.0008607, -4.83231, -2.5115073, -5.7743516, -2.8788157, -2.198657, -2.6013656, -1.9853501, -4.5019355, -2.4918034, -6.2223206, -2.4242911, -1.8496494, -3.8475597, -4.650009, -3.535911, -4.1198554, -2.7007039, -2.8500903, -2.1353986, -3.5506113, -2.997891, -4.204195, -4.4949207, -3.9670541, -2.1987236, -4.757135, -5.226631, -2.7338564, -3.3281708, -4.295948, -2.6056557, -2.1256652, -3.6111758, -2.6671848, -3.766492, -2.9153528, -4.150468, -4.9099946, -2.6949108, -1.8693603, -4.0355754, -4.0624247, -2.5225918, -2.5343404, -2.8199022, -3.2567928, -2.29005, -2.2990692, -3.128523, -3.4083765, -4.047287, -2.9685643, -2.8527641, -2.6012478, -4.909524, -2.082991, -3.2168367, -2.2418272, -1.862048, -2.1094995, -2.2545705, -3.5991924, -2.4222345, -3.9604158, -2.5520163, -3.1371665, -3.4637997, -2.9052608, -2.9302106, -3.5320182, -3.6258898, -2.5361264, -4.311318, -1.7770904, -2.2072034, -2.2768364, -3.1182168, -2.3346496, -2.716515, -2.167842, -2.8909123, -3.067276, -5.121871, -2.5801742, -2.2827775, -2.8184876, -2.1159203, -2.0943155, -2.2802548, -3.1016576, -2.298147, -5.552916, -3.8240209, -3.769819, -4.703353, -4.1772947 ], "pointIndex": [ 2, 1251, 255, 1580393585, 937796393, 369078070, 1088167617, 1820918241, 107317162, 702518978, 180405041, 1542201070, 1152682873, 525044586, 190877682, 1447823620, 389110928, 169082333, 225169030, 76478458, 673272180, 1582572407, 1170513083, 1761994507, 1762524214, 860487169, 1138576973, 989335400, 1211982194, 374589419, 866698654, 1165170093, 83589305, 1044900109, 1061977604, 366177616, 1673983651, 649306908, 82352927, 719766844, 788108580, 909109540, 1536814447, 1113609650, 1595319572, 1819558734, 748175170, 570534497, 291551019, 1665537188, 53056636, 118843013, 1841587709, 509988965, 1681295645, 1837604773, 727677842, 28256415, 1720623001, 554211226, 148756275, 822589756, 419589759, 1527317775, 161592381, 1866867503, 1169484848, 967047195, 539531095, 574220620, 1360574594, 1325502980, 199192459, 1139894476, 1418390616, 686476847, 214632009, 1699060011, 457644879, 830359452, 1326960, 1094603602, 1163385703, 1692138214, 1252348902, 1298375863, 1502677091, 1952872299 ], "storeSequenceIndicesEnabled": false, "size": 255, "capacity": 256, "initialAcceptFraction": 0.125, "timeDecay": 1.0e-4, "sequenceIndexOfMostRecentTimeDecayUpdate": 0, "maxSequenceIndex": 1256, "compressed": true, "randomSeed": -5848974963479365812 }, { "version": "2.0", "weight": [ -1.585127, -1.5865705, -1.5962614, -1.6085825, -1.596154, -1.630115, -1.6023626, -1.6131486, -1.6124258, -1.6522865, -1.6071877, -1.7168533, -1.6414491, -1.6560875, -1.6027256, -1.7860086, -1.6391898, -1.7215892, -1.6661743, -1.7551733, -1.6553258, -1.8516773, -1.7214888, -1.797124, -1.8066955, -1.6430796, -1.6840556, -1.821842, -1.715812, -1.7092791, -1.6264325, -1.8273116, -1.8516202, -1.8577257, -1.8426911, -1.8244375, -1.8282402, -1.7095118, -1.8318115, -1.9583569, -1.9977958, -1.85578, -1.6765971, -2.2481804, -2.2947147, -1.9133995, -1.8031982, -2.179512, -2.439674, -1.8818381, -1.8582158, -1.9036092, -1.7120684, -1.8141488, -1.7251884, -2.0264452, -1.8911572, -1.8964896, -2.2973378, -2.332079, -1.8439084, -1.7138196, -1.7435124, -1.8923931, -2.0120213, -2.3480647, -2.4271514, -2.6368625, -2.3307495, -1.9175985, -2.4014747, -1.911802, -1.8705333, -2.248779, -1.97523, -1.9332904, -2.081916, -2.0845778, -1.8409702, -3.1433861, -2.1671054, -2.2489593, -2.0810833, -1.9405694, -1.9257721, -1.6870952, -1.7625767, -2.321876, -2.5269024, -2.659979, -2.3002388, -2.2201302, -2.3069, -2.1379435, -3.4479458, -2.259122, -2.186968, -2.7688255, -2.7101648, -1.8897277, -2.687137, -2.4541807, -2.3081462, -2.0229635, -2.012898, -1.8474618, -2.2427373, -1.9241083, -2.318026, -2.2848606, -1.7845504, -2.4813504, -2.520892, -2.1248918, -1.9119974, -1.9928011, -3.4082627, -2.4585147, -2.3150163, -2.4207702, -2.5795302, -2.2035196, -2.4063442, -1.8016686, -2.0338738, -2.1928742, -1.7814916, -2.5912824, -3.2466595, -2.373099, -2.3038535, -3.493652, -3.802891, -2.490586, -2.7070038, -2.9038296, -3.8930063, -2.906122, -5.50004, -2.2162237, -1.9646659, -2.7175615, -3.1687071, -2.3840399, -2.0239818, -1.9653404, -6.275639, -4.7269425, -2.6616986, -2.9380362, -3.3301127, -2.207981, -2.511488, -2.1947012, -3.2296078, -2.3584638, -2.737618, -3.1801414, -4.861876, -3.4092803, -5.0118575, -2.5117936, -3.616494, -3.2554538, -3.9249454, -2.7289634, -3.2955859, -5.0465126, -5.5747933, -4.9433146, -2.879198, -2.9027388, -1.7449051, -2.3635547, -2.967493, -4.3145137, -2.5878572, -2.690465, -3.0125632, -3.3281112, -3.3097851, -2.305855, -3.4226742, -3.9484427, -4.643662, -2.438772, -4.3584895, -3.1132748, -5.7082057, -3.675992, -3.7442765, -3.782986, -2.5213556, -4.175735, -2.4869661, -3.764512, -3.3696184, -3.76912, -2.955294, -2.455391, -3.1660938, -3.0430512, -2.9759614, -2.8468833, -2.6680672, -2.6251414, -3.0337079, -2.1241593, -2.333803, -2.6122713, -2.257843, -2.6162577, -2.5634978, -2.5290399, -2.7698011, -4.878759, -2.4674652, -4.0861626, -2.8145604, -2.60121, -3.1464317, -2.9476178, -2.1492608, -3.8819375, -3.5344517, -3.1717658, -6.760232, -2.2543252, -2.871668, -2.0001733, -2.7306046, -2.9972532, -2.0358295, -3.7240984, -3.764603, -4.331714, -3.5213747, -2.6330638, -2.3694458, -2.447882, -2.9419396, -4.247825, -2.8564208, -3.6029963, -2.990521, -3.9543157, -2.5195994, -2.9512708, -1.9221497, -2.3364508, -2.380883, -2.5922043, -2.7262871, -2.2678275 ], "pointIndex": [ 3, 1256, 254, 1198457468, 1360952450, 26435319, 922891573, 1706818842, 291132708, 351232349, 1635555717, 1039896802, 1655975837, 1270526413, 284925168, 119876470, 377448719, 422047276, 689131536, 1610442304, 764310952, 1031548427, 999931524, 1834911269, 608116459, 65495470, 1912444118, 669922830, 1541005390, 1176102810, 1607813297, 447779532, 1448688105, 826406687, 1845115835, 1829745202, 1675928325, 1163469776, 783631286, 1021157742, 838796421, 1029355220, 1576427283, 1479123821, 1553168870, 1255746814, 1802114069, 60950518, 161781672, 281234833, 1533432341, 1634075043, 1005880675, 1354111505, 1399435003, 1882301970, 334464726, 1125525131, 27011306, 658430381, 1673032764, 693793304, 833452546, 424407824, 165459134, 621642345, 1649361131, 216798098, 836256009, 1440847747, 555067145, 14824669, 1565147410, 1091818195, 672786451, 1580259905, 814844409, 5187055, 1264954531, 1034275911, 248635736, 1346824182, 1293371189, 1559256902, 1343891668, 1543671026, 1653822480, 1572339 ], "storeSequenceIndicesEnabled": false, "size": 254, "capacity": 256, "initialAcceptFraction": 0.125, "timeDecay": 1.0e-4, "sequenceIndexOfMostRecentTimeDecayUpdate": 0, "maxSequenceIndex": 1256, "compressed": true, "randomSeed": -7786205468076532075 }, { "version": "2.0", "weight": [ -1.4614998, -1.4620378, -1.4752388, -1.4637798, -1.4655621, -1.4821007, -1.4969317, -1.4724, -1.4756373, -1.4745526, -1.5583972, -1.4842486, -1.5277389, -1.5109748, -1.5362148, -1.5139849, -1.6300763, -1.5247805, -1.5487496, -1.5125206, -1.6450458, -1.7908546, -1.5639207, -1.6074495, -1.5013287, -1.6458435, -1.5291392, -1.5445955, -1.6785212, -1.7640712, -1.5476627, -1.5836003, -1.5833039, -1.6434343, -2.0564253, -1.5250986, -1.5665632, -1.6909691, -1.5759987, -1.7525314, -1.5801365, -1.9565464, -1.7089354, -1.8142347, -1.9809933, -1.5648323, -1.5719103, -1.6796517, -1.616994, -1.9254856, -1.58162, -2.0042083, -1.918308, -1.7683012, -1.667526, -1.5528598, -1.7119304, -1.7606535, -1.7034885, -1.8455615, -2.1602297, -1.7621607, -1.6108712, -1.6713388, -1.9926528, -1.9681088, -1.595653, -2.058484, -1.7006544, -2.3276198, -2.0781496, -2.2205381, -1.5307153, -1.6730161, -1.6707381, -2.025199, -2.0504923, -1.7690312, -1.6877911, -1.9043152, -2.062953, -1.6100355, -1.7021533, -2.6426606, -2.976421, -2.3672402, -1.8924923, -1.9037335, -2.3610914, -2.0577476, -2.0118337, -1.6866783, -2.6741467, -1.6573713, -1.8338802, -3.272017, -1.6896793, -1.8266575, -1.6926943, -2.1101823, -2.249881, -2.7457533, -1.9911, -2.1694999, -2.8206563, -1.9598428, -1.9498309, -1.8770298, -2.8078392, -1.747417, -2.0108464, -1.9295949, -1.7438056, -2.2001588, -2.4090858, -1.9628894, -3.2266276, -2.2227662, -1.9527277, -2.3317513, -3.043289, -2.3646955, -2.2974114, -2.3026936, -2.0654562, -2.101165, -2.0241485, -3.2078626, -2.1115484, -3.375203, -3.4619694, -3.1447875, -3.0205579, -2.9116719, -3.0496647, -5.631469, -2.851554, -1.872976, -3.534869, -2.4107833, -2.4627678, -3.9677198, -2.5221946, -4.2509003, -4.347851, -1.7428657, -2.2097461, -3.1804452, -1.7241619, -2.1284466, -2.7373052, -6.491934, -5.604398, -2.7174814, -2.0809023, -2.070087, -3.1101959, -2.0747929, -1.7276424, -2.1270373, -2.531271, -2.9381006, -2.3071568, -3.4840255, -3.1525218, -2.1313589, -1.7235185, -4.1241984, -4.0011544, -4.690316, -3.1714647, -4.109093, -3.5499568, -3.7116437, -2.3376155, -2.4696362, -2.3397548, -3.4042199, -4.819347, -2.3679986, -4.512915, -2.5042548, -3.8902445, -2.830531, -1.718399, -6.8237643, -2.9122827, -2.0612462, -4.492936, -2.6069682, -2.9106145, -5.3700852, -4.678593, -1.8033797, -2.726209, -2.9032097, -2.6872823, -2.6334465, -2.3258445, -3.0594003, -2.6481984, -3.4110737, -2.656895, -4.843449, -2.7703316, -3.7980182, -2.426165, -4.9782662, -2.9232721, -5.033615, -3.3354278, -2.5321763, -2.607751, -2.2415302, -2.4685838, -3.2702944, -3.4449472, -5.0143695, -3.24149, -2.8240068, -2.4171066, -3.502546, -2.3196597, -5.5846643, -5.161543, -1.9018593, -3.8895326, -3.0670464, -2.640248, -3.7918057, -4.233302, -4.47031, -2.205188, -3.6447008, -4.1468525, -3.8840435, -3.281042, -2.0309126, -2.9352825, -2.4804878, -6.0481863, -3.061815, -7.0423317, -3.2203004, -3.7399385, -5.456574, -2.5922499, -2.6433997, -3.053929, -2.068918, -2.4161696, -2.7882383, -3.3886878, -3.43396, -3.1441133, -3.9203095 ], "pointIndex": [ 0, 1226, 256, 849056237, 1330298459, 142932, 101177453, 916069392, 1286682669, 202402972, 950065220, 823981583, 900478237, 252922177, 317882587, 379601170, 1350790257, 1414449496, 675557575, 514428925, 629544045, 937023410, 993595804, 1643487381, 1162308875, 262947398, 1078715087, 716065612, 308881963, 1458484511, 31188202, 363072657, 395901610, 1628006938, 1133723048, 504229182, 1570891080, 833597151, 758041359, 1774356767, 1606186339, 818151225, 1802949039, 1044115799, 1482425745, 1123123331, 1421308938, 254357493, 112360527, 1735001320, 26132880, 287318462, 1675444151, 299646686, 1391296817, 378142025, 1386032200, 546779461, 343148943, 1475705046, 1842922609, 370456911, 1559704248, 71726850, 86227771, 782278457, 3370593, 1088871044, 369336061, 1304912692, 1540853432, 19260151, 559985974, 810439446, 940631817, 881244164, 713562624, 978060543, 724323672, 1191640444, 1110303134, 827206577, 1679472034, 945460625, 519113940, 1014641438, 1361991718, 1723655006, 1226 ], "storeSequenceIndicesEnabled": false, "size": 256, "capacity": 256, "initialAcceptFraction": 0.125, "timeDecay": 1.0e-4, "sequenceIndexOfMostRecentTimeDecayUpdate": 0, "maxSequenceIndex": 1256, "compressed": true, "randomSeed": -6279845217872163458 }, { "version": "2.0", "weight": [ -1.5291942, -1.5421118, -1.5291986, -1.5688084, -1.5456706, -1.5932994, -1.5844495, -1.6483736, -1.5697545, -1.602868, -1.5526233, -1.5970722, -1.6185194, -1.5882381, -1.6166805, -1.7459667, -1.6640987, -1.5835897, -1.6019938, -2.0524082, -1.6345209, -1.679469, -1.5700582, -1.6075442, -1.6975076, -1.643985, -1.6761684, -1.6274849, -1.6280085, -1.7651222, -1.6474775, -1.7666135, -1.915021, -1.6711018, -1.9053582, -1.6919777, -1.5960433, -1.6567732, -1.7585815, -2.2147882, -2.2913113, -1.6530101, -1.761255, -1.7261058, -1.7055616, -1.597077, -2.0509222, -1.6162806, -1.957403, -1.8172238, -1.7253511, -1.7148412, -1.661545, -1.7858291, -1.7208059, -1.8286492, -1.8421198, -1.7606053, -1.6374458, -1.9475904, -1.8031894, -1.7179695, -1.653238, -2.505366, -1.8491501, -1.93492, -2.1802382, -1.7455585, -2.622658, -1.9209028, -1.9228863, -2.0540936, -1.7093084, -2.35584, -1.6626124, -1.7910569, -1.6780435, -2.0860777, -1.9547757, -2.6014528, -2.4743774, -2.6695936, -3.5200083, -2.4638808, -3.6596913, -1.772456, -2.8461657, -2.3185823, -2.1135888, -1.922694, -1.7556864, -1.7284646, -2.1148572, -2.646042, -2.5979016, -2.307461, -2.490812, -2.1498966, -2.2652745, -1.9508317, -3.3524008, -2.6338513, -1.8379326, -2.0284708, -1.9257252, -1.780004, -2.5826719, -2.2029107, -2.1302207, -1.886495, -1.8473617, -1.9395412, -1.908353, -2.0144832, -2.8429317, -2.0034041, -3.0488722, -2.0849218, -1.97875, -2.5612664, -2.8554602, -1.9041004, -2.3833334, -1.9720411, -2.2629402, -2.0808895, -1.6719692, -2.763051, -2.5273015, -1.9659427, -4.1709867, -3.3429592, -2.7491894, -2.3433127, -3.0188322, -5.337598, -2.0138423, -3.548501, -3.0431871, -3.450968, -2.0977263, -3.5403953, -5.311833, -2.9877274, -2.6960602, -2.1924443, -2.0940046, -3.608719, -3.313874, -1.9078962, -1.7662423, -2.491588, -2.115966, -3.0886564, -3.761888, -3.0473785, -2.3578377, -3.1963868, -2.0134742, -3.3740778, -3.6406064, -3.475895, -2.6934884, -3.090138, -2.8647952, -4.240299, -5.058313, -3.3151815, -2.7376516, -4.3686676, -4.85089, -1.941006, -3.5042632, -2.961024, -3.1213286, -2.3416991, -2.4683144, -3.9237976, -2.263143, -2.2315419, -3.6002877, -4.234399, -2.9994457, -1.8865396, -5.071279, -3.388649, -3.2096522, -3.0233998, -3.828761, -4.304722, -4.7664814, -4.2962723, -3.6441188, -3.5908008, -2.7482326, -2.2110183, -2.3329499, -2.7433815, -2.954774, -2.034433, -4.5096397, -3.4059017, -3.5646608, -3.219465, -2.679943, -2.9957838, -6.4067445, -3.1729321, -2.4494479, -2.172322, -2.711321, -4.449049, -3.6060262, -5.8164296, -2.6889763, -2.3064306, -5.6516323, -4.252806, -2.296698, -2.504121, -2.5867362, -2.494824, -2.026782, -4.488038, -2.5933194, -2.6822002, -2.3643074, -2.945674, -2.6898968, -3.0333946, -3.0024295, -2.045695, -2.069347, -3.964504, -6.586258, -4.176414, -3.3635936, -2.273528, -2.857833, -3.2752182, -3.1722167, -2.9160614, -3.245185, -5.39917, -2.0929382, -2.39346, -3.625814, -4.11937, -2.0917597, -2.3497598, -2.4011214, -3.5981495, -2.1429238, -1.8076006 ], "pointIndex": [ 0, 1247, 254, 1207393395, 1282199790, 1517355764, 876092348, 1851235249, 1031800199, 382474110, 1568060881, 1438044522, 980294924, 1319389343, 300434136, 530712929, 1481478031, 413712687, 473858392, 544332911, 40496455, 750176439, 944546922, 1842198435, 264523950, 1185384991, 232310, 1422329646, 328917204, 1779388631, 674935981, 1746595928, 1637280667, 1198686133, 1793063872, 1330240837, 1433095016, 1837934942, 760884769, 690073014, 785842974, 1094420146, 956486752, 1191038798, 1807988695, 141741757, 1238555458, 355134539, 402731252, 1937625075, 777053484, 948757244, 1053514550, 155850445, 1903432337, 1606054283, 1619661043, 1739808340, 888819597, 1528127005, 1644004700, 971895458, 46555885, 1170026704, 443882870, 556088262, 1784744312, 1547430962, 492864216, 1693527228, 531323225, 547909999, 1213620485, 1055342901, 1667520910, 835400368, 1505096003, 710755318, 734421719, 887583508, 1880797967, 1782520631, 921168046, 1628462655, 1381801248, 1642730788, 1806492239, 1533567 ], "storeSequenceIndicesEnabled": false, "size": 254, "capacity": 256, "initialAcceptFraction": 0.125, "timeDecay": 1.0e-4, "sequenceIndexOfMostRecentTimeDecayUpdate": 0, "maxSequenceIndex": 1256, "compressed": true, "randomSeed": -6736865570805532185 }, { "version": "2.0", "weight": [ -1.6270272, -1.6364937, -1.6316625, -1.6581007, -1.657373, -1.6732012, -1.6403781, -1.666901, -1.716661, -1.7204353, -1.6693875, -1.6810037, -1.6786739, -1.6509911, -1.6405945, -1.6681459, -1.7152675, -1.9488813, -1.7760447, -1.9936274, -1.7521713, -1.7592715, -1.902406, -1.6905272, -1.8479546, -1.751047, -1.7905741, -1.6934325, -1.6789583, -1.6701736, -1.6564382, -1.7715598, -2.0151927, -1.9195334, -1.8028382, -1.9663247, -2.1656272, -2.296082, -1.840917, -2.1362383, -2.0696712, -1.8631237, -1.767524, -1.7651434, -1.8536345, -2.0365477, -2.1101491, -1.7590829, -1.7541672, -1.8802052, -1.9907873, -1.883789, -1.9589584, -1.937726, -1.7951763, -1.9418979, -1.9566839, -2.0244322, -1.9384271, -1.6788492, -1.7451121, -1.7861428, -1.6852266, -2.5215356, -1.9013051, -2.037079, -2.0577483, -3.0182664, -1.9487162, -1.9190514, -1.8165746, -2.0850487, -2.0822523, -2.2335765, -2.4680552, -2.363522, -2.3838506, -2.204269, -4.3974123, -3.3375227, -2.7195897, -2.4727077, -2.1204584, -2.6764693, -2.1020103, -1.989323, -1.9542483, -2.167528, -1.769592, -2.1437624, -2.7654886, -2.1714416, -2.6895342, -2.7113855, -2.3920598, -2.157461, -1.9640378, -1.7977059, -1.7815706, -1.9780982, -2.2057226, -2.116635, -2.3563638, -1.9742705, -2.9931417, -2.392908, -2.28999, -1.9452024, -2.6425848, -2.6401994, -1.9202209, -2.5856595, -2.1273446, -2.2240243, -2.129439, -3.3542998, -2.2884893, -2.4859428, -2.2571838, -1.7519403, -1.9292167, -1.8874947, -2.1244519, -1.9506923, -2.0909913, -2.3313808, -1.7003025, -2.9537804, -3.5986166, -2.7357392, -2.283334, -4.7310257, -2.9838123, -3.3083916, -2.284723, -4.025685, -3.6454818, -2.046851, -3.136488, -4.9756856, -1.9540596, -5.2797184, -4.224498, -3.102977, -3.69534, -2.6488783, -3.182275, -3.6669807, -4.6564136, -3.294526, -2.7974358, -3.3393862, -3.445514, -3.427641, -3.7099073, -2.8673236, -3.67386, -4.8217087, -4.5653443, -3.4503992, -3.6306133, -5.5046973, -4.169761, -2.6254187, -4.3230076, -3.2810805, -2.551275, -3.7663214, -2.8015034, -4.2319894, -2.425944, -2.796178, -2.7693992, -2.4642992, -2.7877843, -4.520319, -3.8294418, -4.1778226, -2.1968145, -2.6842058, -5.268678, -3.4234889, -3.6759183, -2.393645, -4.843274, -2.8643084, -3.3054264, -4.0527077, -3.1848598, -2.6404333, -4.456477, -2.7478602, -2.5648475, -2.6379373, -4.831928, -2.3397806, -1.9601725, -3.099352, -2.1764588, -3.9158375, -2.2227128, -2.9893708, -2.8553996, -2.6301746, -2.118248, -2.6538143, -5.337449, -1.9940683, -2.7780764, -3.9678357, -3.0879936, -3.0710263, -3.4833937, -2.4810443, -4.2350316, -4.8945765, -3.2219045, -2.769202, -3.0021436, -2.9778628, -3.6210992, -2.2141361, -2.673273, -3.2167678, -3.5103796, -8.597359, -3.5799994, -2.4545393, -4.5522933, -2.4809632, -4.8563533, -5.3535905, -4.0583744, -3.7414627, -4.6650076, -2.496172, -5.1984487, -2.5022283, -3.1943207, -2.0961633, -4.3724174, -2.932501, -2.277216, -2.0648792, -2.928093, -2.7486837, -3.541168, -2.4924767, -2.1827936, -2.2467203, -3.017348, -2.658529, -3.090261, -3.782347, -1.7620225 ], "pointIndex": [ 5, 1255, 255, 1956468551, 1616157286, 1609746451, 488452057, 930233117, 1906460260, 1725851027, 786295560, 153864773, 25689970, 1908503004, 281243365, 1314661265, 1468990517, 1176275018, 1622263040, 577357105, 1464775084, 709924167, 889810156, 1877489160, 627129837, 60480977, 1256707707, 522403349, 1632370727, 1704381890, 887374661, 442182691, 1755137153, 535785731, 1750574627, 1588771769, 551572559, 1056180673, 630785850, 1720527106, 699769889, 208720950, 1142427647, 928764231, 1489358879, 1139773552, 1028238333, 1522940943, 100212860, 264566646, 839567687, 308532422, 704930029, 310113401, 1787203725, 357426754, 1167751160, 1145759838, 1240995885, 58971194, 1280434039, 1530888301, 1606015708, 52961117, 968535734, 653293164, 726161111, 926860836, 503605708, 1699615712, 264175794, 985695770, 554952958, 595565852, 629290955, 646856226, 197718828, 751350228, 1545208118, 1702895684, 762738313, 1039790708, 878663156, 1636895505, 1299674101, 1169950849, 1387813939, 1863833561 ], "storeSequenceIndicesEnabled": false, "size": 255, "capacity": 256, "initialAcceptFraction": 0.125, "timeDecay": 1.0e-4, "sequenceIndexOfMostRecentTimeDecayUpdate": 0, "maxSequenceIndex": 1256, "compressed": true, "randomSeed": 6873559043919805206 }, { "version": "2.0", "weight": [ -1.5478095, -1.5580735, -1.5586025, -1.588912, -1.5624557, -1.5931304, -1.5787097, -1.6516792, -1.7199396, -1.5835112, -1.5690824, -1.6260145, -1.6317056, -1.5840569, -1.6037713, -1.7980132, -1.8133217, -1.7965556, -1.7716056, -1.5857275, -1.5960587, -1.7305709, -1.7159228, -1.7437992, -1.6637305, -1.6374578, -1.8194374, -1.6424956, -1.6265041, -1.7596669, -1.6393709, -1.8227845, -1.8477689, -2.161068, -2.0182776, -1.8059037, -2.1590114, -1.9517924, -1.7850544, -1.6919967, -1.6256903, -1.7500316, -1.6069838, -1.7542928, -1.9830415, -1.963632, -1.8992164, -1.7973434, -2.1416883, -1.6798558, -1.7398648, -1.6805445, -1.9159135, -1.8302265, -1.8452566, -1.7396388, -1.724929, -1.8845452, -1.6393856, -1.9198812, -1.799096, -1.7613573, -1.6581032, -1.8339019, -1.9424281, -2.7757666, -2.4357708, -2.515062, -2.4722068, -2.082221, -2.2053227, -2.277163, -1.8077579, -2.7880044, -2.4332013, -2.4218073, -2.0808065, -1.8147348, -2.215576, -1.8046377, -1.7593033, -1.777868, -1.7045307, -2.2772882, -1.9263648, -1.8515847, -1.6312764, -1.9708276, -2.3266296, -2.1762302, -2.0596678, -2.0727565, -2.1242344, -1.955638, -2.0269237, -2.80806, -4.395095, -2.7257683, -2.1824844, -2.2855716, -1.9568323, -1.9669816, -2.5572267, -1.7785479, -2.039832, -2.551597, -2.0521724, -2.0065117, -2.034989, -1.9030262, -2.016063, -2.2545946, -2.2300994, -3.4435954, -1.9981797, -2.0935466, -2.1631384, -2.1183298, -1.6487999, -1.9733895, -2.2379096, -1.8148649, -1.8340958, -2.0860653, -2.1912777, -1.8835979, -1.8014612, -3.1797936, -5.339011, -3.2961295, -2.7358942, -2.8153527, -3.3449876, -3.0131137, -3.142744, -2.559853, -2.584647, -5.9994397, -3.5015721, -3.2383192, -2.6384623, -2.6504884, -2.5027266, -3.348065, -2.329989, -2.7779088, -1.8919544, -3.3424976, -3.620949, -3.2293108, -2.8661213, -2.9987667, -3.2882886, -2.2421741, -2.9003553, -2.4627187, -3.7794378, -2.3688264, -3.7690911, -2.6497767, -3.440573, -2.2225194, -3.4665196, -3.1266437, -3.9963698, -2.394353, -2.536245, -5.682287, -2.7054744, -3.5295506, -3.164668, -2.7427077, -3.303546, -1.8590448, -2.207797, -2.018024, -2.0527718, -3.4058433, -4.380702, -3.5663502, -2.4080958, -2.711812, -4.338985, -2.8664718, -3.122034, -2.5750837, -2.2175708, -4.8892264, -3.1534848, -2.092666, -2.328548, -3.0831187, -3.136449, -7.84776, -6.210704, -2.9239645, -4.766644, -2.2623096, -3.40043, -2.3112707, -2.9403992, -2.5001543, -3.4736223, -5.2151012, -2.6916144, -3.540305, -4.12798, -2.7393646, -2.1685767, -2.746256, -2.8794262, -4.1864066, -4.8762226, -2.3647995, -3.9723904, -2.4144828, -4.3872066, -2.2839453, -2.4254746, -2.037719, -2.6945152, -2.326007, -2.9042437, -4.6150465, -4.993203, -2.8662229, -2.7774584, -3.4765794, -4.0050497, -2.058355, -2.7188106, -2.258685, -3.3639786, -4.753893, -4.302262, -2.3484764, -3.6190546, -2.398666, -5.012479, -2.397243, -4.971586, -3.7006304, -7.620705, -2.0435278, -2.7693655, -4.205434, -2.1007671, -2.8852465, -2.899561, -2.9529257, -3.2352219, -2.7577133, -2.4206066, -3.002688, -1.9380794 ], "pointIndex": [ 4, 1248, 255, 797085272, 917719120, 665845471, 611172034, 1738275277, 1155010306, 863175673, 502781864, 733921225, 1824565080, 798338759, 809817756, 333197546, 386844836, 879126480, 477362820, 1241127680, 629887312, 3698656, 1751740488, 1724705441, 486849765, 765800921, 302530205, 319812420, 1537887528, 1335616466, 715588314, 409087041, 1014476770, 131534629, 155377144, 519665801, 979042494, 556013783, 1262786447, 704272033, 1808017009, 1067124924, 983471314, 1115367593, 1777420339, 1551781689, 792743958, 1872401644, 1369229168, 176736649, 7387787, 1558023078, 191486482, 762348003, 1365673732, 341034796, 171526140, 25179000, 1076981259, 1260361787, 521298593, 866513695, 502099238, 90562059, 434354796, 151897813, 1186792304, 174131077, 1354707555, 1337800387, 964071028, 509614955, 1548920373, 1450283480, 818029985, 811502628, 1472466978, 1404935992, 924462353, 1755394524, 1192694550, 217950647, 1081151410, 1049347660, 649725313, 1372758617, 1480160371, 1929596516 ], "storeSequenceIndicesEnabled": false, "size": 255, "capacity": 256, "initialAcceptFraction": 0.125, "timeDecay": 1.0e-4, "sequenceIndexOfMostRecentTimeDecayUpdate": 0, "maxSequenceIndex": 1256, "compressed": true, "randomSeed": -919230996305300857 }, { "version": "2.0", "weight": [ -1.6287293, -1.6435285, -1.637755, -1.6691914, -1.645258, -1.6442953, -1.6410506, -1.6916354, -1.7190585, -1.761682, -1.6499045, -1.6932083, -1.729453, -1.649677, -1.6591613, -1.6945941, -1.8920058, -1.7502831, -1.7589148, -1.844166, -1.8389727, -2.1142673, -1.722116, -1.7554877, -1.8476304, -1.7322166, -1.7614912, -1.7297312, -1.6993097, -2.0708926, -1.6952051, -1.7018081, -1.7204852, -1.9380832, -1.9250269, -2.1003716, -1.810654, -1.7863406, -1.8420278, -1.923125, -2.0683916, -1.8779187, -2.0993567, -2.2440252, -2.4986584, -2.1349447, -1.8286045, -1.8319627, -2.963366, -2.2319872, -2.125827, -1.977528, -1.797223, -1.8572384, -1.9525493, -2.1618528, -1.7674576, -1.7466911, -1.8013276, -2.0905416, -2.21956, -1.8042545, -1.6955078, -1.9114436, -1.7379467, -2.8870742, -2.0274715, -1.9450583, -3.025044, -1.9799057, -2.2283165, -2.344057, -2.1447797, -1.8842825, -2.1390884, -2.1928966, -2.1094954, -2.474272, -2.218279, -2.701682, -2.0378191, -2.3359075, -2.3428192, -1.9566844, -2.5642297, -2.1202443, -2.4547656, -2.5752928, -2.4486563, -2.5106273, -2.9675372, -2.722326, -2.5456028, -2.1745915, -1.8693612, -1.8518169, -2.08939, -3.7104192, -2.977432, -2.5043721, -2.6941476, -2.5780845, -2.8901272, -2.3614352, -2.4190023, -1.9482347, -2.2259426, -2.6558018, -2.9252875, -2.087803, -2.0049474, -2.4985342, -2.263475, -1.8067365, -1.8575746, -1.8400688, -2.374721, -2.1351123, -2.0048347, -2.1655703, -2.787334, -2.4745865, -2.7357888, -2.3446178, -1.8706708, -2.1889246, -1.7161208, -2.8049548, -1.9561678, -2.6307518, -2.2830336, -3.503847, -3.7583747, -2.5329049, -4.5742164, -3.3736012, -2.9679334, -3.1773055, -3.1729085, -5.4354944, -4.8199077, -2.8325222, -2.62505, -2.6489146, -2.9634616, -2.2020204, -2.314265, -2.578448, -2.7460446, -2.487839, -2.949279, -2.9059079, -3.3980107, -2.5645654, -2.7129917, -4.727363, -2.5351973, -3.9054053, -2.6798823, -2.7133641, -6.961175, -4.145108, -2.8550694, -2.4107604, -4.073314, -2.3849046, -3.8040702, -1.9988089, -2.6826816, -2.958969, -2.8348746, -2.4423566, -3.2900076, -3.5124567, -3.0276008, -2.6424477, -3.222973, -2.7755873, -3.1440806, -3.4846766, -3.0851703, -3.4664392, -3.2701242, -4.641508, -5.2022886, -5.167342, -2.9217503, -2.6460018, -4.8421874, -3.2255902, -3.8385496, -2.7864158, -3.049552, -4.733867, -4.454487, -3.9694974, -4.1708393, -4.4392476, -3.2127802, -3.1510036, -2.6468732, -2.9868522, -4.7008367, -3.4651322, -2.6355107, -4.7546005, -3.0883682, -2.952955, -3.146033, -2.7686331, -2.429948, -2.7047617, -2.456339, -3.1010394, -2.527437, -3.8453908, -3.0544543, -2.9318485, -5.533993, -2.0890853, -2.7984624, -5.6635385, -4.536752, -2.9831543, -2.8688128, -2.588757, -2.9604492, -2.4847069, -2.9993773, -4.0434513, -3.3012896, -2.394382, -2.7405553, -4.2170815, -4.238273, -3.1518064, -4.3944273, -2.0580623, -2.0345478, -4.6425953, -2.7166886, -4.0035863, -3.0050988, -6.148036, -3.6872802, -5.858176, -2.7695863, -3.1716938, -2.6447742, -2.1457007, -2.0553026, -2.922085, -2.994673, -2.9905138, -1.9678352 ], "pointIndex": [ 3, 1253, 255, 1468939989, 348201086, 311481418, 1733845684, 1686180818, 280805918, 1795342310, 1372015301, 1359497846, 1486453725, 1260359975, 1033476187, 361534460, 1355030892, 1272463141, 805838947, 199255874, 972786110, 346438616, 1722030182, 1813644722, 191076355, 981070544, 284836642, 310910058, 989748829, 1799011465, 1134929181, 1911068180, 1831200079, 1413073718, 1628009934, 1675666577, 1909251535, 300972608, 78762105, 704813320, 309117930, 1038878914, 1271574588, 94968480, 1541144338, 1719937349, 1811721669, 471265264, 1530779806, 1218782107, 390946267, 296023026, 473573629, 1716169005, 331840464, 371289284, 644432640, 481715699, 1673291390, 394237884, 1112141393, 1866968764, 444447526, 1055838466, 1298556873, 526621749, 156912001, 163208658, 195519246, 1823671856, 1244638050, 1730451265, 1494404993, 634462173, 1163393280, 808705820, 1525716283, 736456317, 1566828723, 572959739, 1176229499, 1011709746, 1060291886, 1303034817, 1428442655, 1441529443, 1522581783, 1918611098 ], "storeSequenceIndicesEnabled": false, "size": 255, "capacity": 256, "initialAcceptFraction": 0.125, "timeDecay": 1.0e-4, "sequenceIndexOfMostRecentTimeDecayUpdate": 0, "maxSequenceIndex": 1256, "compressed": true, "randomSeed": 1235914033936469780 }, { "version": "2.0", "weight": [ -1.5345111, -1.5345854, -1.5352143, -1.5418011, -1.5640353, -1.5873953, -1.5440509, -1.5723784, -1.5536164, -1.6138204, -1.564567, -1.6089317, -1.6009803, -1.5548254, -1.5872757, -1.7854967, -1.7077621, -1.618875, -1.5881951, -1.7608906, -1.74024, -1.6480869, -1.5943167, -1.6137693, -1.6191088, -1.6046709, -1.637026, -1.5612868, -1.5652598, -1.5936134, -1.656476, -2.0284445, -2.0513895, -1.7272295, -1.8274367, -1.7010891, -1.7508259, -1.6084881, -1.7268528, -1.9210428, -1.8405379, -1.9598054, -1.7992055, -1.6998166, -1.7354546, -1.675926, -1.6926972, -1.8770659, -1.8663892, -1.7692633, -1.6374545, -1.6231381, -1.8434621, -1.7333738, -1.948892, -1.5747668, -1.7588967, -1.6761369, -2.1003804, -1.6753234, -1.6181744, -1.8790652, -1.661982, -2.0956454, -2.200539, -2.0995784, -2.225362, -2.2545896, -1.9625192, -1.8587768, -1.8545741, -1.7148182, -1.8189396, -1.7725823, -1.8485171, -2.118984, -2.387815, -2.064594, -2.0679607, -2.118417, -2.3495748, -2.288614, -2.195366, -2.6614716, -2.2825482, -1.9241642, -3.0691502, -1.7099928, -1.9844245, -1.9936858, -2.0395646, -1.6921089, -1.9774458, -3.1731887, -1.8646569, -1.8896581, -2.0159445, -1.9981244, -2.1396825, -1.8050421, -1.7693808, -1.7676467, -1.754945, -1.6373693, -2.9621675, -2.3039734, -1.8951974, -1.9601555, -1.8143328, -2.4989946, -2.312548, -1.8358022, -2.3151543, -2.063485, -1.8310093, -2.309061, -1.8352809, -2.2402127, -2.1357348, -1.9181471, -2.1218538, -2.4286084, -1.619118, -2.3334422, -2.0407221, -2.2614598, -1.6817223, -2.7123013, -2.9958603, -3.2728026, -2.8368137, -2.5721009, -2.917388, -2.8172667, -5.1267014, -2.5259824, -3.426527, -4.2924347, -4.367054, -3.8996263, -2.4546254, -2.8780682, -3.369605, -1.9061285, -3.7905815, -3.2067957, -2.7068586, -2.0716114, -2.2800162, -2.4191968, -3.452595, -2.120203, -2.369795, -4.5425644, -2.4015663, -2.3730764, -2.5273366, -3.0901675, -2.9005687, -2.5268888, -2.7519774, -2.4042478, -2.5676286, -3.3872604, -2.3477516, -2.5910897, -2.490365, -2.697967, -3.0550823, -3.553559, -2.7715716, -3.4370391, -3.0085537, -3.6120863, -4.689063, -1.7739089, -2.0211194, -2.5067132, -2.825091, -2.0644937, -2.060346, -3.5862482, -2.9754694, -2.7869902, -2.8265479, -2.8258586, -2.4236476, -5.5222154, -4.011036, -5.4852524, -2.257591, -2.3536267, -2.1434913, -3.0729537, -2.503225, -3.1518953, -3.8945484, -3.5541847, -3.574473, -3.5645008, -1.8395015, -2.1069777, -2.280898, -1.9562199, -1.8099992, -2.681795, -4.0627627, -2.3272598, -3.1536226, -3.6603744, -5.376876, -4.4856424, -2.3590813, -2.0735247, -2.5921485, -3.2830138, -2.987672, -5.36235, -2.7352164, -2.5040228, -3.3372958, -3.66952, -2.796431, -1.9083732, -4.185178, -3.1007457, -2.485229, -2.1849375, -2.8226488, -2.0973449, -2.3647096, -3.5712779, -3.2152066, -2.2329075, -2.6364183, -2.7903652, -2.5476396, -2.842387, -2.2279704, -2.3730114, -2.0485094, -3.2631235, -3.3598142, -2.7192006, -2.5139086, -2.722003, -2.3466024, -2.7279682, -3.6686144, -2.3619401, -3.394032, -2.5690548, -3.4673102, -2.3773215 ], "pointIndex": [ 3, 1249, 254, 749619764, 515508889, 953230363, 644120088, 1783281798, 1438421982, 1006494365, 1449632781, 933462234, 1241790507, 263002233, 291621465, 1311156237, 1622877794, 593024514, 160824440, 84490796, 633171281, 823183843, 1353930027, 1936991999, 101048797, 501282098, 1527536864, 55971400, 1902732214, 1733274098, 203359947, 140136544, 1712388138, 1071987294, 471161193, 522293587, 621210748, 1601017186, 1920764524, 1363619146, 1807520155, 461573448, 983873570, 1331965006, 1549976524, 825674653, 525980398, 270665261, 683061037, 1187318760, 855226838, 581585821, 1425257349, 1051440673, 224458911, 361881947, 239661597, 1076350786, 1396027055, 234628851, 1629539413, 401512819, 1390505173, 427967097, 1304488839, 445090758, 969427552, 1095121632, 33234972, 1633348644, 80685532, 1329840547, 1835358407, 590560865, 726010070, 1284999414, 1598481684, 744808929, 757904728, 1398773041, 961639521, 1918522845, 1505982507, 1142351156, 588675351, 1779866454, 1923068132, 1554810 ], "storeSequenceIndicesEnabled": false, "size": 254, "capacity": 256, "initialAcceptFraction": 0.125, "timeDecay": 1.0e-4, "sequenceIndexOfMostRecentTimeDecayUpdate": 0, "maxSequenceIndex": 1256, "compressed": true, "randomSeed": 5961685213686464613 }, { "version": "2.0", "weight": [ -1.5257835, -1.532419, -1.526319, -1.5459954, -1.5403318, -1.5273062, -1.5318718, -1.5854601, -1.600429, -1.5905855, -1.576832, -1.5444384, -1.53936, -1.6083705, -1.5532775, -1.7179025, -1.6046104, -1.6268706, -1.6039013, -1.5928894, -1.8332025, -1.6485378, -1.6818303, -1.5466363, -1.5505174, -1.5745901, -1.5889266, -1.676313, -1.6876225, -1.680915, -1.6252509, -1.8780425, -2.0918608, -1.6844703, -1.7588052, -1.9396161, -1.6796147, -1.7520231, -1.6064339, -1.7949163, -1.6063402, -1.9180142, -1.8818871, -1.6793885, -1.67244, -1.9063159, -1.9686803, -1.6347135, -1.8534031, -1.6582611, -1.7758393, -1.9086692, -1.6868783, -1.6774342, -1.6174681, -1.8093826, -1.827288, -1.8499967, -1.7659829, -1.7565888, -1.8133397, -1.6693784, -1.648273, -2.521096, -2.2045913, -2.2039254, -2.3295937, -2.1437054, -2.4531891, -2.0813184, -1.8641522, -2.979186, -2.1612687, -2.1348293, -2.16697, -1.8916192, -1.9236215, -1.7352973, -2.264334, -1.8202388, -2.2695205, -1.9896787, -1.6497238, -2.0752726, -1.9621438, -2.7148943, -1.9871827, -2.7365506, -2.356889, -1.6996434, -1.7351856, -2.150795, -2.0257459, -2.240612, -2.4337668, -1.8312027, -2.4079015, -1.8643912, -1.9720566, -2.5028517, -1.9584169, -2.0469992, -2.5444942, -2.001135, -3.569225, -2.0345218, -1.8616279, -2.5987465, -2.119698, -2.0288913, -1.7859378, -2.6630232, -1.8724684, -2.778035, -2.3339639, -2.0099356, -2.07525, -1.8595737, -1.7922893, -2.3891761, -2.560148, -2.8437333, -2.0655832, -1.7084434, -2.1388345, -2.6832392, -1.7777342, -2.556761, -3.1471772, -2.4486399, -3.2626753, -2.743352, -2.6989517, -2.662875, -4.866611, -4.188736, -2.7151356, -2.8587973, -2.47859, -3.8088737, -2.5240817, -1.9957222, -3.138415, -3.2717984, -3.1498153, -2.743579, -2.2526274, -2.50212, -3.9200556, -4.119592, -3.521935, -2.277947, -2.908566, -2.2615526, -3.7282572, -3.1510122, -1.7886689, -3.250285, -2.5849755, -1.9076731, -2.898602, -3.594523, -2.5473993, -2.3753328, -2.273242, -5.8790035, -2.177618, -2.3663774, -2.6003609, -2.8216631, -2.1137898, -2.9474978, -3.3929472, -2.0721483, -2.0494266, -4.468507, -3.115191, -4.9723973, -3.4666471, -2.448805, -2.201985, -2.967275, -2.3713338, -3.3682654, -4.0202723, -3.386346, -2.711816, -2.4446042, -4.2688355, -3.407556, -2.7723808, -3.4934607, -2.4770794, -4.2625604, -3.5663607, -2.7192361, -2.441945, -2.3298247, -2.1854405, -2.5347698, -5.375053, -3.7296784, -2.2532272, -2.3139634, -2.177199, -5.497376, -6.019287, -4.070514, -2.4715588, -3.6453009, -7.0692167, -2.936739, -2.3720882, -4.3689184, -2.1131155, -3.1359951, -5.7391376, -2.3628266, -2.1523256, -2.4543364, -2.521942, -2.490915, -3.972962, -6.118891, -3.3457332, -2.1690152, -2.7532642, -3.3654513, -3.868791, -3.8921962, -2.535788, -3.98272, -2.2380013, -2.293273, -3.3237154, -2.5618138, -2.3382132, -3.2277465, -3.8876097, -4.109236, -4.762749, -3.6733208, -2.9050758, -3.2219455, -2.8485487, -2.9965434, -3.7959926, -3.4480162, -2.7039433, -3.3766913, -3.6542602, -3.55788, -4.494692, -4.54066, -2.5475478 ], "pointIndex": [ 1, 1250, 255, 1614311906, 1037541425, 1422066171, 762040836, 1923048011, 150118905, 953173356, 76440872, 194981059, 999426963, 1706086193, 1594445842, 864392687, 351906466, 1636326003, 1659863674, 1654131598, 588612615, 1268906687, 1679779764, 1574393566, 1011133818, 264827597, 1867083960, 299138962, 865870158, 657862061, 1240158043, 1277437500, 1474414712, 158764031, 673816356, 609030105, 173575334, 774861641, 1670772511, 1562991630, 1103180464, 794742985, 971023046, 1177154699, 1549743205, 1225277499, 251542656, 258018327, 263774789, 1283647599, 871791224, 291457405, 295674933, 1157160941, 102459636, 314173493, 1723731252, 342455699, 1839343407, 398751663, 631047258, 1210030052, 1710892087, 1924823826, 903475066, 456327805, 491520307, 506106568, 1158303350, 892079952, 536437045, 1117345195, 564512855, 1395768170, 1925479604, 1765493362, 1627026636, 1751327113, 1188066073, 1917447254, 827535050, 1642368473, 903014297, 1441126861, 1130810732, 1224744483, 1811933289, 1935752407 ], "storeSequenceIndicesEnabled": false, "size": 255, "capacity": 256, "initialAcceptFraction": 0.125, "timeDecay": 1.0e-4, "sequenceIndexOfMostRecentTimeDecayUpdate": 0, "maxSequenceIndex": 1256, "compressed": true, "randomSeed": 3094355644247862573 }, { "version": "2.0", "weight": [ -1.4739364, -1.4854518, -1.4760784, -1.4875935, -1.4953938, -1.4984169, -1.4879522, -1.5093524, -1.4926078, -1.5171238, -1.5125519, -1.5012732, -1.5166982, -1.4958954, -1.5366755, -1.5484987, -1.5611908, -1.5979398, -1.5603845, -1.6203203, -1.5704353, -1.6633575, -1.5579628, -1.55296, -1.795618, -1.6760824, -1.5176575, -1.5144597, -1.5277035, -1.5477281, -1.7140696, -1.6394001, -1.6954261, -2.1438859, -1.8238163, -1.6423, -1.6687416, -1.8934213, -1.6380768, -1.9984225, -1.8914065, -1.9348294, -1.8795712, -1.7462192, -1.8659137, -1.8379618, -1.5810261, -1.7192446, -1.7008163, -1.8184123, -1.8110999, -2.1787684, -2.2982676, -1.5314186, -1.7548642, -2.2257524, -1.5917569, -1.5637295, -1.5673133, -1.6050491, -1.7135774, -2.049922, -2.0660481, -1.7038921, -1.8500408, -1.9410862, -2.1084352, -2.2458594, -2.4118128, -2.025019, -1.9305323, -2.0011356, -2.5528111, -2.0804389, -1.7682977, -2.9587407, -2.0774496, -2.0376956, -1.8831936, -2.3587713, -2.2914603, -2.080167, -2.398474, -2.1165843, -2.2489762, -3.3198617, -2.0660028, -1.7743989, -2.0366867, -1.9493996, -2.1968048, -1.9214082, -1.865101, -1.6677953, -1.7295773, -1.7557685, -1.7215736, -2.1169577, -3.8750894, -1.8312486, -2.2261262, -1.9203904, -2.4061456, -2.5151784, -2.3806129, -2.3084571, -2.506206, -1.9816073, -2.0561907, -1.980592, -2.1949437, -2.2723653, -2.3749077, -1.7950431, -1.8964046, -2.211347, -2.4007275, -1.5689955, -1.6514187, -3.7187233, -1.6301489, -2.086895, -2.1163597, -2.6241238, -3.9407856, -2.7351525, -2.1547961, -2.0345523, -2.2548847, -2.1943324, -4.6028876, -2.1080987, -2.2166712, -2.4134626, -4.2891135, -3.1646965, -3.283529, -3.0363867, -2.654098, -2.5246723, -2.9533222, -2.7589624, -6.8319306, -3.45097, -2.302588, -4.1987743, -3.018338, -3.9248986, -2.2258532, -3.859081, -2.3803658, -4.1095366, -3.1288927, -2.689985, -4.6837077, -3.3727543, -2.7500443, -3.597516, -2.7279165, -2.3633702, -2.3965745, -3.7145114, -3.6214883, -2.0868714, -2.301757, -3.4451625, -4.5945196, -3.219573, -3.4956493, -2.6333444, -3.1672225, -3.5964112, -4.2114186, -3.3155928, -2.5097873, -3.0633156, -1.8225551, -2.144348, -2.2268782, -2.6874378, -2.5341742, -4.0607824, -2.2209594, -2.2272894, -4.5724764, -2.147491, -2.140911, -1.6880952, -6.806554, -2.9362721, -2.1946857, -3.549542, -1.7758566, -1.8011234, -3.9622927, -3.233758, -2.7135792, -4.252686, -4.0482345, -1.9278389, -1.9454994, -2.5433922, -2.2774193, -4.3522453, -2.2904599, -3.0752342, -2.6221926, -5.464108, -4.4305067, -3.8604193, -2.6281645, -2.3101032, -2.92189, -2.6759644, -2.7982519, -2.4083624, -2.7625816, -4.315713, -2.2733822, -5.1711693, -3.2551575, -2.2869558, -2.6063263, -2.4167163, -3.0222101, -6.9500675, -3.7502477, -3.0935733, -2.0001183, -3.9397662, -2.036932, -5.9469604, -3.63629, -3.1122005, -2.8454168, -3.0099926, -1.9705479, -2.064685, -1.900059, -4.272635, -3.928694, -1.9878477, -1.6362039, -2.645227, -2.5863435, -4.9102893, -2.174294, -3.0281172, -3.4842854, -5.2957344, -5.0918097, -3.1096747, -6.0454197, -3.172589, -2.2439806 ], "pointIndex": [ 4, 1256, 255, 1223797928, 1623677654, 1728694488, 1360127196, 1237665187, 300008325, 23900434, 533047755, 1038903454, 1296350950, 416240210, 954777070, 871612658, 159631247, 440691661, 552496932, 410244749, 1009372704, 1600468221, 1374403740, 1918402956, 695135605, 1803858985, 1315684846, 1679339055, 1636784866, 1699017295, 672251182, 369725123, 1413805818, 517289020, 1133930449, 1906422654, 856131894, 865341588, 447977189, 1608462439, 1478336717, 824417366, 1036955096, 1376703219, 1627803349, 1415150729, 1522913492, 1806293611, 1160439800, 78400409, 1722060119, 1655226301, 1957291000, 315667447, 52729117, 1006468, 340123706, 1055091144, 1208275682, 377204605, 1179474234, 1073440127, 2998993, 986081357, 805778975, 23156479, 1704113892, 854499111, 1629578411, 586232179, 1886933506, 1077656819, 645784931, 279521799, 1182801783, 719702406, 1683648103, 771515289, 1543232884, 1777928976, 308431624, 1199169854, 1663530999, 1137583284, 1505515416, 1819345697, 1817788662, 1965613555 ], "storeSequenceIndicesEnabled": false, "size": 255, "capacity": 256, "initialAcceptFraction": 0.125, "timeDecay": 1.0e-4, "sequenceIndexOfMostRecentTimeDecayUpdate": 0, "maxSequenceIndex": 1256, "compressed": true, "randomSeed": 7829655809554688956 } ], "compactRandomCutTreeStates": [ { "version": "2.0", "root": 0, "maxSize": 256, "outputAfter": 32, "storeSequenceIndexesEnabled": false, "centerOfMassEnabled": false, "nodeStoreState": { "version": "2.0", "capacity": 255, "compressed": true, "cutDimension": [ 1, 31, 255, 482049803, 309553323, 126599654, 183052701, 152692025, 810097597, 520795982, 186960441, 354890868, 654637203, 858723802, 771537355, 487196625, 141715079, 715197657, 744288717, 532366533, 700948526, 485148609, 589528758, 874417663, 862655872, 420262554, 126768542, 760361961, 122808912, 768002537, 756806186, 510626389, 378520593, 85155340, 371617678, 122624128, 270573733, 40487961, 543923644, 238230115, 298782203, 141902733, 518077810, 126914412, 523006182, 5565 ], "cutValueData": [ 66, -110, 90, -115, 66, -109, 119, -68, 66, -112, -121, 60, 66, 68, 45, 29, 66, 103, 4, 88, 66, -107, -60, 23, 66, -112, -105, 45, 66, -120, 26, -107, 66, -106, 95, -105, 66, -101, -27, 13, 66, -99, -69, -91, 66, -124, 25, -27, 66, -126, -61, -35, 66, -118, -60, 108, 66, -97, 102, -78, 66, -109, -63, 28, 66, -97, 23, 105, 66, 117, 119, -84, 66, 112, -6, -37, 66, -82, 31, 113, 66, -116, 56, -48, 66, 102, -65, -50, 66, -128, -126, -98, 66, 110, -121, 56, 66, -96, -25, -68, 66, -89, -86, 49, 66, 103, 87, -128, 66, -118, -91, 75, 66, 126, -72, 50, 66, -86, -88, -61, 66, -84, 119, 16, 66, -76, 2, 50, 66, -81, -100, 21, 66, 108, 49, -47, 66, -69, -12, 0, 66, -104, -91, 13, 66, -119, 3, 50, 66, 110, 33, -114, 66, -76, 51, -58, 66, 89, 66, 68, 66, -78, 59, 39, 66, -110, 70, 5, 66, -119, -55, -114, 66, 101, -124, 121, 66, -72, 117, -100, 66, -68, 38, 77, 66, 94, -106, 15, 66, -97, -62, -75, 66, 87, 89, 33, 66, -93, -3, 122, 66, -122, 87, 77, 66, -118, -11, -12, 66, -95, -127, 90, 66, -67, 77, 24, 66, 72, 108, -65, 66, 95, 62, -64, 66, -72, 5, 119, 66, -112, -99, -53, 66, 118, 50, -43, 66, -80, -99, 4, 66, 98, 12, 13, 66, 73, -36, -116, 66, 118, -42, 32, 66, -78, -16, -59, 66, -100, 68, 10, 66, -100, -119, 69, 66, 97, -34, -94, 66, 70, -54, -29, 66, 118, -62, 96, 66, -122, 95, -113, 66, 125, 74, 85, 66, -104, 102, 63, 66, -108, -47, 26, 66, -73, -94, -123, 66, 91, 114, -124, 66, -88, 104, 16, 66, -109, -34, 80, 66, -124, 78, -73, 66, -99, -49, 45, 66, 112, -127, 10, 66, -108, -85, 18, 66, 89, 97, 73, 66, -74, -98, -24, 66, -115, -12, -19, 66, -89, -41, -63, 66, -120, -50, -53, 66, 85, 118, 116, 66, -90, -90, 107, 66, 112, -109, 111, 66, -115, 5, 0, 66, -84, 123, 14, 66, -85, -77, 29, 66, -98, 73, -58, 66, -112, 101, -38, 66, -104, -68, -17, 66, -119, -76, -122, 66, -67, -81, -66, 66, 111, 86, -59, 66, -123, 114, 110, 66, -107, 20, -100, 66, -88, -76, -13, 66, 104, 41, 28, 66, -123, -104, -119, 66, 96, 28, 36, 66, -118, 10, -86, 66, -112, -31, 61, 66, 122, -92, -18, 66, -121, -5, -6, 66, 89, 43, -63, 66, 80, 95, 53, 66, -84, 51, -91, 66, -72, 1, 127, 66, -78, -36, -70, 66, 79, -126, -2, 66, 95, 119, 127, 66, 108, 19, 60, 66, 114, -51, -90, 66, -118, 96, -58, 66, 108, 122, -82, 66, 119, -33, -112, 66, 88, -9, 85, 66, -113, 111, 27, 66, -125, 123, 60, 66, -120, -91, -13, 66, -97, -40, -5, 66, 83, 43, -51, 66, -105, 3, 6, 66, -81, -13, 126, 66, -88, -27, 39, 66, -123, 23, -111, 66, -109, 116, -85, 66, -86, -33, -116, 66, 98, 28, 127, 66, -81, 67, 50, 66, -122, -34, 30, 66, 111, 111, -11, 66, -78, 114, -37, 66, 119, 55, 89, 66, -85, -97, 46, 66, -100, 108, -88, 66, -97, 16, -40, 66, -105, 46, 17, 66, 99, 12, -96, 66, 113, 16, -13, 66, -82, -85, -46, 66, 112, -13, -59, 66, -126, 25, 10, 66, -111, -4, 74, 66, -78, -86, 61, 66, -82, 29, 123, 66, -83, 97, -34, 66, -88, 102, 126, 66, -93, 126, -99, 66, -81, 51, 70, 66, -79, 89, 72, 66, -97, -97, -36, 66, -57, 88, 122, 66, -102, 79, 6, 66, 82, 65, -86, 66, 97, -7, 71, 66, 114, 89, 77, 66, 88, 40, 114, 66, 103, -3, -1, 66, -69, 64, 94, 66, 119, 74, 117, 66, -93, -41, 51, 66, 120, -86, 52, 66, -117, 80, -103, 66, -92, 19, -29, 66, -61, 81, 77, 66, -62, -6, 13, 66, -92, 75, 3, 66, -100, -109, 24, 66, -116, 16, 64, 66, 71, -85, -97, 66, -84, 14, 119, 66, -103, -9, -32, 66, -103, -119, -124, 66, -86, 61, 122, 66, -118, 23, -64, 66, -94, -38, 85, 66, -88, -92, 35, 66, 83, 71, 62, 66, -109, 93, -14, 66, -114, -71, -88, 66, -83, 119, -116, 66, -71, -123, 102, 66, -95, -77, 6, 66, -113, 71, -12, 66, -125, 97, -93, 66, -126, 88, -31, 66, -99, -121, 66, 66, -106, -85, -47, 66, -110, -100, -48, 66, -106, -15, 67, 66, 121, 34, -43, 66, -98, 62, 119, 66, -120, 68, 72, 66, 110, -27, 107, 66, -109, 124, 86, 66, -106, -21, -96, 66, -125, 11, 66, 66, -86, 98, -56, 66, -102, -103, 106, 66, -89, -3, -125, 66, 119, -14, -6, 66, -80, 115, -122, 66, -79, 90, -26, 66, -107, -60, -44, 66, -96, 48, 15, 66, -74, -88, -30, 66, -69, 56, -115, 66, -118, -86, -69, 66, -125, 51, -103, 66, -92, -64, -1, 66, -119, 53, -32, 66, -72, 28, 8, 66, -121, -81, 8, 66, 103, -101, 122, 66, -96, -60, -73, 66, -88, 102, 15, 66, -118, 127, -58, 66, -123, -37, -87, 66, -60, 19, -48, 66, 117, -78, 53, 66, -88, -42, -114, 66, -88, 104, -128, 66, -111, -122, -62, 66, -115, -20, -92, 66, -111, -112, -66, 66, 106, 75, 94, 66, 116, -125, -68, 66, -77, 93, -112, 66, 106, -50, 65, 66, -128, 32, -114, 66, -127, 94, -124, 66, 120, 12, -7, 66, 86, 94, -86, 66, -123, 124, 34, 66, 114, 93, -11, 66, 96, -82, 40, 66, 123, 59, 10, 66, 125, -57, 91, 66, -93, 52, 83, 66, -100, 37, 94, 66, -109, 55, 86, 66, -112, -2, 97, 66, -117, -15, 43, 66, -103, 36, 79, 66, -97, 87, -90, 66, -77, -117, -116, 66, -121, -29, -83, 66, 121, -16, -1, 66, 127, 113, 29, 66, -73, 34, 18 ], "precision": "FLOAT_32", "root": 0, "canonicalAndNotALeaf": true, "size": 255, "leftIndex": [ 0, 1, 255, 1072824191, 486529471, 132093450, 892461317, 153379350, 35233988, 21617329, 152299184, 16 ], "rightIndex": [ 0, 1, 255, 1054997887, 467661783, 83623930, 637379628, 136901326, 58821506, 541822520, 957235200, 515 ], "nodeFreeIndexes": [], "nodeFreeIndexPointer": -1, "leafFreeIndexes": [], "leafFreeIndexPointer": -1, "partialTreeStateEnabled": true }, "boundingBoxCacheFraction": 0.0, "partialTreeState": true, "seed": -4423608042667571926, "id": 0, "dimensions": 32, "staticSeed": 0, "weight": 0.0, "hasAuxiliaryData": false }, { "version": "2.0", "root": 0, "maxSize": 256, "outputAfter": 32, "storeSequenceIndexesEnabled": false, "centerOfMassEnabled": false, "nodeStoreState": { "version": "2.0", "capacity": 255, "compressed": true, "cutDimension": [ 0, 31, 255, 508926833, 376812577, 1073405887, 803272566, 383352682, 796178119, 752602543, 483882278, 39054066, 867271797, 34768183, 627817038, 462470014, 215063649, 469595442, 514132970, 40872030, 36873947, 581342778, 359845187, 64406823, 107591233, 131545002, 93441401, 748471629, 173630950, 840804685, 401046562, 380335662, 37067065, 749545335, 899780331, 50157867, 935015887, 737232222, 192223463, 484480234, 708107174, 882356085, 203460394, 216864482, 182243245, 23 ], "cutValueData": [ 66, -94, -88, -9, 66, 118, -7, -36, 66, 96, 48, -96, 66, -88, 64, 53, 66, 108, -41, -102, 66, -98, 20, -88, 66, 71, -107, -87, 66, 70, 3, -93, 66, -103, 98, -70, 66, 84, -66, 20, 66, -105, -114, -81, 66, -121, -36, 46, 66, -85, 127, 20, 66, -127, -61, 70, 66, -95, 70, 109, 66, 95, 125, 71, 66, -107, 75, 89, 66, -119, 49, -18, 66, 99, -65, 9, 66, -83, -3, 114, 66, -91, 4, -102, 66, 99, 30, -53, 66, -120, -123, -42, 66, -119, 116, 89, 66, -99, -29, -25, 66, -116, -51, 19, 66, -103, -42, 53, 66, 83, -56, -2, 66, 112, -39, 101, 66, -77, -10, 111, 66, -100, -50, -108, 66, 125, -42, -22, 66, -98, -22, 84, 66, -125, 43, 77, 66, -98, 63, 124, 66, -84, 43, -66, 66, 115, 86, -120, 66, -103, -77, -27, 66, -95, 18, -23, 66, 109, -8, -111, 66, -113, 81, 14, 66, -111, -125, -18, 66, 82, 20, 126, 66, 124, -99, -52, 66, -113, -61, 118, 66, -76, 13, 109, 66, 118, 61, 56, 66, 84, 91, -73, 66, -63, -94, -51, 66, -119, 29, -109, 66, 112, -86, 59, 66, -121, 30, 109, 66, -99, 93, -65, 66, -105, -115, 48, 66, -115, 2, -55, 66, -126, -12, 72, 66, 103, -65, 20, 66, -75, -107, -58, 66, -100, 51, -18, 66, -100, 95, 88, 66, 110, -99, 38, 66, 125, -42, -126, 66, -110, 97, -75, 66, -121, -2, 102, 66, -118, -20, 6, 66, -100, 88, 4, 66, -94, -21, 85, 66, 122, 5, 110, 66, -93, -4, 35, 66, 85, 84, -68, 66, -84, -105, 4, 66, -76, -49, -102, 66, -86, -13, -11, 66, 86, 66, 107, 66, -98, 117, 53, 66, 98, 30, 87, 66, -94, 125, 90, 66, 125, 101, -29, 66, -117, -34, 124, 66, -88, 1, -26, 66, 117, 121, -12, 66, -116, 16, -58, 66, -119, -38, 125, 66, -123, 127, -47, 66, 89, 40, -26, 66, 85, 25, -33, 66, 94, 96, 125, 66, 112, 76, 72, 66, 87, -81, 17, 66, -116, -2, -33, 66, -96, 76, -109, 66, 106, -113, 83, 66, -128, 8, -121, 66, -120, -112, -69, 66, -89, -91, 104, 66, 115, -76, -77, 66, 118, 95, -73, 66, 119, 45, -89, 66, -121, 120, -41, 66, 110, 36, -82, 66, -113, -44, -93, 66, -116, -57, 118, 66, -84, -99, 67, 66, -114, 101, 58, 66, -92, -100, 58, 66, -74, -61, 11, 66, -112, 107, -100, 66, -113, -81, 11, 66, -88, 68, -17, 66, -88, -1, -44, 66, -119, 92, -30, 66, -104, 82, 35, 66, -75, -65, -52, 66, -91, 6, -47, 66, -79, -21, 0, 66, 103, -66, 119, 66, -110, -34, -27, 66, -94, 10, -89, 66, 105, 75, -109, 66, -73, -128, 105, 66, -100, -37, -76, 66, 112, -111, 37, 66, 74, 34, 59, 66, -94, -124, 77, 66, -91, -102, 109, 66, 95, -104, -42, 66, -112, -110, 18, 66, -128, 60, 34, 66, -103, -88, -55, 66, 85, -11, 91, 66, -128, -1, 25, 66, -125, -116, -125, 66, -98, 11, -113, 66, -102, 45, -51, 66, -87, 37, -126, 66, -87, -60, -60, 66, -109, -112, -59, 66, -86, -31, 102, 66, -116, -49, 65, 66, -114, 21, 1, 66, -97, -60, -127, 66, 111, -73, 64, 66, -82, 52, -21, 66, -105, -76, -125, 66, -102, 5, -11, 66, -112, 19, 110, 66, -74, 104, 92, 66, -93, 26, -97, 66, 74, 115, 92, 66, -94, -36, -60, 66, -114, 0, 18, 66, -76, -69, 107, 66, -87, -62, -33, 66, -92, 111, 121, 66, 125, -62, -33, 66, 121, -72, -10, 66, 92, -65, 2, 66, -107, -22, -108, 66, -110, -92, -105, 66, 100, -28, 100, 66, -105, 8, -16, 66, 73, -80, 83, 66, 115, -106, -86, 66, 122, -51, 42, 66, -75, -50, -42, 66, 112, 44, 52, 66, -111, 21, 119, 66, -113, 10, 102, 66, -86, -70, 9, 66, 105, 63, 85, 66, -121, -73, 111, 66, -94, -6, -38, 66, -72, -4, 92, 66, -100, 84, 51, 66, -92, -110, -46, 66, -125, -94, 121, 66, -86, 24, -83, 66, -103, 120, 34, 66, 108, 30, 14, 66, 69, -62, -56, 66, 106, -27, 100, 66, -100, 66, 103, 66, -127, 124, 48, 66, -112, 89, 103, 66, 95, 37, -54, 66, 125, -29, -9, 66, 98, -57, -61, 66, 78, -48, -9, 66, -109, 37, -103, 66, -77, 50, -41, 66, -74, -84, 93, 66, -89, 102, 109, 66, 123, -38, 95, 66, -94, 97, 115, 66, -96, -51, 49, 66, 83, 69, 127, 66, -122, 25, -93, 66, 101, -23, -114, 66, -106, 5, -107, 66, 84, 100, 126, 66, -92, -95, 82, 66, 112, 77, -81, 66, -92, -108, -112, 66, 125, -4, -111, 66, -104, 55, 125, 66, -122, -38, -65, 66, -108, 112, -95, 66, 99, -22, -77, 66, -119, -66, -101, 66, -78, -73, 28, 66, -80, -41, -66, 66, -101, -107, 77, 66, -88, 111, 124, 66, 108, 69, -63, 66, -86, 97, 120, 66, -84, 63, 21, 66, -60, 123, 107, 66, -87, -127, -84, 66, -61, 125, -119, 66, -96, -63, -47, 66, 127, 53, 3, 66, -88, 78, 101, 66, 110, -114, -91, 66, 109, 97, -74, 66, 91, 116, 79, 66, 104, 115, -57, 66, 87, 16, -54, 66, -121, -120, 95, 66, 122, -6, 17, 66, -107, 82, -44, 66, 117, -99, -16, 66, 120, 83, -65, 66, -109, -123, 114, 66, -85, -124, 2, 66, -79, -80, 103, 66, -112, -13, 75, 66, -121, -74, -84, 66, -117, 28, 24, 66, -105, 9, -26, 66, -102, 79, 90, 66, -121, -95, 12, 66, -107, -37, -3, 66, -98, 22, -122, 66, -90, 123, -22, 66, -117, -101, -92, 66, -98, 76, -114, 66, -92, 61, -59, 66, -69, 3, 111, 66, 117, -63, -97, 66, -98, 87, 49, 66, -103, 50, -38, 66, -122, 39, 93, 66, -126, 50, 90, 0, 0, 0, 0, 0, 0, 0, 0 ], "precision": "FLOAT_32", "root": 0, "canonicalAndNotALeaf": true, "size": 253, "leftIndex": [ -1, 1, 255, 1104862922, 1160430947, 602631239, 973599817, 1112041301, 769349326, 601860200, 1016410184, 715592624, 1097691496, 1155855487, 581151415, 985085023, 446 ], "rightIndex": [ -1, 1, 255, 1162261466, 1162084076, 645166417, 1140984142, 725231066, 643375763, 602043649, 1159956112, 774043901, 643311625, 710468725, 586090876, 585972841, 364 ], "nodeFreeIndexes": [], "nodeFreeIndexPointer": 1, "leafFreeIndexes": [], "leafFreeIndexPointer": 1, "partialTreeStateEnabled": true }, "boundingBoxCacheFraction": 0.0, "partialTreeState": true, "seed": 5623816131219899495, "id": 0, "dimensions": 32, "staticSeed": 0, "weight": 0.0, "hasAuxiliaryData": false }, { "version": "2.0", "root": 0, "maxSize": 256, "outputAfter": 32, "storeSequenceIndexesEnabled": false, "centerOfMassEnabled": false, "nodeStoreState": { "version": "2.0", "capacity": 255, "compressed": true, "cutDimension": [ 1, 31, 255, 530380726, 858261536, 498543680, 480659814, 272727935, 742689430, 688554251, 656105280, 524438278, 244566623, 525113071, 2223965, 459501897, 806978539, 380482694, 6057741, 857166212, 519700115, 169625971, 156948473, 368423804, 428012101, 372187640, 262130689, 427730813, 745130370, 481473952, 459312062, 498523251, 702664939, 459256921, 865174426, 635585514, 181906227, 118811245, 394423262, 238339688, 538393390, 852456440, 696402172, 358755081, 385617401, 6349 ], "cutValueData": [ 66, 119, -60, -124, 66, -126, 73, 98, 66, 111, 86, -35, 66, -90, 51, -113, 66, -81, -11, -121, 66, 90, 74, 48, 66, 99, -121, -26, 66, -127, -104, 7, 66, 85, -101, -13, 66, 112, 8, -114, 66, -107, -65, 60, 66, 96, -18, -31, 66, 97, 97, -32, 66, 118, 57, 89, 66, -110, 42, 127, 66, -73, 67, 82, 66, 84, 57, 77, 66, -127, -55, -32, 66, 74, -110, 91, 66, -79, 116, -50, 66, -122, 0, -99, 66, -125, -77, 31, 66, -114, 57, 43, 66, -123, 86, 80, 66, -114, 64, 85, 66, 81, 42, 114, 66, -109, -45, -116, 66, -105, -23, 37, 66, -71, -104, -73, 66, 96, 52, -10, 66, -100, 58, 24, 66, -91, 82, 86, 66, 83, 92, -67, 66, -87, -98, -5, 66, -72, -7, -68, 66, -102, -59, 69, 66, -91, 14, 89, 66, -86, -23, 24, 66, 100, -118, 55, 66, -113, 83, 19, 66, -104, 117, -1, 66, -63, -14, -127, 66, -69, -34, 78, 66, -73, 97, -128, 66, -124, -96, 2, 66, -109, 53, -13, 66, -122, -93, 23, 66, -90, -6, 29, 66, 121, -76, -96, 66, -93, 88, -13, 66, -77, -6, -2, 66, -102, 74, 103, 66, -113, -69, 88, 66, 122, -56, -105, 66, -115, -80, 27, 66, 76, 52, -40, 66, 102, 103, -90, 66, 126, -47, -102, 66, 121, 39, 121, 66, -125, 62, -58, 66, -92, 30, 48, 66, 97, -90, 72, 66, -104, -98, 11, 66, 104, 21, 42, 66, -106, -28, -10, 66, -109, 115, 80, 66, 106, -40, -14, 66, -120, -72, 26, 66, -112, -123, 74, 66, -104, 116, -53, 66, -127, -41, -107, 66, 103, 90, 71, 66, -110, 59, 35, 66, -115, 83, -76, 66, -112, 23, 109, 66, -95, 124, -32, 66, 99, 88, -111, 66, -83, 76, 58, 66, -67, 86, -107, 66, 102, 91, -53, 66, 73, -32, 55, 66, -99, -60, -82, 66, -111, 119, 102, 66, -111, 90, 71, 66, 72, -23, -54, 66, -121, -81, 111, 66, -72, 81, 54, 66, -95, 121, -95, 66, -116, -81, 27, 66, -124, 53, -15, 66, -75, -30, -65, 66, -92, -71, 68, 66, -78, 57, 114, 66, -119, -94, -71, 66, -77, 87, -71, 66, -110, -123, 79, 66, 105, -72, -57, 66, -103, -72, 65, 66, -68, -27, -82, 66, 77, 108, 95, 66, 105, 107, 63, 66, -75, 105, 83, 66, -65, 81, 26, 66, -119, -87, -52, 66, -125, 64, -44, 66, 97, -62, -39, 66, -107, -37, -61, 66, 118, -2, -52, 66, 113, 79, 85, 66, -111, 44, -29, 66, -105, 74, 16, 66, -84, 38, 16, 66, 105, 3, 12, 66, -128, 49, -110, 66, 114, -78, -7, 66, -72, 50, -25, 66, -79, 82, -2, 66, -120, 10, -49, 66, -117, -94, -122, 66, 84, 86, -7, 66, 119, 15, 59, 66, -128, -35, 24, 66, -95, 23, 6, 66, -123, -46, -22, 66, -126, 49, 98, 66, -68, 14, -11, 66, 95, 110, -39, 66, 84, -86, -127, 66, -103, 1, -113, 66, 117, -22, -68, 66, -83, -36, -51, 66, -66, -122, -33, 66, -76, 111, 99, 66, -77, 113, 1, 66, -94, 101, 4, 66, -121, -93, -102, 66, -112, -9, -13, 66, -95, -77, -110, 66, -71, 90, -9, 66, 77, -93, 45, 66, -112, -31, 125, 66, -77, -106, -103, 66, -121, 120, 97, 66, -63, 83, 90, 66, -106, 116, -69, 66, 79, 10, -55, 66, -93, 126, -78, 66, -114, -112, -54, 66, 107, 8, 16, 66, -116, -94, 4, 66, -116, 27, -22, 66, -106, -106, -88, 66, 104, 125, -98, 66, -99, 124, 104, 66, -80, -86, 107, 66, -96, 57, 55, 66, -107, 71, -105, 66, -113, -58, 107, 66, 122, -44, -39, 66, -101, -66, 5, 66, -92, 71, 81, 66, 96, -70, -42, 66, -68, 26, 75, 66, -117, 102, 13, 66, -105, 31, 108, 66, -100, 109, -35, 66, -115, 51, 68, 66, -103, -41, 121, 66, 81, 88, -71, 66, -102, 0, 56, 66, -80, -28, -75, 66, -83, -55, -39, 66, -128, 103, -108, 66, -109, 127, -70, 66, -111, 74, 43, 66, -111, 78, -80, 66, -102, 15, -120, 66, 99, -114, -74, 66, -116, -107, -8, 66, -120, -122, -113, 66, 80, 38, -49, 66, -71, 124, 16, 66, -69, 85, -104, 66, -109, -62, -13, 66, -104, 54, 72, 66, -119, -85, -73, 66, -74, 126, 69, 66, 125, 12, 86, 66, -91, -38, 12, 66, -114, -14, -114, 66, -106, 28, 54, 66, -92, -36, 34, 66, 114, -25, 54, 66, -78, 38, 91, 66, -115, -117, 64, 66, -101, 114, 90, 66, -125, -66, -101, 66, -61, 114, -113, 66, -126, -59, -125, 66, -108, 105, -27, 66, -126, -4, 62, 66, -112, 75, -119, 66, -97, 119, -17, 66, -95, -8, 70, 66, 119, 42, 115, 66, 110, -95, 19, 66, -80, 84, -5, 66, -117, -22, 57, 66, -108, -3, 43, 66, -97, 113, 18, 66, -119, 43, -27, 66, -70, 85, 39, 66, -91, 99, 5, 66, -100, -51, 26, 66, -65, -59, 112, 66, -106, -111, -68, 66, 116, -19, -58, 66, -105, 31, -90, 66, -120, 61, 15, 66, 119, 65, -5, 66, -126, 55, -28, 66, -122, -105, 57, 66, -93, -46, -123, 66, -110, -22, -84, 66, -87, 109, 116, 66, -106, -76, -17, 66, 94, -72, 122, 66, 91, 88, -85, 66, -119, -75, -26, 66, -115, 48, 12, 66, -102, 100, 87, 66, -92, -64, -105, 66, 97, 24, -82, 66, -97, -115, 32, 66, -97, 91, -73, 66, -98, -78, 87, 66, 104, -116, 33, 66, 121, -19, -73, 66, -89, -25, 7, 66, -118, 107, 0, 66, -100, -85, 70, 66, -101, 103, 86, 66, -87, -86, 59, 66, -100, 17, -6, 66, -108, 65, -15, 66, -87, -55, -45, 66, -79, 46, 85, 66, -93, 80, -52, 66, -126, -104, 92, 66, 110, 18, 67, 66, -120, 0, -15, 66, -113, -98, 94, 66, -86, 52, -60, 66, -114, 50, -65, 66, -121, -115, 113 ], "precision": "FLOAT_32", "root": 0, "canonicalAndNotALeaf": true, "size": 255, "leftIndex": [ 0, 1, 255, 1033566207, 7846973, 1067573159, 37132719, 212909427, 549106746, 2877018, 179473574, 8193 ], "rightIndex": [ 0, 1, 255, 1071480575, 185058845, 999947994, 310774698, 198563097, 1880176, 34223184, 172131500, 561 ], "nodeFreeIndexes": [], "nodeFreeIndexPointer": -1, "leafFreeIndexes": [], "leafFreeIndexPointer": -1, "partialTreeStateEnabled": true }, "boundingBoxCacheFraction": 0.0, "partialTreeState": true, "seed": 3899095098967794180, "id": 0, "dimensions": 32, "staticSeed": 0, "weight": 0.0, "hasAuxiliaryData": false }, { "version": "2.0", "root": 0, "maxSize": 256, "outputAfter": 32, "storeSequenceIndexesEnabled": false, "centerOfMassEnabled": false, "nodeStoreState": { "version": "2.0", "capacity": 255, "compressed": true, "cutDimension": [ 0, 31, 255, 654261202, 1005930677, 728332218, 216766382, 858449742, 527600474, 330466978, 526456695, 115145981, 781878902, 976599139, 1002015797, 572987187, 980024407, 325359835, 981135163, 918014794, 712759738, 86695769, 263579555, 865767219, 610786366, 379166434, 597656865, 623486427, 207309618, 213166626, 127002862, 225038326, 749726009, 938727258, 82094013, 259106650, 666086890, 670115431, 51767507, 304123445, 632864178, 99801802, 1009329397, 402628166, 202757719, 959 ], "cutValueData": [ 66, 69, 55, 27, 66, -119, 29, -25, 66, -82, -110, -41, 66, -69, -51, 99, 66, -126, -50, 30, 66, -95, -123, 12, 66, -109, -108, 39, 66, -82, -51, 60, 66, -114, 48, 7, 66, -85, -94, -89, 66, 89, 60, -85, 66, -81, -99, -55, 66, -113, -65, 2, 66, -126, -11, 125, 66, -90, -104, -45, 66, 109, 67, 22, 66, -125, -112, -59, 66, -60, -14, -47, 66, -69, -27, 116, 66, 98, -37, 35, 66, 93, 43, -108, 66, 100, 118, -106, 66, 96, 44, 90, 66, -115, 85, -11, 66, -109, -14, 121, 66, -101, -126, -81, 66, -104, -64, 89, 66, -122, 31, -62, 66, -104, 85, -67, 66, -111, 35, 48, 66, -95, -10, 58, 66, -88, -15, 36, 66, -99, 16, 116, 66, -118, -39, -71, 66, 102, 65, -55, 66, 100, 78, -32, 66, -112, -53, 57, 66, 97, -65, -88, 66, -120, -71, -121, 66, -69, -100, 33, 66, -97, 35, 10, 66, 124, 30, 63, 66, -116, -58, -88, 66, -74, -23, 56, 66, -91, 70, -120, 66, 83, 101, 15, 66, 87, -97, 21, 66, -109, -124, -44, 66, -86, 95, -75, 66, -79, 84, -49, 66, -118, -65, 2, 66, -90, 21, 6, 66, -76, -52, 84, 66, -102, -77, 86, 66, 106, -122, 23, 66, -112, 8, -43, 66, -118, 10, 124, 66, -86, 127, 102, 66, -69, -88, 97, 66, -91, -125, -22, 66, 94, -88, -9, 66, -127, 53, -128, 66, 96, 109, -78, 66, -124, 123, 84, 66, -128, 2, -81, 66, 126, 96, 79, 66, -98, 76, -67, 66, -108, 112, -24, 66, -117, -61, 10, 66, -109, 22, -102, 66, -92, 22, -121, 66, -118, 68, -5, 66, -112, -26, 86, 66, 82, 27, -7, 66, -126, 108, 91, 66, -93, -58, 29, 66, -84, 36, -80, 66, -119, -72, 31, 66, -123, 56, 3, 66, 96, -52, -84, 66, -109, -109, -70, 66, -92, 3, 54, 66, -89, 92, 31, 66, -104, 21, -85, 66, -64, -108, -9, 66, -100, 0, 58, 66, 119, 80, -33, 66, 116, -125, 97, 66, -66, -70, -81, 66, 91, 65, -14, 66, -111, -12, 34, 66, 75, -111, 42, 66, -127, -10, 72, 66, 114, -13, 66, 66, -108, 45, -25, 66, -105, -122, -70, 66, -67, 54, 111, 66, -78, 46, 77, 66, -68, 62, -33, 66, -100, 87, -112, 66, -87, -99, -15, 66, -63, -29, -47, 66, -80, -119, -47, 66, -66, -5, -103, 66, 97, 63, 99, 66, -63, -48, 118, 66, 92, -3, 75, 66, -74, 6, -36, 66, -89, 95, -76, 66, -93, 21, -92, 66, -116, -16, -48, 66, -107, 39, -78, 66, -99, 2, 3, 66, -77, -64, -122, 66, -92, -6, 51, 66, -78, -4, 61, 66, -85, -120, 76, 66, -116, 120, -38, 66, -116, -14, 106, 66, -82, 41, 75, 66, 92, 85, -2, 66, -128, 104, -90, 66, -123, -24, 52, 66, -122, 11, -99, 66, -86, 99, 119, 66, -96, 52, 34, 66, -110, 80, 54, 66, 110, 50, -94, 66, -101, 68, 82, 66, -87, 104, 114, 66, 93, -126, 19, 66, -91, 11, 104, 66, 92, -73, -18, 66, -98, -119, 101, 66, 109, -82, 94, 66, -111, 76, -90, 66, -126, -6, 52, 66, -120, -29, -15, 66, -89, 79, -52, 66, -117, -9, -48, 66, -128, -122, 58, 66, -81, 59, -126, 66, -100, 86, -31, 66, -92, 78, 4, 66, -79, -53, -121, 66, -71, 52, -31, 66, 82, -89, -111, 66, -86, -8, -92, 66, -99, 121, 118, 66, -102, -3, -16, 66, -102, 64, -67, 66, -111, -67, 79, 66, -118, 73, -53, 66, -124, -120, -79, 66, -112, 11, 73, 66, -99, -69, 74, 66, -66, -21, 105, 66, -94, -32, 83, 66, -114, 89, -125, 66, -95, 95, 27, 66, -102, 56, -57, 66, -64, -43, -33, 66, -106, -66, 68, 66, -62, 105, 69, 66, -108, 96, -64, 66, -102, 4, 77, 66, -115, -40, -97, 66, -118, -29, 58, 66, -60, 64, -38, 66, 112, -100, -47, 66, -108, -82, -116, 66, -105, -70, 9, 66, -113, 114, -77, 66, -78, 34, -10, 66, -94, 127, 29, 66, -81, -34, 61, 66, -85, 24, -125, 66, -61, -15, 111, 66, -119, -30, -81, 66, 84, -64, 45, 66, -126, 39, -72, 66, -96, -4, 5, 66, -85, 122, -118, 66, -90, 23, 122, 66, -126, -90, -106, 66, 122, -43, -52, 66, 120, -127, -69, 66, -119, 68, -23, 66, -74, 2, -35, 66, -108, -108, 78, 66, -116, -52, -127, 66, -98, -47, 53, 66, 106, 52, 72, 66, -127, -109, 127, 66, -81, -60, 11, 66, -93, 85, 49, 66, -105, -78, -84, 66, -110, -101, -13, 66, -108, -30, 122, 66, -92, 89, -72, 66, -92, 102, -47, 66, -93, 34, -49, 66, -125, 69, 114, 66, -69, -16, -6, 66, -85, 13, 29, 66, -81, -65, -109, 66, -111, -79, -76, 66, -81, 63, -6, 66, 87, -8, -106, 66, -92, 80, 5, 66, -120, -10, -38, 66, -69, -50, -92, 66, -104, -9, 47, 66, 125, 4, 90, 66, -117, 114, 81, 66, -93, 122, 66, 66, -128, 34, 99, 66, -85, -10, -89, 66, -94, 28, -126, 66, -96, -12, 2, 66, -66, 8, -59, 66, -115, -75, -20, 66, -81, -26, -115, 66, 118, 72, -54, 66, 118, -119, -57, 66, 115, -88, -52, 66, -97, -34, 122, 66, 89, -60, -1, 66, -126, -48, -115, 66, 109, -23, 86, 66, -116, 57, -12, 66, -126, -49, 97, 66, 124, -97, 93, 66, -91, 125, -117, 66, -108, -54, -59, 66, -119, 19, 93, 66, -77, -65, 65, 66, -89, -78, 79, 66, -89, 27, -117, 66, -102, -67, 12, 66, 86, -97, 103, 66, -95, -66, -65, 66, -128, 102, 50, 66, -90, -1, 46, 66, 109, -47, -109, 66, -102, -15, 23, 66, 112, 77, 106, 66, -105, -13, 94, 66, -92, -55, -62, 66, -81, 17, -115, 66, -114, -103, -38, 66, -127, -29, -39, 66, 119, 90, 64, 66, -109, 12, -127, 0, 0, 0, 0 ], "precision": "FLOAT_32", "root": 0, "canonicalAndNotALeaf": true, "size": 254, "leftIndex": [ -1, 1, 255, 1162260734, 1033121303, 975725665, 1099472426, 1097956745, 731607295, 645677852, 1011604586, 716650712, 731549203, 710864306, 712422943, 710349719, 1120 ], "rightIndex": [ -1, 1, 255, 1033120547, 1161730016, 601059770, 1160056957, 1157450056, 774221296, 630621112, 970145554, 587515571, 600459695, 1098281905, 581721952, 581130817, 1336 ], "nodeFreeIndexes": [], "nodeFreeIndexPointer": 0, "leafFreeIndexes": [], "leafFreeIndexPointer": 0, "partialTreeStateEnabled": true }, "boundingBoxCacheFraction": 0.0, "partialTreeState": true, "seed": -7971869639547712875, "id": 0, "dimensions": 32, "staticSeed": 0, "weight": 0.0, "hasAuxiliaryData": false }, { "version": "2.0", "root": 0, "maxSize": 256, "outputAfter": 32, "storeSequenceIndexesEnabled": false, "centerOfMassEnabled": false, "nodeStoreState": { "version": "2.0", "capacity": 255, "compressed": true, "cutDimension": [ 0, 31, 255, 978921285, 994007269, 471914914, 452950318, 129979958, 83547427, 480812537, 174955119, 366916790, 379754205, 70045301, 593870679, 324643107, 82025451, 975680853, 112561835, 240470142, 765319901, 1016262463, 1024589503, 605260962, 593682359, 464855001, 368409769, 223430526, 489252134, 620297641, 254379710, 313257399, 463113138, 648330745, 468004651, 103794910, 339715569, 465107301, 443099255, 328904566, 849832795, 582960731, 98542957, 233622623, 81833694, 189 ], "cutValueData": [ 66, -93, -26, 21, 66, -86, 71, 90, 66, -61, -103, 106, 66, 74, 63, -50, 66, -115, 59, 76, 66, -81, 92, -30, 66, -67, 34, -95, 66, 96, -106, 78, 66, -125, 80, 19, 66, 125, -60, 127, 66, 82, -48, 19, 66, 95, -109, -38, 66, -86, 96, -78, 66, 121, 80, -77, 66, 94, -64, -88, 66, -128, 17, -120, 66, -97, -74, 117, 66, 91, -75, 0, 66, 110, 39, -50, 66, -101, -127, 18, 66, -87, 125, -29, 66, -86, 38, 64, 66, -91, -73, -87, 66, -71, -36, 55, 66, 116, -113, -56, 66, 116, -17, 63, 66, 119, 52, -85, 66, -92, -117, -12, 66, -89, -128, -102, 66, 91, 27, 95, 66, -77, 110, 64, 66, -105, 113, -127, 66, -112, -104, 94, 66, -90, 104, -59, 66, -77, 69, 29, 66, 87, 112, -113, 66, -110, 84, -61, 66, -108, -55, -107, 66, -103, 66, -75, 66, -88, 112, -52, 66, -121, 8, -28, 66, 93, -12, -7, 66, -110, 91, 102, 66, -109, 18, -79, 66, -110, -57, 47, 66, -123, 82, 58, 66, 120, -52, 34, 66, -123, -80, -70, 66, 95, 38, -46, 66, 100, -88, -62, 66, 79, 127, -74, 66, -105, 62, -9, 66, 110, 1, 60, 66, 114, 9, 110, 66, -79, -74, -67, 66, 81, -38, 76, 66, 105, 17, -60, 66, 119, -100, 31, 66, -96, 118, 35, 66, -90, 109, -108, 66, -120, -94, 17, 66, 121, 89, -121, 66, -95, -62, 116, 66, -125, -81, 3, 66, -120, -23, -70, 66, -114, -37, 53, 66, -121, 29, 35, 66, -114, 43, 88, 66, -116, 71, 42, 66, -90, -125, 105, 66, 118, 92, 104, 66, 118, -46, -121, 66, 126, -102, 1, 66, 119, 34, -20, 66, -68, 78, 59, 66, 109, -56, 42, 66, -103, -70, -35, 66, 115, 94, 67, 66, -82, 3, 56, 66, -92, -7, 88, 66, -84, 11, 51, 66, -107, 38, 1, 66, -104, -38, -89, 66, 121, 97, -15, 66, 99, -71, -126, 66, 104, 76, -15, 66, -85, -96, 67, 66, -93, -30, 45, 66, -106, 58, -90, 66, 119, 6, -29, 66, -79, -121, -14, 66, -108, 5, -43, 66, -67, -39, 39, 66, -77, -97, -35, 66, -127, 59, 22, 66, -84, -44, 106, 66, -100, -25, -87, 66, -100, -119, 89, 66, -124, 10, 115, 66, -91, -72, 81, 66, -128, -16, 103, 66, 113, -106, 77, 66, -113, 101, 86, 66, 80, 101, 15, 66, 120, 106, -77, 66, 117, 17, 41, 66, 118, -1, -88, 66, 87, -46, 78, 66, 106, -72, 55, 66, 94, 12, 80, 66, 92, 106, -123, 66, -111, -96, 116, 66, -119, -9, 126, 66, 114, 94, 120, 66, -69, -29, -76, 66, -124, -122, -125, 66, -62, 107, -91, 66, 98, -126, -112, 66, -98, 29, 63, 66, -72, 125, 5, 66, -71, -28, 46, 66, 101, -112, -12, 66, -102, -16, -124, 66, 86, 39, 55, 66, -121, 82, 10, 66, -102, 81, -14, 66, -106, 30, -47, 66, -127, -85, -118, 66, -117, -30, 22, 66, -107, -41, 12, 66, 109, -121, 57, 66, -98, -84, -39, 66, -123, 107, 6, 66, -98, 13, -38, 66, -61, 52, -55, 66, -89, 11, 46, 66, -118, 85, 20, 66, 113, -62, 48, 66, -126, 49, 7, 66, 96, -4, 98, 66, 110, -72, -86, 66, -101, -50, 29, 66, -109, 99, 83, 66, -69, 104, 110, 66, -90, 42, 122, 66, -99, 30, -73, 66, 117, -28, 107, 66, -86, -57, 27, 66, 116, -48, 80, 66, -114, 98, -36, 66, -118, 41, -64, 66, -105, -49, -91, 66, -111, -109, 55, 66, -107, -63, 56, 66, -65, -28, 20, 66, 117, 89, 25, 66, -120, -107, 27, 66, -112, -63, -25, 66, -69, -107, -121, 66, -119, -31, 34, 66, -126, -98, 63, 66, -106, 64, -41, 66, -95, -60, 76, 66, 105, -113, -36, 66, -97, -104, 64, 66, -80, -50, 86, 66, -111, -92, -107, 66, -108, -93, 114, 66, -84, 80, -105, 66, 125, -41, -105, 66, 90, -76, -60, 66, -72, 40, 112, 66, -101, 86, 44, 66, -103, 37, -7, 66, 122, -118, -45, 66, -70, 117, 61, 66, 123, -24, 20, 66, 100, -16, -104, 66, -107, 35, -96, 66, -91, 95, 78, 66, -122, 122, 64, 66, -90, -41, 103, 66, -114, -38, 90, 66, -71, 58, -43, 66, -96, 17, -48, 66, -70, 103, 88, 66, -116, 53, -54, 66, -91, 104, -47, 66, -121, 10, -120, 66, 110, -97, -121, 66, -85, 74, 46, 66, 88, 122, 19, 66, -81, -108, -80, 66, -108, -77, -44, 66, 96, 64, 82, 66, -102, -71, -23, 66, -103, 80, 89, 66, -120, 86, -104, 66, -77, 101, -80, 66, -96, -9, 109, 66, -109, -71, -40, 66, -95, 21, 10, 66, -114, 13, 101, 66, -101, 87, 2, 66, 122, -27, 8, 66, 118, 50, -116, 66, -117, 83, -108, 66, -98, 42, 24, 66, -119, -19, 35, 66, -94, 18, 25, 66, -117, 79, 86, 66, -103, 90, -44, 66, 101, 108, 34, 66, -91, 48, 78, 66, -67, -52, -115, 66, -124, -30, -62, 66, -74, 31, 43, 66, -91, 100, 20, 66, -115, 0, 86, 66, -82, -12, -26, 66, -114, 26, 8, 66, 91, 26, 105, 66, 124, 39, 56, 66, 77, -61, -60, 66, -109, 123, -95, 66, -107, 64, -95, 66, -124, -12, -82, 66, 69, 70, -69, 66, -114, 10, -29, 66, -121, 89, 117, 66, -124, 101, 2, 66, -108, -3, 91, 66, 123, 47, -107, 66, -97, -84, -31, 66, -109, 98, 89, 66, -112, -51, 11, 66, 98, -72, -7, 66, -92, -80, 25, 66, -94, 33, 95, 66, -111, 78, 124, 66, 125, -94, -112, 66, -82, -81, -13, 66, 102, 113, -102, 66, -112, 95, -113, 66, -79, 107, -119, 66, -100, 102, 124, 66, -79, -73, -5, 66, -113, 96, 115, 66, 98, 57, -23, 66, -114, -56, -79, 66, -109, 55, 24, 66, -84, 86, -102, 66, -112, -13, 120, 66, -83, -29, 87, 0, 0, 0, 0 ], "precision": "FLOAT_32", "root": 0, "canonicalAndNotALeaf": true, "size": 254, "leftIndex": [ -1, 1, 255, 768463685, 1028309171, 631350899, 1119188465, 755098891, 597318908, 970174987, 600796250, 754973449, 1155678233, 754991735, 710529692, 970211435, 1094 ], "rightIndex": [ -1, 1, 255, 1157477768, 774832199, 631350935, 1032528356, 1143129229, 716893402, 970855216, 973511581, 1097759536, 968617804, 1097692441, 968551981, 1112217467, 1096 ], "nodeFreeIndexes": [], "nodeFreeIndexPointer": 0, "leafFreeIndexes": [], "leafFreeIndexPointer": 0, "partialTreeStateEnabled": true }, "boundingBoxCacheFraction": 0.0, "partialTreeState": true, "seed": -5616425619850912141, "id": 0, "dimensions": 32, "staticSeed": 0, "weight": 0.0, "hasAuxiliaryData": false }, { "version": "2.0", "root": 0, "maxSize": 256, "outputAfter": 32, "storeSequenceIndexesEnabled": false, "centerOfMassEnabled": false, "nodeStoreState": { "version": "2.0", "capacity": 255, "compressed": true, "cutDimension": [ 1, 31, 255, 510656361, 600278606, 253326725, 595140644, 831584705, 585219198, 728696459, 41477397, 870711578, 44988593, 54787746, 14824058, 750086845, 380106249, 599335497, 180759439, 806212701, 310562823, 403506273, 421878371, 653367040, 357206430, 79900404, 380801954, 404657871, 601496835, 847113032, 878399556, 401445895, 154883848, 26336039, 614143973, 269541196, 369730541, 384029582, 488060360, 7562094, 36883374, 234619561, 832217179, 172982005, 531182728, 2082 ], "cutValueData": [ 66, -116, -46, 3, 66, -120, -122, -64, 66, -59, 109, 80, 66, 69, 4, -20, 66, -72, 29, -42, 66, 125, -26, -90, 66, -104, -102, 56, 66, 110, -19, -125, 66, -125, 28, -21, 66, -94, -94, -57, 66, -91, -110, 9, 66, -104, 16, 53, 66, -89, -41, 61, 66, 108, 110, 29, 66, -80, -56, -81, 66, -104, -104, 42, 66, 124, -56, 101, 66, 85, 96, -64, 66, -70, -36, 110, 66, -67, -36, 27, 66, -64, 124, 75, 66, -72, -85, -58, 66, -69, 30, 77, 66, -117, -100, -79, 66, -98, 53, -70, 66, 113, 96, -64, 66, 88, -7, 67, 66, -71, -119, 53, 66, 91, -115, -23, 66, 127, -59, 86, 66, -72, -15, -35, 66, -105, 93, -77, 66, -71, 66, 99, 66, -83, 93, -28, 66, 100, 92, 8, 66, -102, 15, 74, 66, 78, 90, -98, 66, -124, 65, 3, 66, 83, 3, 23, 66, -124, -53, -26, 66, -66, -38, -52, 66, -109, -120, 109, 66, -87, 27, 37, 66, -105, -54, -42, 66, -81, 91, -112, 66, -61, 48, -121, 66, 98, -85, -64, 66, -127, 15, 109, 66, -92, 117, -65, 66, -94, -47, -19, 66, -110, -67, -20, 66, -111, -12, -13, 66, 107, 95, -67, 66, -113, -108, -86, 66, 78, -127, -89, 66, -108, 25, -26, 66, 116, -42, -25, 66, 92, 119, 45, 66, -83, -44, -24, 66, 81, -60, -47, 66, -74, 81, -119, 66, 95, 37, 65, 66, -73, 29, 95, 66, 86, -30, 44, 66, -116, 96, -70, 66, -110, 109, 109, 66, 93, 33, -48, 66, 108, 1, 73, 66, 115, 98, -107, 66, 104, -31, 26, 66, -121, 46, -126, 66, -118, -50, -6, 66, 94, 76, 62, 66, -85, -51, -26, 66, -79, -64, -51, 66, -127, 51, -93, 66, -127, 57, -35, 66, 91, 12, -21, 66, -118, 113, 75, 66, 99, 56, 106, 66, -108, -124, 77, 66, 126, 123, -75, 66, 124, -41, 17, 66, -86, -99, -123, 66, 115, 76, 125, 66, -77, -31, -7, 66, -117, -14, -50, 66, -114, 94, -26, 66, -101, -109, -12, 66, -119, 36, 80, 66, -99, -34, -65, 66, -108, -98, -97, 66, -76, 62, 31, 66, -75, -81, -4, 66, -61, -81, 6, 66, 119, 122, 23, 66, -123, 99, -60, 66, -107, 55, 23, 66, -75, 28, -26, 66, 110, 22, 5, 66, 87, -120, -24, 66, -115, 83, 112, 66, 105, -28, -108, 66, -123, 77, -2, 66, 111, -122, 66, 66, -93, -65, 116, 66, 88, -57, 60, 66, -86, 27, 64, 66, -115, 93, -100, 66, -105, 21, -51, 66, 104, -68, 46, 66, -64, 116, 3, 66, -117, 74, -58, 66, -81, 8, 15, 66, -94, 55, -78, 66, 121, -108, -86, 66, -88, 106, -45, 66, -81, -2, 44, 66, -113, 86, -123, 66, -91, 65, 40, 66, -115, 13, -3, 66, -83, 54, -42, 66, -75, -68, 40, 66, -114, 69, 118, 66, -77, 126, 109, 66, -120, -24, -105, 66, 112, 64, -73, 66, -123, 78, 59, 66, -126, 56, -56, 66, -121, -120, -61, 66, -122, -59, -39, 66, -86, 94, -118, 66, 107, -123, -50, 66, -119, -29, -122, 66, -109, -104, -40, 66, 79, 127, 115, 66, 86, -24, 3, 66, -113, -88, -21, 66, -74, -117, 60, 66, 98, 109, -22, 66, -75, 22, 90, 66, -77, -18, -68, 66, 91, -115, 70, 66, -98, 99, -24, 66, 94, 45, 55, 66, -117, 107, -45, 66, -84, 95, 82, 66, -109, 112, 27, 66, -93, 65, -124, 66, 105, -51, 112, 66, -93, -67, -117, 66, -127, -31, 64, 66, -66, -128, -70, 66, -125, -47, -9, 66, -121, 59, -3, 66, -110, -70, 29, 66, 85, 58, 84, 66, -127, 98, 57, 66, 106, -120, -47, 66, 125, -104, -63, 66, -87, 51, -34, 66, -88, 5, -121, 66, -116, -116, 108, 66, 96, -109, -102, 66, -122, -54, 29, 66, -69, 90, 39, 66, -102, -71, 106, 66, 101, -108, -6, 66, 93, -68, -48, 66, -72, 107, 52, 66, 100, -81, -42, 66, -123, -70, -29, 66, -110, 9, -82, 66, -65, 12, -119, 66, 119, 55, -21, 66, 115, 18, 24, 66, -125, 34, 28, 66, -101, -96, -108, 66, -126, -91, -92, 66, -91, 41, 97, 66, -117, 93, 70, 66, 106, -67, 53, 66, -127, 77, 29, 66, -128, -10, -55, 66, 85, -6, -14, 66, 115, -88, -116, 66, 89, -110, -95, 66, -85, -71, -27, 66, -122, -85, -92, 66, -84, -86, -55, 66, 102, 126, -46, 66, -125, -39, 17, 66, -118, 63, 116, 66, 120, -36, -123, 66, 122, -92, 96, 66, -87, -126, -22, 66, -98, 61, 68, 66, -102, 115, -15, 66, -81, 53, -70, 66, -127, 93, -42, 66, -83, 55, -42, 66, -125, -21, 47, 66, -75, 110, 73, 66, 111, 33, -66, 66, -124, -72, -55, 66, -101, 12, 72, 66, 76, -24, -89, 66, 116, -81, -60, 66, 104, -115, -102, 66, 89, 110, -6, 66, 116, 88, -28, 66, -93, 44, -64, 66, -81, -128, -76, 66, -68, -75, 117, 66, -97, 75, -1, 66, -79, 15, 29, 66, -83, 51, 0, 66, 121, 7, 66, 66, -80, -49, 9, 66, 105, -66, -96, 66, -102, 103, -87, 66, -95, 83, 83, 66, -107, -14, 123, 66, 95, 13, -63, 66, 76, -48, 74, 66, -63, -41, -2, 66, -65, -67, -112, 66, -112, 52, 123, 66, -96, -70, -16, 66, -75, -70, -55, 66, -71, -126, -122, 66, -90, 26, -49, 66, -126, 38, 32, 66, -102, -29, -77, 66, 112, 79, 29, 66, 120, 5, 14, 66, -127, -35, -13, 66, 107, -29, -92, 66, -127, -94, 51, 66, 121, -88, -120, 66, -103, 76, -72, 66, -126, -44, -62, 66, -121, -2, 118, 66, -120, 65, -41, 66, -100, -97, 33, 66, -120, -82, 36, 66, -67, 32, -50, 66, -94, 122, -48, 66, -101, -12, 50, 66, -102, -15, 38, 66, -117, -37, 14, 66, -86, -126, 71, 66, -81, 7, -126, 66, -116, 69, -63, 66, -78, -41, -94 ], "precision": "FLOAT_32", "root": 0, "canonicalAndNotALeaf": true, "size": 255, "leftIndex": [ 0, 1, 255, 790626295, 679477087, 412506246, 950297478, 705039134, 736271007, 176986631, 138021382, 2418 ], "rightIndex": [ 0, 1, 255, 1041231855, 961487323, 419388414, 203088578, 563888667, 712115865, 449557004, 685772805, 289 ], "nodeFreeIndexes": [], "nodeFreeIndexPointer": -1, "leafFreeIndexes": [], "leafFreeIndexPointer": -1, "partialTreeStateEnabled": true }, "boundingBoxCacheFraction": 0.0, "partialTreeState": true, "seed": -7146792820767120252, "id": 0, "dimensions": 32, "staticSeed": 0, "weight": 0.0, "hasAuxiliaryData": false }, { "version": "2.0", "root": 0, "maxSize": 256, "outputAfter": 32, "storeSequenceIndexesEnabled": false, "centerOfMassEnabled": false, "nodeStoreState": { "version": "2.0", "capacity": 255, "compressed": true, "cutDimension": [ 1, 31, 255, 233499737, 158994418, 628395225, 752668636, 285752461, 857045498, 516575438, 605536352, 399910403, 134305809, 406637502, 120699630, 764732399, 9847357, 369440076, 274108631, 115797896, 417072363, 258526687, 67175843, 650792399, 234580157, 267144489, 392867647, 38134234, 523793265, 230238218, 859788879, 761518583, 34225241, 392417407, 377993091, 593385661, 314056312, 746276621, 498382796, 402814384, 857345902, 33761211, 13348931, 32970897, 65301105, 7747 ], "cutValueData": [ 66, -74, 81, 69, 66, -106, 91, 98, 66, -119, 125, 113, 66, -81, -73, 116, 66, -118, 54, -23, 66, 94, -117, 25, 66, -88, 4, 80, 66, 123, 112, 11, 66, 84, -79, -116, 66, -123, 61, -42, 66, -99, 25, -1, 66, -97, -41, -98, 66, -123, -46, 56, 66, -100, -74, -90, 66, -75, -93, 120, 66, -77, -83, -70, 66, 100, 99, 90, 66, -70, 95, 84, 66, 90, 106, -94, 66, 81, 1, 26, 66, -106, -41, 65, 66, 126, -124, 65, 66, 118, -75, -97, 66, -92, -54, 30, 66, -92, -106, 93, 66, 94, -81, 71, 66, 108, -66, 97, 66, -104, 39, -106, 66, -60, -62, -112, 66, -59, -17, -23, 66, -119, -74, 86, 66, -93, -61, -43, 66, 127, -106, -108, 66, -87, 124, 120, 66, -123, 60, -106, 66, -63, 121, 94, 66, -115, 98, 47, 66, -71, 112, 80, 66, -71, 54, -27, 66, -91, -127, 113, 66, -116, 39, -73, 66, 120, 87, -96, 66, -72, -106, -104, 66, -123, -51, 105, 66, 100, -36, 110, 66, 84, -83, 60, 66, -91, -128, 108, 66, -106, -16, 118, 66, -107, -28, -6, 66, -92, 23, -124, 66, -77, 114, -46, 66, -106, 58, 109, 66, 100, -11, -29, 66, -86, 111, 84, 66, -115, -77, -39, 66, -123, 54, 70, 66, -81, 113, 60, 66, -105, -96, 117, 66, -80, -3, -105, 66, -107, 64, 59, 66, -127, 27, -67, 66, -87, 24, -13, 66, 115, -54, -125, 66, -81, 62, 21, 66, -124, -84, 94, 66, -98, -117, -93, 66, -113, -34, 29, 66, -100, -48, -6, 66, -120, -104, 20, 66, -118, -90, 69, 66, 127, 119, 64, 66, -112, 18, 42, 66, -121, 44, 90, 66, 120, 34, -15, 66, -91, 51, -92, 66, -71, -52, 18, 66, -128, -100, 22, 66, -77, -31, 65, 66, -122, -10, 16, 66, -106, 62, 19, 66, 121, 104, 112, 66, -118, 76, -102, 66, -84, -42, 44, 66, -103, 114, 37, 66, -82, -105, -54, 66, -90, -24, 119, 66, -127, 107, -88, 66, -116, 127, -67, 66, -95, 80, 112, 66, -107, 70, 27, 66, 96, 25, 93, 66, -98, -100, 78, 66, -108, 54, -64, 66, -108, 49, 121, 66, -126, -78, -87, 66, 121, -95, 92, 66, -123, -56, -46, 66, -77, -123, -22, 66, -121, -86, 31, 66, 96, 101, 48, 66, -73, 122, 46, 66, 97, 1, 0, 66, -109, -87, -19, 66, -72, 3, -86, 66, -108, -64, 85, 66, 107, -84, 3, 66, -126, -13, -22, 66, -124, 85, 42, 66, 117, -2, 90, 66, -100, -47, -25, 66, -94, -21, 108, 66, -100, 28, 8, 66, -84, -84, -19, 66, -101, -55, 65, 66, -89, -117, 120, 66, -72, 72, -6, 66, -94, -120, 26, 66, 109, 24, 61, 66, -114, 29, 10, 66, 121, 65, -43, 66, -109, 62, 27, 66, -105, -89, -31, 66, 125, 114, 116, 66, -107, 60, -7, 66, -81, 118, -89, 66, -68, 10, -123, 66, 97, -63, 104, 66, -126, 1, 66, 66, 97, 103, 95, 66, -63, -119, -4, 66, -89, -90, -54, 66, -108, -112, -41, 66, -109, 72, 80, 66, -91, -6, 2, 66, -74, -103, 58, 66, -92, 25, 19, 66, 87, -78, 8, 66, 90, -41, -109, 66, -114, -67, -98, 66, -126, 116, -71, 66, -86, 16, 117, 66, -80, -12, -67, 66, -114, -79, -93, 66, -111, 5, -104, 66, -96, 44, 24, 66, -65, -1, -75, 66, 119, 81, -57, 66, -84, 53, 100, 66, -70, -84, 58, 66, 119, 106, 123, 66, 85, -29, -26, 66, -94, 17, 68, 66, -97, -61, -108, 66, -72, 8, 7, 66, -113, -38, 78, 66, -100, -119, 40, 66, -108, -15, -117, 66, -95, -14, -48, 66, 83, -32, -64, 66, 120, 50, -122, 66, -115, 48, -46, 66, -127, -69, 37, 66, -83, -72, -56, 66, -73, 99, -58, 66, -90, -85, 105, 66, -116, -90, -12, 66, 87, -123, -81, 66, -120, -80, 35, 66, -80, -61, 28, 66, 123, 36, -128, 66, -97, -47, 47, 66, 92, -65, 105, 66, -94, -95, -23, 66, -102, -56, 114, 66, -108, -21, 23, 66, -128, 61, 127, 66, -78, 20, 14, 66, -102, -68, -27, 66, 112, -97, -3, 66, -110, 5, -99, 66, -115, 78, -74, 66, -62, -61, 95, 66, -118, 113, -95, 66, -101, -32, 105, 66, 86, -115, 81, 66, -126, 59, 101, 66, 81, 72, -97, 66, -110, -79, -88, 66, -70, -38, 123, 66, -113, 37, 6, 66, -105, 48, -51, 66, -106, 22, 102, 66, -124, -48, -25, 66, -109, -100, 53, 66, -100, 19, 53, 66, -106, 97, -107, 66, -118, 126, -80, 66, -110, -127, -23, 66, -117, 107, -34, 66, -99, 96, -106, 66, 126, 121, -1, 66, -91, -38, -1, 66, -85, 86, -39, 66, -103, 10, -115, 66, 100, -53, -2, 66, -111, -113, -70, 66, -112, 112, -59, 66, -118, -25, 75, 66, -105, 120, -28, 66, 76, -97, 107, 66, -108, -68, -47, 66, -113, -88, 25, 66, 118, 46, -3, 66, -68, 97, -94, 66, 118, 31, 77, 66, 115, 98, 35, 66, -101, -87, 81, 66, -83, -125, 95, 66, -75, 17, -42, 66, 112, 66, -79, 66, 122, -51, -95, 66, -71, 100, 17, 66, 120, 127, -31, 66, -106, 96, 100, 66, -89, 54, 56, 66, -119, 42, -111, 66, -107, 57, 79, 66, 108, 120, -101, 66, 121, -4, 56, 66, -87, -100, -29, 66, -127, 9, -18, 66, -106, -61, 122, 66, -109, -33, 127, 66, -99, 46, -117, 66, -125, -76, 75, 66, 126, 73, -26, 66, -127, -63, 87, 66, -120, -16, -90, 66, 111, 82, 60, 66, -116, 102, -56, 66, 106, 75, -80, 66, -66, 15, 64, 66, 98, 38, 73, 66, 109, 37, -108, 66, -126, 74, -40, 66, 98, 99, 74, 66, -98, -67, -1, 66, -81, 17, -34, 66, -128, 84, -15, 66, -92, -33, -119, 66, 118, -26, 115, 66, -116, -115, -5, 66, -125, -5, -122, 66, -120, 29, 99, 66, -82, 64, -30 ], "precision": "FLOAT_32", "root": 0, "canonicalAndNotALeaf": true, "size": 255, "leftIndex": [ 0, 1, 255, 1048307455, 905133887, 557349561, 356481149, 997778536, 38684738, 359091074, 25198865, 4248 ], "rightIndex": [ 0, 1, 255, 243250943, 98823801, 825786037, 3135615, 808137098, 312601984, 93592132, 545771575, 4124 ], "nodeFreeIndexes": [], "nodeFreeIndexPointer": -1, "leafFreeIndexes": [], "leafFreeIndexPointer": -1, "partialTreeStateEnabled": true }, "boundingBoxCacheFraction": 0.0, "partialTreeState": true, "seed": 6408488327328865688, "id": 0, "dimensions": 32, "staticSeed": 0, "weight": 0.0, "hasAuxiliaryData": false }, { "version": "2.0", "root": 0, "maxSize": 256, "outputAfter": 32, "storeSequenceIndexesEnabled": false, "centerOfMassEnabled": false, "nodeStoreState": { "version": "2.0", "capacity": 255, "compressed": true, "cutDimension": [ 0, 31, 255, 1031133617, 338291887, 1066871715, 201039099, 45476909, 366836685, 896216501, 1029793774, 896185561, 175111619, 590053042, 251432098, 761771375, 111523962, 912841061, 393793337, 1068963422, 182285743, 303728743, 69990621, 919905963, 912324141, 1033631475, 314153517, 977255359, 127203582, 863567834, 747682889, 366464319, 652791394, 498297426, 576788985, 919709037, 256986938, 370448213, 783362081, 268396485, 714987482, 789636803, 585188839, 207440957, 884976566, 1017 ], "cutValueData": [ 66, -77, 15, -76, 66, 125, 86, 92, 66, -108, -92, -20, 66, -72, -78, -29, 66, 108, -83, -35, 66, -112, -84, -28, 66, -80, 61, -97, 66, -115, -38, 101, 66, 76, -107, -108, 66, 105, 108, -4, 66, -120, -31, -65, 66, -68, -59, -115, 66, -91, 44, -66, 66, 90, 4, -56, 66, -97, 104, 122, 66, -117, 19, -91, 66, 101, -5, -102, 66, -117, 5, 33, 66, 125, 76, 81, 66, -89, -128, 11, 66, -106, 35, -56, 66, 116, 123, -10, 66, 115, -79, -79, 66, 78, 72, -32, 66, -116, -49, -37, 66, -93, -30, -68, 66, -118, 127, -107, 66, -127, -121, -15, 66, -99, 87, 89, 66, -118, 4, -104, 66, 84, 71, 42, 66, -90, 13, 3, 66, 96, 110, 93, 66, 111, -117, -120, 66, -118, 4, 75, 66, 114, 127, 114, 66, 91, 81, 4, 66, -119, -20, 5, 66, -109, -102, -6, 66, -88, -85, 19, 66, -89, 112, -27, 66, -83, 75, 12, 66, 80, -47, 16, 66, -125, 5, 114, 66, -114, -96, -35, 66, -99, -86, 7, 66, -85, 99, -67, 66, -91, 126, -21, 66, -76, -57, -45, 66, -121, 19, -13, 66, 99, 21, -61, 66, 94, 27, -62, 66, 82, 48, 105, 66, -121, 42, 120, 66, -116, -38, 48, 66, 90, 95, -19, 66, -116, 84, -98, 66, -71, 102, -76, 66, -118, -127, 86, 66, 101, 89, -48, 66, -124, 19, 106, 66, -128, 69, -104, 66, -74, 12, 7, 66, 101, -95, 30, 66, -121, 59, 11, 66, 124, 95, 91, 66, -127, -53, -56, 66, -67, -58, 65, 66, -93, -1, 24, 66, -78, -128, 106, 66, -78, 109, -100, 66, 125, 11, -68, 66, -126, -114, 63, 66, -102, -99, -98, 66, -112, 85, 72, 66, -86, -78, -127, 66, -70, -18, 47, 66, -105, -91, -31, 66, -81, 97, -37, 66, -91, -125, -106, 66, 124, -75, -26, 66, -107, 92, -120, 66, -102, 19, 127, 66, -85, 112, 15, 66, -111, 37, 45, 66, -96, -21, 77, 66, -122, -23, 90, 66, -107, -23, 28, 66, -111, 65, -49, 66, -103, 21, -9, 66, -87, -65, -48, 66, -101, -76, 41, 66, -80, -54, 125, 66, -96, -61, -24, 66, -102, 99, 45, 66, -95, -102, 29, 66, -95, -4, -33, 66, -123, 52, 123, 66, -94, -18, 52, 66, -78, 59, -37, 66, -86, 9, -125, 66, -91, 41, -77, 66, -115, -103, -62, 66, -84, 43, -4, 66, 86, -125, -127, 66, -105, 93, -74, 66, -112, -30, 71, 66, -122, -24, -95, 66, -90, -4, -112, 66, -120, -77, -104, 66, -103, 89, -39, 66, -75, -113, 113, 66, 98, -50, 29, 66, -123, -117, -103, 66, -100, 96, -5, 66, -114, 99, -25, 66, -96, 76, -34, 66, -84, 19, -11, 66, 102, -102, -1, 66, -91, 78, 102, 66, -113, -89, -87, 66, 98, 39, 114, 66, -100, 36, -86, 66, 97, -53, 18, 66, 109, 18, -75, 66, -116, -20, 45, 66, -113, -51, 52, 66, 113, -81, -105, 66, 127, 41, -39, 66, -87, -124, 74, 66, -117, -68, -18, 66, -116, 36, 65, 66, -116, 98, -58, 66, -83, 126, 29, 66, 101, 81, -77, 66, 119, 69, -7, 66, 100, 72, -99, 66, 88, 44, -4, 66, -97, -93, -36, 66, -117, -111, -71, 66, 111, 79, 100, 66, 96, 39, 1, 66, -90, -115, 23, 66, 121, 19, -64, 66, -114, 63, 53, 66, -110, 52, -78, 66, -119, -17, 109, 66, -110, -59, 88, 66, 120, -42, 90, 66, -110, 76, -26, 66, -65, -97, -50, 66, 88, 50, -100, 66, 101, 18, -107, 66, -113, -56, 125, 66, -96, -17, -123, 66, -88, -109, 51, 66, 106, 38, -101, 66, -101, -72, 98, 66, -83, 65, 16, 66, -100, 63, -40, 66, 90, 114, 122, 66, -96, -32, 67, 66, -105, -14, 11, 66, 116, 19, 8, 66, -112, -77, 36, 66, 127, 123, 31, 66, 96, 75, 106, 66, -115, 71, -15, 66, -70, 47, -38, 66, 114, -125, -1, 66, -125, -24, -117, 66, -117, -53, 89, 66, -97, -39, -97, 66, -91, 125, -9, 66, -87, -57, -10, 66, -112, 87, -113, 66, -113, -41, 25, 66, -96, -69, -1, 66, -97, 31, -118, 66, -88, -56, 54, 66, -114, -101, 112, 66, -98, 72, 25, 66, -98, -18, 28, 66, 106, 39, 73, 66, -113, -76, 17, 66, 103, -90, -79, 66, -124, 17, 34, 66, 68, 75, -15, 66, 122, -92, -122, 66, -67, 98, 30, 66, -91, 69, -19, 66, 102, -49, 42, 66, -75, -116, -124, 66, -125, -90, 19, 66, -100, 97, 79, 66, 109, -67, -59, 66, -108, -46, 9, 66, -96, -40, 83, 66, -105, 81, 123, 66, -110, -94, 96, 66, -127, -109, -94, 66, -113, -110, -65, 66, -121, 127, 49, 66, 111, -24, 55, 66, -76, -98, 50, 66, 112, -4, 29, 66, -74, 110, -127, 66, -115, 59, 14, 66, 116, 56, 3, 66, -95, 36, -59, 66, 81, -73, 48, 66, 90, -12, 125, 66, 97, -48, -17, 66, -62, -111, 76, 66, 84, -115, 91, 66, -89, 112, -19, 66, -102, 87, -114, 66, -123, -25, 121, 66, 89, 120, 86, 66, 125, -35, -113, 66, 110, -123, -105, 66, 118, -38, -18, 66, -73, 61, -63, 66, -76, -45, 39, 66, 125, -103, -114, 66, -113, -74, 124, 66, -111, -34, 58, 66, -69, -36, -61, 66, -83, -89, 67, 66, 118, -89, -8, 66, -91, 26, -34, 66, -89, -13, 103, 66, -120, 61, -56, 66, -65, 89, -57, 66, 115, 88, 31, 66, -112, 94, -69, 66, 102, -77, -64, 66, -114, -91, -106, 66, -69, -5, 21, 66, -98, -79, -83, 66, -66, 85, -5, 66, -107, -90, 69, 66, 93, -68, 58, 66, -94, -118, -42, 66, 122, -56, -58, 66, -71, -100, 94, 66, -70, -117, -34, 66, -86, -120, -83, 66, -114, -115, 65, 66, -122, 39, -37, 66, -118, 127, -43, 66, -104, -36, 18, 66, 122, 62, 88, 66, -105, -38, -123, 0, 0, 0, 0 ], "precision": "FLOAT_32", "root": 0, "canonicalAndNotALeaf": true, "size": 254, "leftIndex": [ -1, 1, 255, 1162254905, 1160646650, 1026664226, 1013988659, 645103511, 975548491, 1026012500, 710883986, 767669444, 724649296, 581197193, 639058531, 731003657, 1174 ], "rightIndex": [ -1, 1, 255, 1018595249, 1162253933, 645619136, 760429858, 595567880, 1011678901, 1012188524, 582970849, 724797059, 630575401, 753554141, 1155154837, 625975168, 1120 ], "nodeFreeIndexes": [], "nodeFreeIndexPointer": 0, "leafFreeIndexes": [], "leafFreeIndexPointer": 0, "partialTreeStateEnabled": true }, "boundingBoxCacheFraction": 0.0, "partialTreeState": true, "seed": 8378244044999309591, "id": 0, "dimensions": 32, "staticSeed": 0, "weight": 0.0, "hasAuxiliaryData": false }, { "version": "2.0", "root": 0, "maxSize": 256, "outputAfter": 32, "storeSequenceIndexesEnabled": false, "centerOfMassEnabled": false, "nodeStoreState": { "version": "2.0", "capacity": 255, "compressed": true, "cutDimension": [ 1, 31, 255, 628773447, 523117802, 370389849, 517791936, 26743225, 857227540, 253775774, 411967183, 614660847, 543272654, 119639168, 600774267, 490466084, 257461899, 865254068, 266169102, 194334916, 758179408, 114518120, 628919913, 605158240, 36659517, 310705840, 846445514, 188402781, 816839279, 249904951, 356210919, 76512078, 427778890, 123316813, 266176825, 509054253, 491918261, 828330153, 276432827, 710019274, 127807641, 147226708, 13057635, 842276530, 295266369, 1939 ], "cutValueData": [ 66, -77, 87, -48, 66, -109, -66, 37, 66, -117, 27, 72, 66, 122, 46, -123, 66, -59, 98, -22, 66, -93, -64, 100, 66, -111, 24, -71, 66, -121, -64, 123, 66, -116, 22, 34, 66, -106, -46, 2, 66, -119, -100, 64, 66, -102, -71, -28, 66, -63, -40, -23, 66, -114, 42, -83, 66, -71, -27, 97, 66, 122, -78, 77, 66, -105, -31, 22, 66, -124, -116, -29, 66, -101, 123, -59, 66, -119, 17, 82, 66, -74, -72, -109, 66, -110, 121, -126, 66, 121, 56, -115, 66, -93, -19, -88, 66, -78, -95, -108, 66, -61, -31, 14, 66, -116, -103, -34, 66, -68, 101, 90, 66, -96, 61, -32, 66, -84, -53, 59, 66, 81, 25, -46, 66, -115, -87, -123, 66, -91, 21, -105, 66, -106, -127, 51, 66, -73, -4, -91, 66, 114, -64, 28, 66, 109, 21, -104, 66, -121, -36, -74, 66, -88, -79, 106, 66, -107, -54, 110, 66, 86, 87, -80, 66, -81, 102, -35, 66, -83, -123, -39, 66, -100, 8, 109, 66, 103, -5, -117, 66, -95, -68, -61, 66, -101, 5, 43, 66, 112, -29, 54, 66, 100, 19, -66, 66, 78, 71, -114, 66, -93, 35, -21, 66, -80, -21, 77, 66, -114, -96, -7, 66, -94, -22, -30, 66, 108, 41, -85, 66, 116, 26, -112, 66, 105, -68, -15, 66, -81, 60, -13, 66, -103, -112, 48, 66, 80, -5, -106, 66, -118, 29, -111, 66, 73, 56, -65, 66, -126, 56, 50, 66, -103, -96, 5, 66, -104, -15, 38, 66, -122, 109, 13, 66, 96, 110, -91, 66, -71, -88, 58, 66, -107, -46, -88, 66, -89, -111, 88, 66, -120, -110, -11, 66, -106, -79, -27, 66, -124, -115, -48, 66, -96, 82, -90, 66, -107, 1, -118, 66, 111, 108, -107, 66, -106, 47, -94, 66, -75, -96, -46, 66, -109, 41, 84, 66, -101, 29, -46, 66, -99, 82, 37, 66, 115, -9, -29, 66, -128, 63, -72, 66, -68, -22, -103, 66, 120, -94, -3, 66, 108, -125, 74, 66, -93, 79, -107, 66, -102, -77, -21, 66, -120, 107, 13, 66, -89, -10, 83, 66, 98, -26, -86, 66, -118, -110, 113, 66, -72, 62, 65, 66, -100, 33, -121, 66, -127, -119, -57, 66, -127, 12, -103, 66, -103, -88, -99, 66, 74, -60, 79, 66, -102, -6, -12, 66, 78, -113, 68, 66, -95, 69, -128, 66, -120, 15, -2, 66, 125, -125, -18, 66, -99, -40, -6, 66, 91, 105, -85, 66, -74, 41, 67, 66, -122, 87, 107, 66, 109, -79, 117, 66, -99, 18, -56, 66, 105, 126, 67, 66, -86, -109, 13, 66, -75, 76, 94, 66, -117, 47, -59, 66, 121, 44, 113, 66, -109, 21, 57, 66, -103, -73, -128, 66, 107, 57, 81, 66, -74, -10, 59, 66, -111, 56, 77, 66, -99, 37, -102, 66, -85, -43, -101, 66, 110, -49, 63, 66, 84, 41, -48, 66, -81, -69, -67, 66, -88, 95, -89, 66, 84, -95, 100, 66, -123, 92, -99, 66, -119, -75, 5, 66, -101, 86, 97, 66, -70, 13, -112, 66, -94, -10, -6, 66, -115, 60, 43, 66, -114, 12, 87, 66, 84, 1, 75, 66, -104, -62, -64, 66, 125, -18, 46, 66, -93, 65, 79, 66, -100, -8, 92, 66, -90, -65, -66, 66, -123, 91, -87, 66, -64, -114, 51, 66, 110, -18, -48, 66, 115, 32, 122, 66, -92, 92, -58, 66, -98, 88, 14, 66, -86, 113, 84, 66, -97, -75, 38, 66, -94, -48, -44, 66, -101, 24, 83, 66, -94, -114, -57, 66, -85, 126, 39, 66, -126, -97, 99, 66, -95, -28, 46, 66, -58, -35, 41, 66, -118, 106, 25, 66, -91, 5, 64, 66, -94, -3, 9, 66, 87, -17, -93, 66, -109, -56, 57, 66, 111, 37, -34, 66, -108, 24, 43, 66, -67, 6, 80, 66, 96, 45, -94, 66, 108, 51, 59, 66, 99, -51, 15, 66, -103, -84, -69, 66, -127, 93, 35, 66, -95, 112, 95, 66, -88, 84, 124, 66, -68, -99, 100, 66, -86, 110, -38, 66, -83, 0, -17, 66, -115, -13, 38, 66, 102, 94, 2, 66, 99, 102, 7, 66, -65, 74, -5, 66, 88, -22, 47, 66, -74, 2, 75, 66, -62, 95, 103, 66, -113, -90, -5, 66, 101, -85, 117, 66, -104, -107, -26, 66, -81, 13, -99, 66, -94, -38, 75, 66, 93, -126, -33, 66, -84, -63, -84, 66, -81, -8, 47, 66, -93, 108, -11, 66, -94, -113, 116, 66, -75, -121, 44, 66, -125, 37, 104, 66, 122, -97, 47, 66, 110, 94, 97, 66, -124, 96, 97, 66, 93, 49, 87, 66, -124, -75, 27, 66, -125, -4, -120, 66, -122, -102, 35, 66, 70, 44, -19, 66, -128, 47, -89, 66, -65, 7, 76, 66, -122, -48, -55, 66, -92, -53, 96, 66, -81, -36, -89, 66, -122, 120, -72, 66, -113, -120, -102, 66, -118, -128, -65, 66, 96, 104, -92, 66, -120, -14, 127, 66, -107, -44, -74, 66, -107, 96, 9, 66, -124, -5, 104, 66, -108, 81, -86, 66, -101, -102, 0, 66, -113, -94, -97, 66, -94, -25, -113, 66, -95, -108, 120, 66, -79, -35, 35, 66, -69, 43, 33, 66, -89, 44, -80, 66, 121, -22, -64, 66, 107, 107, 109, 66, -127, -32, 113, 66, -96, -61, -92, 66, -90, 34, -105, 66, -118, 33, 112, 66, 110, 48, -42, 66, -95, 57, 122, 66, 76, 90, -48, 66, -76, -62, -46, 66, 126, -90, -99, 66, 82, 98, -79, 66, 96, -24, -52, 66, 82, -2, 34, 66, -106, -86, 77, 66, -128, 107, 54, 66, -118, 111, -94, 66, -120, 34, 27, 66, 87, -35, -65, 66, -91, 55, 120, 66, -80, 124, 119, 66, -101, 104, 55, 66, -95, -115, -61, 66, -98, 7, -32, 66, 109, -19, -86, 66, -95, -16, -85, 66, -113, -122, 28, 66, 93, 118, -118, 66, 90, -20, 78, 66, 90, 65, 84, 66, -72, -15, -28, 66, 117, -110, -20, 66, -106, 53, -9, 66, 118, -19, -5, 66, -108, 113, -75 ], "precision": "FLOAT_32", "root": 0, "canonicalAndNotALeaf": true, "size": 255, "leftIndex": [ 0, 1, 255, 935327743, 199668476, 818660543, 976326301, 34955939, 316812057, 612405004, 738726841, 36 ], "rightIndex": [ 0, 1, 255, 904916975, 1072630527, 309256703, 576437929, 538206497, 25306769, 296010768, 364118708, 6444 ], "nodeFreeIndexes": [], "nodeFreeIndexPointer": -1, "leafFreeIndexes": [], "leafFreeIndexPointer": -1, "partialTreeStateEnabled": true }, "boundingBoxCacheFraction": 0.0, "partialTreeState": true, "seed": -4725511223573268555, "id": 0, "dimensions": 32, "staticSeed": 0, "weight": 0.0, "hasAuxiliaryData": false }, { "version": "2.0", "root": 0, "maxSize": 256, "outputAfter": 32, "storeSequenceIndexesEnabled": false, "centerOfMassEnabled": false, "nodeStoreState": { "version": "2.0", "capacity": 255, "compressed": true, "cutDimension": [ 1, 31, 255, 723406712, 463420568, 836352260, 142147135, 391259158, 742252631, 262160029, 528972865, 114759685, 174013496, 769258, 184775505, 47955563, 48818671, 803157143, 854078044, 169185932, 126833083, 169765394, 177023887, 382033702, 534393311, 426718093, 655907919, 603617051, 423890693, 187606437, 396843701, 154402857, 285894412, 853007638, 814257351, 164096517, 115263279, 652047690, 241228250, 634709117, 849127301, 291115295, 59755515, 506144251, 734488252, 13296 ], "cutValueData": [ 66, -71, -54, -8, 66, -83, -29, 30, 66, -75, -45, -2, 66, -124, -110, -108, 66, -66, 4, 6, 66, -66, -103, 7, 66, -115, -105, -115, 66, 125, 117, -9, 66, -65, -57, 123, 66, -114, 113, -18, 66, -103, -11, 54, 66, -65, 86, -110, 66, -115, -50, -22, 66, 97, 17, 26, 66, -75, 53, 49, 66, 124, -111, -58, 66, -107, 127, -60, 66, 127, 48, 42, 66, 107, 101, 127, 66, -106, 123, -91, 66, -90, -70, -109, 66, 75, -62, 99, 66, 115, 87, -100, 66, -121, 115, 100, 66, -92, -128, -56, 66, -122, -64, 38, 66, -85, 121, -28, 66, -112, -35, 117, 66, 114, 55, -93, 66, -106, -97, 16, 66, 122, 81, 7, 66, 99, -94, 5, 66, 91, 77, -124, 66, 104, -80, -112, 66, 104, -114, 84, 66, -115, 74, 25, 66, -61, -57, -118, 66, -117, -90, 89, 66, 113, 23, -73, 66, -88, 121, -125, 66, 84, 54, 24, 66, -110, -36, 78, 66, -94, 18, -106, 66, -96, -99, 9, 66, -108, -41, -126, 66, 114, 16, 89, 66, 103, -5, -128, 66, -78, 38, 16, 66, -128, -119, 18, 66, -101, -61, 13, 66, -87, 28, 89, 66, 88, 114, -81, 66, -120, -60, 50, 66, -94, -66, 47, 66, -94, 47, -58, 66, 95, -8, -90, 66, -104, -11, -55, 66, 121, -11, 51, 66, -109, -92, -126, 66, -105, 79, -27, 66, -61, -69, 115, 66, 71, 22, 56, 66, -75, 48, 93, 66, -99, 36, 30, 66, -78, -78, 114, 66, 117, -26, -78, 66, -117, -60, -123, 66, -98, 105, 7, 66, -83, -96, 33, 66, 108, 21, 23, 66, 95, 49, 104, 66, 109, 69, -79, 66, -108, -40, 123, 66, 115, 51, 114, 66, -128, 8, -101, 66, -99, -52, -5, 66, -121, 94, -115, 66, -91, -53, -71, 66, -105, 47, -25, 66, -88, 46, -116, 66, -124, 67, -30, 66, 106, 116, -87, 66, 88, 96, 34, 66, -121, -117, 122, 66, -102, -101, 6, 66, 80, -127, -93, 66, -82, -94, 22, 66, -61, 116, 0, 66, -101, 88, -56, 66, 116, 11, -104, 66, -87, 96, -32, 66, -124, 1, 47, 66, 107, -11, 87, 66, -97, 15, 20, 66, -101, -45, -128, 66, -96, -11, 4, 66, -122, 81, 99, 66, -122, -21, -97, 66, -71, 52, -77, 66, -88, 108, -95, 66, -109, 57, -7, 66, -110, -16, 97, 66, 126, -86, 70, 66, -77, -80, -18, 66, -114, 112, -120, 66, -92, -120, 96, 66, -122, -122, 67, 66, 127, 64, 86, 66, -90, 91, 76, 66, -125, 7, -109, 66, -73, 30, -110, 66, -63, 2, 105, 66, -86, 80, 71, 66, -102, -19, -57, 66, -98, -39, 28, 66, 125, -1, 34, 66, 104, 15, -42, 66, -103, -76, -117, 66, -92, -103, -32, 66, 92, -108, 81, 66, -110, 17, -88, 66, 104, 73, 5, 66, -90, 13, 57, 66, 105, 3, 35, 66, 124, 49, -13, 66, -101, -81, 106, 66, -111, 99, 58, 66, -120, 20, -62, 66, -107, 83, -114, 66, -88, -30, -98, 66, -104, 120, 109, 66, 102, 9, -9, 66, -87, -125, 80, 66, -92, -117, 20, 66, 108, 36, 123, 66, -67, -44, -3, 66, -95, -30, -106, 66, -111, -87, -126, 66, 94, -99, 45, 66, -91, -116, 127, 66, -114, -8, 127, 66, -102, -83, -46, 66, -101, -93, -57, 66, -97, -17, -64, 66, 110, 112, -44, 66, -98, 113, -103, 66, -105, -76, 18, 66, -63, 108, -97, 66, -102, 38, 73, 66, -87, 108, -53, 66, -103, 52, -128, 66, -92, 32, 111, 66, -103, -98, -45, 66, -115, 14, -3, 66, 123, -109, -82, 66, 71, 104, -36, 66, 110, -57, -59, 66, -103, -63, -99, 66, -83, -60, -82, 66, -92, -76, 88, 66, -94, 57, 113, 66, -122, -85, 106, 66, -68, 30, 95, 66, 126, 37, 88, 66, 125, -47, 29, 66, -116, 89, 96, 66, -88, -111, 68, 66, 121, 119, 124, 66, -92, 85, 27, 66, -97, 77, -75, 66, -115, -107, -34, 66, -106, 59, 74, 66, -118, -80, 80, 66, -127, -95, 70, 66, -127, -26, 86, 66, -70, -114, -15, 66, -93, -11, 11, 66, -99, -30, 0, 66, -101, -80, 25, 66, -96, 8, 57, 66, 86, -100, -126, 66, 116, -76, -48, 66, -100, 35, 19, 66, -124, -23, 64, 66, -98, 68, 46, 66, 115, -126, -92, 66, -79, -110, 44, 66, -120, 102, -26, 66, -89, 69, 44, 66, -65, 38, 72, 66, -125, 75, 34, 66, -104, 53, 36, 66, -111, -53, -78, 66, -95, -11, 114, 66, 118, 20, -102, 66, -101, 3, 72, 66, -97, 114, -79, 66, 84, -120, 125, 66, 80, 29, -116, 66, -125, -68, 0, 66, -125, -3, 82, 66, 112, -83, -85, 66, 114, 53, 81, 66, 111, -100, -118, 66, -99, -61, 0, 66, -127, 85, 50, 66, -125, 65, 75, 66, -106, 45, 8, 66, -118, 120, 104, 66, 111, -83, -26, 66, -120, -79, -11, 66, -107, -11, 29, 66, -104, 78, -43, 66, -85, -101, 92, 66, -89, 93, -19, 66, -104, -6, -25, 66, -111, -113, -67, 66, -102, 120, 0, 66, -116, -2, 102, 66, 110, 39, 83, 66, -121, 84, 28, 66, -105, 52, -72, 66, -123, 50, -10, 66, -120, 83, -67, 66, -93, 3, 110, 66, 97, -43, 62, 66, 118, -74, 42, 66, 111, -113, 63, 66, -79, -32, -49, 66, 94, 1, -47, 66, 88, 23, -53, 66, -112, -127, -13, 66, -105, -5, -89, 66, -83, 19, -62, 66, -64, -74, 85, 66, -118, 54, 45, 66, -86, -88, -11, 66, 69, -86, 104, 66, 114, 20, 52, 66, -85, 15, 63, 66, -71, -83, 8, 66, -84, -110, 102, 66, -116, -125, -77, 66, -91, -35, -6, 66, -110, 2, -83, 66, -116, 78, 39, 66, -102, -31, -19, 66, 95, 99, 121, 66, -88, -104, -67, 66, -103, -80, 90, 66, -124, 23, -71, 66, -106, 102, 86, 66, -99, -84, -102, 66, -109, 93, 9, 66, -83, -47, -94 ], "precision": "FLOAT_32", "root": 0, "canonicalAndNotALeaf": true, "size": 255, "leftIndex": [ 0, 1, 255, 461832191, 418676726, 162175476, 384891898, 675263187, 680187224, 123221008, 604112001, 2049 ], "rightIndex": [ 0, 1, 255, 1000859551, 682065855, 552189678, 373257974, 548345042, 59130747, 350560777, 542249088, 1408 ], "nodeFreeIndexes": [], "nodeFreeIndexPointer": -1, "leafFreeIndexes": [], "leafFreeIndexPointer": -1, "partialTreeStateEnabled": true }, "boundingBoxCacheFraction": 0.0, "partialTreeState": true, "seed": -8285893777058293760, "id": 0, "dimensions": 32, "staticSeed": 0, "weight": 0.0, "hasAuxiliaryData": false }, { "version": "2.0", "root": 0, "maxSize": 256, "outputAfter": 32, "storeSequenceIndexesEnabled": false, "centerOfMassEnabled": false, "nodeStoreState": { "version": "2.0", "capacity": 255, "compressed": true, "cutDimension": [ 0, 31, 255, 81583742, 385386586, 363936474, 878815858, 242833911, 80808377, 346646609, 116776262, 464958554, 106614201, 441779250, 201190265, 652076871, 338423675, 313904821, 391588830, 669161562, 330627649, 596832195, 372463395, 374411119, 452578515, 511408254, 523175133, 716953662, 448388817, 311499591, 1033932471, 65773007, 236796129, 35726673, 120187742, 1006204994, 500991723, 573783925, 712718303, 225549543, 590130523, 257993027, 65874550, 469166766, 246363898, 19 ], "cutValueData": [ 66, -73, 80, 45, 66, 72, 77, 120, 66, -127, 121, 127, 66, -86, 43, -31, 66, 84, 1, 117, 66, 91, -15, -116, 66, -97, -32, 124, 66, 103, -122, 6, 66, 69, -17, 84, 66, -94, -14, -100, 66, -123, -99, -41, 66, 103, -33, 97, 66, -119, 7, 60, 66, -105, -105, 22, 66, 107, -41, -70, 66, -78, -42, -94, 66, -88, -126, 108, 66, 109, 65, -128, 66, -90, 61, 70, 66, -63, 93, -127, 66, -96, -33, -128, 66, -113, 97, -17, 66, -81, 107, 5, 66, -69, 55, 75, 66, -74, -94, 6, 66, -87, 32, -106, 66, 99, 79, -7, 66, -96, -7, 110, 66, 96, 0, -85, 66, 81, 51, 14, 66, 100, -59, 120, 66, 120, -86, 93, 66, -67, -119, -28, 66, -87, 52, -25, 66, -94, 96, 41, 66, 89, -30, -45, 66, -82, -76, 25, 66, 127, -112, -107, 66, -110, 89, 15, 66, -109, -37, 109, 66, -80, -65, 100, 66, -65, -58, -112, 66, -103, -65, -30, 66, -122, 46, -108, 66, -79, 32, -107, 66, -118, -29, -120, 66, -97, 34, -63, 66, 94, 61, 114, 66, -104, -12, 88, 66, 89, -64, 57, 66, -111, -56, 110, 66, 126, 28, 6, 66, -84, -42, 106, 66, -77, -10, 54, 66, -77, -43, -94, 66, -97, 125, 69, 66, -104, -122, -77, 66, 123, 56, 90, 66, 101, 9, -7, 66, -120, 5, -16, 66, 99, -65, 63, 66, 79, -128, 78, 66, -121, 124, -14, 66, -75, 49, -109, 66, -124, -35, -79, 66, 124, -94, -41, 66, -120, 38, -69, 66, -108, -98, 121, 66, 77, -3, 65, 66, -120, -74, 49, 66, 93, 86, -66, 66, -116, -63, 52, 66, -118, -107, 71, 66, 122, -97, 114, 66, -111, -11, -124, 66, -114, -10, -87, 66, -102, 28, 29, 66, -108, -105, -111, 66, 113, 101, -18, 66, -107, 114, 103, 66, -116, -11, 101, 66, -80, -32, -13, 66, -85, -78, -87, 66, -110, -112, 13, 66, 122, -16, 74, 66, 125, -76, 16, 66, -111, 72, -118, 66, -90, -18, -4, 66, -126, -77, -119, 66, 126, 5, -38, 66, -95, -63, 81, 66, -115, 72, -32, 66, -111, -3, -92, 66, -90, 100, 51, 66, -107, 57, 59, 66, 98, 20, -32, 66, 68, -102, -60, 66, -102, -38, 95, 66, -83, -97, 73, 66, 94, -24, 53, 66, -117, -67, 47, 66, -69, 114, -17, 66, -115, 117, -92, 66, -116, 3, -35, 66, 109, -97, -43, 66, -119, -59, -119, 66, 101, -18, 28, 66, -109, -115, 61, 66, -101, -95, -95, 66, -112, 127, 104, 66, -112, -2, -85, 66, -78, -54, -78, 66, -99, -30, -81, 66, -106, -85, 92, 66, -68, -109, 72, 66, -107, 125, 68, 66, -102, -92, -64, 66, -109, 87, -99, 66, -94, -7, -10, 66, -80, 110, -109, 66, 122, -33, 109, 66, -77, 0, -108, 66, -114, 124, 68, 66, -72, -51, 46, 66, 81, -63, -50, 66, 127, -68, 34, 66, -109, -100, 0, 66, 115, 66, -77, 66, -100, 87, -113, 66, -71, -114, -107, 66, -88, -24, 119, 66, -111, 41, 94, 66, -116, 48, 115, 66, -106, 57, -55, 66, 124, 122, -31, 66, -111, -115, 70, 66, 76, -76, -42, 66, -83, 85, 36, 66, -98, 82, 117, 66, -85, 69, -25, 66, 103, -70, -17, 66, 124, -51, 46, 66, -125, -46, -117, 66, 126, -25, 95, 66, -102, 70, 9, 66, -120, -76, 118, 66, -116, -36, 0, 66, -98, 55, 71, 66, -109, 4, -64, 66, 107, 8, 23, 66, -117, -85, 22, 66, -85, -38, -91, 66, -124, -79, 62, 66, -91, -30, -30, 66, -93, 58, 6, 66, -100, 9, 38, 66, 122, 94, -86, 66, -91, 47, -15, 66, -79, -42, 78, 66, -115, -115, 78, 66, 110, -40, -62, 66, -108, -4, 87, 66, -117, -61, 14, 66, 96, 54, 87, 66, -83, -23, -111, 66, 77, 35, -121, 66, -102, -67, 21, 66, -80, -6, -25, 66, -118, -22, 122, 66, -64, -74, 4, 66, -97, -33, -107, 66, -106, -15, -22, 66, -81, -29, 122, 66, 107, -89, -98, 66, -121, -85, -58, 66, -109, 3, -44, 66, -115, -13, -52, 66, -73, -91, -76, 66, -121, -31, 10, 66, 71, 112, 66, 66, -64, 51, 100, 66, -101, 51, -76, 66, -72, -85, 44, 66, 126, 33, -127, 66, 82, 98, -87, 66, 88, -82, 107, 66, -112, -29, -94, 66, -92, 47, -29, 66, 113, 75, -86, 66, -109, 119, -90, 66, 118, 26, -24, 66, 111, 81, -37, 66, -108, -92, 18, 66, -96, 75, 18, 66, 121, 48, 73, 66, -98, 70, -12, 66, 105, -90, 73, 66, -97, -20, -81, 66, -116, -100, 34, 66, -123, 20, 32, 66, -89, 12, -36, 66, -122, -26, 48, 66, -90, 118, 86, 66, 112, 122, 9, 66, -127, -5, -3, 66, 95, -128, 71, 66, 99, 0, -88, 66, -121, 99, -91, 66, 123, 31, 11, 66, -110, 92, 46, 66, 112, -41, -72, 66, 117, 43, 76, 66, -66, 13, -122, 66, -126, 4, 72, 66, -123, 101, 95, 66, 122, -99, -122, 66, -128, -59, -67, 66, 99, -83, 103, 66, -120, 32, -39, 66, -89, -103, -58, 66, -92, 22, 98, 66, -86, 24, -69, 66, -79, -94, 49, 66, -100, 114, -19, 66, -117, -44, -92, 66, -119, 15, -63, 66, -98, 96, -19, 66, 107, -47, 35, 66, 127, 11, 20, 66, -112, 103, -20, 66, -64, -121, 78, 66, 111, -110, -118, 66, -86, -5, -37, 66, 110, -60, 1, 66, -112, -109, -120, 66, -121, -7, -10, 66, -95, -53, -125, 66, 121, 44, 6, 66, -104, -70, 100, 66, -123, -82, -22, 66, 121, 10, -128, 66, -102, -123, -96, 66, 93, -9, -13, 66, -104, 25, 125, 66, -122, -46, -128, 66, -92, 32, 89, 66, -99, 32, -104, 66, -74, 111, 56, 66, -78, -107, 25, 66, 126, -88, -76, 66, -78, 69, -91, 66, -79, 34, -58, 66, 105, -61, 79, 0, 0, 0, 0, 0, 0, 0, 0 ], "precision": "FLOAT_32", "root": 0, "canonicalAndNotALeaf": true, "size": 253, "leftIndex": [ -1, 1, 255, 770049260, 731794148, 1033121272, 583495964, 985223492, 769498052, 767688749, 710470975, 768443963, 1142569354, 581750635, 1118424983, 759694936, 364 ], "rightIndex": [ -1, 1, 255, 774781901, 725409556, 1026146200, 583515404, 1027804378, 585973570, 769322195, 710352553, 755176892, 712405651, 595558466, 982900942, 970683632, 365 ], "nodeFreeIndexes": [], "nodeFreeIndexPointer": 1, "leafFreeIndexes": [], "leafFreeIndexPointer": 1, "partialTreeStateEnabled": true }, "boundingBoxCacheFraction": 0.0, "partialTreeState": true, "seed": 3042871460721369999, "id": 0, "dimensions": 32, "staticSeed": 0, "weight": 0.0, "hasAuxiliaryData": false }, { "version": "2.0", "root": 0, "maxSize": 256, "outputAfter": 32, "storeSequenceIndexesEnabled": false, "centerOfMassEnabled": false, "nodeStoreState": { "version": "2.0", "capacity": 255, "compressed": true, "cutDimension": [ 1, 31, 255, 818563458, 267024833, 592483417, 601842370, 638545174, 358713604, 524252847, 83682238, 485162116, 232785329, 69940461, 649755178, 585897883, 531552002, 166221134, 527594082, 192270582, 306093898, 577226065, 540259506, 700193265, 356647355, 12031430, 728793122, 694852009, 262245903, 843596849, 129431883, 573061619, 423118739, 850836800, 514586036, 834951447, 477313838, 611354023, 586263186, 417820913, 148138274, 199159551, 242168422, 628870152, 257972368, 8336 ], "cutValueData": [ 66, 127, -95, 61, 66, -103, 42, 93, 66, -83, -123, 81, 66, 93, 76, 25, 66, -122, -4, -51, 66, 92, -89, -23, 66, 81, 119, 81, 66, -103, 5, 33, 66, -65, 118, 108, 66, -123, 3, 73, 66, -106, 64, -123, 66, -100, 82, -101, 66, -83, 112, -119, 66, -107, -92, 3, 66, -110, 73, 36, 66, -91, -100, 22, 66, 122, -66, 107, 66, -99, 116, 80, 66, 121, -92, 70, 66, -111, 123, -117, 66, -97, -51, -91, 66, -89, 30, -8, 66, 120, 80, 7, 66, -122, -37, -73, 66, -71, 77, 64, 66, -106, 80, 24, 66, 102, 118, 103, 66, -66, -57, -126, 66, 87, -61, 19, 66, 95, 97, -48, 66, -86, 5, -27, 66, -118, -114, -17, 66, 80, -57, 25, 66, -60, 111, 102, 66, -93, -66, 98, 66, -69, -100, 108, 66, -102, 50, -126, 66, -76, 23, 20, 66, -80, -49, 68, 66, 82, 93, -72, 66, -124, -108, 99, 66, -120, 56, 52, 66, -90, 63, -114, 66, 125, 75, -48, 66, 112, 82, 23, 66, -120, -4, 107, 66, -116, 14, -17, 66, 127, 86, 18, 66, -68, -80, -57, 66, 117, 67, -41, 66, -96, 27, 109, 66, 92, 16, -81, 66, -123, 47, 74, 66, -86, 10, -68, 66, 126, 71, 122, 66, -112, -81, -96, 66, -123, -29, 6, 66, 101, 103, -56, 66, 80, -69, -43, 66, 89, 23, -89, 66, -83, 36, -69, 66, 96, 41, 84, 66, -106, -32, 17, 66, -118, 34, 106, 66, -113, 29, 22, 66, -90, -59, -13, 66, -115, -84, -35, 66, 127, -15, 10, 66, -81, 2, 20, 66, -89, 22, 79, 66, -83, 40, -3, 66, -127, 19, 84, 66, -85, 47, 117, 66, -90, 89, -84, 66, -112, 117, -103, 66, -114, -115, -11, 66, -108, -78, 44, 66, -117, -117, 6, 66, -64, 18, 69, 66, -68, -86, -13, 66, -88, 84, 65, 66, -126, 47, 125, 66, -74, -58, -33, 66, 78, -105, 44, 66, 112, -109, 57, 66, 117, 1, -71, 66, 85, 5, 107, 66, 74, -43, 69, 66, 117, -58, 93, 66, -96, -128, 7, 66, -65, 25, -23, 66, -126, -81, -51, 66, 82, -59, -32, 66, 122, 38, 78, 66, -124, -62, -43, 66, -98, -77, -119, 66, 100, 103, 24, 66, -104, -54, 96, 66, -80, 74, -63, 66, -86, 33, -76, 66, 118, 63, 101, 66, -108, -87, -72, 66, -111, -24, 78, 66, 110, 74, 47, 66, -99, 27, 33, 66, -94, 37, 121, 66, -111, -4, -46, 66, -123, 73, -107, 66, 87, -127, -63, 66, -117, 47, 72, 66, -95, -84, -8, 66, 124, 18, -111, 66, -120, -71, -32, 66, 94, -1, -2, 66, 124, 57, 31, 66, -96, -81, 93, 66, 110, 9, -16, 66, -101, 107, -45, 66, 91, -111, 15, 66, -82, 90, -80, 66, -127, -98, 41, 66, -111, -80, 74, 66, -93, 96, 115, 66, -98, -33, 64, 66, -95, -62, -43, 66, 107, -60, 30, 66, -71, -67, -102, 66, 89, -46, -84, 66, 119, -81, 3, 66, 85, 22, -16, 66, -96, 30, -7, 66, -81, -66, -67, 66, 113, -39, 62, 66, -79, -74, -96, 66, -95, 51, 29, 66, 108, -36, -4, 66, 95, -35, 46, 66, -116, -57, 106, 66, 108, 37, 39, 66, -81, -34, -33, 66, -110, 69, 117, 66, -107, -80, 82, 66, -75, -76, -59, 66, -107, 91, 52, 66, -113, 49, 59, 66, -81, -86, -79, 66, -71, -83, 31, 66, 100, 9, 9, 66, 120, 105, 13, 66, -64, 47, 5, 66, -84, 113, 107, 66, -85, 15, -22, 66, -65, 48, 36, 66, -93, -62, -77, 66, 92, 19, -27, 66, -128, -117, 84, 66, -93, -48, 110, 66, 118, 30, -67, 66, -106, -30, -24, 66, 112, -45, -63, 66, -100, 114, -97, 66, -114, 93, -110, 66, -96, 35, -71, 66, -92, 45, -44, 66, -85, 111, -71, 66, -63, -75, 16, 66, -124, -88, 41, 66, -119, -47, -31, 66, -65, -10, 7, 66, 98, -33, 107, 66, -116, -10, -81, 66, -114, -45, 76, 66, -95, -76, 59, 66, -69, -88, -8, 66, -79, -79, 74, 66, 82, 47, -121, 66, -97, 71, 72, 66, -84, -14, 59, 66, -112, 12, 69, 66, -59, -34, -126, 66, 114, 104, 50, 66, -100, 63, 120, 66, -116, -69, 119, 66, -63, -34, 62, 66, 110, 127, 111, 66, -109, -8, -81, 66, -114, -108, -116, 66, 122, 68, -2, 66, -128, 67, 86, 66, -91, -33, -6, 66, -128, 80, 80, 66, 123, 45, 19, 66, -117, 115, 13, 66, -81, 60, -24, 66, -123, 107, 19, 66, -104, 26, -73, 66, 109, -83, -61, 66, -114, -123, -75, 66, 105, 37, -69, 66, -94, -51, 112, 66, -103, -124, -86, 66, -103, 105, 95, 66, 121, 23, 98, 66, -123, -63, -87, 66, 114, -72, 64, 66, -82, -58, 71, 66, -77, -70, 74, 66, -121, 3, 116, 66, -123, 102, -87, 66, 116, -10, 18, 66, -117, -87, 19, 66, -100, 20, 25, 66, 110, -108, -33, 66, 92, -2, 91, 66, 107, 123, 114, 66, -122, -76, 88, 66, -71, -92, 62, 66, 105, 75, 7, 66, -95, 75, -87, 66, -116, -75, 76, 66, -109, 13, -100, 66, 123, 113, -58, 66, 124, -29, 26, 66, -112, -87, 30, 66, -78, 46, 67, 66, -100, -72, 21, 66, 124, 86, 69, 66, -99, -80, -83, 66, -104, 50, 17, 66, -85, 115, -27, 66, -92, -18, -126, 66, -84, 25, 66, 66, -119, 48, 127, 66, 110, 51, -20, 66, -100, 42, -119, 66, -102, -119, -50, 66, -113, 80, 110, 66, -95, 95, -48, 66, -113, -27, -21, 66, -111, 15, -82, 66, 87, -96, 123, 66, -112, 18, -99, 66, 125, -126, 118, 66, -97, 111, 12, 66, -89, 103, 74, 66, -71, 59, 51, 66, -99, 44, 4, 66, 119, 110, -4, 66, -119, -38, -29, 66, -83, -56, -56, 66, -83, -26, 15, 66, -77, -124, 70, 66, -101, 90, -72, 66, 70, 12, -55, 66, -107, 111, -118 ], "precision": "FLOAT_32", "root": 0, "canonicalAndNotALeaf": true, "size": 255, "leftIndex": [ 0, 1, 255, 263979007, 238943482, 861173295, 782356496, 69879311, 5211467, 664087149, 20185088, 2 ], "rightIndex": [ 0, 1, 255, 534241023, 993588829, 868644511, 78510832, 310362411, 41550898, 800049877, 206995, 280 ], "nodeFreeIndexes": [], "nodeFreeIndexPointer": -1, "leafFreeIndexes": [], "leafFreeIndexPointer": -1, "partialTreeStateEnabled": true }, "boundingBoxCacheFraction": 0.0, "partialTreeState": true, "seed": 3094212984032582080, "id": 0, "dimensions": 32, "staticSeed": 0, "weight": 0.0, "hasAuxiliaryData": false }, { "version": "2.0", "root": 0, "maxSize": 256, "outputAfter": 32, "storeSequenceIndexesEnabled": false, "centerOfMassEnabled": false, "nodeStoreState": { "version": "2.0", "capacity": 255, "compressed": true, "cutDimension": [ 1, 31, 255, 305507652, 699820696, 805367403, 391631488, 572779008, 767723353, 144957048, 392687978, 230679448, 419884415, 861636011, 876161820, 291679656, 55783162, 171001627, 2687080, 460052471, 496706844, 592608466, 84448833, 401075265, 68391469, 527969991, 191298208, 691434969, 590001468, 754500652, 744342113, 839885172, 639197907, 485833829, 638708915, 710264857, 838079986, 412540093, 145864818, 402939544, 130866749, 500538829, 541498500, 66971836, 755679140, 5712 ], "cutValueData": [ 66, 111, -72, 91, 66, -94, -29, -117, 66, 74, 72, -70, 66, 117, -120, -73, 66, 88, 12, 18, 66, -110, 19, -79, 66, 111, 124, 12, 66, -86, -81, 7, 66, 69, 32, 2, 66, 110, 126, 103, 66, -118, -2, -4, 66, 69, 99, -38, 66, 89, -124, 41, 66, -75, 66, 19, 66, -123, -30, 30, 66, -91, 78, 104, 66, -82, -86, -115, 66, -90, 92, 98, 66, -79, 127, 9, 66, -91, -52, -108, 66, 90, 123, -111, 66, 83, -18, -40, 66, -108, -1, -15, 66, -113, 112, -69, 66, -79, -109, -32, 66, -100, -128, -11, 66, 74, -97, 72, 66, -125, -120, -21, 66, -78, -33, 82, 66, -67, -26, -30, 66, -122, 80, 118, 66, -113, 44, 109, 66, -78, -127, -7, 66, -62, -70, -81, 66, 111, -69, -99, 66, -85, 47, 44, 66, -86, -118, 43, 66, 76, -115, -89, 66, 68, 48, 26, 66, 110, 7, -31, 66, -92, 15, -37, 66, -93, -82, 78, 66, 119, -69, 126, 66, -99, -96, 43, 66, 95, -96, -43, 66, -64, 92, 62, 66, -110, -67, 83, 66, 109, -122, 9, 66, -124, -91, -96, 66, -92, 5, 36, 66, -91, 117, -64, 66, 83, 110, -19, 66, -97, 108, -23, 66, -100, -4, -44, 66, -74, -104, -46, 66, 127, -25, -47, 66, -72, -83, -68, 66, -86, 56, 59, 66, -77, 21, 54, 66, 71, 106, 84, 66, -116, 64, -87, 66, -108, -116, 75, 66, -103, -71, 11, 66, -118, -61, 85, 66, 111, -99, 22, 66, 87, 80, -41, 66, -117, 91, 19, 66, -62, -119, 68, 66, -109, -86, -70, 66, 126, 21, 40, 66, 117, 124, 23, 66, -72, -67, -15, 66, -65, -76, 92, 66, -106, -67, -48, 66, -99, 49, 23, 66, 101, -39, -11, 66, 69, -86, 118, 66, -108, -15, 105, 66, -128, -20, -107, 66, 103, -56, 47, 66, 95, 86, 19, 66, -70, 63, -11, 66, -68, 60, -50, 66, -109, -21, 127, 66, -106, 50, 123, 66, 93, 23, 72, 66, -95, -31, -113, 66, -124, 62, -51, 66, -114, 36, -38, 66, -125, 29, -14, 66, 93, -7, 52, 66, -101, 65, -100, 66, -87, 54, 108, 66, -88, -126, 78, 66, -99, -33, 49, 66, -124, -70, 37, 66, -97, 108, -95, 66, -100, -72, -11, 66, -122, -21, 31, 66, -120, -115, -71, 66, -90, 103, -36, 66, -127, 116, 119, 66, -96, 27, -68, 66, -117, -105, 3, 66, -125, -15, -32, 66, -101, -13, 108, 66, 80, 54, -25, 66, -70, 119, 59, 66, -81, -90, -84, 66, -94, -49, 107, 66, -95, -89, 118, 66, 115, -36, -60, 66, -69, 40, -46, 66, -96, -93, -85, 66, -111, 18, 103, 66, -98, 79, 113, 66, 114, 79, -66, 66, -105, 73, -116, 66, -97, -62, 11, 66, -119, 15, 25, 66, -128, 89, 76, 66, 86, 40, -34, 66, -84, -40, 21, 66, -97, 95, 125, 66, -122, -122, -121, 66, 117, -94, -35, 66, -124, 0, 34, 66, -99, -69, 86, 66, -69, 35, -7, 66, 111, -17, -43, 66, -79, -12, -60, 66, -75, 51, 86, 66, 93, 20, 117, 66, -105, -74, -123, 66, 116, -17, 122, 66, -120, 4, -60, 66, 87, 63, -23, 66, -122, 82, -77, 66, -122, -102, -14, 66, -83, -13, -88, 66, -122, 107, 53, 66, -109, -68, 23, 66, -91, -119, 62, 66, -76, -40, 124, 66, -108, -127, -122, 66, -108, -33, 88, 66, -88, 127, 20, 66, -69, -66, -15, 66, -114, 78, 5, 66, -93, 7, 22, 66, -71, -77, -68, 66, -85, 124, -121, 66, -82, 77, -5, 66, -126, -88, -111, 66, 88, -105, 22, 66, -116, -7, 21, 66, -112, -127, -92, 66, -125, -77, 38, 66, -110, 41, -39, 66, -86, -88, 39, 66, 96, 90, 32, 66, -90, 2, -7, 66, 124, 20, 65, 66, -118, -17, 58, 66, -110, 98, -37, 66, -118, 105, -121, 66, -106, -68, -49, 66, 82, -75, -54, 66, -93, -75, 106, 66, -105, -98, 33, 66, 87, -47, 22, 66, -96, -127, 87, 66, -117, -120, -52, 66, 124, -61, 85, 66, -105, 92, -66, 66, -118, 119, 11, 66, -107, 78, 49, 66, -103, 21, -50, 66, 107, -99, -29, 66, -113, 25, -10, 66, -99, -117, 98, 66, 126, -15, 117, 66, -62, 70, -13, 66, -84, 70, -55, 66, -124, 20, -25, 66, -97, 42, -81, 66, -122, -6, 25, 66, 125, 46, -99, 66, 82, 41, -33, 66, 101, 109, 103, 66, 76, 23, -115, 66, -99, -4, -26, 66, 105, -121, -55, 66, -107, 83, 41, 66, -125, 40, -88, 66, -107, -101, 21, 66, -119, -55, -47, 66, -105, 46, 57, 66, -80, 101, -34, 66, 126, -65, -67, 66, -67, 93, 33, 66, 104, 74, 94, 66, -127, 100, -17, 66, -63, -78, 6, 66, -84, 124, 64, 66, -103, -118, 36, 66, -118, -72, -57, 66, -112, 34, 51, 66, -126, -20, 25, 66, 102, -123, 31, 66, -82, 53, 5, 66, -94, 51, -79, 66, 126, 101, -8, 66, -83, -117, 14, 66, -104, -61, -72, 66, -77, -46, -41, 66, -123, 119, -12, 66, -69, -27, -91, 66, -74, 117, -51, 66, -126, -14, 27, 66, 115, -82, 86, 66, -121, 126, 41, 66, -119, 64, 109, 66, -126, -42, -20, 66, -95, -76, 85, 66, -109, 91, 31, 66, -109, -45, -107, 66, -103, -77, -96, 66, 117, -92, -93, 66, -97, 43, -82, 66, -79, -62, 49, 66, -95, -126, -28, 66, -116, 83, -18, 66, -92, -101, -51, 66, -110, 34, 85, 66, -90, -104, 0, 66, -85, -123, -8, 66, -115, 33, -124, 66, 95, 74, 50, 66, -82, 35, 27, 66, -123, -17, 18, 66, -128, 31, -25, 66, -122, -46, 5, 66, -78, 52, 86, 66, 116, 52, 40, 66, -67, 33, 31, 66, -117, 17, -13, 66, -69, -82, -3, 66, 117, -68, 42, 66, -90, 127, 120, 66, -77, 95, 92, 66, 99, -121, 55, 66, -82, 38, 36, 66, 105, 89, 5, 66, -119, 22, 59 ], "precision": "FLOAT_32", "root": 0, "canonicalAndNotALeaf": true, "size": 255, "leftIndex": [ 0, 1, 255, 536700159, 253532396, 468991997, 584964882, 162396161, 597516692, 341248000, 575881263, 39 ], "rightIndex": [ 0, 1, 255, 50298335, 25041377, 534523391, 917365552, 428847705, 748233233, 961896194, 805407828, 20 ], "nodeFreeIndexes": [], "nodeFreeIndexPointer": -1, "leafFreeIndexes": [], "leafFreeIndexPointer": -1, "partialTreeStateEnabled": true }, "boundingBoxCacheFraction": 0.0, "partialTreeState": true, "seed": 8379111172481454749, "id": 0, "dimensions": 32, "staticSeed": 0, "weight": 0.0, "hasAuxiliaryData": false }, { "version": "2.0", "root": 0, "maxSize": 256, "outputAfter": 32, "storeSequenceIndexesEnabled": false, "centerOfMassEnabled": false, "nodeStoreState": { "version": "2.0", "capacity": 255, "compressed": true, "cutDimension": [ 1, 31, 255, 389195638, 312558508, 73024403, 187600000, 191590157, 246298069, 715011560, 137214802, 266620403, 352753290, 628494987, 574451625, 731148569, 509361556, 77737387, 860768503, 597147906, 2497940, 413711482, 27677131, 28837294, 606762722, 424970127, 378199207, 52457400, 827644286, 79953675, 485158991, 55700526, 881841309, 349160806, 137759188, 69520163, 728916894, 538604482, 254972222, 365779964, 186739176, 628734895, 715013232, 367189606, 291204402, 29594 ], "cutValueData": [ 66, -100, -36, -104, 66, -99, 74, -116, 66, -113, 28, 111, 66, 94, -22, 51, 66, -77, 21, -45, 66, -83, 118, -13, 66, -59, 66, -39, 66, -115, -5, 22, 66, -74, -70, -91, 66, -126, 66, 86, 66, -128, -113, -60, 66, 76, -115, 17, 66, -109, 64, -90, 66, 76, 10, 69, 66, 78, 23, 77, 66, 84, 66, -108, 66, -105, 86, 86, 66, 76, -109, -58, 66, 89, 57, -43, 66, -69, 73, -2, 66, -114, -102, 66, 66, -90, -50, 41, 66, 99, -40, -18, 66, -128, 76, 30, 66, -87, 92, 75, 66, -71, 118, 96, 66, -79, -70, -29, 66, 76, 77, -1, 66, -120, -104, -77, 66, -87, -114, 120, 66, 97, -1, -59, 66, -85, 59, 107, 66, 121, 59, -8, 66, -125, -4, 117, 66, -72, -18, 72, 66, -115, -70, -119, 66, -127, 19, -73, 66, 123, -128, 124, 66, -95, -64, -8, 66, 121, 48, 22, 66, -108, -11, 33, 66, -100, 97, -90, 66, -109, -99, -65, 66, 113, -27, -54, 66, 104, 106, 10, 66, -121, 92, -128, 66, 96, 46, 6, 66, -102, 35, 7, 66, -112, -110, 33, 66, 85, -45, -32, 66, 117, -75, -80, 66, -112, -18, 82, 66, -128, -60, 112, 66, -106, 39, 47, 66, -119, -79, -91, 66, 126, -122, 106, 66, -108, 29, 22, 66, 97, 6, 82, 66, -87, 100, 75, 66, 97, 95, 57, 66, -62, -102, 78, 66, -125, -106, -42, 66, -124, -41, -10, 66, -124, 80, 51, 66, 123, 74, -28, 66, -97, 42, 40, 66, -64, 63, 0, 66, -128, -18, -1, 66, -64, -33, -66, 66, -86, -19, 71, 66, -122, -80, -115, 66, -127, 29, -105, 66, -117, -36, 76, 66, -103, -29, 110, 66, -102, -96, 118, 66, 78, 86, -96, 66, -114, 65, -16, 66, 73, 14, -108, 66, -111, -46, 59, 66, 120, 67, -47, 66, -122, 123, 15, 66, -112, -67, 119, 66, -100, -127, 82, 66, -88, -94, -68, 66, 111, -127, 124, 66, -103, 119, 101, 66, -65, -79, -36, 66, -118, 12, 70, 66, -71, -112, -57, 66, -119, -116, -86, 66, -91, -57, -81, 66, 112, -20, 58, 66, 108, 16, -123, 66, 95, -73, 8, 66, -114, -86, -27, 66, 116, -15, -88, 66, -93, 73, -126, 66, 91, -103, 77, 66, -118, -81, -32, 66, -118, -9, 42, 66, 117, -32, 27, 66, 120, -123, 57, 66, 107, -1, 77, 66, -79, -126, -104, 66, -101, -85, 12, 66, -104, -101, -23, 66, -67, -121, -54, 66, -75, -24, -50, 66, 86, 71, -9, 66, -115, 110, -79, 66, -101, -42, 0, 66, -94, 73, -69, 66, -121, 9, -2, 66, 125, 8, 115, 66, 112, 23, -92, 66, -122, 65, 44, 66, -122, -16, 102, 66, -111, 101, -58, 66, -89, -62, 79, 66, 127, 110, -63, 66, -94, 39, 110, 66, -101, -101, 41, 66, -125, -120, 106, 66, -112, -23, -29, 66, -119, 68, -86, 66, 118, -104, -121, 66, 118, -53, -34, 66, 102, -28, -120, 66, -108, 65, 104, 66, 110, 36, -27, 66, -87, 102, 56, 66, -92, 37, 43, 66, -74, 93, 76, 66, -100, 102, 35, 66, 110, -68, -117, 66, -111, -21, -115, 66, -111, -119, 52, 66, -128, -62, 6, 66, 118, 116, -121, 66, -92, 107, 27, 66, -72, -59, -86, 66, -100, -36, 127, 66, -85, -58, 44, 66, 110, 125, -61, 66, -83, 17, 91, 66, 117, 52, -26, 66, 112, -84, 87, 66, -116, -124, 18, 66, 117, 28, -37, 66, 111, 118, 40, 66, -110, -120, -120, 66, -128, 82, 107, 66, -123, -43, -30, 66, -100, 22, -72, 66, -100, -75, -87, 66, -106, 119, 84, 66, -93, -18, 114, 66, -63, -62, 56, 66, -119, 101, -40, 66, -82, -73, 113, 66, -111, 91, 104, 66, 106, -50, 56, 66, -112, 12, 122, 66, 72, 78, 34, 66, -103, 107, 109, 66, 102, 73, 118, 66, -117, 5, -9, 66, -115, 93, -72, 66, -78, 92, -102, 66, 112, -60, -37, 66, -119, -108, 85, 66, 120, -107, 33, 66, 71, 125, -23, 66, -74, -92, 30, 66, -79, -4, -89, 66, -108, 121, 81, 66, -103, 115, 104, 66, -128, -21, 114, 66, 108, -42, -73, 66, -105, 29, -58, 66, 106, -75, -106, 66, -106, -24, 49, 66, 114, -122, -15, 66, -125, -29, -87, 66, -105, 93, 39, 66, -106, -92, 78, 66, 91, 100, 61, 66, -106, -68, -61, 66, -118, -14, 105, 66, -92, -28, -38, 66, 102, -106, 23, 66, -110, -35, 125, 66, -107, 104, -18, 66, -103, -55, -46, 66, -126, 118, -20, 66, -102, -4, 38, 66, 102, -60, -73, 66, -80, -4, -36, 66, -95, -37, 93, 66, -117, 21, -7, 66, -86, 124, 102, 66, -92, 116, -102, 66, -122, 30, -53, 66, -85, 102, -100, 66, -93, -123, 76, 66, -120, 0, 88, 66, -121, 71, -70, 66, -66, -68, -26, 66, -128, 121, 17, 66, -123, -42, 47, 66, -83, -121, 60, 66, -120, -66, 26, 66, -95, -51, 53, 66, -83, -43, 102, 66, -87, -56, 37, 66, -84, 63, -101, 66, -104, 42, -25, 66, -73, 67, 52, 66, -61, -64, 79, 66, 85, -104, 22, 66, 111, -69, 45, 66, -114, -82, -108, 66, -109, 2, -111, 66, -108, -52, 48, 66, -84, 121, -99, 66, -89, -76, -35, 66, 123, -76, 117, 66, -64, 8, 36, 66, -80, -114, -94, 66, -125, -29, -64, 66, -91, -69, 87, 66, -89, -115, 76, 66, -111, 26, 69, 66, -120, 110, 30, 66, -108, 115, 126, 66, -89, -2, 87, 66, -91, -65, -109, 66, -71, -22, 69, 66, -121, 90, -70, 66, -107, -82, -22, 66, -98, -44, -9, 66, -92, -72, -105, 66, -117, 4, -122, 66, 102, -114, -78, 66, -123, -99, -60, 66, 115, -93, -68, 66, -125, 101, -53, 66, -116, 15, -57, 66, -98, 11, -88, 66, 98, -54, -67, 66, -85, -127, 21, 66, -74, 79, -37, 66, -92, 47, -9, 66, -124, -96, -60, 66, 127, 97, -13 ], "precision": "FLOAT_32", "root": 0, "canonicalAndNotALeaf": true, "size": 255, "leftIndex": [ 0, 1, 255, 699400191, 266607598, 524071438, 517151816, 29220877, 271356121, 145756769, 230801804, 65 ], "rightIndex": [ 0, 1, 255, 783286207, 1072594924, 532522526, 32905591, 27803799, 1042288659, 568983905, 415616650, 1543 ], "nodeFreeIndexes": [], "nodeFreeIndexPointer": -1, "leafFreeIndexes": [], "leafFreeIndexPointer": -1, "partialTreeStateEnabled": true }, "boundingBoxCacheFraction": 0.0, "partialTreeState": true, "seed": -5968712885689118287, "id": 0, "dimensions": 32, "staticSeed": 0, "weight": 0.0, "hasAuxiliaryData": false }, { "version": "2.0", "root": 0, "maxSize": 256, "outputAfter": 32, "storeSequenceIndexesEnabled": false, "centerOfMassEnabled": false, "nodeStoreState": { "version": "2.0", "capacity": 255, "compressed": true, "cutDimension": [ 1, 31, 255, 486694461, 64721605, 185461313, 126593884, 174283160, 400548254, 647367783, 845295726, 419418155, 139086039, 748996396, 724910844, 710223360, 140803803, 488739332, 152216485, 586379063, 803528157, 474182790, 466008553, 815466476, 849697412, 688632335, 479168762, 407199663, 364230794, 772460320, 511074611, 736421702, 391288059, 882800883, 843102518, 34716885, 507559525, 595511958, 752623314, 536247220, 706345695, 118300011, 459173939, 577881444, 740575421, 29586 ], "cutValueData": [ 66, -98, -25, -117, 66, -69, 81, 120, 66, 103, 9, 1, 66, 79, 2, 21, 66, -100, -86, -13, 66, -82, 81, -93, 66, -86, 87, 111, 66, -84, 67, -40, 66, -79, 53, 8, 66, -123, 122, -24, 66, 90, -57, 97, 66, -102, 105, 22, 66, 113, 112, 73, 66, -114, 79, 49, 66, 126, -84, 70, 66, -114, -27, 114, 66, -100, 87, 37, 66, -98, -33, 25, 66, -115, 64, 7, 66, -123, 28, 102, 66, 125, -8, -64, 66, 75, -80, 69, 66, 116, -90, 79, 66, 80, -91, -51, 66, -75, -116, 89, 66, 120, 26, 67, 66, -104, 49, 72, 66, 92, 49, 79, 66, -97, -63, 3, 66, -112, 127, 25, 66, -107, -124, -112, 66, -92, -6, -87, 66, -106, -30, -8, 66, 105, 109, 83, 66, -72, -47, 19, 66, -74, 77, 34, 66, -108, 58, 35, 66, 115, 43, 29, 66, -83, 87, 82, 66, -90, 115, 72, 66, -95, -88, 44, 66, 121, 127, 82, 66, -95, -44, -64, 66, -125, 96, 53, 66, -77, 29, 27, 66, -113, 96, 74, 66, -98, 91, 105, 66, 117, -85, 97, 66, -112, -19, 30, 66, -126, -34, -28, 66, 101, 104, -61, 66, -126, -61, -82, 66, -100, 44, 61, 66, 94, 98, -61, 66, -100, -30, 67, 66, -102, 63, 82, 66, 113, -9, -86, 66, -114, -108, 1, 66, 105, 46, -46, 66, 83, -14, 2, 66, -95, 59, 35, 66, -106, -29, -43, 66, 111, -50, 79, 66, 93, 53, 94, 66, -110, -89, 95, 66, -103, -98, 117, 66, 111, 74, -110, 66, -71, -38, 18, 66, 117, -90, 49, 66, -73, 125, 74, 66, 83, -83, 104, 66, 83, -22, 101, 66, 100, -4, 93, 66, 81, 59, 28, 66, 110, 63, -13, 66, -85, 21, 83, 66, -118, 6, -120, 66, -100, 24, -18, 66, -103, 65, -19, 66, -79, 110, -35, 66, -109, 106, -77, 66, -91, 0, -119, 66, -100, -12, -33, 66, -89, -9, -11, 66, 116, 53, 54, 66, 105, -126, -117, 66, -116, -58, -45, 66, -101, -49, -76, 66, -105, 79, -13, 66, -119, -22, 97, 66, -78, -62, -67, 66, -69, 101, 24, 66, 111, -105, 36, 66, -102, -30, -127, 66, 93, 119, -16, 66, -75, -83, 15, 66, -94, 67, -30, 66, -86, -79, 118, 66, -95, 49, -18, 66, -117, 99, 11, 66, -74, -94, 114, 66, -62, 28, 45, 66, 70, 64, -42, 66, 123, -126, 32, 66, -119, -99, -60, 66, 116, 9, -100, 66, -114, -81, -28, 66, -76, 82, -13, 66, -115, 84, -103, 66, -102, 119, -31, 66, -87, -103, -19, 66, 117, 116, -73, 66, 106, -47, -7, 66, -121, -124, 26, 66, 117, 104, -4, 66, -121, 21, 6, 66, -101, -80, 23, 66, 106, -20, 9, 66, -64, 36, -4, 66, -117, -28, 69, 66, -91, 79, 32, 66, 79, 13, 85, 66, -123, 41, -22, 66, 108, 40, 15, 66, 98, -33, 114, 66, -76, -99, -123, 66, 93, 55, 71, 66, 98, 125, -64, 66, -107, 30, 61, 66, 121, -111, -58, 66, -88, -5, 79, 66, -65, -4, 40, 66, 101, -39, 127, 66, -119, -77, -124, 66, -105, -38, 106, 66, -74, 18, -48, 66, -103, 99, 64, 66, -62, -71, 92, 66, -99, 121, 17, 66, 68, 85, -118, 66, -63, -102, -59, 66, -90, -57, 50, 66, -117, 110, -54, 66, -83, 60, 107, 66, 110, -60, 1, 66, -110, 72, -32, 66, 119, 2, -17, 66, -89, -73, 15, 66, -106, -80, -44, 66, 80, 57, 68, 66, 115, 0, 122, 66, -99, 19, 104, 66, -102, -28, 27, 66, 115, 2, 4, 66, 123, 16, -84, 66, -78, 38, -32, 66, -124, -62, -77, 66, -119, -111, -127, 66, 88, -115, 89, 66, -82, -78, -2, 66, 114, 120, 73, 66, -80, -128, -71, 66, -127, 73, -68, 66, -92, 113, 14, 66, -62, -73, 98, 66, -113, 1, 38, 66, -85, 67, 108, 66, -90, 24, -9, 66, -118, 111, 71, 66, 122, -64, -10, 66, -107, 5, -76, 66, 90, -81, 77, 66, -90, 123, 119, 66, -80, -27, -65, 66, -118, 4, 99, 66, -126, -59, -16, 66, 110, -98, -98, 66, -105, -41, 42, 66, -112, -58, 88, 66, -90, -71, 110, 66, 123, -111, -112, 66, 79, -107, -99, 66, -102, -36, -43, 66, -100, -31, 44, 66, 108, 43, -100, 66, -94, 107, 114, 66, -128, -52, -76, 66, -126, 69, 122, 66, -85, -106, -104, 66, 125, -43, 57, 66, -75, 120, -102, 66, -102, -38, -39, 66, 86, -12, -36, 66, 115, 59, -114, 66, -125, -30, -39, 66, -108, 32, 60, 66, -121, -108, 117, 66, -119, -43, 56, 66, -122, -19, -44, 66, -124, -124, -97, 66, -127, -125, 69, 66, 107, -27, -24, 66, -104, 85, 63, 66, -121, -13, 28, 66, -121, -117, 88, 66, -80, 102, 2, 66, -81, 62, 35, 66, -110, -36, 59, 66, -123, -125, 54, 66, 69, 99, 55, 66, 104, -10, 26, 66, -105, 102, 10, 66, -101, 7, -61, 66, -103, 67, 29, 66, -77, -48, 69, 66, -117, 106, -106, 66, -112, -99, -83, 66, -116, 32, -121, 66, -107, 127, -93, 66, -101, 116, 59, 66, -71, -40, 53, 66, -101, 13, 44, 66, -89, 12, -83, 66, -92, -97, 10, 66, 108, -61, -69, 66, -116, -75, -1, 66, -100, 2, -103, 66, -77, -128, -66, 66, -104, 51, -2, 66, -124, 88, 21, 66, -115, 117, 12, 66, -123, -35, -74, 66, 112, -121, 29, 66, 104, 103, 109, 66, -91, -81, -86, 66, -126, 8, -70, 66, -117, 107, -94, 66, 79, 47, -34, 66, -98, -67, -25, 66, -93, 125, -112, 66, -128, 17, -120, 66, -110, 125, 107, 66, -102, -72, 123, 66, -101, -108, -15, 66, -112, -124, 90, 66, -91, 52, 35, 66, -85, 125, 113, 66, 110, -79, -55, 66, -125, -97, 3, 66, -72, -20, 96, 66, 125, -3, -34, 66, -88, 8, 21, 66, -113, -96, -33, 66, 114, 7, -17, 66, -96, 80, 108 ], "precision": "FLOAT_32", "root": 0, "canonicalAndNotALeaf": true, "size": 255, "leftIndex": [ 0, 1, 255, 1037786111, 940570355, 875282198, 629598939, 753208112, 166751039, 69043420, 857944212, 268 ], "rightIndex": [ 0, 1, 255, 989558751, 1007615901, 268566028, 363217617, 544743806, 569421117, 36571843, 41980064, 2520 ], "nodeFreeIndexes": [], "nodeFreeIndexPointer": -1, "leafFreeIndexes": [], "leafFreeIndexPointer": -1, "partialTreeStateEnabled": true }, "boundingBoxCacheFraction": 0.0, "partialTreeState": true, "seed": 6987922936086641544, "id": 0, "dimensions": 32, "staticSeed": 0, "weight": 0.0, "hasAuxiliaryData": false }, { "version": "2.0", "root": 0, "maxSize": 256, "outputAfter": 32, "storeSequenceIndexesEnabled": false, "centerOfMassEnabled": false, "nodeStoreState": { "version": "2.0", "capacity": 255, "compressed": true, "cutDimension": [ 0, 31, 255, 393690042, 880352886, 359590950, 332912875, 609455066, 359897695, 649702387, 206670581, 1058225711, 106532297, 391857894, 779450049, 263108054, 317438891, 1066597970, 582657454, 882284227, 723598553, 523832643, 318551635, 488105939, 220825146, 208485375, 446417327, 536656307, 303147217, 770792693, 874300963, 1038980577, 208129733, 114362154, 848337383, 188442239, 391986131, 234810543, 1060019914, 199746991, 313499211, 221189595, 452579125, 395413097, 64720111, 18 ], "cutValueData": [ 66, -127, 85, -2, 66, -81, 42, 25, 66, 73, -117, 69, 66, 80, 85, -76, 66, -74, -126, 118, 66, -85, 120, -93, 66, -114, 59, -43, 66, -113, 121, -45, 66, -71, -6, 27, 66, -109, 63, -90, 66, -83, 62, 55, 66, -85, 3, 4, 66, -75, 100, -24, 66, -94, 39, 48, 66, -109, 48, -59, 66, 88, 27, -26, 66, -106, -92, -35, 66, 93, -42, 26, 66, -92, 22, 69, 66, -78, 100, 60, 66, -93, -108, -8, 66, -100, 43, -51, 66, -75, -49, 59, 66, -110, 120, -100, 66, -64, -7, 11, 66, -120, 0, -55, 66, 77, -84, -17, 66, -112, -45, 41, 66, -110, -28, 119, 66, 72, -76, 90, 66, -117, 14, -111, 66, -87, 92, 114, 66, -82, 126, -50, 66, -108, -85, 24, 66, -86, -25, 102, 66, 98, 19, -62, 66, 107, -1, -4, 66, -119, -100, 95, 66, 94, 48, 119, 66, 85, 29, -52, 66, 92, -13, -25, 66, 119, -95, 110, 66, -75, -60, 11, 66, 92, 121, -38, 66, 83, 84, -85, 66, -68, -42, 36, 66, -124, 9, -115, 66, -100, 34, -18, 66, -113, -125, 72, 66, -100, -63, -100, 66, 124, 23, 53, 66, -96, -61, -120, 66, -104, 92, 5, 66, 115, 33, 11, 66, -68, 63, 121, 66, -73, 2, -88, 66, -62, 21, 86, 66, 109, -116, 116, 66, -86, 9, 112, 66, -112, 106, -90, 66, -118, -27, -104, 66, -88, 5, 106, 66, -107, 32, -114, 66, -72, 21, -37, 66, -72, -48, 123, 66, 116, -128, 32, 66, -97, 16, 58, 66, -107, -43, -68, 66, -74, -95, -59, 66, -107, -11, -69, 66, -83, -14, -93, 66, 95, -2, 37, 66, 95, -82, 123, 66, -127, 22, -68, 66, -125, 97, 35, 66, -83, -67, -4, 66, -79, -80, 83, 66, 72, -1, 61, 66, 73, 52, -52, 66, -105, -118, 79, 66, -114, -72, -29, 66, 81, -3, 58, 66, -104, -51, 10, 66, -74, -99, 59, 66, -62, -9, -106, 66, -70, 96, 25, 66, 88, -82, -117, 66, -82, 123, -53, 66, 72, 33, -73, 66, -123, -98, -120, 66, -65, 64, 16, 66, -123, 60, -8, 66, -87, -94, 63, 66, -123, 24, -81, 66, -127, -23, 101, 66, 106, -78, -23, 66, -73, 124, 105, 66, 90, 48, 15, 66, 87, -117, -55, 66, -101, 113, -1, 66, -127, -128, -73, 66, -126, -36, -4, 66, -116, 115, -82, 66, -128, -110, 91, 66, -94, -83, 46, 66, 99, -112, 83, 66, -96, 50, 18, 66, 88, 54, 88, 66, -71, 42, -103, 66, -85, -48, 76, 66, -67, 9, 104, 66, -62, -6, 89, 66, -114, 121, 65, 66, -82, -105, 37, 66, -82, 87, 92, 66, 126, -81, 95, 66, 104, -44, -8, 66, -69, -110, -97, 66, -81, -26, -13, 66, -99, -24, 115, 66, -83, -127, 113, 66, 76, 26, 39, 66, 99, -115, -105, 66, -94, 42, -26, 66, -72, -80, -96, 66, 122, -103, 71, 66, 78, -82, 98, 66, 98, 31, -82, 66, -124, -28, -126, 66, 119, -87, 114, 66, 125, -76, -43, 66, -122, -96, 37, 66, -93, -51, 64, 66, -98, -111, 95, 66, 95, -81, -125, 66, -62, -13, -104, 66, -110, -23, 30, 66, -100, 25, -2, 66, -99, -1, -13, 66, -116, 61, -49, 66, -96, 126, 35, 66, -103, 117, 124, 66, 115, -88, -14, 66, -107, 67, -1, 66, -69, 42, 64, 66, -127, -106, 83, 66, -83, -81, 3, 66, -93, -105, -27, 66, -111, 108, 126, 66, -127, -100, 14, 66, 120, 110, 33, 66, -115, 115, -48, 66, -83, 118, -93, 66, -97, 40, -58, 66, -112, -67, -97, 66, -66, 5, -23, 66, -127, 83, 30, 66, 90, 121, -24, 66, -105, 103, 55, 66, -122, 4, -57, 66, -117, 125, 81, 66, -103, 94, -4, 66, -125, -28, 114, 66, -83, 116, -44, 66, -108, 68, -128, 66, -85, -57, -84, 66, -112, 99, -62, 66, -83, -124, -94, 66, 109, 17, -57, 66, 124, 109, -34, 66, 115, -119, -13, 66, -91, 12, 34, 66, -105, -46, 92, 66, -125, 119, -9, 66, -104, -29, 68, 66, -96, 103, 63, 66, 86, 95, 30, 66, -67, 70, 36, 66, 112, 105, 14, 66, 98, -50, -8, 66, -118, 67, 85, 66, -102, -126, 78, 66, -102, 58, 92, 66, 106, 40, -84, 66, -112, -27, 119, 66, -95, -16, -106, 66, 105, 18, -28, 66, -117, -43, -7, 66, 117, -58, -31, 66, -106, -40, -35, 66, -117, -69, -84, 66, 118, -99, 109, 66, -75, -26, 23, 66, -120, 85, -59, 66, -82, 24, -107, 66, -128, -127, 101, 66, -112, -109, 20, 66, 95, 83, 55, 66, -105, 71, 108, 66, 78, 100, 30, 66, -102, -90, 13, 66, -103, -106, -22, 66, -100, -5, 103, 66, -115, 30, 109, 66, -95, 122, -98, 66, 100, -15, -33, 66, -95, -52, 50, 66, -80, -46, -34, 66, -104, 11, 64, 66, 97, -90, -17, 66, -86, -90, 48, 66, -112, -14, 27, 66, 81, 64, -99, 66, 93, 26, -55, 66, -116, -64, -71, 66, 112, 102, -127, 66, 90, 39, 25, 66, -94, -66, -110, 66, 82, 14, 93, 66, -120, -91, 60, 66, -62, -115, -107, 66, -115, -39, 61, 66, -81, -96, 121, 66, -72, 59, -5, 66, -96, 119, 21, 66, -79, 95, 75, 66, -128, 85, 78, 66, -105, -68, -27, 66, -70, 63, 109, 66, -87, 126, 114, 66, -94, 71, 85, 66, 124, 19, 88, 66, -100, 30, 122, 66, 127, 11, -60, 66, -114, 122, 17, 66, 86, 57, 68, 66, 118, 67, -36, 66, -103, -19, 2, 66, 106, -49, 15, 66, -79, 117, -127, 66, 125, -94, 71, 66, 112, -50, 53, 66, -93, 101, -81, 66, -66, 5, 80, 66, -89, -19, -73, 66, -109, 68, -38, 66, -99, -59, -109, 66, -122, -94, -52, 66, 90, -52, -15, 66, -110, 35, 41, 66, 126, -59, 99, 66, -85, -116, 106, 66, -101, 44, -66, 0, 0, 0, 0, 0, 0, 0, 0 ], "precision": "FLOAT_32", "root": 0, "canonicalAndNotALeaf": true, "size": 253, "leftIndex": [ -1, 1, 255, 1118506157, 1156947047, 1160482432, 1028279276, 643515962, 629157604, 982986506, 1114225843, 982900966, 1114352689, 984730679, 601050685, 710291311, 364 ], "rightIndex": [ -1, 1, 255, 1104275348, 1140997225, 1155638959, 1031465003, 1155685120, 711039613, 1141532270, 1114234586, 1140739159, 1112659240, 1026143708, 596092738, 628960423, 391 ], "nodeFreeIndexes": [], "nodeFreeIndexPointer": 1, "leafFreeIndexes": [], "leafFreeIndexPointer": 1, "partialTreeStateEnabled": true }, "boundingBoxCacheFraction": 0.0, "partialTreeState": true, "seed": 7337502249195313879, "id": 0, "dimensions": 32, "staticSeed": 0, "weight": 0.0, "hasAuxiliaryData": false }, { "version": "2.0", "root": 0, "maxSize": 256, "outputAfter": 32, "storeSequenceIndexesEnabled": false, "centerOfMassEnabled": false, "nodeStoreState": { "version": "2.0", "capacity": 255, "compressed": true, "cutDimension": [ 1, 31, 255, 278250383, 164297688, 27510971, 832928501, 367753154, 413299321, 580523608, 124240170, 577698165, 722004443, 540095055, 591233598, 642793830, 459130683, 871739875, 720548358, 181778104, 196388197, 248232339, 405493197, 525456224, 721989530, 147492756, 723832976, 378567684, 689096449, 76587691, 247564083, 593655786, 860086032, 164090683, 348600156, 842797911, 582550765, 706011474, 37720289, 866771283, 373625313, 400683123, 516801133, 719502795, 310574043, 25157 ], "cutValueData": [ 66, -65, -64, 23, 66, -110, -76, 94, 66, -64, -52, 94, 66, 87, -46, 104, 66, -60, 35, -122, 66, 74, -113, -117, 66, 123, -72, 21, 66, -127, 68, -35, 66, 108, 19, -26, 66, -103, -26, 74, 66, 115, -71, 19, 66, -126, -35, 108, 66, 106, 71, 59, 66, -96, -20, -73, 66, -118, 23, -71, 66, -113, 1, 76, 66, 114, 34, 40, 66, 108, -109, -40, 66, -92, -23, -63, 66, -117, -105, -68, 66, -63, 106, -55, 66, -70, -65, -85, 66, 88, 55, -17, 66, -113, -14, 97, 66, -100, -23, -27, 66, 108, -63, 85, 66, -88, 112, 45, 66, 72, -119, 100, 66, -114, -43, -115, 66, -65, 63, 111, 66, 100, 79, -48, 66, -119, 91, 117, 66, -96, 83, 55, 66, -96, 69, -93, 66, 77, 56, -6, 66, -82, 117, 82, 66, 85, -60, 33, 66, 80, -105, -39, 66, 96, -1, 15, 66, 89, -127, 29, 66, -70, 64, -6, 66, -92, 11, 18, 66, -102, 23, 92, 66, 84, -88, 74, 66, -119, 19, -100, 66, -94, 1, -96, 66, -102, -123, 18, 66, -90, 29, 19, 66, -123, 45, -42, 66, -103, 56, -2, 66, 88, -84, -88, 66, 112, 89, 81, 66, -80, -53, -104, 66, -104, 46, -72, 66, -94, 52, 58, 66, -100, 104, -86, 66, -89, -92, 95, 66, -77, -50, -117, 66, -87, 1, -1, 66, -106, 115, 58, 66, 127, 87, -16, 66, -128, -22, 92, 66, -92, 49, -67, 66, -98, 5, 27, 66, 101, -64, -46, 66, 103, 103, -36, 66, -102, -112, 97, 66, 84, 10, 1, 66, -94, -80, -70, 66, 114, 7, -105, 66, 86, -116, -71, 66, -122, 54, -119, 66, -110, 57, -118, 66, -98, -60, -122, 66, -123, 14, -14, 66, 102, 30, 124, 66, -125, -83, 125, 66, 105, 79, 2, 66, -111, 74, 68, 66, 127, -35, -102, 66, -74, -79, -22, 66, -118, 38, 52, 66, 127, -63, 53, 66, -67, 13, 2, 66, -88, -66, 41, 66, -81, -73, -31, 66, -60, 117, 105, 66, -113, -44, 47, 66, -101, -116, -116, 66, -83, -82, 35, 66, -121, 10, -53, 66, -121, -22, -111, 66, -99, 5, 96, 66, -84, -13, -22, 66, -102, 27, 66, 66, -74, 77, 91, 66, -103, -116, -92, 66, 125, 39, -37, 66, -86, -74, 76, 66, -92, 73, -99, 66, -100, -46, -23, 66, -109, -23, -108, 66, -95, -124, -43, 66, 74, 91, -23, 66, -105, -34, 35, 66, 109, 56, -109, 66, 110, -121, -38, 66, -79, 91, 127, 66, -84, 125, 80, 66, -104, -97, -122, 66, -109, 92, -114, 66, 115, -107, 91, 66, -108, -85, 69, 66, -120, 0, -84, 66, 80, 79, 58, 66, 98, -58, -115, 66, -122, 50, -63, 66, -102, 27, 114, 66, -117, -10, 41, 66, 73, 37, 49, 66, 107, -82, 40, 66, -84, -6, 74, 66, 96, 38, -122, 66, -98, 98, 41, 66, 87, -1, -37, 66, -127, 93, 55, 66, -103, -49, 22, 66, 111, 47, -9, 66, 117, -84, 122, 66, 121, -90, 23, 66, -117, -98, 57, 66, 73, -73, 27, 66, -83, 19, 64, 66, -65, 74, -40, 66, -115, -101, -70, 66, -60, -49, 22, 66, -103, 19, -102, 66, 126, 83, 108, 66, 116, 1, -128, 66, -84, 118, -37, 66, -112, 52, 102, 66, -72, 17, 19, 66, -94, -60, -111, 66, 82, -104, -45, 66, 88, 84, 73, 66, -103, 20, 113, 66, -115, -102, -26, 66, -62, 103, 69, 66, -84, 109, 2, 66, -118, -125, 63, 66, -103, -84, 81, 66, -77, 82, 24, 66, -128, 2, 35, 66, -102, -106, -12, 66, -114, 110, 123, 66, -90, 73, 59, 66, 119, -25, 114, 66, 120, 90, -47, 66, -116, 21, 34, 66, -92, -108, -91, 66, -81, -4, -106, 66, -91, -34, 35, 66, -88, 33, -110, 66, -72, -45, -21, 66, -88, 104, 124, 66, -117, 76, -86, 66, 114, -91, -98, 66, -103, -119, -39, 66, -108, 8, -75, 66, -111, 121, -53, 66, -92, -24, 3, 66, 103, 44, -8, 66, -93, -8, 66, 66, -108, -106, -49, 66, -126, -113, -89, 66, -98, -21, 118, 66, 72, 87, -89, 66, -75, -70, -49, 66, 85, -33, 77, 66, -113, 83, 34, 66, -102, -94, 73, 66, -98, -30, 105, 66, -119, -95, -11, 66, -100, -114, -97, 66, 111, -54, 64, 66, -109, -10, 81, 66, 95, 71, 78, 66, -81, 53, -120, 66, -85, -14, -49, 66, 114, 15, -107, 66, -119, -102, 41, 66, -121, 6, -73, 66, -114, 73, 53, 66, -105, -80, 102, 66, 103, 28, -5, 66, -68, 85, 81, 66, -94, -120, -118, 66, -102, -58, -36, 66, -68, -107, -121, 66, -113, 53, -24, 66, 113, 125, 72, 66, -105, -58, -91, 66, -112, -59, 35, 66, 111, 2, -125, 66, -113, 121, -29, 66, -99, 50, 28, 66, 109, -39, 90, 66, -78, -108, 18, 66, 124, 27, 117, 66, -113, 43, 35, 66, -75, -40, 127, 66, -79, -60, -103, 66, 88, -63, 115, 66, -92, 103, -62, 66, -105, -73, -24, 66, -114, -85, 25, 66, -103, 20, 80, 66, 109, 72, -117, 66, -76, -76, -63, 66, -65, 71, 41, 66, 117, 62, -31, 66, -88, -32, 64, 66, -112, -4, -93, 66, -125, -32, 36, 66, 113, 115, -54, 66, 110, -125, -86, 66, -91, -70, -56, 66, -68, 43, 32, 66, -106, -91, -86, 66, -85, -73, -57, 66, -97, 104, 14, 66, 94, 3, -36, 66, -120, 82, -108, 66, 101, -65, -91, 66, -92, -55, 115, 66, -109, -125, 57, 66, -95, 118, 53, 66, -76, -44, 119, 66, -122, -33, 91, 66, -89, -62, 1, 66, -108, -35, -92, 66, -73, -107, 25, 66, -86, 48, 126, 66, -96, -46, 52, 66, -63, 52, -32, 66, 100, 23, 89, 66, 113, 60, -2, 66, -106, -74, 52, 66, -121, 102, -26, 66, 102, -86, -104, 66, -85, 61, 35, 66, 116, -120, 107, 66, -70, 3, -48, 66, -110, -117, -87, 66, -101, 23, -41 ], "precision": "FLOAT_32", "root": 0, "canonicalAndNotALeaf": true, "size": 255, "leftIndex": [ 0, 1, 255, 939386367, 654835694, 91089351, 498687794, 864854050, 729388756, 118344839, 407388214, 0 ], "rightIndex": [ 0, 1, 255, 1003356139, 77053855, 7027618, 798016566, 922894498, 124295892, 128765699, 8439475, 4105 ], "nodeFreeIndexes": [], "nodeFreeIndexPointer": -1, "leafFreeIndexes": [], "leafFreeIndexPointer": -1, "partialTreeStateEnabled": true }, "boundingBoxCacheFraction": 0.0, "partialTreeState": true, "seed": 6898202114516460044, "id": 0, "dimensions": 32, "staticSeed": 0, "weight": 0.0, "hasAuxiliaryData": false }, { "version": "2.0", "root": 0, "maxSize": 256, "outputAfter": 32, "storeSequenceIndexesEnabled": false, "centerOfMassEnabled": false, "nodeStoreState": { "version": "2.0", "capacity": 255, "compressed": true, "cutDimension": [ 0, 31, 255, 863063295, 589674055, 581363007, 173357345, 191095977, 329975383, 728939570, 212657826, 388742617, 248883253, 909700289, 668002619, 372165166, 757951917, 59849802, 708519730, 438754037, 44231546, 371001141, 1068796494, 532002809, 82254437, 1010488899, 894781143, 653732805, 598273714, 68590131, 1067171527, 396748469, 41674871, 328690762, 91043747, 174894957, 73348531, 115422305, 119781307, 732867394, 237194410, 329186301, 100118259, 506676843, 1063453746, 75 ], "cutValueData": [ 66, -99, 99, 45, 66, -123, 70, 69, 66, -86, 107, 31, 66, 72, 99, -112, 66, -120, 92, 60, 66, -83, -97, -16, 66, -102, -114, -5, 66, -101, 114, 122, 66, -64, -106, 1, 66, 104, -25, 74, 66, 86, 122, 105, 66, -100, -124, 15, 66, -79, -123, -53, 66, -101, 78, -70, 66, 116, 58, 79, 66, -74, 113, 120, 66, -90, 26, 25, 66, -106, 127, -125, 66, -86, -32, 60, 66, 95, 9, 44, 66, -63, -57, 106, 66, -94, -93, -71, 66, -126, 85, 23, 66, 121, 112, -112, 66, -111, -31, 79, 66, 110, -41, -33, 66, -103, 65, 127, 66, -91, 93, 101, 66, 109, -127, 51, 66, -124, -43, -15, 66, -84, -49, -88, 66, 110, -113, -95, 66, -112, -105, 76, 66, -121, -112, -18, 66, -105, -128, -90, 66, -107, -92, 110, 66, -124, -48, -68, 66, -91, 0, -31, 66, 80, 73, -54, 66, -114, 96, -7, 66, -120, 103, 85, 66, -120, -117, -117, 66, -85, -57, 93, 66, -113, -106, -96, 66, -61, 65, -15, 66, -69, -82, -68, 66, -108, -77, 38, 66, -113, -127, -22, 66, 108, -67, -105, 66, -117, 15, -19, 66, 117, -15, -30, 66, -86, 61, 114, 66, -76, -39, -71, 66, -98, 41, 31, 66, 124, -81, 87, 66, 120, -56, -8, 66, -85, 7, 113, 66, -79, 102, -82, 66, -96, -26, -73, 66, -102, 69, -118, 66, -112, -48, -95, 66, -94, 17, 84, 66, -89, -118, -42, 66, -107, 100, 97, 66, -113, -2, 62, 66, -124, -13, -109, 66, 120, -22, 114, 66, -117, 56, -72, 66, 79, 7, -106, 66, -79, 4, -71, 66, -95, -102, 18, 66, -94, 58, -47, 66, -124, 83, 22, 66, -106, 114, -48, 66, -99, 37, 22, 66, -69, 127, -85, 66, -103, -89, -105, 66, 98, 77, -56, 66, -114, 85, 36, 66, -80, 62, 14, 66, -102, 39, -18, 66, -121, 76, -34, 66, -128, -18, 85, 66, -97, 69, 28, 66, -125, 40, -47, 66, -122, 10, -38, 66, -124, 112, -119, 66, -99, 53, 3, 66, -122, 75, 99, 66, 82, 126, 88, 66, -96, 32, 65, 66, -67, -54, -55, 66, -101, 52, -78, 66, -97, 1, -77, 66, 94, 54, 29, 66, -105, -36, -34, 66, -109, 111, 110, 66, 97, 3, -17, 66, -109, -68, -100, 66, -108, -93, -80, 66, -116, 22, 58, 66, -67, 70, -112, 66, -124, 105, 60, 66, -106, 99, 90, 66, -119, -10, -63, 66, 73, 91, -114, 66, 85, -67, -116, 66, -85, 118, -23, 66, -109, 114, 108, 66, -91, -66, 99, 66, -112, 53, -87, 66, -93, -100, 31, 66, -122, -31, 122, 66, 113, 84, -117, 66, -99, -24, 41, 66, -72, 84, 105, 66, -96, -128, -28, 66, -122, 81, -69, 66, -109, 58, -14, 66, -110, -15, -48, 66, 96, -125, 40, 66, -112, 73, -72, 66, -105, 97, 119, 66, -123, 34, 48, 66, -105, 32, -118, 66, 121, -16, -73, 66, -98, 21, -22, 66, 116, -96, 33, 66, -102, -118, -4, 66, -127, -79, 48, 66, 122, 52, -41, 66, -83, 59, 122, 66, 109, 57, -96, 66, -104, -31, 24, 66, -87, 107, -48, 66, -76, 38, 16, 66, -119, 32, 94, 66, -73, -121, 66, 66, 125, -46, -62, 66, -103, -6, -127, 66, -69, -33, 30, 66, -112, 47, 69, 66, -118, -37, 12, 66, 94, 92, -15, 66, 115, 59, -126, 66, -127, 87, 47, 66, 105, 50, -50, 66, -114, 51, 30, 66, -100, -46, -87, 66, -118, -66, 121, 66, 110, 93, 27, 66, -74, -43, 52, 66, -97, 125, -67, 66, -110, 87, -75, 66, 103, 51, 57, 66, -77, 84, 45, 66, -110, -106, 80, 66, -106, 84, 30, 66, -84, -15, 26, 66, -126, 105, 90, 66, -89, 6, -119, 66, -63, -128, -95, 66, -62, -83, 115, 66, -102, -118, 23, 66, -121, -116, 29, 66, 127, -32, -112, 66, 115, -92, -115, 66, -62, 65, -83, 66, -98, -117, 30, 66, -107, -39, 78, 66, 107, 12, 64, 66, -71, 44, 119, 66, -93, -122, -123, 66, -64, 68, 78, 66, 87, 23, 80, 66, -115, 52, 24, 66, 93, 97, -6, 66, -117, 98, 109, 66, 121, 58, 88, 66, -65, -111, 110, 66, -95, -57, 20, 66, -90, 119, -30, 66, 76, 46, 64, 66, -92, 11, 107, 66, -69, 87, -10, 66, -72, 122, -112, 66, 97, 40, 8, 66, 78, -47, -55, 66, 100, -87, 13, 66, -113, 69, -109, 66, -74, -95, 21, 66, 120, 76, 60, 66, -100, -85, 18, 66, -117, 67, 56, 66, -113, -51, 88, 66, -76, -76, -42, 66, -72, 16, -51, 66, -89, -22, -74, 66, -74, -45, -11, 66, -99, 79, 115, 66, -112, 118, 0, 66, -97, 100, 7, 66, 112, -39, -107, 66, -125, -10, 92, 66, -70, -32, -37, 66, 127, 93, -10, 66, 109, -38, -110, 66, -122, -3, -18, 66, 104, 50, -22, 66, -61, -9, 118, 66, -114, -9, 32, 66, -125, -77, 48, 66, 123, -26, 47, 66, -101, 79, -59, 66, -73, -84, 5, 66, 87, -100, -28, 66, 125, 116, 4, 66, -103, -5, 122, 66, -87, 42, 74, 66, 93, -43, -73, 66, 92, -29, -101, 66, 97, -20, -100, 66, 109, -35, -102, 66, -102, -56, -27, 66, 115, -82, 119, 66, 85, 117, 62, 66, -120, -2, 36, 66, 86, 119, 12, 66, -128, 67, -66, 66, -112, -56, 19, 66, -97, 39, 46, 66, -116, 11, 101, 66, -102, 106, 64, 66, -102, 41, -11, 66, -88, 15, 52, 66, -90, -20, -57, 66, -125, -67, -48, 66, 111, -19, 97, 66, 102, -91, 53, 66, -93, 21, -24, 66, 123, -37, -58, 66, -77, 121, -108, 66, -104, -109, 84, 66, -113, -120, 91, 66, -96, -61, 122, 66, -85, -5, 105, 66, 100, -104, 5, 66, 85, 84, -89, 66, -80, -125, 33, 66, 92, 55, -120, 66, -69, -108, -42, 66, 80, 17, 114, 66, -95, 40, -89, 66, -72, -21, 54, 0, 0, 0, 0 ], "precision": "FLOAT_32", "root": 0, "canonicalAndNotALeaf": true, "size": 254, "leftIndex": [ -1, 1, 255, 1114429589, 1147905998, 1104097922, 643900796, 772984187, 982901212, 973951262, 1156682156, 597843904, 581218456, 600350090, 581159164, 596033707, 1093 ], "rightIndex": [ -1, 1, 255, 1033119116, 1147674176, 1147826942, 629748716, 755505682, 1112040646, 1012208236, 1028073697, 588217679, 624204673, 1026507451, 753575767, 595718105, 1175 ], "nodeFreeIndexes": [], "nodeFreeIndexPointer": 0, "leafFreeIndexes": [], "leafFreeIndexPointer": 0, "partialTreeStateEnabled": true }, "boundingBoxCacheFraction": 0.0, "partialTreeState": true, "seed": -9202437649290432236, "id": 0, "dimensions": 32, "staticSeed": 0, "weight": 0.0, "hasAuxiliaryData": false }, { "version": "2.0", "root": 0, "maxSize": 256, "outputAfter": 32, "storeSequenceIndexesEnabled": false, "centerOfMassEnabled": false, "nodeStoreState": { "version": "2.0", "capacity": 255, "compressed": true, "cutDimension": [ 1, 31, 255, 535719095, 867105787, 151614999, 707219049, 84183276, 234971147, 149604553, 642161656, 696657209, 852529586, 886947438, 656297559, 492732625, 62060633, 614388041, 56075691, 740370285, 885229957, 706316741, 760457038, 384840541, 849947140, 299208006, 537546950, 355483385, 830564046, 754257754, 133924414, 160215686, 253534916, 486409978, 277181321, 887324940, 396786524, 133542942, 296075823, 377299001, 77452291, 642617502, 704455112, 767255632, 354700450, 13175 ], "cutValueData": [ 66, 70, 121, -124, 66, -98, 70, 107, 66, -88, 117, -54, 66, -120, -83, 12, 66, -124, -32, 87, 66, -74, -30, -51, 66, -78, -9, -19, 66, -119, 47, 85, 66, -114, 11, 24, 66, -95, -42, 30, 66, -120, -38, -8, 66, 106, -54, -102, 66, -107, 31, -38, 66, -115, 63, -107, 66, 113, 7, -63, 66, -71, -89, -99, 66, 101, -119, 48, 66, -71, -6, -118, 66, -119, -83, -42, 66, -87, -29, 107, 66, -98, -27, 0, 66, 91, 41, -22, 66, -93, -4, -99, 66, -124, 70, 59, 66, 69, 95, 112, 66, -114, 15, -18, 66, 94, -62, -56, 66, -113, 76, -93, 66, -124, -95, -114, 66, 127, 32, 4, 66, -79, -31, 11, 66, -90, -64, 78, 66, -81, 17, 35, 66, -71, 25, 15, 66, -118, -63, -10, 66, -105, -100, -96, 66, -71, 124, -62, 66, 86, -111, -3, 66, -98, -47, -91, 66, -89, 13, 8, 66, -109, 121, -28, 66, 109, -105, 114, 66, -67, 107, 93, 66, -122, 13, -39, 66, -93, -69, 27, 66, -75, 17, 124, 66, -93, 18, 58, 66, 101, 72, -72, 66, -71, 75, 53, 66, 124, 66, 77, 66, -116, -3, 114, 66, -111, -16, -122, 66, -125, 4, -15, 66, -92, -83, 15, 66, -69, -95, -110, 66, -99, -113, -42, 66, 93, 1, -125, 66, 118, -59, 93, 66, -102, 32, -4, 66, 127, -49, -123, 66, -81, 92, -80, 66, -74, 20, 12, 66, -116, -88, -23, 66, -93, -61, -92, 66, -93, -87, -1, 66, -91, 13, -97, 66, -85, -51, 125, 66, -72, -4, 102, 66, -90, -128, 121, 66, -128, 79, -73, 66, -126, 21, 109, 66, 97, -45, 85, 66, 124, -25, -72, 66, -127, -23, -118, 66, 72, -87, 94, 66, 119, 53, -73, 66, -115, -41, -28, 66, -87, -76, -93, 66, 76, -50, -86, 66, 87, -81, 77, 66, -94, 94, 105, 66, -100, -43, 61, 66, -121, -22, -21, 66, 123, -46, -111, 66, 101, -93, -85, 66, 127, -99, -48, 66, -128, 22, 101, 66, 113, 92, -91, 66, -126, 115, 58, 66, -126, 24, -82, 66, -70, -127, -126, 66, -72, -59, -96, 66, -81, 29, 77, 66, -67, -128, 50, 66, -123, -99, 49, 66, -96, 98, 115, 66, 94, 119, 117, 66, -98, 40, 22, 66, -99, 3, -30, 66, 100, 13, -20, 66, -79, -123, -26, 66, -119, 52, 112, 66, -97, -1, -122, 66, -93, 115, 25, 66, 102, -88, -68, 66, 81, -65, -10, 66, -113, 73, 93, 66, -125, -29, 35, 66, -74, -12, 101, 66, -123, -9, 96, 66, -123, -1, 90, 66, -84, -116, 67, 66, -91, 28, -41, 66, -77, 58, -55, 66, -116, 56, -101, 66, 119, -80, -124, 66, 118, 15, -43, 66, -74, -65, 45, 66, -119, -85, 13, 66, -113, 30, 22, 66, 82, -5, 110, 66, -87, -28, 0, 66, -93, 119, 3, 66, -86, 98, 127, 66, -80, 35, 110, 66, -128, 62, 111, 66, -86, 47, -102, 66, -116, -67, 49, 66, -101, -72, 97, 66, -113, 29, -103, 66, 83, 75, -122, 66, -115, -67, -102, 66, -69, -2, 124, 66, 100, -40, -98, 66, 116, -13, -113, 66, -115, -106, 86, 66, -108, 23, -14, 66, -121, -82, -30, 66, -127, -64, -2, 66, -78, 8, 54, 66, -106, -65, 36, 66, -72, -101, 48, 66, -113, 18, -60, 66, -116, 35, -47, 66, -106, -98, -92, 66, 99, -57, 94, 66, 120, -71, -43, 66, -84, 47, -53, 66, -98, 117, 25, 66, 114, -7, 66, 66, 87, 92, -8, 66, -110, 110, 107, 66, -82, 70, -68, 66, -75, 14, 77, 66, -95, 14, 7, 66, 108, 66, -40, 66, -87, 120, 100, 66, 82, 91, 95, 66, -121, -101, 62, 66, -109, -65, -127, 66, -76, -128, 122, 66, -122, 42, 107, 66, 81, -125, -25, 66, -65, 24, 114, 66, 94, 88, 85, 66, -120, 77, -118, 66, -111, -62, -5, 66, -79, -98, -98, 66, -107, 11, -47, 66, 126, -4, -94, 66, 110, -46, -80, 66, 104, 34, -89, 66, 117, -78, 45, 66, -63, -15, -94, 66, 93, -103, 35, 66, -92, 98, 45, 66, -83, 88, 52, 66, -105, -9, -127, 66, -121, -111, 51, 66, -104, 65, 80, 66, 112, 100, 5, 66, 102, 100, 107, 66, -107, -45, 112, 66, -123, -48, -73, 66, -102, 16, -115, 66, -106, 54, 84, 66, -72, 0, 16, 66, -101, 35, -117, 66, 125, 59, -103, 66, -65, 78, -91, 66, -63, 117, 123, 66, -68, -67, -15, 66, -113, 121, -69, 66, -70, 106, -74, 66, 86, 89, 21, 66, -102, -64, -45, 66, -114, -47, 102, 66, 126, 48, -118, 66, 89, -3, -17, 66, -89, 18, -75, 66, -103, 2, 65, 66, -114, -76, -114, 66, -92, 112, -51, 66, 122, 25, 124, 66, -94, 79, 91, 66, -102, 125, 100, 66, -64, 82, 98, 66, -120, 50, -43, 66, 123, -121, 122, 66, -113, 58, -91, 66, 92, 57, 29, 66, -100, 109, 120, 66, 120, -127, -13, 66, -126, 35, 94, 66, -89, 13, 85, 66, -95, 47, -96, 66, -114, 89, -12, 66, 76, 73, 28, 66, 100, -118, -119, 66, -106, -50, 112, 66, -87, -35, -6, 66, 71, 35, -125, 66, -81, -107, -51, 66, -123, 110, -113, 66, -115, -12, -18, 66, -82, -38, -68, 66, -109, 35, -83, 66, -106, -70, 66, 66, -122, 34, 105, 66, -118, -86, -106, 66, -126, -124, 123, 66, 123, 63, -39, 66, -62, -91, -8, 66, 80, -40, -26, 66, 80, -39, 78, 66, -109, 121, 77, 66, 118, 123, -20, 66, 120, 94, -78, 66, 120, 75, 2, 66, -86, 96, -9, 66, 96, -83, 16, 66, -109, -122, 37, 66, 72, -112, -110, 66, 111, -51, -39, 66, -124, -77, -37, 66, -81, -27, -29, 66, -128, 32, -68, 66, -89, 84, 78, 66, -90, 62, 48, 66, -96, 25, 106, 66, -122, -67, -26, 66, -117, -53, -113, 66, -84, 42, -103, 66, -112, -75, -97, 66, 112, 11, 22 ], "precision": "FLOAT_32", "root": 0, "canonicalAndNotALeaf": true, "size": 255, "leftIndex": [ 0, 1, 255, 1044373375, 872148407, 22248433, 387200477, 762354131, 402689047, 6856100, 311476328, 5154 ], "rightIndex": [ 0, 1, 255, 1044381565, 309447863, 326926004, 928185553, 772906643, 24468693, 553929732, 186810656, 112 ], "nodeFreeIndexes": [], "nodeFreeIndexPointer": -1, "leafFreeIndexes": [], "leafFreeIndexPointer": -1, "partialTreeStateEnabled": true }, "boundingBoxCacheFraction": 0.0, "partialTreeState": true, "seed": -3274031270900754220, "id": 0, "dimensions": 32, "staticSeed": 0, "weight": 0.0, "hasAuxiliaryData": false }, { "version": "2.0", "root": 0, "maxSize": 256, "outputAfter": 32, "storeSequenceIndexesEnabled": false, "centerOfMassEnabled": false, "nodeStoreState": { "version": "2.0", "capacity": 255, "compressed": true, "cutDimension": [ 0, 31, 255, 578209893, 257924091, 585725913, 352298682, 1059957473, 1068420343, 227716159, 749119150, 514098745, 715069249, 87672902, 330159845, 871206710, 132696553, 975129162, 254793854, 128544595, 909768015, 52383069, 774183261, 185947346, 257414195, 603028837, 1016255798, 911256998, 77956717, 86996186, 580475745, 336965233, 866872495, 731348601, 259210925, 463572070, 858477874, 78428495, 44030675, 733064953, 719022758, 712485181, 254453550, 846256505, 917936994, 581 ], "cutValueData": [ 66, -69, 17, 18, 66, -64, -11, 112, 66, -70, -40, -77, 66, -68, -23, -115, 66, -73, 22, -21, 66, -122, -98, -89, 66, -114, 11, -41, 66, -110, -68, -31, 66, 101, 0, 84, 66, -77, 34, -118, 66, 114, 119, -127, 66, -65, -50, 117, 66, -88, -39, -128, 66, -88, 97, 21, 66, -122, 64, 105, 66, 100, -24, 43, 66, 111, -109, -29, 66, -85, 106, 118, 66, -97, 19, 82, 66, -75, 96, -89, 66, 126, 92, 103, 66, 69, 112, -21, 66, 127, -7, 95, 66, -85, -101, -22, 66, -85, 92, -101, 66, -79, 73, -122, 66, -93, -120, 76, 66, -98, 1, -107, 66, -123, 102, 54, 66, -122, -43, -19, 66, 100, -117, 55, 66, 109, -37, -28, 66, 126, 8, -127, 66, -96, 109, -92, 66, -103, 37, -128, 66, -125, -13, 103, 66, -112, -75, -70, 66, 108, 72, 68, 66, -72, 9, 41, 66, -122, 47, 41, 66, -69, 111, 19, 66, -89, -1, -88, 66, -124, -107, -95, 66, -119, 56, 27, 66, -91, -77, 119, 66, -107, 75, -11, 66, 111, 82, 93, 66, -100, 69, -1, 66, 72, -53, -8, 66, -85, 113, 0, 66, -94, -71, 21, 66, -71, 79, 30, 66, -102, -108, -100, 66, -95, 48, -69, 66, -93, -31, 106, 66, -69, 16, -83, 66, -96, -89, -64, 66, -91, 30, -25, 66, -72, -83, -60, 66, 114, 67, -43, 66, -79, -81, 121, 66, 123, 112, 80, 66, -95, -112, 66, 66, 73, -18, 21, 66, -112, 10, -128, 66, -65, 65, 3, 66, -112, -112, 103, 66, 68, 111, -79, 66, -109, 98, -9, 66, -91, 63, 75, 66, -87, -43, -57, 66, -97, 40, 38, 66, -80, -99, -3, 66, 105, -120, 123, 66, 97, -114, -58, 66, -102, 17, 86, 66, -115, 120, 94, 66, 105, 111, -111, 66, -110, -55, 70, 66, -94, 69, -113, 66, -92, 75, -11, 66, -101, -31, 30, 66, -73, 60, 90, 66, -102, 58, -61, 66, -109, -1, 27, 66, -109, 43, 84, 66, -104, 92, 99, 66, 102, 124, -97, 66, -114, 30, -127, 66, 115, 30, -35, 66, -98, -15, -127, 66, 116, -108, -13, 66, -109, 42, -93, 66, 112, 49, 105, 66, -82, -5, -127, 66, -118, 6, 16, 66, 72, -45, -103, 66, -78, 32, -115, 66, -66, -72, 54, 66, 91, -62, -56, 66, 80, 18, 113, 66, -124, 5, 82, 66, -81, 8, 61, 66, 96, -15, -36, 66, -81, -82, 25, 66, -72, -119, 12, 66, -110, -44, -5, 66, 120, -84, -110, 66, 99, -67, 120, 66, -70, -117, 1, 66, -128, -99, -106, 66, -126, -71, 55, 66, 90, 4, 123, 66, -78, 102, 46, 66, -113, 124, 55, 66, -121, -114, 0, 66, -72, -3, -33, 66, 122, 84, -98, 66, -116, -36, 46, 66, -113, -40, -83, 66, -80, -56, -10, 66, -111, 119, -15, 66, -109, 91, -91, 66, -104, -118, -28, 66, 122, -120, 105, 66, -109, -27, 26, 66, -120, -77, -6, 66, -123, 36, -26, 66, 93, 94, 24, 66, -125, -102, -27, 66, -103, -68, -96, 66, 93, 110, 95, 66, -102, -69, 79, 66, -108, 51, 77, 66, -116, -77, -90, 66, -120, 109, -9, 66, 91, 77, 45, 66, -108, -13, 6, 66, -123, 58, -97, 66, -118, 94, -99, 66, -125, 117, 56, 66, 117, 16, 125, 66, 107, -99, -33, 66, -99, -54, 123, 66, -94, -47, -50, 66, -119, -91, -5, 66, 77, 39, -17, 66, -106, -57, -55, 66, -110, -82, -90, 66, -113, -13, 4, 66, 87, 121, 112, 66, 100, 29, 62, 66, -123, 23, 87, 66, -109, 1, -90, 66, 123, 43, 52, 66, -94, -35, -49, 66, 93, 91, 98, 66, -106, -44, 22, 66, -110, -89, 78, 66, -104, -105, -89, 66, 109, 70, -68, 66, -122, 55, -99, 66, -123, 40, -4, 66, 107, -63, 123, 66, -89, -17, -25, 66, -113, 109, 44, 66, 90, -35, 72, 66, -98, -84, 67, 66, -102, 29, 97, 66, -105, 17, -118, 66, -97, -60, 55, 66, -79, -54, -3, 66, -90, -61, -124, 66, -86, 63, -78, 66, -86, -119, -61, 66, -116, 88, -86, 66, -117, -72, 105, 66, -76, -60, -3, 66, -111, -76, 96, 66, -123, 87, 46, 66, -112, 121, -73, 66, -91, 94, -85, 66, -73, -61, -18, 66, -101, 17, 36, 66, -111, -114, -119, 66, -73, 100, -98, 66, 83, -84, 91, 66, -118, -66, -114, 66, 94, 27, -40, 66, 94, 11, 17, 66, -71, -63, 108, 66, 102, 20, 7, 66, -127, 16, -75, 66, -83, 112, 14, 66, -95, -70, 104, 66, -112, -96, 80, 66, -64, -128, -111, 66, -121, -26, 4, 66, 109, -33, 107, 66, -89, 120, 0, 66, 120, -89, 20, 66, -127, 49, 117, 66, 86, 15, -21, 66, 99, 51, -21, 66, -110, -33, 45, 66, -103, 127, -99, 66, -91, -114, 12, 66, -87, 101, 71, 66, 74, -126, 74, 66, -104, 12, -17, 66, -120, 112, 102, 66, 124, -77, -84, 66, -89, 71, 23, 66, 111, -80, 116, 66, -126, 62, 98, 66, -120, 75, -115, 66, -128, -38, -115, 66, -101, 96, -123, 66, -104, -11, 119, 66, -81, 23, -111, 66, 111, 123, 85, 66, -66, 74, -62, 66, -78, -124, -81, 66, 112, 124, 14, 66, -87, 35, 72, 66, 102, -49, -25, 66, 83, 74, -78, 66, -103, 13, 24, 66, -72, -103, -126, 66, -123, 87, 15, 66, -112, -25, 112, 66, 76, -66, 104, 66, 91, 86, 61, 66, -91, 111, 25, 66, -92, -46, 49, 66, -121, 37, 112, 66, -101, 4, 5, 66, -123, 24, -40, 66, -86, -82, 16, 66, -125, -109, 76, 66, -90, 38, -23, 66, -121, -5, -101, 66, -103, 0, -98, 66, 84, 115, -46, 66, 88, 1, -81, 66, -86, -13, 79, 66, -112, 57, -101, 66, 82, -108, -96, 66, -114, -110, -23, 66, -112, -84, -38, 66, -125, 90, 88, 66, -110, -1, 124, 66, 113, -60, 118, 66, -76, -110, 94, 0, 0, 0, 0 ], "precision": "FLOAT_32", "root": 0, "canonicalAndNotALeaf": true, "size": 254, "leftIndex": [ -1, 1, 255, 1157477768, 587688443, 1147846949, 975665816, 602574268, 1026185486, 973596749, 758185996, 753337331, 715789547, 715232068, 969083423, 754977551, 1093 ], "rightIndex": [ -1, 1, 255, 645700004, 1117021184, 1156704272, 600502082, 726393487, 768264632, 629039186, 717202579, 758888728, 717424600, 581316871, 970172036, 640356988, 1102 ], "nodeFreeIndexes": [], "nodeFreeIndexPointer": 0, "leafFreeIndexes": [], "leafFreeIndexPointer": 0, "partialTreeStateEnabled": true }, "boundingBoxCacheFraction": 0.0, "partialTreeState": true, "seed": -3778355347224434329, "id": 0, "dimensions": 32, "staticSeed": 0, "weight": 0.0, "hasAuxiliaryData": false }, { "version": "2.0", "root": 0, "maxSize": 256, "outputAfter": 32, "storeSequenceIndexesEnabled": false, "centerOfMassEnabled": false, "nodeStoreState": { "version": "2.0", "capacity": 255, "compressed": true, "cutDimension": [ 0, 31, 255, 1020871983, 94566889, 760979307, 762517201, 74089533, 720059238, 1039236787, 882164983, 443010978, 1067685491, 744437879, 44227651, 712934875, 586599657, 478058170, 712497074, 584890827, 1067023138, 212507518, 644517879, 57637087, 922614059, 211124159, 630942554, 212127663, 980757562, 922680098, 251194977, 651341409, 182695597, 992923474, 907738585, 530524267, 524254673, 350455678, 636851930, 978783919, 460889075, 854407546, 1050527682, 441574977, 1063108273, 743 ], "cutValueData": [ 66, -82, 59, -41, 66, -109, 15, 112, 66, -94, 21, -4, 66, -74, 10, -84, 66, -124, -19, 86, 66, 106, 118, -85, 66, 116, 125, -39, 66, -83, -4, 63, 66, 108, 68, -113, 66, -128, -76, -32, 66, 124, 119, 18, 66, 75, -24, -25, 66, -115, -4, 120, 66, -107, -35, 49, 66, 86, 65, 17, 66, -122, 97, 67, 66, 100, -62, 9, 66, 110, 17, 46, 66, 122, -118, 91, 66, -94, 52, 78, 66, -89, 92, -90, 66, -109, -85, -95, 66, -121, -34, -11, 66, -59, -80, -45, 66, -94, -79, -49, 66, -127, -100, -4, 66, -125, 32, 71, 66, -74, -73, 86, 66, -125, 106, -99, 66, -121, -105, -112, 66, -101, 0, -118, 66, 127, 99, -46, 66, 95, -80, -85, 66, -99, -40, 10, 66, 74, 76, 9, 66, 77, -10, -36, 66, 118, -13, -57, 66, -98, 94, -27, 66, -121, -30, 119, 66, -112, 16, -45, 66, -99, 124, -9, 66, 94, -64, 77, 66, -67, -39, 32, 66, -83, -92, -92, 66, -117, 85, 59, 66, -92, 22, -24, 66, -120, 77, 6, 66, -62, 43, 35, 66, 117, -77, 31, 66, 114, 38, -5, 66, 109, -108, -103, 66, -89, -27, 2, 66, -87, 116, -109, 66, 71, 1, 107, 66, -113, 0, -93, 66, 112, -124, 57, 66, -96, -39, -105, 66, -99, 66, 101, 66, -100, -109, -59, 66, -108, 103, 49, 66, -81, -114, -36, 66, -119, 113, -75, 66, -91, -120, -82, 66, -101, 67, -60, 66, -123, -7, -103, 66, -94, -55, -115, 66, 126, -107, -48, 66, -109, 114, 34, 66, 119, 124, -67, 66, -112, -36, 103, 66, -63, 113, -6, 66, -98, 74, 62, 66, -102, -64, 35, 66, 111, -37, -125, 66, 123, 65, 18, 66, 115, 34, -3, 66, -81, -19, 16, 66, -66, 29, -84, 66, -121, -38, -46, 66, -111, -10, 24, 66, -125, -53, -119, 66, -117, 32, -44, 66, -99, 106, 24, 66, 75, -122, 21, 66, -68, -96, 113, 66, 102, 32, -14, 66, -84, -77, 1, 66, 107, 18, -95, 66, -93, -119, -35, 66, -105, -102, -117, 66, -98, 87, 51, 66, -99, 25, 14, 66, -101, 94, -5, 66, -99, 75, 24, 66, -61, 122, -72, 66, -103, 31, 45, 66, 102, 25, -43, 66, -70, -15, 121, 66, -79, 59, 90, 66, -79, 11, -24, 66, -77, 51, 105, 66, 115, -30, 11, 66, -95, 23, 43, 66, -126, -68, -41, 66, 126, -10, -4, 66, -81, -81, 105, 66, -114, -112, -114, 66, 81, 58, -103, 66, -118, 45, -41, 66, 97, -99, 91, 66, -100, -23, -48, 66, -95, 3, -22, 66, -117, -70, 36, 66, -98, 67, 63, 66, -65, 127, 92, 66, -69, -117, -109, 66, -81, 120, -54, 66, 121, 97, -112, 66, 96, -93, 23, 66, -79, -74, 21, 66, -115, -128, -124, 66, 108, 96, -32, 66, 118, 102, 53, 66, 124, 54, -73, 66, -127, -49, -78, 66, -119, 87, -30, 66, -82, 17, -63, 66, -59, -62, 101, 66, -71, -45, 21, 66, -85, -109, -35, 66, -93, 113, -99, 66, -90, 67, -74, 66, -121, -27, -83, 66, -92, 109, 21, 66, -111, -64, 102, 66, -63, 126, -20, 66, -75, -80, 72, 66, -126, -46, -91, 66, -100, 49, -79, 66, -88, 107, 39, 66, -92, -6, -30, 66, 94, -101, -33, 66, -111, -40, 91, 66, 110, -88, 32, 66, -96, 35, -78, 66, -93, 107, -15, 66, -96, 52, -122, 66, 104, 51, -47, 66, 112, 101, -81, 66, -89, 32, 104, 66, -97, 123, -36, 66, -76, 67, -15, 66, -114, -22, 52, 66, 125, 24, 86, 66, -76, -23, 16, 66, -103, 54, -33, 66, -98, -45, -58, 66, -96, 106, 100, 66, -105, 29, 14, 66, -63, -37, 1, 66, 85, -121, -36, 66, -118, 21, -46, 66, -100, -74, 5, 66, -116, 35, -126, 66, 93, 78, -110, 66, 117, 69, -61, 66, 82, -90, -30, 66, -95, 27, -71, 66, -71, -2, -24, 66, 124, -52, -24, 66, -99, 86, 104, 66, 122, 110, 81, 66, -73, -25, -100, 66, -103, 43, -92, 66, -112, -127, 89, 66, 77, 28, -49, 66, 98, -50, 82, 66, -113, -123, -94, 66, 92, -55, -114, 66, 107, -124, 63, 66, -108, 61, 127, 66, 94, 12, 125, 66, 91, -110, -101, 66, -101, -83, 31, 66, -94, 119, 47, 66, -120, 13, -72, 66, -126, -34, -2, 66, -97, 30, 14, 66, 127, -53, -84, 66, 117, -30, -49, 66, -109, -59, -23, 66, 106, -111, -83, 66, -67, 66, -93, 66, -95, -99, -64, 66, -85, -105, -11, 66, 117, 28, 49, 66, -95, 68, 116, 66, 83, 88, -94, 66, -125, 115, 89, 66, -84, 123, 106, 66, 86, -105, 35, 66, -86, 90, -89, 66, 104, -121, 118, 66, -105, 122, 59, 66, -101, 114, 18, 66, -94, -32, 55, 66, -79, 104, 58, 66, 106, 103, -120, 66, 108, 35, -40, 66, 118, 116, 11, 66, 114, -105, 105, 66, -81, 96, 19, 66, -96, 7, -107, 66, 91, -33, -2, 66, 123, 125, 125, 66, -122, 47, 125, 66, 68, -56, 65, 66, -101, 50, -35, 66, -73, -67, -4, 66, -105, -120, 21, 66, -88, 100, 70, 66, -104, -8, -98, 66, 123, 120, -3, 66, -106, 4, 74, 66, -102, -11, -14, 66, 115, 2, -32, 66, -69, 89, -102, 66, -123, -69, 22, 66, 124, 28, 37, 66, 91, 46, 2, 66, 74, 94, 27, 66, -90, 75, -64, 66, 87, -97, -53, 66, -76, -108, 105, 66, -110, -68, -72, 66, -107, -118, 67, 66, -103, -66, 28, 66, -79, 11, 38, 66, -120, -52, 33, 66, 88, 48, -103, 66, -99, 67, 117, 66, -109, -110, -55, 66, -63, 93, -65, 66, -115, 19, -79, 66, 84, -29, 100, 66, -121, -9, 41, 66, -69, 28, -80, 66, -101, -20, -72, 66, 121, -20, -51, 66, -95, -107, -54, 66, -65, 32, 28, 66, -100, -97, 96, 66, 114, -31, -119, 66, 113, 35, 83, 0, 0, 0, 0 ], "precision": "FLOAT_32", "root": 0, "canonicalAndNotALeaf": true, "size": 254, "leftIndex": [ -1, 1, 255, 1112837453, 1117086767, 975718871, 1013967445, 1117440845, 1032503558, 629218502, 1104077698, 724699304, 640674031, 753495493, 588216641, 581721979, 1093 ], "rightIndex": [ -1, 1, 255, 1162259279, 1156767371, 1112830567, 1031461285, 1117082416, 631266250, 581330083, 1102502788, 725178301, 768279937, 753851246, 645613321, 768198073, 1096 ], "nodeFreeIndexes": [], "nodeFreeIndexPointer": 0, "leafFreeIndexes": [], "leafFreeIndexPointer": 0, "partialTreeStateEnabled": true }, "boundingBoxCacheFraction": 0.0, "partialTreeState": true, "seed": -6113428335752356252, "id": 0, "dimensions": 32, "staticSeed": 0, "weight": 0.0, "hasAuxiliaryData": false }, { "version": "2.0", "root": 0, "maxSize": 256, "outputAfter": 32, "storeSequenceIndexesEnabled": false, "centerOfMassEnabled": false, "nodeStoreState": { "version": "2.0", "capacity": 255, "compressed": true, "cutDimension": [ 0, 31, 255, 754238655, 303134165, 935192163, 354379938, 171411282, 919938218, 481872430, 195147813, 187248085, 473528881, 262749606, 483639285, 318319270, 498904418, 523308769, 731084623, 521846193, 362265005, 1017487010, 258991987, 103656913, 643804798, 901504089, 383989611, 883230441, 847214373, 707074923, 115531125, 584362039, 742046455, 107588339, 391829959, 1067542898, 329321707, 1026113227, 634501623, 35719918, 37406818, 937236853, 91827443, 895862653, 90536699, 5 ], "cutValueData": [ 66, -92, -3, 98, 66, -80, 90, -29, 66, 74, -38, 51, 66, 94, 4, -48, 66, -120, 80, 11, 66, -91, -118, -70, 66, 92, -127, 43, 66, -66, -74, 9, 66, 122, -21, 93, 66, -91, 103, 64, 66, -91, -113, -117, 66, 124, -18, 3, 66, 82, -96, -11, 66, 105, 126, -18, 66, 93, 117, -117, 66, -98, 25, -11, 66, -94, 99, -104, 66, -111, -117, 37, 66, -110, -102, 74, 66, -73, -8, 35, 66, -99, 74, 8, 66, 95, 109, -56, 66, 108, -23, -9, 66, 102, 107, 2, 66, -63, 116, 124, 66, 84, 114, -86, 66, -124, -88, -117, 66, -92, -39, -48, 66, -121, 15, -70, 66, -101, -113, 92, 66, -100, -121, -17, 66, -112, -75, 78, 66, 127, 33, 61, 66, 117, -70, 57, 66, 82, -1, 119, 66, -76, -35, 43, 66, 85, 78, 29, 66, -123, 116, -123, 66, -93, 96, 7, 66, -118, -110, 111, 66, 78, -64, 67, 66, -121, -24, -40, 66, -97, 70, 40, 66, -99, 71, 64, 66, -94, 124, -55, 66, 82, -2, 12, 66, -113, -22, 111, 66, -118, 121, -13, 66, 125, 111, 41, 66, 101, 4, 110, 66, -120, -75, 20, 66, -97, 86, 66, 66, 106, 67, -41, 66, -106, -68, -17, 66, -80, 115, -105, 66, -81, 52, 44, 66, -99, -67, -30, 66, -70, -128, -37, 66, 126, -37, 80, 66, -105, 85, 118, 66, -60, -17, 116, 66, -85, -71, -77, 66, -83, -12, 26, 66, -106, 19, 47, 66, 120, -85, 24, 66, -107, 44, 19, 66, -111, -116, 45, 66, -82, -90, -93, 66, -103, 118, 43, 66, -124, -47, -16, 66, 97, -125, -31, 66, -83, 51, -104, 66, -88, 70, 15, 66, 105, 88, -87, 66, -92, 86, -72, 66, 119, 120, -121, 66, -128, -128, 82, 66, -79, 35, -105, 66, -74, 42, -112, 66, -76, -53, 85, 66, 127, -114, -89, 66, 127, 110, 24, 66, -99, 78, 18, 66, -89, -123, -30, 66, -99, 123, -66, 66, -128, 20, 79, 66, 93, 112, 16, 66, -127, 74, 70, 66, -73, 46, 12, 66, -101, 29, -120, 66, 115, 104, 105, 66, 115, 75, -122, 66, -88, 17, -20, 66, -104, -54, 68, 66, -91, 54, 101, 66, -126, 81, -23, 66, 126, -1, 96, 66, 103, -16, 121, 66, -86, 83, -36, 66, 122, 9, 57, 66, -104, 20, 1, 66, -114, -20, 14, 66, 118, -4, -108, 66, -107, 35, -59, 66, 107, 116, -108, 66, 87, -62, 29, 66, 78, -36, 125, 66, 104, -4, -65, 66, -76, 119, -8, 66, -103, 54, -35, 66, -124, 109, -103, 66, -95, -14, 22, 66, -110, 44, 68, 66, -79, -102, 29, 66, -118, -126, 83, 66, -82, 20, 45, 66, -102, -50, -52, 66, -123, -41, -113, 66, -125, 75, -105, 66, -110, -34, -120, 66, -103, 90, -122, 66, -60, 24, -98, 66, -97, -85, -62, 66, 82, -30, -78, 66, -79, 93, -64, 66, 109, 14, 97, 66, -71, 83, 85, 66, 111, 53, 22, 66, -106, -23, 79, 66, -79, -88, -27, 66, -59, 4, 36, 66, -121, 41, -39, 66, 125, 71, -45, 66, 96, 72, -92, 66, 81, -83, 91, 66, -90, -79, 15, 66, -111, 8, -2, 66, -90, -90, -51, 66, -85, -36, -106, 66, 122, 76, 35, 66, -99, -104, -23, 66, 117, 10, 22, 66, 104, -117, 28, 66, 106, 86, -50, 66, -86, -109, -31, 66, -97, 71, -106, 66, -125, 125, -109, 66, -103, -81, -61, 66, -88, 51, 69, 66, -80, 51, -108, 66, 127, 102, 55, 66, -83, -121, 80, 66, -99, 7, -47, 66, -116, 30, 104, 66, 108, 87, 96, 66, -126, -120, -49, 66, -88, 122, 58, 66, -71, -65, 59, 66, -75, -31, -109, 66, -91, -9, 117, 66, -106, 20, -70, 66, 126, -76, 63, 66, -90, -113, -49, 66, -69, -101, 102, 66, 84, 1, -80, 66, -118, 58, 118, 66, -106, -8, -90, 66, -108, 122, 125, 66, -79, 69, -124, 66, -69, 39, 2, 66, -111, -92, 110, 66, -77, 75, 61, 66, 72, -99, -27, 66, -90, -49, -90, 66, 92, -52, -71, 66, -112, 32, -90, 66, -106, -108, -15, 66, -70, -50, -65, 66, 99, -120, 78, 66, -118, -105, -6, 66, -127, -50, 108, 66, 110, -27, -122, 66, -112, -108, -43, 66, 102, -55, 1, 66, -78, 83, -109, 66, 114, 50, -24, 66, -125, 99, 87, 66, -121, -13, -64, 66, -107, 79, 70, 66, -94, 110, -85, 66, -98, -78, -60, 66, 122, 37, 98, 66, -94, 57, -63, 66, 104, -66, -7, 66, -108, 22, -122, 66, 115, -20, -122, 66, 103, -117, -128, 66, 102, -128, 62, 66, -125, -3, 96, 66, -120, -62, 82, 66, 118, 67, -114, 66, -127, 46, 92, 66, -126, 59, 70, 66, -70, -33, -6, 66, -102, -8, -24, 66, -125, 25, 12, 66, -109, 14, 125, 66, -119, -110, -60, 66, -82, 35, -34, 66, -123, 24, -97, 66, -112, 28, -20, 66, -105, -54, -56, 66, -83, -15, -39, 66, 121, -67, -44, 66, -105, 34, 88, 66, -110, -9, 114, 66, -111, -93, -94, 66, 122, 72, 67, 66, -102, 65, -45, 66, -98, -85, -72, 66, -86, -91, -77, 66, -127, 17, -75, 66, 96, -59, 36, 66, -120, 62, 13, 66, -82, 16, -60, 66, -115, -102, 4, 66, -95, -63, -27, 66, -102, 55, -54, 66, -102, 31, -49, 66, -112, -126, 32, 66, -85, 55, 60, 66, 88, 84, 95, 66, -111, -111, 14, 66, -102, -37, 34, 66, -123, 30, 68, 66, -121, 84, 42, 66, -72, -109, -53, 66, -105, 51, 89, 66, -92, 107, -83, 66, 81, 116, 62, 66, 125, -7, 31, 66, 110, 94, 114, 66, -121, 17, -12, 66, -103, 115, -37, 66, -113, 64, -92, 66, -124, -12, -76, 66, -71, 12, 7, 66, -114, 113, -92, 66, -107, -58, 8, 66, -77, -128, 103, 66, 122, -50, 34, 66, -123, 42, 4, 66, -95, 18, -7, 0, 0, 0, 0, 0, 0, 0, 0 ], "precision": "FLOAT_32", "root": 0, "canonicalAndNotALeaf": true, "size": 253, "leftIndex": [ -1, 1, 255, 1161552878, 970915724, 1162082041, 1147201774, 711874240, 1025966572, 1016440232, 1156918381, 774287572, 1098407515, 758651710, 582803878, 712042646, 391 ], "rightIndex": [ -1, 1, 255, 1162084076, 1104838865, 772712942, 1155331957, 1018061585, 773239120, 1159870334, 769517485, 1018586147, 969102601, 715054135, 582786302, 753320561, 364 ], "nodeFreeIndexes": [], "nodeFreeIndexPointer": 1, "leafFreeIndexes": [], "leafFreeIndexPointer": 1, "partialTreeStateEnabled": true }, "boundingBoxCacheFraction": 0.0, "partialTreeState": true, "seed": -1388210874864416000, "id": 0, "dimensions": 32, "staticSeed": 0, "weight": 0.0, "hasAuxiliaryData": false }, { "version": "2.0", "root": 0, "maxSize": 256, "outputAfter": 32, "storeSequenceIndexesEnabled": false, "centerOfMassEnabled": false, "nodeStoreState": { "version": "2.0", "capacity": 255, "compressed": true, "cutDimension": [ 1, 31, 255, 425622219, 144909231, 844096932, 408239312, 581172034, 16895927, 857323289, 614083712, 768110542, 599362554, 494134646, 246430980, 722192539, 574816296, 387821868, 69295080, 870210871, 503884653, 816670625, 853067783, 810444633, 713880196, 755881543, 768770204, 639365931, 612809248, 625484104, 257958187, 520591636, 141167312, 374792846, 755614941, 527588315, 169125597, 491698020, 619845819, 405795430, 851208309, 817350660, 314382308, 383822855, 744296626, 7780 ], "cutValueData": [ 66, -60, -48, 100, 66, -73, 116, -105, 66, -101, -6, -47, 66, -88, -52, 126, 66, 90, 118, -34, 66, 102, -91, -120, 66, 112, 79, 82, 66, -85, -40, -4, 66, 86, 49, -38, 66, 94, 76, 32, 66, -105, -17, 109, 66, -61, 19, 121, 66, 109, -52, 91, 66, -72, -36, 67, 66, -73, -118, -119, 66, 81, 64, -77, 66, -105, 125, 14, 66, -103, -23, -104, 66, -126, 59, -120, 66, -90, -105, -94, 66, 85, 67, -23, 66, 69, -31, -106, 66, -75, 102, 105, 66, -88, 94, -105, 66, -124, 49, 17, 66, -85, 11, -16, 66, 115, -82, 36, 66, -88, 87, 25, 66, 126, 44, -25, 66, -85, 21, -16, 66, -89, -76, -91, 66, -96, -6, -25, 66, -117, 47, 33, 66, 107, 4, -78, 66, -106, -105, -59, 66, -66, 103, 17, 66, -115, 8, -60, 66, -117, 91, -71, 66, 99, 44, -35, 66, -90, -102, 31, 66, -88, 16, 42, 66, -120, -62, -68, 66, -93, 29, -13, 66, -92, -38, 110, 66, 78, 75, -119, 66, -65, -1, 35, 66, -83, 3, 121, 66, -70, 31, 25, 66, -116, 42, 8, 66, -120, 107, -85, 66, -67, -4, -77, 66, -122, 32, 94, 66, -97, -89, 2, 66, 107, 109, 66, 66, -107, 99, 76, 66, 117, 78, -119, 66, 74, 35, 93, 66, -91, -66, 16, 66, -70, -70, 113, 66, 111, -60, 109, 66, -62, 47, 50, 66, 97, 126, -30, 66, -66, 67, 61, 66, -118, -9, -110, 66, -72, -71, 38, 66, 127, 87, 19, 66, -110, -14, 47, 66, -67, -118, -69, 66, -103, 20, -121, 66, -83, -32, 25, 66, -76, 78, 68, 66, -127, -64, 2, 66, -74, -58, 19, 66, -76, -6, 99, 66, -119, -103, 73, 66, -123, -11, -52, 66, -109, -61, 84, 66, -128, 79, -118, 66, -109, -22, 39, 66, 68, 12, -90, 66, 124, 58, -27, 66, -96, 29, 63, 66, -117, 21, -23, 66, -121, -125, -58, 66, -103, 121, -54, 66, -105, 69, 15, 66, -103, -16, 113, 66, -100, -111, -24, 66, 125, 24, 6, 66, -90, 111, 8, 66, -84, 115, -110, 66, 109, -72, -111, 66, -119, -19, -67, 66, -95, 74, -21, 66, -117, 107, -126, 66, 103, 54, -68, 66, 111, -44, -105, 66, -125, 25, -12, 66, -111, 62, -103, 66, -95, 90, 20, 66, -66, -87, 28, 66, -115, 26, -9, 66, -77, -17, 12, 66, -112, -44, -35, 66, -68, 38, -35, 66, -125, 47, -30, 66, -71, -7, -62, 66, -94, 48, 7, 66, -120, -43, 1, 66, -86, -11, 62, 66, -91, -21, 40, 66, 123, 120, 45, 66, -80, 108, 62, 66, 101, 56, 7, 66, -75, -13, 124, 66, -113, 2, 78, 66, -82, 52, -11, 66, -96, 95, -58, 66, -83, -38, 114, 66, -98, 52, 32, 66, -96, 19, -78, 66, -76, 56, -2, 66, -110, 43, 4, 66, 80, 125, -61, 66, 124, -45, -38, 66, -112, 122, -49, 66, -111, 43, -18, 66, -112, -8, -126, 66, 90, -97, 104, 66, -106, 78, 11, 66, -70, 86, -55, 66, -109, 60, -44, 66, -117, -92, 100, 66, -117, 70, -47, 66, -118, -109, 80, 66, 98, -91, -56, 66, -64, 44, -57, 66, -110, 8, -67, 66, -118, 117, -126, 66, -110, -128, 110, 66, -85, 48, 31, 66, -115, -125, -29, 66, 85, -109, -55, 66, -115, -96, -63, 66, -70, 97, -114, 66, -96, 112, -88, 66, -105, 0, 27, 66, -98, 114, 84, 66, 68, 70, 11, 66, -106, -54, -123, 66, -128, 27, -62, 66, -86, 31, -11, 66, -116, 21, 0, 66, -108, -90, -12, 66, -78, -59, 89, 66, -121, 27, 8, 66, -104, -92, 85, 66, -104, -68, 116, 66, -91, 125, -78, 66, -89, 95, -106, 66, 86, 33, 105, 66, 82, -28, 4, 66, -103, -61, -121, 66, 121, 25, 38, 66, 103, 10, -63, 66, -82, 21, 60, 66, -109, -67, -81, 66, -104, 24, 46, 66, -128, -36, -15, 66, -118, -59, -1, 66, -121, -38, 69, 66, 113, -58, -65, 66, -121, -71, 52, 66, -97, -44, 22, 66, -60, -96, 7, 66, -99, 45, 34, 66, -106, -14, 86, 66, -97, 29, -106, 66, -81, 84, 127, 66, -111, -89, -81, 66, -71, -90, 124, 66, -117, -1, -4, 66, -120, -73, 126, 66, -119, 14, -30, 66, 92, 100, -10, 66, -77, -127, -9, 66, -124, 118, -118, 66, 93, -49, -98, 66, -119, -86, -1, 66, 106, -119, -124, 66, -126, 99, 75, 66, -103, -11, 30, 66, -117, 46, -22, 66, -115, 89, -33, 66, -89, -11, 29, 66, -78, 59, 14, 66, -112, -17, 65, 66, -69, -79, -21, 66, -78, -55, 23, 66, -89, 102, -43, 66, -100, -95, -76, 66, -100, 124, -110, 66, -103, 57, -39, 66, -109, -26, -34, 66, -66, 102, -21, 66, 92, 105, 6, 66, -94, -110, 0, 66, -84, -106, -57, 66, -121, 36, -67, 66, -125, -123, 6, 66, -101, -95, -91, 66, -111, 59, 104, 66, -115, 123, -48, 66, -92, -102, 11, 66, 88, -95, 48, 66, 92, 27, 41, 66, -119, -35, -76, 66, -122, -64, 53, 66, -122, -77, -127, 66, -123, 99, 65, 66, -116, 95, -121, 66, 121, -67, 108, 66, -65, 92, 86, 66, -126, -11, 15, 66, -105, -16, 96, 66, 94, 83, -63, 66, -101, 31, 46, 66, -95, 42, -103, 66, -82, -100, -36, 66, 92, 19, -23, 66, -106, -75, -54, 66, -124, -104, 89, 66, 117, 71, 2, 66, -73, 11, 111, 66, -127, -14, 50, 66, 110, -13, 112, 66, -105, -118, -45, 66, -81, 0, -95, 66, -84, -47, -42, 66, -94, 98, 114, 66, -123, 63, -28, 66, 123, -2, 4, 66, -107, 72, 51, 66, 72, 67, -102, 66, -98, -46, -29, 66, -99, 78, 90, 66, -120, 87, 28, 66, 106, -15, 29, 66, -116, -108, -121, 66, 103, -61, -121, 66, -77, -45, -73, 66, 100, -116, -127, 66, -113, 101, 81, 66, 125, 15, 54, 66, -120, -71, 11 ], "precision": "FLOAT_32", "root": 0, "canonicalAndNotALeaf": true, "size": 255, "leftIndex": [ 0, 1, 255, 1071445919, 530489087, 567670760, 668846143, 18740279, 266131074, 557802017, 840968560, 0 ], "rightIndex": [ 0, 1, 255, 360626143, 797186431, 32615112, 384598228, 281864855, 242933764, 619652, 709388776, 6272 ], "nodeFreeIndexes": [], "nodeFreeIndexPointer": -1, "leafFreeIndexes": [], "leafFreeIndexPointer": -1, "partialTreeStateEnabled": true }, "boundingBoxCacheFraction": 0.0, "partialTreeState": true, "seed": -5115030242711725490, "id": 0, "dimensions": 32, "staticSeed": 0, "weight": 0.0, "hasAuxiliaryData": false }, { "version": "2.0", "root": 0, "maxSize": 256, "outputAfter": 32, "storeSequenceIndexesEnabled": false, "centerOfMassEnabled": false, "nodeStoreState": { "version": "2.0", "capacity": 255, "compressed": true, "cutDimension": [ 0, 31, 255, 108505767, 479371230, 476801865, 129435123, 357886958, 879169134, 440351138, 456493873, 398023646, 771081298, 249470198, 645773885, 1039967609, 938438618, 1038667563, 78167277, 230547394, 1016853958, 978511219, 370245062, 395871426, 387233217, 802873034, 1016568690, 1056001443, 590855073, 460443587, 97898103, 513088234, 1069505259, 624010986, 1052219045, 133424678, 663848258, 656512707, 926770483, 212651459, 922220895, 861469929, 320138303, 459621995, 482134238, 23 ], "cutValueData": [ 66, -71, 50, -39, 66, -104, 37, 46, 66, 120, 14, 77, 66, -63, 81, -111, 66, -123, 61, 34, 66, 75, -113, 110, 66, -95, 115, -122, 66, -79, 108, -117, 66, -114, 74, -46, 66, -112, 88, -9, 66, -124, -61, -58, 66, 104, 119, 112, 66, -67, -27, -48, 66, -78, 106, -107, 66, -92, -55, -90, 66, -95, -127, 69, 66, -81, -27, 117, 66, -124, 4, -116, 66, -122, -28, -70, 66, -108, -3, -18, 66, -92, -83, 71, 66, -100, -63, -121, 66, -101, 8, 94, 66, 117, 114, -5, 66, -77, -47, -51, 66, -70, 52, 48, 66, 125, 77, 14, 66, -84, -2, -79, 66, 68, 3, -28, 66, -81, 100, 37, 66, 75, -68, -47, 66, -120, 32, -44, 66, -114, -10, 11, 66, 72, -82, -64, 66, -103, 96, -79, 66, -110, -17, -90, 66, -103, 119, 38, 66, 76, -11, -32, 66, -113, -5, 94, 66, -86, 119, -75, 66, -109, 113, -40, 66, -113, 51, -57, 66, -79, 29, -53, 66, 117, -43, 19, 66, -77, -111, 0, 66, -102, 46, 85, 66, -104, -127, 84, 66, -82, 79, 118, 66, -104, -49, -33, 66, -71, -55, 124, 66, -99, -14, -75, 66, -112, 113, -44, 66, -112, -92, 53, 66, 115, -113, -109, 66, -120, -103, -63, 66, -90, 37, 86, 66, -117, 33, -20, 66, -105, 67, -94, 66, 97, 1, -109, 66, -109, 16, 28, 66, 114, -125, 83, 66, -108, 113, -70, 66, -114, -11, -8, 66, -122, 89, 50, 66, -122, -102, -2, 66, -102, 72, 9, 66, -99, 44, -117, 66, 121, 119, 105, 66, -105, 14, -16, 66, -64, 91, -58, 66, -117, 68, -40, 66, -80, 13, 7, 66, -118, 81, -107, 66, 123, 31, 17, 66, 95, 111, -82, 66, -105, -127, -119, 66, -81, 114, -99, 66, -96, 71, -66, 66, -93, -103, 35, 66, -107, 43, 89, 66, -94, -89, -8, 66, -120, -66, 121, 66, -75, 97, 2, 66, -90, -8, 54, 66, -117, 30, 69, 66, -116, -70, -102, 66, -70, -1, -94, 66, -71, 14, -91, 66, -122, -46, 49, 66, 110, -81, 15, 66, 124, 73, 28, 66, 92, 57, 67, 66, 113, 98, 58, 66, 111, 3, -111, 66, -124, -6, 49, 66, 103, 35, 122, 66, 119, 8, -3, 66, -99, -25, 125, 66, 108, -17, -35, 66, -117, -53, 4, 66, -71, 121, -49, 66, 110, -86, 117, 66, -104, -21, 48, 66, -111, -67, 125, 66, -101, 75, 79, 66, 127, -66, -45, 66, -96, 23, -114, 66, -90, -89, -114, 66, -84, -94, 116, 66, -100, -123, -50, 66, -85, 84, 6, 66, 88, -124, 116, 66, 126, 38, -23, 66, -89, -100, -93, 66, -95, -102, -114, 66, -127, -110, 111, 66, 111, -28, -119, 66, -111, -35, -12, 66, -81, -31, 104, 66, -77, 112, 37, 66, -101, -107, 16, 66, -80, -31, 47, 66, -103, -16, -118, 66, -98, -58, -90, 66, -82, 27, -62, 66, -94, 23, 67, 66, -106, 75, 103, 66, -113, -102, 6, 66, -84, 119, 16, 66, 85, -128, -82, 66, -86, -65, 19, 66, 106, -121, 112, 66, 108, -61, -41, 66, 95, 112, -28, 66, 122, 35, 83, 66, 124, 104, 35, 66, -105, -8, -39, 66, -125, 22, -122, 66, -96, 98, -32, 66, -90, 93, -24, 66, 119, -27, 29, 66, -127, -50, 8, 66, 114, 95, 80, 66, -95, 72, -40, 66, -95, -22, -71, 66, -69, -125, -61, 66, -65, -22, -125, 66, 110, -124, -42, 66, -81, 26, 72, 66, -115, -15, -84, 66, 93, -102, 39, 66, -126, -90, -88, 66, -92, -81, 127, 66, -83, 7, 7, 66, -99, 84, 117, 66, 100, -66, -4, 66, -73, 22, -36, 66, -114, 63, 9, 66, -103, -43, 54, 66, -95, -127, -36, 66, 119, 126, 71, 66, -102, -31, -61, 66, -120, 63, -113, 66, 83, 22, -45, 66, -66, -61, 13, 66, -105, 124, 11, 66, -99, 95, 118, 66, -114, -38, -68, 66, -119, 49, 94, 66, -125, 14, -68, 66, -121, 117, -38, 66, 108, 85, 90, 66, 109, 14, -111, 66, -89, -6, -20, 66, 102, 2, 40, 66, -83, 20, -98, 66, -90, -55, -2, 66, 94, -77, 70, 66, -124, -6, 81, 66, -104, -6, -85, 66, 112, -95, 68, 66, -109, 21, -42, 66, -81, 74, 80, 66, -94, -107, -2, 66, -120, -122, 47, 66, -122, -16, 27, 66, 108, 104, 82, 66, 125, -98, 81, 66, -102, 40, -19, 66, -100, 34, 47, 66, -98, 111, -82, 66, -114, 86, 14, 66, -71, -81, 52, 66, -110, 22, -58, 66, -108, -105, -53, 66, 89, -34, 55, 66, -76, -30, -114, 66, -119, -11, -60, 66, -125, -102, -30, 66, -106, 8, 66, 66, -109, 13, -86, 66, 100, -106, 44, 66, 100, 112, -80, 66, -82, -29, 47, 66, 113, -115, -118, 66, 112, 74, 1, 66, -116, 126, 84, 66, -118, -49, 122, 66, -110, -83, 78, 66, -79, 63, -57, 66, -103, 29, -8, 66, 92, -82, 31, 66, -84, -60, -40, 66, 94, 32, -16, 66, -120, -17, 54, 66, -76, -111, 7, 66, -80, 103, -127, 66, -110, 115, 72, 66, -91, -122, 60, 66, -115, -116, -60, 66, -103, -124, -123, 66, 99, -30, -20, 66, 70, -102, -26, 66, -106, -125, -102, 66, -106, -59, -119, 66, -92, -109, -122, 66, 125, -10, -52, 66, -125, -54, 84, 66, -120, 13, 78, 66, 118, -93, -67, 66, -68, -91, 50, 66, -125, 62, 81, 66, 81, -96, 13, 66, -102, 42, -101, 66, -69, -24, -39, 66, 105, -78, -98, 66, -115, 99, -92, 66, 121, 75, -68, 66, 106, -19, 36, 66, -81, -102, 41, 66, -97, -31, -6, 66, -117, 63, -90, 66, -87, 52, 64, 66, -67, -26, 123, 66, -113, -74, 105, 66, -83, -80, 115, 66, -91, -50, 83, 66, -114, 86, -123, 66, -122, -35, -14, 66, -112, 34, 85, 66, -120, -9, 66, 66, 126, 93, 53, 66, 124, 39, 45, 0, 0, 0, 0, 0, 0, 0, 0 ], "precision": "FLOAT_32", "root": 0, "canonicalAndNotALeaf": true, "size": 253, "leftIndex": [ -1, 1, 255, 1119207941, 640839029, 1155884080, 626391752, 643515029, 753398657, 760423210, 583460159, 970704040, 1016971657, 970736855, 1025956570, 973356061, 395 ], "rightIndex": [ -1, 1, 255, 1119195062, 1031467838, 1157478377, 640189574, 767675527, 638546156, 1160598265, 583263305, 984671869, 758122793, 581748520, 984523163, 581151145, 365 ], "nodeFreeIndexes": [], "nodeFreeIndexPointer": 1, "leafFreeIndexes": [], "leafFreeIndexPointer": 1, "partialTreeStateEnabled": true }, "boundingBoxCacheFraction": 0.0, "partialTreeState": true, "seed": -878626023249091604, "id": 0, "dimensions": 32, "staticSeed": 0, "weight": 0.0, "hasAuxiliaryData": false }, { "version": "2.0", "root": 0, "maxSize": 256, "outputAfter": 32, "storeSequenceIndexesEnabled": false, "centerOfMassEnabled": false, "nodeStoreState": { "version": "2.0", "capacity": 255, "compressed": true, "cutDimension": [ 0, 31, 255, 920336034, 1056012206, 1010822202, 346413815, 173243682, 925326126, 873813705, 652821547, 1042528895, 919783727, 368819802, 635762943, 173315539, 75338801, 1063726397, 346987043, 221824105, 518752847, 773672570, 596716713, 364584403, 647849797, 908967589, 112458541, 85831497, 445881671, 622167083, 913803195, 532380410, 628705195, 747981359, 804882686, 508992891, 801064179, 367967019, 590850150, 376736057, 624530799, 722766457, 393281118, 73266270, 749844714, 627 ], "cutValueData": [ 66, -66, -16, 34, 66, -101, -37, -70, 66, -95, -60, 49, 66, -124, -128, -118, 66, -58, 103, -102, 66, -128, 78, -119, 66, -66, -87, -55, 66, -93, 116, 6, 66, -65, -23, 102, 66, 73, 88, -52, 66, -124, -60, -6, 66, -98, 22, -111, 66, -74, 83, 91, 66, -80, 71, -32, 66, 118, 103, -24, 66, -89, 3, 48, 66, 116, -85, 10, 66, -103, 53, -90, 66, -69, 117, 88, 66, -69, -41, 8, 66, 115, 4, -44, 66, 123, 38, 90, 66, -76, -62, 7, 66, -98, -38, 9, 66, -112, 4, -8, 66, -121, -27, 85, 66, -87, -101, -81, 66, 111, -53, 52, 66, -107, 88, 77, 66, -81, -82, -96, 66, -87, 111, 43, 66, -101, -82, -122, 66, 108, 112, 86, 66, -99, 55, -17, 66, -125, 21, -77, 66, -91, -105, 65, 66, -122, -49, 25, 66, -128, -34, 89, 66, 114, 64, -43, 66, -110, -85, 88, 66, 122, 120, 121, 66, -60, 82, 125, 66, -111, -56, -87, 66, 123, 55, 16, 66, 125, -24, 82, 66, 115, -93, -67, 66, -88, 15, -120, 66, -59, -128, 81, 66, 81, 12, 88, 66, -117, 29, -110, 66, 91, 74, 105, 66, -102, -26, -105, 66, -95, -40, 63, 66, -104, -94, 61, 66, -84, 22, -67, 66, -67, -52, -43, 66, 113, 50, -76, 66, -124, 59, -59, 66, -110, 28, -74, 66, -117, 52, -46, 66, -80, 88, -77, 66, -69, 103, 4, 66, -90, -44, -18, 66, 116, -39, -83, 66, -119, -29, -28, 66, 93, -17, 64, 66, -80, -94, -71, 66, -72, 45, -81, 66, 126, -94, -90, 66, -99, -34, -115, 66, -81, -88, -92, 66, -79, 27, -17, 66, 89, 113, -51, 66, -122, -116, -12, 66, -119, -36, -87, 66, -94, 54, -7, 66, -88, 22, 33, 66, 108, -80, 2, 66, 88, 59, 47, 66, 98, 98, -34, 66, -120, 68, -106, 66, 121, 5, 81, 66, -100, -67, -25, 66, 77, 114, -35, 66, -77, 35, 108, 66, -89, -2, -28, 66, -116, -82, 25, 66, 85, 18, -11, 66, 92, -117, -92, 66, -73, -55, 14, 66, -97, -60, 113, 66, -112, -47, 63, 66, -105, 122, 100, 66, -126, -39, -47, 66, -64, -24, 4, 66, -100, -72, 97, 66, 119, -115, 37, 66, -99, -57, -124, 66, -104, -62, -63, 66, -74, 49, 113, 66, -96, -40, 102, 66, -89, 18, 28, 66, -92, 84, 22, 66, -97, 119, -19, 66, -109, -106, 121, 66, -104, 79, 99, 66, 86, 42, -17, 66, -125, -10, -31, 66, -127, -70, 31, 66, 106, -80, -79, 66, -119, 32, 52, 66, 89, 93, -89, 66, 93, 56, 1, 66, 88, 123, 56, 66, -111, -95, -101, 66, -119, 41, 118, 66, 115, -14, 2, 66, 110, 34, 117, 66, -116, 110, 32, 66, -122, -114, 123, 66, -116, 77, 19, 66, -117, -52, 41, 66, 85, -98, -48, 66, 93, -69, 69, 66, 123, -27, 31, 66, -78, -104, 43, 66, 104, -1, -118, 66, -84, -37, 95, 66, -104, -92, 54, 66, -103, 116, -66, 66, -97, 111, -112, 66, 104, 65, 37, 66, -70, 23, 88, 66, -112, -8, -12, 66, -107, -50, -27, 66, 127, -31, -110, 66, -128, -109, -1, 66, -96, -18, -110, 66, -87, 31, 27, 66, -88, -103, 125, 66, 99, -52, -97, 66, -71, 117, -6, 66, -117, -50, 17, 66, -97, 28, -116, 66, -127, -48, -38, 66, -81, 93, -87, 66, -121, -55, 59, 66, -108, -30, -17, 66, 85, 12, -19, 66, 74, -74, 22, 66, 85, 11, 105, 66, -96, -106, 33, 66, -119, -52, -57, 66, 115, -16, -3, 66, -116, 46, 80, 66, -88, 55, 112, 66, 116, 8, 101, 66, -88, 46, 32, 66, 97, 103, 9, 66, -127, 34, 72, 66, -94, -93, 55, 66, -84, -89, 82, 66, -92, 7, 4, 66, 127, -4, 36, 66, -77, -7, -1, 66, -78, 123, 5, 66, -120, 50, 2, 66, -98, -92, 66, 66, -96, -99, -67, 66, -106, 59, 104, 66, -97, 16, -77, 66, -72, -25, -97, 66, -118, 46, -90, 66, -77, -64, -55, 66, -84, 20, -108, 66, -99, -37, -102, 66, -111, -100, -37, 66, -111, 79, 40, 66, -88, -70, -5, 66, -77, 13, -100, 66, -106, 77, 65, 66, -85, -3, 57, 66, 99, -127, 12, 66, -89, 44, 42, 66, -79, -22, 107, 66, -96, -54, 3, 66, -80, -61, 100, 66, -128, 30, -77, 66, -125, -80, 56, 66, 122, 26, 51, 66, 74, -72, 45, 66, 80, 66, 46, 66, -120, -24, 12, 66, -88, 61, -61, 66, -102, -1, -24, 66, -91, 28, -70, 66, -87, -50, -23, 66, -123, 93, 56, 66, -128, -64, -96, 66, 124, -13, 21, 66, -111, -32, -68, 66, 121, -73, -6, 66, -72, 39, -98, 66, -118, -3, -128, 66, -104, -7, 65, 66, -76, 58, -123, 66, -91, -103, -30, 66, -125, -117, 35, 66, -75, -95, 39, 66, -72, -29, -67, 66, -124, 74, -52, 66, -104, 39, -37, 66, 104, -35, 102, 66, -91, 118, 56, 66, -87, 125, 64, 66, -114, 93, 78, 66, -114, 28, 20, 66, -61, -101, 66, 66, -100, 121, 69, 66, -66, 51, -97, 66, -125, 53, 98, 66, 103, 74, -82, 66, -81, -94, -108, 66, -119, -14, 79, 66, -121, -50, -126, 66, -115, -75, -84, 66, 99, -36, 58, 66, -117, 59, 26, 66, -117, 87, 26, 66, -82, -16, -95, 66, -77, 24, -96, 66, -117, -62, 45, 66, -103, -40, -74, 66, -85, 59, 37, 66, 96, -66, 70, 66, -73, -117, -93, 66, -69, 0, 43, 66, 126, 28, -97, 66, -114, 66, -38, 66, -112, 118, 99, 66, 78, -114, -3, 66, -82, 40, 18, 66, 113, 43, 22, 66, -98, 40, -70, 66, -96, 117, -77, 66, -101, -16, -76, 66, -92, 29, 19, 66, -117, 81, 106, 66, 115, -89, -32, 66, -103, -127, 52, 66, -106, -127, -13, 66, -74, -1, 62, 66, 88, -97, -103, 66, -120, 122, -33, 0, 0, 0, 0 ], "precision": "FLOAT_32", "root": 0, "canonicalAndNotALeaf": true, "size": 254, "leftIndex": [ -1, 1, 255, 1162241783, 987870086, 772537813, 1162057343, 1155094576, 712399181, 1026721133, 1119192844, 975639533, 970736047, 582734047, 643861210, 595482152, 1093 ], "rightIndex": [ -1, 1, 255, 1161486458, 731026618, 975528818, 1114234865, 772629190, 755679911, 629559934, 983689973, 586447357, 1104305696, 581310070, 596013277, 601866733, 1102 ], "nodeFreeIndexes": [], "nodeFreeIndexPointer": 0, "leafFreeIndexes": [], "leafFreeIndexPointer": 0, "partialTreeStateEnabled": true }, "boundingBoxCacheFraction": 0.0, "partialTreeState": true, "seed": -7506740242986070872, "id": 0, "dimensions": 32, "staticSeed": 0, "weight": 0.0, "hasAuxiliaryData": false }, { "version": "2.0", "root": 0, "maxSize": 256, "outputAfter": 32, "storeSequenceIndexesEnabled": false, "centerOfMassEnabled": false, "nodeStoreState": { "version": "2.0", "capacity": 255, "compressed": true, "cutDimension": [ 0, 31, 255, 437434827, 233024426, 769601339, 321501377, 526254065, 69943122, 360514594, 190753338, 1026539113, 758482278, 331312977, 52894174, 229180501, 869629874, 872191853, 710778574, 737776949, 455964503, 639308843, 974457843, 606307926, 903319223, 938782053, 380155693, 104528113, 804996289, 884677314, 204516543, 311766229, 385443951, 441530611, 117006069, 463570654, 899931313, 476007418, 670767710, 72451166, 925853661, 51723313, 500267607, 376482798, 1013050623, 859 ], "cutValueData": [ 66, 85, 7, -128, 66, -65, 41, -73, 66, -122, 112, 47, 66, -74, 36, 64, 66, -84, 77, 15, 66, -65, -71, -6, 66, -99, -112, 65, 66, 113, -44, -1, 66, -110, -99, -125, 66, 85, -42, 37, 66, -127, 37, -41, 66, 97, -115, 83, 66, 112, -50, -82, 66, -82, -84, -5, 66, -123, 117, 107, 66, -62, 69, -82, 66, -81, -71, 10, 66, 124, 63, -84, 66, -118, -39, 57, 66, -119, -109, 89, 66, -97, 86, 99, 66, -95, 58, -14, 66, -118, -91, 72, 66, -115, -61, 41, 66, -117, -32, -7, 66, -80, 121, 12, 66, -87, -109, 16, 66, -82, 40, -12, 66, 119, 85, -120, 66, -128, 82, 17, 66, -117, -101, -117, 66, 79, 32, 91, 66, -76, -128, -109, 66, -86, 123, 32, 66, 119, -11, -102, 66, -95, -113, -128, 66, 73, 87, 21, 66, -125, 46, -18, 66, -73, -102, -32, 66, -76, 70, -79, 66, 114, -88, -101, 66, -69, -50, -65, 66, -80, 124, 14, 66, -118, -31, 67, 66, -72, 5, 87, 66, -128, -1, 75, 66, -97, 115, -12, 66, -96, -20, -12, 66, 108, -65, -9, 66, -125, 42, 68, 66, -125, 69, -113, 66, -99, -10, -3, 66, -111, 24, -1, 66, -84, -29, 7, 66, 112, -68, 96, 66, -124, 49, 121, 66, -103, 29, 7, 66, 97, 106, 9, 66, -83, -33, -92, 66, -101, 121, 98, 66, -93, -37, 37, 66, -73, 65, -128, 66, -90, 20, -98, 66, 98, 11, -11, 66, -88, -84, -59, 66, -105, -22, 23, 66, 79, -10, 46, 66, 122, -122, 20, 66, 113, -4, -53, 66, 86, 70, -37, 66, -86, -44, 16, 66, 126, -123, 111, 66, 89, 12, 111, 66, 120, -119, -70, 66, -97, -58, 29, 66, 125, -26, 115, 66, -97, 114, 106, 66, -82, -29, -8, 66, -102, 10, -26, 66, 75, 69, -119, 66, -120, 43, -106, 66, -106, 79, 58, 66, 109, -79, -119, 66, 114, -70, -79, 66, -75, -66, -120, 66, -118, 37, 13, 66, -69, -8, 118, 66, 123, 55, 28, 66, -99, 82, -55, 66, -115, 110, 22, 66, -114, 120, 107, 66, -123, -104, 90, 66, -128, 122, 63, 66, 107, -116, 45, 66, -122, -75, -8, 66, -104, 100, -34, 66, -113, 28, -78, 66, -91, 56, -39, 66, -116, -4, 122, 66, -90, -22, 104, 66, -109, 54, -49, 66, 98, 81, -43, 66, 115, -33, 45, 66, -66, 77, 1, 66, -76, 33, 91, 66, -91, -86, 113, 66, -68, -60, 99, 66, 98, 44, 76, 66, -68, -47, 55, 66, -99, -107, -80, 66, 78, -117, 66, 66, 83, -85, 68, 66, 122, -56, -100, 66, 114, -28, -80, 66, -84, 116, -113, 66, 119, 27, 89, 66, -101, -2, -76, 66, -73, -34, -43, 66, -127, -6, 109, 66, 107, -12, -50, 66, -71, -94, -50, 66, -82, 88, -18, 66, -107, -51, 110, 66, 85, 98, 120, 66, 92, 49, -115, 66, -82, 77, -39, 66, -82, -6, -94, 66, -109, 69, 7, 66, -121, -104, 27, 66, 93, 27, 99, 66, -67, -101, -53, 66, -128, -70, 30, 66, 122, -53, -86, 66, -82, 83, 81, 66, -128, 112, -114, 66, -109, -47, 10, 66, 93, 65, -117, 66, -79, 4, -70, 66, -91, 93, 91, 66, -126, -31, -109, 66, -84, 43, 104, 66, 102, -13, 98, 66, -91, -123, 62, 66, -125, 57, 43, 66, -67, -25, 82, 66, -77, 16, -16, 66, 87, 10, 33, 66, -98, -76, 91, 66, -86, 120, -122, 66, -128, -124, -96, 66, -120, 69, -125, 66, -81, 121, -41, 66, 109, 99, 40, 66, -99, 87, 98, 66, -114, 67, -15, 66, -125, 108, 63, 66, -117, 108, -30, 66, -110, 53, -121, 66, -97, -34, 59, 66, 122, 12, 86, 66, -86, -63, 53, 66, -125, -76, -96, 66, -121, -124, 62, 66, -61, -11, -86, 66, -87, -43, -62, 66, -113, 72, 64, 66, -80, -48, 55, 66, -106, 122, -31, 66, -106, -37, -57, 66, -125, 33, -11, 66, -117, 100, -49, 66, -65, -65, 20, 66, -79, -3, 70, 66, -94, 11, 2, 66, -89, -77, -93, 66, -104, 45, -43, 66, -119, -70, 33, 66, -87, -69, -111, 66, -115, -41, 36, 66, -127, -100, -88, 66, -88, 109, -3, 66, -120, 0, -61, 66, -80, 118, -67, 66, -86, -121, 15, 66, -86, 61, 91, 66, -115, -118, 90, 66, -99, 45, -91, 66, -74, -103, 81, 66, -115, -128, -112, 66, 115, -10, 89, 66, -96, 100, -52, 66, -120, -36, -92, 66, -66, 6, 50, 66, -106, 45, 102, 66, -88, -97, 55, 66, -107, -69, 73, 66, -84, 68, 100, 66, -85, -13, 73, 66, -105, 104, -29, 66, -97, 71, -59, 66, -102, 100, -91, 66, -104, -15, 86, 66, -94, 33, 37, 66, -66, -24, 7, 66, -99, -119, 95, 66, -121, 81, -62, 66, 107, -88, 68, 66, 125, -78, -122, 66, -88, -21, -48, 66, -75, 38, 91, 66, -67, -109, -104, 66, 88, 61, -68, 66, -114, 55, -49, 66, 98, -50, -62, 66, 125, 21, 12, 66, -100, -5, -110, 66, 71, 110, -51, 66, 109, 39, -48, 66, 73, 11, 74, 66, -118, -42, -58, 66, -125, -43, 47, 66, 106, -5, 77, 66, -76, -98, -73, 66, 126, -18, -31, 66, -112, 55, -15, 66, -105, -36, 26, 66, -76, -126, -8, 66, -93, 9, 124, 66, 88, 18, -10, 66, -98, 56, -84, 66, -114, 94, -7, 66, -82, -124, 60, 66, -75, 104, 2, 66, -72, -69, 61, 66, -94, 51, 89, 66, -107, 51, -70, 66, -98, -51, -19, 66, -114, -45, -96, 66, -105, -105, -2, 66, -92, -97, 55, 66, -104, -5, 0, 66, -99, 119, 106, 66, -92, -104, -80, 66, -107, 31, 88, 66, -114, -82, -108, 66, -79, -12, -87, 66, 117, -31, 2, 66, -93, -119, -67, 66, -123, 37, -32, 66, -92, 1, -46, 66, -82, 102, 67, 66, -71, 31, 17, 66, -76, 125, -81, 66, 126, -44, 28, 0, 0, 0, 0 ], "precision": "FLOAT_32", "root": 0, "canonicalAndNotALeaf": true, "size": 254, "leftIndex": [ -1, 1, 255, 1162261466, 583338509, 1160666783, 715296712, 755531108, 1030736492, 1011775184, 1031438498, 755621260, 1141003547, 985271819, 725152217, 629676571, 1093 ], "rightIndex": [ -1, 1, 255, 760491311, 1119028850, 1145767031, 600972007, 731786966, 1026478403, 581327819, 768259210, 1028092378, 1145549536, 729461849, 581133973, 597842330, 1123 ], "nodeFreeIndexes": [], "nodeFreeIndexPointer": 0, "leafFreeIndexes": [], "leafFreeIndexPointer": 0, "partialTreeStateEnabled": true }, "boundingBoxCacheFraction": 0.0, "partialTreeState": true, "seed": -3745362813213582331, "id": 0, "dimensions": 32, "staticSeed": 0, "weight": 0.0, "hasAuxiliaryData": false }, { "version": "2.0", "root": 0, "maxSize": 256, "outputAfter": 32, "storeSequenceIndexesEnabled": false, "centerOfMassEnabled": false, "nodeStoreState": { "version": "2.0", "capacity": 255, "compressed": true, "cutDimension": [ 0, 31, 255, 1071894349, 262392401, 257511083, 98391255, 91742062, 850185766, 995206250, 984824490, 511667011, 870751138, 335264801, 124823161, 343369397, 442419129, 623434923, 741997686, 708038333, 227662061, 44246255, 402625571, 223692217, 225505141, 80866255, 914056386, 120429287, 1033366499, 190709614, 733935805, 332623726, 1003992757, 1042277686, 1001371058, 68803790, 384415567, 60989145, 774999078, 169796962, 224634973, 641390009, 844876479, 1004906978, 668584821, 847 ], "cutValueData": [ 66, -125, 29, -58, 66, 110, -50, -127, 66, -127, -5, -3, 66, -114, 121, 28, 66, -71, 9, 36, 66, 123, -110, -87, 66, -123, 119, 33, 66, -82, -98, 73, 66, 109, 84, 18, 66, -89, 111, 99, 66, -104, -33, -77, 66, 127, -46, 103, 66, -115, -93, 6, 66, -108, 98, -17, 66, -73, 105, -12, 66, 119, -13, -123, 66, -90, -122, -107, 66, -105, 47, -82, 66, 108, 18, 116, 66, -95, 74, -48, 66, -127, 22, -100, 66, 119, -24, 61, 66, 84, -120, -73, 66, -99, 46, -49, 66, -97, 113, -17, 66, 113, -68, 48, 66, -81, 90, 88, 66, 109, -26, 108, 66, -85, -82, 32, 66, -123, -16, 85, 66, -118, -83, 99, 66, 113, 48, 49, 66, -99, 104, 5, 66, -74, 33, -50, 66, -110, 84, 22, 66, -110, 104, 7, 66, -88, -38, -40, 66, -104, 30, -101, 66, -103, 125, -76, 66, -128, 85, -69, 66, -89, 59, -109, 66, 95, 13, -29, 66, -110, 60, -24, 66, -79, 60, -112, 66, -94, 80, 127, 66, -74, 109, 26, 66, -85, 122, 119, 66, -90, -101, -52, 66, 73, -87, -118, 66, -63, 6, -74, 66, -77, -46, -105, 66, -123, -92, -54, 66, 123, 39, 122, 66, 97, -110, -50, 66, -104, 30, -2, 66, 110, 19, 121, 66, -101, -87, 48, 66, 127, -25, 22, 66, -99, 84, 26, 66, -109, -81, 68, 66, -111, 51, 122, 66, -74, -55, -57, 66, 123, 48, -111, 66, -119, 27, 48, 66, -68, -16, 122, 66, -107, -16, -61, 66, -99, 35, 54, 66, 69, -68, 116, 66, -101, -101, 46, 66, -106, 87, -86, 66, -122, -95, -78, 66, -108, -77, 95, 66, -106, 13, -99, 66, 119, 69, -52, 66, -95, -80, -19, 66, -86, 4, -61, 66, -120, 44, 109, 66, -82, -53, 38, 66, -88, 95, 94, 66, 124, -13, 97, 66, -64, -45, 71, 66, -90, 50, -98, 66, 97, -13, 108, 66, 85, -87, -25, 66, -104, -24, 9, 66, -69, -39, -30, 66, -83, 34, -31, 66, 91, 119, 54, 66, 111, 47, 43, 66, -120, -48, 89, 66, -69, -105, 23, 66, 117, -36, 21, 66, -120, -74, 5, 66, -124, 38, 100, 66, 120, 37, -125, 66, -100, 97, 35, 66, -76, 55, 6, 66, 116, -76, 75, 66, -118, 100, 75, 66, 73, 29, -86, 66, 106, -102, 73, 66, -98, 117, 4, 66, -79, 18, 57, 66, 116, 100, 12, 66, 113, -12, -11, 66, -113, -75, 123, 66, -123, 58, -82, 66, -102, 4, -98, 66, -105, 68, 40, 66, 125, -7, 40, 66, -69, -70, -18, 66, 101, -88, 29, 66, 118, 76, -23, 66, 99, 24, -84, 66, -70, -34, 72, 66, -114, -107, -113, 66, 99, 119, -38, 66, -96, 108, 100, 66, 112, -85, 23, 66, -100, 5, 108, 66, 72, -121, 98, 66, 103, -127, 112, 66, 79, 70, -14, 66, -65, -80, -4, 66, -100, -76, 54, 66, -88, -85, -108, 66, -106, -9, -72, 66, -75, 56, -78, 66, -111, -111, 20, 66, -98, 86, 81, 66, -104, -64, -49, 66, -99, 72, -53, 66, -121, 82, 79, 66, -106, 82, -124, 66, -79, -95, -7, 66, -104, -82, -61, 66, -71, 32, -52, 66, -69, -12, -46, 66, -89, -85, 9, 66, 84, -78, 110, 66, -111, 109, 40, 66, -95, 127, -64, 66, 84, -43, 81, 66, 119, 103, 38, 66, -114, 36, 96, 66, 126, -103, -34, 66, -117, -118, -99, 66, -93, 77, -36, 66, -103, 75, -114, 66, -104, 25, 66, 66, -69, -52, 61, 66, 96, 97, 12, 66, -76, -89, 17, 66, -90, 20, -12, 66, -107, 110, 102, 66, -88, -110, -90, 66, -95, 30, -20, 66, -106, 16, 105, 66, -75, 100, 69, 66, 114, 31, -68, 66, -80, -24, -46, 66, -93, -113, 116, 66, -102, 104, 54, 66, 94, -116, -81, 66, -107, 86, 62, 66, 87, 110, -96, 66, 115, 94, -60, 66, -79, 100, 89, 66, -81, -88, 27, 66, -122, -6, -101, 66, 120, 63, 60, 66, -95, 53, 125, 66, -107, -82, 101, 66, -97, 52, -73, 66, -88, -62, -101, 66, -61, -11, 102, 66, -72, -15, -38, 66, -96, 64, -31, 66, 121, -53, -66, 66, 123, 100, -90, 66, 127, 106, 1, 66, -110, 102, 72, 66, -98, 58, -104, 66, -82, -103, -51, 66, -84, 28, -64, 66, -86, -37, 91, 66, -109, 43, 113, 66, -93, 94, 11, 66, -96, -36, 61, 66, -114, 16, 106, 66, -85, 104, -40, 66, -105, 119, 97, 66, -93, 85, -91, 66, -68, 0, -30, 66, -83, 127, -96, 66, -93, 66, -112, 66, -101, -38, -81, 66, 121, 56, 52, 66, -125, 98, -118, 66, 126, 88, 72, 66, 89, 114, -88, 66, -74, 78, 60, 66, -126, -52, -22, 66, -112, 22, -32, 66, -89, 46, -73, 66, -93, 91, 125, 66, 120, -56, -92, 66, -87, 7, 77, 66, -64, 78, -4, 66, -126, -66, 90, 66, -84, 71, 3, 66, -128, 110, 98, 66, -122, 83, -82, 66, -111, 11, 87, 66, 86, -14, 35, 66, 116, -70, -70, 66, 99, -39, -80, 66, -119, 101, -22, 66, 115, 19, -63, 66, -113, 70, -107, 66, -95, -68, 14, 66, -81, 71, 30, 66, -80, -28, -60, 66, 105, -91, -127, 66, -111, -52, 91, 66, -123, 119, 41, 66, -102, -104, 34, 66, -95, 80, 61, 66, -124, 99, 62, 66, -73, 106, 30, 66, 105, 112, -57, 66, 109, 50, -120, 66, -71, -6, -15, 66, 110, 98, 52, 66, 120, -12, -37, 66, -57, -33, -68, 66, -69, 86, 46, 66, 96, 58, -19, 66, -76, 126, -21, 66, -73, 125, -63, 66, -79, -85, 53, 66, -72, 58, 77, 66, -106, 49, 121, 66, -125, 61, -59, 66, 122, -121, -65, 66, -110, -99, 45, 66, -115, 92, 56, 66, -116, 109, -37, 66, -121, -107, -78, 66, -97, -39, -38, 66, -107, 11, -41, 66, -108, -54, -41, 66, 119, 51, 56, 66, -93, 87, -87, 0, 0, 0, 0 ], "precision": "FLOAT_32", "root": 0, "canonicalAndNotALeaf": true, "size": 254, "leftIndex": [ -1, 1, 255, 1162254905, 1160126198, 1146318205, 768218714, 970323758, 1099876927, 643867019, 600501721, 774110435, 588217703, 1112592472, 638712340, 715239841, 1336 ], "rightIndex": [ -1, 1, 255, 1162259279, 731733019, 1141513144, 774636602, 984674554, 1100001829, 600800612, 595561288, 731085628, 968735182, 638605348, 1026153239, 1016558170, 1123 ], "nodeFreeIndexes": [], "nodeFreeIndexPointer": 0, "leafFreeIndexes": [], "leafFreeIndexPointer": 0, "partialTreeStateEnabled": true }, "boundingBoxCacheFraction": 0.0, "partialTreeState": true, "seed": -5933807794767235558, "id": 0, "dimensions": 32, "staticSeed": 0, "weight": 0.0, "hasAuxiliaryData": false }, { "version": "2.0", "root": 0, "maxSize": 256, "outputAfter": 32, "storeSequenceIndexesEnabled": false, "centerOfMassEnabled": false, "nodeStoreState": { "version": "2.0", "capacity": 255, "compressed": true, "cutDimension": [ 0, 31, 255, 1060563679, 69190726, 718516189, 577461197, 128264663, 240233213, 731333706, 439483711, 892984650, 863421774, 715044269, 915485741, 341097923, 527756130, 917234755, 917813929, 388605485, 1050916429, 99063898, 661487011, 226399306, 530525987, 187151915, 510891610, 171042099, 739313630, 731102061, 1019020399, 402126665, 876427621, 724770639, 514530557, 790624125, 597932745, 61642213, 393570995, 584509945, 856739626, 624420981, 933801047, 756661035, 342556667, 1 ], "cutValueData": [ 66, -114, -102, 21, 66, -83, -108, -29, 66, 73, 111, 122, 66, -59, 25, 14, 66, -86, 1, 97, 66, -82, 30, -59, 66, -112, -48, -84, 66, -117, 120, 31, 66, -114, -27, -77, 66, 86, 59, 35, 66, -127, 26, -100, 66, -80, -11, -113, 66, -110, -17, -13, 66, -94, -8, 40, 66, -73, 5, -66, 66, 104, -44, -19, 66, -112, 3, 107, 66, -125, 120, 27, 66, -66, 112, 66, 66, -99, 106, 10, 66, -82, -112, -124, 66, -115, -88, -31, 66, 93, -65, 94, 66, -66, 85, 1, 66, 76, -82, -120, 66, -118, 124, -23, 66, 113, -57, 87, 66, -69, -76, -126, 66, 118, -105, 35, 66, 74, -35, -21, 66, -63, -95, 127, 66, -92, 84, -76, 66, -103, -110, -94, 66, 82, -23, 28, 66, -101, 118, -60, 66, -106, 96, -9, 66, -115, 92, 95, 66, 100, -29, 18, 66, 71, -3, 24, 66, -77, 76, -68, 66, -117, 60, 49, 66, 107, 73, 105, 66, 86, -2, -94, 66, -100, -102, -7, 66, 82, -33, 52, 66, -78, 123, -106, 66, 118, -20, 27, 66, -95, -84, 108, 66, -112, -23, -40, 66, 121, -98, 53, 66, -98, 106, 37, 66, 118, -104, 19, 66, -91, 101, 76, 66, -73, 127, -64, 66, -88, -24, -81, 66, -108, 67, 4, 66, -79, -16, -46, 66, -83, 30, -84, 66, 108, -41, 95, 66, -78, 38, 55, 66, -120, 49, 125, 66, -97, 53, 48, 66, -122, 62, 26, 66, 125, -49, 38, 66, 122, -24, -83, 66, -98, 1, -3, 66, -119, 74, -95, 66, -65, 88, -49, 66, 75, -117, 77, 66, -95, 98, -14, 66, -108, 0, -39, 66, -118, 87, 73, 66, 118, -71, 93, 66, 69, -51, 21, 66, -95, -47, -69, 66, -103, 108, 20, 66, -92, -120, -67, 66, -112, 121, 110, 66, 96, 120, 64, 66, 116, 121, -87, 66, -100, -27, -107, 66, -75, -72, -40, 66, -122, -30, 59, 66, -106, 100, 22, 66, -113, 116, -82, 66, -110, 69, -14, 66, -80, -11, 40, 66, -100, -35, -111, 66, -75, 52, 91, 66, -106, -60, 37, 66, 105, 49, 52, 66, -117, 16, -36, 66, -59, -100, -14, 66, -125, -115, -30, 66, -121, 111, -52, 66, -115, 90, 57, 66, -98, 72, -72, 66, 119, 98, 32, 66, 110, -105, 22, 66, -96, 98, 123, 66, -102, 116, 14, 66, 118, 100, -105, 66, -122, -26, 42, 66, -117, -74, 84, 66, -124, -32, -126, 66, -65, -95, -28, 66, -99, -71, 73, 66, 114, -124, 100, 66, -113, 69, 16, 66, -110, -70, 24, 66, -127, 89, 38, 66, -114, -2, 19, 66, 118, -39, 28, 66, -108, -18, 60, 66, 91, -68, -115, 66, -107, 48, -123, 66, -102, -111, 40, 66, -94, 112, -89, 66, -77, 21, 44, 66, -128, 115, -37, 66, -122, -45, 64, 66, -102, -56, -36, 66, -123, 20, 79, 66, -103, 76, -90, 66, -81, 75, -2, 66, 97, -115, 106, 66, -104, 80, 114, 66, -107, -86, 76, 66, -81, 112, -42, 66, -89, 80, -60, 66, -77, 63, -50, 66, 70, -106, -67, 66, -113, 12, -43, 66, -87, 16, 110, 66, 115, 60, -15, 66, -120, 78, 8, 66, 88, -121, 32, 66, -99, -58, -35, 66, -123, 62, 110, 66, 120, 71, -84, 66, -87, -45, 90, 66, 100, 14, 122, 66, -113, 121, -39, 66, -98, 93, 80, 66, -118, 70, -48, 66, -100, -73, -31, 66, 97, 1, 125, 66, -94, 31, 15, 66, -67, -98, -16, 66, -111, -15, 126, 66, -80, -52, 103, 66, 97, -86, 81, 66, -74, 22, -49, 66, -127, -28, 39, 66, -121, -92, 55, 66, -72, -2, 27, 66, -91, 96, -36, 66, -78, 50, 88, 66, -79, -34, -97, 66, -125, -49, 123, 66, -107, 20, 19, 66, 127, 34, -116, 66, 112, 85, 73, 66, -103, 36, -110, 66, -110, 57, 62, 66, -122, -92, -71, 66, -79, -75, 121, 66, -75, -73, 60, 66, 87, 60, 105, 66, -100, 46, 25, 66, 109, -117, -44, 66, -115, -105, 82, 66, 122, -112, 2, 66, 84, -111, -7, 66, 91, 14, 55, 66, -95, -108, -77, 66, 111, -89, 49, 66, -91, 34, 11, 66, -77, 57, 55, 66, -120, -31, 76, 66, 123, -27, -70, 66, -123, -38, -34, 66, -125, -12, -115, 66, -123, -14, 9, 66, -76, 75, 15, 66, -124, 50, 73, 66, 87, -83, -62, 66, -110, 55, 100, 66, 125, -84, 36, 66, -110, 48, -73, 66, 101, -33, 49, 66, 105, 28, 19, 66, -107, 100, 19, 66, -121, 55, -109, 66, -86, -115, 84, 66, -104, 67, 24, 66, 118, -3, 67, 66, -91, 73, 121, 66, -123, -13, 91, 66, -128, 77, 6, 66, 102, -51, -37, 66, -123, -98, -113, 66, 117, 68, -76, 66, -109, 19, -46, 66, -91, 80, -47, 66, 95, 42, 30, 66, 86, -35, 90, 66, 125, 93, 71, 66, -76, -51, 20, 66, -65, -36, -69, 66, -114, -1, 58, 66, 86, -24, -87, 66, -128, 100, -78, 66, -128, -104, 62, 66, -99, 76, 85, 66, -118, -89, 32, 66, -91, -44, -121, 66, -67, 20, -61, 66, -98, -92, 111, 66, -116, 115, -74, 66, -123, -97, 38, 66, 126, -99, -115, 66, -128, -77, -27, 66, 120, -73, 94, 66, -107, 80, -22, 66, -66, 34, 93, 66, -127, -78, 83, 66, 103, -4, -125, 66, 93, -15, -110, 66, -94, -43, -74, 66, -125, 89, 97, 66, -124, 26, -3, 66, 80, -64, -107, 66, 102, -108, 43, 66, -96, -115, -63, 66, -75, -85, 103, 66, 115, 39, -124, 66, 91, 89, -42, 66, -91, 50, -66, 66, -122, 43, 60, 66, -63, 88, -69, 66, -106, 108, 77, 66, -90, -63, 120, 66, -113, 116, 0, 66, 113, 66, 60, 66, -125, -55, -37, 66, -105, -128, 112, 66, 113, 52, 45, 66, -115, 114, 72, 66, 125, 29, -110, 66, -91, 61, 17, 66, -109, -127, -117, 66, -100, -111, 30, 0, 0, 0, 0, 0, 0, 0, 0 ], "precision": "FLOAT_32", "root": 0, "canonicalAndNotALeaf": true, "size": 253, "leftIndex": [ -1, 1, 255, 1119194819, 1160645003, 1162241755, 1118427389, 640740667, 969169022, 582754243, 588121196, 987860569, 582961333, 968638810, 624243065, 988276516, 394 ], "rightIndex": [ -1, 1, 255, 1157478227, 1160660555, 759938759, 968738200, 628989106, 990013019, 712070797, 588296401, 983668091, 729658975, 767675542, 1097927590, 597080605, 368 ], "nodeFreeIndexes": [], "nodeFreeIndexPointer": 1, "leafFreeIndexes": [], "leafFreeIndexPointer": 1, "partialTreeStateEnabled": true }, "boundingBoxCacheFraction": 0.0, "partialTreeState": true, "seed": -2736961492578362267, "id": 0, "dimensions": 32, "staticSeed": 0, "weight": 0.0, "hasAuxiliaryData": false }, { "version": "2.0", "root": 0, "maxSize": 256, "outputAfter": 32, "storeSequenceIndexesEnabled": false, "centerOfMassEnabled": false, "nodeStoreState": { "version": "2.0", "capacity": 255, "compressed": true, "cutDimension": [ 0, 31, 255, 1013443169, 921676590, 129582783, 245296757, 341366730, 753698021, 230382562, 353726331, 374681205, 526874929, 871585749, 1026469745, 786607786, 1009817027, 91003690, 979301591, 187745486, 439143994, 180000978, 749375469, 880502454, 359921235, 191974743, 253057958, 916515141, 746270301, 753583687, 984447703, 602649694, 880101359, 574072255, 765684939, 234039721, 586603589, 392416711, 668261841, 494078249, 719006946, 393916235, 110694101, 757009206, 61583357, 311 ], "cutValueData": [ 66, -89, 4, -101, 66, -112, 101, 72, 66, -73, 46, 28, 66, -118, 16, -79, 66, -121, -123, -7, 66, 108, 116, 25, 66, -99, -98, 65, 66, 113, 36, -93, 66, -108, 55, -4, 66, -93, 44, -62, 66, 124, 83, 126, 66, -96, 120, -69, 66, -122, 93, 36, 66, -86, 30, 13, 66, -93, 112, 77, 66, -113, 115, -45, 66, -121, -94, 50, 66, -97, -36, -88, 66, -124, 85, -83, 66, -71, -104, -14, 66, -122, 126, 38, 66, -121, 62, 117, 66, -112, 95, 8, 66, 120, 79, 107, 66, -112, 58, -119, 66, -82, -19, 80, 66, -119, 75, 102, 66, -126, -112, -40, 66, -127, 70, -19, 66, 115, -26, -7, 66, -116, 88, 40, 66, 97, 125, 58, 66, 99, 116, -122, 66, -111, 58, 81, 66, -74, 68, -26, 66, -99, -30, -68, 66, -86, 34, -53, 66, -115, 34, -35, 66, -107, 13, -50, 66, -123, 68, 13, 66, 115, -29, 86, 66, -77, -76, 78, 66, -89, -120, 9, 66, -95, 13, 102, 66, 127, 19, -14, 66, -124, -80, 99, 66, -68, 20, -56, 66, -70, 91, -114, 66, -80, -50, -76, 66, -104, 109, 99, 66, -113, -96, 66, 66, -104, 27, -74, 66, -94, 29, 13, 66, -90, -116, 51, 66, 87, -26, 92, 66, -102, 13, 2, 66, -59, -83, 10, 66, 81, 83, 60, 66, 100, -90, -102, 66, -86, 36, 63, 66, -73, 84, 78, 66, -82, -120, -22, 66, 84, 79, -61, 66, -84, -31, -49, 66, -95, 123, -41, 66, -87, -27, 68, 66, -88, -61, 122, 66, 104, 89, 118, 66, -117, -128, -93, 66, -79, 52, -51, 66, -73, 112, 38, 66, 93, 122, 77, 66, -111, 80, 103, 66, -99, -102, 80, 66, -121, 44, -11, 66, -104, 3, -100, 66, -90, -85, 123, 66, -124, -4, -15, 66, -68, -86, 24, 66, -87, 108, -31, 66, -106, 124, -61, 66, -85, -6, -78, 66, -72, -33, -89, 66, -86, -85, -75, 66, -120, -41, 76, 66, -124, -83, -79, 66, -89, -12, 108, 66, -67, -118, 123, 66, -122, 50, -96, 66, -96, -117, 83, 66, -113, 75, 123, 66, 115, -17, -61, 66, 116, 29, -85, 66, -98, -67, -124, 66, 115, -84, -12, 66, 94, 5, 85, 66, 116, -79, -34, 66, 102, 11, 27, 66, -118, 115, 2, 66, -120, -5, 17, 66, 82, -63, 59, 66, -78, -39, 89, 66, -107, -28, 60, 66, -127, -17, -16, 66, 116, 33, -47, 66, -100, -51, -104, 66, 107, -68, 125, 66, -114, 45, 21, 66, -71, 122, 1, 66, 118, -64, 16, 66, -69, -120, 47, 66, -127, 125, -25, 66, -96, -16, 26, 66, -61, 108, 113, 66, -58, -84, 13, 66, 101, 84, -9, 66, -126, -69, -78, 66, 68, -29, 25, 66, -74, 24, -90, 66, 88, -72, 48, 66, -102, 64, -8, 66, 96, 107, 105, 66, 76, -50, 75, 66, -104, -98, 109, 66, 103, -81, -34, 66, 76, -33, 85, 66, -123, -81, 66, 66, -70, 85, -19, 66, -73, 39, 87, 66, -77, -36, -91, 66, 100, 14, -5, 66, 111, 54, 30, 66, -94, -67, -105, 66, 119, -34, 18, 66, 94, 44, -53, 66, 88, 78, 110, 66, -94, 58, 96, 66, -72, 27, -111, 66, -112, 6, -69, 66, -111, -108, 16, 66, 95, 32, -56, 66, 114, -47, 115, 66, -121, -114, -89, 66, 102, -56, 119, 66, -93, 7, 98, 66, -94, -115, -119, 66, -84, -55, 47, 66, 83, -40, 87, 66, 80, -123, -37, 66, -72, 89, -25, 66, -83, 53, 54, 66, -101, 90, 3, 66, 116, 96, -69, 66, -82, 16, -120, 66, -93, -64, 110, 66, -122, 56, 85, 66, -96, 100, 98, 66, -78, 84, 102, 66, -68, -83, -73, 66, 93, -59, -99, 66, -95, 14, -44, 66, -112, 110, 78, 66, -119, -45, 0, 66, -94, -45, -96, 66, -119, -102, -113, 66, -94, -99, -10, 66, 86, -115, 115, 66, -79, -115, -128, 66, 96, 12, -51, 66, 112, 56, 13, 66, -99, 80, -125, 66, -109, 91, -48, 66, -78, 17, 25, 66, 109, -87, -20, 66, 91, -123, -128, 66, 85, -104, 125, 66, -92, -75, -67, 66, 72, -60, -7, 66, -91, -65, 57, 66, -98, 87, -54, 66, -118, 125, 15, 66, -102, 3, 81, 66, -86, 30, -34, 66, -89, 49, 35, 66, -71, 57, 28, 66, 127, 120, 121, 66, -85, 5, 43, 66, -100, 46, 72, 66, -87, 98, 49, 66, -86, 106, -4, 66, -99, 119, 114, 66, -108, -114, 66, 66, -127, -88, -27, 66, 78, -21, -90, 66, -84, 78, 106, 66, -77, -99, -5, 66, -93, -85, -25, 66, 124, -118, 126, 66, -128, -126, -122, 66, 121, 6, -60, 66, 72, 83, -68, 66, 116, 27, 69, 66, -74, 94, -128, 66, -79, -87, 114, 66, -96, 29, 112, 66, -85, 48, -62, 66, 86, 5, -122, 66, -109, 34, 45, 66, -105, 105, 127, 66, 121, -92, -106, 66, -125, 84, 123, 66, -128, 55, 87, 66, -120, -44, -72, 66, -105, -126, -21, 66, -97, -85, -108, 66, 118, 120, 92, 66, 102, 46, -66, 66, -68, 86, -108, 66, -123, -21, -82, 66, -62, -122, -84, 66, -126, 100, -50, 66, -79, -22, -117, 66, 100, 14, -60, 66, 86, -29, -32, 66, 104, 14, 31, 66, -96, 78, -105, 66, -122, -25, 29, 66, -95, 112, 89, 66, -99, 68, 48, 66, -122, 20, 74, 66, -97, 67, 75, 66, 89, -111, -36, 66, -122, -80, -114, 66, -99, 121, -101, 66, -61, -103, 30, 66, -67, -6, -81, 66, 110, -45, -29, 66, -116, 92, 10, 66, 75, -83, 102, 66, -117, 96, 121, 66, -111, 0, 59, 66, -108, 6, 106, 66, 84, 37, 100, 66, -101, -61, -10, 66, -125, 120, 96, 66, -112, 70, 85, 66, 90, 36, -41, 66, 123, 29, 29, 66, -122, -28, 35, 66, -108, -63, 86, 66, -105, -37, 15, 66, -93, 63, -47, 66, -107, -79, 93, 66, -104, 88, 29, 0, 0, 0, 0 ], "precision": "FLOAT_32", "root": 0, "canonicalAndNotALeaf": true, "size": 254, "leftIndex": [ -1, 1, 255, 1162261466, 1157419448, 1117082416, 725160833, 1097779625, 587573663, 983103602, 710823019, 753384229, 1116832748, 985045928, 595683841, 581153359, 1177 ], "rightIndex": [ -1, 1, 255, 1155707027, 1157417261, 755170369, 1160469332, 715080437, 625955849, 600466756, 970680173, 1145606612, 586117202, 597096914, 600816650, 968570995, 1094 ], "nodeFreeIndexes": [], "nodeFreeIndexPointer": 0, "leafFreeIndexes": [], "leafFreeIndexPointer": 0, "partialTreeStateEnabled": true }, "boundingBoxCacheFraction": 0.0, "partialTreeState": true, "seed": 139913034750054867, "id": 0, "dimensions": 32, "staticSeed": 0, "weight": 0.0, "hasAuxiliaryData": false }, { "version": "2.0", "root": 0, "maxSize": 256, "outputAfter": 32, "storeSequenceIndexesEnabled": false, "centerOfMassEnabled": false, "nodeStoreState": { "version": "2.0", "capacity": 255, "compressed": true, "cutDimension": [ 0, 31, 255, 173344421, 926922319, 125094975, 104849077, 996340926, 128308961, 716421494, 895929981, 330169982, 45303595, 854808011, 120186078, 1042148470, 1052286139, 1072392027, 212793033, 926587978, 936551517, 771080187, 922220089, 711932081, 337168875, 204823778, 626301163, 668526305, 631039174, 222092901, 1017769562, 366822986, 447699281, 221028266, 882048966, 780140150, 707091531, 658438330, 925759037, 840869161, 614251182, 502513462, 327059393, 1073313478, 354489394, 559 ], "cutValueData": [ 66, 99, -36, -127, 66, 81, 109, 108, 66, -106, -119, -66, 66, -124, 62, -90, 66, -66, -72, -62, 66, -128, -50, -52, 66, 110, 65, -25, 66, 85, -21, 76, 66, -110, -88, -65, 66, -97, -33, 99, 66, -102, 9, -78, 66, -106, -11, -93, 66, -75, 36, -85, 66, -125, 26, 30, 66, -90, 65, -17, 66, -101, -101, 23, 66, -115, -45, -97, 66, -121, 71, 96, 66, 127, -74, 124, 66, 101, -92, -36, 66, -110, -116, 122, 66, -67, 127, 57, 66, -85, 47, 35, 66, -124, 27, 37, 66, 102, -70, -73, 66, 72, 86, -98, 66, -102, 26, -128, 66, 83, -112, 22, 66, -126, -93, 45, 66, -104, 59, -104, 66, 104, -84, 113, 66, -110, -38, -81, 66, -104, -117, -40, 66, -123, -61, -128, 66, -108, -59, 66, 66, -99, -21, 125, 66, 84, 59, 85, 66, -78, -21, -47, 66, -109, -36, 93, 66, -112, -45, -19, 66, -73, -90, 106, 66, -99, 90, -63, 66, 126, -81, 57, 66, 110, -19, 39, 66, -98, -20, 40, 66, -84, 33, 13, 66, -123, -22, 30, 66, -108, -48, -20, 66, -68, -106, 41, 66, -114, 10, 118, 66, 125, 60, -101, 66, 97, -43, 25, 66, -125, 28, -33, 66, -87, 88, 51, 66, -127, -79, -38, 66, -86, 48, 6, 66, -98, 20, 59, 66, -64, 49, 72, 66, -104, -91, -93, 66, -89, -5, 74, 66, 86, -13, 18, 66, -121, 58, 99, 66, -94, -31, 105, 66, -79, -68, 49, 66, -92, -14, -81, 66, -97, -28, 65, 66, -123, 103, -66, 66, -102, 116, 23, 66, -71, -120, -66, 66, 69, 30, 78, 66, -93, -50, -124, 66, -98, 5, 7, 66, -70, 78, -24, 66, 113, 67, -46, 66, -89, -23, -32, 66, 121, 69, 16, 66, -117, -108, -42, 66, -64, -53, 12, 66, 117, 10, 53, 66, -82, 102, 47, 66, -96, 18, -45, 66, -108, -32, 54, 66, -126, -80, -31, 66, -93, 1, 90, 66, -103, 76, -107, 66, -106, 25, 119, 66, -125, -71, 95, 66, -62, 53, -29, 66, -98, -17, 0, 66, -119, 55, 97, 66, -116, 89, -124, 66, 77, -106, -67, 66, -114, -61, -23, 66, 79, 54, -48, 66, -82, 15, -123, 66, -104, 61, -74, 66, 98, 1, -22, 66, -93, -64, -33, 66, -102, 45, 47, 66, -119, -117, -12, 66, -76, 82, 26, 66, -78, 16, 110, 66, -94, 25, -6, 66, -96, 63, -32, 66, 109, 23, -105, 66, 83, 76, 31, 66, -69, -47, 55, 66, -110, 26, -90, 66, -104, 11, -54, 66, -80, 117, 123, 66, 118, 46, -112, 66, -124, 53, -21, 66, 96, 33, 50, 66, -91, 42, -27, 66, -90, -41, 59, 66, -107, 16, 85, 66, -74, -80, 111, 66, -108, 42, -88, 66, -64, -107, -82, 66, -89, 12, 28, 66, -69, 81, 90, 66, -109, 76, -102, 66, -75, 62, -59, 66, 110, 47, -59, 66, -76, -99, -86, 66, -101, 20, -98, 66, -114, -92, -73, 66, 105, -93, 6, 66, -106, -41, -84, 66, -68, -107, 98, 66, -65, -33, 15, 66, -67, 78, 16, 66, -96, 114, -12, 66, -84, 27, -115, 66, -115, 3, 115, 66, -105, 104, -1, 66, -87, 74, 30, 66, -87, -47, -33, 66, -124, 117, 113, 66, -99, -88, -32, 66, -119, -113, -95, 66, -93, -88, 25, 66, 120, 69, -40, 66, -125, 121, 8, 66, -91, 120, 18, 66, -93, -50, 108, 66, 124, -11, 52, 66, -97, -37, -115, 66, -101, -107, 109, 66, -122, -49, 114, 66, -75, 98, 50, 66, -105, 40, 18, 66, 106, -31, -115, 66, 81, 98, -52, 66, -128, -42, 123, 66, -79, -126, -16, 66, -96, 98, 51, 66, -123, -105, 7, 66, 86, -80, 30, 66, -95, -9, -97, 66, -82, 105, -101, 66, -125, -113, 46, 66, 108, 76, -61, 66, -97, -22, -21, 66, -62, -114, -113, 66, -117, -19, -6, 66, 104, 27, -116, 66, -113, 43, 64, 66, 116, 107, 15, 66, -94, 108, -110, 66, -59, -50, -107, 66, 84, 13, 86, 66, 80, -114, 5, 66, -107, 28, 101, 66, 96, 120, -27, 66, -94, -26, 23, 66, -68, -122, -93, 66, -83, -93, -117, 66, -86, 9, 61, 66, -82, -73, -20, 66, -73, 52, -29, 66, 119, 92, -3, 66, -124, -73, 29, 66, 105, 91, 88, 66, -69, 19, 88, 66, -93, 66, -43, 66, 104, -11, 29, 66, -78, -110, 115, 66, -85, 26, 104, 66, -86, -96, 84, 66, -115, 105, 116, 66, -61, 68, -22, 66, 102, 9, 123, 66, 86, 86, -73, 66, 121, -36, 85, 66, -101, 126, 51, 66, 127, -26, 16, 66, -83, -95, -123, 66, -91, -49, 80, 66, -101, -104, 7, 66, -109, -58, -37, 66, -99, -74, -58, 66, -86, 41, 75, 66, 93, 47, -33, 66, 126, -126, 96, 66, -78, -120, 57, 66, -111, -106, -81, 66, 113, 53, 87, 66, -83, -15, -87, 66, -121, -15, -11, 66, -122, 46, 66, 66, -120, -48, 72, 66, -107, -53, -23, 66, 115, 77, 24, 66, -112, -47, 105, 66, 125, -23, -56, 66, -103, -23, -92, 66, -106, -59, 126, 66, -92, 78, -12, 66, -106, 112, -96, 66, 117, -41, 33, 66, -128, -9, 4, 66, 87, -65, 70, 66, 71, 46, 7, 66, -92, 59, 105, 66, -98, -66, -104, 66, 75, 12, -77, 66, -124, 78, 23, 66, -90, -109, -54, 66, 106, -31, -12, 66, -97, 122, -79, 66, -99, -125, -77, 66, -110, -34, -123, 66, -87, 32, 49, 66, 120, -71, -77, 66, -126, 124, -18, 66, -95, 79, 104, 66, -103, 50, 88, 66, -119, -33, 18, 66, 114, -13, -120, 66, -104, -69, 105, 66, -81, -121, 58, 66, -91, 50, -88, 66, 116, -102, -103, 66, -107, 50, 69, 66, -94, 42, -57, 66, -110, -67, -27, 66, 98, 1, 122, 66, -115, 5, -4, 66, 111, 16, 83, 66, -96, -86, -95, 66, -107, 111, -81, 66, 107, -111, -55, 66, -68, -95, 55, 0, 0, 0, 0 ], "precision": "FLOAT_32", "root": 0, "canonicalAndNotALeaf": true, "size": 254, "leftIndex": [ -1, 1, 255, 774838787, 974123738, 726990791, 984753580, 1033101512, 768198292, 710333195, 1027541941, 970154305, 629494405, 970230928, 581724166, 582964438, 1201 ], "rightIndex": [ -1, 1, 255, 1032589862, 644106491, 774755684, 1142951710, 1155705935, 1159936414, 1099543865, 581190029, 630616823, 624356896, 582784870, 726805696, 595718023, 1102 ], "nodeFreeIndexes": [], "nodeFreeIndexPointer": 0, "leafFreeIndexes": [], "leafFreeIndexPointer": 0, "partialTreeStateEnabled": true }, "boundingBoxCacheFraction": 0.0, "partialTreeState": true, "seed": -950767441100490523, "id": 0, "dimensions": 32, "staticSeed": 0, "weight": 0.0, "hasAuxiliaryData": false } ], "executionContext": { "parallelExecutionEnabled": false, "threadPoolSize": 0 }, "saveTreeStateEnabled": true, "saveSamplerStateEnabled": true, "saveCoordinatorStateEnabled": true } ================================================ FILE: Java/core/src/test/resources/com/amazon/randomcutforest/state/state_2.json ================================================ { "version": "2.0", "totalUpdates": 505, "timeDecay": 1.0E-4, "numberOfTrees": 30, "sampleSize": 256, "shingleSize": 8, "dimensions": 32, "outputAfter": 32, "compressed": true, "partialTreeState": true, "boundingBoxCacheFraction": 0.0, "storeSequenceIndexesEnabled": false, "compact": true, "internalShinglingEnabled": false, "centerOfMassEnabled": false, "precision": "FLOAT_32", "pointStoreState": { "version": "2.0", "dimensions": 32, "capacity": 7681, "shingleSize": 8, "precision": "FLOAT_32", "startOfFreeSegment": 2048, "pointData": [ 0, 0, 0, 0, 66, -100, -103, -102, 66, -58, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, -126, 64, 0, 66, -66, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -99, 69, -47, 66, -58, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -119, 23, 70, 66, -82, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -123, 85, 85, 66, -62, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -117, -52, -51, 66, -70, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -104, 93, 23, 66, -66, 0, 0, 66, 104, 0, 0, 0, 0, 0, 0, 66, -102, -52, -51, 66, -64, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, -111, 28, 114, 66, -80, 0, 0, 66, -126, 0, 0, 0, 0, 0, 0, 66, -104, 113, -57, 66, -58, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -94, -52, -51, 66, -58, 0, 0, 66, 116, 0, 0, 0, 0, 0, 0, 66, -115, -114, 57, 66, -72, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -103, -103, -102, 66, -66, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -96, 102, 102, 66, -58, 0, 0, 66, 100, 0, 0, 0, 0, 0, 0, 66, -115, 69, -47, 66, -70, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, -111, 0, 0, 66, -62, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -107, -64, 0, 66, -70, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, -111, -52, -51, 66, -68, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -102, 51, 51, 66, -60, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -106, 102, 102, 66, -62, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -116, 113, -57, 66, -74, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -113, 0, 0, 66, -72, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -104, 102, 102, 66, -60, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -111, 0, 0, 66, -68, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -124, -103, -102, 66, -78, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -110, 0, 0, 66, -72, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -97, 69, -47, 66, -58, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, -106, 51, 51, 66, -82, 0, 0, 66, -120, 0, 0, 0, 0, 0, 0, 66, -99, 69, -47, 66, -62, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -108, 102, 102, 66, -62, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -88, 0, 0, 66, -62, 0, 0, 66, -122, 0, 0, 0, 0, 0, 0, 66, -101, -94, -23, 66, -56, 0, 0, 66, 100, 0, 0, 0, 0, 0, 0, 66, -111, 23, 70, 66, -70, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -109, -128, 0, 66, -58, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -111, -103, -102, 66, -64, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, -113, -114, 57, 66, -62, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -114, 113, -57, 66, -70, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -115, 23, 70, 66, -76, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -120, -128, 0, 66, -76, 0, 0, 66, 100, 0, 0, 0, 0, 0, 0, 66, -114, -29, -114, 66, -66, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -101, -128, 0, 66, -66, 0, 0, 66, 120, 0, 0, 0, 0, 0, 0, 66, -106, 113, -57, 66, -68, 0, 0, 66, 100, 0, 0, 0, 0, 0, 0, 66, -127, 102, 102, 66, -78, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -117, -94, -23, 66, -72, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, -102, 102, 102, 66, -64, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -101, -114, 57, 66, -64, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -94, -86, -85, 66, -58, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, -110, 0, 0, 66, -72, 0, 0, 66, 104, 0, 0, 0, 0, 0, 0, 66, -116, 113, -57, 66, -84, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, -117, -57, 28, 66, -82, 0, 0, 66, 92, 0, 0, 0, 0, 0, 0, 66, -113, 28, 114, 66, -64, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -96, 102, 102, 66, -60, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -122, 56, -28, 66, -62, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -104, -117, -93, 66, -70, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 67, -5, -26, 102, 69, -121, -72, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -119, 102, 102, 66, -76, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -103, -52, -51, 66, -60, 0, 0, 66, 100, 0, 0, 0, 0, 0, 0, 66, -93, -103, -102, 66, -62, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -118, -24, -70, 66, -58, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -127, -86, -85, 66, -64, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -97, 23, 70, 66, -62, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -93, 0, 0, 66, -64, 0, 0, 66, -118, 0, 0, 0, 0, 0, 0, 66, -104, -86, -85, 66, -58, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -106, -29, -114, 66, -58, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -99, -94, -23, 66, -60, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -124, -103, -102, 66, -80, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -106, -86, -85, 66, -58, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -105, -114, 57, 66, -60, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, -118, 113, -57, 66, -64, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -106, 46, -116, 66, -66, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -95, 0, 0, 66, -62, 0, 0, 66, 120, 0, 0, 0, 0, 0, 0, 66, -104, 0, 0, 66, -72, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -103, -57, 28, 66, -62, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, -110, 102, 102, 66, -60, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -101, 116, 93, 66, -58, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -78, 0, 0, 66, -58, 0, 0, 66, -126, 0, 0, 0, 0, 0, 0, 66, -104, 113, -57, 66, -70, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -114, -24, -70, 66, -62, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, -93, 64, 0, 66, -60, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -111, 64, 0, 66, -60, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, -91, -52, -51, 66, -62, 0, 0, 66, 116, 0, 0, 0, 0, 0, 0, 66, -115, 69, -47, 66, -58, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -112, -29, -114, 66, -64, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, 120, 102, 102, 66, -104, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -109, -47, 116, 66, -68, 0, 0, 66, 100, 0, 0, 0, 0, 0, 0, 66, -102, -24, -70, 66, -68, 0, 0, 66, 116, 0, 0, 0, 0, 0, 0, 66, -126, 0, 0, 66, -86, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -102, 102, 102, 66, -64, 0, 0, 66, 92, 0, 0, 0, 0, 0, 0, 66, -102, -52, -51, 66, -58, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -108, 93, 23, 66, -66, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -105, -52, -51, 66, -62, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, -114, 46, -116, 66, -68, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -126, -29, -114, 66, -58, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -110, 42, -85, 66, -70, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -120, -86, -85, 66, -80, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -127, 102, 102, 66, -72, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -117, -94, -23, 66, -72, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -109, -52, -51, 66, -68, 0, 0, 66, 92, 0, 0, 0, 0, 0, 0, 66, -102, -52, -51, 66, -58, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, 127, -114, 57, 66, -76, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -123, 23, 70, 66, -70, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -96, -52, -51, 66, -74, 0, 0, 66, 120, 0, 0, 0, 0, 0, 0, 66, -88, 56, -28, 66, -62, 0, 0, 66, -118, 0, 0, 0, 0, 0, 0, 66, -90, 0, 0, 66, -60, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -125, -47, 116, 66, -74, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -114, 56, -28, 66, -58, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -125, 51, 51, 66, -92, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -101, 102, 102, 66, -74, 0, 0, 66, 116, 0, 0, 65, 32, 0, 0, 66, 2, -52, -51, 66, -66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, -106, 51, 51, 66, -72, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -104, 102, 102, 66, -64, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, -128, 113, -57, 66, -102, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -106, -128, 0, 66, -60, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -111, 51, 51, 66, -82, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -108, 42, -85, 66, -56, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -99, -52, -51, 66, -64, 0, 0, 66, 104, 0, 0, 0, 0, 0, 0, 66, -88, -103, -102, 66, -68, 0, 0, 66, -106, 0, 0, 0, 0, 0, 0, 66, -99, 102, 102, 66, -58, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, -112, 0, 0, 66, -74, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, -126, 56, -28, 66, -74, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -114, 0, 0, 66, -60, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -88, 113, -57, 66, -60, 0, 0, 66, -108, 0, 0, 0, 0, 0, 0, 66, -99, 102, 102, 66, -58, 0, 0, 66, 120, 0, 0, 0, 0, 0, 0, 66, -125, 102, 102, 66, -70, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -114, -64, 0, 66, -92, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, -100, 0, 0, 66, -62, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -101, -52, -51, 66, -64, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, -114, 46, -116, 66, -74, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, -106, -24, -70, 66, -66, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -111, -94, -23, 66, -64, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, -103, 51, 51, 66, -62, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -101, -103, -102, 66, -58, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, -96, -103, -102, 66, -64, 0, 0, 66, 100, 0, 0, 0, 0, 0, 0, 66, -96, 113, -57, 66, -62, 0, 0, 66, 104, 0, 0, 0, 0, 0, 0, 66, -108, -103, -102, 66, -68, 0, 0, 66, -126, 0, 0, 0, 0, 0, 0, 66, -92, 0, 0, 66, -58, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -92, 0, 0, 66, -64, 0, 0, 66, -126, 0, 0, 0, 0, 0, 0, 66, -110, -52, -51, 66, -62, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, -88, 51, 51, 66, -64, 0, 0, 66, 120, 0, 0, 0, 0, 0, 0, 66, -122, -103, -102, 66, -68, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -116, -52, -51, 66, -70, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -111, -103, -102, 66, -60, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -117, -86, -85, 66, -60, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -112, 113, -57, 66, -62, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -108, 102, 102, 66, -60, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -118, -117, -93, 66, -82, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -111, 51, 51, 66, -66, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -117, 51, 51, 66, -68, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -118, 0, 0, 66, -64, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -98, -52, -51, 66, -58, 0, 0, 66, 92, 0, 0, 0, 0, 0, 0, 66, -100, -117, -93, 66, -68, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, -97, 23, 70, 66, -58, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, -94, -29, -114, 66, -58, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, -116, -128, 0, 66, -82, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -98, 102, 102, 66, -64, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, -112, 0, 0, 66, -66, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -124, -70, 47, 66, -62, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -104, 102, 102, 66, -58, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, 119, -103, -102, 66, -82, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -113, -43, 85, 66, -60, 0, 0, 66, 92, 0, 0, 0, 0, 0, 0, 66, -112, 46, -116, 66, -76, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -102, 0, 0, 66, -66, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -100, -117, -93, 66, -64, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -99, -103, -102, 66, -58, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, -100, -103, -102, 66, -62, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, 126, 46, -116, 66, -62, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -109, -114, 57, 66, -60, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -109, -52, -51, 66, -84, 0, 0, 66, 104, 0, 0, 0, 0, 0, 0, 66, -102, 56, -28, 66, -58, 0, 0, 66, 92, 0, 0, 0, 0, 0, 0, 66, -121, -52, -51, 66, -58, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -107, -52, -51, 66, -58, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -99, 51, 51, 66, -64, 0, 0, 66, -128, 0, 0, 0, 0, 0, 0, 66, -128, -117, -93, 66, -74, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -113, -94, -23, 66, -58, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -88, 93, 23, 66, -58, 0, 0, 66, 120, 0, 0, 0, 0, 0, 0, 66, -118, -70, 47, 66, -58, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -111, 85, 85, 66, -60, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -95, -114, 57, 66, -60, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -118, 102, 102, 66, -64, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -99, -103, -102, 66, -66, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -110, -24, -70, 66, -60, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -111, 28, 114, 66, -62, 0, 0, 66, 100, 0, 0, 0, 0, 0, 0, 66, -118, 0, 0, 66, -68, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -112, -70, 47, 66, -74, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -117, -103, -102, 66, -84, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -107, 0, 0, 66, -58, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -98, 56, -28, 66, -58, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -106, 46, -116, 66, -62, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -125, 0, 0, 66, -92, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -100, -86, -85, 66, -62, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, -97, 23, 70, 66, -58, 0, 0, 66, 92, 0, 0, 0, 0, 0, 0, 66, -114, 0, 0, 66, -78, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -107, 69, -47, 66, -72, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -106, -24, -70, 66, -58, 0, 0, 66, 100, 0, 0, 0, 0, 0, 0, 66, -106, 0, 0, 66, -62, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, -120, 0, 0, 66, -64, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -108, -117, -93, 66, -58, 0, 0, 66, 84, 0, 0, 65, 96, 0, 0, 65, -110, -86, -85, 66, -78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, -125, 42, -85, 66, -104, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -111, 0, 0, 66, -64, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -94, 0, 0, 66, -64, 0, 0, 66, 120, 0, 0, 0, 0, 0, 0, 66, -94, 93, 23, 66, -58, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, -99, -94, -23, 66, -58, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -112, -103, -102, 66, -60, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -93, -52, -51, 66, -62, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -107, 85, 85, 66, -70, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -98, -29, -114, 66, -60, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -115, 102, 102, 66, -74, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, -110, 0, 0, 66, -58, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -110, 46, -116, 66, -64, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -110, 113, -57, 66, -70, 0, 0, 66, 104, 0, 0, 0, 0, 0, 0, 66, -117, -57, 28, 66, -60, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -102, -70, 47, 66, -60, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, -114, -103, -102, 66, -64, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, -103, -114, 57, 66, -68, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -96, -20, 79, 66, -56, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -107, -52, -51, 66, -60, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -125, -114, 57, 66, -62, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -102, -29, -114, 66, -72, 0, 0, 66, 120, 0, 0, 0, 0, 0, 0, 66, -106, 46, -116, 66, -70, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -111, 102, 102, 66, -60, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -94, 51, 51, 66, -62, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, -93, 69, -47, 66, -60, 0, 0, 66, 100, 0, 0, 0, 0, 0, 0, 66, -112, 46, -116, 66, -58, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -103, -114, 57, 66, -74, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, -124, 102, 102, 66, -64, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -98, -24, -70, 66, -60, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -104, 113, -57, 66, -60, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -107, 51, 51, 66, -66, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -95, 102, 102, 66, -70, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, -111, 51, 51, 66, -72, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -111, 0, 0, 66, -70, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -98, -52, -51, 66, -60, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -117, 102, 102, 66, -64, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -123, 0, 0, 66, -66, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -99, -114, 57, 66, -62, 0, 0, 66, 100, 0, 0, 0, 0, 0, 0, 66, -113, 85, 85, 66, -76, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -106, 113, -57, 66, -64, 0, 0, 66, 100, 0, 0, 0, 0, 0, 0, 66, -97, 51, 51, 66, -66, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -113, -103, -102, 66, -60, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -98, 113, -57, 66, -58, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -120, 0, 0, 66, -92, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -98, 102, 102, 66, -60, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -112, -24, -70, 66, -58, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -100, 56, -28, 66, -64, 0, 0, 66, 104, 0, 0, 0, 0, 0, 0, 66, -114, 0, 0, 66, -66, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -100, -52, -51, 66, -58, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -120, 0, 0, 66, -60, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -102, -52, -51, 66, -60, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -126, 0, 0, 66, -86, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -118, -86, -85, 66, -62, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -88, -103, -102, 66, -68, 0, 0, 66, -124, 0, 0, 0, 0, 0, 0, 66, -122, 0, 0, 66, -76, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -109, -94, -23, 66, -70, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -108, -52, -51, 66, -66, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -116, -86, -85, 66, -86, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -109, -52, -51, 66, -66, 0, 0, 66, 92, 0, 0, 0, 0, 0, 0, 66, -100, 0, 0, 66, -58, 0, 0, 66, 92, 0, 0, 0, 0, 0, 0, 66, -117, 28, 114, 66, -66, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -95, -52, -51, 66, -64, 0, 0, 66, -128, 0, 0, 0, 0, 0, 0, 66, -118, -52, -51, 66, -80, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -125, 0, 0, 66, -96, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -110, 56, -28, 66, -64, 0, 0, 66, 104, 0, 0, 0, 0, 0, 0, 66, -108, 102, 102, 66, -58, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -85, -94, -23, 66, -58, 0, 0, 66, -124, 0, 0, 0, 0, 0, 0, 66, -97, -57, 28, 66, -62, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -118, 93, 23, 66, -60, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -115, -57, 28, 66, -74, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, -96, -52, -51, 66, -58, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -94, -70, 47, 66, -58, 0, 0, 66, 100, 0, 0, 0, 0, 0, 0, 66, -110, 64, 0, 66, -68, 0, 0, 66, 104, 0, 0, 0, 0, 0, 0, 66, -116, -70, 47, 66, -58, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, -106, 0, 0, 66, -58, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, -112, 0, 0, 66, -72, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -105, 0, 0, 66, -68, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, -100, -128, 0, 66, -58, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -126, 51, 51, 66, -64, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -91, 116, 93, 66, -60, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, -96, 113, -57, 66, -58, 0, 0, 66, 116, 0, 0, 0, 0, 0, 0, 66, -108, -70, 47, 66, -68, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -104, 93, 23, 66, -62, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -121, -57, 28, 66, -70, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -107, 42, -85, 66, -70, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -112, 93, 23, 66, -80, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -100, -29, -114, 66, -64, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -114, -70, 47, 66, -76, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -112, -117, -93, 66, -62, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -112, 56, -28, 66, -80, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, 122, 85, 85, 66, -100, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -118, 0, 0, 66, -82, 0, 0, 66, 100, 0, 0, 0, 0, 0, 0, 66, -112, -86, -85, 66, -64, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -103, -52, -51, 66, -68, 0, 0, 66, 116, 0, 0, 0, 0, 0, 0, 66, -99, -103, -102, 66, -66, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -95, -52, -51, 66, -58, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, -95, -47, 116, 66, -60, 0, 0, 66, -128, 0, 0, 0, 0, 0, 0, 66, -100, -24, -70, 66, -64, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -110, -70, 47, 66, -64, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -118, 113, -57, 66, -78, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -105, 42, -85, 66, -60, 0, 0, 66, 104, 0, 0, 65, 32, 0, 0, 66, 26, 0, 0, 66, -70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, -104, -29, -114, 66, -72, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -108, -70, 47, 66, -64, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, -107, 85, 85, 66, -70, 0, 0, 66, 100, 0, 0, 0, 0, 0, 0, 66, -99, 85, 85, 66, -62, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -112, -70, 47, 66, -62, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -111, -114, 57, 66, -66, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -109, 69, -47, 66, -72, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -98, 56, -28, 66, -62, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -103, 102, 102, 66, -64, 0, 0, 66, 104, 0, 0, 0, 0, 0, 0, 66, -114, 0, 0, 66, -58, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -96, 51, 51, 66, -62, 0, 0, 66, -128, 0, 0, 0, 0, 0, 0, 66, -105, 0, 0, 66, -76, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, -111, 85, 85, 66, -60, 0, 0, 66, 92, 0, 0, 0, 0, 0, 0, 66, -111, 102, 102, 66, -62, 0, 0, 66, 92, 0, 0, 0, 0, 0, 0, 66, -105, 28, 114, 66, -58, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, -107, 51, 51, 66, -58, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -110, -24, -70, 66, -58, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -98, -29, -114, 66, -68, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, -106, -70, 47, 66, -68, 0, 0, 66, -122, 0, 0, 0, 0, 0, 0, 66, -109, 102, 102, 66, -58, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -102, 93, 23, 66, -58, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -96, -103, -102, 66, -58, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -101, -57, 28, 66, -66, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -103, 28, 114, 66, -58, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -106, 56, -28, 66, -64, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -107, 64, 0, 66, -78, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, -97, -52, -51, 66, -58, 0, 0, 66, 104, 0, 0, 0, 0, 0, 0, 66, -115, 85, 85, 66, -60, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -121, -103, -102, 66, -68, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -109, 64, 0, 66, -62, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, -112, 0, 0, 66, -70, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -99, 51, 51, 66, -60, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, 122, 56, -28, 66, -96, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -103, -114, 57, 66, -62, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -117, -114, 57, 66, -98, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, -105, -52, -51, 66, -72, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -126, 113, -57, 66, -76, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -108, 42, -85, 66, -68, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -116, -52, -51, 66, -68, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, -114, 51, 51, 66, -62, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -120, -37, 110, 66, -66, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -108, -117, -93, 66, -58, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -107, 69, -47, 66, -64, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -98, 46, -116, 66, -58, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -109, 102, 102, 66, -58, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -97, -57, 28, 66, -58, 0, 0, 66, 116, 0, 0, 0, 0, 0, 0, 66, -100, 51, 51, 66, -72, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -101, 51, 51, 66, -58, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, -112, -52, -51, 66, -78, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, -105, 0, 0, 66, -62, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -99, 51, 51, 66, -58, 0, 0, 66, 116, 0, 0, 0, 0, 0, 0, 66, -118, -86, -85, 66, -90, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -106, -103, -102, 66, -64, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -110, 0, 0, 66, -74, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, -108, 0, 0, 66, -58, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -111, 116, 93, 66, -68, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -96, 113, -57, 66, -62, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -101, -103, -102, 66, -60, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -104, 56, -28, 66, -62, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -85, -103, -102, 66, -58, 0, 0, 66, -126, 0, 0, 0, 0, 0, 0, 66, -105, 51, 51, 66, -66, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, -103, 0, 0, 66, -72, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, -109, 69, -47, 66, -60, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -112, -52, -51, 66, -68, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, -107, -114, 57, 66, -64, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -109, 69, -47, 66, -70, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, -111, 85, 85, 66, -60, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -103, 0, 0, 66, -70, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, -119, -57, 28, 66, -76, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -107, -57, 28, 66, -64, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -104, -52, -51, 66, -62, 0, 0, 66, 92, 0, 0, 0, 0, 0, 0, 66, -108, 0, 0, 66, -58, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -104, -24, -70, 66, -58, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -105, 0, 0, 66, -76, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, 118, -52, -51, 66, -62, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -98, -103, -102, 66, -58, 0, 0, 66, 104, 0, 0, 0, 0, 0, 0, 66, -119, -86, -85, 66, -78, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -96, 0, 0, 66, -66, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, -120, -52, -51, 66, -60, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -105, 69, -47, 66, -60, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -104, -117, -93, 66, -62, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -106, 0, 0, 66, -72, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, -99, -103, -102, 66, -62, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -101, 51, 51, 66, -68, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, -116, -52, -51, 66, -64, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -114, 0, 0, 66, -60, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -114, 93, 23, 66, -62, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -109, -47, 116, 66, -58, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -121, 0, 0, 66, -68, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -113, -52, -51, 66, -64, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, -104, 0, 0, 66, -72, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -105, 69, -47, 66, -68, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -96, 113, -57, 66, -62, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, -122, -52, -51, 66, -68, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -113, 51, 51, 66, -62, 0, 0, 66, 92, 0, 0, 0, 0, 0, 0, 66, -103, 102, 102, 66, -66, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -114, 102, 102, 66, -94, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, 126, -86, -85, 66, -96, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -79, 23, 70, 66, -58, 0, 0, 66, -128, 0, 0, 0, 0, 0, 0, 66, -122, 46, -116, 66, -84, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, -120, 0, 0, 66, -62, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -105, 102, 102, 66, -60, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -111, -52, -51, 66, -68, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -84, -86, -85, 66, -62, 0, 0, 66, -126, 0, 0, 0, 0, 0, 0, 66, -115, 42, -85, 66, -80, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -125, 102, 102, 66, -90, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -117, -103, -102, 66, -62, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -113, -52, -51, 66, -62, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -124, 113, -57, 66, -70, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -110, 46, -116, 66, -58, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -94, 102, 102, 66, -60, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -98, 0, 0, 66, -66, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -118, -103, -102, 66, -84, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -115, -52, -51, 66, -72, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -120, -64, 0, 66, -60, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -104, -86, -85, 66, -58, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, -124, 56, -28, 66, -86, 0, 0, 66, 92, 0, 0, 0, 0, 0, 0, 66, -118, 0, 0, 66, -76, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -118, -52, -51, 66, -84, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -108, 102, 102, 66, -70, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -105, 116, 93, 66, -68, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -121, 28, 114, 66, -70, 0, 0, 66, 100, 0, 0, 0, 0, 0, 0, 66, -105, -94, -23, 66, -60, 0, 0, 66, 92, 0, 0, 0, 0, 0, 0, 66, -109, -47, 116, 66, -70, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -108, -43, 85, 66, -62, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -115, 116, 93, 66, -58, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -112, 0, 0, 66, -64, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -98, -103, -102, 66, -56, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -103, 0, 0, 66, -58, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -98, 102, 102, 66, -60, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, -115, -64, 0, 66, -58, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -108, 102, 102, 66, -60, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, 125, 51, 51, 66, -86, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -116, -117, -93, 66, -68, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -109, -57, 28, 66, -70, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -124, 56, -28, 66, -78, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -120, 113, -57, 66, -58, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -125, 23, 70, 66, -76, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -123, -57, 28, 66, -80, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -117, 102, 102, 66, -60, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -116, -86, -85, 66, -82, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -108, -117, -93, 66, -58, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -106, 0, 0, 66, -58, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, 117, 85, 85, 66, -92, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -102, -24, -70, 66, -68, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, -121, 116, 93, 66, -92, 0, 0, 66, 100, 0, 0, 0, 0, 0, 0, 66, -122, -70, 47, 66, -74, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -123, 28, 114, 66, -76, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -115, -57, 28, 66, -58, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -116, 93, 23, 66, -62, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -114, -43, 85, 66, -58, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -108, 56, -28, 66, -62, 0, 0, 66, 92, 0, 0, 0, 0, 0, 0, 66, -118, 56, -28, 66, -84, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -106, -86, -85, 66, -72, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -116, -117, -93, 66, -74, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -89, 0, 0, 66, -62, 0, 0, 66, -126, 0, 0, 0, 0, 0, 0, 66, 123, -128, 0, 66, -84, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -109, -52, -51, 66, -58, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -108, 0, 0, 66, -64, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -93, 28, 114, 66, -66, 0, 0, 66, -116, 0, 0, 0, 0, 0, 0, 66, -118, -117, -93, 66, -82, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -102, 42, -85, 66, -58, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, -116, 0, 0, 66, -64, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -122, -52, -51, 66, -60, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -109, 69, -47, 66, -64, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, -92, 0, 0, 66, -58, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -110, 0, 0, 66, -66, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -115, 102, 102, 66, -70, 0, 0, 66, 104, 0, 0, 0, 0, 0, 0, 66, -119, 102, 102, 66, -88, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -110, -52, -51, 66, -76, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -108, 113, -57, 66, -58, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -99, -52, -51, 66, -66, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -98, -117, -93, 66, -58, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -110, 56, -28, 66, -68, 0, 0, 66, 92, 0, 0, 0, 0, 0, 0, 66, -103, 51, 51, 66, -58, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, -117, 85, 85, 66, -90, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -121, -52, -51, 66, -64, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, -110, -103, -102, 66, -66, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -106, 56, -28, 66, -72, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, -107, 51, 51, 66, -64, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -107, 116, 93, 66, -58, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, -110, 46, -116, 66, -64, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -102, -117, -93, 66, -56, 0, 0, 66, 100, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, -70, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -127, 51, 51, 66, -90, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -126, 102, 102, 66, -84, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -98, 0, 0, 66, -68, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, -107, -47, 116, 66, -60, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, -99, 116, 93, 66, -62, 0, 0, 66, 104, 0, 0, 0, 0, 0, 0, 66, -98, -117, -93, 66, -62, 0, 0, 66, 116, 0, 0, 0, 0, 0, 0, 66, -117, 23, 70, 66, -80, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -110, 51, 51, 66, -72, 0, 0, 66, 100, 0, 0, 0, 0, 0, 0, 66, -112, 102, 102, 66, -68, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -115, -103, -102, 66, -64, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, -103, -114, 57, 66, -68, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, -102, 0, 0, 66, -62, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, -112, -128, 0, 66, -62, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, -104, -52, -51, 66, -62, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -92, -128, 0, 66, -58, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, -105, 102, 102, 66, -68, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, -113, -57, 28, 66, -64, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, -122, 102, 102, 66, -78, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -118, 0, 0, 66, -64, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -105, 116, 93, 66, -70, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -94, 51, 51, 66, -60, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, -111, -64, 0, 66, -72, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -128, -103, -102, 66, -88, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -87, -52, -51, 66, -62, 0, 0, 66, 92, 0, 0, 0, 0, 0, 0, 66, -112, 56, -28, 66, -72, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -116, -70, 47, 66, -88, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -85, 85, 85, 66, -64, 0, 0, 66, -126, 0, 0, 0, 0, 0, 0, 66, -105, -64, 0, 66, -62, 0, 0, 66, 84, 0, 0 ], "compressed": true, "refCount": [ 4, 22, 505, 488645087, 627314938, 582700772, 399780962, 393065644, 493329789, 348405217, 399993616, 204415313, 496738328, 681754803, 538579750, 504435967, 497026482, 498871798, 592916307, 452127812, 511204333, 403138722, 491772828, 550815193, 452278665, 733388952, 508324222, 528467679, 449961106, 350404130, 449138598, 466853076, 362626119, 439225686, 248861557, 429062015, 624839501, 362886465, 719423305, 219046244, 263992202, 628055381, 499098559, 482781665, 504168810, 501925309, 630311957, 533598347, 556015254, 602409978, 499090983, 578059376, 345154108, 350733058, 588319029, 452650544, 461820581, 501176100, 452560325, 254595844, 533593920, 407318270, 412155743, 503627008, 454598108, 496752770, 449959602, 538428890, 455440652, 461942735, 452528503, 305537155, 360787231, 536178278, 456428308, 10 ], "directLocationMap": false, "locationList": [ 0, 2016, 505, 8068, 24212, 40356, 56500, 72644, 88788, 104932, 121076, 137220, 153364, 169508, 185652, 201796, 217940, 234084, 250228, 266372, 282516, 298660, 314804, 330948, 347092, 363236, 379380, 395524, 411668, 427812, 443956, 460100, 476244, 492388, 508532, 524676, 540820, 556964, 573108, 589252, 605396, 621540, 637684, 653828, 669972, 686116, 702260, 718404, 734548, 750692, 766836, 782980, 799124, 815268, 831412, 847556, 863700, 879844, 895988, 912132, 928276, 944420, 960564, 976708, 992852, 1008996, 1025140, 1041284, 1057428, 1073572, 1089716, 1105860, 1122004, 1138148, 1154292, 1170436, 1186580, 1202724, 1218868, 1235012, 1251156, 1267300, 1283444, 1299588, 1315732, 1331876, 1348020, 1364164, 1380308, 1396452, 1412596, 1428740, 1444884, 1461028, 1477172, 1493316, 1509460, 1525604, 1541748, 1557892, 1574036, 1590180, 1606324, 1622468, 1638612, 1654756, 1670900, 1687044, 1703188, 1719332, 1735476, 1751620, 1767764, 1783908, 1800052, 1816196, 1832340, 1848484, 1864628, 1880772, 1896916, 1913060, 1929204, 1945348, 1961492, 1977636, 1993780, 2009924, 2026068, 2042212, 2058356, 2074500, 2090644, 2106788, 2122932, 2139076, 2155220, 2171364, 2187508, 2203652, 2219796, 2235940, 2252084, 2268228, 2284372, 2300516, 2316660, 2332804, 2348948, 2365092, 2381236, 2397380, 2413524, 2429668, 2445812, 2461956, 2478100, 2494244, 2510388, 2526532, 2542676, 2558820, 2574964, 2591108, 2607252, 2623396, 2639540, 2655684, 2671828, 2687972, 2704116, 2720260, 2736404, 2752548, 2768692, 2784836, 2800980, 2817124, 2833268, 2849412, 2865556, 2881700, 2897844, 2913988, 2930132, 2946276, 2962420, 2978564, 2994708, 3010852, 3026996, 3043140, 3059284, 3075428, 3091572, 3107716, 3123860, 3140004, 3156148, 3172292, 3188436, 3204580, 3220724, 3236868, 3253012, 3269156, 3285300, 3301444, 3317588, 3333732, 3349876, 3366020, 3382164, 3398308, 3414452, 3430596, 3446740, 3462884, 3479028, 3495172, 3511316, 3527460, 3543604, 3559748, 3575892, 3592036, 3608180, 3624324, 3640468, 3656612, 3672756, 3688900, 3705044, 3721188, 3737332, 3753476, 3769620, 3785764, 3801908, 3818052, 3834196, 3850340, 3866484, 3882628, 3898772, 3914916, 3931060, 3947204, 3963348, 3979492, 3995636, 4011780, 4027924, 4044068, 4060212, 2016 ], "reverseAvailable": false, "internalShinglingEnabled": false, "lastTimeStamp": 505, "rotationEnabled": false, "dynamicResizingEnabled": true, "currentStoreCapacity": 512, "indexCapacity": 512 }, "compactSamplerStates": [ { "version": "2.0", "weight": [ -0.56757265, -0.5781482, -0.5900879, -0.6161663, -0.74962693, -0.6151643, -0.61670864, -0.67350674, -0.62119406, -0.7689292, -0.7968979, -0.63657176, -0.6180514, -0.7882518, -0.663554, -0.94079185, -1.0720736, -0.6319752, -0.6278517, -0.8380472, -0.9604324, -0.8651731, -0.798815, -0.6567839, -0.6820692, -0.9421621, -0.88186073, -0.7905466, -0.8823367, -0.8736085, -0.85339946, -0.9529896, -1.5253699, -1.1973315, -1.3102506, -0.7358565, -0.8139095, -0.7017528, -1.0430143, -1.0908111, -0.89280295, -1.3095568, -0.98362166, -0.8744968, -0.96791035, -1.2037274, -1.0653238, -0.7173222, -0.696716, -0.9508131, -0.7733483, -1.1465819, -1.3489482, -1.1664346, -1.076245, -0.8089149, -1.9500605, -1.164026, -2.239261, -1.3196678, -1.0025091, -1.0488088, -1.221525, -2.491666, -1.0704556, -1.9203418, -1.6465822, -1.5930494, -2.1173043, -1.454771, -2.3791387, -1.2175801, -1.4976561, -0.97529536, -0.9776957, -0.7076328, -1.9713205, -1.994005, -1.4144034, -1.7856992, -1.8549204, -1.3750582, -1.182027, -2.3264935, -3.4964423, -1.971149, -1.2945454, -1.548858, -1.2041738, -1.468671, -1.4650595, -2.2554448, -1.3044451, -1.1853373, -1.730136, -1.241813, -1.1292748, -0.71116483, -0.79887444, -1.2845273, -1.105379, -1.2366987, -0.92921096, -1.1657026, -2.6717122, -1.7439715, -1.9934863, -1.2263087, -1.7673148, -2.3491075, -1.0961275, -0.89520067, -1.0248098, -4.909743, -4.153232, -2.1522255, -1.7650629, -2.4412453, -2.7482073, -3.0675554, -3.1178305, -1.8242788, -1.892877, -3.210243, -1.9061444, -1.2413985, -1.2598059, -4.203074, -2.7223814, -2.2999434, -1.3408724, -7.0299697, -4.8111978, -3.3258471, -2.0125356, -3.1982787, -2.8312833, -2.5334399, -2.3389008, -2.9442873, -1.8930559, -2.3911982, -2.5047672, -4.4145966, -1.2764541, -3.9048793, -3.238948, -1.5198247, -1.2750254, -1.8376037, -3.6638694, -1.5739453, -1.1896442, -2.0554008, -3.439994, -3.6345048, -4.235151, -4.323954, -1.6634188, -3.0570233, -2.0862427, -3.161959, -3.9133036, -2.0392869, -3.2230003, -1.7840478, -1.9822911, -2.66759, -2.8719387, -4.63498, -3.9776332, -2.2720344, -3.0024054, -3.007087, -1.3444325, -5.0787582, -2.1520054, -1.8487936, -1.926888, -2.18643, -4.2005286, -1.6425658, -1.5144346, -5.0267115, -2.5702274, -2.866389, -2.01247, -1.2021661, -3.4260905, -1.7879579, -3.3959882, -4.2575583, -2.2555158, -2.5958145, -3.0608132, -1.8771381, -0.9143291, -1.0414093, -1.7113725, -1.3806139, -1.5017926, -1.4232012, -2.1246378, -1.4538587, -1.328111, -2.9455528, -1.5375834, -2.6173167, -1.3469445, -2.9239001, -3.6207416, -2.3897822, -4.7668986, -2.2512138, -3.4965847, -2.324559, -1.2498051, -2.5054939, -2.3657448, -4.1115704, -2.3869483, -2.610965, -6.1069016, -4.5214825, -2.4539022, -1.4635035 ], "pointIndex": [ 4, 504, 226, 35529227, 112927561, 49466190, 87494404, 14543996, 46779260, 60007490, 107327202, 98951852, 22404378, 16035566, 95163157, 53840153, 109554390, 71544057, 80474669, 91089142, 113143202, 13047000, 38971917, 119024767, 816686, 43233034, 17622851, 2195915, 19686486, 78660725, 110063416, 98516391, 23698955, 75550084, 26028907, 84501483, 88406807, 95864199, 104978001, 115947880, 30120112, 8535367, 33647170, 12618829, 37229842, 6852326, 42331373, 50854248, 43799784, 24507333, 3305776, 74196777, 89702118, 22617836, 26248412, 111735732, 20711699, 57937369, 125458152, 9661186, 67170512, 66812728, 10178588, 23985659, 121632067, 111096052, 1915242, 81124642, 109101203, 116266930, 226297, 89366943, 94814190, 2307544, 100343308, 106639341, 121462560, 119722949, 402 ], "storeSequenceIndicesEnabled": false, "size": 226, "capacity": 256, "initialAcceptFraction": 0.125, "timeDecay": 1.0E-4, "sequenceIndexOfMostRecentTimeDecayUpdate": 0, "maxSequenceIndex": 504, "compressed": true, "randomSeed": 6231208282143323767 }, { "version": "2.0", "weight": [ -0.6413124, -0.6741439, -0.6560893, -0.6797705, -0.74844384, -0.66546565, -0.67169714, -0.7227025, -0.68723875, -0.7745091, -0.76826525, -0.6939699, -0.7236429, -0.77351135, -0.67195445, -0.80146384, -0.82743365, -0.7136329, -0.7724732, -0.9194121, -0.79330975, -0.88315845, -0.81832063, -0.7143264, -0.94557303, -0.785616, -0.8377497, -0.7925366, -1.0203317, -0.9742233, -0.80757946, -0.9707234, -0.90228313, -0.8993705, -1.5087696, -1.0732617, -0.8467861, -0.8320001, -1.2694417, -0.9735975, -1.0536188, -0.8474321, -0.9971086, -0.9269841, -0.92866796, -1.0152696, -0.9399167, -0.84670246, -0.7283, -1.119393, -1.1513233, -0.9878237, -1.0573844, -0.9405707, -0.9608169, -0.93561846, -2.0413952, -1.3069793, -1.4010427, -1.0850079, -1.1713014, -0.8807193, -1.6299798, -1.897046, -1.1469332, -1.4496559, -1.254596, -1.1360562, -1.3226919, -2.6269495, -1.5345647, -1.209115, -1.4497056, -0.9226162, -1.5420644, -1.4579161, -1.810374, -1.7850882, -1.4213358, -2.0186284, -1.1599022, -1.2460217, -1.8482556, -1.623476, -1.0834888, -1.0720153, -1.5517547, -1.0411204, -1.9863597, -1.015509, -1.0393355, -1.1298063, -1.161867, -1.8876396, -1.513813, -1.0615944, -1.0518087, -1.0012404, -0.96941787, -1.4972963, -1.5582548, -1.3225719, -1.9551991, -1.137049, -1.1723896, -1.282302, -1.3758812, -0.9793669, -1.1025751, -1.0587844, -1.3776231, -0.9507962, -3.5233085, -2.147424, -3.5976098, -3.1932046, -1.3534847, -2.8176162, -2.3236613, -2.8634186, -1.4690521, -1.3486727, -1.8834981, -3.77391, -1.4108094, -2.0396273, -1.6383679, -3.9983404, -2.399237, -1.210579, -1.3090019, -1.5072656, -2.0974455, -4.0409245, -2.2359335, -1.7645096, -2.3572674, -1.6028525, -1.357799, -3.522606, -3.2044213, -1.55917, -2.6649456, -1.7507952, -1.51323, -4.9820375, -1.7488083, -1.6731998, -3.0470006, -1.6102738, -3.8390405, -2.1085012, -1.6249218, -2.0381305, -3.8072212, -1.9960753, -5.4924846, -2.476714, -2.6750987, -2.3795562, -2.590261, -1.3741866, -1.1860225, -2.5269265, -1.8842105, -5.061702, -2.7306504, -1.7086381, -2.189826, -2.2177384, -2.156229, -1.7054623, -1.239881, -2.8083131, -4.8517027, -1.7392544, -1.1228195, -3.4175887, -2.3523648, -1.8688406, -1.4306833, -1.4683838, -1.6348096, -1.8269991, -2.3902066, -2.7796946, -4.2938395, -3.7553287, -2.3795054, -1.584336, -2.9925914, -2.4059489, -1.5080501, -2.1570578, -1.4014544, -1.555314, -1.0247319, -2.5908108, -1.0894471, -2.9602163, -2.5347006, -1.7199854, -2.3623478, -2.3948119, -2.9381523, -4.0739775, -3.5914814, -2.88282, -4.8593273, -2.0374897, -3.0119255, -3.012831, -3.3967464, -3.4023802, -2.5469584, -1.0278263, -1.0037334, -4.807614, -1.4685438, -1.847896, -1.6382484, -2.4243822, -1.3925955, -2.429869, -1.9127114 ], "pointIndex": [ 2, 504, 225, 111671647, 118198531, 47366142, 82611799, 15422422, 18950857, 62711760, 5746078, 103679816, 89022947, 43163095, 91680981, 74392388, 35584963, 10637222, 73258702, 93278378, 19939543, 33895632, 119743310, 7157833, 16779238, 87639544, 116476223, 72966754, 106712, 58701826, 4475707, 23909850, 66472368, 68701516, 27495848, 79357249, 91508298, 104685242, 14140464, 79803883, 14234893, 93429684, 15144965, 37198795, 92147146, 100692200, 41931150, 51576948, 20643713, 76949619, 1748312, 32986811, 19136205, 77524577, 28191894, 57981206, 21495427, 89797535, 94962464, 63377850, 75190544, 27960305, 116953797, 89193273, 25578096, 29811451, 72161665, 73395529, 82882943, 125153256, 90067599, 96460508, 108002029, 100994745, 2733205, 112295199, 118907112, 127013007 ], "storeSequenceIndicesEnabled": false, "size": 225, "capacity": 256, "initialAcceptFraction": 0.125, "timeDecay": 1.0E-4, "sequenceIndexOfMostRecentTimeDecayUpdate": 0, "maxSequenceIndex": 504, "compressed": true, "randomSeed": 6910102835766708129 }, { "version": "2.0", "weight": [ -0.6361297, -0.6427886, -0.64978087, -0.70756996, -0.66756016, -0.6652314, -0.67686117, -0.738501, -0.86563295, -0.8297991, -0.7050236, -0.69653434, -0.7010046, -0.8382546, -1.0409559, -0.74255246, -0.9452534, -0.8861673, -1.0988894, -0.86182266, -0.9004108, -0.8393799, -0.7601388, -0.8780445, -0.7044544, -0.74571294, -0.8152079, -1.0929025, -1.0292293, -1.3781352, -1.4376355, -1.3130229, -1.0308373, -0.9641338, -1.1163272, -0.89741856, -1.0924834, -1.4286077, -1.2312396, -1.0095732, -0.90361285, -0.96598524, -0.9863629, -0.87630546, -1.1279582, -1.368041, -0.8136685, -1.3092943, -0.9266263, -0.74128693, -0.8960323, -0.8825871, -0.79810524, -0.9010219, -0.97901225, -1.4633446, -1.5441315, -1.0377563, -1.0494223, -2.1532643, -1.5144418, -1.4966323, -1.640983, -1.9846714, -1.8514707, -1.2629799, -2.4018369, -1.8355949, -1.6449745, -1.356063, -1.2787979, -1.4097439, -1.1225487, -1.9527433, -1.655858, -2.0141113, -2.74355, -1.4586512, -1.5609925, -2.3343732, -1.0382442, -1.4256576, -1.0880938, -1.2506218, -2.26243, -1.0773342, -1.0644708, -0.9891659, -0.9573225, -2.5247407, -1.1891508, -1.4889679, -2.2274039, -1.5068356, -1.1923847, -1.7803392, -1.8480661, -1.2104905, -1.089501, -0.8458398, -0.7424034, -1.1034354, -0.95535153, -1.430842, -1.4128844, -1.2114067, -0.8276177, -0.92598075, -0.91475046, -1.0110403, -3.731133, -2.5332088, -1.8363091, -2.5755098, -1.9488442, -1.2307419, -1.0537357, -1.9857179, -2.2417715, -3.314498, -3.8412423, -2.8418424, -2.4061882, -1.7295107, -2.1518376, -1.7952791, -2.0380082, -4.090556, -2.7759373, -2.0462887, -2.7760093, -3.8271885, -3.2707825, -3.4327483, -2.5401921, -1.8877523, -3.4253228, -1.8831528, -1.8994313, -1.6148615, -5.4198527, -1.314268, -1.3719753, -2.688971, -2.585797, -2.2576668, -1.1549048, -5.106076, -1.954672, -6.7728157, -3.7644725, -3.1551533, -4.8891025, -4.727654, -4.586425, -1.7163793, -3.6443462, -1.732317, -2.1879315, -4.6237965, -2.814348, -1.2486494, -2.1599646, -1.7666686, -1.4898446, -1.3215132, -4.152714, -1.413151, -4.8497276, -2.790615, -3.3900342, -2.3118632, -1.1577141, -1.6863161, -3.1471484, -2.5949144, -1.1936404, -5.16345, -1.0650976, -3.213641, -2.6836355, -3.2522056, -1.2563653, -2.3604238, -2.864063, -2.9894278, -4.0283117, -1.9091228, -2.1098876, -1.6736158, -1.4758114, -1.9855922, -2.9283683, -3.017182, -2.0328176, -3.7195306, -1.5892555, -3.5429056, -2.7333112, -1.3380169, -0.9410527, -2.6401072, -0.9119615, -2.025092, -3.1671853, -1.0942268, -3.079749, -3.9915621, -2.765839, -1.9798393, -1.5078577, -3.4867995, -2.388034, -3.0964606, -2.8108213, -2.1528425, -1.8067331, -1.5127798, -1.1197842 ], "pointIndex": [ 1, 503, 219, 7019155, 86646336, 120179378, 91734547, 17320238, 96151162, 105435557, 36079528, 127178896, 60140693, 42538739, 83950375, 55457344, 12546722, 20888350, 81270008, 112022852, 32868989, 35156862, 98160653, 68597093, 7927708, 46520646, 1883114, 112105826, 124338430, 93506926, 63630244, 37324365, 72408637, 76885895, 80009297, 109326382, 101401805, 115582259, 123203273, 33876601, 4654804, 35893754, 37607557, 38489150, 103329392, 40243586, 17148944, 63002618, 8336288, 67760943, 50594140, 95952481, 52730153, 84864861, 28444654, 59823071, 67866944, 61754053, 10357866, 66015676, 67433952, 91270347, 109234443, 74395631, 81912440, 78081117, 122867865, 106319468, 91502132, 93797791, 102667445, 104529340, 109866779, 116915765, 124217325, 32637650 ], "storeSequenceIndicesEnabled": false, "size": 219, "capacity": 256, "initialAcceptFraction": 0.125, "timeDecay": 1.0E-4, "sequenceIndexOfMostRecentTimeDecayUpdate": 0, "maxSequenceIndex": 504, "compressed": true, "randomSeed": -8153191400930165074 }, { "version": "2.0", "weight": [ -0.48931122, -0.49723798, -0.49012178, -0.623267, -0.6048579, -0.5018685, -0.493251, -0.6810186, -0.62533385, -0.611521, -0.6176875, -0.5930478, -0.57753223, -0.52694714, -0.6676626, -0.7207007, -0.7123615, -0.6789895, -0.745815, -0.80155474, -0.8633884, -0.6581785, -0.6463497, -0.62930876, -0.6465614, -0.64662224, -0.63142097, -0.5293907, -1.0326748, -0.7933024, -1.0779095, -0.77808034, -1.0023601, -0.74175876, -0.9819902, -0.9997212, -0.953454, -0.9269736, -0.77646047, -0.88533807, -1.0808892, -0.911517, -1.1113745, -1.2881032, -0.6981712, -1.048881, -0.82391083, -0.7688017, -0.8863816, -0.67885447, -0.7831837, -0.73852074, -0.75421745, -0.6855453, -0.6836569, -1.1590838, -0.6129658, -1.337165, -1.1796199, -0.91301686, -1.7960355, -1.1085035, -2.0368264, -1.0979167, -1.5597198, -2.3726456, -1.6531286, -0.7789359, -0.9969333, -1.3209299, -1.2398386, -1.0943171, -1.8565011, -1.2082129, -2.0254157, -1.1507211, -1.0858723, -0.9761007, -1.6726984, -1.3714278, -1.1769344, -1.2964422, -1.3787014, -1.0774325, -1.2595168, -1.5023205, -1.7526349, -2.0585146, -1.3601263, -1.2020801, -0.76575804, -2.5528324, -1.1102475, -0.977003, -0.85832506, -1.0666026, -0.96740466, -1.0918508, -2.1194818, -0.7036158, -1.0782622, -1.2990319, -1.7673608, -1.3664817, -1.101482, -0.86120254, -1.0904459, -0.82473683, -1.0382458, -0.7014238, -1.1469412, -1.5819608, -2.0776114, -0.8331923, -0.74183834, -2.0028663, -1.5265291, -2.3708613, -1.6433748, -2.1847932, -2.2085743, -3.0770442, -4.579025, -1.9978226, -2.0566041, -3.6105764, -3.1895306, -1.7005802, -1.2436558, -1.7310462, -3.3567033, -2.6761308, -2.8754559, -2.2890341, -2.090929, -1.3141505, -1.9325581, -4.143366, -1.8410652, -1.6836159, -1.4787452, -1.5515575, -1.5433555, -3.4945877, -2.9452395, -2.9747286, -3.8249507, -4.712332, -2.8805053, -2.1511056, -2.2605977, -1.9543904, -1.7370383, -2.8557973, -2.027881, -1.4113812, -1.6777797, -3.6317258, -2.9565845, -1.5805341, -2.0916042, -1.8768723, -1.4425573, -1.6574762, -5.694653, -2.0396917, -1.9360616, -2.9818797, -1.3613492, -1.7539183, -5.2183347, -5.3925138, -3.69513, -7.285011, -2.0467029, -4.6431193, -3.5842743, -2.338261, -1.6631751, -2.7470868, -1.5942484, -1.2338036, -1.5301003, -3.2176993, -2.6857648, -1.5410172, -2.2258418, -1.2013426, -1.2898548, -4.8211923, -5.0544915, -1.8151265, -1.3625166, -3.4235814, -2.0515249, -1.1709322, -1.9283103, -2.2851682, -2.3307283, -2.4420938, -1.9790992, -1.7172705, -2.305028, -1.4039015, -2.8155386, -3.0897534, -3.5799522, -2.252491, -1.934329, -6.9373517, -2.9747658, -2.2050023, -0.9547009, -2.517102, -1.4843043, -2.2253036, -1.3988092, -2.5037396, -3.1673834, -0.8072798, -1.4884133, -1.7703872, -2.2750254, -1.9589535, -2.5536778, -2.4836578, -3.569326, -1.6090255, -1.1384836, -0.7648988 ], "pointIndex": [ 2, 502, 230, 111339292, 85613591, 58324908, 87013905, 37649672, 8623547, 65372694, 68426884, 115159395, 23409781, 16687454, 114499214, 52593671, 62770336, 22136302, 11966504, 24715439, 102196100, 124284645, 63854009, 37351203, 11321662, 17604151, 59108384, 53958592, 53080528, 30732930, 84649389, 65556598, 70498491, 24491168, 68752529, 31292774, 92071582, 2570990, 13264593, 116182818, 117957071, 33697231, 3043710, 82913134, 19169290, 72793028, 39782858, 42751492, 96796374, 8120527, 41760334, 78600692, 49909194, 51222082, 65924290, 59617474, 21024187, 105381725, 60317624, 63447385, 45559957, 82210418, 11007062, 2150073, 73502844, 114103554, 25757433, 79620234, 124966752, 27534372, 56910093, 90668857, 94056352, 98591664, 101355199, 108140259, 68998662, 121992128, 120269931, 245471 ], "storeSequenceIndicesEnabled": false, "size": 230, "capacity": 256, "initialAcceptFraction": 0.125, "timeDecay": 1.0E-4, "sequenceIndexOfMostRecentTimeDecayUpdate": 0, "maxSequenceIndex": 504, "compressed": true, "randomSeed": 4045460986159022609 }, { "version": "2.0", "weight": [ -0.4681739, -0.48007405, -0.49789903, -0.5071157, -0.5392349, -0.49877673, -0.5173413, -0.55151767, -0.56650174, -0.5500999, -0.5561777, -0.5550377, -0.5654364, -0.55124235, -0.6208702, -0.59977484, -0.7121681, -0.5872569, -0.57015973, -0.60092586, -0.5919172, -0.57651204, -0.599501, -0.84314567, -0.71985126, -0.61190027, -0.607676, -0.61616707, -0.87906057, -0.88150966, -1.2262063, -0.6288519, -0.90566653, -0.74081695, -0.78718567, -0.6843046, -0.5967524, -0.97782314, -0.9634063, -1.1774516, -0.6383265, -1.3105494, -0.61028373, -0.71040356, -0.9213385, -0.8167878, -0.65758455, -0.8537457, -1.0144536, -1.1103842, -0.73576075, -0.65716136, -0.7518719, -0.65931726, -0.6404282, -0.6632596, -1.0990821, -1.1170622, -1.5678968, -1.3625112, -1.085547, -1.5416995, -1.5436345, -0.9560163, -1.1595485, -1.1146106, -0.9999493, -0.9884563, -1.445272, -1.1867231, -0.94520855, -1.1810359, -1.6496556, -1.3205277, -0.87346005, -1.2355236, -1.2484058, -1.0776839, -1.8207626, -2.0081627, -2.1486614, -1.8236513, -1.2014854, -1.3567494, -1.7071117, -1.3450822, -1.1705921, -1.4246175, -1.3039186, -1.0957643, -0.9249299, -1.356931, -0.8482996, -0.675301, -0.84562135, -1.1149482, -1.6455381, -1.2188505, -1.4722234, -1.828188, -1.5412449, -0.8473445, -0.92642033, -0.8599541, -1.0990387, -0.83823735, -1.4376352, -0.8778756, -0.66725403, -1.1006153, -0.7513238, -0.7345586, -0.66469234, -1.3874843, -2.4865832, -2.9973478, -2.306394, -2.673725, -3.3250866, -2.1260333, -2.1913078, -1.8699329, -1.7517766, -1.6185035, -1.6238472, -2.273655, -5.387515, -4.84232, -3.1442783, -3.4106052, -1.8919024, -1.4764744, -1.1394618, -4.4950013, -1.0300931, -4.261308, -1.3040004, -1.6697409, -2.3310206, -1.9800646, -2.5040128, -0.9702708, -1.6211085, -2.4045038, -2.6541598, -1.83864, -3.9018402, -1.9505028, -3.0774148, -1.2140405, -1.0377613, -2.676499, -2.0348115, -2.026429, -1.398141, -1.1595172, -2.031862, -1.9018892, -1.907572, -3.091949, -4.789639, -2.4214916, -2.600685, -3.3066297, -3.311136, -1.543751, -4.41873, -1.721474, -2.1571455, -2.8674223, -1.771004, -3.224615, -1.9476156, -2.4125326, -2.195531, -2.5996487, -1.4842075, -2.531535, -2.6502254, -1.8549097, -2.5735629, -1.4825006, -2.5768104, -2.2504616, -1.3600206, -2.5184896, -1.0576596, -3.8762393, -2.7213616, -0.9605226, -1.5147715, -2.870183, -1.8479155, -3.3377554, -1.9698049, -1.9063296, -1.5209743, -3.7611253, -1.6307871, -2.031272, -4.151252, -1.6233153, -1.9489214, -6.4323297, -1.1256434, -1.313254, -2.584117, -4.35672, -1.3673528, -1.216091, -2.888076, -1.3286314, -0.9383582, -3.279279, -4.4881206, -0.95496076, -1.2240533, -1.0146334, -2.168913, -1.5143352, -1.1024603, -2.4158843, -2.5341992, -1.4697461, -0.8430382, -1.953946, -1.1216923, -3.570344, -1.8596222 ], "pointIndex": [ 0, 503, 229, 97308902, 90546316, 60531530, 25415445, 20053538, 44909203, 59035730, 85880856, 114508858, 32430183, 38734551, 45130336, 24225300, 57518001, 88017364, 81431559, 95179440, 109730194, 30224840, 32023550, 34779612, 37411646, 59797001, 78525232, 93423098, 48613000, 20423406, 125847509, 78012884, 92848752, 90257220, 79655512, 87435428, 93908915, 116022841, 104712945, 111236741, 14469842, 38373353, 7382757, 45236435, 28703822, 117425585, 36904534, 29186408, 17099365, 20913138, 5216832, 125480067, 90774671, 4649981, 29814811, 21945113, 71558967, 54887893, 101510858, 88783696, 64133978, 64525352, 113952641, 115717676, 73090102, 74664864, 79148335, 84019128, 74340922, 86377870, 26855188, 96460424, 3240594, 98755278, 105951844, 110712086, 118850697, 123183109, 127513496, 503 ], "storeSequenceIndicesEnabled": false, "size": 229, "capacity": 256, "initialAcceptFraction": 0.125, "timeDecay": 1.0E-4, "sequenceIndexOfMostRecentTimeDecayUpdate": 0, "maxSequenceIndex": 504, "compressed": true, "randomSeed": -7062140655107411726 }, { "version": "2.0", "weight": [ -0.53298694, -0.5370285, -0.53302014, -0.5869225, -0.5386616, -0.53426373, -0.54588836, -0.6144738, -0.6666626, -0.55950403, -0.7248929, -0.5607794, -0.5471208, -0.57251537, -0.56006366, -0.6167674, -0.61541486, -0.817127, -0.6857935, -0.5771496, -0.6130053, -0.7751004, -0.80550486, -0.64279586, -0.67447525, -0.67872816, -0.5948092, -0.6225593, -0.7412373, -0.63900876, -0.6328384, -0.777648, -0.76546454, -0.74156725, -0.82844687, -0.8392029, -1.044082, -0.7329778, -0.99735993, -0.7560849, -0.7613802, -0.85758793, -0.62227815, -0.7803536, -0.88435996, -0.9483788, -0.8897424, -0.84419423, -0.76181144, -1.5871549, -0.9929117, -0.75543576, -0.7979167, -0.735058, -0.6214327, -0.7944632, -0.7902639, -0.83461565, -1.4979233, -0.7796874, -1.0374615, -0.8105296, -1.8733882, -0.8792849, -0.9162315, -1.1558676, -1.2506269, -1.1495136, -1.5213449, -2.2541447, -1.1921371, -1.3501981, -0.9838202, -1.0595492, -1.3465357, -0.9763687, -1.0712547, -1.4653171, -1.2853703, -2.0836577, -0.9410978, -0.96253556, -0.81756365, -1.3851339, -1.179112, -0.6709964, -0.76329947, -1.1769576, -1.4954052, -0.960525, -1.0389729, -1.2045083, -1.8349122, -1.461973, -1.300356, -0.95158595, -1.0056021, -2.020996, -1.2476102, -2.0049386, -1.8346143, -1.1478754, -1.8596087, -0.98516494, -0.99060625, -0.9482102, -0.8543665, -0.9581024, -0.94102937, -0.6761013, -0.95146936, -1.0973043, -0.88721204, -0.8015781, -1.2003738, -1.0721217, -0.8620344, -1.6259612, -3.8667881, -0.93236417, -0.8828107, -1.493874, -1.5099301, -2.5947087, -3.358613, -4.7279215, -2.1498632, -0.8850714, -0.9867246, -5.2405734, -1.5883927, -1.1818252, -1.1974761, -1.7496891, -4.0008407, -1.476634, -1.3821882, -1.875585, -1.6439567, -5.709731, -3.068541, -2.4429452, -1.776948, -2.922071, -1.7195975, -1.1998038, -1.2773302, -3.1672099, -1.4617462, -1.7898146, -3.2232401, -1.1349226, -1.3632929, -1.8463753, -4.629285, -1.6867559, -1.8657526, -1.5905323, -2.1952798, -3.075461, -2.5903156, -1.5011766, -1.6764424, -2.241862, -1.2524456, -2.0902004, -1.5791374, -1.4672202, -1.4199411, -1.2729433, -1.6486052, -1.5432082, -3.741604, -4.3343306, -3.1124523, -1.3878208, -1.808157, -2.4290116, -2.043054, -1.5419066, -1.6230438, -2.0333831, -1.5723906, -2.873767, -1.4621615, -2.5015512, -3.94249, -1.5258577, -1.8479875, -2.240764, -1.8996323, -1.2670697, -1.111706, -3.5020432, -2.166442, -2.0529845, -3.032947, -1.8734413, -1.9137822, -5.747706, -6.5535336, -1.8551661, -2.2223253, -3.246324, -2.2672668, -3.214827, -1.8734428, -1.175713, -1.2449504, -5.0981402, -1.1101719, -3.6191673, -1.1534905, -2.1083336, -0.95823085, -4.0686164, -1.2263622, -3.3285706, -1.6448618, -1.0919825, -2.5784686, -3.4817815, -1.2479918, -3.134906, -1.1962954, -1.6323433, -2.1114237, -0.8559951 ], "pointIndex": [ 0, 503, 228, 93009322, 32391791, 6112720, 29612775, 49771418, 18883514, 16121665, 86770664, 115266187, 34589577, 59516381, 18350350, 57759317, 39037044, 70805195, 26572791, 94168921, 109425411, 127831981, 15016203, 110821980, 85958860, 41693101, 72741503, 59203443, 116104014, 58329384, 62243579, 64305944, 121055088, 24881265, 111164926, 90454212, 93322042, 126810352, 106388250, 117830318, 126742863, 65345741, 3622619, 116568751, 73871814, 95430527, 114891825, 23449004, 108834772, 83860728, 850823, 61508947, 61397268, 103677019, 83368800, 70259113, 77359180, 66256039, 5203535, 64136609, 3428296, 127212426, 70500267, 8683920, 114219368, 78898989, 42583776, 84243156, 88572891, 1987234, 31681933, 53278978, 98360665, 117555367, 6829606, 109949533, 43916474, 120383937, 14474349 ], "storeSequenceIndicesEnabled": false, "size": 228, "capacity": 256, "initialAcceptFraction": 0.125, "timeDecay": 1.0E-4, "sequenceIndexOfMostRecentTimeDecayUpdate": 0, "maxSequenceIndex": 504, "compressed": true, "randomSeed": 8531256490203702939 }, { "version": "2.0", "weight": [ -0.5294597, -0.5576223, -0.5410471, -0.5649329, -0.58059883, -0.59872955, -0.59176224, -0.6084886, -0.7097818, -0.68805045, -0.585696, -0.6078537, -0.63380736, -0.59650224, -0.6027426, -0.61310583, -0.61372364, -0.7964455, -0.87056744, -0.7759881, -1.0372149, -0.65877354, -0.61011463, -0.72138506, -0.70972306, -0.66512847, -0.6612416, -0.5998607, -0.99996316, -0.9549136, -0.61410373, -0.8476963, -0.71036553, -1.085258, -0.96238244, -0.910108, -1.0033214, -1.1844999, -1.3858411, -0.8568252, -0.7952146, -1.0685524, -1.4095951, -0.66511136, -1.051108, -1.0629483, -0.8007286, -0.73972476, -0.78043693, -1.4360243, -0.74637586, -0.67966276, -0.74322665, -1.1533587, -0.8437019, -0.607716, -0.9872282, -1.437123, -1.2489737, -1.6970297, -1.6194949, -1.318194, -1.1215625, -1.0581961, -0.970132, -0.95887625, -0.8250626, -1.3179755, -1.2062294, -1.3604482, -0.9787357, -1.2869112, -1.631505, -1.0290068, -1.0062145, -1.8089368, -1.9163202, -1.7504554, -2.6891043, -0.92384803, -1.4413592, -1.8508644, -1.0570983, -1.1877431, -1.1719575, -1.9445239, -2.1189156, -1.4971766, -1.1050333, -1.5659459, -1.3083023, -1.3377016, -1.8765005, -1.0915056, -0.85164684, -0.8110967, -1.1261318, -0.7932666, -1.508754, -1.6883552, -1.631404, -1.2834219, -1.4985572, -0.74091995, -0.8910905, -0.76595217, -0.93938935, -1.5934051, -1.5612308, -1.3203666, -1.582214, -0.61047065, -0.9571381, -2.2664058, -4.521733, -1.4690771, -2.5001209, -1.6353573, -1.7051553, -4.229778, -2.168278, -2.514496, -2.2526808, -3.2943108, -2.1315482, -1.8274347, -4.216294, -1.5538868, -1.3124804, -1.8857366, -1.1115198, -3.7827122, -1.3951958, -2.5932121, -1.3097647, -1.6431139, -3.0072067, -2.1572142, -3.3944185, -2.2084262, -1.4533173, -1.2706913, -1.0741483, -1.6193907, -2.244457, -2.4748313, -2.0723145, -1.7034297, -1.3629124, -2.333396, -2.0661693, -3.5874333, -2.2120068, -2.2768779, -3.0420141, -1.7942852, -2.5977976, -3.8865256, -3.352928, -2.1355355, -0.93818676, -2.0091407, -2.7621565, -3.4339957, -2.5531046, -1.8565471, -1.6133701, -1.9098023, -3.2153764, -2.1790311, -2.8811343, -1.9575641, -2.8316908, -3.0212128, -2.1982098, -2.3480704, -1.7099223, -2.6372912, -1.7484987, -2.5965567, -2.7568269, -3.3684866, -1.8365451, -4.9798565, -2.7800128, -2.0807607, -4.2281303, -3.197505, -2.5512059, -4.6846085, -1.9073757, -5.087554, -1.0783356, -1.7837888, -3.4602354, -0.9112789, -1.9554101, -2.2751474, -2.8101778, -4.778091, -4.4575386, -2.9218266, -2.4827263, -2.644842, -1.5498966, -1.7656147, -1.668538, -1.9522663, -2.826835, -2.6780727, -0.95048386, -0.98014146, -2.483194, -3.975097, -1.8736228, -2.7426178, -1.6407981, -2.2753592, -2.0097847, -1.4792215, -1.7406603, -1.9646327, -2.2271302, -3.3145914, -1.0689687 ], "pointIndex": [ 0, 504, 225, 13403184, 111495485, 110075349, 95286179, 9082452, 105107231, 68503793, 92229860, 115741825, 7426527, 45483998, 54101854, 60557798, 69292652, 100886814, 28223841, 102230303, 35674633, 37336130, 3777454, 42419097, 45683484, 50447787, 51025294, 26013912, 101107105, 22461981, 30742553, 77687452, 78700000, 61768436, 35877561, 92404425, 98119292, 111182215, 227696, 3552227, 100345500, 38328637, 107160848, 41221529, 109380134, 52167691, 97181098, 51851055, 21633223, 125705045, 41500469, 53916530, 56440578, 33704439, 36584834, 19904467, 23136818, 86675926, 23851670, 71295809, 74103306, 75498188, 96884548, 6794077, 84836487, 89715102, 71070215, 91733595, 53489144, 29386823, 106303479, 20601240, 110642482, 33376894, 116785738, 2786544, 122652855, 128784580 ], "storeSequenceIndicesEnabled": false, "size": 225, "capacity": 256, "initialAcceptFraction": 0.125, "timeDecay": 1.0E-4, "sequenceIndexOfMostRecentTimeDecayUpdate": 0, "maxSequenceIndex": 504, "compressed": true, "randomSeed": 86567694310489782 }, { "version": "2.0", "weight": [ -0.548254, -0.5607937, -0.57866526, -0.5624324, -0.5818964, -0.6089347, -0.6727932, -0.562878, -0.5639682, -0.6208581, -0.59887177, -0.72257894, -0.620159, -0.68043953, -0.7551201, -0.73569727, -0.6401625, -0.84797335, -0.6484228, -0.6759319, -0.8306258, -0.6635486, -0.64221096, -0.7404873, -0.7288819, -0.62848085, -0.76633126, -0.7984979, -0.9023936, -1.33871, -1.1491896, -0.7609833, -0.9475599, -0.7572917, -1.2838012, -1.1049031, -1.1746876, -0.6899676, -0.88186604, -0.8181633, -0.680215, -0.8640347, -1.1342883, -0.7576444, -0.8179945, -0.6939694, -0.8686436, -0.8221472, -0.84974766, -0.73687667, -1.1154488, -0.7298011, -0.76152563, -1.2177804, -0.9150309, -0.96158725, -0.8462979, -1.1513401, -0.9344139, -1.6353195, -1.3437028, -1.4996282, -1.3432597, -2.301112, -0.8197572, -1.2027588, -1.1205764, -0.87856936, -1.5738864, -2.232956, -3.8641906, -1.4949442, -1.4932362, -1.2822062, -1.7245877, -0.9485146, -1.4527066, -0.93614507, -1.469078, -0.85976386, -1.3209335, -0.7144693, -0.68033046, -0.9082166, -1.9164375, -1.7172593, -1.4276229, -1.3900268, -1.3021207, -2.0078642, -1.8958111, -0.9743969, -1.3751584, -1.2233984, -1.2176247, -0.9189738, -0.91843736, -0.9539633, -0.8822781, -1.2415289, -1.7231786, -1.578393, -1.3576747, -1.1325957, -1.0613661, -1.2737293, -1.2220944, -1.7856517, -1.8723731, -1.3435957, -1.2633096, -1.1389157, -1.1266003, -0.8861719, -0.85776955, -1.6702726, -4.3272867, -1.3503591, -1.742206, -2.5929413, -2.5635533, -1.3737376, -1.3955579, -1.5927967, -4.3128505, -4.2600355, -2.501178, -3.3870676, -3.9008584, -4.1824965, -3.6452065, -1.3949506, -1.9210273, -1.967188, -1.536652, -3.3252275, -2.2511718, -1.9874296, -1.7335365, -2.4373407, -2.9089544, -3.9528072, -4.4839187, -1.9656321, -1.8781765, -3.0906434, -5.065713, -4.014744, -3.8616838, -1.7609141, -2.0917294, -1.860987, -2.1770885, -3.6821332, -3.2795827, -1.9278725, -2.6800344, -5.78242, -1.4867266, -3.017378, -1.3494822, -2.7585256, -1.5266467, -7.224387, -1.0098683, -1.9480876, -1.9703789, -3.3225334, -1.389721, -1.9282464, -2.6578705, -2.8685904, -2.8504508, -6.6986213, -1.6179367, -1.5962142, -1.4038852, -1.6786649, -2.472646, -3.1394675, -2.1794803, -2.0659873, -3.158665, -3.1141348, -2.071478, -4.5385494, -3.6139581, -1.9906989, -3.6913047, -3.636456, -1.5532333, -5.768992, -4.82517, -1.4060777, -2.8837552, -2.9799287, -1.0938119, -1.9560072, -1.0404767, -1.7204325, -2.9698248, -3.0281875, -2.0829344, -2.106153, -1.9701356, -3.1649125, -5.150452, -1.2197741, -2.5101361, -2.1056838, -2.6430736, -2.108021, -4.4657874, -3.626636, -1.2784696, -2.9364944, -1.8963417, -2.7525795, -3.784847, -2.3326762, -4.461001, -1.4812615, -1.3003786, -1.3552235, -1.7875011, -3.5720217, -1.2042733, -1.1229393, -2.3410068, -1.7073672, -1.6788995, -3.0060105 ], "pointIndex": [ 1, 499, 232, 35644102, 95620906, 18805749, 81317621, 34604771, 47007327, 62586261, 93525848, 105772867, 1836297, 36431055, 52379127, 52079831, 61376238, 85044418, 41659805, 90062343, 31183374, 117254947, 107884975, 30201518, 39283927, 70478305, 27333242, 49959075, 52821453, 57541686, 61873590, 66612382, 45591007, 26443451, 49454191, 82171151, 99534729, 96420884, 101045942, 30411828, 59671855, 37696441, 3305404, 35179351, 67193486, 79432577, 115617457, 55276385, 21088404, 113881020, 8555817, 47485812, 75662933, 9315052, 74555298, 57313488, 114520082, 59780069, 10015857, 112869350, 82799122, 116286262, 106461743, 112690456, 55923115, 104375627, 76843016, 80456232, 111216669, 84333327, 88958071, 90820851, 94593823, 98821972, 16298556, 103044415, 104144207, 111522983, 116762199, 123031926, 498 ], "storeSequenceIndicesEnabled": false, "size": 232, "capacity": 256, "initialAcceptFraction": 0.125, "timeDecay": 1.0E-4, "sequenceIndexOfMostRecentTimeDecayUpdate": 0, "maxSequenceIndex": 504, "compressed": true, "randomSeed": 6252646384454912542 }, { "version": "2.0", "weight": [ -0.48593023, -0.49811634, -0.5051228, -0.52852297, -0.4998905, -0.50856495, -0.56792754, -0.58318883, -0.5442299, -0.57571816, -0.5104713, -0.5443268, -0.5515343, -0.60608447, -0.6757374, -0.6830418, -0.6755409, -0.59016246, -0.5454576, -0.7096835, -0.61583054, -0.5266673, -0.51681995, -0.56019515, -0.5993234, -0.6495098, -0.6438212, -0.61164343, -0.65656334, -0.72602475, -0.8520472, -0.8298695, -0.68893903, -0.80443794, -0.8151453, -0.6248744, -0.7932084, -0.5832469, -0.59996295, -0.7268257, -0.8978948, -0.628976, -0.703311, -0.9101348, -0.7230928, -0.7509946, -0.81770027, -1.0394619, -0.5726214, -0.9880306, -0.7951019, -0.8072624, -0.8245114, -0.7996366, -0.64646524, -0.6428294, -0.62054175, -0.7876593, -0.95186293, -1.3845879, -1.0309538, -1.4924188, -0.8735874, -0.9024334, -1.887193, -0.73925686, -0.7173001, -0.89899385, -1.2966541, -2.1132953, -2.0209932, -0.92569464, -0.66766036, -1.3062632, -1.2196876, -1.1793561, -0.70380116, -2.359043, -1.2396822, -1.0203435, -0.9604665, -1.758841, -1.2739277, -0.69405615, -1.3159864, -0.9570915, -1.4841802, -1.0174404, -1.4231768, -0.9732836, -0.95332456, -0.87739766, -1.1183963, -1.3045577, -2.6690967, -1.071694, -1.3986906, -0.6189145, -0.8985403, -1.2814728, -1.7861696, -1.1929153, -0.8898458, -0.86690474, -0.80744475, -1.1774896, -1.108945, -2.056511, -2.0676262, -0.7846663, -0.81444526, -0.6766059, -0.9041935, -0.73590857, -0.6264732, -0.81851256, -2.6052191, -1.8843722, -1.044584, -1.6357023, -1.6401404, -1.5270939, -2.2869985, -1.7568169, -1.7991313, -3.001768, -5.336341, -1.6224685, -1.0219606, -4.603571, -4.1932673, -3.042347, -1.9126862, -0.7629551, -3.189313, -2.7016556, -1.118586, -2.1607187, -2.0055864, -2.7484715, -3.1684074, -3.83769, -2.0820234, -1.0559535, -1.1772017, -1.330181, -1.6856858, -1.6979719, -2.530777, -2.7738214, -2.2110868, -1.4996016, -1.2965591, -4.6498537, -1.8551095, -2.5414307, -3.570963, -1.2399164, -2.8060694, -2.1512334, -1.8322636, -4.8060484, -1.9000674, -2.0965776, -2.3850784, -4.606346, -2.907361, -3.545009, -1.0164293, -2.7142386, -3.3618717, -1.5112023, -0.9955293, -2.7666876, -2.1661737, -1.4990155, -1.3076473, -2.456527, -1.6418482, -2.2069795, -1.9657013, -3.255251, -1.8241007, -1.5874321, -3.0413682, -2.5288503, -1.122015, -3.3506832, -1.7865183, -3.0265481, -3.1617188, -2.043597, -1.6243017, -1.6693872, -1.8202813, -6.2588425, -0.658507, -1.9051749, -1.0312359, -1.6516533, -2.6110055, -2.2804751, -2.2768223, -2.914403, -3.3968577, -1.5329814, -4.7806764, -1.8757861, -2.1339443, -1.2909119, -3.560735, -1.4998031, -1.5749999, -1.4923608, -1.1537538, -4.7296, -2.440965, -4.2241488, -2.3822827, -2.3952546, -1.0642797, -1.7057232, -1.2805316, -1.9372311, -1.3188204, -4.5041175, -2.726005, -0.8250985, -1.1002651, -1.376234, -0.9265303 ], "pointIndex": [ 1, 498, 231, 121903249, 82609045, 53657487, 83469870, 10321709, 50627244, 59885212, 77692286, 98141695, 87402624, 42160830, 8468170, 77416666, 34591308, 12532761, 26185935, 91499350, 75331836, 123483511, 15452988, 8325712, 21363363, 118013789, 86219309, 88635229, 28187500, 91925545, 114866803, 64359771, 1014791, 70322355, 116900125, 101094304, 84425561, 104223812, 97907689, 110328330, 121265951, 35245592, 15199966, 38695244, 37808698, 4744599, 87014766, 41946632, 10751397, 44730152, 21616370, 52919691, 114313344, 12902561, 117409059, 113520849, 57750588, 58573017, 114622407, 72330758, 23440117, 26354919, 68648928, 68002172, 25188338, 71817058, 87196418, 12687349, 25351371, 82891487, 84141569, 88845534, 90204855, 95439583, 117258970, 6922222, 110083821, 115550392, 14129703, 84815374 ], "storeSequenceIndicesEnabled": false, "size": 231, "capacity": 256, "initialAcceptFraction": 0.125, "timeDecay": 1.0E-4, "sequenceIndexOfMostRecentTimeDecayUpdate": 0, "maxSequenceIndex": 504, "compressed": true, "randomSeed": -3921434996928360891 }, { "version": "2.0", "weight": [ -0.59787774, -0.60145414, -0.6037318, -0.60338205, -0.6137846, -0.6112629, -0.62412167, -0.62555826, -0.692133, -0.703087, -0.62788475, -0.6285306, -0.6236274, -0.73515266, -0.738029, -0.7654694, -0.6870156, -0.73044413, -0.7317749, -0.7283749, -0.9046549, -0.63757515, -0.90129393, -0.63576126, -0.65300924, -0.6393257, -0.624173, -1.0669246, -0.8360199, -0.88732535, -0.9085496, -0.8281918, -1.0321151, -0.69639766, -1.056624, -0.7568813, -0.83730763, -1.3531302, -0.79367673, -0.746458, -1.0654767, -0.9303029, -1.0939734, -0.8892214, -0.6607892, -1.0712175, -0.97386837, -1.092996, -0.82881105, -0.70330036, -0.80185133, -0.8514173, -0.69828564, -0.70050687, -0.6848632, -1.1613108, -1.4207476, -0.8566658, -1.1068753, -1.0668347, -1.0640814, -1.2468433, -1.1292615, -1.0954584, -1.9068737, -1.4202605, -2.034829, -0.73155093, -0.86568165, -2.4108014, -1.6762967, -1.0485967, -1.0873181, -0.904395, -1.1199968, -2.1598327, -1.4283174, -1.0384696, -0.84582597, -2.4886782, -0.7779316, -1.0970025, -1.1856172, -1.9569024, -3.981397, -1.3820696, -1.8495582, -1.303945, -1.7128863, -0.851952, -1.3258555, -2.0642643, -1.0822942, -1.0181471, -1.0585626, -1.5800385, -1.1739537, -0.9560621, -1.034065, -0.7476173, -1.2199632, -0.8563682, -1.7596116, -0.9308764, -0.9294558, -0.700496, -0.9780324, -1.3246034, -0.9090146, -1.4302996, -0.76940614, -3.9980063, -2.1296775, -1.9396099, -2.2312093, -1.1239054, -3.0561671, -1.9985267, -1.5552648, -1.8671099, -1.8968765, -1.5244303, -1.5921745, -1.4288629, -1.7421844, -2.1218357, -1.7104133, -2.6510508, -1.3104323, -3.057764, -2.031021, -1.4565883, -2.0348382, -2.2601967, -2.920707, -1.2729836, -3.1982338, -0.99266785, -1.7109475, -2.6560607, -2.4753838, -2.1877108, -2.064123, -1.1081226, -3.0854433, -5.3121643, -1.3218622, -2.3300076, -3.1619358, -1.2176294, -1.3897915, -4.1942477, -2.4851782, -2.5883253, -2.5248022, -1.5893021, -3.42884, -1.4305729, -1.9520689, -3.5295646, -2.5297673, -2.0775554, -1.0084162, -1.5056899, -1.9147689, -1.6083453, -1.1871455, -2.0726132, -2.1473198, -4.442302, -4.670319, -3.5520089, -1.6042694, -3.1528566, -4.5269594, -2.1927118, -1.8097452, -2.7539496, -4.4474444, -1.2035335, -1.1168379, -1.3293927, -2.0163567, -2.2053635, -3.6734867, -2.1019855, -1.3774385, -1.8108878, -1.7328309, -4.0557847, -6.4212666, -2.2095923, -5.359125, -1.4784194, -2.1430738, -3.644639, -1.284663, -3.362314, -1.093306, -2.4446, -1.1570675, -1.4576575, -2.2837992, -4.856039, -1.7351286, -2.236084, -2.0651164, -1.4864243, -1.4940932, -1.6566368, -1.8886653, -0.74667937, -2.0818756, -1.1767255, -1.7952884, -1.5501437, -1.3899502, -1.6304728, -1.4943737, -2.758686, -2.8887265, -2.2842896, -1.0909864 ], "pointIndex": [ 4, 503, 223, 84054172, 109366651, 51339656, 88791098, 4072988, 54556737, 75121037, 86904619, 102956360, 91321010, 118585526, 78577257, 63311712, 67181236, 52778, 82908703, 94184616, 106563399, 78881456, 66679141, 41331958, 7050563, 48465170, 96787920, 37268129, 82110402, 59620455, 119453249, 71640439, 75552290, 77771305, 46659868, 28981394, 62183364, 12446746, 13219385, 115972942, 52801009, 61792140, 572087, 39266840, 2980561, 32084687, 45569065, 39983677, 47592681, 3347835, 123538200, 52604221, 20106550, 54042751, 22117839, 58149627, 116452996, 61076830, 66799983, 69136378, 40642821, 22894287, 123149293, 33336803, 77739806, 81458609, 81692046, 85920934, 87924055, 30059320, 92925472, 95823877, 99698152, 121454403, 59960944, 116220425, 117475741, 499 ], "storeSequenceIndicesEnabled": false, "size": 223, "capacity": 256, "initialAcceptFraction": 0.125, "timeDecay": 1.0E-4, "sequenceIndexOfMostRecentTimeDecayUpdate": 0, "maxSequenceIndex": 504, "compressed": true, "randomSeed": -7058296641388226677 }, { "version": "2.0", "weight": [ -0.54927164, -0.55799776, -0.56177443, -0.5784826, -0.5607427, -0.5943863, -0.56446606, -0.63234544, -0.6444895, -0.6149962, -0.5726348, -0.6144211, -0.5976512, -0.9134983, -0.5969545, -0.6978777, -0.662781, -0.6462334, -0.82320976, -0.62632024, -0.78237295, -0.6009164, -0.71237713, -0.63300943, -0.68879, -0.8736334, -0.6628779, -1.0856007, -0.92329025, -1.0283417, -0.772051, -0.78350765, -0.8919709, -0.7718917, -1.0579466, -0.7923724, -0.69287163, -0.8952094, -0.85189104, -0.65595937, -0.7328316, -1.1698253, -0.95717037, -0.8587923, -0.64600074, -0.73141485, -0.87741977, -1.103363, -0.63726646, -0.8150458, -0.74368244, -0.8759372, -1.081512, -0.71728975, -0.688069, -1.2152156, -1.1525712, -1.2191999, -1.0493709, -1.5191622, -1.5661151, -1.6331143, -1.2799627, -1.7562692, -1.150978, -1.178991, -0.9250156, -0.86997193, -1.4348046, -1.4207041, -1.1504325, -0.81934685, -1.3765908, -1.1598345, -0.76282966, -1.2485176, -0.9627283, -1.0175, -1.3302476, -1.4262129, -0.73058355, -0.7768302, -1.0742236, -1.2367499, -1.4979956, -1.3816236, -1.5363247, -1.4642798, -1.3516219, -0.72886014, -0.84243894, -1.1391242, -0.816415, -1.2249358, -1.1653829, -1.1568464, -1.409465, -0.7573363, -1.8553492, -0.9267509, -1.277529, -0.84015083, -1.4367083, -1.1704016, -1.0822623, -1.9117612, -1.4373354, -1.1935893, -0.72218204, -0.9773071, -2.307135, -1.6119989, -1.4311005, -1.6152966, -3.8505075, -2.5684729, -1.4745631, -2.283275, -1.9480804, -1.5828394, -2.2038364, -1.8381954, -2.7674043, -3.1706169, -1.6801208, -1.4045823, -3.458629, -5.5322, -2.0492415, -1.3397441, -1.2684066, -1.728175, -4.826077, -1.3611041, -1.0132012, -2.3263867, -1.668477, -5.789353, -1.8627526, -3.0538514, -4.4253926, -1.650529, -2.3139496, -2.480115, -3.4141963, -2.1213675, -1.5043126, -1.4033012, -3.1311145, -0.9516954, -2.1204515, -3.598058, -1.4977916, -1.0788697, -1.3113519, -3.0442638, -4.627087, -2.0146139, -1.3869731, -2.342794, -1.5375688, -1.2935922, -4.4602623, -2.0731196, -4.6459804, -3.7177625, -3.0546892, -2.069629, -1.2756584, -3.0119967, -1.6468534, -1.5275029, -2.2072217, -2.840689, -1.5935591, -1.7980634, -2.1122496, -3.8701308, -2.2193303, -3.620466, -1.0340712, -1.5489097, -2.2800333, -1.4681567, -4.295331, -0.97169226, -1.1701701, -1.4693524, -1.9215053, -1.4616832, -2.4838266, -1.2926298, -1.2791344, -1.4447894, -2.3319173, -2.0730073, -2.3841429, -1.9727724, -1.9029855, -3.8191602, -3.4143884, -1.6520147, -3.1560063, -1.1492236, -1.8619269, -2.8565183, -1.4807147, -2.1151505, -2.7476447, -1.7275034, -2.7608826, -1.9752641, -2.1960561, -1.7852536, -1.7566513, -1.6960467, -1.3483127, -1.7708883, -2.5635688, -1.6335524, -1.4366835, -3.7009428, -2.626339, -2.0646389, -2.1659148, -1.484712, -3.0297914, -2.1841908 ], "pointIndex": [ 0, 504, 228, 97198270, 59470988, 65381995, 79952849, 36792402, 51276755, 81752643, 80230109, 118281718, 109930419, 80413679, 71166889, 21318653, 24855703, 67265095, 120795767, 29750424, 113188732, 33589531, 31694451, 112099069, 13232518, 45225703, 49060933, 51105009, 20662083, 57749492, 63758790, 24384450, 110219280, 70322865, 77580408, 53260142, 91836161, 96841947, 6839269, 120096698, 105828287, 108808445, 19274606, 119428017, 44259364, 8363462, 41650447, 68138301, 125558726, 47495101, 4398592, 49768486, 11787755, 53595347, 76192272, 56214662, 31031249, 58698945, 22561727, 61418247, 62348906, 64188278, 66035284, 86677956, 26292697, 28510053, 6018892, 126800998, 83629329, 90448353, 29246911, 99134894, 119796088, 45558469, 108328045, 60162587, 121171674, 124007771, 85941694 ], "storeSequenceIndicesEnabled": false, "size": 228, "capacity": 256, "initialAcceptFraction": 0.125, "timeDecay": 1.0E-4, "sequenceIndexOfMostRecentTimeDecayUpdate": 0, "maxSequenceIndex": 504, "compressed": true, "randomSeed": 1617599988107384674 }, { "version": "2.0", "weight": [ -0.49086484, -0.49165273, -0.49508175, -0.6431985, -0.5937614, -0.50219905, -0.573946, -0.6606333, -0.67695975, -0.66005003, -0.63093185, -0.5548935, -0.5702439, -0.71829444, -0.60590047, -0.7012481, -0.7132402, -0.729588, -0.697213, -0.69351006, -0.72366875, -0.6569782, -0.7441715, -0.58781534, -0.5558926, -0.67732096, -0.5800482, -0.7528965, -0.81201863, -0.7412216, -0.6288245, -1.2486026, -0.75286245, -0.72401667, -0.71564144, -0.76534486, -0.9099728, -1.0183343, -0.70542717, -0.70135754, -0.91260487, -0.8092986, -0.7336066, -0.7567574, -0.7708158, -0.84383863, -0.81836164, -0.68041724, -0.6287525, -0.6440457, -0.7410818, -0.7212312, -0.71242625, -0.67231476, -0.63468635, -0.7622313, -0.8208822, -1.1445706, -0.94941014, -0.8612036, -1.707661, -0.9243854, -1.9626482, -1.5958457, -1.3077794, -1.1861492, -1.1635512, -2.1751227, -0.8469007, -1.4496542, -1.5342058, -0.96538514, -1.3460073, -1.419018, -1.0653356, -1.2852613, -1.2012281, -0.8473538, -0.8943203, -0.8048798, -1.167146, -1.3002725, -1.0605211, -0.92645526, -1.69568, -0.7741866, -1.0942045, -1.6122143, -0.9987477, -1.2992978, -1.3553501, -1.4368896, -1.2315027, -1.1274419, -1.8796052, -0.9360587, -1.1173197, -1.2018306, -1.2060379, -0.7550845, -1.3723761, -0.92328745, -0.9710938, -1.2305354, -1.0390061, -1.0124133, -0.734787, -0.6868354, -1.0925033, -1.7397844, -0.75704724, -0.93412423, -1.0038755, -0.8340533, -1.0903175, -1.6320931, -5.0747957, -1.2733006, -2.6070294, -2.010462, -1.7844871, -3.348369, -2.3121226, -1.5482043, -0.97831064, -2.7482018, -2.2871487, -2.119465, -2.905391, -2.1168177, -3.059811, -1.3497925, -2.189309, -1.8456689, -2.1114528, -2.5084443, -2.2272942, -1.8464441, -2.7921028, -4.0985055, -1.874381, -4.627585, -2.7565491, -1.4172932, -1.0251176, -2.5863686, -2.255447, -5.3265395, -1.7419072, -1.784064, -1.4473236, -2.1382859, -1.6768821, -2.059615, -2.2160065, -0.94110626, -2.160445, -1.3646688, -1.2020136, -1.2484066, -2.6778018, -2.6019099, -2.7626283, -1.5040901, -2.4336689, -1.3975806, -5.2075863, -1.9458374, -1.9337393, -2.611955, -2.93051, -2.350819, -1.2660667, -1.3496511, -1.3058685, -3.110164, -3.809094, -3.3404458, -1.8760198, -1.8080118, -1.6777174, -2.7298841, -1.9431881, -2.405735, -1.4490008, -1.3650403, -1.4648993, -1.7826031, -1.1778947, -1.9751103, -2.531089, -2.5696335, -6.8766155, -3.561331, -1.7344441, -2.2454484, -1.7390339, -1.3827872, -1.3778417, -1.3080233, -1.2370479, -4.110881, -2.2114515, -2.4566734, -1.7254595, -1.7614281, -0.99026966, -2.1424553, -1.7575904, -4.0985904, -1.8833361, -1.3063549, -1.2607809, -0.82764417, -0.8102777, -2.1919854, -1.403665, -1.3009878, -2.792962, -3.3374386, -2.8087707, -2.2060149, -0.84837985, -2.9999259, -1.3997679, -2.5588124, -2.0231915, -1.9132456, -0.84803754, -1.3362615 ], "pointIndex": [ 0, 504, 230, 110086351, 101424723, 52573038, 95008443, 15560022, 19982898, 64057438, 79464555, 107052269, 93002383, 42159278, 49496892, 119779632, 111113351, 26064893, 12176857, 6657738, 108593992, 126506494, 72496706, 42621811, 18129767, 4097229, 1824239, 9341177, 109152575, 22442466, 82928928, 91678956, 79276268, 118732690, 78958311, 6067895, 97094175, 103002712, 107319471, 120864622, 2795147, 34753592, 3642607, 37322672, 25049365, 75391554, 12835239, 106173089, 43755132, 117583954, 46761671, 8965966, 50974275, 95736136, 97367112, 59029487, 86855671, 126257878, 123292235, 65843424, 64392139, 65590301, 72222837, 118300295, 76401247, 77680057, 27451418, 81917883, 28498094, 33457347, 99015206, 98379937, 100477882, 105021239, 106810149, 116519442, 74534426, 122909395, 125209175, 255019 ], "storeSequenceIndicesEnabled": false, "size": 230, "capacity": 256, "initialAcceptFraction": 0.125, "timeDecay": 1.0E-4, "sequenceIndexOfMostRecentTimeDecayUpdate": 0, "maxSequenceIndex": 504, "compressed": true, "randomSeed": -8928687457762026561 }, { "version": "2.0", "weight": [ -0.56832755, -0.5909885, -0.5748976, -0.60423553, -0.60178524, -0.60157627, -0.587748, -0.7172052, -0.6241009, -0.60629946, -0.6160531, -0.63146806, -0.608597, -0.59321743, -0.6879986, -0.783219, -0.8522558, -0.6727227, -0.8268062, -0.62091374, -0.61043733, -0.74049455, -0.7057798, -0.796559, -0.87044466, -0.70782137, -0.7786673, -0.6604127, -0.8732423, -1.4029797, -0.7945969, -0.8747885, -0.8368457, -0.95190823, -0.9993142, -0.8970017, -0.93625695, -0.84799105, -0.8354849, -0.79125404, -0.799949, -0.67009306, -0.7891741, -1.4105603, -0.8896512, -1.0135485, -0.929001, -0.886674, -0.8006716, -1.4901229, -1.2618842, -0.90933096, -0.8073693, -0.8621052, -1.0471725, -0.7722495, -1.3036199, -0.87458843, -1.4554368, -1.5855098, -1.9130875, -0.94120586, -1.0607948, -0.9088619, -1.4801517, -0.99234706, -1.3816286, -1.2490814, -1.1207249, -1.8138934, -1.0425998, -1.4596838, -1.6276789, -1.2308221, -1.0301083, -1.1402522, -1.4639021, -0.9087255, -1.0546715, -0.9879512, -1.1541631, -0.82525426, -1.0790806, -0.9471458, -0.85101986, -1.233984, -2.3894157, -2.9223077, -1.5428509, -1.5711381, -1.0467322, -1.8167585, -1.3438088, -1.2582407, -1.2467229, -1.6579001, -1.990238, -1.5339531, -1.0503933, -1.6122134, -1.8513618, -1.6831448, -1.2689091, -1.0429959, -1.3003299, -0.8789561, -0.94471043, -1.4198842, -2.455136, -1.2004322, -1.2269163, -1.12566, -0.7759718, -1.4541564, -4.4826355, -1.3858997, -1.4449863, -1.9620763, -1.6177365, -1.7349641, -1.9133793, -3.974498, -2.1262734, -1.7611657, -1.681921, -2.7635946, -3.0031888, -5.914061, -1.1342934, -2.911582, -1.8979477, -1.1300302, -2.3564131, -2.2195525, -1.4680218, -1.3823087, -3.8461316, -2.432869, -1.3012831, -3.8942091, -2.4783866, -1.3676889, -1.2583317, -2.443607, -3.2685487, -2.3278441, -4.7823668, -1.8398348, -2.6126237, -2.504085, -1.9899489, -4.835528, -2.721473, -2.3454478, -3.7778504, -1.8538367, -1.1873996, -1.3453918, -1.1090251, -5.224681, -1.4397637, -1.180208, -1.9746033, -1.0095749, -1.1477605, -4.054302, -1.5409443, -1.0316113, -5.2108626, -3.1235392, -1.0136346, -4.280433, -1.3601183, -3.8717458, -2.4440918, -4.286065, -5.50645, -2.420915, -1.6485515, -2.066975, -3.7196562, -2.0036898, -1.4285997, -3.475406, -3.0394547, -2.7931194, -1.4155692, -3.79178, -5.0270667, -2.0082972, -1.690726, -2.5187201, -1.95259, -3.773377, -2.530886, -2.3352246, -2.2920215, -2.7772734, -1.3019248, -2.7455304, -3.8654735, -4.183722, -1.9184648, -2.168456, -2.1282635, -3.9138813, -1.7724588, -1.7226524, -1.1068506, -1.533566, -2.2625072, -1.0837358, -2.4536111, -1.4014043, -1.1351576, -1.6732528, -1.6587623, -3.43352, -3.4383984, -3.6564918, -1.3637918, -2.2445352, -5.1128774, -3.1354551, -2.1848104, -1.7619399, -1.5470188 ], "pointIndex": [ 0, 503, 227, 90623523, 26277715, 80852668, 96154707, 16002266, 21880427, 115108, 28454336, 115537322, 58754191, 101519352, 45299020, 20168772, 63804658, 71557155, 80167543, 935797, 115024005, 32761132, 34830558, 16272046, 19323507, 94634636, 3442190, 49227875, 52614915, 87997601, 47361516, 71328471, 11621999, 21571484, 126664324, 29477886, 91369324, 97478496, 112493209, 118859279, 14477878, 103491542, 100150288, 121802827, 1599154, 37090009, 39107810, 40467407, 17810789, 42202527, 43379152, 74173352, 22488157, 60973194, 77940776, 75755120, 54860923, 72404857, 52348407, 69212122, 65407855, 100722638, 116220869, 24021941, 75225950, 105001139, 68756504, 82152011, 6260319, 93904377, 27998054, 112965178, 106109504, 105443757, 48993265, 116075177, 119873334, 126231308, 253639 ], "storeSequenceIndicesEnabled": false, "size": 227, "capacity": 256, "initialAcceptFraction": 0.125, "timeDecay": 1.0E-4, "sequenceIndexOfMostRecentTimeDecayUpdate": 0, "maxSequenceIndex": 504, "compressed": true, "randomSeed": -1388995391054092274 }, { "version": "2.0", "weight": [ -0.31804442, -0.43489292, -0.42907506, -0.4363616, -0.45597282, -0.46680713, -0.46190825, -0.5677014, -0.4563058, -0.6166242, -0.5039146, -0.6246354, -0.4707326, -0.47779357, -0.49204805, -0.64231163, -0.6764985, -0.46582282, -0.51274574, -0.6255991, -0.6194547, -0.5232377, -0.63157463, -0.6706966, -0.63934845, -0.5277276, -0.48863217, -0.49394917, -0.4862815, -1.0154939, -0.64515084, -0.7793933, -0.6908473, -0.7567321, -0.7171721, -0.46691778, -0.8643776, -0.51696473, -0.84084165, -0.6723087, -1.7153779, -0.62704635, -0.9834292, -0.6648248, -0.6621618, -0.82280827, -0.82331115, -0.679924, -1.0636495, -0.6468792, -0.8472379, -0.5683926, -0.61848426, -0.9037221, -0.49113053, -0.638287, -0.5134129, -0.88270605, -0.5657373, -1.0913377, -1.5473504, -0.8016271, -0.75376856, -1.2727239, -1.094562, -0.7468163, -0.72751355, -0.81397045, -0.93953127, -0.94911826, -1.8311458, -1.4125476, -0.5176985, -0.87438446, -1.5910777, -0.9631172, -0.62825584, -0.92554176, -1.268599, -1.4888319, -1.1603714, -1.9172816, -1.8976915, -0.7566482, -0.62849605, -1.0634012, -1.5461874, -2.2122335, -0.96318877, -0.95302933, -0.94853485, -0.9550196, -1.105756, -0.8768027, -1.3013245, -0.70743793, -1.454751, -1.20427, -1.0981193, -0.9563045, -0.75259453, -1.0261632, -0.9617375, -0.5910247, -0.9938949, -0.99083114, -0.6719092, -0.9257738, -1.8758082, -1.348569, -0.65144736, -0.71926266, -0.78749126, -1.4659787, -0.6161229, -0.9727178, -0.8877861, -1.0888059, -3.7083657, -1.3748552, -2.400187, -2.0805056, -3.7978256, -0.9706547, -1.2985879, -1.1572261, -1.219806, -1.541234, -1.8615499, -1.7287426, -1.1255622, -2.70784, -1.9170482, -1.4877199, -0.9863343, -2.0110765, -4.1267276, -1.8231001, -1.3878483, -2.3702366, -1.6555223, -1.9235884, -1.8364646, -1.6715032, -2.3337338, -1.5348499, -1.0097706, -2.8215172, -3.0130804, -1.6238242, -2.696633, -2.2997658, -4.003807, -1.4826674, -2.679388, -1.0749161, -1.9095988, -1.6551454, -4.2207875, -3.1003954, -1.5809857, -1.9965923, -4.100097, -3.2477396, -3.553958, -2.510146, -2.1376574, -4.343759, -2.1196232, -1.479722, -1.9746994, -1.1078998, -1.1593446, -2.383345, -2.3589444, -3.51402, -2.245927, -3.295619, -1.8285325, -1.9398905, -1.5956552, -3.3970203, -1.0234499, -2.2899134, -3.5824833, -7.324093, -1.2620987, -1.6717616, -1.4615635, -1.7714953, -4.0805354, -1.5767369, -0.87090784, -3.132244, -3.5286536, -1.3311883, -1.6633921, -1.9951661, -1.3551797, -1.4291936, -1.3036424, -1.4725003, -1.4442756, -2.8375487, -3.914979, -1.1315118, -3.6979558, -1.0114822, -0.91020817, -2.0747359, -2.1834383, -4.4955087, -1.40393, -1.6697918, -0.9387991, -1.2710674, -1.8251337, -2.156713, -3.0485265, -1.4951202, -2.7489276, -3.3636158, -1.2925293, -1.7190237, -1.1842874, -1.8158754, -1.7622224, -2.1716104, -2.079569, -3.835428, -1.0511314, -2.020286, -1.0010629, -1.6464177, -2.954303, -3.444575 ], "pointIndex": [ 0, 504, 236, 93894141, 57235403, 51292171, 29464013, 37198160, 20519697, 54427788, 84068462, 106255160, 1774023, 40074331, 4427759, 3079778, 85663388, 63804879, 12519718, 114932833, 98378907, 15180335, 36213183, 37758740, 119174445, 105153785, 46290997, 62143965, 41946504, 52128933, 23058516, 59278899, 2045518, 69088865, 72568272, 81874749, 123341018, 96074422, 31051790, 105784766, 60160276, 127761926, 2368005, 117854012, 38401570, 73269329, 24952653, 63326851, 106430149, 47568139, 19470288, 1875865, 48137184, 47189058, 109022512, 54731519, 11246436, 124472607, 101606598, 56372736, 57755438, 58921712, 105448807, 64277816, 86411819, 26917341, 652065, 115585707, 86867912, 28333852, 115424301, 91242285, 6613002, 96842457, 2992981, 116744267, 32198787, 112944186, 117543238, 123927971, 18612777, 207553 ], "storeSequenceIndicesEnabled": false, "size": 236, "capacity": 256, "initialAcceptFraction": 0.125, "timeDecay": 1.0E-4, "sequenceIndexOfMostRecentTimeDecayUpdate": 0, "maxSequenceIndex": 504, "compressed": true, "randomSeed": -1996687561581955494 }, { "version": "2.0", "weight": [ -0.5846756, -0.58689344, -0.60667974, -0.6030738, -0.5918051, -0.6205509, -0.61719275, -0.6469364, -0.6475224, -0.65886086, -0.618924, -0.7007284, -0.6607422, -0.6618274, -0.82475907, -0.73422694, -0.6774076, -0.75282896, -1.0639298, -0.8307625, -0.88619107, -0.65084374, -0.7746913, -0.8276962, -0.73104393, -0.7153365, -0.6641185, -0.69109845, -0.78577524, -0.8427952, -1.0567325, -1.8381795, -0.73889744, -0.92306626, -0.73201686, -0.80058616, -0.9315472, -1.1340989, -1.1253422, -1.049055, -1.1059141, -1.3064846, -1.0086405, -0.92371744, -0.6526815, -0.7937004, -0.8038962, -1.2402302, -0.8927977, -0.7664857, -0.8206795, -1.4141115, -0.7470262, -0.717384, -0.7282268, -0.7670583, -0.71265644, -1.056092, -0.94361395, -0.95633894, -1.4659557, -1.0672771, -3.3476443, -3.6351054, -1.8766991, -1.0499516, -0.8640289, -1.3418787, -1.6710471, -1.0518789, -1.3284807, -1.0672903, -1.2984877, -1.4317946, -1.2819399, -1.1776006, -2.0117435, -1.1909988, -1.6325643, -1.3755174, -1.8467388, -1.1327515, -1.5188427, -1.3899642, -1.6420921, -1.043407, -1.6026639, -1.138417, -0.97101223, -1.271242, -0.7115588, -1.3566486, -0.9234316, -0.85723275, -0.8918241, -1.5019754, -1.6031859, -1.1208738, -1.133076, -1.1482856, -0.82539636, -0.97691697, -0.90151674, -1.9680749, -1.5732255, -0.97369736, -1.610725, -1.5830237, -1.2785949, -1.0099097, -0.8909851, -0.77351177, -1.0141395, -0.7269804, -1.4642861, -2.7214887, -1.4997181, -14.602708, -1.403811, -1.4172581, -1.310325, -1.5547988, -2.1956336, -3.7234614, -1.7775134, -3.4160905, -4.9316273, -4.792233, -4.167746, -2.1372902, -2.0618155, -1.0708857, -2.642648, -1.2613289, -1.8870069, -1.3915552, -4.009344, -1.8726304, -1.9056902, -2.2972603, -2.2165756, -2.9336991, -2.7637823, -1.2901676, -1.5869136, -1.9698185, -2.1646268, -2.960697, -2.566998, -1.4355865, -2.5717368, -2.0413668, -1.290169, -2.516158, -2.759129, -2.0104089, -3.2819536, -1.6685455, -2.3512256, -2.0406234, -1.4104943, -3.3107772, -5.470009, -3.6898227, -2.2685525, -2.7050624, -3.1616924, -2.3806925, -2.7841287, -1.9129984, -3.2932487, -1.6767087, -1.1507784, -2.3390803, -4.5349946, -3.1582544, -1.7180965, -5.6086135, -2.3687649, -2.3038986, -1.8158605, -3.0817351, -2.2010934, -1.9180917, -1.4120785, -1.3320959, -3.7883961, -1.5549222, -0.9354667, -1.0546124, -1.2253877, -2.1193779, -1.5984664, -4.7134676, -1.7268164, -2.1174202, -1.297949, -1.8061957, -1.2423681, -2.1758392, -1.4506269, -2.4918299, -0.90987223, -2.2017498, -1.0510653, -1.9787481, -2.1033976, -2.4857621, -3.798583, -2.7556937, -2.8681157, -3.3335586, -1.1036271, -2.1468067, -1.7182089, -9.625127, -1.7497753, -1.3092595, -1.6229994, -1.8266094, -1.1855419, -1.1022376, -2.5157192, -1.8676955, -3.8111587, -2.3706863, -1.3407114, -1.2293477 ], "pointIndex": [ 0, 502, 228, 85417915, 87177656, 52405554, 24939584, 81211067, 63171332, 68876814, 88857761, 107085546, 50678915, 43230496, 51144720, 9727721, 73492326, 27971076, 84051766, 100252284, 33351039, 122947737, 10429343, 109197430, 8155808, 46643364, 2120434, 112945328, 84785397, 88789216, 64828394, 23919421, 11277540, 77949708, 26985267, 94800518, 99115340, 102070153, 6282878, 50070055, 37438927, 35424417, 62523043, 68161840, 4127142, 5313773, 43325589, 38238130, 47910376, 66853413, 28640695, 22449973, 65688760, 55518842, 10740481, 58487096, 96556615, 23345688, 5188696, 11772972, 95503364, 115673175, 125130528, 14571204, 79344496, 82642712, 54565943, 98714084, 22037788, 92278340, 97731258, 85795585, 98369318, 103507242, 107488494, 110471801, 116862439, 123458410, 127258485 ], "storeSequenceIndicesEnabled": false, "size": 228, "capacity": 256, "initialAcceptFraction": 0.125, "timeDecay": 1.0E-4, "sequenceIndexOfMostRecentTimeDecayUpdate": 0, "maxSequenceIndex": 504, "compressed": true, "randomSeed": -128508364556705108 }, { "version": "2.0", "weight": [ -0.630898, -0.6477811, -0.63280094, -0.6948641, -0.6490363, -0.6381175, -0.70697945, -0.7485131, -0.7632588, -0.8179374, -0.6676431, -0.6843537, -0.6571992, -0.7652821, -0.7276874, -0.7827385, -0.77456915, -0.7726149, -0.77507704, -0.9687915, -1.0675865, -0.7493418, -0.88513535, -0.6983723, -0.8357457, -0.7440659, -0.69447714, -0.77738136, -1.0133171, -0.87642634, -0.857812, -1.0985663, -1.9370906, -1.2371792, -1.0567256, -1.0878961, -0.80589247, -0.7802553, -0.9365398, -0.9947, -1.1050628, -1.1739084, -1.0834794, -1.295832, -0.79162145, -0.94784623, -0.90933746, -0.8757789, -0.9412581, -0.9697154, -1.4111537, -0.77407503, -0.76541466, -0.7894012, -0.7536822, -0.8625097, -1.4588612, -1.042716, -1.2608161, -1.3634186, -1.0306897, -1.1214379, -0.93017733, -1.5569626, -1.2675877, -2.3300815, -2.037261, -1.3787063, -2.078333, -1.4332216, -2.1206706, -1.2226236, -1.1829647, -0.8473785, -1.4364246, -1.0885451, -1.7373513, -1.0789704, -1.4983333, -1.2914145, -1.1032754, -1.6687708, -2.7030573, -1.1990012, -1.7063648, -2.1159866, -2.342888, -1.6727512, -1.564358, -1.372533, -0.9340407, -0.99187064, -1.2056274, -1.0800625, -1.6576957, -1.3551583, -1.0228239, -1.7431831, -1.286001, -1.1640606, -1.6876549, -1.7610623, -1.6307021, -0.8457055, -0.8424614, -1.2389152, -1.2091107, -1.1098007, -1.0474402, -0.86699677, -1.1676563, -0.87737286, -3.3185194, -1.7179166, -1.6006385, -2.3141143, -3.4334073, -2.3130846, -2.0194337, -1.8243642, -1.720521, -1.9310031, -1.4816298, -2.4737897, -1.7918673, -1.5567455, -2.0214505, -2.3170557, -1.7804987, -2.2804224, -3.51206, -2.5557177, -3.2283506, -2.9984992, -2.7410605, -1.5036118, -2.0997918, -2.5839639, -2.6720161, -1.7679182, -1.5598592, -2.9722614, -2.615845, -2.8201096, -2.10161, -4.986848, -2.4506004, -1.3532511, -1.1694721, -1.619396, -1.6742814, -2.174175, -4.5054655, -2.4169295, -2.1824694, -1.1939554, -3.3943212, -2.303942, -2.0812685, -3.2173884, -2.0529165, -2.0515125, -2.9678133, -1.671063, -1.9606991, -2.8123155, -5.5252957, -2.4556065, -1.4970556, -2.6249, -2.0755422, -3.0332034, -3.7715864, -2.7577121, -3.0361726, -2.2537212, -3.0970392, -1.8873868, -2.558867, -3.7742202, -2.937425, -2.6971843, -1.9580126, -2.1035142, -1.6116444, -1.6787056, -4.688275, -2.2149107, -1.08943, -1.8120431, -1.8196094, -2.3866353, -2.839746, -2.0566387, -1.9034048, -4.365361, -2.675564, -1.5361451, -4.6711106, -3.8471017, -1.9594274, -2.5981467, -3.6338663, -4.5456915, -2.0403075, -2.2516203, -2.0036118, -3.7112646, -0.85280895, -4.2003527, -1.4760265, -2.7323143, -1.7102116, -2.1479855, -1.9858385, -2.095076, -3.0762653, -2.08245, -2.035378, -1.4645298, -2.5723915, -2.4020085, -2.0320628, -3.3489451, -0.9732658 ], "pointIndex": [ 0, 501, 225, 92365140, 12468747, 20753240, 92141865, 95005479, 68640148, 62615683, 103838480, 66742972, 116439537, 104268231, 8858295, 54224740, 65521261, 74614563, 105769197, 104643027, 115637626, 111636229, 1331364, 64087795, 96602030, 98980111, 65777520, 89080983, 58892339, 22644552, 94256497, 69757173, 2334587, 79822833, 50828536, 109548796, 101251341, 30702731, 114884835, 122206416, 86253129, 35635296, 36615887, 29815484, 17668545, 41848385, 33060378, 118682512, 94592436, 9165700, 48507835, 49743418, 114459716, 24705761, 53719230, 57642889, 72129372, 118372695, 23655649, 123107717, 69213579, 75295761, 6699983, 116981543, 26403286, 80827840, 126197891, 88762477, 91658553, 107618253, 103016808, 105082782, 103281533, 110847554, 113373220, 32790595, 121450923, 124577307 ], "storeSequenceIndicesEnabled": false, "size": 225, "capacity": 256, "initialAcceptFraction": 0.125, "timeDecay": 1.0E-4, "sequenceIndexOfMostRecentTimeDecayUpdate": 0, "maxSequenceIndex": 504, "compressed": true, "randomSeed": 7222263662094774283 }, { "version": "2.0", "weight": [ -0.4580384, -0.46075743, -0.46211502, -0.4929041, -0.4730218, -0.4747222, -0.46597216, -0.66657495, -0.56379455, -0.47808835, -0.5287002, -0.50128, -0.5075093, -0.4686614, -0.73368955, -0.708327, -0.673227, -0.57508063, -0.7542673, -0.5368351, -0.47845197, -0.5562689, -0.72655267, -0.5083273, -0.503371, -0.5842113, -0.6419362, -0.5932558, -0.67286736, -0.7619549, -0.8213134, -0.90004736, -0.7194303, -0.87810415, -0.9601538, -0.6465579, -0.9196468, -0.89380914, -0.8300188, -1.2643598, -0.76223713, -0.858839, -0.5496779, -0.59502965, -0.6356277, -0.864928, -0.9490388, -0.8488594, -0.65086263, -0.7511573, -0.6592746, -0.79392016, -0.7518688, -0.646706, -0.7839151, -0.64437765, -1.0888321, -3.038991, -1.1950477, -0.9051793, -1.2800106, -0.8435553, -1.2381986, -1.7287918, -1.0798482, -0.764986, -1.1250908, -1.7044045, -2.1042469, -1.9712648, -1.036632, -2.0903056, -1.3683456, -1.0508043, -1.4783676, -1.0530821, -0.934944, -1.250601, -2.1660426, -1.6160846, -2.042257, -0.9940596, -1.1671561, -1.3778867, -1.1717991, -0.7084441, -0.69722295, -1.2867434, -0.65041363, -1.3847234, -0.75861377, -0.8957585, -1.3514508, -0.9746915, -1.086659, -1.1088036, -1.0807667, -0.77314854, -1.0591305, -0.9778022, -1.0392236, -1.8265591, -0.77029204, -0.8249063, -1.866333, -0.9302765, -1.1593188, -0.84130716, -0.7519833, -1.070171, -1.1213996, -0.8770907, -0.66014594, -1.7014613, -1.1222742, -3.6753109, -3.2820745, -2.1890109, -2.7490132, -2.0823503, -2.1744382, -2.1111338, -1.7354052, -2.6427343, -1.5783647, -2.3191943, -2.2987525, -4.551017, -2.6797552, -1.1783116, -1.1015216, -2.0225565, -1.0180598, -1.4789, -1.1881534, -2.7123027, -2.309295, -2.6841495, -2.2632222, -4.495556, -4.797015, -2.9508445, -2.761931, -2.3967311, -3.2577622, -2.7722323, -4.411268, -1.7627251, -1.7279713, -2.6112216, -4.2717066, -2.8829312, -1.2101817, -3.985402, -2.2695396, -2.272051, -1.633945, -5.034854, -3.8012376, -3.3353143, -2.1721678, -2.0492704, -2.2347207, -2.3234985, -1.1148325, -2.0454772, -2.0794945, -2.824807, -1.6930101, -2.8448656, -1.2729511, -1.3998069, -0.7758805, -1.3747265, -0.7600807, -1.4784952, -2.373021, -4.0120835, -1.2613412, -2.7648678, -4.0832334, -2.46164, -1.9434028, -0.9132536, -1.0332861, -2.0537302, -4.2940426, -1.770343, -0.9790258, -4.511891, -2.8161838, -1.1884514, -1.6424551, -1.822277, -2.8266153, -1.1383984, -0.80848265, -2.7638896, -1.6277307, -1.055982, -2.2933555, -1.3826586, -2.1459916, -2.1754184, -3.1542444, -2.6393998, -3.4686902, -2.8534982, -1.0647641, -3.4518557, -3.361874, -1.1547184, -2.4933126, -2.2956147, -1.3746315, -0.8468485, -1.3102388, -2.1647186, -2.7558634, -1.21418, -3.544629, -2.6128135, -1.7413558, -2.2080815, -1.8403822, -4.518899, -1.2705089, -2.5194619 ], "pointIndex": [ 1, 503, 228, 109434413, 108902718, 45375688, 86832624, 61475015, 46389286, 22559253, 79620416, 99865252, 3332832, 76968655, 45642799, 26412718, 124991254, 75975371, 87432558, 84846355, 101770610, 14411874, 35292438, 117281552, 8002730, 17329378, 18437826, 18993252, 106181391, 54209581, 4957861, 108094925, 23961322, 86705572, 25729239, 115529408, 77332542, 103448472, 119617281, 115078757, 127247486, 46567368, 116666879, 52781221, 37853085, 73956241, 113961039, 41589895, 105665277, 75178451, 1978930, 118698118, 2148348, 81224634, 20280151, 73821485, 21476629, 58807825, 9382088, 57233256, 72226598, 99300621, 111957991, 80990229, 69990459, 71743878, 2732081, 78838502, 27695186, 98383303, 62160363, 119084073, 93542763, 98105998, 99641668, 103936523, 110020651, 116195474, 110564406 ], "storeSequenceIndicesEnabled": false, "size": 228, "capacity": 256, "initialAcceptFraction": 0.125, "timeDecay": 1.0E-4, "sequenceIndexOfMostRecentTimeDecayUpdate": 0, "maxSequenceIndex": 504, "compressed": true, "randomSeed": 7872595278026300545 }, { "version": "2.0", "weight": [ -0.5318544, -0.5526347, -0.5349425, -0.648295, -0.5679767, -0.53884137, -0.61517274, -0.69902545, -0.6633728, -0.57753766, -0.64800483, -0.548599, -0.54938823, -0.6605117, -0.86284494, -0.71828693, -0.81339324, -0.81776756, -0.931348, -0.6920306, -0.6435287, -0.71530217, -0.6555444, -0.98792934, -0.5638099, -0.6063291, -0.71361756, -0.8526455, -0.94601935, -0.9070212, -1.2568408, -1.6926986, -0.94654936, -1.230797, -0.9508877, -1.2342145, -1.5927098, -1.0119296, -1.0349593, -0.77720755, -0.9708845, -0.8177801, -0.7369408, -0.925699, -1.3079426, -0.6662252, -0.6679798, -1.0225967, -1.0462278, -1.093949, -0.61489826, -0.7670343, -0.6418647, -0.8002868, -0.7372775, -0.8960303, -1.1364943, -0.9798754, -1.1735563, -1.3999515, -1.0121135, -1.5662241, -1.4446868, -1.7188863, -1.9484583, -1.6996074, -1.1428131, -1.5619653, -1.2767718, -1.7581125, -2.8999724, -1.5626452, -1.7994468, -2.3420005, -1.8132316, -1.3271576, -1.1727203, -1.6932975, -1.093756, -0.8861891, -1.9243885, -1.7915244, -1.0730273, -1.5481496, -1.1812528, -0.95917827, -1.4939461, -1.3916106, -1.5121248, -1.7567997, -1.620493, -0.7535965, -0.9707958, -1.8692814, -0.7235233, -1.0412691, -1.3920215, -1.1896292, -1.3844485, -1.7028971, -1.2931386, -0.7415553, -1.7628093, -0.8847007, -0.9979066, -0.6709767, -1.7224689, -0.8326914, -0.8062148, -0.87184334, -0.7651507, -0.99336547, -1.0146102, -2.5240374, -1.830741, -1.0107177, -1.7176067, -1.2612122, -1.3724835, -3.8971236, -1.6958439, -1.310176, -1.26883, -3.2852666, -2.4117398, -5.1487803, -1.9918764, -4.3635464, -2.1841486, -3.4227571, -3.6512878, -5.3473387, -3.6426513, -1.1749694, -3.8084428, -1.797575, -3.917274, -1.3197335, -3.105423, -1.9836197, -3.3455346, -3.5547278, -2.9551923, -2.1559243, -3.201745, -3.1743422, -1.8750439, -2.8562143, -4.809888, -2.040142, -2.576594, -2.1615236, -2.6725488, -3.3076863, -1.9927764, -3.0091994, -2.5479405, -1.5206244, -1.3348264, -1.2347344, -1.0797039, -2.975576, -1.9721434, -2.4176564, -2.7389612, -2.7175198, -1.5420492, -1.8847944, -1.6513671, -2.5460448, -2.1374488, -2.0714803, -3.0631979, -2.056451, -2.042578, -1.50944, -1.6670105, -4.353, -1.9820719, -2.9284163, -1.8892688, -4.1990786, -2.1729066, -1.5507696, -2.7340138, -1.0775504, -1.3502195, -2.0504923, -5.231181, -1.5180875, -1.3710163, -1.2219802, -1.7035313, -1.8204783, -2.402197, -1.8848188, -1.4722091, -1.6576673, -1.3964651, -6.033809, -3.7256346, -1.6946881, -2.1770961, -1.2699507, -1.0702896, -2.541309, -5.0751104, -2.4699755, -2.5016696, -1.0325359, -2.0575097, -1.0528655, -0.79915005, -3.4902232, -2.510019, -2.2903266, -1.1804458, -0.82398766, -6.061527, -2.3614256, -0.8843897, -1.9906607, -5.030266, -5.0068526, -1.2827667, -1.1882246, -4.0000052, -2.9999995, -2.5603006, -2.2915864 ], "pointIndex": [ 3, 504, 230, 115347595, 114781716, 88385758, 82551603, 81082979, 43380974, 10194344, 46512063, 110078896, 94415135, 17090150, 1091252, 8607563, 93121216, 66403817, 74732784, 88677344, 108310888, 81147254, 53245757, 37363390, 19078022, 95335853, 69450267, 47217789, 99847234, 96872649, 76836844, 105708382, 64047755, 68216567, 106743551, 79846973, 86907060, 96454124, 104808962, 116530184, 243950, 110187486, 8357889, 69643767, 47947051, 34809077, 25305060, 39642089, 97101121, 41094885, 42168413, 44000776, 19255895, 1606917, 100649211, 61085956, 53954022, 36935615, 4489663, 58836135, 23305165, 64421908, 96644721, 88863796, 45998859, 84197218, 74033379, 77317836, 20708815, 81693082, 85518041, 13072922, 109596508, 98983742, 6003317, 108464322, 115642690, 120441323, 73830126, 252001 ], "storeSequenceIndicesEnabled": false, "size": 230, "capacity": 256, "initialAcceptFraction": 0.125, "timeDecay": 1.0E-4, "sequenceIndexOfMostRecentTimeDecayUpdate": 0, "maxSequenceIndex": 504, "compressed": true, "randomSeed": -7386051442361988795 }, { "version": "2.0", "weight": [ -0.5108797, -0.53291243, -0.5210462, -0.54066086, -0.62747353, -0.5228788, -0.53056675, -0.857135, -0.5431626, -0.6728934, -0.83623904, -0.5277067, -0.54691744, -0.5597804, -0.5415357, -1.0465266, -0.9172645, -0.6498583, -0.5838935, -0.7679667, -0.83578706, -0.86347896, -0.8489478, -0.58355063, -0.5913145, -0.67941654, -0.5532097, -0.57800925, -0.6950984, -1.0079625, -0.93897146, -1.0548553, -1.0986328, -0.990683, -0.95704466, -0.927313, -0.707812, -0.8876795, -0.58693117, -0.87326914, -0.78118306, -1.0092329, -0.90121645, -0.96073735, -1.1489044, -0.85746175, -1.0691592, -0.9054018, -0.94487154, -0.5967019, -0.7073035, -1.0018818, -1.0238538, -0.6573265, -0.65281594, -0.60852957, -0.8033723, -1.239034, -1.9295261, -3.1623762, -1.8403192, -1.3301795, -2.7431705, -1.4577744, -1.1961795, -1.1853992, -2.1535192, -1.0238626, -2.1560311, -1.0290521, -0.9725088, -1.5267935, -1.254052, -0.9736978, -1.2086835, -1.1516668, -1.6799083, -0.89718825, -1.7337049, -1.0380706, -1.2615322, -1.9453869, -0.9431378, -1.3229971, -1.113262, -0.9120092, -0.940582, -1.1862113, -1.2428428, -1.4028096, -1.1804905, -1.2219838, -1.0842413, -1.2987602, -1.3231869, -1.1256894, -1.4694376, -1.778964, -1.2206122, -0.7018415, -0.7977892, -1.0083444, -0.80514693, -1.1089602, -1.1285571, -1.4524838, -1.9886453, -1.9686787, -0.8539721, -1.1108284, -1.7369735, -0.75138754, -1.2929288, -2.8029969, -1.8970212, -2.9346006, -3.1239185, -2.3111954, -4.161659, -4.740618, -3.930361, -3.1946766, -2.6492808, -3.8204699, -1.512944, -3.6797109, -3.3561983, -2.0975733, -2.804475, -1.4382597, -1.8145785, -1.6634225, -4.7425866, -3.160053, -3.949805, -1.6202605, -1.3382463, -5.6329947, -3.1294072, -1.9707998, -1.1553085, -3.8239818, -4.8079767, -2.4293022, -1.5714104, -3.515261, -2.4722693, -1.2639914, -1.5367815, -2.372899, -2.0205681, -3.5453362, -1.3925744, -4.381768, -2.2124214, -2.1457138, -1.6154038, -2.1108005, -8.22557, -4.411373, -1.0580919, -1.2821277, -1.3998395, -2.4272609, -2.3948019, -0.96729654, -1.3134754, -1.676334, -1.6012802, -1.3334838, -1.2328417, -3.944815, -2.678497, -3.3102927, -1.9348183, -2.8151054, -1.7924582, -2.1709836, -2.1577468, -2.7874053, -1.9171277, -1.4504448, -2.6907806, -2.2421236, -1.2558291, -1.3776932, -1.1472483, -1.5318475, -5.8697314, -1.6595546, -2.01325, -1.4753066, -3.3051827, -2.9482744, -1.6691211, -3.6826656, -2.018957, -2.9914162, -2.479594, -2.6773448, -0.7891612, -1.6135672, -1.5358614, -1.0630399, -2.6844327, -2.140832, -1.4059803, -1.8687615, -1.5211347, -1.1563559, -1.8074015, -1.585874, -2.905799, -2.0970418, -2.6970625, -3.638173, -2.7245076, -1.0986912, -1.3670276, -2.4939995, -1.2994958, -3.5241516, -1.7636971, -1.6964252, -1.2399389, -1.4650214 ], "pointIndex": [ 0, 502, 226, 32292610, 109869361, 49676440, 38860639, 62592793, 600790, 23911739, 83647733, 116832183, 95541343, 17576862, 29948653, 57543406, 23404328, 71784850, 83143492, 92528201, 110518113, 14668457, 92928200, 332742, 103153798, 18665463, 121031463, 56018456, 1132292, 61525538, 66163859, 5447769, 89783462, 118557716, 6231473, 87963967, 114288691, 31571420, 6534378, 14235721, 35168244, 21282808, 37519649, 4883690, 102255530, 39341605, 8200693, 50840927, 45610825, 45886354, 48352851, 6983081, 53828108, 24397969, 3149000, 60837572, 59532798, 87757933, 65933620, 66841196, 24895074, 69969079, 109326827, 74783313, 77159216, 61306945, 82896750, 117164763, 110986551, 30674296, 91982112, 96851510, 29073451, 103960445, 13886321, 111283137, 33622972, 34148650, 425 ], "storeSequenceIndicesEnabled": false, "size": 226, "capacity": 256, "initialAcceptFraction": 0.125, "timeDecay": 1.0E-4, "sequenceIndexOfMostRecentTimeDecayUpdate": 0, "maxSequenceIndex": 504, "compressed": true, "randomSeed": 8161128184677511835 }, { "version": "2.0", "weight": [ -0.40340668, -0.529459, -0.5161869, -0.53543, -0.5572265, -0.559943, -0.5261264, -0.65634567, -0.8289195, -0.5882762, -0.6718383, -0.5602667, -0.59636503, -0.52978766, -0.5676633, -0.66157055, -0.67849123, -0.8783929, -0.87770337, -0.63287824, -0.7088296, -0.730397, -0.6751855, -0.67252594, -0.61771494, -0.62258834, -0.8742302, -0.54998684, -0.53258646, -0.5697075, -0.6338611, -0.7282499, -0.71893036, -0.69252646, -0.6978233, -1.083951, -1.0749961, -0.9492825, -1.0267339, -0.8309118, -1.0968392, -1.0346222, -0.71960473, -0.753241, -0.82036847, -0.68786734, -0.95036894, -0.7919302, -0.7842412, -0.78362364, -0.69734085, -0.7361724, -0.63951087, -0.9256614, -1.3222324, -0.557387, -0.5765443, -0.8541396, -1.5424199, -1.239235, -0.6581758, -0.6957259, -0.71216434, -1.2122377, -1.3424256, -0.8595487, -0.93395984, -0.91291904, -0.99467903, -1.0259969, -0.83747417, -1.1415584, -1.844381, -2.6260114, -1.8964473, -1.1886573, -0.95166403, -1.3016888, -2.1763248, -0.8594845, -1.7636291, -1.5953441, -1.2344376, -2.9971352, -1.2809831, -0.7776844, -1.5833745, -1.1377445, -0.81377697, -1.4259038, -1.5685266, -1.2828376, -1.2463381, -1.035027, -1.023178, -0.9225322, -1.334532, -1.2539599, -0.8611026, -1.0418408, -1.2660669, -1.0434586, -0.82252276, -0.9484263, -0.7822511, -0.7963581, -0.94546413, -1.4416524, -1.972239, -1.3854128, -1.7213302, -0.88175184, -0.660204, -1.0088569, -0.6626971, -1.4806819, -3.8850646, -3.4880378, -2.0370426, -1.7129023, -2.4480736, -0.9842973, -1.1321272, -1.3175576, -1.7688314, -0.99098766, -0.8212509, -2.069529, -2.7128298, -2.104214, -1.9494729, -1.5712934, -1.9657266, -2.8847177, -2.0214329, -1.1168336, -1.2752433, -1.5474607, -2.0712857, -1.228839, -2.3795173, -2.8112884, -0.84520334, -1.9762503, -1.7711192, -2.0245588, -2.4114013, -4.225437, -5.1449366, -3.5052965, -3.2005363, -1.7473437, -4.5288105, -1.3647547, -1.6030688, -3.399047, -3.9606524, -2.4988217, -2.2541208, -1.6598576, -2.0318375, -3.440064, -2.4472992, -2.583677, -1.9249152, -2.901985, -2.3829575, -3.055308, -3.5783951, -1.7583847, -1.3392538, -1.5853678, -1.7856835, -4.027946, -2.5141406, -2.4793181, -1.6539936, -1.8417726, -1.4020761, -1.6960694, -1.6217222, -1.7380404, -1.8801169, -2.5759354, -2.688679, -1.4906636, -2.4896166, -2.0299616, -1.1732154, -2.218882, -1.5876522, -2.8258562, -2.2313547, -1.8463587, -3.1047606, -1.3781078, -1.4334736, -2.1798456, -2.3027706, -2.6381938, -2.3633974, -1.6888646, -2.6922355, -3.9937582, -1.8913554, -3.3459861, -1.9445951, -2.7985828, -1.6192544, -2.2790425, -1.6679081, -2.0862288, -1.6981969, -2.1887875, -1.3072184, -1.5203125, -2.3198156, -4.1349745, -3.2535048, -4.6283674, -2.5832548, -3.1003091, -1.7998267, -1.9538168, -0.9321133, -1.3000219, -0.6603427, -1.417374, -4.4221253, -1.0785013, -1.8408641, -2.0598917 ], "pointIndex": [ 1, 504, 232, 93371543, 83193340, 51609995, 89399250, 58411525, 8723328, 20440944, 46893266, 122901962, 7356524, 43010919, 19179752, 70365646, 119511225, 76853214, 84102788, 95436273, 1216784, 124196634, 4094230, 39663861, 41923224, 21344652, 21685201, 43458670, 15386476, 60096538, 103046171, 23183276, 11319123, 45373015, 12355583, 77390034, 94445921, 99768692, 30435166, 117326285, 123597904, 3120255, 36522499, 16413966, 23712342, 50831074, 41869953, 31582697, 18123249, 45993707, 98907237, 50027373, 52003281, 76222963, 97052839, 55995355, 59301019, 41017833, 63884255, 71897870, 24273408, 71362132, 35199141, 46381904, 97006198, 81449733, 2703585, 123730816, 88570270, 28538466, 94720610, 88963368, 73814843, 102316085, 88128342, 110050359, 116313747, 118351755, 65273013, 127514189, 27 ], "storeSequenceIndicesEnabled": false, "size": 232, "capacity": 256, "initialAcceptFraction": 0.125, "timeDecay": 1.0E-4, "sequenceIndexOfMostRecentTimeDecayUpdate": 0, "maxSequenceIndex": 504, "compressed": true, "randomSeed": 5911960361261524437 }, { "version": "2.0", "weight": [ -0.39453644, -0.4091319, -0.40276408, -0.42154148, -0.43336, -0.40930772, -0.49056512, -0.4553714, -0.6343011, -0.43776572, -0.46448955, -0.49443203, -0.49125093, -0.55794704, -0.52942365, -0.5564705, -0.65847504, -0.69913536, -0.75695574, -0.71217597, -0.60467654, -0.49103096, -0.57176715, -0.5623783, -0.5702394, -0.5680598, -0.52803683, -0.5789208, -0.62406635, -0.5716927, -1.0776572, -0.74342746, -0.7486334, -0.69127804, -0.6608637, -0.9031974, -0.72085214, -0.769788, -0.77804446, -0.7316041, -0.95129424, -0.7048584, -0.68752366, -0.6274702, -0.78758854, -0.57621306, -0.980954, -0.7966236, -0.70016164, -0.9555895, -0.79694474, -0.8355656, -0.6856815, -0.567936, -0.8354194, -0.6369338, -0.81904274, -0.7119923, -0.86386496, -0.7636028, -1.0274584, -1.2511095, -1.3548596, -1.2078041, -1.0715795, -1.3628885, -0.895939, -0.79696196, -1.0516008, -0.7873496, -0.7411404, -1.0266874, -1.6383885, -0.7790249, -0.7705543, -1.0220681, -1.0377313, -0.95866215, -1.0646464, -1.2318766, -0.8416069, -1.0857205, -1.3508493, -1.0250691, -0.7554236, -1.2693433, -0.7089957, -1.5169703, -0.68931425, -0.92620236, -0.8353271, -0.82917625, -0.62339437, -0.99650085, -1.5622008, -1.2203263, -1.1878941, -1.4765059, -2.4610686, -1.033241, -1.1396645, -1.6011978, -1.1930758, -0.9267733, -0.9729251, -1.3341185, -1.0385826, -0.6454081, -0.60673964, -1.0060118, -0.9427047, -0.9003368, -0.90673447, -1.2340496, -1.0492711, -3.363109, -2.0330606, -1.0982486, -2.7784495, -1.5517746, -2.2327852, -1.1796428, -2.6232302, -2.162269, -3.54792, -1.6273329, -1.846263, -1.3899765, -4.4950037, -2.3274353, -2.5995972, -3.1184244, -1.998079, -2.848405, -1.6703528, -2.4962456, -1.6481466, -3.440863, -2.6396058, -2.9867055, -2.670095, -1.41553, -1.5924307, -1.4283478, -1.1941426, -2.6631145, -1.681505, -2.669729, -1.8716806, -1.4485921, -3.8915946, -1.7940518, -1.3624225, -2.0018167, -3.7898927, -1.0225416, -1.9008695, -2.9503803, -1.1070347, -1.7413036, -1.7370498, -1.1614032, -1.8687525, -1.8824614, -1.1254486, -1.7149575, -1.7517456, -1.09711, -2.1374192, -1.3370602, -1.3006828, -6.7224092, -1.5339332, -1.0457886, -1.276754, -3.4331303, -1.6579875, -2.1001787, -1.690451, -1.8255048, -1.8420224, -0.90034497, -1.0836391, -2.4854763, -2.548339, -1.9398812, -1.4311638, -6.7015624, -1.0492077, -2.898579, -3.2530568, -2.267042, -2.1777713, -2.7854774, -1.7165158, -2.1922739, -1.6294314, -3.1127849, -3.2658153, -3.1945748, -2.37653, -1.6131859, -1.9520547, -2.718332, -1.8190503, -2.4957001, -3.5247574, -1.804782, -1.4233923, -2.1619806, -1.8960294, -1.3675936, -1.4663973, -1.6324245, -1.3808581, -2.4436696, -1.645096, -0.7788095, -0.6247076, -1.2705113, -1.5623835, -2.6446254, -1.5811759, -1.0504855, -6.6227217, -5.9884167 ], "pointIndex": [ 7, 504, 226, 39212145, 24172071, 63328689, 64391118, 80415529, 79126737, 81548709, 77773432, 113781713, 45052060, 63749217, 111353902, 111742931, 59065567, 113400660, 106333244, 92186730, 112305367, 5020307, 19122326, 13956955, 37768826, 72182442, 44295021, 48397330, 19062050, 105440754, 106754985, 62469862, 67227185, 71449425, 108893739, 84983029, 89703916, 95292207, 57488522, 119775888, 110360335, 105944426, 5519420, 23569782, 103807625, 14868430, 94940360, 38835649, 41730968, 43929060, 43492514, 36987043, 7288799, 60860404, 50942648, 38573793, 115194212, 54955231, 9713218, 10423051, 62160467, 64660088, 67093319, 16165124, 72556718, 97362277, 110787379, 82336653, 84240227, 87221624, 10841983, 107072852, 95670596, 27229074, 104610343, 114059877, 95223577, 122325223, 497 ], "storeSequenceIndicesEnabled": false, "size": 226, "capacity": 256, "initialAcceptFraction": 0.125, "timeDecay": 1.0E-4, "sequenceIndexOfMostRecentTimeDecayUpdate": 0, "maxSequenceIndex": 504, "compressed": true, "randomSeed": 443867406360206419 }, { "version": "2.0", "weight": [ -0.46440938, -0.55194354, -0.5503501, -0.55612004, -0.57011396, -0.5687599, -0.5504094, -0.6050909, -0.5642461, -0.6262973, -0.57370365, -0.63136375, -0.59516186, -0.55939776, -0.59046006, -0.6264104, -1.2096254, -0.60545015, -1.0312783, -0.66549975, -0.7972616, -0.5882695, -0.77537113, -0.6631247, -0.97287655, -0.6211128, -0.6168714, -0.5831981, -0.5755868, -0.9301831, -0.68822616, -0.9176543, -0.89416593, -1.2748886, -1.299621, -0.8893791, -0.6247632, -1.1938516, -1.4159937, -0.79601777, -0.81408983, -0.8329688, -0.8892465, -0.660977, -0.9649444, -0.8232206, -1.1116574, -0.7901643, -1.1673359, -0.9826653, -0.9795712, -0.65056336, -0.6972535, -0.8124611, -0.8433622, -0.6048559, -0.5874916, -0.7510074, -0.9282149, -1.5678449, -1.0508904, -1.1219891, -0.89590734, -1.1569976, -1.2163044, -0.9758314, -1.1721662, -1.6305572, -1.423851, -2.877465, -1.3352257, -0.94389266, -1.0725486, -1.0377557, -0.6702163, -2.1633449, -1.6787019, -1.5197566, -1.464606, -0.84717834, -0.8617492, -1.1352758, -0.8588444, -1.3158804, -0.93582493, -1.3900374, -1.312389, -0.8095709, -1.1310865, -1.4500014, -1.0954881, -1.4290438, -1.9153944, -1.1448199, -1.3486769, -0.848019, -1.28376, -1.5707656, -2.1327546, -1.2360355, -1.8001504, -2.4112065, -1.1716948, -0.7562583, -0.7529761, -0.97947717, -1.4603944, -0.85283864, -0.9359614, -0.87537324, -1.0744178, -0.9669737, -0.65526927, -0.76069856, -0.6492787, -1.1887507, -1.4968824, -1.8659223, -1.6839557, -2.8952484, -2.0116107, -1.9978883, -3.5571594, -3.4723294, -1.6517309, -1.8540668, -2.5876698, -3.1918757, -1.4802592, -3.1979494, -1.2262383, -1.3654613, -1.4973582, -3.4507692, -3.1694086, -1.9254063, -5.152074, -1.553401, -1.8380904, -3.0006897, -3.0137157, -2.1162019, -1.655828, -1.031361, -1.5780444, -1.4910339, -2.0867536, -1.985997, -1.4112707, -1.3098238, -0.8342073, -2.2895734, -2.759206, -2.8878415, -2.9131627, -2.8809798, -2.5492322, -3.8534236, -1.8139232, -1.133239, -3.4292166, -6.1477556, -2.3670046, -3.3983068, -1.2114067, -3.470149, -2.30582, -5.7869906, -2.0662296, -1.5458041, -2.3490396, -3.2671423, -1.6294608, -2.9943771, -2.3128247, -2.9752448, -3.2546005, -1.285794, -1.847425, -2.8550897, -1.7487998, -1.1289887, -1.5940181, -2.1344016, -2.2462327, -2.1513886, -3.020991, -3.056209, -2.1476986, -1.449248, -1.5552889, -1.5682355, -1.3316531, -3.897052, -1.3796781, -2.231988, -1.6785682, -2.6739948, -3.0805538, -3.0601883, -3.3602982, -3.3161924, -2.250506, -2.8370016, -3.9633605, -5.9724317, -1.6216393, -1.413277, -0.8392533, -5.599172, -2.7745616, -2.7916412, -1.7649142, -2.2872913, -1.9738077, -2.6074562, -1.1445656, -1.2890749, -2.647072, -2.0012999, -1.7970166, -2.9343374, -2.818287, -3.303542, -0.97759485, -2.3368385, -2.182434, -3.0812023, -1.9679145, -0.9874132, -0.72272855, -2.6502638, -1.4007757, -1.6466194 ], "pointIndex": [ 0, 504, 234, 69537992, 91445418, 19390374, 28720100, 24477262, 57926693, 19248800, 6294096, 107055478, 1769480, 89281685, 49819340, 14918544, 66508569, 19778600, 85497112, 34258159, 116497451, 124776842, 60003625, 7548891, 59501782, 103625696, 125092715, 52468681, 618331, 61076944, 105684622, 91178763, 11364797, 107376926, 31656572, 83561758, 120265579, 97611816, 14491424, 114217289, 123716365, 128784073, 15728235, 32719135, 183378, 42413085, 89850175, 71310800, 18559145, 60809821, 110463371, 106184965, 51872121, 102370607, 9800332, 57747978, 22822474, 103522097, 9064348, 11101780, 99851390, 117196965, 73336535, 75285846, 27693273, 28463006, 80378635, 80900038, 30152149, 96680559, 90712670, 96075623, 99012189, 102751726, 56593235, 110128911, 112942886, 34690435, 35691352, 35441887, 36498903 ], "storeSequenceIndicesEnabled": false, "size": 234, "capacity": 256, "initialAcceptFraction": 0.125, "timeDecay": 1.0E-4, "sequenceIndexOfMostRecentTimeDecayUpdate": 0, "maxSequenceIndex": 504, "compressed": true, "randomSeed": 2055649794410205326 }, { "version": "2.0", "weight": [ -0.44288203, -0.4733615, -0.45990443, -0.5049441, -0.48364964, -0.46929833, -0.5951013, -0.51562756, -0.50766015, -0.51539856, -0.5068618, -0.5359355, -0.51409596, -0.6012245, -0.672219, -0.5989203, -0.53809875, -0.5351609, -0.53932685, -0.5565911, -0.52460414, -0.774303, -0.566129, -0.54035103, -0.7583755, -0.5659491, -0.5352195, -0.68098015, -0.6640686, -0.7816395, -0.77675265, -0.8260454, -0.6643803, -0.8596022, -0.6064849, -0.6059143, -0.68557113, -0.58883345, -0.6485081, -0.6736849, -0.7512264, -0.5525414, -0.7294364, -0.79328084, -1.1318378, -0.6086408, -0.73085433, -0.620078, -0.6123451, -0.8122214, -1.075476, -0.62589544, -0.6219365, -0.8617798, -0.60795546, -1.1461984, -0.89067245, -0.70753044, -0.97933424, -1.4291743, -1.1285313, -1.6885188, -1.0900038, -1.0275611, -1.0758282, -1.024274, -1.3263488, -2.243545, -0.8787395, -0.97567546, -0.79980785, -0.6283274, -0.71997434, -0.72288865, -0.7504799, -0.92405844, -0.68834955, -0.8254108, -1.2518294, -1.4317335, -0.81669384, -1.2866132, -1.3988098, -0.9238192, -0.82263625, -0.8600533, -1.1017289, -0.929503, -0.8326041, -1.9470408, -1.1576751, -1.2693574, -0.828232, -1.6521869, -1.1554543, -0.7606298, -1.7863603, -1.0608599, -0.7879148, -0.8942874, -1.3608972, -1.4805124, -1.3453927, -1.2434686, -0.62647575, -0.9385256, -0.76255625, -1.2914335, -1.3336471, -0.7012181, -1.076786, -1.3590081, -1.7965043, -1.2802029, -1.2463863, -0.9444799, -0.8902152, -5.1300464, -1.9487566, -2.5945091, -3.9016354, -1.3708203, -1.7007787, -5.8792505, -2.924918, -2.0084155, -1.5516672, -1.9452276, -2.7344933, -2.4761894, -2.3559952, -1.6918682, -4.0521593, -2.8841708, -4.250247, -2.6824002, -2.351825, -7.0725884, -3.8799038, -1.0702031, -1.7500367, -1.7154711, -2.2885256, -1.1017034, -1.0053222, -3.9765737, -0.8603018, -1.6386056, -1.4199564, -1.0428835, -2.1775246, -1.817723, -1.5003532, -4.018854, -4.3493705, -0.86794126, -1.9145643, -1.7242973, -2.7774487, -2.593774, -2.8310463, -1.1839824, -0.99695164, -1.3106467, -2.2921367, -2.6983166, -1.6927524, -2.2582834, -1.862477, -1.604147, -1.1071069, -1.5620903, -1.6573658, -3.5879345, -1.8574893, -5.450627, -2.953317, -1.379029, -3.140232, -2.237678, -2.3773768, -1.4420193, -1.2076032, -1.6367044, -1.5738162, -2.370365, -2.294873, -2.259818, -3.3089173, -2.3828115, -1.4231418, -2.0798078, -3.65892, -2.782997, -2.4264176, -3.1848116, -2.5167139, -2.035897, -0.9078463, -1.9608375, -1.0440569, -2.198517, -3.9061434, -2.4758701, -2.5298085, -2.2807584, -1.8718891, -1.7454989, -1.5738424, -1.5848371, -1.9713155, -1.3583566, -1.9085646, -0.78653663, -0.91740644, -1.4229441, -4.3172007, -2.259679, -1.9394193, -2.3271387, -2.017966, -1.5892746, -1.1223392, -3.2935107, -1.9982659, -2.696077, -4.7974358, -4.0544963, -1.7201512, -4.663512, -2.5073416, -2.0538328, -1.1117074, -1.6175225, -1.0261378 ], "pointIndex": [ 0, 504, 235, 99588220, 76013627, 19457571, 85439945, 34908503, 53846803, 63291537, 28617007, 56293943, 38760239, 45478888, 49224639, 20952121, 10945812, 70524642, 113401068, 89973135, 32545594, 121351398, 30164645, 41959089, 16114615, 34039935, 15397635, 65264377, 56470190, 60045792, 120239339, 65801832, 121529019, 72480908, 107004937, 81560839, 12924994, 92743100, 63497, 107566904, 116513017, 126651450, 37815476, 100255780, 41648880, 41052862, 44501779, 45860742, 23535023, 22280250, 48943274, 49573865, 51773427, 101774133, 20817324, 57752019, 59792965, 82798362, 10579199, 66130504, 112340598, 69028211, 40608197, 103680196, 73078149, 67610248, 28456353, 77633952, 83048960, 84438350, 89740547, 98945000, 93624260, 102291671, 124136951, 100718338, 50707467, 109734397, 118807444, 126147953, 128014075, 504 ], "storeSequenceIndicesEnabled": false, "size": 235, "capacity": 256, "initialAcceptFraction": 0.125, "timeDecay": 1.0E-4, "sequenceIndexOfMostRecentTimeDecayUpdate": 0, "maxSequenceIndex": 504, "compressed": true, "randomSeed": 5184381769321948633 }, { "version": "2.0", "weight": [ -0.5680312, -0.57754153, -0.5803335, -0.58679545, -0.5828035, -0.58446527, -0.59277546, -0.6110242, -0.6347451, -0.650318, -0.5963477, -0.589384, -0.608581, -0.6600299, -0.65432173, -0.618048, -0.89475805, -0.69706285, -0.65788984, -0.7013913, -0.66922814, -0.82567894, -0.7393027, -0.6538014, -0.62519866, -0.68216234, -0.6155415, -0.68521684, -0.68252844, -0.8635453, -0.6732785, -0.95870876, -0.683223, -1.0384604, -1.0183295, -1.1785916, -0.7090885, -0.89864945, -1.1735743, -0.99098986, -1.2033477, -0.8001452, -1.0698832, -1.0053589, -1.1478246, -0.82658064, -0.7682891, -1.2017244, -0.71174425, -0.6443983, -0.67368025, -0.7728953, -0.8445695, -0.74427897, -0.75514364, -0.7461769, -0.74116397, -0.82120323, -1.0424049, -1.4037803, -1.8726203, -0.74156517, -1.0557835, -0.96516573, -1.1816691, -1.1345637, -0.8071123, -1.1318005, -1.5799372, -1.0468409, -1.3268329, -1.1965047, -1.5018703, -1.9639885, -0.9940779, -1.2910422, -1.6323619, -1.2475739, -1.5904983, -2.8499577, -1.687947, -1.3974866, -1.5153632, -1.2589599, -1.3481356, -1.0943612, -1.3469661, -1.0530231, -1.0110728, -2.2912538, -2.0522537, -1.311908, -1.1040617, -1.49376, -0.9379908, -1.2910535, -1.2647202, -1.465746, -1.0292729, -0.903422, -0.9057903, -1.0987015, -0.9196338, -1.5492829, -1.8007623, -0.8688556, -1.5213107, -1.3652006, -0.7674869, -1.199262, -1.0817316, -0.7907398, -0.8617374, -1.2053959, -0.7756612, -0.8560713, -0.8616877, -1.3875729, -1.4480209, -7.3676667, -1.7680417, -1.9234877, -2.000328, -1.7633696, -3.9967668, -1.7751657, -1.7586172, -1.360004, -2.5315728, -1.2654521, -2.6796257, -2.3294647, -2.5737264, -3.0398452, -1.5801363, -1.390896, -1.3436232, -4.408353, -2.7197933, -5.5573773, -1.6548759, -1.8081745, -4.581191, -2.2083158, -1.2077483, -1.9272752, -2.1264136, -2.210442, -2.9746046, -1.8114252, -1.5349617, -5.21763, -3.5900617, -4.7764673, -2.1318388, -1.4026515, -2.02728, -4.707749, -2.9943347, -4.005021, -2.996215, -3.1028323, -2.4414601, -2.6545715, -1.9498566, -2.0314212, -2.6523108, -1.9968216, -1.4356999, -2.427331, -1.6129284, -1.7536944, -1.2429045, -2.0530457, -6.1134977, -3.2139742, -1.5324388, -1.9248765, -2.0524924, -3.6633136, -2.5591948, -3.6681902, -3.4150784, -4.0795193, -3.0952582, -1.2616416, -3.3483067, -3.7493348, -1.9752245, -1.8228238, -2.7378254, -2.3111594, -1.3959323, -3.6355662, -1.5012057, -1.8132061, -1.6209233, -1.9733783, -2.1340463, -1.2205851, -0.9665645, -1.0465889, -1.7400819, -1.2885246, -1.5000305, -1.0893486, -1.8212684, -2.766409, -2.371216, -2.1498919, -2.5711405, -1.5781529, -0.9767635, -2.1542985, -3.195587, -1.8495193, -1.589415, -1.8028818, -0.8964406, -6.5694284, -2.386041, -1.7140924, -2.8135862, -3.413123, -1.8383019, -2.5924628, -1.0788869, -3.4721863, -2.3472803, -1.513369, -2.005564, -0.9147193 ], "pointIndex": [ 3, 504, 232, 38649302, 11990578, 81992637, 93291768, 65762442, 18485813, 61602633, 5179386, 102261781, 36540032, 41990296, 76448885, 54237680, 4518924, 67995138, 119087849, 95016431, 108065424, 18145236, 6621405, 82602739, 13689195, 34020832, 47915466, 60266361, 95866064, 22470217, 68911772, 23959189, 87592514, 123638180, 84840840, 88626199, 33952373, 109338161, 77079998, 113625126, 122206333, 33585290, 66678691, 40366891, 8381952, 86515696, 7458778, 74425191, 16869744, 109422026, 47664082, 73178736, 19053106, 51977784, 53968219, 12275988, 79571602, 103617253, 9721202, 60610567, 43523358, 62506069, 66909823, 68497670, 79771835, 71962373, 26767973, 85851873, 78799049, 28153276, 48373087, 96705395, 82853479, 103905866, 12809656, 108756209, 112969720, 117158318, 121449827, 125021075, 501 ], "storeSequenceIndicesEnabled": false, "size": 232, "capacity": 256, "initialAcceptFraction": 0.125, "timeDecay": 1.0E-4, "sequenceIndexOfMostRecentTimeDecayUpdate": 0, "maxSequenceIndex": 504, "compressed": true, "randomSeed": 9169886588161009142 }, { "version": "2.0", "weight": [ -0.53035605, -0.5324966, -0.55486125, -0.5330728, -0.5471217, -0.58455336, -0.5933521, -0.5599782, -0.6342549, -0.6387794, -0.55667377, -0.6493626, -0.74867827, -0.6670967, -0.6307774, -0.6196332, -0.5918868, -0.65830445, -0.6425075, -0.8268777, -0.6852247, -0.56706643, -0.6376095, -0.70883864, -0.9732487, -0.7535966, -0.76869935, -0.7472471, -0.923651, -0.7573382, -0.93107444, -0.6483894, -0.70469373, -0.6645228, -0.7695643, -0.80381304, -0.66245395, -0.82613385, -0.695198, -0.9515421, -1.010398, -0.7056208, -0.76953393, -0.9928844, -0.59132975, -0.99380237, -0.8515312, -0.82218546, -1.1088846, -1.0138144, -1.0554961, -1.2125427, -0.861188, -0.77022, -0.9146566, -0.8259621, -0.76882243, -1.2034107, -1.0809807, -1.5401542, -0.91514635, -1.3669915, -1.4481707, -1.409995, -0.85730594, -1.5939871, -0.73895526, -0.66953665, -0.77782303, -0.88488233, -1.0499003, -1.2570091, -1.1976534, -0.92151576, -1.182133, -0.833123, -0.9230005, -0.8967325, -1.0337293, -1.2166122, -0.99116784, -1.1490904, -1.1511246, -1.397479, -0.9786536, -1.402299, -0.94586, -1.2771218, -1.0545266, -0.59421927, -1.1618001, -1.8738767, -1.1558522, -1.8159966, -0.89378375, -0.8380161, -1.3560284, -2.3792744, -1.461425, -1.2379498, -1.2818031, -1.9932383, -1.3166027, -1.5687723, -1.9454088, -1.445117, -0.9366784, -0.92885256, -1.3723916, -1.2701558, -1.0020772, -1.0913596, -1.3008364, -1.4996603, -0.7830359, -1.7696719, -1.9255613, -3.2565742, -1.7884704, -6.904876, -2.9134037, -1.9650456, -2.221382, -2.0634215, -1.5779783, -2.0036862, -2.2380946, -2.1677172, -4.0049834, -1.6050944, -3.2902942, -4.6903667, -3.661412, -1.959162, -2.357832, -1.53947, -2.2820132, -2.1057246, -2.0005455, -3.5140362, -4.0113697, -2.8073394, -1.3974141, -3.510641, -1.5597332, -1.6886966, -3.7408767, -2.8858912, -3.572505, -1.8949933, -1.8129742, -4.6692724, -1.0588484, -2.3928235, -2.532507, -1.4463307, -3.0277712, -2.9297788, -1.9894695, -1.958042, -1.8407285, -1.2177694, -1.1468236, -1.2246511, -1.1679093, -1.5983938, -2.6404345, -1.760991, -2.9862454, -2.6671734, -1.3666124, -2.2798762, -4.07843, -1.3272638, -1.1056348, -1.3501083, -2.066305, -3.0409312, -1.3775028, -0.90984005, -0.72415125, -1.6538361, -4.1680713, -1.953995, -5.421199, -1.7286031, -2.956821, -1.9774354, -2.0668619, -1.656342, -1.2232676, -0.9585533, -1.0880358, -3.5506268, -2.2162747, -2.78535, -2.4571283, -2.4578626, -1.8101616, -1.5967966, -1.3759114, -1.5432861, -2.9304342, -2.0907807, -2.9865646, -1.413012, -2.822878, -2.1518707, -1.6998991, -2.7407525, -2.152089, -4.4406257, -2.0288308, -1.1662818, -2.3149743, -1.0508428, -4.1577044, -1.7287313, -5.233291, -2.2002838, -2.4515307, -3.343693, -1.1925954, -3.403616, -1.1421292, -2.327714, -2.8356974, -3.2215524, -1.7986864, -1.0376507, -1.9582424, -3.4708614 ], "pointIndex": [ 1, 504, 232, 95940876, 85658404, 48807258, 5729481, 37837239, 9161211, 22735646, 28106346, 68013783, 38134148, 7907680, 49992278, 54106613, 59102940, 69489239, 77880382, 49446833, 105355591, 118604499, 120370463, 40569547, 16849157, 64352906, 47340019, 82652660, 20898060, 21545586, 22413604, 63804236, 66767259, 116482736, 31396222, 29627447, 101324628, 108731924, 119581943, 33754835, 30549495, 7112415, 44789791, 68914851, 16082884, 41912800, 98721568, 47027405, 41238752, 45725007, 18889598, 114310282, 105856109, 52174821, 9503028, 2075681, 91137023, 81857977, 58803769, 73782073, 61882364, 114571543, 41576065, 91505261, 72539750, 75591724, 77472155, 12287422, 83482431, 35221081, 2994602, 88829860, 95147664, 35610587, 32033118, 110962144, 115815305, 24617835, 122676595, 127514003, 142 ], "storeSequenceIndicesEnabled": false, "size": 232, "capacity": 256, "initialAcceptFraction": 0.125, "timeDecay": 1.0E-4, "sequenceIndexOfMostRecentTimeDecayUpdate": 0, "maxSequenceIndex": 504, "compressed": true, "randomSeed": 7625825163713561172 }, { "version": "2.0", "weight": [ -0.68963563, -0.71228534, -0.69185126, -0.72458655, -0.73350304, -0.70023793, -0.6973863, -0.7521709, -0.74596405, -0.75555176, -0.7994502, -0.70423424, -0.71557814, -0.80184543, -0.7378255, -0.90932745, -0.8513464, -0.945497, -0.75618273, -0.9176568, -0.91030234, -0.870406, -0.8781088, -0.7445866, -0.7060583, -0.8570121, -0.71676576, -0.9451282, -0.98158306, -1.0464047, -1.2191277, -1.2070265, -1.1122887, -0.91584504, -0.9098384, -1.0282311, -1.0526453, -1.0620815, -0.9422277, -0.98331505, -1.0915213, -0.9253102, -0.972425, -1.5254942, -1.0299138, -1.0033057, -0.9877612, -0.8424406, -0.7661645, -0.8719801, -0.74254644, -0.87919515, -1.1128438, -0.82937247, -0.8437849, -1.4884276, -1.8097106, -1.6915003, -1.1752342, -1.2706611, -1.5071601, -1.4045566, -2.038409, -2.151111, -2.0421367, -1.4022131, -1.5389507, -1.3170675, -1.315749, -0.93967783, -1.2088668, -1.3546461, -1.1657493, -1.3647672, -1.3999888, -1.6134369, -1.1775569, -1.5266851, -1.5846884, -1.1892252, -2.184959, -1.4332705, -1.6650143, -1.119504, -1.1874212, -1.0438701, -1.1250359, -1.9323465, -2.3231916, -1.4397689, -1.2220843, -1.2882428, -1.0033833, -1.0603511, -0.98936176, -1.4499718, -0.9140737, -1.0238861, -1.1773385, -0.9237867, -1.4686022, -0.97709936, -0.75256306, -1.2221575, -1.3114357, -1.1347244, -1.7514151, -1.123055, -0.8995096, -0.86474705, -0.85333395, -2.048599, -1.9980121, -2.3663135, -1.9952893, -2.4167542, -1.9417686, -2.6963432, -1.3648587, -3.931102, -2.0329041, -4.328194, -2.0767705, -1.6628162, -5.6688666, -3.5560164, -2.79209, -2.689386, -3.5538812, -3.9373045, -2.5425057, -1.4241658, -2.6849244, -2.719885, -1.6209738, -3.384303, -2.4125133, -2.8833256, -1.3654975, -1.449889, -1.0091305, -2.6887238, -1.2313497, -1.5814414, -4.6353374, -2.5800967, -2.6386955, -4.811471, -2.0467079, -1.5542631, -4.6060424, -1.8895761, -1.7013047, -1.4387131, -1.9494822, -2.21773, -2.4674315, -1.9776376, -2.1961777, -3.6641738, -1.4983013, -3.065605, -2.5193455, -2.4397542, -1.6718928, -1.8533777, -3.6097572, -2.178392, -1.6004324, -1.533436, -1.2607406, -1.5537279, -3.823595, -2.2444324, -1.2052363, -2.4344325, -1.996442, -2.5809674, -2.397142, -1.9402657, -3.9277935, -1.531284, -1.3297614, -1.4778779, -1.8241446, -2.1734576, -1.2779739, -1.3039699, -1.2775682, -3.7285767, -1.7983359, -2.3423522, -3.0988562, -5.8211617, -1.0550694, -5.147151, -1.402445, -1.5902166, -4.214791, -1.2044046, -2.8841598, -1.496543, -1.6186411, -2.2231202, -3.8776445, -1.3348498, -3.221405, -1.6098989, -2.5724285, -5.3377237, -1.8548803, -1.764812, -1.3415471, -5.20307, -2.0851576, -1.914553, -2.0306556, -1.0157343, -1.0076644, -1.2212769, -1.0830055, -1.6060807, -5.5612807 ], "pointIndex": [ 2, 503, 223, 39112803, 104990114, 81937957, 100213345, 38376824, 93871402, 106658479, 78636624, 124971297, 15024299, 17742985, 72679231, 55114284, 61605062, 80242238, 79029880, 97582134, 117911316, 39630890, 63755532, 15610385, 27111429, 44667628, 95898681, 55537610, 105882141, 57752310, 107102110, 71106035, 8477543, 75496573, 110934773, 88507968, 98972924, 112105035, 86434716, 120953345, 21224130, 34552766, 3241555, 15145986, 16709245, 4633963, 3355562, 43882594, 44439062, 46207160, 1501667, 48161858, 32358115, 23484559, 23372477, 56610622, 45983463, 92602974, 60857406, 63897868, 65522801, 68204117, 11338446, 80785638, 110850108, 77107000, 94909029, 86604853, 109040266, 106369672, 97466705, 103041026, 29702452, 114035833, 115899372, 118423772, 123722046, 501 ], "storeSequenceIndicesEnabled": false, "size": 223, "capacity": 256, "initialAcceptFraction": 0.125, "timeDecay": 1.0E-4, "sequenceIndexOfMostRecentTimeDecayUpdate": 0, "maxSequenceIndex": 504, "compressed": true, "randomSeed": -1521360444406908161 }, { "version": "2.0", "weight": [ -0.448413, -0.4563397, -0.45389304, -0.46477798, -0.47320774, -0.47462812, -0.47083667, -0.61239666, -0.5819031, -0.5328883, -0.55435115, -0.5672333, -0.49760112, -0.5436042, -0.59967595, -0.64196426, -0.77108985, -0.5990893, -0.68164337, -0.6658914, -0.6779405, -0.65547, -0.57186633, -0.7292096, -0.6201713, -0.5016417, -0.5391519, -0.5894515, -0.67855585, -0.793728, -0.95858973, -0.75544524, -1.1236985, -0.7778626, -0.87012255, -0.6094903, -0.8075542, -0.6905392, -0.7119214, -0.7561649, -0.7637378, -0.74645245, -0.7054175, -0.7976067, -1.184815, -0.679329, -0.6759231, -0.80786866, -0.802765, -0.73436123, -0.7933314, -0.7040496, -0.5593558, -0.58655614, -0.60826343, -0.6955069, -0.79697454, -2.0321658, -2.3671505, -1.2036948, -0.91650933, -1.2221347, -1.4929575, -0.82133824, -0.99631953, -1.2400419, -2.2688756, -0.8122746, -1.5502583, -0.95800006, -0.9741957, -0.91015464, -1.0454623, -1.6839831, -0.8809304, -1.0153738, -0.81790936, -1.3347377, -0.85336673, -1.419818, -1.2422366, -1.3848045, -1.8259623, -0.8008377, -1.4634923, -1.2378216, -0.83597064, -1.2431781, -1.0476589, -1.1947871, -1.502235, -1.1875122, -1.0802674, -0.7131609, -1.303804, -0.93148845, -0.868008, -0.91230166, -1.2311869, -0.7778201, -0.8125608, -1.0481919, -1.0332779, -2.4180708, -0.90919775, -1.0201457, -0.74089086, -0.7694123, -0.6068406, -1.9599571, -0.64965326, -0.80325395, -0.70115393, -1.4920911, -2.105182, -2.593633, -4.9075894, -2.4500175, -2.6866624, -2.011585, -1.2831956, -1.6990656, -5.3042397, -4.074707, -2.3969848, -1.8422551, -1.7336991, -2.014161, -1.1614549, -2.387507, -2.2531638, -1.5358254, -2.0135787, -2.4276953, -2.544838, -0.8222214, -1.783477, -2.3671846, -2.0942051, -1.530744, -3.109618, -2.4571917, -4.8672504, -1.750401, -1.1609975, -1.5165246, -2.134081, -1.7671065, -2.9051976, -2.3550234, -1.3915247, -1.6891075, -4.364541, -1.8734646, -1.9972665, -1.9541153, -1.9995427, -1.3496068, -0.99282694, -2.723645, -2.133502, -1.6864717, -1.82967, -1.3975633, -2.5430946, -2.8813655, -2.819163, -2.3204596, -1.1076525, -1.9235603, -1.9012809, -1.8713926, -1.4276859, -5.034833, -1.3538642, -1.7771684, -2.354052, -3.5404406, -1.6530912, -2.0195994, -2.6805522, -3.3481433, -2.3543854, -1.8849224, -1.7921944, -1.9087023, -1.5636692, -4.559099, -0.9331611, -2.0087197, -3.0887632, -1.7429163, -1.8492596, -1.4279119, -2.107058, -1.9292601, -1.2173969, -1.7226368, -1.288711, -1.5266242, -1.0676883, -0.82271296, -2.72016, -1.95744, -1.6681421, -1.561834, -1.139806, -2.7807567, -2.852466, -1.5560211, -2.8218806, -2.6191962, -3.2710078, -1.9588827, -0.9443455, -1.0752059, -2.6169057, -1.3419697, -3.6202824, -2.6320822, -2.3424454, -3.1701627, -1.705714, -2.471587, -1.706018, -3.0725029, -0.78821653, -3.9174464, -1.8377808 ], "pointIndex": [ 1, 502, 229, 124615864, 110763474, 66359894, 79907579, 35495826, 45985371, 23556059, 99951616, 111833388, 35827229, 64730104, 89025, 55394228, 87863787, 73136326, 80548010, 90110354, 31092250, 125987025, 27087925, 3716780, 20623733, 43597728, 45811303, 48424553, 4840676, 123094759, 4513018, 24238832, 31302989, 58364321, 27878880, 89627407, 54208096, 96030457, 6524879, 114400195, 49457760, 17319422, 15150999, 23999127, 111962595, 38632545, 64027745, 118741542, 17979860, 56032910, 45211702, 46460679, 20337475, 59822455, 95109119, 109122258, 21832209, 68020971, 10293097, 86314633, 90878049, 87951177, 114630977, 75148188, 77180011, 78900649, 5601924, 93405592, 83673586, 10641235, 91171577, 91661234, 6995240, 30253916, 119912134, 109594041, 113369225, 120188293, 33002468, 501 ], "storeSequenceIndicesEnabled": false, "size": 229, "capacity": 256, "initialAcceptFraction": 0.125, "timeDecay": 1.0E-4, "sequenceIndexOfMostRecentTimeDecayUpdate": 0, "maxSequenceIndex": 504, "compressed": true, "randomSeed": 4365738981533818552 }, { "version": "2.0", "weight": [ -0.5989758, -0.6030343, -0.6106647, -0.617829, -0.6120543, -0.6209751, -0.6540577, -0.7291006, -0.6260681, -0.6240438, -0.63892895, -0.6271658, -0.6558473, -0.67823005, -0.6712329, -0.7736877, -0.8370473, -0.8698825, -0.63718224, -0.66500527, -0.76872224, -0.7976186, -0.64789164, -0.75742877, -0.7079197, -0.66363484, -0.7033005, -0.6999278, -0.7570301, -0.8842918, -0.86259925, -1.0528697, -0.9030894, -1.0192664, -0.87634534, -0.97609395, -0.870785, -1.2165607, -0.8950667, -0.9456082, -0.81416637, -0.90334135, -0.9257617, -0.95053643, -0.8269434, -0.68671584, -0.9238147, -0.91530436, -1.2250437, -0.8648471, -0.9400571, -0.77502626, -0.69389594, -1.1458131, -0.9694328, -0.7568269, -1.0375473, -0.8990032, -1.1046243, -1.6111062, -1.2231795, -1.7332932, -1.2406415, -1.0933986, -1.4834079, -1.3647826, -1.162224, -1.0776985, -1.0275012, -1.0436147, -1.2653149, -1.7329624, -1.0180838, -1.0981978, -0.9358566, -1.3720297, -1.4376353, -1.0709182, -1.0828278, -0.9824067, -1.8678888, -1.6504165, -1.0274376, -1.0305225, -1.1328106, -1.4048452, -1.0147716, -1.2578955, -1.1658182, -1.8569355, -1.256529, -0.8613851, -0.73715734, -1.231118, -1.3888869, -1.298621, -1.3348144, -1.2907434, -1.3547943, -0.91213906, -2.81691, -1.2689966, -1.3123076, -0.8410366, -0.818469, -0.95411783, -0.85013014, -1.292814, -1.3674784, -1.4650946, -1.6974814, -0.7731692, -1.556783, -1.9376053, -2.6791103, -2.8065603, -3.4199686, -2.632667, -3.097106, -2.398917, -2.5683875, -1.318025, -3.004227, -2.803569, -1.7933978, -2.2934864, -2.2485514, -1.731055, -1.157685, -1.9098945, -2.593425, -1.854552, -3.8862267, -1.2046897, -1.6525576, -1.6870998, -1.3142855, -3.2718213, -2.055217, -1.2397898, -1.3642328, -3.6667328, -2.4019687, -3.7105029, -2.5529263, -3.6775377, -3.4969838, -2.5784345, -3.47127, -2.0122714, -1.2789313, -1.7605172, -2.4059713, -2.830982, -1.5596879, -1.1299579, -2.445495, -2.1350765, -2.6100347, -1.7369318, -4.3140836, -2.028551, -1.9430747, -2.796395, -5.855211, -5.55672, -2.097489, -2.3304756, -2.0556016, -2.3982108, -1.8669431, -2.6178248, -2.3411436, -1.0704573, -1.0604006, -2.2578304, -2.3912299, -1.3100142, -1.2620088, -1.9373451, -2.2696261, -1.309974, -1.3542323, -2.646746, -0.89304143, -2.8895712, -1.4734464, -4.183573, -1.3531339, -1.6352302, -3.697477, -2.8222086, -3.847648, -1.4322337, -2.2488072, -1.5600172, -1.3510327, -2.5411255, -1.7665361, -1.1097009, -1.1876982, -6.4440703, -3.827908, -1.6914281, -2.3275604, -4.6303954, -2.2944593, -1.0078675, -0.9225348, -1.9457649, -2.338592, -2.6975172, -3.4240358, -2.4394717, -0.8670702, -3.9153588, -1.4039124, -1.5496547, -4.910925, -1.6267688, -2.5536485, -2.1050537, -2.210298, -1.024319, -1.2126342, -1.8602599 ], "pointIndex": [ 1, 504, 226, 98429960, 112656297, 97879958, 97194275, 7373483, 50394127, 81304428, 11835750, 121966368, 35984071, 50958101, 84195903, 24589368, 64319713, 100139347, 87559209, 107136641, 117838144, 32701006, 35765779, 25433494, 25147855, 46773108, 18929866, 66570036, 57057252, 60835908, 22833967, 70319399, 38498169, 93120334, 86293692, 21093512, 22041922, 106002956, 64746981, 122673071, 40642181, 37877243, 7182531, 36374056, 82994547, 90761342, 102959872, 45036745, 46067631, 48358483, 18563435, 29229391, 19184263, 113583996, 56503154, 59226275, 123570234, 22119290, 64825232, 127647664, 69875154, 98054970, 58565901, 74327999, 76273637, 104065828, 1185237, 88841019, 92894678, 16534084, 105157004, 44909320, 122969354, 112214521, 30448094, 33692792, 49009014, 125650218, 79 ], "storeSequenceIndicesEnabled": false, "size": 226, "capacity": 256, "initialAcceptFraction": 0.125, "timeDecay": 1.0E-4, "sequenceIndexOfMostRecentTimeDecayUpdate": 0, "maxSequenceIndex": 504, "compressed": true, "randomSeed": -3752382720585822890 }, { "version": "2.0", "weight": [ -0.35257456, -0.63316864, -0.6249559, -0.644586, -0.70678765, -0.64916795, -0.6261788, -0.7028251, -0.68006915, -0.71244913, -0.77226007, -0.6599282, -0.72423315, -0.64820457, -0.86892164, -0.80033886, -0.9883338, -0.7176925, -0.8587724, -0.7907359, -0.7907442, -0.8138974, -0.8363504, -0.8191511, -0.7210162, -0.8011215, -0.7275551, -0.6740003, -0.76122135, -0.9360815, -1.143798, -1.069601, -0.89091927, -1.4255719, -1.0564026, -0.7504338, -0.74547905, -0.8932367, -0.9149731, -0.89604896, -0.89056855, -1.0763606, -1.2780377, -0.814832, -0.87155193, -1.1978128, -0.9658152, -0.91909224, -1.1020787, -0.9806116, -0.80837256, -1.121417, -0.959307, -0.82256985, -0.78294426, -0.8547436, -0.6911423, -0.9919269, -0.9217603, -1.1567005, -1.0467317, -1.1764008, -2.3090951, -1.9561859, -1.4364341, -0.9376694, -1.1808302, -1.6580477, -1.5421588, -1.2061565, -1.3012215, -1.1677957, -1.6640215, -0.9539052, -0.9304223, -1.4524605, -1.1548522, -3.087163, -0.9651231, -1.1932969, -1.7018605, -1.1340724, -1.1854857, -1.1199478, -1.6968377, -1.7598923, -1.5454631, -0.83821553, -1.3094827, -0.9318102, -1.0099014, -1.4364564, -1.6273265, -1.3257332, -1.6213363, -1.0319413, -1.9782693, -1.5172966, -1.8712493, -1.3883024, -1.1409416, -1.5943706, -1.3920141, -1.2470638, -1.3488907, -1.2877753, -2.3829832, -1.0140915, -0.86199796, -1.969369, -1.2389947, -1.1190457, -1.0083293, -1.5217599, -2.4827971, -3.2721095, -1.832073, -1.0300539, -1.3891287, -4.1304526, -2.2308176, -1.1684897, -1.3797816, -1.6611247, -3.9026396, -2.3507211, -2.3537116, -4.3257017, -3.9033318, -3.0079002, -2.1621022, -3.0395641, -1.1423059, -2.8617375, -3.5767941, -2.289676, -4.3020816, -2.492416, -1.7381042, -1.8634133, -2.2264454, -2.779647, -3.4513872, -1.451247, -1.6320184, -5.162463, -2.647772, -1.6107192, -1.6144214, -1.3170866, -2.3347747, -1.5668651, -1.5948402, -2.1280186, -2.3939443, -4.045837, -3.275819, -1.6477028, -1.5976466, -2.7628117, -2.4815483, -2.3328712, -3.8712041, -2.2842953, -1.4850677, -2.7312644, -2.5408404, -2.7129276, -2.680968, -1.9831715, -2.7402458, -1.7652198, -2.2835853, -1.6363691, -2.0129876, -2.5755525, -2.2679524, -2.9405003, -1.3456973, -1.4536569, -1.5227104, -6.832543, -1.6134499, -2.1005044, -1.5718675, -2.4156106, -1.9933846, -1.3972045, -1.3527149, -1.6452624, -1.8692507, -5.578517, -2.2867987, -2.0242627, -2.273815, -1.6365331, -1.7262317, -4.741056, -5.9371395, -1.6308647, -3.7583308, -3.0203693, -1.697553, -3.1482482, -1.7286578, -1.5627481, -2.9239838, -5.917072, -1.7130485, -1.6678938, -1.4424074, -1.5029242, -1.4068965, -2.7383819, -3.7690282, -1.0258008, -4.613188, -1.9295435, -2.5107205, -4.164117, -2.1205091, -2.5135174, -1.7840471, -2.2793093, -1.6349511, -1.6482064, -1.0658326, -2.3246038, -2.2873054 ], "pointIndex": [ 0, 503, 229, 47003035, 91960546, 53637672, 28600765, 38427429, 40526672, 26033828, 115488365, 112303677, 49858696, 42759117, 49676271, 21699959, 64819169, 74063572, 88056669, 97891273, 108932556, 12206832, 37949326, 61758732, 43266547, 46161538, 49251921, 20045725, 16366498, 61588018, 31034449, 69264521, 74375881, 51199646, 86387221, 29430627, 95950547, 104463550, 109041831, 115801990, 72897011, 32290592, 16076766, 66841640, 40804401, 41674410, 17596219, 10670356, 18382075, 26510078, 48722314, 51585602, 53045444, 2025613, 21195801, 56912908, 61279871, 125705476, 23011045, 66571601, 75174384, 71934978, 11471, 62130061, 98582289, 100499662, 86025852, 88381278, 39302271, 57339052, 95444371, 101036885, 103842701, 106390806, 38130557, 112724572, 120471251, 124260657, 35299134, 503 ], "storeSequenceIndicesEnabled": false, "size": 229, "capacity": 256, "initialAcceptFraction": 0.125, "timeDecay": 1.0E-4, "sequenceIndexOfMostRecentTimeDecayUpdate": 0, "maxSequenceIndex": 504, "compressed": true, "randomSeed": 3134929515649909125 }, { "version": "2.0", "weight": [ -0.5317006, -0.5549443, -0.55005306, -0.58047175, -0.5792419, -0.5618388, -0.55156845, -0.59663844, -0.6457649, -0.61152357, -0.6713033, -0.85364294, -0.6575595, -0.6192772, -0.7174029, -0.68995684, -0.6509831, -0.6804296, -0.8823458, -0.6229239, -0.63748795, -0.6725953, -0.77007604, -0.86289036, -0.87573314, -0.9368412, -0.6730294, -0.72140056, -0.70452213, -0.85281587, -0.778473, -0.80166095, -0.8534091, -0.97973895, -0.72902834, -1.0171428, -0.7279368, -0.8837121, -0.9821047, -0.81776035, -0.71419483, -0.87666404, -0.6967305, -0.686794, -0.83897287, -1.0782491, -0.79766566, -1.0869834, -0.9266605, -0.96625125, -1.3254075, -0.990544, -0.95162743, -0.68006086, -0.94362134, -0.91446745, -0.76033175, -0.82099503, -1.98926, -0.9402286, -1.1041036, -1.4840512, -1.3193669, -1.1383134, -1.0716103, -1.353175, -1.2287694, -1.0996752, -1.3116969, -0.8533949, -0.78780127, -1.2678065, -1.3051043, -0.892428, -1.0663462, -1.2590696, -1.0059689, -1.5622548, -1.3429893, -0.9912661, -0.91426957, -0.89937264, -0.81522775, -0.8956658, -0.9297555, -1.1325147, -2.0525374, -1.4441347, -0.8413736, -1.7260334, -0.84645754, -1.1753869, -1.0894531, -1.2714784, -1.0054822, -1.9432375, -1.4703784, -1.0627242, -1.0848396, -1.6313579, -1.2841729, -2.3314505, -1.6599146, -1.5145736, -1.1292386, -1.1420798, -1.1882722, -0.7650141, -0.8330598, -1.0279738, -1.5063119, -1.0402813, -1.673066, -0.855341, -0.8344414, -0.8772748, -3.3096359, -2.1580143, -3.2406547, -1.2543756, -1.3132578, -1.7253371, -1.2502601, -1.4913716, -1.6956722, -1.6008805, -3.4310803, -4.0316906, -1.3139403, -1.2990541, -2.7985826, -3.0076113, -2.204242, -2.1400445, -1.8365418, -1.5423521, -2.2629874, -1.9485801, -2.8632088, -1.4487959, -1.7835891, -1.3249984, -0.8726291, -6.6406846, -2.2428896, -3.2130282, -1.9984459, -2.1642005, -2.2802176, -2.3029919, -1.7716421, -1.2956859, -2.674018, -1.4789615, -1.2592919, -1.651695, -2.7735283, -2.754395, -5.219823, -1.8212689, -1.5849502, -1.5373638, -2.1230855, -2.006167, -1.95454, -1.5437725, -3.7523682, -1.6756934, -1.1302894, -2.3797457, -1.5028995, -1.2654449, -3.4029913, -2.4615457, -2.1503222, -2.4433656, -3.428305, -2.0373065, -1.5127231, -1.9826941, -3.430179, -2.1248314, -1.0785834, -1.3342285, -3.162054, -1.7133318, -2.4264777, -2.7424254, -2.205474, -2.1188297, -1.0416778, -3.8446963, -3.152632, -1.5539855, -2.4188478, -1.0664158, -5.486928, -1.2196403, -1.6307973, -2.1837428, -4.4910727, -1.627812, -1.5182625, -2.5001745, -2.4735217, -4.885121, -2.1104615, -1.761913, -1.5156634, -3.1595268, -2.6720266, -2.3196728, -3.2704804, -3.718801, -1.2293067, -1.98525, -1.442857, -2.399521, -1.6830201, -1.3301995, -1.9729538, -5.5065384, -2.9774437, -3.094193, -1.7231919, -2.0231786, -1.9183023, -1.1119088, -1.0021992, -1.0839311, -1.6686866, -2.8646417 ], "pointIndex": [ 1, 502, 232, 30125521, 104207869, 11501672, 117074017, 7291457, 63508587, 23048853, 117747004, 110069385, 49195970, 41410132, 1528660, 90821874, 10375556, 24571484, 119895067, 37777908, 102803209, 122503004, 84265154, 16301591, 74151424, 83856748, 24283422, 107239937, 52268400, 4644238, 60393661, 23482961, 65935747, 70951942, 73063505, 80420200, 28404641, 118557453, 30463815, 125460264, 121125580, 34340303, 86574979, 37513098, 24156390, 48742358, 77536476, 42673052, 118237420, 113489827, 46483872, 40120324, 21519222, 51163760, 22531470, 53478866, 55841307, 57247299, 60599982, 71139165, 113963557, 64030350, 111083161, 2400827, 10908098, 71356663, 105361320, 90624850, 124964176, 72753707, 92804731, 113839913, 97210899, 66840182, 103525693, 111846083, 108929408, 116239059, 69030844, 125742944, 27 ], "storeSequenceIndicesEnabled": false, "size": 232, "capacity": 256, "initialAcceptFraction": 0.125, "timeDecay": 1.0E-4, "sequenceIndexOfMostRecentTimeDecayUpdate": 0, "maxSequenceIndex": 504, "compressed": true, "randomSeed": -6734892575936596101 } ], "compactRandomCutTreeStates": [ { "version": "2.0", "root": 0, "maxSize": 256, "outputAfter": 32, "storeSequenceIndexesEnabled": false, "centerOfMassEnabled": false, "nodeStoreState": { "version": "2.0", "capacity": 255, "compressed": true, "cutDimension": [ 0, 31, 255, 1035009826, 250599463, 603060643, 754644337, 891416226, 782146283, 378713454, 1056620465, 177986421, 928036085, 1071848943, 501577126, 898733163, 254781898, 53861341, 509206381, 333917169, 959170671, 437304017, 659733574, 389488302, 1021681109, 82354001, 762926541, 711943918, 735524973, 1005665057, 320935793, 1029885382, 573999574, 483525999, 72393826, 1050637815, 175233779, 1013619019, 69921914, 199951919, 23503, 0, 0, 0, 0, 0 ], "cutValueData": [ 69, 52, -120, 38, 66, -105, 91, -66, 66, -119, -123, -128, 66, -112, -25, 76, 64, -49, 79, 79, 66, -93, 20, -11, 66, 90, 87, -118, 66, -83, 119, 41, 66, -82, -112, -109, 66, 68, -88, -34, 66, -61, -42, 101, 66, 113, 3, -70, 66, 127, 51, -88, 66, -104, -22, -59, 66, -82, -85, -15, 66, 123, -105, 34, 66, 115, 52, 98, 66, -116, -128, -82, 66, -95, 49, -125, 65, -73, 19, -122, 66, -113, -121, 34, 66, -110, 8, 1, 66, 101, 25, -6, 66, -88, 7, -59, 66, -77, 2, 27, 66, -109, -34, 54, 66, 95, -7, 71, 66, -119, 30, 41, 66, -74, -53, -123, 66, -63, 102, -15, 66, 84, 105, 70, 65, 4, -25, -22, 66, -65, -5, -112, 66, -116, -47, -119, 66, -108, 9, -92, 66, 91, -44, 88, 66, -65, -21, 19, 66, 67, 38, 75, 66, -114, -113, 20, 65, -38, 72, 72, 66, -109, 3, -88, 66, 86, -27, -95, 66, -111, -60, -113, 66, 122, -1, -112, 66, 96, -8, 33, 66, -109, -88, -122, 66, 97, -14, 89, 66, 115, 44, 65, 66, -122, -114, -71, 66, 76, -51, 3, 66, -78, -88, -93, 66, 90, 31, -105, 66, -104, -74, 37, 66, -115, -96, 73, 66, -113, 111, 24, 66, -126, -58, 61, 66, 117, -80, 27, 65, -38, 125, 52, 66, -99, 117, 47, 66, 81, 49, -33, 66, 93, -100, 75, 66, 110, 62, -54, 66, 82, -51, 91, 66, -71, -93, -22, 66, -64, 51, 0, 66, 75, 78, -62, 66, -73, 64, 84, 66, -95, -53, -83, 66, -92, 53, 63, 66, -65, -15, 103, 66, -76, -88, -113, 66, -76, -128, -28, 66, 114, 113, 117, 66, 74, 68, 88, 66, -111, -73, -124, 66, 72, -3, -80, 66, -98, -117, 86, 66, -64, 80, 60, 66, -95, 50, 121, 66, -61, -75, -94, 66, -78, -20, 96, 66, 83, -82, -84, 66, -70, 12, -59, 66, 81, -3, 56, 66, -112, 22, 94, 66, -64, 100, -27, 66, -83, -17, -68, 66, 116, 1, 44, 65, -97, 93, -34, 66, -113, -63, -95, 66, -116, 71, -23, 66, 105, -119, -108, 66, 78, -52, 122, 66, 75, 89, 69, 66, -106, 88, 54, 66, 88, 81, 82, 65, -15, 9, -44, 65, -2, -118, -32, 66, -62, 71, -79, 66, -64, 84, 99, 66, -62, -72, -101, 66, -115, 118, 69, 66, 78, 93, -70, 66, 80, 69, 60, 66, -76, 49, 22, 66, 84, -25, 48, 66, -63, 104, -70, 64, -15, 116, -28, 66, -117, 21, 34, 66, -60, -12, -7, 66, -59, -122, 96, 66, -119, 111, 81, 66, 51, 106, -48, 66, -113, -1, 19, 66, -74, -13, -8, 66, -63, 7, -32, 66, 104, 85, 83, 66, -110, -25, 12, 66, -126, 4, 25, 66, 86, 121, 109, 66, -92, 47, -114, 66, -112, -55, 4, 66, 127, 59, -65, 66, -62, 18, 80, 66, 76, -59, 108, 66, 71, -104, 95, 66, -95, -67, 97, 66, -93, -126, -59, 66, 70, -2, -29, 66, 105, -76, 11, 66, -68, -1, 108, 66, -72, 62, 11, 66, -103, -56, -72, 66, -80, 67, -43, 66, 99, -36, 44, 66, -118, 120, -3, 66, -85, -97, 39, 66, -79, 120, -98, 66, -99, 8, 16, 66, -71, -124, -94, 66, -106, 19, -75, 66, -71, 24, -39, 66, 79, 43, 22, 66, -61, -84, 109, 66, -88, -46, -86, 66, 72, 31, 61, 66, -117, 23, -121, 66, -78, -66, 1, 66, -78, -65, 16, 66, -128, -87, 127, 66, -117, -128, 6, 66, 71, 36, 67, 66, -62, -42, -51, 66, -71, -104, 105, 66, -112, 106, -34, 66, -113, 63, -111, 66, -120, -69, 32, 66, -124, -64, 122, 66, -60, -43, -95, 66, -65, -117, -34, 66, 120, -80, 62, 66, -101, 37, 105, 66, -103, 77, -81, 66, 79, -72, -70, 66, -113, 111, -111, 66, -66, -128, -1, 66, -60, -67, 59, 66, -90, 126, -15, 66, -62, -91, 109, 66, -76, -125, 80, 66, 73, -106, 113, 66, -96, -79, 106, 66, -73, -29, -110, 66, -63, -61, 63, 66, -61, 7, -61, 66, -66, 94, -105, 66, -65, 118, -110, 66, -112, 43, -74, 66, 84, 84, -96, 66, -101, -54, -110, 66, 88, 70, -55, 66, 71, -112, 54, 66, -103, -71, -87, 64, -34, -46, 44, 66, -114, -1, 115, 66, -69, 42, 85, 66, -77, -11, -128, 66, 78, 20, -12, 66, -97, 18, -41, 66, -98, 24, 63, 66, -99, -108, 59, 66, -69, -109, 39, 66, 123, 20, 44, 66, 71, 107, -23, 66, -102, -54, -55, 66, -59, -1, 59, 66, -106, 117, 62, 66, 89, -75, 55, 66, 118, -44, 66, 66, 82, -77, 110, 66, -64, 46, -10, 66, 103, -84, -54, 66, 89, 67, -103, 66, -92, -70, -61, 66, 80, -87, -57, 66, -66, -49, -88, 66, -78, -121, -13, 66, -108, -9, 88, 66, -64, -81, -11, 66, -67, 26, 6, 66, -67, 34, -62, 66, 77, -43, 122, 66, -128, 8, 28, 66, -113, 1, 70, 66, -70, 67, 48, 66, -61, 66, 125, 66, 85, -105, -82, 66, -90, 65, 44, 66, -108, -28, 87, 66, -66, 55, -74, 66, -58, 39, 107, 66, -102, 79, -124, 66, 86, -119, -25, 66, -69, 37, -54, 66, -71, 5, 91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], "precision": "FLOAT_32", "root": 0, "canonicalAndNotALeaf": true, "size": 225, "leftIndex": [ -1, 1, 255, 1162254824, 712052113, 754938941, 595716196, 726452833, 1028151670, 729943241, 644983369, 983697169, 1017110264, 725394985, 23845990, 0, 0 ], "rightIndex": [ -1, 1, 255, 731785498, 1098282959, 1013783822, 1145606648, 582793942, 625851574, 731233652, 644972300, 1098282118, 597311243, 1099823740, 21523369, 0, 0 ], "nodeFreeIndexes": [], "nodeFreeIndexPointer": 29, "leafFreeIndexes": [], "leafFreeIndexPointer": 29, "partialTreeStateEnabled": true }, "boundingBoxCacheFraction": 0.0, "partialTreeState": true, "seed": -4554398593646845892, "id": 0, "dimensions": 32, "staticSeed": 0, "weight": 0.0, "hasAuxiliaryData": false }, { "version": "2.0", "root": 0, "maxSize": 256, "outputAfter": 32, "storeSequenceIndexesEnabled": false, "centerOfMassEnabled": false, "nodeStoreState": { "version": "2.0", "capacity": 255, "compressed": true, "cutDimension": [ 0, 31, 255, 120031194, 258812407, 464848054, 333552074, 753138641, 900978230, 595176269, 364882913, 899482826, 514410871, 376147622, 200264779, 497241677, 992958069, 536472545, 719968494, 378748489, 448611453, 757247405, 504404769, 249024510, 902268867, 849593554, 304122367, 188320945, 305055057, 309976559, 913659554, 634459733, 454921387, 737840465, 708523681, 637470893, 623547595, 458720634, 644593638, 709922266, 1022, 0, 0, 0, 0, 0 ], "cutValueData": [ 69, 18, 9, -30, 68, -53, 97, 81, 66, -128, -75, -115, 66, 105, -14, 88, 69, 4, 108, -55, 66, 9, -56, 46, 66, 49, 97, -113, 66, 94, -27, 115, 66, -73, 111, 53, 66, -99, 115, -29, 66, -102, 89, 120, 66, 118, -22, 15, 66, -60, -63, -58, 66, -124, -30, 42, 66, 126, -62, 106, 66, -87, -3, -127, 66, 114, -96, -70, 66, -122, -12, -71, 66, -75, 100, 6, 66, -100, -88, -63, 66, -76, 117, 5, 66, 77, 83, 64, 66, -68, -78, 4, 66, -126, -56, 79, 66, -93, 45, -50, 66, -71, 75, 29, 66, -80, 23, -71, 66, 17, -39, -54, 66, -61, -19, -116, 66, -67, 39, -45, 66, -73, -51, 36, 66, -112, -57, -127, 66, -119, 100, 81, 66, 76, 23, -49, 66, 70, -100, 27, 66, -79, -17, 38, 66, -115, -45, -83, 66, -87, 72, 45, 66, -61, 104, -89, 66, 122, 0, -93, 66, 74, 36, -66, 66, -114, 57, 21, 66, -96, 112, 62, 66, 95, 120, -104, 66, -72, -53, -112, 66, 95, 22, -127, 66, 96, 102, -77, 66, -78, -76, 80, 66, -61, 72, 48, 66, -79, 28, 37, 66, -102, -112, 52, 66, -68, -10, -114, 66, -109, -12, 70, 66, -83, -12, -13, 66, 70, -9, -42, 66, 126, -66, 52, 66, -84, -79, 49, 66, -76, 20, 60, 66, -77, 114, 51, 65, -51, -43, -90, 66, -70, 41, 51, 66, -93, 67, -16, 66, 115, -11, -17, 66, 78, -46, -34, 66, -88, -69, -103, 66, 68, 75, -82, 66, 101, 104, -73, 66, -63, 113, 0, 66, 119, 125, -29, 65, -43, -85, 46, 66, -59, 116, 66, 66, -99, 41, -87, 66, -120, -36, -119, 66, -82, 58, 99, 66, 96, 83, 97, 66, -81, -71, 17, 66, -83, 99, 65, 66, -64, -78, 9, 66, -94, 11, -80, 66, 73, 44, -111, 66, -109, 58, 52, 66, -66, -62, -119, 66, -81, 101, 5, 66, -97, -12, -43, 66, -107, 20, -13, 66, 82, -102, 22, 66, -68, -53, 102, 66, 94, 39, 28, 66, 107, -47, 31, 66, 72, -93, 89, 66, -72, 91, -62, 66, 103, -74, 53, 66, -75, 86, -126, 66, 113, -103, -50, 66, -58, 64, -36, 66, -114, -58, 77, 66, -87, -15, -119, 66, -60, -79, 50, 66, 71, 38, -15, 66, -69, -26, 65, 66, -107, -54, 69, 66, 81, 66, 23, 66, -113, -114, 24, 66, 72, -5, 3, 66, -96, 114, -63, 66, -60, -121, -41, 66, 69, -109, -21, 66, -118, 50, -94, 66, -102, -120, -56, 66, -104, -10, -95, 66, -110, 106, -125, 66, -100, 68, 44, 66, -65, 42, 16, 66, -74, 11, -76, 66, -108, -11, -128, 66, -106, 42, -48, 66, -83, -49, -4, 66, -97, -120, 3, 66, -93, -52, 57, 66, 80, 35, 1, 66, -70, -94, -71, 66, 83, -104, -20, 66, 88, -112, -57, 66, 75, -113, 56, 66, -112, 47, 20, 66, -125, 45, -116, 66, 77, 37, -9, 66, -82, 55, 32, 66, -125, 94, 86, 66, 80, -31, -76, 63, -89, 29, -121, 66, -66, -81, -71, 66, -68, 36, 30, 66, -60, -25, 25, 66, -102, -120, 111, 66, 70, 79, 85, 66, -68, 95, -68, 66, -99, 28, 115, 66, 83, -78, 106, 66, 122, 13, -37, 66, -62, -7, 109, 66, -89, -79, 126, 66, -80, -109, -31, 66, -101, -90, 13, 66, -96, -117, 87, 66, -112, 125, 100, 66, 83, 127, 100, 66, 71, 94, 94, 66, 99, -55, 43, 66, -113, -21, 50, 66, -128, 125, 67, 66, -82, 56, 86, 66, -105, 35, -38, 66, -103, -34, 93, 66, -70, 30, 76, 66, -101, -104, 47, 66, 69, -122, -20, 66, 112, 85, -50, 66, 90, -15, -41, 66, 94, -91, 124, 66, -128, 14, -107, 66, -105, -24, -7, 66, -60, -115, -6, 66, -114, -14, -44, 66, -111, 92, -47, 66, -81, 28, 97, 66, 95, -71, 55, 66, 76, 88, 100, 66, -116, -126, -79, 66, -86, 79, -113, 66, -101, -6, -51, 66, -69, 72, 28, 66, -100, 122, -2, 66, -78, 33, -42, 66, 88, 9, 11, 66, -108, -51, 48, 66, 107, 121, -18, 66, 85, 5, -18, 66, -103, -98, 65, 66, -112, 81, -63, 66, -105, 93, -78, 66, -63, 58, -70, 66, 87, -20, 59, 66, -98, -110, 48, 66, 75, 53, 20, 66, -102, 18, -113, 66, -108, 92, 91, 66, -105, -117, -11, 66, -106, -126, -105, 66, -82, -125, 98, 66, 101, -103, -123, 66, -108, -95, 121, 66, -98, 27, -125, 66, -105, -39, -79, 66, -59, -24, -38, 66, -70, -37, -125, 66, 100, 49, 57, 66, -71, -54, -53, 66, -127, 111, -72, 66, -60, -7, 127, 66, -108, -89, 80, 66, -105, 27, -65, 66, -62, -4, -89, 66, -70, -98, -64, 66, -73, -30, 50, 66, 109, -98, 100, 66, -113, 17, 68, 66, 73, -120, 26, 66, -100, 18, 25, 66, -97, 5, -35, 66, -62, -4, -102, 66, 91, -111, -117, 66, -115, 74, 36, 66, 79, 27, 65, 66, -73, -125, -122, 66, 79, -61, 99, 66, -66, 72, -89, 66, -60, -119, 95, 66, 75, 72, 104, 66, -125, 18, -8, 66, -98, -116, -82, 66, -112, 102, -6, 66, -66, -36, -66, 66, 68, -6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], "precision": "FLOAT_32", "root": 0, "canonicalAndNotALeaf": true, "size": 224, "leftIndex": [ -1, 1, 255, 1028080268, 1117081687, 975190958, 716904877, 774831176, 639322549, 638555764, 595666588, 969288592, 1012189408, 989809142, 7201519, 0, 0 ], "rightIndex": [ -1, 1, 255, 1027607764, 1161729044, 1032527560, 1098284182, 645160292, 1012395092, 716716960, 726772144, 1114345717, 625838153, 588041896, 8827861, 0, 0 ], "nodeFreeIndexes": [], "nodeFreeIndexPointer": 30, "leafFreeIndexes": [], "leafFreeIndexPointer": 30, "partialTreeStateEnabled": true }, "boundingBoxCacheFraction": 0.0, "partialTreeState": true, "seed": 2247190326101601255, "id": 0, "dimensions": 32, "staticSeed": 0, "weight": 0.0, "hasAuxiliaryData": false }, { "version": "2.0", "root": 0, "maxSize": 256, "outputAfter": 32, "storeSequenceIndexesEnabled": false, "centerOfMassEnabled": false, "nodeStoreState": { "version": "2.0", "capacity": 255, "compressed": true, "cutDimension": [ 0, 31, 255, 668518854, 401940207, 640755434, 937474889, 261731785, 975152181, 514923243, 334452697, 653561195, 708155091, 525945414, 573290346, 782200699, 933399350, 438040617, 1066984925, 1071890361, 1029289941, 173397579, 192211567, 94032977, 313317207, 359728693, 866854081, 447974187, 842047015, 191737714, 644083570, 1002012399, 899747637, 730906451, 189980403, 258315510, 738027979, 93416667, 376759465, 1010, 0, 0, 0, 0, 0, 0 ], "cutValueData": [ 68, -76, 97, 71, 68, -52, -40, 92, 69, 15, -33, 86, 66, -100, -128, -32, 66, -95, 46, -85, 66, 74, 27, -34, 66, 101, 90, 120, 66, 116, 110, 119, 66, 102, 118, -25, 66, -90, 4, -87, 65, 67, 8, -51, 66, 106, -59, -118, 66, -64, 50, 94, 66, 81, 125, 68, 66, -104, 64, 114, 66, -84, 6, -74, 64, 1, 43, 23, 66, 114, 4, 4, 66, -103, 47, 84, 66, -66, 38, -63, 66, -68, -32, 80, 66, 54, -121, 124, 66, -66, 109, 82, 66, 78, -125, 46, 66, -96, -74, 62, 66, -72, -57, -45, 66, -109, 116, -83, 66, 54, 93, -27, 66, -108, -115, -89, 66, 110, 105, 12, 66, -104, 124, 102, 66, -97, 97, -116, 66, -108, 104, -18, 66, -128, 15, -103, 66, -121, 93, 38, 66, 122, -34, -61, 66, 77, 77, 107, 66, 87, -114, -7, 66, -96, 24, 28, 66, -82, -17, 66, 66, 100, -79, -24, 66, 83, -93, 34, 66, -113, 27, -37, 66, -61, 67, 0, 66, -103, 62, 17, 66, -61, -37, 90, 66, -69, 109, 73, 66, -103, -12, -24, 66, 23, 44, 32, 66, 79, -79, 26, 66, 97, 114, 7, 66, -95, -128, -39, 66, 95, -75, -94, 66, 119, -16, -38, 66, -127, -13, 18, 66, -64, -80, -2, 66, -106, 118, -65, 66, 119, 4, 9, 66, -123, -34, 97, 66, -119, 40, 103, 66, -74, 74, -98, 66, -76, 127, 86, 66, -69, 44, 9, 66, -75, 85, 59, 66, -98, -29, -1, 66, 110, 46, 17, 66, -64, 11, 27, 66, 106, 59, -41, 66, -108, 86, -11, 66, 80, 80, 17, 66, -75, 120, 48, 66, -111, -72, 52, 66, 79, 12, -109, 66, 108, 118, 30, 66, 85, -13, -12, 66, -64, 77, -58, 66, -118, -38, -84, 66, 71, 33, -27, 66, -72, -30, -87, 66, -89, 79, -39, 66, -81, -69, -47, 66, -120, -127, -89, 66, -83, -100, -52, 66, 95, -115, -36, 66, -101, 84, -122, 66, -108, 67, 100, 66, -92, -68, 51, 66, 103, -3, 110, 66, -127, -67, 104, 66, -123, -100, -69, 66, -123, 123, -84, 66, -83, 4, 28, 66, -107, 44, -71, 66, -116, -60, 5, 66, -113, 119, 87, 66, 102, 91, -9, 66, -95, 8, -96, 66, -114, 46, 2, 66, 113, 56, -125, 66, 88, 3, 49, 66, -76, -35, 16, 66, 91, -41, -19, 66, -118, 17, -41, 66, -67, 43, -68, 66, -112, -128, -13, 66, 75, -62, 4, 66, -109, -3, -74, 66, -92, -8, -123, 66, -126, 7, -79, 66, -83, -9, -85, 66, -103, 22, 105, 66, 103, -26, 22, 66, -117, 117, 118, 66, -97, -41, -127, 66, 75, -70, -74, 66, 86, -31, 97, 66, -67, -84, 85, 66, -107, -105, 94, 66, 92, -48, 28, 66, -121, 9, -78, 66, -126, 91, 63, 66, -65, -122, -68, 66, -115, -95, -73, 66, -113, 48, -93, 66, -100, -78, 101, 66, -68, 116, -46, 66, 77, -41, -58, 66, -81, -51, 44, 66, -125, -31, -81, 66, -91, 84, -99, 66, -77, -108, -34, 66, -110, 19, 81, 66, -98, -123, 104, 66, -111, 119, 44, 66, -108, -87, 3, 66, -66, 124, -116, 66, 80, 48, 28, 66, -67, 88, 0, 66, -105, 100, 46, 66, -68, 119, 57, 66, -105, -113, -67, 66, -62, 109, 50, 66, -85, 61, 87, 66, -118, 78, -76, 66, 70, -110, 23, 66, -103, 105, 20, 66, -62, -114, 28, 66, 102, -20, 127, 66, 102, -120, -124, 66, -107, 109, -120, 66, 80, 4, 39, 66, -115, -110, -59, 66, 100, 5, -3, 66, -94, -123, -72, 66, 74, 31, 50, 66, -121, -35, 117, 66, -67, 118, -112, 66, 79, -119, -56, 66, 96, 64, -117, 66, 74, 124, 44, 66, -64, -35, -81, 66, -100, -16, 71, 66, -60, 8, -82, 66, 76, -33, 50, 66, 119, -75, -64, 66, 100, 96, 38, 66, -84, 46, 32, 66, 81, -34, 57, 66, 91, -20, 65, 66, 80, 28, 107, 66, 91, -107, -87, 66, -67, 104, 15, 66, 80, -28, 70, 66, -106, 2, -63, 66, -97, 45, 108, 66, -112, 123, -47, 66, -127, 122, -64, 66, -67, 28, 94, 66, -68, 109, 127, 66, -57, 103, -33, 66, 71, 69, 1, 66, -66, 30, -77, 66, 73, 122, 92, 66, -107, -105, 34, 66, -99, -3, 27, 66, -119, -83, 34, 66, 94, 63, -47, 66, 119, -68, -2, 66, 78, 0, 7, 66, -110, -6, 76, 66, -108, -12, 12, 66, -104, 127, -16, 66, -77, 0, -37, 66, 127, 31, 32, 66, -110, 56, 16, 66, 94, -43, 87, 66, -64, 24, -51, 66, 71, 32, -44, 66, 91, 118, 0, 66, -84, 105, 33, 66, -61, 121, -74, 66, -65, 60, -122, 66, 89, 117, -79, 66, -113, 7, 10, 66, 125, -97, 89, 66, -69, -107, 92, 66, 86, 14, 121, 66, -63, 104, 96, 66, -117, -123, -7, 66, -75, -117, 33, 66, -103, 78, 64, 66, -93, -80, 118, 66, -105, 55, 30, 66, -98, 48, 105, 66, 90, -44, -13, 66, 82, -67, 47, 66, -60, -9, -36, 66, 90, -53, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], "precision": "FLOAT_32", "root": 0, "canonicalAndNotALeaf": true, "size": 218, "leftIndex": [ -1, 1, 255, 731715524, 990054538, 1026741703, 987921818, 1160427698, 1027744577, 1155172667, 753501596, 754980010, 970705661, 585921265, 12283, 0, 0 ], "rightIndex": [ -1, 1, 255, 770055808, 1032510794, 1098485999, 987942229, 772988480, 643495504, 628963700, 710528990, 758159636, 973894064, 982928569, 10088, 0, 0 ], "nodeFreeIndexes": [], "nodeFreeIndexPointer": 36, "leafFreeIndexes": [], "leafFreeIndexPointer": 36, "partialTreeStateEnabled": true }, "boundingBoxCacheFraction": 0.0, "partialTreeState": true, "seed": 5668109095303649572, "id": 0, "dimensions": 32, "staticSeed": 0, "weight": 0.0, "hasAuxiliaryData": false }, { "version": "2.0", "root": 0, "maxSize": 256, "outputAfter": 32, "storeSequenceIndexesEnabled": false, "centerOfMassEnabled": false, "nodeStoreState": { "version": "2.0", "capacity": 255, "compressed": true, "cutDimension": [ 0, 31, 255, 905644061, 475760115, 343269078, 498908753, 380147165, 664402858, 221587067, 304048502, 922151586, 249281837, 790437806, 317134067, 853531946, 78737139, 116205674, 863303737, 488729431, 997545537, 728103473, 773499333, 481474850, 213716571, 455575535, 215173479, 1005317039, 904377537, 573929313, 534994493, 1029109043, 321695009, 1021381295, 584251965, 82291706, 182418734, 500729415, 174446697, 635208918, 524079082, 15, 0, 0, 0, 0 ], "cutValueData": [ 67, 25, -29, -114, 61, -7, 21, -38, 67, -16, 62, 59, 68, 25, 115, -42, 66, 102, -95, 45, 69, 80, 95, 44, 66, -127, 71, 31, 66, -114, -40, 61, 66, -98, 88, -49, 64, -68, -115, 10, 66, -125, 36, -113, 66, -63, -85, 49, 66, -79, -87, 46, 66, -60, -26, -8, 66, 75, -56, -113, 66, 74, -7, -3, 65, -105, -86, 43, 66, -59, 114, 121, 66, -125, 27, 16, 66, -94, 40, -112, 66, 93, 110, -71, 66, -118, -127, -85, 66, 68, -37, 108, 66, -100, -82, -94, 66, -89, 112, -29, 66, -69, 51, -115, 66, -114, -12, -1, 66, -109, -18, 50, 66, -70, -18, 39, 66, 82, 51, 87, 66, -79, -31, 46, 66, 77, -105, -96, 66, -71, -20, 21, 66, 78, 102, -113, 66, -110, -44, 17, 66, 73, 50, -85, 66, 82, -104, 0, 66, 106, -118, -7, 66, -114, -109, 121, 66, -57, -9, 57, 65, -93, -63, -66, 66, -59, -70, -89, 66, -74, -120, 2, 66, 106, 7, -88, 66, -59, 94, -105, 66, -60, -83, -49, 66, -103, 0, -60, 66, -113, 126, 120, 66, -74, 14, 8, 66, 125, 104, -117, 66, -62, 120, 80, 66, -122, -34, 112, 66, 71, -3, 117, 66, 83, 104, 57, 66, -98, 31, 23, 66, -94, -91, 104, 66, 84, -87, 47, 66, 69, 117, -14, 66, -94, -117, -86, 66, 76, 94, -43, 66, -65, -13, -78, 66, -102, -53, 43, 66, 75, 92, -121, 66, -80, 69, -70, 66, -108, -125, -44, 66, 91, -9, -39, 66, 74, -4, 46, 66, 93, 121, 55, 66, -106, -56, -94, 66, -60, 83, 69, 66, -66, 34, 109, 66, -110, -60, 95, 66, -66, -80, 49, 66, -109, 45, 107, 66, 79, 66, -59, 66, 116, 108, 68, 66, -99, 100, -72, 66, -98, -28, 53, 66, 100, 18, -48, 66, 76, -26, 55, 66, 83, 40, -58, 66, -62, 3, -62, 66, 76, -27, -44, 66, -59, 113, -105, 66, -74, 117, 92, 66, -124, -53, 37, 66, -79, -98, -71, 66, -66, 32, -113, 66, -72, 105, 112, 66, 82, -81, 79, 66, -121, 101, -20, 66, -120, -69, 108, 66, -61, 70, 72, 66, -117, -40, -101, 66, 68, -41, 63, 66, -110, 79, 8, 66, 82, 82, 125, 66, -69, 78, -71, 66, -68, 101, 98, 66, -63, -77, -88, 66, -64, 97, -108, 66, -74, 107, -60, 66, -111, -34, -26, 66, -66, -84, 41, 66, -92, 8, -25, 66, -69, -4, 74, 66, 106, -41, -101, 66, -119, -126, 1, 66, -96, -63, -74, 66, -127, -112, 84, 66, -75, -23, 91, 66, 79, -23, 28, 66, -68, 30, 0, 66, -104, -123, -83, 66, -99, -119, -127, 66, -83, 63, -67, 66, -71, -61, -76, 66, -105, -73, -124, 66, -115, -17, 81, 66, -119, -109, -17, 66, -69, 3, -46, 66, -107, -9, 126, 66, -63, 40, 39, 66, -126, 88, -121, 66, 68, -49, -34, 66, -59, -78, 43, 64, -113, -25, -1, 66, -75, 97, 113, 66, 122, -51, -96, 66, -70, -83, -120, 66, 72, -18, -77, 66, -70, -66, -34, 66, 94, -72, 94, 66, 78, 29, -114, 66, -107, 21, -29, 66, 77, -6, -127, 66, -64, -41, 83, 66, -105, 102, -45, 66, 99, 33, -34, 66, 98, -117, 117, 66, -62, 27, 20, 66, -65, -69, -73, 66, -100, -33, 60, 66, -68, 64, -41, 66, 85, -59, 84, 66, -114, -53, -76, 66, -83, 37, -25, 66, 102, -59, 46, 66, -88, -126, -38, 66, 123, -23, -103, 66, -121, 41, -57, 66, -73, -15, -111, 66, -109, -93, 56, 66, 71, -24, 92, 66, -61, 89, -51, 66, -84, 97, -5, 66, -99, 85, 86, 66, 74, -122, 86, 66, -113, 71, 56, 66, -65, 94, 25, 66, 105, -90, 81, 66, -114, 34, -85, 66, -111, 25, -36, 66, -103, -124, 126, 66, 78, 21, 77, 66, -64, -113, -73, 66, -83, -73, -85, 66, 97, 72, 67, 66, 109, -69, 42, 66, -109, 102, 44, 66, -108, 10, 28, 66, -112, -46, 36, 66, -101, -71, 8, 66, -88, 63, -16, 66, -95, -93, -25, 66, -104, 110, -37, 66, 88, 43, 66, 66, -104, 69, -122, 66, -75, -62, 28, 66, -117, 67, 47, 66, 73, 12, -32, 66, -99, 104, 6, 66, -71, 127, -57, 66, -68, 13, 96, 66, -74, 9, -9, 66, -61, 17, 101, 66, -108, -37, 10, 66, -119, 109, -5, 66, -64, -62, 12, 66, -125, 125, 126, 66, -113, 50, -18, 66, -121, -88, 115, 66, -71, 60, 64, 66, 71, 103, 54, 66, -90, 107, 50, 66, 79, 87, 28, 66, -60, -7, 3, 66, -83, 115, 7, 66, -60, -121, 83, 66, -114, -48, -14, 66, 81, -124, -18, 66, -73, -109, -128, 66, -103, 109, 34, 66, -103, -110, -88, 66, -128, 58, -33, 66, -79, -56, -9, 66, -105, -66, 19, 66, -103, 26, -50, 66, -101, -108, -10, 66, -64, -85, 89, 66, -104, -3, -85, 66, 97, 16, 16, 66, -61, -39, -22, 66, 70, -53, 17, 66, -76, -65, 42, 66, -108, -117, 59, 66, -67, -11, -32, 66, -68, 40, -117, 66, -115, 38, 121, 66, -113, -114, 83, 66, -110, 4, -45, 66, -69, -100, 78, 66, -61, 122, 45, 66, 83, -110, 32, 66, 98, -95, 92, 66, -118, 79, 58, 66, 87, -22, 110, 66, 74, -98, 48, 66, 79, 30, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], "precision": "FLOAT_32", "root": 0, "canonicalAndNotALeaf": true, "size": 229, "leftIndex": [ -1, 1, 255, 645503984, 754932688, 1112574895, 772528310, 727004726, 1103212466, 1142518334, 968737928, 1114349854, 726301852, 715612291, 600441944, 1, 0 ], "rightIndex": [ -1, 1, 255, 1031346634, 769874273, 968790667, 643571855, 1100062132, 730120472, 1028158001, 1017983984, 731079067, 984501022, 581840062, 624776773, 1, 0 ], "nodeFreeIndexes": [], "nodeFreeIndexPointer": 25, "leafFreeIndexes": [], "leafFreeIndexPointer": 25, "partialTreeStateEnabled": true }, "boundingBoxCacheFraction": 0.0, "partialTreeState": true, "seed": -2564745619268294314, "id": 0, "dimensions": 32, "staticSeed": 0, "weight": 0.0, "hasAuxiliaryData": false }, { "version": "2.0", "root": 0, "maxSize": 256, "outputAfter": 32, "storeSequenceIndexesEnabled": false, "centerOfMassEnabled": false, "nodeStoreState": { "version": "2.0", "capacity": 255, "compressed": true, "cutDimension": [ 0, 31, 255, 192256842, 175568857, 367496865, 1055719231, 378742481, 202427477, 773694774, 623950843, 231783221, 632383305, 620189034, 196558758, 349878587, 1056540149, 70600491, 312944081, 580429739, 907859757, 459868150, 82024246, 760411894, 746158818, 663805373, 73718511, 879564727, 705772005, 1005532225, 89722041, 723745745, 799472890, 1054250306, 841709619, 444237647, 571555557, 1001506038, 108188741, 849344946, 606686422, 0, 0, 0, 0, 0 ], "cutValueData": [ 68, -25, 64, -27, 68, 17, 100, 117, 69, 50, 88, 30, 66, 121, 124, -116, 66, 8, 25, 55, 66, -125, 97, 53, 66, -92, -48, 0, 66, -69, 31, -50, 66, -101, 16, -76, 66, 58, 28, 51, 66, 91, 64, -38, 66, -97, 7, 40, 66, -102, 63, -116, 66, -111, -101, 7, 62, 20, 67, 110, 66, 126, 125, 100, 66, -79, 50, -45, 66, -66, -62, 82, 66, 109, 50, 43, 66, -118, -11, -50, 65, -96, -74, -16, 66, -88, 96, -101, 66, -74, 36, -94, 66, 3, 32, -4, 66, -106, 123, -106, 66, -59, 102, -92, 66, -110, -98, 34, 66, -82, -55, -120, 66, -93, 80, -37, 65, -121, 83, 19, 66, -123, -108, 59, 66, -70, 108, 119, 66, 72, 77, -13, 66, -86, -66, 13, 66, -128, 85, 8, 66, -68, -126, 25, 66, -66, 89, 1, 66, -119, 11, -49, 66, -96, 15, 10, 66, 78, -68, -32, 66, -120, -60, 53, 66, 73, 116, -104, 66, 116, 52, 45, 66, 109, 111, 1, 66, -72, 60, -31, 66, -111, -84, -99, 66, 125, -72, -98, 66, -66, 16, -105, 66, -104, 127, -47, 66, -95, -38, -5, 66, -84, 88, 41, 66, -108, -40, -66, 66, -116, 78, -24, 66, -92, 97, 11, 66, -104, 96, 116, 66, -63, -121, -24, 66, -117, -32, -74, 66, -67, 91, 107, 66, 101, -91, -59, 66, -61, 71, 118, 66, -86, -89, 11, 66, 92, -3, -64, 66, -114, 102, 74, 66, -64, 32, 19, 66, 79, -56, 25, 66, -59, -114, 77, 66, -97, -122, 71, 66, -119, -112, 51, 66, -128, 37, 17, 66, -68, 41, 84, 65, 90, 91, -107, 66, -95, -39, -79, 66, 106, 64, -61, 66, -119, -106, 25, 66, -64, -5, -44, 66, -121, -116, -77, 66, -85, -117, -3, 66, -103, -56, 4, 66, -102, -24, 37, 66, 84, 119, 54, 66, -113, 104, -78, 66, 113, -102, -116, 66, 68, 4, 104, 66, -122, -2, -49, 66, 98, -60, -88, 66, -122, 14, 19, 66, -113, -111, 77, 66, -73, -15, -59, 66, 86, -74, 18, 66, -77, -90, -41, 66, -119, -5, 21, 66, -59, 50, 50, 66, -103, 60, 21, 66, -66, 121, 18, 66, -70, 21, 24, 66, -128, -112, -127, 66, 86, 48, -89, 66, -109, -64, -96, 66, -116, 28, 68, 66, -100, 127, 0, 66, -112, -63, -67, 66, -110, -65, 76, 66, -112, -72, 43, 66, 9, 65, 65, 66, -93, -8, -34, 66, -106, -20, 23, 66, -100, 31, -114, 66, 90, 120, 93, 66, -62, -18, 50, 66, 96, -5, -29, 66, -94, 97, 2, 66, -74, -101, 88, 66, -70, 28, 14, 66, -106, 14, 33, 66, -67, 75, 127, 66, -98, 90, -38, 66, -119, 32, -96, 66, 85, 99, -60, 66, -64, -46, 72, 66, -64, -28, -6, 66, -81, 54, 94, 66, 86, 126, 97, 66, -106, -94, -6, 66, -111, 2, -114, 66, -95, 9, -27, 66, -68, 23, 62, 66, -60, -56, -77, 66, 82, -115, -79, 66, -62, 26, -36, 66, -59, 101, 70, 65, 95, 54, 62, 66, -60, 7, 13, 66, -100, -94, 22, 66, -110, -103, 34, 66, 75, 77, 4, 66, -99, -126, -41, 66, -110, -111, 101, 66, 100, -23, 85, 66, 95, 73, 26, 66, 104, -86, 92, 66, -74, -45, 29, 66, -125, -56, 106, 66, -64, 112, -125, 66, -62, 115, -101, 66, 89, 86, 40, 66, -103, 97, 57, 66, -109, 77, -23, 66, -74, -14, -104, 66, -85, 21, 82, 66, -81, 127, 5, 66, -121, 60, 26, 66, 103, -36, -53, 66, -61, -76, -45, 66, -67, 112, -87, 66, -102, 86, 103, 66, -110, 16, 69, 66, -104, -9, 122, 66, -68, 115, 63, 66, -86, 69, 88, 66, -78, 21, 100, 66, -73, 123, -29, 66, -101, 60, -90, 66, -112, -47, -54, 66, -102, -124, 2, 66, 92, -55, 46, 66, -70, 88, 93, 66, -115, -23, -56, 66, -63, -75, -103, 66, -100, -62, -24, 66, -62, 86, -116, 66, -69, -30, -74, 66, -57, -123, 21, 66, -61, -26, 45, 66, -108, -83, 58, 66, -67, 117, -66, 66, 90, -35, -125, 66, 112, -123, -45, 66, -92, -97, 84, 66, -80, 24, 116, 66, 74, 116, 75, 66, -69, -86, -105, 66, -74, 41, 49, 66, -119, -39, -23, 66, -127, -39, 106, 66, -115, -74, 103, 66, 126, 113, -89, 66, 85, -46, -119, 66, -101, 5, -44, 66, -59, 84, 124, 66, -77, 116, -68, 66, -62, 42, -69, 66, -120, -42, -64, 66, -126, -57, -15, 66, -94, 72, 4, 66, -123, -62, -81, 66, -100, 76, 93, 66, 87, 46, -8, 66, -117, -97, -43, 66, -101, -44, 21, 66, 117, -2, 43, 66, 113, 95, 36, 66, -62, -69, 10, 66, -105, 107, -51, 66, -105, -39, 89, 66, -66, 33, 74, 66, 94, -93, -20, 66, -99, -44, -10, 66, 79, 2, -27, 66, 72, -21, 1, 66, -109, -5, 98, 66, -109, 25, 40, 66, -72, 117, -104, 66, -106, 122, -18, 66, -111, -114, 5, 66, 102, 55, -127, 66, 81, 22, -99, 66, -77, 108, 51, 66, -103, 32, -74, 66, -65, 66, -116, 66, 87, 29, -99, 66, -118, -73, -109, 66, -104, 72, -27, 66, -59, -30, 118, 66, -66, 105, 95, 66, 85, -90, -14, 66, -83, 10, -3, 66, -61, -28, 68, 66, -65, 109, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], "precision": "FLOAT_32", "root": 0, "canonicalAndNotALeaf": true, "size": 228, "leftIndex": [ -1, 1, 255, 983695022, 758358652, 1097956376, 644027516, 730002335, 758809528, 581218456, 968814673, 1016468675, 1145541514, 581196598, 726234781, 0, 0 ], "rightIndex": [ -1, 1, 255, 1147319869, 772687915, 1157235496, 1162025270, 731174326, 1160646694, 581219185, 1147144588, 987751169, 754111534, 581316658, 582922615, 0, 0 ], "nodeFreeIndexes": [], "nodeFreeIndexPointer": 26, "leafFreeIndexes": [], "leafFreeIndexPointer": 26, "partialTreeStateEnabled": true }, "boundingBoxCacheFraction": 0.0, "partialTreeState": true, "seed": -6258575445422044724, "id": 0, "dimensions": 32, "staticSeed": 0, "weight": 0.0, "hasAuxiliaryData": false }, { "version": "2.0", "root": 0, "maxSize": 256, "outputAfter": 32, "storeSequenceIndexesEnabled": false, "centerOfMassEnabled": false, "nodeStoreState": { "version": "2.0", "capacity": 255, "compressed": true, "cutDimension": [ 0, 31, 255, 196447062, 858087215, 488471342, 591964861, 866245582, 880327665, 454684506, 1005898102, 488539182, 880387785, 115723387, 363034074, 337086034, 465001035, 128511614, 204907702, 190798375, 212814947, 447661509, 903664767, 798058290, 1008183138, 783631675, 624912210, 395759066, 70870983, 346394591, 50118327, 43067743, 1005576053, 500361595, 364677745, 386971634, 1038415566, 389105102, 439010385, 267610930, 18056933, 0, 0, 0, 0, 0 ], "cutValueData": [ 69, 7, 84, -42, 68, 115, -35, -55, 69, 49, 51, -54, 66, 52, 88, -72, 66, 99, -100, -76, 66, -94, -88, 119, 65, -52, 9, -59, 66, -108, 11, -92, 66, -113, 28, -74, 66, -67, 58, 107, 66, -71, 52, 74, 66, -118, -22, 69, 66, -71, 95, 7, 66, 19, 30, -73, 66, -62, 48, -76, 66, -85, -14, -76, 65, -56, -34, 3, 66, -85, 47, -59, 66, -128, 46, 55, 66, -110, 109, -40, 66, -81, -43, 52, 66, -85, -32, -123, 64, -20, -16, 76, 66, -115, 122, 26, 66, -61, 35, 23, 66, -67, -54, 113, 66, -68, 54, 123, 66, 35, 41, -68, 66, -65, 11, 117, 66, -124, -79, -46, 66, -89, -14, 65, 66, 115, -74, -23, 66, -71, 83, 26, 66, 122, -53, -85, 66, 90, 49, -60, 66, -77, 127, 4, 66, -84, -123, 122, 66, -65, 31, -122, 66, 5, -52, -7, 63, -88, 64, -50, 66, -85, -105, -56, 66, -126, -10, 36, 66, -88, 97, -14, 66, 105, 20, -17, 66, -63, 97, -9, 66, -107, -108, 6, 66, 102, -15, 51, 66, -104, 117, -26, 66, -68, -57, -14, 66, -92, 6, 73, 66, -109, -61, 64, 66, -95, -25, -55, 66, -101, 82, 122, 66, -78, 31, -34, 66, -117, -49, -47, 66, -74, -85, -50, 66, -108, 45, -117, 66, 75, 47, 87, 66, 102, 80, -94, 66, -90, -111, 1, 66, -124, 76, -106, 66, 91, -120, 28, 66, 79, 39, -7, 66, 91, -22, -7, 66, -59, 121, 87, 66, 115, 43, -80, 66, -69, -38, 118, 66, -61, -128, -112, 66, -88, -18, 17, 66, -72, 66, -66, 66, -70, -117, 33, 66, -68, 43, 8, 66, -85, -48, 7, 66, -76, 43, 37, 66, -117, -4, -119, 66, 86, 84, 125, 66, -98, 97, 59, 66, -72, 102, -36, 66, 103, 99, -56, 66, -63, 79, -98, 66, -73, 100, 2, 66, -59, -16, -60, 66, 73, 34, 15, 66, -100, -94, -30, 66, -73, -29, 75, 66, 73, -83, -37, 66, 76, -34, 32, 66, -108, 120, 107, 66, -72, 62, -105, 66, -124, 19, -82, 66, -74, -4, 2, 66, -113, -5, -103, 66, -87, -112, -74, 66, 127, -45, 42, 66, 101, 92, 63, 66, -88, 70, -128, 66, 77, 91, -93, 66, -98, -110, -6, 66, -75, 37, -69, 66, -73, 100, 98, 66, -96, -15, -90, 66, -103, -61, -37, 66, 95, 34, 54, 66, 96, -79, -21, 66, 98, 4, 99, 66, -64, -24, -21, 66, -76, 74, -60, 66, -76, -112, 40, 66, -96, -48, 99, 66, -66, -93, -30, 66, -103, -29, -94, 66, -104, 67, -36, 66, -66, 118, 117, 66, -84, 124, 95, 66, 79, -51, 102, 66, 122, -84, -56, 66, -92, -67, 63, 66, -107, -25, -77, 66, -127, 90, -90, 66, -73, 43, 73, 66, -78, -47, -81, 66, -109, -75, 13, 66, -94, 0, -76, 66, -66, -2, -106, 66, -110, -71, -69, 66, 70, 60, -99, 66, -64, 67, -28, 66, 92, -17, -111, 66, -106, 31, -96, 66, 103, 47, 66, 66, -111, 20, 77, 66, -67, 77, 16, 66, 84, -41, 86, 66, -101, 32, 54, 66, -111, 103, -8, 66, -62, 23, -103, 66, 110, -108, 126, 66, -128, 77, 125, 66, -82, -76, 117, 66, -63, 38, -94, 66, -109, 81, -33, 66, -68, -37, 29, 66, 118, -45, 102, 66, -63, -114, -83, 66, -67, 92, 48, 66, -74, -86, -106, 66, -125, 8, -49, 66, -119, 57, 34, 66, -99, -88, -56, 66, 103, -71, -124, 66, 70, -15, 29, 66, -64, -106, -25, 66, -100, -6, -79, 66, -68, 80, 17, 66, 109, -85, -3, 66, -65, 30, 14, 66, 75, 42, 25, 66, -89, -109, 91, 66, 70, -77, 99, 66, 79, 51, -14, 66, -66, 70, -30, 66, -69, 74, 48, 66, 76, -50, 53, 66, -102, 121, -20, 66, 99, 103, -12, 66, -90, 66, -1, 66, -123, 13, 119, 66, -94, 110, 102, 66, -123, -125, 125, 66, -84, 18, -108, 66, -96, 116, -15, 66, -88, -5, 85, 66, -107, 18, 37, 66, -124, -72, 14, 66, -117, -36, -64, 66, 123, -68, 65, 66, 114, 96, -108, 66, 112, 35, -112, 66, -63, -98, -30, 66, -112, -103, -34, 66, 79, -28, 96, 66, 73, -76, 49, 66, -62, -54, 52, 66, -106, 109, -29, 66, -101, -61, -47, 66, -78, 97, -128, 66, -119, -84, -110, 66, 82, -102, -25, 66, -82, -1, 72, 66, -109, -80, 106, 66, 77, 14, -41, 66, -64, -75, -108, 66, -62, 63, -45, 66, 97, -109, 102, 66, 123, -95, -37, 66, -120, -114, -105, 66, -114, -110, 102, 66, 85, -23, 23, 66, -62, 34, 7, 66, -69, -122, -82, 66, -127, 21, -1, 66, -116, -80, -109, 66, -60, 32, 118, 66, -67, 70, 44, 66, -66, -115, 4, 66, -59, 41, 80, 66, -115, -116, -108, 66, -65, -10, -49, 66, 111, 64, 99, 66, 118, 121, -62, 66, -120, 76, -126, 66, -65, 32, -30, 66, -106, -8, 26, 66, -111, 29, 43, 66, -74, -12, 10, 66, -113, 11, -118, 66, -61, 40, 28, 66, -102, -106, 83, 66, -62, 109, 38, 66, -80, -36, 81, 66, 90, -66, -50, 66, 86, 101, 44, 66, -111, 125, 105, 66, 84, 108, -86, 66, -126, 74, -105, 66, 81, -109, -9, 66, -105, 65, -47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], "precision": "FLOAT_32", "root": 0, "canonicalAndNotALeaf": true, "size": 227, "leftIndex": [ -1, 1, 255, 600468470, 1033035683, 753521989, 974069864, 985034669, 1162077727, 983616262, 1013448983, 753378865, 1013785996, 726931733, 198512897, 0, 0 ], "rightIndex": [ -1, 1, 255, 774289759, 774584818, 624434183, 715231364, 1117383866, 712636127, 1104797758, 1103183918, 1098232306, 1146114728, 769447103, 209712766, 0, 0 ], "nodeFreeIndexes": [], "nodeFreeIndexPointer": 27, "leafFreeIndexes": [], "leafFreeIndexPointer": 27, "partialTreeStateEnabled": true }, "boundingBoxCacheFraction": 0.0, "partialTreeState": true, "seed": -7118534165006407185, "id": 0, "dimensions": 32, "staticSeed": 0, "weight": 0.0, "hasAuxiliaryData": false }, { "version": "2.0", "root": 0, "maxSize": 256, "outputAfter": 32, "storeSequenceIndexesEnabled": false, "centerOfMassEnabled": false, "nodeStoreState": { "version": "2.0", "capacity": 255, "compressed": true, "cutDimension": [ 0, 31, 255, 907630914, 43452073, 52886071, 483960655, 463058385, 133350823, 888458967, 853219053, 1000381230, 643782055, 368746353, 752585267, 576031587, 756983211, 1028849529, 179697501, 1031214894, 919921769, 783399599, 863552871, 711703893, 267228721, 52370723, 610856437, 606020794, 786210742, 357788135, 996140795, 354089839, 57068493, 739572467, 388188502, 261918058, 219784354, 72454101, 190183473, 857675045, 829, 0, 0, 0, 0, 0 ], "cutValueData": [ 69, 32, -53, 67, 69, 65, -110, -22, 69, 37, -95, 45, 69, 35, 6, -57, 65, -25, 65, -90, 65, -84, 101, 7, 66, -125, -125, 29, 66, -100, -38, 104, 66, -93, 10, -37, 66, -79, 73, 29, 66, 84, 44, 26, 66, -122, -68, 18, 66, 98, 126, 23, 66, -95, -116, -88, 66, -82, -9, 45, 66, 59, 12, 125, 66, -66, -9, 119, 66, -89, -36, 112, 66, 77, 42, -75, 66, -61, 123, -109, 66, -115, -78, -16, 66, -116, 51, 43, 66, 126, -50, -78, 66, -67, -2, 82, 66, -116, 21, -60, 66, -64, 12, 118, 66, -107, -57, 29, 66, 106, -13, -127, 66, -114, -67, 90, 66, -107, 81, 38, 66, 68, 115, -6, 66, 126, -108, -114, 66, -88, -51, -117, 66, -113, -110, -57, 66, 89, 105, 4, 66, 80, 125, -126, 66, 85, 89, 103, 66, -82, 13, -28, 66, 75, -9, 89, 66, -109, 33, -43, 66, 75, -51, 87, 66, -71, -98, 88, 66, -114, 93, -11, 66, 70, 115, 121, 66, -107, 83, 16, 66, -94, -44, -40, 66, -99, -28, 92, 66, -110, -60, 109, 66, -78, 55, -71, 66, -110, -47, -52, 66, -63, 22, 48, 66, -101, -4, 90, 66, -59, -128, -91, 66, -86, 66, 65, 66, 6, 121, -109, 66, -116, -83, 32, 66, -119, 25, -98, 66, -76, -24, 71, 66, -110, -8, 30, 66, 108, 106, -23, 66, -102, 51, -75, 66, 125, -19, 13, 66, 119, 21, -67, 66, -105, -30, 1, 66, -128, 9, -101, 66, -65, 122, -37, 66, 115, -124, 69, 66, -110, 121, -6, 66, -75, 61, 111, 66, 69, -30, 35, 66, -112, 108, -103, 66, -68, 7, -85, 66, 79, -14, -38, 66, -128, 93, -48, 66, -62, -109, 70, 66, 81, -28, 64, 66, -86, 96, -102, 66, -98, -66, -65, 66, 101, 55, -120, 66, -125, 78, -125, 66, -114, -31, 90, 66, -121, -37, -59, 66, -117, -100, 58, 66, -62, 5, 13, 66, -128, 23, 114, 66, 71, -108, -98, 66, 76, -106, 2, 66, -110, -70, 105, 66, -105, -36, 125, 66, -71, -122, 5, 66, -111, 110, 91, 66, -68, -84, 26, 66, -120, -47, 20, 66, 70, -20, 101, 66, 124, -123, 88, 66, 119, -53, -126, 66, -59, -24, 122, 66, -92, 18, -11, 66, -118, 74, -11, 66, -89, 50, 103, 66, 70, -94, -104, 66, -67, -67, -120, 66, -99, -58, 39, 66, 101, 86, -33, 66, -111, 20, -109, 66, -119, 38, 16, 66, -120, -111, -85, 66, 71, -11, 3, 66, 80, -123, 124, 66, -98, -123, -27, 66, -76, 68, -76, 66, 72, 93, 118, 66, 97, -102, -18, 66, 105, 24, -34, 66, 107, -27, -55, 66, 122, -89, -50, 66, 89, 29, -45, 66, -104, -107, -70, 66, 123, 123, 103, 66, -115, -29, -127, 66, -110, 40, -46, 66, -71, -52, -100, 66, 77, -104, -4, 66, 68, 90, -68, 66, -61, 61, -73, 66, -118, 30, 27, 66, -104, -26, -96, 66, -122, -89, -84, 66, -104, 72, 104, 66, 88, 97, -12, 66, -92, 47, 39, 66, 95, 114, 47, 66, 91, -22, -23, 66, -113, -29, 28, 66, 103, -44, 106, 66, -65, 52, -31, 66, -114, 117, -54, 66, -105, -84, 57, 66, -93, -38, -50, 66, 85, -100, 122, 66, 107, 62, 116, 66, -109, 29, -89, 66, -59, 69, -39, 66, -64, 29, -10, 66, -70, -75, 22, 66, -123, 58, 2, 66, -98, 7, 55, 66, -71, 70, -108, 66, -105, 88, 92, 66, -88, 113, -126, 66, -64, -108, -108, 66, -101, -119, -62, 66, 91, 84, 0, 66, -110, 67, 40, 66, -107, 105, -102, 66, 83, 16, -96, 66, 125, 52, 55, 66, 109, -96, -83, 66, -66, -82, 56, 66, -67, -48, 112, 66, -118, 101, -1, 66, -59, -14, -56, 66, 84, -85, 73, 66, 95, 33, -27, 66, -94, 65, -12, 66, 77, 116, -45, 66, -114, 62, 105, 66, -106, 65, -60, 66, 101, 27, 36, 66, 83, -94, -15, 66, -65, -28, -71, 66, -115, 70, 108, 66, 122, 102, 74, 66, -74, 12, 11, 66, -101, -125, 67, 66, -81, -76, -49, 66, -62, -26, -32, 66, -99, 69, -63, 66, -75, 73, 77, 66, -113, 30, -100, 66, 71, 89, -31, 66, 97, 52, 53, 66, -68, -18, -114, 66, -106, 44, -107, 66, -112, -71, 93, 66, -59, -17, -75, 66, -62, -46, 101, 66, -69, 14, 96, 66, -77, -127, 82, 66, -77, -117, 18, 66, -68, -59, 53, 66, 69, 121, -12, 66, -60, -2, -71, 66, 104, -102, -85, 66, 70, -38, 37, 66, -92, -55, 69, 66, -112, -38, 2, 66, 83, 59, -122, 66, -66, -23, 121, 66, -113, -27, -35, 66, -108, -33, -119, 66, 86, -49, 22, 66, -113, -47, 112, 66, -65, -11, 74, 66, -119, -51, -82, 66, -61, -79, -50, 66, 84, -98, -103, 66, 79, 27, -33, 66, -109, -15, 126, 66, -68, -72, -5, 66, -104, 95, 100, 66, -110, -74, -75, 66, -62, 54, 74, 66, 83, -80, 45, 66, -103, -31, 89, 66, -108, -60, 27, 66, -111, -82, -128, 66, -115, 101, 24, 66, -104, 56, -108, 66, -71, -126, 105, 66, -106, 35, -68, 66, -108, 14, 38, 66, -107, -111, 68, 66, -98, 17, -116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], "precision": "FLOAT_32", "root": 0, "canonicalAndNotALeaf": true, "size": 224, "leftIndex": [ -1, 1, 255, 1033042247, 774818287, 643847449, 1156860994, 645640709, 759900490, 1118662559, 581140570, 639257174, 602040974, 583492814, 7371529, 0, 0 ], "rightIndex": [ -1, 1, 255, 1160608054, 968787773, 754052569, 1018686262, 629206123, 774660554, 970351891, 710457638, 600439768, 726417854, 583436672, 8775581, 0, 0 ], "nodeFreeIndexes": [], "nodeFreeIndexPointer": 30, "leafFreeIndexes": [], "leafFreeIndexPointer": 30, "partialTreeStateEnabled": true }, "boundingBoxCacheFraction": 0.0, "partialTreeState": true, "seed": -383864129972597491, "id": 0, "dimensions": 32, "staticSeed": 0, "weight": 0.0, "hasAuxiliaryData": false }, { "version": "2.0", "root": 0, "maxSize": 256, "outputAfter": 32, "storeSequenceIndexesEnabled": false, "centerOfMassEnabled": false, "nodeStoreState": { "version": "2.0", "capacity": 255, "compressed": true, "cutDimension": [ 0, 31, 255, 657791446, 899217370, 582649659, 1021403074, 578610617, 492013155, 363629919, 636173671, 517688865, 913290846, 451351891, 509017666, 65459558, 213757125, 463693029, 1071109586, 123065565, 208727925, 788362713, 752153770, 309124941, 1070811597, 619885657, 854383865, 513408289, 496286787, 60538338, 572868917, 489369269, 43364083, 884256585, 510639963, 783796679, 761377953, 641164927, 607741022, 1005700346, 589597670, 18217, 0, 0, 0, 0 ], "cutValueData": [ 68, -119, 111, -123, 69, 30, 5, 62, 68, 1, -122, -50, 66, -64, 92, 1, 66, -119, -56, 24, 66, -118, -44, 32, 68, -77, -109, 119, 66, -96, -43, -92, 66, -111, -106, -11, 66, -113, -110, -89, 66, -83, 101, -43, 66, -88, -41, 115, 66, 80, -94, -96, 66, 124, 109, -52, 66, -106, -20, -50, 66, 31, 78, 120, 66, 14, -24, -46, 66, -96, 59, 67, 66, -77, -126, 87, 66, -70, -105, 126, 66, -114, -62, 10, 66, -69, 98, -68, 66, -86, -33, -119, 66, -64, -110, -4, 66, -116, -71, 114, 66, -118, 1, 30, 66, -117, -68, -67, 66, -100, 87, -71, 66, 7, -10, -122, 66, -110, -82, -26, 66, 81, 104, 36, 65, 28, -36, 46, 66, -109, 78, 33, 66, 88, -30, 6, 66, -110, 85, -126, 66, -72, -85, -13, 66, 87, 104, -21, 66, -76, 13, -119, 66, 83, 7, 47, 66, -119, 112, -32, 66, -71, 110, 122, 66, -71, 38, -35, 66, 103, 104, 17, 65, -30, 52, 20, 66, 71, -45, 78, 66, -71, -4, 36, 66, -85, -76, -109, 66, -77, 2, 25, 66, -110, 126, 4, 66, -123, -127, -3, 66, 69, 78, 115, 66, -67, 47, 110, 66, -122, -87, 60, 66, 76, -96, 4, 66, -74, -66, -72, 66, -77, 66, 45, 66, -101, 32, 60, 66, 91, 126, -82, 66, -62, -70, 27, 66, 73, 11, 36, 66, 86, -103, -123, 66, -67, -121, -57, 66, -101, 24, 102, 66, -91, -19, -123, 66, -61, -4, 116, 66, -100, 1, -41, 66, -69, 93, -44, 66, -72, -27, 82, 66, -125, -115, -36, 66, -98, 112, 118, 66, -125, 39, 52, 66, 4, 25, 108, 66, -92, -72, -6, 66, 109, -43, 33, 66, -118, 16, -68, 66, -103, -95, -77, 66, -69, -112, 88, 66, -110, 55, 16, 66, -86, -52, 108, 66, -68, -110, -95, 66, 94, 126, -49, 66, 73, 122, -83, 66, 106, 7, -5, 66, -65, 115, -12, 66, -102, -87, 124, 66, 89, 110, -49, 66, -103, -15, -107, 66, -63, 54, 42, 66, -64, 0, 5, 66, -106, -11, 7, 66, -69, -54, -34, 66, -65, -88, 36, 66, -102, -51, -32, 66, -122, -89, 5, 66, 26, 109, -118, 66, 79, -38, -83, 66, -116, 82, -62, 66, -65, 5, 26, 66, -98, 113, -60, 66, 109, -37, -32, 66, -109, -46, 50, 66, 81, 119, -24, 66, -121, 26, 123, 66, 82, -111, -48, 66, 80, 59, 118, 66, -122, 2, 12, 66, 73, 112, 67, 66, -65, -8, 127, 66, -109, 111, -65, 66, -84, 8, 68, 66, -104, 120, -71, 66, -66, -25, -61, 66, 87, -64, 99, 66, 78, 39, -53, 66, -71, 50, -13, 66, -122, 20, 97, 66, -109, 123, 59, 66, -110, -66, -49, 66, -107, 116, -36, 66, -70, -99, 116, 66, -111, -57, -71, 66, -79, -21, 8, 66, 79, -44, 44, 66, -127, -39, -80, 66, -75, 66, 61, 66, -95, 70, 5, 66, -114, -109, 70, 66, -67, -42, 104, 66, -71, -103, -121, 66, -68, -97, -71, 66, -127, -85, -122, 66, 79, 5, -123, 66, -123, 108, 110, 66, -61, 75, 79, 66, -109, 112, -23, 66, -120, -98, 59, 66, 68, 14, 26, 66, -69, -26, -16, 66, -111, 14, -38, 66, 107, 16, -31, 66, 76, -105, -110, 66, -113, -8, -50, 66, -68, 127, 74, 66, -101, 79, -2, 66, -113, 7, 106, 66, -103, 117, 88, 66, 76, -26, 108, 66, 82, 121, -79, 66, -101, 72, -117, 66, 102, -122, -119, 66, 101, 116, 26, 66, -65, -65, 60, 66, 81, 3, -121, 66, -107, -28, -111, 66, -111, 121, 1, 66, -63, -96, -110, 66, -82, -67, 25, 66, 74, -47, 117, 66, 91, 105, 37, 66, 93, -104, -85, 66, -116, -120, -83, 66, -85, 22, 56, 66, -97, -15, 74, 66, -116, 85, 71, 66, -66, -62, -85, 66, -76, 84, -58, 66, -72, -82, -47, 66, -114, 125, -80, 66, -106, -124, 114, 66, -102, 59, 105, 66, 93, -74, 53, 66, -70, -24, -115, 66, -61, -121, 73, 66, -90, 112, -4, 66, 90, -73, -68, 66, 85, 54, 45, 66, 90, 100, 70, 66, 110, -88, -47, 66, -111, 59, 100, 66, -110, -128, -2, 66, -115, 67, -1, 66, -63, -13, -84, 66, 77, 81, -121, 66, -111, 123, 98, 66, 94, -47, -31, 66, -70, 101, 14, 66, 69, -104, -11, 66, -72, -17, -58, 66, 81, -54, -83, 66, 107, -65, -103, 66, -67, 111, 31, 66, 97, -77, 125, 66, 93, -79, 25, 66, -65, -56, 91, 66, -72, 125, -122, 66, 69, -25, 122, 66, 78, 59, 55, 66, 117, 82, 79, 66, -105, 12, -81, 66, -102, 30, -94, 66, -113, 111, -65, 66, 84, -29, 111, 66, -61, 115, 108, 66, -80, -100, 28, 66, 73, -123, 85, 66, 77, -21, 46, 66, -119, 55, -22, 66, -90, 127, -97, 66, 95, 72, -31, 66, 77, -38, 65, 66, -67, 104, -117, 66, -59, 116, 46, 66, -107, 5, 98, 66, -85, 49, -24, 66, 85, 72, 39, 66, -66, -5, 107, 66, -81, -50, 53, 66, 89, 41, -31, 66, -104, -40, -83, 66, 91, 119, 5, 66, 81, 87, -10, 66, -105, 57, 74, 66, -65, -24, -58, 66, 71, -2, 43, 66, -63, 119, -1, 66, -100, -14, 112, 66, -62, 124, -124, 66, -100, 58, -5, 66, -106, -97, -35, 66, -89, 26, 87, 66, -101, -2, -32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], "precision": "FLOAT_32", "root": 0, "canonicalAndNotALeaf": true, "size": 231, "leftIndex": [ -1, 1, 255, 1098311399, 1161709991, 1162061360, 1141278415, 631172210, 625792513, 774832136, 1030808822, 596092733, 595486228, 595657519, 710979521, 13, 0 ], "rightIndex": [ -1, 1, 255, 1155824059, 1162261382, 1162261358, 1119034435, 1018684795, 975716890, 1162023080, 969281689, 731535917, 639084055, 581150528, 586624567, 13, 0 ], "nodeFreeIndexes": [], "nodeFreeIndexPointer": 23, "leafFreeIndexes": [], "leafFreeIndexPointer": 23, "partialTreeStateEnabled": true }, "boundingBoxCacheFraction": 0.0, "partialTreeState": true, "seed": -3659552152257293168, "id": 0, "dimensions": 32, "staticSeed": 0, "weight": 0.0, "hasAuxiliaryData": false }, { "version": "2.0", "root": 0, "maxSize": 256, "outputAfter": 32, "storeSequenceIndexesEnabled": false, "centerOfMassEnabled": false, "nodeStoreState": { "version": "2.0", "capacity": 255, "compressed": true, "cutDimension": [ 0, 31, 255, 756914650, 655449419, 241077338, 773286393, 317564493, 922970742, 310240305, 661821857, 1047602866, 976735609, 729737213, 635283406, 717067626, 102160233, 59971026, 664525046, 991674161, 854027370, 499060198, 375451518, 871718259, 1046831037, 209254327, 585823959, 1052567975, 638646123, 874210494, 790981751, 909854517, 56866030, 636464493, 996341883, 922606834, 123508551, 91168441, 240574077, 1029876730, 458612681, 209, 0, 0, 0, 0 ], "cutValueData": [ 68, -91, 73, -35, 68, 121, 36, 102, 69, 84, -10, -91, 65, -21, -26, -18, 66, -122, -37, -37, 67, 117, -38, 69, 66, 83, -20, 55, 69, 6, -119, -126, 65, 93, -84, 13, 66, -64, 13, -124, 66, -116, 111, 29, 66, 106, -79, 4, 66, -78, 27, -61, 66, -73, 62, 66, 66, 124, -106, 74, 66, -120, 121, -28, 66, -120, 19, -35, 66, 93, -71, -102, 66, 127, 122, -106, 66, 95, 76, -1, 66, -64, -38, 52, 66, -81, -115, -11, 66, -111, -13, 73, 66, 127, -108, 114, 66, -113, 122, 81, 66, -84, -109, 105, 66, -117, -71, 77, 66, 69, -106, -87, 66, -69, -29, -22, 66, -116, 28, -119, 66, -62, 57, -34, 66, 127, -21, -41, 66, -87, 44, 56, 66, -79, -104, -44, 64, 2, 60, 80, 66, 71, -103, 39, 66, -100, 22, 31, 66, 124, 126, -115, 66, -119, 39, -78, 66, -118, -71, -128, 66, 103, -48, 42, 66, -103, 46, 4, 66, -103, 116, -29, 65, -1, 50, -106, 66, -81, 27, -126, 66, -118, -16, -126, 66, 73, -28, -126, 66, -111, -48, -107, 66, -96, -64, 124, 66, -121, -15, 7, 66, -80, 41, 18, 66, -76, 91, -20, 66, 78, 51, 76, 66, 75, 112, 8, 66, -111, -116, -111, 66, 100, -100, 70, 66, 104, 108, 47, 66, 9, 102, -76, 66, 73, 97, 91, 66, -109, 41, 21, 66, -104, 42, 108, 66, 76, -32, 54, 66, 123, -123, 2, 66, -112, 115, 22, 66, 120, -86, -81, 66, -109, -58, 47, 66, -68, -58, 81, 66, -77, -125, 32, 66, -114, 70, 12, 66, 114, 17, -72, 66, -110, 17, 71, 66, -89, -32, -107, 66, -59, -10, -23, 66, 9, -120, -89, 66, -120, -81, -57, 66, 68, -49, -115, 66, 97, -97, -55, 66, -118, 12, -125, 66, -109, 49, -97, 66, 75, -84, -41, 66, -109, -21, -97, 66, -97, -82, 63, 66, -104, 0, -107, 66, 92, 24, -53, 66, -60, -19, 104, 66, -57, -51, -28, 66, 123, 91, -13, 66, -61, 111, 64, 66, -99, 37, -21, 66, -99, 79, -43, 66, -70, -96, -90, 66, 69, 50, 71, 66, -67, 84, -112, 66, 87, -1, -1, 66, -106, 123, 117, 66, 78, -98, -8, 66, -123, 122, -35, 66, -114, -27, -127, 66, 68, 50, -80, 66, 102, -61, -115, 66, -97, 8, 109, 66, -112, 44, -10, 66, -65, 56, 76, 66, 111, 25, -34, 66, 124, 76, -46, 66, -77, -73, 42, 66, -70, 38, 39, 66, -99, 69, 9, 66, -64, -92, -96, 66, 96, 59, -25, 66, 99, -102, 33, 66, -83, 35, -34, 66, 121, 39, -76, 66, -64, -70, -41, 66, -73, -85, -26, 66, 80, 17, -6, 66, 78, 57, -49, 66, -102, 112, 119, 66, -70, 102, 93, 66, 110, -67, 43, 66, 89, 89, 50, 66, 79, -83, 91, 66, 78, 8, 47, 66, -63, 38, -49, 66, 94, 2, -105, 66, -117, -122, -111, 66, -107, -17, -29, 66, -99, 70, 19, 66, 74, -45, -26, 66, -59, 16, -81, 66, -60, -17, -96, 66, -109, 107, 92, 66, 98, 78, 62, 66, -101, 98, -57, 66, -115, 39, -53, 66, -114, -82, 91, 66, 102, 57, -65, 66, -93, -111, 30, 66, 76, -45, -50, 66, -74, -8, 3, 66, -99, 13, -86, 66, -108, 112, 8, 66, -64, -11, -109, 66, -100, 15, -23, 66, 101, 108, 114, 66, -119, 13, -90, 66, -62, 16, -42, 66, -115, -24, 7, 66, 81, 111, 67, 66, 68, 19, 12, 66, 107, 37, -39, 66, 91, 88, -80, 66, -108, 64, -89, 66, -111, 114, 40, 66, -115, -28, -26, 66, 70, -79, 60, 66, -67, -53, -78, 66, -120, -30, -44, 66, -104, 45, -89, 66, -65, -27, 11, 66, -108, -97, -88, 66, -81, -74, -36, 66, -116, 2, -104, 66, 70, -28, 120, 66, 80, -24, 40, 66, -69, 116, 11, 66, -69, 53, -57, 66, 74, -66, -114, 66, -100, 117, -121, 66, -104, 34, 107, 66, -122, 88, 2, 66, -87, -125, -38, 66, 73, 43, -5, 66, 90, 91, -26, 66, -75, 74, -82, 66, 75, -105, 110, 66, -106, 53, 64, 66, 119, -103, -16, 66, -61, -20, -41, 66, -116, -35, 7, 66, -111, -89, -52, 66, 97, 103, 94, 66, 121, -99, -53, 66, 21, -89, -128, 66, -60, -14, -33, 66, -59, 124, 86, 66, 86, -16, 53, 66, 69, 74, -59, 66, -83, 82, 8, 66, -101, -100, 79, 66, -78, -91, -120, 66, -95, -94, -104, 66, -57, 51, -50, 66, 91, -13, -90, 66, 78, 29, 71, 66, 81, 23, -72, 66, 54, -109, -94, 66, 83, 127, 18, 66, 94, -40, 1, 66, -60, 85, 55, 66, -109, 72, -76, 66, -96, 32, 67, 66, -105, 22, -9, 66, 93, 27, 48, 66, -119, -116, -53, 66, -108, 45, 112, 66, 107, -58, 124, 66, -70, -70, 46, 66, -65, -69, -74, 66, -67, 45, 100, 66, 126, 64, 1, 66, 70, 46, -98, 66, 102, 98, -81, 66, -102, -40, -128, 66, -118, 6, -100, 66, 72, 22, -127, 66, -75, 54, 25, 66, 87, -14, 89, 66, -70, 94, -54, 66, -108, -53, -67, 66, -62, -13, -107, 66, -64, 9, -46, 66, -109, 78, -53, 66, -77, 56, -5, 66, 76, -42, -85, 66, 91, 62, 1, 66, -112, 10, 14, 66, -106, 34, 26, 66, -106, -102, 127, 66, -61, 52, 102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], "precision": "FLOAT_32", "root": 0, "canonicalAndNotALeaf": true, "size": 230, "leftIndex": [ -1, 1, 255, 717437978, 1119213980, 1118444668, 989286208, 970882574, 988223299, 726931786, 1117026662, 710338696, 602037004, 712655080, 969089990, 4, 0 ], "rightIndex": [ -1, 1, 255, 1162258294, 975725585, 1104078506, 1104332129, 597802270, 988276139, 602574268, 1117551892, 975479669, 626329463, 1011657829, 968552234, 4, 0 ], "nodeFreeIndexes": [], "nodeFreeIndexPointer": 24, "leafFreeIndexes": [], "leafFreeIndexPointer": 24, "partialTreeStateEnabled": true }, "boundingBoxCacheFraction": 0.0, "partialTreeState": true, "seed": -1557102390726603767, "id": 0, "dimensions": 32, "staticSeed": 0, "weight": 0.0, "hasAuxiliaryData": false }, { "version": "2.0", "root": 0, "maxSize": 256, "outputAfter": 32, "storeSequenceIndexesEnabled": false, "centerOfMassEnabled": false, "nodeStoreState": { "version": "2.0", "capacity": 255, "compressed": true, "cutDimension": [ 0, 31, 255, 334547014, 454423597, 590996778, 207284134, 1064297783, 340994793, 911955070, 337419323, 183057998, 757176701, 531099199, 1004924066, 459475923, 849672573, 1023248702, 634775925, 924285275, 497880063, 41503966, 317367421, 886170957, 202459491, 933685293, 720539343, 187430363, 179875177, 324372037, 237219754, 91203445, 190356075, 349218209, 196730430, 247066034, 259757171, 615832889, 1020566075, 868218209, 0, 0, 0, 0, 0, 0 ], "cutValueData": [ 69, 106, 119, 16, 67, -41, 2, -41, 69, 30, -127, 72, 66, -86, -67, -82, 66, 96, 80, 3, 66, -112, -16, -50, 66, -116, -81, 95, 66, 73, -35, 108, 66, -120, -70, 31, 66, 70, 83, 102, 66, 125, 3, 124, 65, -98, 71, -4, 66, -72, 111, 75, 66, -99, -123, -22, 65, -51, 113, -47, 66, 87, 8, -67, 66, 77, -107, -119, 66, -122, -66, -30, 66, -64, -80, -100, 66, -122, 126, 77, 66, 75, 86, 8, 66, -93, 118, -125, 66, -96, -95, 85, 66, -77, -115, -64, 65, -101, -72, 91, 66, -126, 50, 83, 66, -110, -106, -110, 66, 32, -121, -85, 66, -71, 51, -51, 66, 124, -46, 65, 66, -113, -5, 16, 66, 116, 0, 120, 66, -68, -100, -114, 66, -72, 16, 83, 66, -108, 3, 120, 66, -77, -58, 124, 66, -77, -56, 23, 66, 87, -17, -19, 66, -124, 110, -78, 66, -61, -53, 104, 66, -115, 82, 120, 66, 96, 84, -118, 66, 97, -19, 57, 66, -126, -100, 73, 66, 71, 17, -50, 66, -111, 117, -25, 66, -105, -116, -25, 66, -78, 55, 13, 66, -71, -24, 21, 66, -76, 111, -91, 66, 87, -68, 124, 66, -60, -114, -55, 66, -69, -90, 104, 66, -88, 54, 109, 66, -117, -81, -5, 66, 78, -104, 13, 66, -78, -37, -81, 66, 109, 59, -105, 66, -75, 77, 61, 66, -73, -16, -2, 66, 119, 31, -51, 66, -115, 97, 106, 66, 122, 83, -28, 66, 84, 126, 43, 66, -93, -9, 28, 66, 59, -82, -85, 66, -83, 92, 74, 66, -89, -54, 126, 66, 79, -118, 47, 66, 102, -114, 87, 66, -78, 58, 79, 66, -111, -102, 113, 66, 111, -24, 100, 66, -75, -123, -113, 66, -74, -105, -86, 66, -70, -7, -20, 66, -77, 63, 19, 66, -127, 123, 11, 66, -103, -81, 1, 66, 117, -37, -107, 66, -61, 110, -109, 66, -112, -20, -123, 66, -92, 117, 45, 66, -117, -18, 87, 66, -69, -98, 73, 66, -117, -78, 16, 66, -59, -123, -84, 66, 75, 114, 35, 66, -125, -73, -75, 66, -80, -28, 111, 66, -100, -97, -22, 66, -110, 115, 103, 66, -59, 91, 27, 66, 81, 73, -100, 66, -120, 6, -53, 66, -69, -114, 103, 66, 98, -100, 15, 66, -68, 75, 80, 66, -61, 97, 8, 66, -75, -20, 54, 66, -120, 38, -95, 66, 77, -115, 20, 66, 72, 121, -115, 66, 78, -18, -7, 66, -66, -24, -34, 66, -79, 85, -91, 66, -67, 34, -47, 66, -71, -97, 7, 66, -86, 15, -126, 66, -67, -111, 43, 66, -124, 82, -6, 66, -80, 72, 120, 66, 78, 61, -11, 66, -113, 9, 73, 66, -107, -105, 0, 66, 74, -107, 65, 66, -100, -5, -63, 66, -111, 1, -65, 66, -102, 71, -19, 66, -127, 109, 80, 66, -103, 55, 110, 66, -90, -48, 35, 66, -104, -36, 46, 66, 93, -28, 53, 66, -103, 54, -61, 66, -62, 71, 31, 66, 102, 111, 46, 66, 70, -87, -36, 66, -60, 89, -90, 66, -57, -19, -12, 66, -99, 25, -52, 66, -73, -61, -71, 66, -127, -128, -114, 66, -110, 105, 84, 66, -65, 29, -31, 66, -100, 55, 14, 66, -86, -38, -7, 66, 81, 71, -122, 66, 73, 92, -56, 66, -89, -5, -38, 65, -96, -96, -50, 66, -90, 29, -59, 66, 74, -85, -47, 66, -109, 3, -13, 66, 76, 99, 47, 66, -61, 17, 111, 66, -96, -65, -69, 66, 83, 118, 0, 66, -66, 83, 30, 66, -106, -48, -54, 66, -116, 83, 43, 66, 103, -5, 33, 65, -11, -15, -113, 66, -121, 117, -19, 66, 82, -62, -13, 66, -117, -124, 60, 66, -106, -99, -47, 66, -59, -62, 32, 66, -113, 102, 89, 66, 114, 53, -126, 66, -97, -64, -22, 66, 85, 84, 50, 66, -61, 70, -6, 66, -113, 6, -53, 66, 96, -101, -23, 66, 85, 103, 19, 66, -68, -25, 67, 66, 85, -47, 74, 66, -114, 124, 95, 66, 89, -23, -27, 66, -111, -90, 20, 66, 85, -104, 2, 66, -77, 90, 99, 66, -79, -107, -7, 66, 98, 124, 111, 66, 86, 56, -10, 66, -72, -104, 57, 66, -111, -65, -43, 66, -113, 35, -104, 66, -99, 102, -102, 66, -118, 71, -40, 66, -109, -45, 18, 66, -103, -112, 71, 66, -119, 58, 60, 66, -100, 55, -33, 66, -64, -52, -19, 66, -67, -48, 121, 66, -114, -113, 112, 66, 83, 64, -8, 66, 119, 12, 64, 66, 122, 25, 32, 66, -91, 33, -72, 66, -68, -24, 37, 66, -95, -76, 122, 66, 80, 110, 60, 66, 73, 92, -48, 66, 77, -11, 106, 66, 86, 93, -57, 66, 112, 69, 16, 66, 81, 122, 28, 66, -117, -57, -67, 66, 69, -124, -37, 66, 82, 28, -55, 66, 91, -74, 99, 66, -111, 15, -113, 66, -104, 43, 115, 66, 82, 2, 74, 66, -117, -66, -97, 66, 110, 1, 39, 66, -78, -119, -32, 66, 88, -13, 34, 66, -106, 12, 105, 66, -60, 99, -51, 66, -112, -78, -118, 66, -104, 107, 124, 66, -74, 59, 45, 66, -98, 28, 12, 66, 92, 99, -38, 66, -122, -31, 8, 66, 68, 63, 53, 66, 103, 119, 94, 66, -108, 54, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], "precision": "FLOAT_32", "root": 0, "canonicalAndNotALeaf": true, "size": 222, "leftIndex": [ -1, 1, 255, 985046669, 1142949442, 1119015724, 1157213840, 773164723, 987705700, 597867872, 581689228, 1157399005, 1119154712, 973334957, 803749, 0, 0 ], "rightIndex": [ -1, 1, 255, 1033114486, 1142420885, 1102739963, 1142361671, 758300587, 975665623, 712458250, 581862005, 1117610944, 1104097918, 585916618, 798136, 0, 0 ], "nodeFreeIndexes": [], "nodeFreeIndexPointer": 32, "leafFreeIndexes": [], "leafFreeIndexPointer": 32, "partialTreeStateEnabled": true }, "boundingBoxCacheFraction": 0.0, "partialTreeState": true, "seed": -6409199319416524683, "id": 0, "dimensions": 32, "staticSeed": 0, "weight": 0.0, "hasAuxiliaryData": false }, { "version": "2.0", "root": 0, "maxSize": 256, "outputAfter": 32, "storeSequenceIndexesEnabled": false, "centerOfMassEnabled": false, "nodeStoreState": { "version": "2.0", "capacity": 255, "compressed": true, "cutDimension": [ 0, 31, 255, 1021646933, 647268721, 716742249, 116602150, 460414571, 41242661, 103863414, 800447167, 883388197, 932936781, 451910127, 1061072235, 169843189, 116108163, 987602797, 191433166, 880127831, 194078438, 1001698749, 258674287, 317697218, 576575781, 228028153, 437316001, 480413485, 249747785, 64201949, 523103735, 633141329, 204699517, 733193805, 208571447, 499115686, 974299113, 489373154, 1033721647, 257926714, 27354329, 0, 0, 0, 0, 0 ], "cutValueData": [ 67, -82, -91, 100, 68, 90, 28, 55, 67, 120, 94, -14, 67, -43, -13, -27, 67, -116, -125, -100, 66, -83, -122, -36, 66, -122, -92, 41, 65, -124, -104, -92, 66, -69, 22, -26, 66, -114, 10, -72, 65, -21, -30, -124, 66, -115, 37, 3, 66, -99, -87, 114, 66, 69, -63, -99, 66, 99, 119, -122, 66, -95, 10, -75, 66, 99, 36, 11, 66, 126, -8, 25, 66, -69, -58, 91, 66, -110, -31, 41, 66, -106, -126, 51, 66, -68, 59, 119, 66, -128, 26, -61, 66, 96, 53, -93, 66, 97, -86, 88, 66, 93, 69, -124, 66, 120, -105, 34, 66, -70, 111, -87, 66, 111, 100, -122, 66, -99, -4, 47, 66, -123, 122, -38, 66, -100, -57, 28, 65, 84, -116, -116, 66, -95, -28, -96, 65, 10, -28, -35, 66, -107, -30, 13, 66, -73, -69, 117, 66, 87, -87, -60, 66, -117, -77, 109, 66, -108, 81, -43, 65, 32, 72, -117, 66, 76, -57, -107, 66, 116, 6, -7, 66, -105, 15, -4, 66, -62, -99, 124, 66, 71, -43, -43, 66, 79, -81, -22, 65, -84, -40, 38, 66, -110, -74, -88, 66, -93, -49, -26, 66, 115, -72, 11, 66, -95, -5, -128, 66, -63, 79, -41, 66, -84, -58, 96, 66, -121, 33, -78, 66, -81, 125, 18, 66, 79, 68, 57, 66, -69, 24, -91, 66, -115, 61, 111, 66, -126, 77, 17, 66, 81, 124, 76, 66, 104, -99, 87, 66, -68, -56, 89, 66, 118, -74, 52, 66, -72, -32, 4, 66, -98, 115, -77, 66, 98, -40, 127, 66, -113, -3, -97, 66, -128, -66, -89, 66, -107, 31, -113, 66, 123, 56, -43, 66, 104, 35, 38, 66, -109, 92, -126, 66, 88, -76, 69, 66, -80, 16, -93, 66, 83, 40, 123, 66, -108, -104, 30, 66, 119, -14, 25, 66, 90, 112, 11, 64, -109, 94, 88, 66, -63, -62, 29, 66, 84, 9, -87, 66, -89, 99, 120, 66, 117, 100, 21, 66, -111, -81, -67, 66, 88, 12, 1, 66, 110, 2, 88, 66, 115, -103, 13, 66, 123, 50, -6, 66, -118, 68, 21, 66, -67, 31, 6, 66, -62, 34, 123, 66, -66, -85, 10, 66, -78, -60, 55, 66, -70, 70, 90, 66, -113, -32, 111, 66, 92, 67, -113, 66, -73, -7, -107, 66, 115, -76, 113, 66, 73, 109, 37, 66, 95, 37, 78, 66, -74, -71, 90, 66, -61, -68, 100, 66, 68, 94, -88, 66, -102, -110, -88, 66, -74, 49, -110, 66, -121, 125, 93, 66, -109, -2, 60, 66, -96, -21, -107, 66, -101, -28, -39, 66, -105, -82, 3, 66, -120, 127, 118, 66, 74, 89, 28, 66, -106, -80, -96, 66, 97, -101, -23, 66, 78, 115, -108, 66, 80, -20, -102, 66, -83, -122, 120, 66, -87, -110, 97, 66, 101, -121, -54, 66, -78, -108, -95, 66, -94, -98, 11, 66, 69, -88, -107, 63, -69, -59, 4, 66, -83, -16, 72, 66, -115, -52, -11, 66, -89, 105, -13, 66, -95, 116, 71, 66, -67, -91, -65, 66, 84, 54, -77, 66, -103, -106, -90, 66, -84, 101, 6, 66, -102, 42, 4, 66, 101, -56, 71, 66, 78, 41, 38, 66, -81, -88, 36, 66, -110, -51, 112, 66, -72, -87, -86, 66, -112, -86, -107, 66, -89, 93, -14, 66, -71, -47, -27, 66, -99, 98, -38, 66, -103, -100, -70, 66, -102, -84, -11, 66, -88, -6, -12, 66, -88, 83, 80, 66, -103, -90, -27, 66, -101, -121, -49, 66, -65, 117, -74, 66, -75, 107, 11, 66, -108, 124, -16, 66, -72, -43, 88, 66, -65, 119, -34, 66, -112, 8, 55, 66, -73, 59, 100, 66, 74, 53, 69, 66, -103, 31, 112, 66, -64, 12, 38, 66, -121, -112, -33, 66, 83, -99, -80, 66, -99, -110, 63, 66, -99, -77, 92, 66, 81, 54, -46, 66, 87, -7, -84, 66, 77, -88, 62, 66, 103, -127, -3, 66, -64, -106, 16, 66, 69, 42, 68, 66, -98, 105, -98, 66, -60, 83, -96, 66, -59, -125, 106, 66, -100, -18, -48, 66, 79, 117, -19, 66, -64, 36, -5, 66, -111, -28, 87, 66, 86, 126, 6, 66, -92, 70, 119, 66, -70, 61, -73, 66, 77, 42, 48, 66, -64, -67, 126, 66, -105, -46, -41, 66, -71, 2, 44, 66, -96, -38, 10, 66, 92, 13, -5, 66, 79, -62, -109, 66, -114, 113, -104, 66, 78, 101, 37, 66, -128, -32, 97, 66, 93, -47, -108, 66, -98, -102, 12, 66, -73, 24, -42, 66, -79, -36, 124, 66, -67, -88, 80, 66, -114, -104, -38, 66, -101, 19, 46, 66, 125, 4, -81, 66, 75, 46, 90, 66, -68, -41, -94, 66, -106, -109, -115, 66, 79, -87, -21, 66, 84, -111, -73, 66, -97, 106, 120, 66, -108, 27, -80, 66, -123, -62, 67, 66, -61, 69, -42, 66, 109, -32, 40, 66, 93, -39, -122, 66, -61, -122, -65, 66, -62, -32, -47, 66, -64, -17, 72, 66, 92, -124, 26, 66, -119, -118, 116, 66, -111, -8, 28, 66, -59, 68, 115, 66, -114, 72, -69, 66, -69, 55, 127, 66, -73, 27, -40, 66, -115, -59, -3, 66, -98, 96, 52, 66, 70, -107, 1, 66, -114, -73, -104, 66, 71, -21, 54, 66, -110, 46, -119, 66, -60, -125, 13, 66, -118, 108, -42, 66, -67, 59, -69, 66, -63, -110, -63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], "precision": "FLOAT_32", "root": 0, "canonicalAndNotALeaf": true, "size": 227, "leftIndex": [ -1, 1, 255, 1162176173, 1099306471, 974102908, 1161730016, 581376037, 602456443, 731705777, 730120136, 588297802, 1112579032, 629513977, 237465553, 0, 0 ], "rightIndex": [ -1, 1, 255, 1162018588, 1117027489, 989520461, 1027747025, 588108236, 1112815571, 581396173, 772451791, 988473614, 1025956354, 588049028, 194419561, 0, 0 ], "nodeFreeIndexes": [], "nodeFreeIndexPointer": 27, "leafFreeIndexes": [], "leafFreeIndexPointer": 27, "partialTreeStateEnabled": true }, "boundingBoxCacheFraction": 0.0, "partialTreeState": true, "seed": -6381589943519458827, "id": 0, "dimensions": 32, "staticSeed": 0, "weight": 0.0, "hasAuxiliaryData": false }, { "version": "2.0", "root": 0, "maxSize": 256, "outputAfter": 32, "storeSequenceIndexesEnabled": false, "centerOfMassEnabled": false, "nodeStoreState": { "version": "2.0", "capacity": 255, "compressed": true, "cutDimension": [ 0, 31, 255, 352281810, 446095089, 1012246111, 849907043, 782611623, 763426931, 992660639, 215657078, 217409703, 623679705, 241085029, 364113786, 363982511, 92009673, 56743473, 790423497, 653489239, 863761909, 36568358, 209016702, 385558117, 329419439, 107947858, 472772570, 656668410, 358792059, 1014472255, 321861093, 379960866, 305114406, 706424673, 190769787, 441896547, 120269177, 334486061, 855607679, 259879998, 639696419, 14, 0, 0, 0, 0 ], "cutValueData": [ 68, -27, -117, -90, 69, 97, -12, 50, 67, -57, -21, 87, 68, -102, 77, 4, 65, 25, -115, 120, 67, 8, 11, -116, 66, -116, 94, 116, 66, 121, 76, -37, 66, -117, 19, 78, 66, -126, 98, -52, 66, -117, -81, -40, 66, -111, -85, 88, 66, -126, -29, -69, 66, -88, -7, -57, 66, -98, 11, 74, 65, -37, -93, -4, 66, 96, 42, -108, 66, -81, -79, -108, 65, -18, 31, 48, 66, -126, 101, -124, 64, -26, 20, 106, 66, -120, -85, 42, 66, -66, -20, -61, 66, -89, 97, -40, 66, 76, 40, 52, 66, -104, 105, 71, 66, -103, -12, -36, 66, -126, -59, 39, 66, -60, -91, 106, 66, 121, -62, 119, 66, 82, 22, 9, 66, 80, 9, 127, 66, -67, -96, 28, 66, -95, -80, -43, 64, -17, 81, 57, 66, -62, -59, -11, 66, 82, -47, -96, 65, 17, 1, 108, 66, 101, -97, -41, 66, -98, 120, -45, 66, -74, -71, 36, 66, -117, 100, -84, 66, -71, -104, 44, 66, 3, 5, 89, 66, -74, 108, -89, 66, -103, 117, 20, 66, -108, 70, -21, 66, -66, 80, -44, 66, 68, 25, -51, 66, -110, -115, -23, 66, -64, 68, 94, 66, -66, -120, -121, 66, 109, -85, 125, 66, -68, -28, 75, 66, -88, -9, -106, 66, -60, -127, 58, 66, -62, -62, -80, 66, -97, -106, 4, 66, -62, 98, -73, 66, -79, 115, -97, 66, -101, 122, -20, 66, 112, -1, -33, 66, -73, 24, -74, 66, -96, 125, 81, 66, -109, -28, -41, 66, 86, -55, -66, 66, -76, 40, -39, 66, 111, 41, 50, 66, 104, 14, 91, 66, 98, 62, 49, 66, 124, 45, -39, 66, -70, 15, 4, 66, 77, 41, -110, 66, -93, -6, 20, 66, 99, -34, 1, 66, 100, 3, -51, 66, 77, -116, 56, 66, -75, 30, 45, 66, -126, -62, 35, 66, -80, -60, 8, 66, -124, -109, -7, 66, 86, 112, -118, 66, 78, 33, -33, 66, -68, -124, -95, 66, -88, 26, 26, 66, -104, 77, 38, 66, -116, 23, 46, 66, 78, 26, 36, 66, -73, -34, -20, 66, -126, 44, -102, 66, -86, 93, -39, 66, -60, 93, -47, 66, -116, -41, -55, 66, -102, -118, 108, 66, -97, -105, 117, 66, 74, -79, -27, 63, -63, -29, -25, 66, -81, -80, -2, 66, -111, -21, 86, 66, -68, 115, -45, 66, 73, 63, 7, 66, 115, 84, -107, 66, -127, 105, -86, 66, 92, -90, -57, 66, -114, -34, -122, 66, 88, -110, 1, 64, -56, 29, 42, 66, -104, 1, -41, 66, -97, -78, -4, 66, -119, -30, -98, 66, 78, 105, 69, 66, 110, -20, -121, 66, -60, -35, -72, 66, -112, -1, 15, 66, -57, 70, -128, 66, 114, 63, 97, 66, -111, -117, 99, 66, -83, -24, -41, 66, 92, 109, 19, 66, -66, 30, -66, 66, -107, 3, 0, 66, 77, -54, -44, 66, -116, 100, -15, 66, -71, -105, -61, 66, 87, 115, 98, 66, 74, 24, 27, 66, 73, 111, -59, 66, -115, -90, -58, 66, -87, -36, 51, 66, -117, -92, 61, 66, -94, -94, -110, 66, -104, 114, 66, 66, -72, -55, 53, 66, -64, -123, -45, 66, -107, -119, -63, 66, -79, -51, 85, 66, -91, -4, 22, 66, 116, -98, 105, 66, -74, -25, -95, 66, -78, -99, 119, 66, 69, 100, -23, 66, 123, 55, -96, 66, -76, -64, 59, 66, -62, -82, -67, 66, -70, -12, 18, 66, 97, -99, -87, 66, -101, 101, -49, 66, 103, 0, 18, 66, -65, -41, -114, 66, 76, -41, 20, 66, 96, 54, 67, 66, 87, 125, 118, 66, -69, 34, 90, 66, -120, 0, 4, 66, -75, -32, -116, 66, -66, 5, -37, 66, 100, 52, -67, 66, -96, 32, -104, 66, 97, 81, -87, 66, 96, -79, 93, 66, 127, 91, 80, 66, -81, 39, -43, 66, -99, 27, -50, 66, 95, -44, 55, 66, -111, -70, -28, 66, -76, 41, -38, 66, -70, 33, 58, 66, -108, -107, -34, 66, -61, 75, -39, 66, -101, 116, -67, 66, 102, -77, 50, 66, 82, -24, -56, 66, -65, -45, 117, 66, 112, 118, -25, 66, -74, -41, -73, 66, -96, 9, 127, 66, 96, -84, 115, 66, 89, -7, -127, 66, -70, 75, 6, 66, -107, -42, -108, 66, -97, -29, -59, 66, 87, -123, 51, 66, 73, 31, 71, 66, -64, -65, -34, 66, -113, -104, 10, 66, -126, 99, -85, 66, 74, -79, 114, 66, 90, -55, 20, 66, -70, 3, 17, 66, -92, 13, -101, 66, -101, -90, 116, 66, -100, -117, -94, 66, 104, -104, 58, 66, 84, -62, 79, 66, 99, -55, -37, 66, -97, 88, -66, 66, -125, 59, 26, 66, -96, 118, 28, 66, -122, 84, -93, 66, 78, -47, 113, 66, -65, 92, 64, 66, -74, 40, 102, 66, -66, -65, -22, 66, 87, 115, -52, 66, -120, -5, -102, 66, -107, 20, -90, 66, -86, 113, -26, 66, 121, -99, 124, 66, -64, 23, 14, 66, -108, 30, -44, 66, 113, 31, 11, 66, 79, -112, -29, 66, -80, -91, 22, 66, 109, -92, -51, 66, 93, 0, -90, 66, -121, -111, -25, 66, -62, 118, 21, 66, -113, 34, 116, 66, -107, -99, 45, 66, -83, 79, 101, 66, 101, -114, 36, 66, 86, 89, -54, 66, 76, -61, 83, 66, -93, 57, -6, 66, 83, 47, -113, 66, -109, -89, -8, 66, -79, -45, -118, 66, 86, 62, 120, 66, -70, -108, -128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], "precision": "FLOAT_32", "root": 0, "canonicalAndNotALeaf": true, "size": 229, "leftIndex": [ -1, 1, 255, 586632050, 1161551879, 774283210, 1013980649, 758107400, 1140803963, 724700843, 1147909361, 753917911, 1156707913, 1116904261, 982900129, 1, 0 ], "rightIndex": [ -1, 1, 255, 1160660299, 759776164, 643546618, 581690938, 631086548, 1104609203, 772475854, 1018765715, 624737357, 717188386, 643920232, 726273913, 1, 0 ], "nodeFreeIndexes": [], "nodeFreeIndexPointer": 25, "leafFreeIndexes": [], "leafFreeIndexPointer": 25, "partialTreeStateEnabled": true }, "boundingBoxCacheFraction": 0.0, "partialTreeState": true, "seed": 4315119003239682117, "id": 0, "dimensions": 32, "staticSeed": 0, "weight": 0.0, "hasAuxiliaryData": false }, { "version": "2.0", "root": 0, "maxSize": 256, "outputAfter": 32, "storeSequenceIndexesEnabled": false, "centerOfMassEnabled": false, "nodeStoreState": { "version": "2.0", "capacity": 255, "compressed": true, "cutDimension": [ 0, 31, 255, 919976138, 598153421, 911850099, 1058089295, 472597809, 48325977, 184355545, 1025637586, 1067899175, 804300141, 588347067, 780007033, 226026913, 867506907, 535546303, 486001593, 367601249, 200992302, 995732201, 731609342, 903854405, 460159671, 611882022, 876015154, 720693681, 220133731, 603434450, 207341437, 989431535, 907646381, 1052191299, 381257029, 346068294, 134122171, 759129197, 321561653, 917574851, 784835, 0, 0, 0, 0, 0 ], "cutValueData": [ 68, 83, 89, 37, 69, 82, -50, 5, 66, -57, -42, -67, 66, 75, -14, -61, 66, -104, -98, -94, 66, 64, 58, 67, 66, -100, -40, -101, 66, -61, -57, -43, 66, -69, -108, 33, 66, -85, -128, -59, 66, -76, -57, 123, 66, -122, 122, -6, 66, 93, -81, -41, 66, 105, 23, 65, 66, -91, -54, 123, 64, -112, -84, 114, 66, -109, -75, -26, 66, 113, 24, 113, 66, 85, -108, 77, 66, -75, 27, -12, 66, -82, 45, -1, 66, -67, 56, -46, 66, -120, 72, -118, 66, 106, 92, -8, 65, -65, -14, 123, 66, -104, -75, 120, 66, -105, -101, 27, 66, -69, 69, -21, 66, -64, -32, -73, 66, -78, -77, 35, 66, -109, -80, 75, 66, -58, -26, -96, 66, -113, -67, 69, 66, -80, 86, -5, 66, -65, -66, -49, 66, -119, 21, 23, 66, -121, 58, 32, 66, -83, -60, 5, 66, -75, 117, -42, 66, -88, 33, 94, 66, 122, 25, 28, 66, -109, 7, -86, 66, -77, 10, -91, 66, -74, -22, -67, 66, 90, -72, -37, 66, 95, -105, 57, 66, -62, -121, 26, 66, -67, 104, -82, 66, 109, -112, -127, 66, -110, -77, -43, 66, -66, -33, -102, 66, -122, 59, 22, 66, -65, -78, 52, 66, 72, -91, -104, 66, 49, -65, 49, 66, 87, -127, -112, 66, -110, -101, 0, 66, -117, -29, -39, 66, 71, 57, 33, 66, 113, -19, -50, 66, 90, -90, -44, 66, -103, 86, 63, 66, -116, 123, 30, 66, -72, 116, -1, 66, -107, -77, 108, 66, -104, 54, -4, 66, -128, 27, -101, 66, 75, -43, 61, 66, -110, -79, -93, 66, 106, -66, 114, 66, 88, -25, -58, 66, 70, -89, 24, 66, -120, -124, -97, 66, -110, 98, -1, 66, -106, -16, 9, 66, -112, -44, 10, 66, 114, 38, -21, 66, -96, 125, 67, 66, 107, 71, 92, 66, -81, -26, 55, 66, -60, 20, 9, 66, -60, 49, -105, 66, 97, 39, 16, 66, -114, 50, 105, 66, 68, -36, -20, 66, -124, -56, 39, 66, -69, -59, -14, 66, 115, 92, -17, 66, -66, -104, 118, 66, 69, -63, 26, 66, -93, 85, -52, 66, -105, 94, 8, 66, -67, -89, 5, 66, 101, -109, 55, 66, 108, -81, 18, 66, -59, 72, -86, 66, -92, -66, 102, 66, 90, 43, -55, 66, -102, -121, -50, 66, -61, 115, -36, 66, -62, 34, -112, 66, -71, -32, -61, 66, -65, -20, 24, 66, -104, -102, -123, 66, -99, -90, -43, 66, -94, 34, 56, 66, 105, -38, -79, 66, -101, 21, -96, 66, -113, 63, 121, 66, 78, 115, 36, 66, -68, -119, -77, 66, 81, -69, -40, 66, -119, 42, 127, 66, -123, -60, 123, 66, -76, -35, -55, 66, 104, 16, 1, 66, -77, 9, -31, 66, -68, -51, 122, 66, -96, 43, 89, 66, -120, 73, -2, 66, -117, 28, 81, 66, -78, 35, 108, 66, -63, 100, 56, 66, 71, 24, 112, 66, -107, -35, 10, 66, -67, 61, 77, 65, -21, -95, -6, 66, -109, -66, 55, 66, -71, 36, -32, 66, -63, 60, 50, 66, -70, 102, 17, 66, -104, 104, 57, 66, -73, 28, 62, 66, 47, -8, -81, 66, -100, -95, 98, 66, -95, 81, 93, 66, 92, 13, 71, 66, -66, -54, 122, 66, -63, 77, 50, 66, -99, -82, -97, 66, 92, 74, -122, 66, -109, -118, -27, 66, 76, 115, 67, 66, -71, -36, 21, 66, -111, 71, -8, 66, -112, 28, -97, 66, -63, -60, 41, 66, -119, -55, -26, 66, 89, 77, 77, 66, -109, -16, 8, 66, 77, 13, 41, 66, 100, -82, -88, 66, -62, -94, -42, 66, -111, -120, 108, 66, -116, -87, -74, 66, -85, -71, 114, 66, -65, -107, 5, 66, -65, 55, -72, 66, 93, 46, -12, 66, 82, 82, 55, 66, 81, -112, 8, 66, -90, 97, -110, 66, -106, 124, -113, 66, 80, 99, -46, 66, -106, 71, -109, 66, 99, -91, -57, 66, -98, -77, -87, 66, -61, -33, -29, 66, 84, -59, -104, 66, 91, -116, 25, 66, -111, -48, -125, 66, 86, -124, -119, 65, 88, -3, 18, 66, 126, -53, -55, 66, -122, 76, 40, 66, -108, -4, -37, 66, -91, -95, -35, 66, 115, -121, 49, 66, -92, -55, 102, 66, 96, 69, 82, 66, 96, -1, 98, 66, -88, -72, 76, 66, -67, 30, -29, 66, -64, -70, 80, 66, -118, -105, 7, 66, 80, -97, 111, 66, -100, -56, -21, 66, -71, 41, -91, 66, -114, 44, -88, 66, 103, -116, 31, 66, 69, 62, -4, 66, 86, -94, -120, 66, -66, 124, -51, 66, -66, -93, -86, 66, -116, -101, -78, 66, -103, 33, 102, 66, -79, -114, -114, 66, -74, -52, -69, 66, 85, 16, -30, 66, -89, 22, 36, 66, -68, -27, 19, 66, -111, -31, -102, 66, 86, -99, -21, 66, 72, 123, -8, 66, -100, 77, -26, 66, 99, 97, -105, 66, -113, -38, -9, 66, -64, -46, -26, 66, 70, 7, 83, 66, -82, -56, -22, 66, -117, 53, 89, 66, -117, -17, 80, 66, -79, 61, 77, 66, -84, -79, 98, 66, -95, -50, 63, 66, -120, 62, 72, 66, 76, 98, 43, 66, -80, 43, 43, 66, -108, -42, 47, 66, -62, 69, -86, 66, 85, 103, 74, 66, 90, -95, 88, 66, 102, 57, 45, 66, -62, 124, -80, 66, -66, -57, -54, 66, 89, -1, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], "precision": "FLOAT_32", "root": 0, "canonicalAndNotALeaf": true, "size": 226, "leftIndex": [ -1, 1, 255, 1119035087, 586452526, 731768003, 1112101646, 983611634, 730190915, 712121219, 583259686, 755627417, 712477904, 1102533682, 65339941, 0, 0 ], "rightIndex": [ -1, 1, 255, 1162084315, 774289529, 1117434518, 1155167963, 581684128, 729935063, 602647289, 624965108, 983615629, 586682179, 581307889, 64592683, 0, 0 ], "nodeFreeIndexes": [], "nodeFreeIndexPointer": 28, "leafFreeIndexes": [], "leafFreeIndexPointer": 28, "partialTreeStateEnabled": true }, "boundingBoxCacheFraction": 0.0, "partialTreeState": true, "seed": 6333024226119915415, "id": 0, "dimensions": 32, "staticSeed": 0, "weight": 0.0, "hasAuxiliaryData": false }, { "version": "2.0", "root": 0, "maxSize": 256, "outputAfter": 32, "storeSequenceIndexesEnabled": false, "centerOfMassEnabled": false, "nodeStoreState": { "version": "2.0", "capacity": 255, "compressed": true, "cutDimension": [ 0, 31, 255, 725305810, 707364282, 574150990, 392820601, 524205869, 100595622, 601299947, 363825915, 521203237, 716237767, 503184678, 116342333, 975918205, 443637058, 780005205, 529975137, 124696053, 327093930, 460105249, 325913157, 591047777, 473073847, 213079766, 1033567925, 66516678, 259783970, 401528123, 737008446, 439068133, 514641389, 757262194, 857007535, 513349057, 1016106223, 371975618, 765893559, 799241414, 989324881, 1050789593, 23, 0, 0, 0 ], "cutValueData": [ 66, -69, 50, -36, 68, -15, -80, -76, 68, 69, -46, 2, 68, -115, 115, 3, 66, 88, 47, -2, 66, -107, -60, 59, 66, -67, 123, 105, 66, -104, -96, -74, 66, -107, -88, 10, 66, 108, -38, 41, 66, -67, 102, -49, 66, -116, -64, 111, 66, -64, -72, -109, 66, -79, -46, 72, 66, -68, -64, 28, 66, -105, 69, 69, 66, 71, 87, 84, 66, -111, 9, 36, 66, -122, 126, 90, 66, 81, -107, -9, 66, -98, 28, 51, 66, 78, 105, -19, 66, -60, 43, 32, 66, 119, -80, -59, 66, -97, -37, -48, 66, -112, 39, 78, 66, 124, 90, -61, 66, -93, -110, 5, 66, 78, 31, 77, 66, 96, -14, -70, 66, -81, -13, -74, 66, -99, -28, -40, 66, -106, 81, -6, 66, -95, 27, 104, 66, 89, -123, -2, 66, -59, -50, 68, 66, 95, 30, -110, 66, 104, 40, -12, 66, -63, 62, 54, 66, -83, 50, -54, 66, -122, 25, 60, 66, -109, -50, -117, 66, 96, -22, -102, 66, 104, -115, 90, 66, -74, 63, -60, 66, 79, 26, 39, 66, -70, -62, -58, 66, -80, -33, 22, 66, -109, 67, 68, 66, -122, 60, 22, 66, 84, 49, -17, 66, -116, -84, -52, 66, 57, -22, 119, 66, 46, 11, 18, 66, 68, 26, -122, 66, -70, -16, -100, 66, -62, -117, 66, 66, -114, -111, -128, 66, 77, -18, 11, 66, -125, 78, 101, 66, -64, 68, 100, 66, -118, 57, -17, 66, 84, 29, -32, 66, 101, -90, 2, 65, 43, 10, -122, 66, -79, 63, -112, 66, -92, 91, 84, 66, -121, -114, -24, 66, 89, 55, -15, 66, -76, 110, -54, 66, -63, 32, -43, 66, 76, 38, -97, 66, -97, 119, 86, 66, 83, -121, 50, 66, -97, -13, -126, 66, -68, 126, -78, 66, -66, 101, -86, 66, -100, 45, 83, 66, -84, -57, 95, 66, -74, 100, -97, 66, 89, -109, 77, 66, -77, -85, -125, 66, -112, 121, -42, 66, -115, 54, 111, 66, -124, 95, -96, 66, -61, -106, -75, 66, 110, -5, 119, 66, -123, -9, -118, 66, 118, 78, 73, 66, 70, 51, 101, 66, -102, -35, -93, 66, 91, 72, -91, 66, -98, -60, -107, 66, -114, 114, -28, 66, -105, -13, 26, 66, 83, -62, -75, 66, -122, -91, 54, 66, 72, -60, -75, 66, -105, -91, -116, 66, -120, 97, 2, 66, -78, -27, -65, 66, 83, -8, 66, 66, -70, 101, 19, 66, -109, 66, -113, 66, 74, -24, -60, 66, -65, 20, -109, 66, 108, 12, -38, 66, -110, -39, 49, 66, -111, 118, -25, 66, -99, -96, -79, 66, -120, -105, 62, 66, -107, 33, -35, 66, -61, -76, 29, 66, -113, -2, 17, 66, -115, -122, -75, 66, -74, 122, 18, 66, -67, -113, -102, 66, -59, -92, 15, 66, -63, -28, 31, 66, -101, 107, 12, 66, -97, -84, -77, 66, 109, 46, -4, 66, 87, -119, -33, 66, -114, -96, 91, 66, 71, -73, -79, 66, -115, 110, 36, 66, 88, 33, 118, 66, -103, 35, -28, 66, -62, 57, 64, 66, -111, -72, 7, 66, 91, -62, -95, 66, -70, -70, -60, 66, -62, -25, -127, 66, -57, -7, 74, 66, -112, 26, -80, 66, -82, -77, 76, 66, 127, -56, -31, 66, -59, 9, -13, 66, -114, -18, 47, 66, -128, -27, -53, 66, 97, 67, 112, 66, -103, -43, 60, 66, -108, 16, 48, 66, -72, -44, 96, 66, -76, -9, -9, 66, -63, -1, -28, 66, -117, 45, 103, 66, -91, 37, 54, 66, 77, 102, -80, 66, -105, 91, 25, 66, -80, -73, -104, 66, -106, 53, 42, 66, 85, -116, -103, 66, 77, 125, -116, 66, 78, -122, -86, 66, 97, 106, 58, 66, 105, -87, 10, 66, -113, 67, -41, 66, -128, 99, 46, 66, -111, -1, 62, 66, -86, 5, 25, 66, 83, -79, 24, 66, -65, -11, -106, 66, -111, -95, 51, 66, -65, -62, -89, 66, 90, -49, 119, 66, -75, 90, 20, 66, -113, 67, 73, 66, -107, -113, 31, 66, 85, 60, -127, 66, -114, -90, -111, 66, 97, -9, 0, 66, -63, 12, 120, 66, -118, 114, -27, 66, -111, 101, 12, 66, 74, -10, 62, 66, 82, -28, 109, 66, -84, -115, -127, 66, -61, -115, 65, 66, 87, 34, -103, 66, -92, 39, -59, 66, 83, -115, -99, 66, -126, -111, 88, 66, -112, -75, -30, 66, -64, 100, -57, 66, -73, 18, 15, 66, -127, -72, -101, 66, -115, 124, 63, 66, -102, -121, 40, 66, -101, 92, -82, 66, -101, -90, -14, 66, -124, 4, 17, 66, -112, -43, 114, 66, -68, -34, 24, 66, -100, -44, -106, 66, -62, -66, -104, 66, -105, -66, 106, 66, 84, 113, -79, 66, 69, 17, 66, 66, 69, -125, 37, 66, 86, -91, 40, 66, -105, -40, 75, 66, -98, -126, 113, 66, -67, 119, -123, 66, -60, -2, 123, 66, -70, 33, -23, 66, -114, 89, 121, 66, -121, -124, -106, 66, -70, -26, -121, 66, 107, 105, -51, 66, 92, -114, 33, 66, -107, -32, 24, 66, -63, -107, -37, 66, -116, -80, 95, 66, -79, -90, -58, 66, -70, 106, -32, 66, -63, -102, 70, 66, -66, 56, -36, 66, -101, -9, -97, 66, -79, 37, 76, 66, -92, 91, 21, 66, 88, 7, 107, 66, -120, -43, -74, 66, -62, -118, -39, 66, -128, -13, 80, 66, 83, 120, -24, 66, 99, -90, 101, 66, -123, 27, 114, 66, -117, -70, 126, 66, -96, -69, -9, 66, -95, 48, 105, 66, 93, 120, -57, 66, -93, 104, 44, 66, 73, 15, 53, 66, 81, -113, -13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], "precision": "FLOAT_32", "root": 0, "canonicalAndNotALeaf": true, "size": 235, "leftIndex": [ -1, 1, 255, 1031526980, 1160647460, 624953951, 1147293544, 985265089, 629206132, 717259129, 631289606, 597605485, 1155152623, 586091902, 586526062, 1093, 0 ], "rightIndex": [ -1, 1, 255, 1162261427, 1157469749, 629166770, 1104313957, 601859371, 1140806993, 729488185, 712397668, 640915378, 1017098248, 586149910, 602647168, 1174, 0 ], "nodeFreeIndexes": [], "nodeFreeIndexPointer": 19, "leafFreeIndexes": [], "leafFreeIndexPointer": 19, "partialTreeStateEnabled": true }, "boundingBoxCacheFraction": 0.0, "partialTreeState": true, "seed": 7119250912786373213, "id": 0, "dimensions": 32, "staticSeed": 0, "weight": 0.0, "hasAuxiliaryData": false }, { "version": "2.0", "root": 0, "maxSize": 256, "outputAfter": 32, "storeSequenceIndexesEnabled": false, "centerOfMassEnabled": false, "nodeStoreState": { "version": "2.0", "capacity": 255, "compressed": true, "cutDimension": [ 0, 31, 255, 371250761, 54467019, 526247358, 733308751, 274331871, 123272041, 90887897, 799383353, 212970423, 765642462, 607554857, 599727953, 1042733287, 900966834, 1067826743, 47425093, 366059497, 212403539, 865144499, 475104463, 317101918, 571837785, 477616993, 762113089, 880712445, 588639557, 249354317, 37284826, 873768693, 764752943, 662042155, 492263526, 45852887, 595420995, 934720617, 121212257, 778082150, 33389169, 0, 0, 0, 0, 0 ], "cutValueData": [ 67, -6, -78, -67, 69, 34, 72, 124, 66, -127, 86, -4, 66, -110, 98, 63, 68, -17, 28, -118, 66, 74, -114, 11, 66, 111, 93, -34, 69, 124, 120, 100, 66, -74, -124, -41, 66, -67, -41, 56, 66, 107, 98, 33, 66, 107, -11, 121, 66, -69, -1, -72, 66, -115, 110, -108, 66, 45, -80, 34, 66, 77, -105, 97, 66, -122, 28, -3, 66, 84, 75, 104, 66, 91, 126, -22, 66, -61, -112, -26, 66, -109, -39, 76, 66, -70, -11, 82, 66, 72, -14, 8, 66, -89, 45, -106, 66, 72, 3, -108, 66, -73, -109, -85, 66, -66, 125, -111, 66, 124, 99, 57, 66, 6, -126, 114, 65, 22, 20, -49, 66, -97, -20, -91, 66, 113, -83, 15, 66, -96, -76, -70, 66, -90, 42, 54, 66, -117, -94, -65, 66, 108, 69, 9, 66, -127, 114, 111, 66, -63, -35, -21, 66, -121, 22, 101, 66, -104, 94, 88, 66, -86, 126, 90, 66, -73, 20, -21, 66, -104, -29, -42, 66, -110, -18, -128, 66, 70, 45, -78, 66, 126, -16, -29, 66, -60, -109, 52, 66, 70, 114, 19, 66, 127, 64, -27, 66, -108, -115, -29, 66, -83, 61, 114, 66, 4, -28, -1, 66, 70, -114, -16, 66, -68, -101, 116, 66, -70, 31, -122, 66, -65, 31, 15, 66, -107, -124, -40, 66, -106, -49, -122, 66, -76, 16, -90, 66, -60, 99, -92, 66, -118, -58, -112, 66, -118, -118, -46, 66, 84, 119, 111, 66, -98, 19, -84, 66, -126, 106, 75, 66, -70, -59, 31, 66, -123, -77, 101, 66, -62, 62, -128, 66, 72, 66, 109, 66, -64, 82, 43, 66, 75, 18, 21, 66, -108, 42, -46, 66, 99, -57, 99, 66, 127, -64, 60, 66, -67, 109, 81, 66, -126, -114, 123, 66, -67, -33, 8, 66, 121, 45, -54, 66, -78, 51, 5, 66, -102, 5, -85, 66, -65, -34, -89, 66, 75, 100, -17, 66, 68, 51, -59, 66, -66, 117, 98, 66, 93, -43, -50, 66, -107, -127, -54, 66, 111, -56, -9, 66, 121, -11, 42, 66, -69, -11, 104, 66, 68, 58, -4, 66, -108, 28, 56, 66, -60, -39, -21, 66, -115, -123, 63, 66, -122, -73, -91, 66, -113, -4, -92, 66, -104, -44, -82, 66, -106, -14, 3, 66, 103, 2, -62, 66, 99, -33, -120, 66, 113, 22, -92, 66, -112, 3, 39, 66, -65, -67, -21, 66, 86, -25, 42, 66, -66, 19, 6, 66, -116, 27, -92, 66, -87, -118, -82, 66, -60, 35, -15, 66, -90, -62, -108, 66, 98, 98, 47, 66, -111, 0, 76, 66, 82, 86, 21, 66, -85, 80, -63, 66, -114, -35, -124, 66, -110, 49, -84, 66, 102, -52, -121, 66, -65, -1, 121, 66, -120, 87, 81, 66, 80, -36, -51, 66, -93, -114, -59, 66, -65, 126, -33, 66, -73, -49, -20, 66, -84, -97, -52, 66, -115, -67, -18, 66, 121, 83, -74, 66, -70, -43, 13, 66, -93, -45, -72, 66, -101, 98, -98, 66, -73, -24, -42, 66, 115, 77, -94, 66, 75, -127, 12, 66, -104, 117, -77, 66, -106, -24, 112, 66, -118, 13, 126, 66, 83, 80, 115, 66, -68, 90, -69, 65, -43, -122, 94, 66, 110, 96, 23, 66, -63, 47, -64, 66, -121, -3, 34, 66, -81, 44, 100, 66, 72, 46, -73, 66, -93, -53, 55, 66, -79, -100, -48, 66, -76, 86, 105, 66, 122, -84, -49, 66, 119, -119, 122, 66, -83, -83, -10, 66, -120, 15, -42, 66, 121, 56, -59, 66, -61, 65, 13, 66, -99, -65, 64, 66, -82, -38, 60, 66, 125, -43, -105, 66, 92, 6, -93, 66, -125, 88, 5, 66, -118, -119, 6, 66, -103, -109, 32, 66, -66, -111, -62, 66, -83, 120, 13, 66, -103, -60, -63, 66, -109, 100, 72, 66, 86, 74, 81, 66, -87, -104, -89, 66, -84, -61, -41, 66, -67, -70, -111, 66, -121, -106, -98, 66, 100, -73, 107, 66, -121, 5, 66, 66, -103, 40, -42, 66, 71, -98, 43, 66, -98, 122, 82, 66, -103, -96, 112, 66, -120, 119, -51, 66, -61, -94, -31, 66, 69, 61, 84, 66, -99, 90, -2, 66, -108, 90, -85, 66, -87, -52, -56, 66, -119, -40, -127, 66, -65, 11, -108, 66, 71, 70, -106, 66, -117, -110, 17, 66, -105, 3, 117, 66, 84, -83, -128, 66, 72, -52, -81, 66, 93, -68, -109, 66, -66, 66, 75, 66, 85, -105, 37, 66, -80, 73, -8, 66, -71, -117, 61, 66, -107, -115, -103, 66, -77, -92, 23, 66, 87, -90, 61, 66, -79, -68, -4, 66, -71, -58, -122, 66, -127, 38, 6, 66, 110, -118, -128, 66, -121, -118, 35, 66, 101, 12, -94, 66, -74, 102, -68, 66, -107, 85, -70, 66, -63, -64, 102, 66, 70, 91, -42, 66, -116, -50, 74, 66, -103, 39, -30, 66, 87, 105, -23, 66, -115, -100, 51, 66, -116, -55, -45, 66, 89, 100, 61, 66, 76, -58, 25, 66, -109, 80, 100, 66, 76, -73, 8, 66, 111, -52, -41, 66, 83, 0, -41, 66, 82, 52, 32, 66, 106, 24, 17, 66, -67, -88, -96, 66, 75, 65, -53, 66, -116, -16, 50, 66, -109, -63, 1, 66, -63, -14, 124, 66, 80, -113, 1, 66, -113, 2, 99, 66, 76, 18, 84, 66, -66, -46, -40, 66, -63, 70, -4, 66, 100, 50, -44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], "precision": "FLOAT_32", "root": 0, "canonicalAndNotALeaf": true, "size": 227, "leftIndex": [ -1, 1, 255, 1031500007, 758875145, 1155325478, 715844138, 1112243794, 596273638, 1142353088, 729940802, 1011620069, 1016981216, 1097935118, 212845067, 0, 0 ], "rightIndex": [ -1, 1, 255, 1031497735, 1142890465, 1147827020, 1104681797, 983510630, 586707592, 1112651468, 987879955, 640359319, 1012138873, 753580870, 208304176, 0, 0 ], "nodeFreeIndexes": [], "nodeFreeIndexPointer": 27, "leafFreeIndexes": [], "leafFreeIndexPointer": 27, "partialTreeStateEnabled": true }, "boundingBoxCacheFraction": 0.0, "partialTreeState": true, "seed": -5390658293349841947, "id": 0, "dimensions": 32, "staticSeed": 0, "weight": 0.0, "hasAuxiliaryData": false }, { "version": "2.0", "root": 0, "maxSize": 256, "outputAfter": 32, "storeSequenceIndexesEnabled": false, "centerOfMassEnabled": false, "nodeStoreState": { "version": "2.0", "capacity": 255, "compressed": true, "cutDimension": [ 0, 31, 255, 790717654, 588904867, 474147898, 228253029, 120528719, 338146909, 531166966, 60143701, 882735958, 787914407, 1012267954, 525558851, 367957971, 622143046, 761484757, 904996546, 371112575, 128625089, 571927037, 77573037, 1054648271, 796185802, 333035051, 102548827, 733134645, 599582421, 460564471, 534890677, 530100033, 535661734, 198900787, 619286362, 213686742, 584439022, 534562089, 708441634, 311475017, 99, 0, 0, 0, 0, 0 ], "cutValueData": [ 69, 67, -93, -27, 69, 47, 80, -19, 66, -86, 71, 56, 66, -92, 98, -46, 66, -72, 5, 40, 66, 85, 121, 30, 66, 55, 116, -7, 66, -98, -102, -121, 66, -73, -67, -52, 66, -114, 48, -72, 66, -120, -113, -62, 66, 28, -59, -58, 66, -64, -121, -55, 66, -120, -28, 72, 66, 45, 113, 49, 66, 69, -76, 59, 65, 94, -96, -120, 66, -62, 85, 100, 66, -110, 76, 0, 66, 81, 3, 20, 66, 122, -99, -100, 66, 69, 104, 74, 66, -102, 16, 30, 66, -84, 120, -87, 66, 56, -26, 88, 66, -77, 68, 54, 66, 78, -28, 33, 66, -72, 20, -59, 66, -70, 96, 121, 66, 71, -72, -94, 66, -111, 46, 37, 66, -88, 34, -63, 66, -98, 125, 126, 66, 85, 56, 37, 66, -69, 45, -44, 66, -64, -40, 63, 66, -68, 4, 51, 66, 111, -71, 62, 66, -108, -8, 20, 66, -120, 55, 126, 66, -80, 116, 39, 66, 79, -58, 84, 66, -110, -120, -14, 66, -69, 54, -119, 66, -67, 9, -123, 66, 89, -48, 65, 66, -123, -102, -39, 66, -93, 105, -89, 66, -87, 118, 47, 66, -80, -91, -99, 66, -71, -105, -92, 66, -84, 113, 15, 66, -97, -12, 104, 66, -63, -51, 123, 66, 89, -121, 52, 66, -117, 23, -43, 66, 117, -9, -120, 66, -114, -120, 96, 66, -126, 113, -40, 66, 100, -76, 32, 66, -74, 100, 8, 66, -104, 26, 120, 66, -81, 18, 36, 66, 101, -122, 87, 66, -99, -66, -83, 66, -73, 58, -56, 66, 79, -12, -5, 66, -68, 18, 117, 66, -118, -5, -72, 66, -64, 38, 120, 66, -107, 51, 57, 66, 75, 92, -118, 66, 74, 27, -62, 66, -74, -71, 25, 66, -97, 111, -18, 66, -116, -119, -84, 66, -62, -58, 31, 66, -79, 6, 96, 66, -77, -112, 37, 66, -79, 18, -74, 66, -107, 8, 54, 66, -69, -64, 106, 66, -100, 31, 45, 66, -62, -43, -100, 66, -116, -53, 0, 66, -64, 52, 75, 66, -113, -81, 63, 66, -70, -85, -71, 66, -59, -62, -11, 66, -59, -120, 43, 66, -64, 2, -55, 66, -77, 76, 76, 66, -112, -27, 56, 66, -67, -49, 108, 66, 77, -32, 75, 66, -64, 61, 112, 66, 84, -109, -96, 66, 98, 1, -32, 66, -87, -25, 50, 66, -121, -80, -102, 66, -105, -43, 104, 66, 94, -70, 113, 66, -122, 92, -117, 66, -75, -96, 109, 66, -72, 104, -93, 66, -114, -60, 102, 66, -60, -53, -107, 66, 105, 125, 97, 66, -89, 115, -65, 66, 91, -58, 96, 66, -60, 92, 107, 66, -115, 29, -64, 66, -108, 8, 59, 66, -112, -108, -31, 66, -102, 42, -38, 66, -102, 126, -9, 66, -70, -25, 65, 66, 86, -86, 42, 66, -108, 116, 38, 66, -76, -18, -26, 66, 99, 30, -68, 66, -78, -115, 69, 66, -109, -68, -93, 66, -118, -120, -87, 66, -127, -68, 55, 66, 74, 71, 108, 66, -93, -91, -42, 66, -76, -3, -70, 66, -110, 1, 1, 66, -114, -34, 52, 66, 85, -85, -101, 66, 79, 65, -100, 66, 94, -37, 88, 66, -99, 92, -69, 66, -94, 83, 67, 66, 99, -113, -27, 66, -105, -113, 46, 66, -108, 120, -100, 66, 82, -29, -63, 66, -68, 64, 40, 66, -97, -52, -122, 66, -113, 23, -110, 66, -116, -100, 22, 66, 76, 93, 23, 66, -116, 13, 6, 66, 124, 80, 124, 66, 99, -81, 78, 66, -118, -127, -114, 66, 116, -94, 74, 66, -124, 95, -56, 66, -120, 46, 10, 66, -68, 95, -113, 66, -101, 6, -14, 66, -116, -48, 27, 66, 93, 115, 124, 66, -113, 112, -44, 66, 110, 37, 61, 66, 71, 67, -46, 66, -121, 79, -53, 66, 114, 66, -83, 66, 71, 41, 52, 66, -115, -28, 72, 66, -98, 121, -36, 66, -102, -105, -30, 66, -65, 77, -113, 66, 72, 105, -100, 66, -68, -11, 56, 66, 88, 55, 123, 66, -124, -98, 112, 66, -69, -5, 21, 66, 79, -84, -43, 66, -106, 74, -97, 66, -102, -5, -1, 66, 93, 107, 88, 66, -65, 78, 25, 66, -119, -121, 112, 66, 96, 94, 105, 66, 90, -13, -119, 66, -62, 86, -8, 66, 94, 85, -100, 66, 80, 41, -75, 66, -114, 90, -23, 66, 90, 27, -41, 66, -97, -48, -42, 66, -115, 49, -77, 66, -94, 49, -43, 66, -67, -17, -30, 66, -75, -101, -111, 66, 89, 91, -40, 66, 70, -49, -65, 66, -76, 23, -115, 66, -65, -118, -90, 66, -75, 16, 68, 66, -78, -81, -119, 66, -68, 70, 25, 66, -100, -88, 63, 66, 73, 124, -73, 66, -72, 48, -99, 66, -71, 68, -27, 66, 74, 88, -80, 66, -108, -17, 86, 66, 114, 90, 8, 66, -97, -40, 87, 66, -116, 88, -81, 66, -110, 120, 34, 66, -116, 14, 11, 66, -96, 18, -10, 66, -100, -68, 116, 66, -122, -128, 110, 66, 78, -56, -13, 66, -78, 74, 56, 66, -101, -59, -46, 66, -115, 120, 84, 66, 76, 84, -19, 66, 77, -110, -49, 66, -102, 55, 89, 66, -111, -86, 10, 66, -72, 19, -25, 66, -76, 55, 51, 66, -108, -22, 115, 66, -101, -50, 75, 66, -105, -57, 70, 66, 81, 70, -53, 66, 75, 42, 100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], "precision": "FLOAT_32", "root": 0, "canonicalAndNotALeaf": true, "size": 224, "leftIndex": [ -1, 1, 255, 1112237405, 1157475338, 970168472, 730019626, 1028095307, 716905132, 1118616631, 597253418, 1116904262, 716670170, 624177455, 7174807, 0, 0 ], "rightIndex": [ -1, 1, 255, 1117066864, 1157299163, 583500320, 1018060645, 769821569, 758697997, 602646439, 772646333, 1098289409, 1104127810, 582728054, 7371553, 0, 0 ], "nodeFreeIndexes": [], "nodeFreeIndexPointer": 30, "leafFreeIndexes": [], "leafFreeIndexPointer": 30, "partialTreeStateEnabled": true }, "boundingBoxCacheFraction": 0.0, "partialTreeState": true, "seed": -721376606247191852, "id": 0, "dimensions": 32, "staticSeed": 0, "weight": 0.0, "hasAuxiliaryData": false }, { "version": "2.0", "root": 0, "maxSize": 256, "outputAfter": 32, "storeSequenceIndexesEnabled": false, "centerOfMassEnabled": false, "nodeStoreState": { "version": "2.0", "capacity": 255, "compressed": true, "cutDimension": [ 0, 31, 255, 993471586, 768789051, 802720882, 240230183, 724497905, 876430671, 1034626670, 130002661, 791844159, 380193277, 468146233, 706381885, 58403877, 396199281, 446029754, 531492421, 195618473, 757852245, 229068193, 920984815, 708438567, 506430822, 258858533, 895073403, 53792599, 804555757, 465537135, 582404898, 707302726, 515423065, 375700174, 880518827, 1059512290, 875783977, 1055211223, 313476475, 868188026, 1288133, 0, 0, 0, 0, 0 ], "cutValueData": [ 67, -63, 5, -26, 65, 35, -92, -54, 65, -101, -102, -126, 66, -100, 110, 38, 65, -37, 42, -108, 66, -118, 83, 97, 65, 44, -85, -22, 66, -122, 123, -28, 66, -91, -111, 0, 66, -112, -44, -23, 66, 37, -20, -119, 66, -66, -54, -75, 66, -102, 86, -14, 66, 71, -79, -58, 66, 79, -107, 117, 66, 117, -81, 54, 66, -109, -70, 4, 66, 100, -8, -98, 66, 11, -7, -122, 66, -90, 61, -51, 66, 100, 39, 16, 66, 76, -29, -76, 66, -105, 57, 80, 66, 124, 41, 43, 66, -110, 50, 96, 66, 16, -30, 117, 66, -106, 32, -98, 66, -117, -60, 11, 66, -63, 7, 23, 66, 62, -20, 87, 66, 113, -112, 85, 66, -72, -39, 118, 66, -107, -95, 47, 66, -67, 91, 117, 66, 93, 66, 17, 66, -79, 3, 100, 66, -74, 54, -63, 66, 124, -7, -87, 66, -124, -73, -68, 66, -59, -108, -73, 66, -64, 39, 3, 66, -93, -122, -86, 66, -99, -63, -58, 66, 93, -36, 102, 66, 104, 16, -56, 66, 114, -32, 16, 66, 109, 24, -27, 66, -125, 125, -104, 66, 93, -120, -13, 66, -113, -21, -57, 66, -124, -21, -107, 66, -122, 20, 111, 66, -119, 10, 10, 66, 72, 90, -7, 66, -119, -88, 36, 66, 68, 115, -8, 66, -70, -68, -81, 66, -70, -127, 78, 66, -61, -101, -79, 66, 76, 127, -78, 66, -108, 104, -40, 66, -106, 13, 107, 66, -67, -63, 115, 66, -77, -78, -122, 66, -88, 45, -71, 66, -99, -32, -126, 66, -111, -67, -37, 66, -109, 17, -46, 66, -79, 109, 103, 66, -95, -13, 6, 66, -103, -106, 8, 66, -89, -55, 71, 66, -126, -94, -56, 66, -110, 20, 124, 66, 75, -29, -92, 66, -73, 80, 69, 66, 84, -108, -125, 66, -115, 116, -56, 66, -98, -84, -17, 66, 111, -15, 120, 66, -115, 119, -20, 66, 108, 119, -90, 66, -111, -4, 1, 66, 73, -104, -33, 66, -80, -85, -115, 66, -103, -121, 88, 66, 108, -46, 53, 66, 118, 55, -70, 66, -125, 123, 32, 66, -81, 106, 82, 66, -101, 55, -120, 66, -79, 107, 78, 66, 74, 78, -89, 66, 71, -12, -53, 66, -73, 21, -24, 66, 74, 42, -106, 66, -118, -40, 110, 66, -107, 2, -105, 66, -114, -118, -9, 66, -106, 13, 52, 66, -65, 116, -69, 66, -106, 26, 23, 66, -102, -112, -2, 66, -62, 106, 104, 66, -87, -30, -3, 66, 70, 32, 5, 66, -62, -33, -118, 66, -70, -70, 50, 66, -106, 67, -24, 66, -110, 85, -73, 66, 95, -95, 48, 66, -77, 96, 35, 66, -70, 86, 53, 66, -59, -121, -104, 66, 80, -91, 5, 66, 77, -125, -127, 66, 101, -121, 55, 66, -81, 102, -91, 66, -66, -6, -81, 66, 109, 72, -45, 66, 78, 71, 58, 66, -115, 68, -4, 66, -67, 77, 54, 66, 118, 77, -49, 66, 126, -52, -43, 66, -93, -47, -110, 66, -62, -6, -102, 66, 75, -91, -92, 66, -99, 68, -126, 66, 115, 51, -23, 66, -66, 99, 0, 66, 96, -118, 117, 66, -115, -15, 12, 66, -115, -18, -64, 66, 88, -89, -71, 66, 81, -50, 4, 66, -65, 111, -67, 66, 100, 15, -22, 66, 98, 124, 92, 66, 110, -115, 53, 66, 105, 11, 61, 66, 96, -115, 29, 66, -107, 38, 45, 66, -88, 17, -126, 66, -119, 69, -66, 66, -64, 6, 60, 66, 101, 119, -101, 66, -106, 25, -65, 66, 80, -127, -40, 66, -109, 87, 44, 66, -110, 84, -43, 66, 104, -33, 122, 66, -63, -59, 71, 66, -110, -5, 39, 66, 89, 127, -80, 66, 89, -91, -96, 66, 83, 105, 28, 66, 120, -38, 50, 66, -81, -39, -21, 66, -123, 73, -109, 66, 105, -69, 75, 66, -105, 49, -107, 66, -72, -108, -104, 66, -105, -6, 50, 66, -67, -114, -106, 66, -109, -46, -1, 66, 93, 80, -14, 66, -125, -103, 6, 66, -66, -84, -24, 66, -73, -73, -94, 66, -114, 32, -98, 66, -120, 123, 72, 66, -63, -10, 63, 66, -97, -95, 90, 66, -112, -99, -49, 66, -61, 117, 0, 66, -64, -94, 27, 66, -112, 46, -97, 66, 86, 19, -23, 66, 93, 110, -79, 66, -62, 26, -127, 66, -68, -107, -30, 66, -78, 65, -30, 66, -104, -107, 87, 66, -79, 77, 34, 66, 84, 102, 58, 66, 119, -69, 84, 66, -111, -88, 0, 66, -116, -115, 48, 66, 77, -110, 2, 66, 89, 109, -105, 66, -71, 110, 109, 66, -81, 60, -76, 66, 73, -85, -32, 66, 111, 71, -108, 66, -79, -82, -83, 66, -59, -45, -72, 66, 73, -117, 25, 66, -102, 10, -7, 66, -109, 30, -103, 66, -105, 96, -110, 66, -72, -48, 53, 66, 86, -76, 74, 66, -73, 31, 5, 66, 87, -68, 83, 66, -65, -13, 98, 66, 120, -74, 6, 66, -70, 117, 45, 66, -63, -56, -125, 66, 119, 28, 92, 66, 88, 67, 98, 66, 90, -59, -77, 66, -107, -106, 77, 66, -102, -64, -45, 66, -62, -108, 79, 66, -101, 13, 116, 66, -62, 19, -89, 66, 97, -112, 27, 66, 82, -54, 86, 66, -75, -17, -29, 66, 115, 117, -95, 66, -104, 109, -93, 66, -110, -25, -14, 66, -64, 33, -4, 66, -102, -9, 48, 66, -128, -10, 28, 66, -109, -23, 93, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], "precision": "FLOAT_32", "root": 0, "canonicalAndNotALeaf": true, "size": 227, "leftIndex": [ -1, 1, 255, 758363846, 1033114000, 602653985, 1147673933, 975107957, 624945118, 1030986049, 1032580345, 1018529530, 1030985788, 1027542172, 238358821, 0, 0 ], "rightIndex": [ -1, 1, 255, 1160487538, 1033121209, 1114411118, 1147831316, 1026543992, 629748499, 970154401, 595538690, 1142595601, 1017155110, 726748519, 195313423, 0, 0 ], "nodeFreeIndexes": [], "nodeFreeIndexPointer": 27, "leafFreeIndexes": [], "leafFreeIndexPointer": 27, "partialTreeStateEnabled": true }, "boundingBoxCacheFraction": 0.0, "partialTreeState": true, "seed": 3064446777312786653, "id": 0, "dimensions": 32, "staticSeed": 0, "weight": 0.0, "hasAuxiliaryData": false }, { "version": "2.0", "root": 0, "maxSize": 256, "outputAfter": 32, "storeSequenceIndexesEnabled": false, "centerOfMassEnabled": false, "nodeStoreState": { "version": "2.0", "capacity": 255, "compressed": true, "cutDimension": [ 0, 31, 255, 525536174, 127760097, 320911086, 171375735, 917425314, 226089954, 637343330, 1016292691, 1017764653, 627886389, 334409029, 1071285746, 465505389, 236438983, 1038801102, 35575509, 64149302, 396273830, 264093143, 324760629, 572319814, 118798133, 265658314, 34915875, 381288249, 207036323, 43732163, 96458681, 321687411, 481089206, 196128550, 459990567, 1038163145, 215293857, 996015725, 866553421, 872072570, 509917042, 10, 0, 0, 0, 0 ], "cutValueData": [ 68, -66, 32, -18, 67, 121, 65, 77, 68, 1, 39, -22, 69, 117, -56, -3, 66, -82, 115, 20, 66, 86, 57, -3, 66, -105, 119, -57, 65, -75, 123, 49, 66, -88, 11, -54, 66, -92, -123, -72, 66, -113, 32, 20, 66, 51, -88, 3, 66, -89, 77, 32, 66, -128, -88, -74, 66, 124, 124, 125, 65, -51, -13, 69, 66, -84, -78, 60, 66, -88, 42, 104, 66, -118, 51, 105, 66, 76, -6, 16, 66, 89, 33, 65, 66, -110, -91, -56, 66, 90, -26, -123, 66, -101, -55, -16, 66, -65, 51, -58, 66, -88, 108, -2, 66, 110, 26, 85, 66, -111, -25, -96, 66, -96, -6, 33, 66, -119, 111, 126, 66, -84, -47, 4, 66, 94, 99, 80, 66, -82, 35, -84, 65, -128, -5, 122, 66, 84, -2, -84, 66, -94, 33, 20, 66, -79, -85, 35, 65, 109, 105, -27, 66, -116, -43, 17, 66, -71, -9, 46, 66, 81, -116, 21, 66, -90, -93, 124, 66, 85, -84, 34, 66, -74, 53, 0, 66, -102, 66, 78, 66, -97, 99, 3, 66, -121, 123, 97, 66, -71, 18, -25, 66, -115, -71, -55, 66, -113, 124, 26, 66, -64, -41, 21, 66, 79, 86, 46, 66, -91, 99, 74, 66, -82, 101, -27, 66, -126, -50, 3, 66, -117, -52, -111, 66, -64, -19, 100, 66, -108, 74, -14, 66, -71, 7, -62, 66, -74, 75, -66, 66, -94, 5, 93, 66, -90, -119, 37, 66, -128, -28, 3, 66, -101, -124, 7, 66, -73, 101, -6, 66, -90, 105, 22, 66, -69, 100, 86, 66, 93, 30, -97, 66, -85, 101, -44, 66, -117, -83, -115, 66, -116, -98, -63, 66, 112, 49, 15, 66, -102, -98, -117, 66, 95, -107, 60, 66, 95, -53, -79, 66, -67, 69, 47, 66, 113, 103, -111, 66, -103, 42, 96, 66, 115, 48, 63, 66, -64, -109, -58, 66, -117, -36, -121, 66, 101, -120, 63, 66, -100, 89, -24, 66, 97, -37, -62, 66, -87, -31, -126, 66, -81, 32, -110, 66, -61, 82, 61, 66, -101, -108, -114, 66, -60, 110, -93, 66, -84, -69, 94, 66, -94, -38, -95, 66, -60, -61, 123, 66, -106, 120, -128, 66, -116, 110, 27, 66, -99, 113, 65, 66, -91, 106, 71, 66, -72, -38, -19, 66, -96, -89, 52, 66, -122, 116, -2, 66, -100, 94, 44, 66, -108, 60, -50, 66, -97, 9, -128, 66, -72, 40, 26, 66, -107, -8, -19, 66, -78, 2, -71, 66, -124, 95, 1, 66, -126, 79, -16, 66, 94, -105, 40, 66, 72, -114, -106, 66, -69, 17, 127, 66, 81, 56, -77, 66, 80, 119, -48, 66, -127, -86, -89, 66, 89, 60, -27, 66, -104, 106, 65, 66, -106, 21, -115, 66, -97, -25, -105, 66, -84, -5, -108, 66, -94, 44, -91, 66, -113, 70, 106, 66, -83, -119, 39, 66, -74, 54, 42, 66, -78, -10, 127, 66, -107, -81, 110, 66, -127, 113, -95, 66, -116, 3, -47, 66, -113, 17, 58, 66, -123, 75, 13, 66, -123, 61, 126, 66, -117, -46, 69, 66, -105, -51, 42, 66, 89, 3, 68, 66, -75, 84, -47, 66, -64, 72, 51, 66, 83, -91, 73, 66, 87, 99, -47, 66, -109, 122, 33, 66, 99, -103, -56, 66, 72, 124, 57, 66, -106, 58, -29, 66, -125, -57, 75, 66, -98, -67, 117, 66, -107, -127, 5, 66, -111, -17, 86, 66, -111, 18, 104, 66, -102, -63, -123, 66, 111, -5, -33, 66, 69, 90, 37, 66, 75, -34, 41, 66, 73, -14, -69, 66, 79, 50, -11, 66, -122, -38, 9, 66, 93, -124, -57, 66, -61, 116, -110, 66, -117, -70, -79, 66, -59, 10, 36, 66, 68, -74, 38, 66, -69, 46, -54, 66, 107, 36, 78, 66, -74, 13, -14, 66, -101, 56, 5, 66, -110, 34, -41, 66, -107, -41, -128, 66, -102, -77, -105, 66, -119, 76, 125, 66, 122, 49, 94, 66, 82, 92, 94, 66, -64, 82, -9, 66, 79, 98, 89, 66, 91, 13, -114, 66, 82, -113, -7, 66, -89, 55, -97, 66, -76, 11, 27, 66, -118, -2, -4, 66, -84, 53, -89, 66, -110, -74, -127, 66, -108, -38, -14, 66, -118, 88, -99, 66, -80, -1, -106, 66, -76, -99, 29, 66, -74, -79, 65, 66, -95, 105, -83, 66, 68, -88, -98, 66, -122, 25, 17, 66, 84, -50, 63, 66, -109, 51, -8, 66, 78, 84, 9, 66, -103, 127, 114, 66, -112, 75, -94, 66, -109, -9, 22, 66, -62, 25, 65, 66, -104, -8, -54, 66, -101, -126, 7, 66, -92, 8, -79, 66, 87, 9, 96, 66, -65, -14, -40, 66, -75, 74, -5, 66, -79, -121, 117, 66, -121, 115, -43, 66, -110, -122, -27, 66, 77, -59, -87, 66, -63, -19, 102, 66, -121, -67, 3, 66, -64, 59, -91, 66, -119, -6, -65, 66, 87, -45, -115, 66, 102, -23, 60, 66, 81, -81, -5, 66, -118, -114, -26, 66, -95, 38, -22, 66, -111, -49, -90, 66, -65, -45, 100, 66, 94, -52, -115, 66, -106, 38, -127, 66, -65, -89, 26, 66, -109, -8, 122, 66, -59, 107, -43, 66, 93, 17, 50, 66, -105, 77, 43, 66, -114, -119, -61, 66, 101, -35, -74, 66, -116, -71, -42, 66, -60, -20, -53, 66, 91, 49, 81, 66, -99, 45, -100, 66, -112, -21, 83, 66, -59, -111, -36, 66, 113, 73, -21, 66, -69, 97, -9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], "precision": "FLOAT_32", "root": 0, "canonicalAndNotALeaf": true, "size": 229, "leftIndex": [ -1, 1, 255, 759940217, 597851188, 710862452, 1147299142, 1018214702, 1141329659, 638607614, 626310868, 724876739, 629196647, 753337382, 754052459, 1, 0 ], "rightIndex": [ -1, 1, 255, 759953299, 1118623282, 770038325, 1013253622, 1142418806, 1013979832, 645521126, 1032858751, 600324118, 725328427, 1097770954, 581668981, 1, 0 ], "nodeFreeIndexes": [], "nodeFreeIndexPointer": 25, "leafFreeIndexes": [], "leafFreeIndexPointer": 25, "partialTreeStateEnabled": true }, "boundingBoxCacheFraction": 0.0, "partialTreeState": true, "seed": 3783375162460323258, "id": 0, "dimensions": 32, "staticSeed": 0, "weight": 0.0, "hasAuxiliaryData": false }, { "version": "2.0", "root": 0, "maxSize": 256, "outputAfter": 32, "storeSequenceIndexesEnabled": false, "centerOfMassEnabled": false, "nodeStoreState": { "version": "2.0", "capacity": 255, "compressed": true, "cutDimension": [ 0, 31, 255, 242072258, 191800929, 203791159, 454404915, 505204563, 656883261, 519542867, 195778297, 775481585, 735769639, 476420433, 761706846, 922314183, 630279338, 737627169, 446614269, 603625393, 664086629, 1008561203, 184010425, 857847133, 357600482, 400676778, 55664323, 1034286397, 237479118, 215256139, 311630131, 1045764134, 259042911, 68938075, 170233683, 1065034913, 124249926, 578258254, 1031211085, 267216079, 2239, 0, 0, 0, 0, 0 ], "cutValueData": [ 68, 24, -67, 33, 69, 83, 124, 99, 69, 119, -25, -72, 66, 78, 49, -116, 69, -124, 22, -128, 66, 27, 123, 82, 66, 28, 93, -95, 66, 23, 59, -80, 66, 57, 65, 9, 66, -126, -52, 43, 66, -99, 44, 95, 66, -105, 49, -75, 66, 125, -88, -53, 66, -95, 82, 36, 66, -88, -11, 90, 66, 113, -60, -93, 66, -94, -57, 123, 66, -76, -65, 103, 66, -128, -45, -101, 66, 89, -56, 19, 66, -65, -103, -28, 66, 125, 83, -20, 66, -107, 23, 22, 66, 122, 40, 38, 66, 83, -67, -43, 66, -90, -113, 13, 66, 95, -68, 36, 66, -85, 55, 94, 66, -109, 8, -121, 66, 80, -109, 13, 66, -104, -21, -120, 66, -114, -90, -98, 66, 109, -8, -62, 66, -67, -114, -60, 66, -77, 14, -53, 66, 91, 95, -18, 66, 113, 29, -117, 66, -63, -77, 62, 66, -68, 98, -82, 66, 82, -6, 48, 66, -114, 26, 126, 66, 121, 46, 49, 66, -99, 103, 46, 66, 119, -34, 33, 66, -107, -59, -123, 66, -63, 58, 57, 66, -59, 10, -118, 66, -106, -12, -84, 66, -116, 29, -97, 64, -19, 90, 39, 66, -80, 81, -23, 66, -119, 16, 50, 66, -118, 66, -114, 66, 104, -24, 107, 66, 85, 105, -41, 66, -125, 120, 55, 66, -106, 12, 126, 66, -112, 94, -30, 66, -115, -21, 62, 66, -108, 82, -90, 66, -128, 95, -128, 66, -72, 90, -4, 66, -74, -72, 78, 66, 83, 124, -105, 66, -82, -117, 59, 66, -60, 0, 23, 66, -71, -117, -66, 66, -67, -46, -26, 66, -72, -84, 114, 66, -103, 109, 103, 66, -63, -99, 32, 66, -62, 82, -49, 66, 64, -14, 127, 66, -70, -68, 69, 66, -128, -54, 54, 66, -78, -122, -14, 66, 88, -36, -48, 66, -127, -104, -108, 66, -81, 66, -46, 66, 124, -97, 116, 66, 82, 8, -45, 66, -66, 18, -67, 66, -106, -68, -94, 66, -73, 115, -22, 66, -115, -116, -29, 66, -120, -44, -4, 66, -128, -65, -110, 66, -79, -99, -36, 66, 76, 93, -45, 66, -121, -1, -20, 66, -108, 85, -118, 66, 117, -86, -49, 66, -73, 60, -25, 66, -123, 94, -123, 66, -106, 115, -28, 66, -107, -118, -39, 66, -108, 107, -89, 66, -123, 112, 119, 66, -124, -44, -80, 66, -105, -105, -120, 66, 126, -28, 101, 66, -119, 106, 126, 66, -102, 59, -89, 66, 102, 67, 61, 66, -59, -59, -120, 66, -70, 75, -26, 66, -127, 29, -82, 66, -126, 36, -30, 66, 86, 96, 41, 66, -107, 11, 18, 66, 70, 99, 92, 66, -65, 8, 51, 66, -109, 75, 86, 66, -78, -121, 103, 66, -96, 108, -43, 66, -117, 45, 26, 66, -120, -126, 99, 66, 103, -7, -40, 66, 78, -34, -63, 66, -122, -128, 33, 66, -110, -120, 74, 66, -65, -88, 108, 66, -108, -125, 126, 66, -128, 126, -96, 66, -81, -101, -95, 66, -126, -9, -48, 66, -65, 56, -104, 66, 105, 7, -55, 66, 108, 3, -85, 66, -107, 43, -85, 66, -110, 67, 35, 66, -76, 126, -119, 66, -66, 84, -115, 66, -118, 111, -55, 66, 36, -11, -11, 66, 90, -16, -14, 66, -66, 50, -39, 66, 96, 2, 42, 66, 107, 92, -39, 66, -66, -60, -19, 66, 70, 79, 16, 66, -65, -98, 39, 66, -110, 63, 50, 66, -114, 94, -58, 66, -101, -6, -45, 66, -106, -125, 112, 66, -120, -58, 45, 66, 84, -101, -90, 66, -63, 76, -48, 66, -79, -40, -31, 66, -67, -116, 58, 66, -67, -100, -93, 66, -121, -53, -17, 66, 75, -55, -106, 66, -61, 19, -128, 66, 78, -38, -97, 66, 103, -99, 45, 66, -66, 84, -26, 66, -124, 36, -8, 66, -110, -76, 35, 66, -105, 113, 97, 66, -61, -36, 56, 66, 117, -116, 121, 66, -116, -48, 93, 66, -68, 58, 81, 66, -81, 103, -54, 66, -112, 68, 25, 66, -106, -37, 107, 66, -78, -32, -54, 66, -118, -58, 28, 66, -66, 74, 112, 66, -69, 9, 22, 66, -100, -43, -66, 66, 106, -12, 112, 66, 87, 46, -25, 66, -80, -48, -103, 66, 73, 125, 12, 66, -109, 112, 77, 66, 73, 77, -75, 66, 115, 99, -56, 66, 110, -108, -106, 66, -90, 101, 110, 66, -68, -10, -70, 66, 70, 25, -94, 66, -115, -22, -3, 66, -76, -60, -42, 66, 109, -101, -52, 66, -101, -42, -117, 66, 99, -47, 33, 66, 84, -121, 116, 66, -63, -50, -57, 66, -112, -90, -11, 66, -119, 23, -98, 66, -107, 35, 117, 66, -112, 55, -78, 66, -70, 99, 126, 66, 108, -93, 28, 66, 92, -15, -21, 66, -64, 14, -112, 66, -72, -35, 48, 66, -112, -39, 39, 66, 74, 18, -45, 66, -70, -124, -50, 66, 89, 33, -10, 66, -61, -2, -26, 66, -80, 107, 6, 66, -127, 73, -119, 66, 112, -18, 11, 66, 86, -13, 80, 66, -109, -52, 30, 66, -116, 36, -82, 66, -72, -97, 4, 66, -71, 15, 55, 66, -63, 32, -108, 66, 77, -29, 16, 66, -61, -15, -114, 66, 85, 58, -110, 66, -72, 89, -96, 66, -110, -62, -5, 66, -60, 92, -26, 66, -62, 45, -14, 66, 93, 68, -20, 66, 78, 31, 88, 66, -104, 33, -84, 66, -83, -99, 116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], "precision": "FLOAT_32", "root": 0, "canonicalAndNotALeaf": true, "size": 225, "leftIndex": [ -1, 1, 255, 602397242, 985291288, 1117381055, 631286267, 1159871039, 769877906, 710290934, 586643026, 767911738, 984495190, 970343104, 21583228, 0, 0 ], "rightIndex": [ -1, 1, 255, 760295146, 983690483, 711067073, 640852154, 1141474031, 729666032, 1011663907, 716671138, 1143049792, 587764751, 1025973418, 23295112, 0, 0 ], "nodeFreeIndexes": [], "nodeFreeIndexPointer": 29, "leafFreeIndexes": [], "leafFreeIndexPointer": 29, "partialTreeStateEnabled": true }, "boundingBoxCacheFraction": 0.0, "partialTreeState": true, "seed": -3471042119123364184, "id": 0, "dimensions": 32, "staticSeed": 0, "weight": 0.0, "hasAuxiliaryData": false }, { "version": "2.0", "root": 0, "maxSize": 256, "outputAfter": 32, "storeSequenceIndexesEnabled": false, "centerOfMassEnabled": false, "nodeStoreState": { "version": "2.0", "capacity": 255, "compressed": true, "cutDimension": [ 0, 31, 255, 741444190, 938385206, 316895023, 44092536, 450799169, 377427443, 638928997, 452949597, 512919603, 337998883, 903566707, 622771047, 756776681, 731166579, 481097137, 606252761, 756853481, 368532603, 661968943, 203769137, 744733669, 382914295, 524069309, 483703645, 890564083, 69856686, 724561007, 592623267, 1012898549, 94819938, 113187541, 497646006, 195005658, 1063779809, 1010747097, 1000913278, 316377073, 1052735469, 26727, 0, 0, 0, 0 ], "cutValueData": [ 69, 17, -116, 45, 68, -43, -11, 48, 68, -60, -8, 49, 66, 68, -98, 42, 65, -6, -13, -69, 69, 113, -21, 124, 66, -61, -83, 26, 66, -102, 51, 39, 66, 121, 83, 116, 66, 80, -102, -53, 66, -64, 77, 90, 66, -127, -103, -65, 66, 107, -113, 15, 66, -117, 80, 76, 66, 124, 101, 78, 66, -79, -110, -8, 69, 104, 110, -126, 66, -96, 27, 8, 64, -68, -60, 119, 66, 92, -34, 79, 66, 97, -88, 56, 66, -118, -39, -12, 66, -64, 75, 12, 66, -110, -80, 90, 66, -99, 74, -85, 66, -63, 124, -114, 66, -108, -63, 79, 66, -94, -44, -28, 66, -116, 115, 99, 66, -88, 18, -68, 66, 115, -123, 20, 66, 113, -17, 95, 66, -124, -42, 81, 66, -84, 110, 72, 66, 106, 12, 65, 66, 93, 115, -80, 66, -106, -18, 0, 66, 93, -31, -75, 66, -76, 115, -16, 66, -87, 114, -80, 66, -112, -12, 60, 66, 90, -114, 117, 66, -100, 0, 74, 66, -72, 127, 75, 66, -102, 30, -8, 66, -77, 52, -74, 66, 78, 45, 82, 66, -116, 59, 26, 66, 110, 113, -88, 66, -107, -44, -65, 66, -62, -121, 22, 66, -104, 110, 99, 66, -100, -17, 57, 65, 55, -102, -8, 66, 89, 113, 116, 66, -104, 40, -46, 66, -110, 90, 18, 66, -72, 109, -36, 66, -95, -34, 10, 66, -67, -14, -110, 66, 78, -105, -42, 66, 86, -48, 79, 66, -99, 69, -16, 66, -76, 98, 105, 66, -98, 76, -41, 66, -59, 24, -96, 66, 78, -40, -50, 66, 116, 7, -62, 66, -61, 122, -126, 66, -91, 113, 3, 66, -107, -15, 94, 66, -60, 31, 0, 66, -104, -18, -65, 66, 114, 116, 66, 66, 82, 76, 45, 66, -63, 108, 108, 66, -105, -6, 17, 66, -61, 92, 104, 66, 115, 34, -77, 66, 87, 55, -126, 66, -108, -49, 89, 66, -124, 113, 96, 66, -103, 72, 15, 66, -104, -53, 105, 66, -115, -56, -79, 66, -122, -120, 80, 66, -122, -21, 53, 66, -99, -51, -97, 66, -59, -16, -126, 66, -69, -49, 39, 65, -50, 112, -107, 66, -93, -9, -33, 66, 93, 105, -103, 66, -102, -16, -64, 66, -84, 118, -65, 66, -69, 115, 24, 66, -100, 106, 19, 66, 118, 35, -124, 66, -74, 98, -50, 66, -104, -50, 46, 66, -94, 24, 92, 66, -60, -118, -28, 66, 84, 107, -56, 66, -128, 118, 101, 66, 113, 68, -128, 66, -75, -113, -104, 66, 74, 8, 109, 66, -72, -113, 26, 66, 106, -62, -99, 66, -116, -24, -120, 66, -68, -5, -100, 66, -87, -80, 77, 66, 118, 6, 26, 66, 81, -55, -128, 66, -103, -88, 41, 66, -113, 44, 36, 66, -112, -19, 11, 66, -61, 19, 72, 66, -70, 33, 15, 66, -73, 110, -103, 66, -105, -65, 55, 66, 98, 44, 26, 66, -72, 21, -93, 66, 73, 79, 31, 66, -67, -43, 92, 66, -71, 12, -102, 66, 91, -127, 125, 66, 111, 1, 104, 66, 127, 58, 94, 66, -109, 50, 79, 66, -122, -41, 97, 66, 90, -59, -64, 66, -84, 70, 78, 66, -112, 112, -61, 66, -71, 90, -95, 66, -120, 85, 111, 66, 99, 59, 126, 66, 80, -93, 76, 66, -108, 6, 64, 66, -63, -35, 53, 66, -85, -41, 31, 66, 52, 84, -100, 66, -107, -83, 20, 66, -72, 112, -41, 66, 87, 36, 10, 66, 75, -115, 80, 66, 93, 6, 125, 66, -113, 84, -61, 66, -121, 52, 41, 66, -63, 85, -74, 66, -75, -54, 123, 66, -120, -72, -40, 66, 92, 44, 6, 66, -128, -54, 23, 66, -74, -108, -105, 66, -69, -43, 25, 66, 73, 49, -98, 66, 85, -34, -27, 66, 81, -55, 48, 66, 127, 82, 29, 66, -80, 64, 63, 66, -101, 49, -6, 66, -128, 51, 58, 66, -97, 28, 63, 66, -109, -100, -80, 66, 57, -25, 5, 66, -110, 54, 105, 66, -100, -50, 23, 66, -123, -76, -20, 66, 109, 84, 113, 66, -69, 17, 74, 66, 116, -122, -127, 66, -122, -48, -115, 66, -74, 88, 34, 66, -72, 38, 78, 66, 83, -82, -81, 66, -105, 2, -10, 66, -111, -24, -42, 66, -64, 37, -8, 66, -65, 40, 78, 66, -122, -61, 126, 66, -65, 84, -40, 66, -82, 78, 39, 66, -59, 29, -11, 66, 100, 96, 127, 66, 99, -37, 91, 66, -65, -42, 91, 66, -108, -79, 27, 66, -60, 44, -106, 66, -70, 17, 27, 66, -83, 9, 80, 66, -70, -42, -54, 66, -98, -86, 64, 66, -69, -46, -31, 66, 76, 89, -114, 66, 74, -39, -127, 66, -99, 70, -54, 66, -96, 83, 102, 66, -109, 15, 116, 66, 84, 47, 111, 66, 69, 105, -26, 66, 85, -67, 100, 66, -72, 116, -81, 66, 74, 126, 43, 66, -103, -18, 57, 66, -64, 2, 77, 66, -108, 47, 94, 66, -107, -123, -49, 66, 101, 11, -7, 66, -67, 126, -126, 66, -61, -46, -40, 66, 89, -92, -109, 66, -75, 27, 79, 66, -103, -24, 98, 66, -70, 120, -71, 66, -116, 125, -77, 66, -109, -78, -107, 66, 114, 100, 33, 66, -106, 72, 112, 66, 104, -87, 60, 66, -110, 44, -123, 66, -105, -39, -66, 66, -110, 86, 104, 66, 100, 53, 93, 66, -125, -18, -65, 66, -78, -113, -84, 66, 91, 29, -115, 66, 84, 54, -3, 66, 88, 98, -19, 66, 82, -28, -89, 66, -73, 52, 69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], "precision": "FLOAT_32", "root": 0, "canonicalAndNotALeaf": true, "size": 231, "leftIndex": [ -1, 1, 255, 1162241054, 1114254304, 1104602657, 727010285, 626549009, 1140765443, 989461384, 625774706, 1103245001, 753917179, 1013378243, 710454697, 16, 0 ], "rightIndex": [ -1, 1, 255, 602653108, 989300059, 1118977784, 582930724, 600526102, 1098282644, 624243316, 639138976, 1104607445, 1013454742, 626323955, 581150426, 13, 0 ], "nodeFreeIndexes": [], "nodeFreeIndexPointer": 23, "leafFreeIndexes": [], "leafFreeIndexPointer": 23, "partialTreeStateEnabled": true }, "boundingBoxCacheFraction": 0.0, "partialTreeState": true, "seed": -8641322014209361855, "id": 0, "dimensions": 32, "staticSeed": 0, "weight": 0.0, "hasAuxiliaryData": false }, { "version": "2.0", "root": 0, "maxSize": 256, "outputAfter": 32, "storeSequenceIndexesEnabled": false, "centerOfMassEnabled": false, "nodeStoreState": { "version": "2.0", "capacity": 255, "compressed": true, "cutDimension": [ 0, 31, 255, 132573906, 535248293, 870950241, 975039569, 173225913, 349495291, 117793841, 623462321, 984259509, 460237761, 490000187, 450074085, 976857025, 662434898, 493005906, 306087154, 330993590, 750497519, 1042614487, 662472669, 309630133, 311799482, 1050507890, 647199571, 590923353, 1055718205, 363952701, 354200681, 715860198, 522750030, 728614695, 529617982, 728286510, 603296801, 317525931, 188020851, 748530730, 31043, 0, 0, 0, 0, 0 ], "cutValueData": [ 68, 44, 95, -90, 69, 88, 110, 111, 68, -73, -20, 78, 67, -20, 40, -108, 69, 2, 27, 30, 64, -91, -48, 101, 66, 29, 91, 118, 66, -128, -34, -19, 65, -86, -37, 22, 66, -97, 121, -34, 66, -59, 54, 74, 66, -121, 60, 83, 66, -107, 22, 125, 66, -117, -114, -51, 66, -100, 104, 80, 66, 86, 95, -55, 66, -81, 85, 107, 65, -51, 114, 80, 66, -111, -29, 29, 66, -66, -17, -10, 66, 99, 106, -29, 66, 9, 68, -32, 66, -107, -59, -48, 66, -104, 117, 1, 66, -86, 117, -83, 66, -121, -74, 16, 66, -89, 116, 37, 66, -76, -81, 33, 66, -107, -48, -1, 66, -116, 68, -125, 66, 123, 102, -58, 66, -123, 111, 16, 66, 90, 119, 84, 66, -100, 47, 125, 66, -114, -119, 1, 66, -65, 116, -60, 66, -122, -3, -41, 66, -93, -48, 95, 66, -103, 100, -25, 66, -82, -94, -26, 64, -87, -103, 42, 66, 106, 71, -105, 66, -127, 125, 89, 66, -89, -99, -61, 66, -119, 1, -45, 66, -74, 6, 113, 66, -63, 58, 112, 66, -80, -73, 25, 66, -112, 124, -61, 66, 63, -31, -53, 66, -68, -106, 83, 66, -108, -88, 45, 66, -67, -37, -91, 66, 122, -108, 61, 66, -108, -44, -14, 66, -66, 125, -111, 66, -63, -87, 107, 66, -103, -15, 99, 66, -82, 38, 78, 66, -99, -1, -69, 66, 80, 22, -64, 66, -107, 71, -101, 66, 109, -54, -97, 66, -110, 60, 13, 66, 76, 39, -81, 66, -61, -40, -80, 66, -122, -80, 4, 66, 98, -32, 7, 66, -111, 5, -79, 66, 113, -104, 96, 66, -110, 67, -86, 66, -104, -76, 77, 66, -109, -70, -32, 66, -61, -37, 25, 66, -106, 35, -18, 66, 82, 99, 93, 66, 92, -105, -102, 66, -111, 10, 121, 66, -61, 80, 99, 66, -72, -113, -67, 66, -105, -26, -78, 66, 74, 29, 112, 66, 72, -113, -34, 66, 91, 34, -25, 66, -72, -1, 96, 66, -62, -127, 3, 66, 76, 40, -52, 66, -108, 61, -65, 66, -70, -111, -92, 66, -64, -9, -39, 66, -66, -123, -1, 66, 108, 57, -22, 66, -119, -102, -122, 66, -97, 110, -123, 66, 70, -128, -106, 66, -121, 80, 23, 66, -82, 43, 81, 66, -113, -87, -47, 66, 82, -57, 41, 66, -115, 89, -90, 66, 85, -35, -120, 66, -117, 50, 11, 66, 102, -48, -6, 66, 91, 76, -55, 66, 93, 23, -32, 66, 83, 114, -123, 66, 127, 92, 121, 66, -81, -14, -64, 66, 68, 99, -41, 66, -64, 108, 92, 66, -73, 13, -75, 66, -85, 108, 123, 66, -67, -55, -11, 66, 100, 123, -98, 66, 126, 73, 68, 66, -65, -19, -64, 66, -95, -124, 122, 66, -123, 56, 114, 66, 70, -114, -127, 66, 69, 19, 82, 66, -108, 94, 1, 66, -110, -73, -33, 66, -106, -71, -13, 66, -116, 110, 74, 66, 80, 115, -66, 66, -109, 16, 81, 66, -60, -27, -67, 66, -109, 64, -112, 66, 101, -54, -109, 66, 125, 39, -39, 66, -102, -118, 49, 66, -95, 120, 120, 66, -61, 4, 8, 66, 84, 118, 95, 66, -76, -34, -58, 66, -80, -50, -57, 66, -106, 40, -23, 66, 91, -72, 102, 66, 88, -95, 117, 66, -87, 115, 65, 66, -84, 114, 49, 66, -64, -40, -84, 66, -114, -109, -4, 66, 68, 62, -47, 66, -120, 94, 53, 66, -62, 53, -101, 66, -123, -2, 117, 66, -91, -2, 28, 66, 89, 45, 71, 66, -106, -28, 122, 66, -120, 33, 58, 66, -100, -58, -22, 66, -61, 8, -3, 66, -104, -42, -78, 66, -59, 61, 104, 66, -128, 42, -100, 66, -110, 100, 69, 66, -122, -111, -47, 66, -89, 88, -69, 66, -64, -63, 59, 66, 77, -39, 115, 66, -78, -7, 93, 66, -106, 89, -58, 66, 78, 46, 61, 66, 87, -4, -28, 66, -107, 4, 20, 66, -111, -53, -37, 66, -59, -9, -58, 66, -72, 81, 31, 66, 91, 103, -118, 66, -70, -108, -81, 66, -71, 111, 48, 66, -81, 35, -121, 66, -122, -85, 19, 66, -61, 121, 49, 66, -88, -13, 16, 66, -89, -110, 83, 66, -113, 24, 108, 66, -81, -28, 90, 66, 77, -102, -29, 66, 72, 90, -44, 66, -120, -94, 119, 66, -118, -80, -63, 66, 77, -72, -40, 66, -65, 41, -66, 66, -101, -16, 58, 66, -67, 23, -81, 66, -120, -103, -32, 66, -118, -87, 33, 66, -63, -101, -58, 66, -112, 74, -128, 66, 106, -66, 0, 66, -64, 47, 62, 66, -105, -117, -119, 66, -105, 79, -106, 66, -104, -124, 120, 66, -62, -9, -86, 66, -115, 125, 86, 66, -116, 62, 117, 66, -115, -103, -73, 66, -113, 121, 118, 66, 38, 36, 118, 66, 71, -32, -24, 66, -100, -53, -83, 66, 93, 41, 21, 66, -115, -26, -78, 66, 116, 31, 93, 66, -64, -46, -61, 66, -68, 25, 54, 66, -99, -105, -45, 66, 87, -44, 26, 66, -125, -3, -76, 66, -73, -16, 101, 66, -106, 46, 2, 66, 91, -53, -108, 66, -108, 13, 35, 66, -67, 89, 32, 66, -123, -124, -5, 66, 76, -59, -39, 66, 78, 61, 119, 66, -123, -44, -23, 66, -68, -88, 109, 66, 86, 51, 64, 66, -75, -87, -62, 66, -69, -22, -29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], "precision": "FLOAT_32", "root": 0, "canonicalAndNotALeaf": true, "size": 225, "leftIndex": [ -1, 1, 255, 583495001, 1162202407, 602398130, 1160646646, 602119403, 975106741, 1160467126, 982978898, 596269241, 588040204, 625791545, 21605011, 0, 0 ], "rightIndex": [ -1, 1, 255, 755649931, 767932000, 597674267, 1025946878, 601943065, 755470705, 1141291529, 582990422, 595745080, 711927458, 597271643, 22253821, 0, 0 ], "nodeFreeIndexes": [], "nodeFreeIndexPointer": 29, "leafFreeIndexes": [], "leafFreeIndexPointer": 29, "partialTreeStateEnabled": true }, "boundingBoxCacheFraction": 0.0, "partialTreeState": true, "seed": 3689043991782272360, "id": 0, "dimensions": 32, "staticSeed": 0, "weight": 0.0, "hasAuxiliaryData": false }, { "version": "2.0", "root": 0, "maxSize": 256, "outputAfter": 32, "storeSequenceIndexesEnabled": false, "centerOfMassEnabled": false, "nodeStoreState": { "version": "2.0", "capacity": 255, "compressed": true, "cutDimension": [ 0, 31, 255, 262758222, 1005436393, 917574752, 1066177649, 514159657, 59980517, 332782026, 358988389, 228128063, 735937598, 322887361, 83008051, 1045599270, 648394923, 656314069, 606527421, 129042914, 733469031, 189992371, 191841351, 184476717, 795006183, 1059144738, 56047987, 232466402, 1013951987, 366041271, 232328641, 659909335, 904439593, 880277601, 268277061, 456726518, 1071208101, 878024191, 521440453, 443865535, 383727041, 11001765, 0, 0, 0, 0 ], "cutValueData": [ 68, 54, -78, 126, 69, 25, 9, 53, 66, 6, 106, 52, 66, -63, -7, 70, 66, -76, 44, 98, 65, 50, -39, 17, 66, -82, -27, -120, 66, 31, 81, -124, 66, -113, -106, 82, 66, 116, -126, 3, 66, -99, -122, -120, 66, -108, -49, 82, 64, -99, 65, -83, 66, 79, 118, 96, 66, -98, -49, -103, 66, -68, -82, 10, 66, 109, 70, 106, 66, 91, 24, 31, 66, -115, -43, 17, 66, 74, -78, -18, 66, -97, -33, -39, 66, -95, -81, 106, 65, 19, 122, -54, 66, 72, 81, 100, 66, -105, 19, 80, 66, -119, 68, 89, 66, -83, -84, 77, 66, -68, -88, -93, 66, -74, 37, -9, 66, -125, 25, -116, 66, -83, 25, -23, 66, 91, 88, 4, 66, -66, 122, -106, 66, -60, 48, 121, 66, -119, -1, -104, 66, -112, -10, -101, 66, -76, 78, 5, 66, -70, 92, -124, 66, -63, -75, -101, 66, 85, 1, 41, 66, -101, 97, 93, 66, 36, 119, 116, 66, -100, 112, -59, 66, 96, 52, -114, 66, -71, 3, 15, 66, 80, 124, 80, 66, -78, 122, 32, 66, -71, -28, -10, 66, 76, 52, -15, 66, -109, 92, -120, 66, -109, 28, -30, 66, 83, -9, -10, 66, -110, 83, -31, 66, -84, 109, 20, 66, -83, 74, -40, 66, -111, 75, -41, 66, -98, 81, -15, 66, 72, 4, 3, 66, -110, 0, 97, 66, -90, -45, -110, 66, -119, 57, 16, 66, -65, -23, -96, 66, 89, -29, -122, 66, -102, 58, 20, 66, 95, -60, 114, 66, -98, 61, 35, 66, 101, -28, -14, 66, -97, 45, -52, 66, -80, -19, 51, 66, -91, -58, 25, 66, 94, -113, 81, 66, -67, -15, 123, 66, -67, 69, -78, 66, -91, -70, -64, 66, -121, -114, -66, 66, -103, 48, 4, 66, -119, -89, -26, 66, 104, -59, 45, 66, 81, 2, 96, 66, 124, -110, -74, 66, -78, 36, 7, 66, 79, -12, 127, 66, -61, 109, 78, 66, 91, 45, -1, 66, -107, 82, -70, 66, -68, -49, 126, 66, 113, 126, 47, 66, -100, -112, -29, 66, -111, 50, -68, 66, 121, -99, -64, 66, -99, -80, 13, 66, -117, 11, -62, 66, 80, 43, -33, 66, -111, 70, 15, 66, -77, -57, -11, 66, -85, -31, -59, 66, -78, 96, 67, 66, 104, 48, 70, 66, -100, -122, 34, 66, -90, 83, -41, 66, 88, -35, -13, 66, 71, 84, -34, 66, 69, -76, 103, 66, 75, 89, 35, 66, -60, -119, -96, 66, 99, 95, -8, 66, 105, 5, -58, 66, -104, -120, -110, 66, 83, 20, 99, 66, -99, 79, 14, 66, 68, 45, 24, 66, -79, 30, -116, 66, -105, 80, -20, 66, -111, 39, 61, 66, 92, -77, 45, 66, -85, -95, 124, 66, -110, -119, -96, 66, -62, 79, -82, 66, -75, 54, -64, 66, -115, 94, -124, 66, -111, 26, -118, 66, -122, 16, -41, 66, -99, 4, -64, 66, -118, -36, 27, 66, 92, 26, 41, 66, -103, 94, -15, 66, 84, -99, -107, 66, 78, -34, -34, 66, -104, -38, -95, 66, -105, -99, 124, 66, -63, 117, 61, 66, 114, 40, 116, 66, -59, 62, -111, 66, -123, -67, -7, 66, -127, 45, -55, 66, -62, 107, -119, 66, -67, -13, -106, 66, 107, -86, -93, 66, 91, 6, -96, 66, 97, 32, -77, 66, -94, -33, -29, 66, -69, 108, 45, 66, -103, -47, 107, 66, -103, 67, 40, 66, -79, -77, -94, 66, 101, -40, 67, 66, -103, -7, 126, 66, -97, 56, -83, 66, -123, 101, -123, 66, -82, 5, -69, 66, 72, 20, -119, 66, 71, 2, 125, 66, 81, -87, -22, 66, 92, 114, 116, 66, -82, 64, 92, 66, -65, 30, 61, 66, 101, -49, 123, 66, -121, -67, -60, 66, -73, -127, -106, 66, -61, -71, 4, 66, -107, 73, -45, 66, -83, -65, -57, 66, -111, -13, -75, 66, -81, 100, 2, 66, 113, 119, 4, 66, -75, 103, -68, 66, -106, -106, -81, 66, -83, 119, -83, 66, 100, -51, 44, 66, -83, 107, -69, 66, -68, -33, -12, 66, -59, 77, -35, 66, -106, 76, 3, 66, -128, -28, -125, 66, -109, 107, 34, 66, -120, 68, 74, 66, -95, -5, 73, 66, -114, 6, 48, 66, -62, -49, 77, 66, -64, 61, -42, 66, -119, -109, 46, 66, 74, 8, -25, 66, -65, 29, 114, 66, 109, -21, -50, 66, 81, 102, 43, 66, -70, 100, -86, 66, -123, 74, -103, 66, -82, 41, -37, 66, 40, 26, 50, 66, 86, -95, 15, 66, 97, -49, 51, 66, 79, -107, -126, 66, -78, -79, -42, 66, 94, 86, 45, 66, -124, -41, 3, 66, -74, -27, 81, 66, 118, -120, 64, 66, -105, 40, -23, 66, -101, -35, 51, 66, -96, -123, 43, 66, -113, 101, 57, 66, -87, -121, 86, 66, -102, 81, -112, 66, 109, -127, -38, 66, 105, 12, 34, 66, 68, 124, 78, 66, -89, -117, 25, 66, 69, 73, 93, 66, -94, 33, 35, 66, -64, -71, -88, 66, -107, -113, -29, 66, -64, -40, 83, 66, 76, 87, -21, 66, -113, -22, -25, 66, -115, -108, -128, 66, 72, -55, 4, 66, 72, 88, 53, 66, -117, -93, -7, 66, -61, 59, -78, 66, -115, -89, -7, 66, 107, 107, 39, 66, -111, 88, -66, 66, -113, -10, -60, 66, -63, -65, -8, 66, -123, -14, -10, 66, -69, 75, 47, 66, -104, 110, -37, 66, 83, 67, 2, 66, -94, -6, -30, 66, -98, 96, 97, 66, 77, -65, 63, 66, 78, -99, -46, 66, -59, 123, 109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], "precision": "FLOAT_32", "root": 0, "canonicalAndNotALeaf": true, "size": 233, "leftIndex": [ -1, 1, 255, 774779471, 1100060917, 715317128, 588284744, 1104308044, 1146317395, 1160407984, 710802688, 638526365, 626546704, 1147656587, 582908873, 134, 0 ], "rightIndex": [ -1, 1, 255, 1032562858, 1141355825, 760491007, 712130692, 1032561403, 1018588352, 1031283211, 772981298, 767687206, 772535596, 581196676, 625831187, 121, 0 ], "nodeFreeIndexes": [], "nodeFreeIndexPointer": 21, "leafFreeIndexes": [], "leafFreeIndexPointer": 21, "partialTreeStateEnabled": true }, "boundingBoxCacheFraction": 0.0, "partialTreeState": true, "seed": 6539383793818569112, "id": 0, "dimensions": 32, "staticSeed": 0, "weight": 0.0, "hasAuxiliaryData": false }, { "version": "2.0", "root": 0, "maxSize": 256, "outputAfter": 32, "storeSequenceIndexesEnabled": false, "centerOfMassEnabled": false, "nodeStoreState": { "version": "2.0", "capacity": 255, "compressed": true, "cutDimension": [ 0, 31, 255, 379423442, 938577079, 199174183, 982996923, 632628559, 446142685, 259345726, 527763286, 766426417, 601459806, 355648947, 463720061, 186049849, 342617578, 634497351, 725542733, 204310701, 1051670899, 175413837, 241794773, 633304679, 886225718, 794341030, 766171102, 879540979, 579929779, 261576805, 1054049447, 527619513, 515292593, 865857201, 231853267, 592661842, 1060551363, 754435422, 657585651, 303761315, 108189046, 39628461, 0, 0, 0, 0 ], "cutValueData": [ 69, -121, 126, -2, 68, 47, 59, 68, 66, -76, 126, 56, 65, -118, -97, 70, 67, 78, -110, -115, 66, 52, 97, 51, 66, 23, -5, -2, 66, -113, -48, -119, 66, 112, 48, -47, 65, -124, 3, 20, 66, 93, -14, 92, 66, 78, -47, 1, 66, 55, -40, -100, 66, 75, 45, -4, 66, -68, 114, 48, 66, -67, -125, 90, 66, -97, -5, -62, 66, 13, -84, 100, 66, 114, 20, -6, 66, -115, 80, -10, 66, -123, 84, -62, 66, -75, -47, -113, 66, -103, -78, -105, 66, -114, 89, 124, 66, 88, -109, -103, 66, -88, 99, -56, 65, -79, 42, 27, 66, -76, 126, 23, 66, 78, 87, -75, 66, -71, 34, 31, 66, -116, -37, 27, 66, -59, 83, 53, 66, -69, -53, 85, 66, 120, 50, 3, 66, -128, 96, 52, 66, -99, 113, -98, 66, -77, -38, -38, 66, -112, -21, 109, 66, 89, 11, -84, 66, -67, 10, 34, 66, 102, -35, -8, 66, 76, 121, 120, 66, -62, 122, -15, 66, -62, 10, -45, 66, -119, 84, 88, 66, -73, -36, 38, 66, 89, 39, -88, 66, 70, 69, 29, 66, -126, 34, -60, 66, -91, 45, -128, 66, 107, 8, -55, 66, -107, -76, 12, 66, -75, 103, 50, 66, -68, 45, -102, 66, -96, 50, -102, 66, -104, 76, -84, 66, 72, 23, -89, 66, -118, -21, -16, 66, -122, -110, 65, 66, -113, -27, 70, 66, 75, 28, -65, 66, -118, 21, 110, 66, -116, -119, 52, 66, -128, -114, -67, 66, 78, -21, 83, 66, -77, -29, -69, 66, -121, 60, 19, 66, 100, -87, 61, 66, 96, 104, 28, 66, 104, 37, -15, 66, -90, 123, 2, 66, -109, 8, 45, 66, -91, -47, -73, 66, -107, 89, 35, 66, -103, 68, 2, 66, -105, 86, 121, 66, -118, -7, -47, 66, -108, -122, -32, 66, -69, 11, 122, 66, -114, 32, -30, 66, 80, -93, -91, 66, 72, -14, 125, 66, -99, 107, 107, 66, -76, 37, -73, 66, 91, 68, -91, 66, -82, 64, -33, 66, -94, -32, -85, 66, 94, 2, -122, 65, -51, -57, -55, 66, -68, -44, 40, 66, -100, 51, 119, 66, -70, 46, 12, 66, -101, -60, -6, 66, -100, -71, -81, 65, -112, -92, 98, 66, -107, -23, -82, 66, -106, 45, -59, 66, -109, 16, -31, 66, -64, -119, -89, 66, 104, -99, 62, 66, -66, -40, -71, 66, -60, 18, -104, 63, -67, -118, 36, 66, 101, -68, 10, 66, -65, 34, -23, 66, -76, 98, 86, 66, -86, -99, 107, 66, 70, 23, -81, 66, -107, 120, -26, 66, -65, 105, 15, 66, -64, -103, -9, 66, -120, -121, -14, 66, 82, -46, 52, 66, -97, 24, 55, 66, -94, -87, 40, 66, -100, -27, -100, 66, 97, -125, 44, 66, -70, -127, 32, 66, -59, -113, 118, 66, -127, -52, -83, 66, 90, 106, 70, 66, -117, 41, -39, 66, -128, -21, 93, 66, -66, -60, -92, 66, 71, -34, 65, 66, -62, 110, -29, 66, -78, 28, 110, 66, -100, -119, 9, 66, -66, 119, 68, 66, -120, 72, -85, 66, -114, -126, 6, 66, -65, 114, -100, 66, -63, 98, -103, 66, -125, 51, -114, 66, 109, 79, 50, 66, -110, 80, 39, 66, -120, 100, -94, 66, 116, 59, 114, 66, -73, 11, -42, 66, -93, -121, 94, 66, -108, 92, 77, 66, -99, 64, 63, 66, -86, -52, -90, 66, -63, 45, 34, 66, 100, 53, -63, 66, 74, -73, 84, 66, -73, -32, -11, 66, -128, 95, -3, 66, -91, -28, 81, 66, -59, -52, -34, 66, 86, -121, -62, 66, -121, -35, -106, 66, -111, 78, 60, 66, -59, 126, -128, 66, -107, -91, 49, 66, -108, 78, -72, 66, -106, 105, 24, 66, 113, 8, 22, 66, -78, -31, -91, 66, -73, -6, -126, 66, -119, -124, -109, 66, 104, 82, -81, 66, 107, -74, -104, 66, -119, -99, 25, 66, -109, -85, 48, 66, 117, -21, 36, 66, -119, 44, -108, 66, 88, -97, 31, 66, -115, -75, 109, 66, -106, -13, 116, 66, -116, 0, -48, 66, -109, -60, 79, 66, 94, 104, 100, 66, 97, -26, 25, 66, -103, 62, 79, 66, -102, -66, 68, 66, -127, -12, 85, 66, -99, 33, 126, 66, 80, -104, 58, 66, 72, -38, 122, 66, -113, 58, -91, 66, -103, -23, -31, 66, 91, 90, 105, 66, 77, -15, 53, 66, -106, -82, 92, 66, -115, 64, 102, 66, 77, -19, -79, 66, -63, -7, -53, 66, 83, -95, 97, 66, -126, -43, 80, 66, -106, 48, 103, 66, -60, -93, 42, 66, -74, 31, -6, 66, -67, 83, -41, 66, 88, -26, -30, 66, -99, -45, 21, 66, -115, 66, -80, 66, -124, -107, -100, 66, 105, -53, 121, 66, -62, -97, 58, 66, -59, -101, -3, 66, -115, 46, -22, 66, 90, 112, 46, 66, 68, 23, -1, 66, -78, 29, -72, 66, -61, -17, -63, 66, -87, -9, 65, 66, 109, 125, -62, 66, 93, -101, 83, 66, -68, -101, -21, 66, 71, -128, -116, 66, 80, -122, 115, 66, -112, 103, -65, 66, 90, 122, -36, 66, -125, -5, 70, 66, 82, -77, 34, 66, -120, 75, -69, 66, -92, 77, 125, 66, -107, 2, 100, 66, -66, 116, 93, 66, -94, 97, -79, 66, -97, 27, -66, 66, -61, 60, -59, 66, 88, -58, -1, 66, -106, 17, -88, 66, -116, -89, -46, 66, 82, -21, -71, 66, 81, -97, 116, 66, -108, 2, -89, 66, -116, 31, -11, 66, 104, -36, 39, 66, -118, 87, 113, 66, -110, 20, -25, 66, -116, 68, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], "precision": "FLOAT_32", "root": 0, "canonicalAndNotALeaf": true, "size": 234, "leftIndex": [ -1, 1, 255, 1160640629, 772987820, 969321077, 1013900867, 640140485, 1140824237, 1161729995, 753376669, 1099489100, 1157272180, 581216848, 600348886, 365, 0 ], "rightIndex": [ -1, 1, 255, 990067936, 731616341, 1013274026, 755154808, 645672113, 1147381025, 774818054, 1116902020, 1160585132, 769261171, 600291391, 624767948, 392, 0 ], "nodeFreeIndexes": [], "nodeFreeIndexPointer": 20, "leafFreeIndexes": [], "leafFreeIndexPointer": 20, "partialTreeStateEnabled": true }, "boundingBoxCacheFraction": 0.0, "partialTreeState": true, "seed": -7479358087348062431, "id": 0, "dimensions": 32, "staticSeed": 0, "weight": 0.0, "hasAuxiliaryData": false }, { "version": "2.0", "root": 0, "maxSize": 256, "outputAfter": 32, "storeSequenceIndexesEnabled": false, "centerOfMassEnabled": false, "nodeStoreState": { "version": "2.0", "capacity": 255, "compressed": true, "cutDimension": [ 0, 31, 255, 888224293, 76652475, 182159171, 637983398, 773400121, 976854783, 1067228629, 892939501, 526060583, 599221425, 49191529, 853784681, 787926090, 750427586, 191829673, 504980517, 752175741, 228897834, 745219377, 366664030, 921802310, 233686191, 321347507, 606661993, 499103098, 535136857, 802225269, 451631786, 1012501174, 98741855, 232303321, 515874173, 733280861, 265989738, 1043498569, 191170399, 870250978, 753610413, 2599, 0, 0, 0, 0 ], "cutValueData": [ 67, -85, 37, 63, 67, -35, 121, 126, 68, -32, -78, 127, 69, 72, 32, 1, 66, -125, -126, -16, 66, -66, 11, -35, 66, 101, 8, -127, 66, 83, 19, 83, 66, 66, 126, -69, 66, 82, 88, -104, 66, -102, 60, 99, 66, -84, -1, 66, 66, 82, 121, 108, 66, -73, 11, -64, 66, -122, 124, 114, 65, 78, 12, -39, 66, -120, -123, 51, 66, -110, 104, -57, 66, -81, -4, -97, 66, -107, -119, -75, 66, -74, 66, -59, 66, 49, -105, 45, 62, 120, -8, 98, 65, -75, -13, 86, 66, -92, 68, -71, 66, -97, 63, -127, 66, -110, 44, -119, 66, -66, -68, 103, 66, -94, 69, 35, 66, 111, 38, 102, 66, -111, -26, 100, 66, 81, -65, 78, 66, 69, -14, 41, 66, 47, -83, -67, 66, 86, -86, -93, 66, -91, -126, -123, 66, -128, -90, 48, 66, -83, 98, 48, 66, 84, -68, 88, 66, -92, 52, 79, 66, -108, -14, 52, 66, 114, -122, -109, 66, -83, 7, 41, 66, 84, -68, 30, 66, 103, 52, 75, 66, -101, 37, -31, 66, 81, 64, -18, 66, -78, -120, 15, 66, 73, 97, 119, 66, -105, -124, 77, 64, -33, -117, -44, 66, -71, -73, 95, 66, -121, -72, 36, 66, 92, 121, 54, 66, -108, -30, 7, 66, -93, 33, 11, 66, -115, -44, 100, 66, -67, 36, -106, 66, 99, -79, 56, 66, -122, 87, 92, 66, -119, 5, -13, 66, 72, 14, 12, 66, -74, 58, 84, 66, -125, -51, -6, 66, -68, -104, 39, 66, -122, -60, -111, 66, -94, 102, 72, 66, 95, -41, -37, 66, -69, 120, -57, 66, 106, -61, -44, 66, -74, 56, 62, 66, -122, 120, 119, 66, -74, -39, -80, 66, -86, -75, -83, 66, 110, 76, -121, 66, -109, 25, 98, 65, 15, -3, 43, 66, 97, -25, 113, 66, -64, -55, -112, 66, -78, -122, -23, 66, 80, -56, -93, 66, -109, 20, 40, 66, 87, 14, -9, 66, -64, -13, 16, 66, -111, -126, -16, 66, -103, 21, -54, 66, -125, -84, -77, 66, -71, -69, 65, 66, -67, 60, -128, 66, -103, 78, 121, 66, -110, 113, 17, 66, -117, -35, -10, 66, -98, 62, -54, 66, -62, 126, 31, 66, -98, 118, -27, 66, 76, 37, -8, 66, -107, -44, -45, 66, 101, -63, 122, 66, -59, -58, 29, 66, -74, 6, 52, 66, -121, -71, -70, 66, -64, -50, -6, 66, -62, -67, -39, 66, -105, -123, -119, 66, -100, -105, -16, 66, -115, 126, -47, 66, -89, 39, 5, 66, -90, -10, -54, 66, -111, 33, 68, 66, -102, -4, -58, 66, -98, -48, -30, 66, -71, -96, -71, 66, -75, -30, -69, 66, -62, 25, 52, 66, -70, 78, -102, 66, -96, 80, -46, 66, -69, -1, 34, 66, -115, -115, 40, 66, -97, -109, -87, 66, -66, -33, -85, 66, -67, 45, 19, 66, -72, -6, 46, 66, -113, -6, 38, 66, 96, -31, -41, 66, 118, 32, 53, 66, 92, 52, 48, 66, 85, -113, 96, 66, -117, -65, 13, 66, -94, 3, -86, 66, 93, -45, 86, 66, -72, 124, 45, 66, -67, -92, 57, 66, 81, -91, 57, 66, -109, -69, 112, 66, 78, -45, -87, 66, -65, 22, -61, 66, -74, -77, -43, 66, -104, 93, 60, 66, -97, -93, -113, 66, 90, 47, 44, 66, -121, 126, -85, 66, -106, 74, -115, 66, -85, -20, 60, 66, -64, -126, -91, 66, -62, 20, 3, 66, 73, -17, 122, 66, -114, -113, -29, 66, 91, 39, -52, 66, 75, 77, 47, 66, -60, 69, 34, 66, 111, 85, -41, 66, -60, -44, -18, 66, -80, -88, -94, 66, 77, -4, -35, 66, -79, -93, -81, 66, 108, 85, -43, 66, -95, -62, 107, 66, 77, -8, 42, 66, 87, 92, 88, 66, -106, -38, 43, 66, -114, -20, 10, 66, 69, 100, -128, 66, -61, 38, -102, 66, -108, 63, -72, 66, -63, 53, 87, 66, -72, 93, -125, 66, -67, 99, 2, 66, -112, -80, 29, 66, -63, -87, -45, 66, -111, 102, -78, 66, -68, 18, -98, 66, -128, 64, 91, 66, -93, -74, 48, 66, -89, 107, 45, 66, 86, -97, 121, 66, -68, 92, -67, 66, 77, -120, -70, 66, -107, -32, 27, 66, -80, -125, -51, 66, -61, 119, 106, 66, -107, 98, 19, 66, -60, -3, -116, 66, -73, 3, 62, 66, -110, -91, -87, 66, -98, 43, -74, 66, -62, -17, 79, 66, -119, 63, -28, 66, 101, 104, -81, 66, 84, -30, 64, 66, 74, -32, -75, 66, 97, -14, 37, 66, 93, 97, -1, 66, -103, -58, 109, 66, -67, -76, -103, 66, -66, 84, -46, 66, -117, -75, 72, 66, 98, 58, -56, 66, -111, 73, -120, 66, -88, -49, 70, 66, 106, 30, 95, 66, 125, -8, -54, 66, -110, 69, -68, 66, -102, -54, 92, 66, 74, -46, -91, 66, -110, -121, -71, 66, -67, -98, -72, 66, -103, -15, 92, 66, -102, 33, -34, 66, 79, 126, 88, 66, 87, -20, -60, 66, 89, 12, -12, 66, -73, 72, 46, 66, -108, 97, 66, 66, -68, 0, 110, 66, -72, -21, 18, 66, -96, -18, -50, 66, -66, 124, 88, 66, 72, -13, -118, 66, -63, 27, -106, 66, -101, 64, -115, 66, -115, 65, 14, 66, -106, -57, 55, 66, -117, -60, -61, 66, -87, -79, -57, 66, 106, -122, 122, 66, -71, 46, 51, 66, -93, -35, 117, 66, -59, 26, -58, 66, 90, 2, 43, 66, -116, -58, 102, 66, -64, -19, 76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], "precision": "FLOAT_32", "root": 0, "canonicalAndNotALeaf": true, "size": 231, "leftIndex": [ -1, 1, 255, 773178857, 1012386262, 1145699305, 630754096, 645638578, 1147351603, 1016645539, 973599872, 1104069010, 626487287, 767747537, 581688418, 13, 0 ], "rightIndex": [ -1, 1, 255, 1160588371, 1160658367, 1016915542, 645169343, 639322541, 760462628, 1018181065, 1104274363, 602565614, 624947605, 970342468, 725151335, 13, 0 ], "nodeFreeIndexes": [], "nodeFreeIndexPointer": 23, "leafFreeIndexes": [], "leafFreeIndexPointer": 23, "partialTreeStateEnabled": true }, "boundingBoxCacheFraction": 0.0, "partialTreeState": true, "seed": -1946928779114242913, "id": 0, "dimensions": 32, "staticSeed": 0, "weight": 0.0, "hasAuxiliaryData": false }, { "version": "2.0", "root": 0, "maxSize": 256, "outputAfter": 32, "storeSequenceIndexesEnabled": false, "centerOfMassEnabled": false, "nodeStoreState": { "version": "2.0", "capacity": 255, "compressed": true, "cutDimension": [ 0, 31, 255, 382683842, 35568365, 743685422, 909763832, 743648325, 313485543, 129614911, 903543093, 529629177, 111118042, 259431401, 110860469, 1063904305, 757033013, 795981997, 460770546, 215414982, 731319789, 190227902, 641649747, 475746101, 70375666, 179386167, 466999759, 1059399863, 593955141, 223647674, 1023085263, 743499999, 178998983, 658101574, 40729343, 1035685738, 452953662, 588859707, 911337771, 304384234, 800819963, 6227, 0, 0, 0, 0 ], "cutValueData": [ 69, 116, 53, -110, 69, 62, -16, 117, 69, 123, 61, -95, 69, 28, 62, -26, 65, 19, 16, -32, 66, 70, 98, -29, 65, -55, -30, -36, 66, 76, -76, -69, 66, -99, -116, 30, 66, -100, -69, -78, 66, 49, -51, -98, 66, -128, 65, 98, 66, -64, -76, -98, 66, 79, 65, -77, 66, 113, -102, -105, 65, -31, -92, -103, 66, 75, 108, -73, 66, -64, 52, -12, 64, -54, 33, -10, 66, 87, -10, -8, 66, -105, 14, 20, 66, 115, 15, 106, 66, 91, -3, -87, 66, 97, -20, 119, 66, -107, -126, -61, 66, -86, 28, 3, 66, 72, -77, -98, 66, -90, -70, 64, 66, -102, -67, 95, 66, -62, -104, -68, 66, 81, -88, 92, 66, 85, 70, 122, 66, -59, 6, 17, 66, -75, 115, -111, 66, -69, -90, -23, 66, -90, -3, 59, 66, 83, -52, 38, 66, -121, -82, 90, 66, -102, -8, 40, 66, 113, 44, -123, 66, 102, -66, -45, 66, 79, 37, -116, 66, -108, 21, 14, 66, -111, 87, 47, 66, -61, 22, -118, 66, -99, 93, -127, 66, -109, -112, 9, 66, -69, 16, -83, 66, -127, 122, -48, 66, 81, -78, 112, 66, -118, -13, -59, 66, -76, 42, -73, 66, -111, -52, -42, 66, 100, 106, 39, 66, -79, -105, -79, 66, -57, 106, -92, 66, -104, 81, -117, 66, 78, -25, -88, 66, -103, 117, -113, 66, -118, -90, 122, 66, -125, 47, 87, 66, 111, -93, 51, 66, -92, -124, 57, 66, -111, 6, -104, 66, -114, 89, -53, 66, 102, 95, -119, 66, -109, -85, 54, 66, -107, 54, 16, 66, -76, -51, 74, 66, 99, -91, -11, 66, -123, -70, -29, 66, 74, 80, 60, 66, 15, -14, -9, 66, -92, 119, -28, 66, -117, 9, -56, 66, 89, 94, -83, 66, -70, 90, -95, 66, -126, -114, -15, 66, -85, 36, -55, 66, -97, -21, 15, 66, -63, -111, 125, 66, -61, 13, 7, 66, -120, -32, 36, 66, -71, 68, 126, 66, 124, -88, -112, 66, -105, 99, -75, 66, -63, 80, 102, 66, -121, -69, -82, 66, 83, -8, 32, 66, 97, -23, 60, 66, -68, 127, -29, 66, 86, 81, -58, 66, 115, -54, -34, 66, -112, -11, -70, 66, 86, -20, -71, 66, -123, -106, 88, 66, -78, -96, -20, 66, -72, 112, 65, 66, -90, -60, -119, 66, -106, -83, 10, 66, -123, -69, 4, 66, -63, -89, 46, 66, -107, 36, 57, 66, 77, 96, -46, 66, 127, 81, -88, 66, -80, 96, -107, 66, -121, 51, 112, 66, -105, 5, -7, 66, -79, -10, 37, 66, -124, -68, -104, 66, -104, 38, -66, 66, -119, -16, 6, 66, -98, 29, 79, 66, 119, -116, 82, 66, 88, -16, 57, 66, -67, -102, 85, 66, 86, -6, -41, 66, -107, 54, -91, 66, 84, 124, -82, 66, 119, 115, -79, 66, -120, -78, -18, 66, -110, 1, 117, 66, 87, -27, -5, 66, -70, 117, -91, 66, -108, -88, -114, 66, -61, 100, -94, 66, -65, 75, 66, 66, 121, -19, -78, 66, -65, 85, -105, 66, 77, -21, 33, 66, 68, -95, -75, 66, -77, 66, 60, 66, 105, 111, -84, 66, -102, -10, -11, 66, -110, -26, 45, 66, -84, 33, -44, 66, 110, 33, -32, 66, -119, -46, -2, 66, 84, 94, -56, 66, -69, -96, -126, 66, -66, -106, -35, 66, 89, -109, 107, 66, -94, -26, 62, 66, -117, -106, -82, 66, 82, 91, 14, 66, -102, 16, -6, 66, -60, -81, -109, 66, -73, 35, 92, 66, -74, 62, -54, 66, 110, 117, -5, 66, -107, 86, -80, 66, -60, 11, -112, 66, -61, -78, 120, 66, -65, 78, -43, 66, -73, -25, -102, 66, -126, -81, -73, 66, -66, -123, -73, 66, -123, 104, -76, 66, -121, -94, -89, 66, -124, 74, -99, 66, -116, -2, -76, 66, -68, -2, -89, 66, 75, -120, -116, 66, -65, -100, -43, 66, -61, 102, 86, 66, -78, 68, -98, 66, 72, 37, 30, 66, -74, -15, -123, 66, 116, 7, -82, 66, -80, -101, 6, 66, -78, -91, -25, 66, -114, 117, -71, 66, -94, -109, -32, 66, -76, 125, 55, 66, -127, 55, -106, 66, -85, 75, 32, 66, 74, 127, -34, 66, -86, 67, -16, 66, -61, -43, -27, 66, -114, 35, -85, 66, -74, 70, -101, 66, -73, -13, -87, 66, -108, 3, -65, 66, 74, -60, 53, 66, 104, -108, -13, 66, 103, -39, 10, 66, 110, 58, 50, 66, 88, 108, 110, 66, -64, 119, 93, 66, -87, 104, 76, 66, -81, 5, 94, 66, -116, 92, 13, 66, -67, -25, -1, 66, 90, 19, -18, 66, 77, 39, 18, 66, -83, -33, 24, 66, 84, -41, -115, 66, -90, -78, -30, 66, -62, 74, -31, 66, -106, -120, 90, 66, -94, -45, -96, 66, 124, 22, -8, 66, 93, 65, 13, 66, -120, 57, -103, 66, 88, 96, -37, 66, -100, -23, 71, 66, -70, 96, 75, 66, -71, 83, -109, 66, -120, -36, -41, 66, -108, 103, 19, 66, 88, 14, -63, 66, -119, -114, 57, 66, -64, 112, 41, 66, 88, 53, 119, 66, -116, -86, 12, 66, 84, -53, -9, 66, -65, 44, 40, 66, 74, -61, 71, 66, -65, 50, 107, 66, -109, 82, 114, 66, -68, 45, -110, 66, -111, -61, -33, 66, 83, -31, 124, 66, 77, 75, 122, 66, -59, 38, -13, 66, 82, 10, 127, 66, 102, -47, -61, 66, 69, 27, 66, 66, -124, -31, 17, 66, -69, -21, 40, 66, -68, -75, -10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], "precision": "FLOAT_32", "root": 0, "canonicalAndNotALeaf": true, "size": 231, "leftIndex": [ -1, 1, 255, 1103205176, 1018712510, 1160588330, 1140797273, 759950828, 597274046, 1142932018, 1099482568, 626303302, 1157212808, 638762557, 631089349, 13, 0 ], "rightIndex": [ -1, 1, 255, 770037556, 989995012, 1027784929, 1159935863, 1116909284, 989477531, 1155822910, 600459560, 602053855, 985046548, 581842249, 755445598, 13, 0 ], "nodeFreeIndexes": [], "nodeFreeIndexPointer": 23, "leafFreeIndexes": [], "leafFreeIndexPointer": 23, "partialTreeStateEnabled": true }, "boundingBoxCacheFraction": 0.0, "partialTreeState": true, "seed": -506526637525828854, "id": 0, "dimensions": 32, "staticSeed": 0, "weight": 0.0, "hasAuxiliaryData": false }, { "version": "2.0", "root": 0, "maxSize": 256, "outputAfter": 32, "storeSequenceIndexesEnabled": false, "centerOfMassEnabled": false, "nodeStoreState": { "version": "2.0", "capacity": 255, "compressed": true, "cutDimension": [ 0, 31, 255, 576280926, 927163981, 605657545, 36542934, 979282387, 513316351, 75349067, 527426881, 594341451, 215076597, 44371942, 610711145, 722929218, 727435191, 250609621, 39364477, 670951999, 497525985, 791842027, 383748555, 74503847, 131771513, 195497686, 871192506, 471404001, 481101102, 43350835, 897546731, 241166303, 746235349, 753518170, 748063309, 110970575, 997932150, 387185630, 862779169, 181844805, 0, 0, 0, 0, 0, 0 ], "cutValueData": [ 68, -39, -78, -59, 69, 39, -89, 22, 68, -109, 100, 125, 69, 104, -38, -124, 66, 60, 39, -25, 66, -97, -128, 45, 66, 58, -104, 27, 66, -77, -26, 49, 66, -101, -12, -99, 68, -122, 92, 68, 64, -25, -86, -18, 64, 104, 47, -36, 66, 4, 119, -91, 66, -59, -105, 57, 66, -58, -17, -11, 66, 1, 63, -61, 66, 26, 120, -45, 66, -84, -44, -89, 66, -63, -77, 74, 66, -92, 41, -97, 66, -67, 16, -104, 66, 122, 93, -5, 66, -76, 64, 113, 66, 4, 28, 71, 66, 98, 65, 8, 66, -96, 55, 104, 66, -71, 100, -87, 66, -112, 17, -11, 66, -100, -101, 109, 66, 126, -119, 76, 66, 76, -81, -1, 66, 78, 110, -35, 66, -107, -117, 74, 66, -125, -106, -79, 66, -104, 14, -44, 66, 110, -99, -47, 66, 96, -89, -11, 66, -62, 54, -66, 66, 73, 0, -93, 66, 83, 106, -57, 66, 91, 42, -85, 66, -74, -9, 127, 66, -97, -81, 29, 66, -82, -106, 15, 66, -101, -22, 74, 66, 93, 9, -54, 66, -62, 120, 114, 66, 117, -108, -128, 66, -123, 99, -56, 66, -62, 47, -86, 66, -108, -124, -121, 66, -106, -80, 78, 66, -60, 88, -56, 66, -108, -73, -30, 66, -100, 54, -37, 66, 99, -107, -76, 66, 108, -109, -21, 66, 113, -128, 80, 66, -110, 101, 14, 66, -67, -108, 124, 66, -78, -11, -88, 66, 125, 85, -95, 66, 84, 36, 87, 66, -72, 111, -79, 66, -71, -91, 21, 66, -99, -86, -2, 66, -97, -13, -110, 66, 73, 28, -78, 66, -88, 101, 34, 66, -117, 40, 39, 66, -65, -115, 106, 66, -81, -13, 65, 66, -60, 125, -118, 66, -79, 57, 71, 66, -107, 41, 111, 66, -65, 18, -60, 66, -106, 95, 102, 66, -100, 119, 25, 66, 81, -41, -45, 66, -120, -44, -2, 66, -122, -94, 87, 66, 101, 86, 1, 66, -103, 72, -66, 66, -98, 100, -64, 66, -95, -14, 41, 66, -65, 100, 4, 66, 87, 60, 100, 66, 107, -99, -128, 66, -91, 55, -38, 66, 98, -48, -33, 66, -117, -98, 104, 66, 108, 55, 121, 66, -118, -73, -13, 66, -111, 95, 19, 66, -120, -65, -88, 66, -108, -91, 110, 66, 104, -61, 11, 66, -90, -68, 71, 66, -61, -66, 21, 66, 84, 27, -48, 66, 113, -5, -29, 66, 68, 45, 1, 66, -103, 37, -34, 66, 70, 42, -63, 66, -117, -59, -38, 66, 79, 88, -94, 66, -62, 119, -44, 66, -73, 8, 9, 66, 80, 69, 36, 66, 127, 15, 34, 66, 100, -6, -73, 66, -123, -93, -19, 66, 79, -26, -57, 66, 108, 54, -105, 66, 101, -65, -22, 66, -64, -4, 34, 66, -64, -105, -101, 66, 123, 114, 46, 66, -122, -50, -125, 66, 76, 34, -116, 66, 77, -71, -2, 66, -104, 104, -79, 66, -96, 101, -120, 66, -119, 112, -16, 66, 115, -96, 56, 66, -70, 68, 90, 66, -98, -95, -20, 66, 78, 13, -120, 66, 81, 72, 74, 66, -106, -5, 45, 66, -111, -95, -10, 66, 98, 15, -72, 66, -71, -121, 92, 66, -65, -58, 63, 66, 104, 15, 67, 66, -72, -112, 47, 66, -89, -1, -36, 66, -113, 99, -19, 66, -69, 103, -2, 66, -125, 42, 118, 66, -117, 93, -128, 66, -62, -21, -67, 66, -62, -74, -93, 66, -94, 78, 82, 66, -105, 108, -122, 66, 106, -77, 40, 66, 72, -102, 47, 66, -73, -36, 87, 66, -117, -16, 86, 66, -61, 90, -1, 66, -64, 103, 49, 66, -116, -105, 77, 66, -122, -58, 78, 66, -70, 16, 44, 66, -73, 18, -53, 66, -67, 68, -27, 66, 86, 14, 29, 66, -107, -96, 8, 66, -73, -23, 52, 66, -64, 85, 88, 66, -113, 26, -126, 66, -111, 21, 88, 66, 88, -126, 8, 66, 100, -40, -103, 66, -69, 62, -13, 66, -72, 79, 95, 66, 103, -56, -51, 66, -80, -58, -34, 66, 97, -54, 46, 66, -61, -1, 73, 66, -109, 121, 27, 66, 95, -74, -20, 66, -117, -66, 27, 66, 69, -35, -49, 66, -110, -86, 89, 66, -77, 17, -21, 66, -121, -7, 120, 66, -118, 40, -84, 66, 94, 104, 43, 66, -72, -66, 52, 66, -63, -67, 50, 66, -67, -5, -30, 66, -118, 108, -119, 66, 104, 100, 21, 66, -72, 17, -91, 66, -77, -107, 110, 66, -94, 72, 101, 66, -66, 123, -10, 66, -67, 11, -111, 66, -112, 13, 18, 66, -117, 75, 73, 66, -72, -94, -118, 66, 85, 39, -124, 66, -62, -41, 12, 66, -122, 101, 83, 66, -65, -51, -89, 66, -100, -38, -27, 66, 125, 33, 47, 66, -66, 10, -126, 66, 84, 31, 88, 66, -125, 127, -101, 66, -63, 16, 85, 66, 74, -101, -63, 66, -109, -126, 91, 66, -64, -109, -111, 66, -77, -98, -25, 66, -64, 3, -5, 66, 87, 23, 107, 66, -99, -51, 101, 66, 87, 17, 123, 66, -124, -75, -78, 66, -123, -72, -34, 66, -107, 66, -13, 66, -86, -121, -5, 66, -62, -114, -2, 66, -114, -5, 83, 66, -103, 77, 124, 66, -58, 22, 116, 66, -66, -103, 32, 66, -97, -50, 81, 66, -118, -94, -84, 66, -121, 95, -72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], "precision": "FLOAT_32", "root": 0, "canonicalAndNotALeaf": true, "size": 222, "leftIndex": [ -1, 1, 255, 1018055060, 1146258376, 1143063005, 773243645, 624258709, 985054328, 774052592, 1155856840, 629206420, 626507348, 624794434, 819031, 0, 0 ], "rightIndex": [ -1, 1, 255, 1033033540, 717445259, 1156704290, 1162081312, 1146137927, 1013745580, 1140760097, 1018568642, 968619758, 586117183, 581682838, 994003, 0, 0 ], "nodeFreeIndexes": [], "nodeFreeIndexPointer": 32, "leafFreeIndexes": [], "leafFreeIndexPointer": 32, "partialTreeStateEnabled": true }, "boundingBoxCacheFraction": 0.0, "partialTreeState": true, "seed": -26643182478891948, "id": 0, "dimensions": 32, "staticSeed": 0, "weight": 0.0, "hasAuxiliaryData": false }, { "version": "2.0", "root": 0, "maxSize": 256, "outputAfter": 32, "storeSequenceIndexesEnabled": false, "centerOfMassEnabled": false, "nodeStoreState": { "version": "2.0", "capacity": 255, "compressed": true, "cutDimension": [ 0, 31, 255, 52102590, 803441321, 845014002, 402434489, 452533423, 857576527, 1038034607, 905684145, 488373930, 214396250, 355904417, 530702145, 1046798206, 332791595, 504888034, 777824675, 892833502, 861728509, 660034926, 70744530, 501807487, 761722539, 519539025, 182281293, 353970593, 187506475, 578410162, 1050517306, 729400670, 325250227, 714712277, 1039845225, 590912757, 313752750, 848418633, 775234665, 907772981, 651257981, 0, 0, 0, 0, 0 ], "cutValueData": [ 68, -18, 62, -6, 67, -19, -107, 114, 66, 60, -76, 113, 66, -78, -82, -78, 66, 2, 57, -79, 65, -30, -89, -101, 65, -108, 87, 79, 66, -128, -29, -89, 66, -74, 5, -111, 65, 118, -110, 62, 66, -85, -128, -33, 65, -121, 120, 29, 66, -75, 118, 68, 66, 114, -108, -46, 63, -27, -25, 62, 66, 106, -111, 30, 66, -112, 101, -86, 66, -105, -30, 127, 66, -113, -55, -35, 66, -93, -101, 49, 66, -71, 94, -56, 66, 124, -21, 106, 66, 115, 63, -121, 66, 115, 75, 81, 66, 121, 4, 45, 66, -113, 107, -73, 66, 91, 36, -32, 66, -81, 14, -6, 66, 86, 29, -93, 66, -113, -90, 67, 66, 99, -20, 31, 66, -58, -74, -105, 66, -122, 23, 44, 66, 88, -99, 4, 66, -125, -68, 14, 66, -107, -60, -32, 66, 109, 120, 22, 66, -99, -67, -5, 66, -113, -21, 113, 66, -60, 122, -107, 66, -112, -37, 8, 66, -65, -102, 42, 66, -96, 48, 54, 66, -126, 4, 66, 66, -102, 80, 61, 66, 108, 56, -34, 66, 69, -17, -117, 66, -67, -38, -21, 66, -67, -68, -29, 66, -112, 51, 70, 66, -120, -81, -38, 66, 97, -115, -57, 66, -113, -71, -47, 66, -69, 74, -76, 66, -94, -87, -124, 66, -75, -64, 75, 65, -73, 112, 16, 66, -60, 56, 40, 63, -18, 63, 74, 66, -80, -73, -40, 66, -115, -75, 25, 66, -117, 63, -94, 66, -78, 22, -32, 66, -90, 66, 67, 66, 108, -60, 2, 66, -67, -102, -117, 66, -113, 14, 112, 66, -76, 94, -118, 66, 125, 22, 74, 66, 96, -28, 70, 66, -72, 0, -113, 66, 94, 95, 31, 66, -63, 107, -9, 66, 79, -45, -52, 66, 73, 4, 121, 66, -103, 84, -107, 66, -74, -46, 39, 66, 75, 48, 27, 66, 73, -48, 19, 66, -124, -82, 70, 66, 102, 81, -41, 66, 104, 93, 39, 66, -116, 6, -18, 66, -117, 52, -9, 66, -89, -81, 36, 66, 95, 43, -49, 66, -75, 124, 6, 66, 107, -62, 84, 66, -115, -109, 1, 66, 91, 16, 97, 66, -124, 82, -26, 66, -121, -15, -122, 66, -71, 47, 89, 66, -107, 61, -127, 66, -121, -81, 17, 66, 107, 59, -105, 66, -77, -62, -112, 66, -65, -40, 14, 66, 86, 83, -46, 66, 80, -35, 40, 66, 37, -87, 61, 66, -77, -121, 31, 66, -98, -7, 15, 66, -128, 47, -44, 66, 78, 9, 32, 66, -98, -121, -37, 66, -89, -121, -75, 66, -99, -52, 121, 66, -62, 10, 124, 66, -128, -64, -24, 66, -108, 12, 101, 66, -72, -92, 54, 66, -116, 18, -12, 66, 86, 23, 3, 66, -71, 67, -92, 66, -75, 124, -82, 66, -64, -110, -69, 66, -64, -66, -83, 66, 91, 44, 24, 66, -92, 105, -114, 66, 125, -127, -55, 66, 91, 24, -62, 66, -73, -24, -125, 66, -100, -55, 41, 66, -71, 73, 107, 66, -61, 77, -24, 66, 86, 63, -67, 66, -103, 37, 16, 66, -118, -109, 44, 66, -105, -9, -33, 66, -79, 48, -19, 66, -74, 97, 9, 66, -96, 73, -69, 66, -59, 65, 120, 66, -88, 103, -36, 66, 88, -30, -115, 66, 82, -114, 29, 66, 104, -37, -89, 66, -99, -41, 1, 66, -77, -16, -48, 66, -99, 24, -117, 66, -59, -32, -9, 66, -117, 62, 83, 66, -99, 43, -54, 66, -111, 115, -37, 66, -117, -9, 110, 66, -65, 108, 89, 66, -78, -6, -42, 66, -98, 127, -31, 66, -72, -72, 33, 66, -117, -76, 114, 66, -116, 46, -18, 66, 103, 17, -113, 66, -83, -97, -106, 66, -62, 35, 48, 66, -99, 20, 27, 66, -61, -45, -81, 66, -117, -15, -119, 66, -105, 15, 124, 66, 108, -67, -88, 66, 89, -125, -4, 66, -107, -25, 4, 66, -64, -38, -115, 66, -100, -20, -48, 66, 88, 6, 77, 66, 86, -22, 0, 66, -96, -108, -89, 66, 94, 100, -55, 66, -66, 14, 28, 66, -89, 60, 37, 66, -118, -84, 34, 66, 96, 73, 76, 66, 80, 64, -114, 66, -115, -104, 19, 66, 75, 30, 98, 66, -105, 91, -106, 66, 74, 31, -11, 66, -118, -3, -11, 66, -82, -72, -72, 66, -113, 35, -83, 66, -116, -113, -91, 66, -73, 84, 5, 66, -109, -94, -104, 66, 119, -19, 39, 66, -117, 17, 108, 66, -98, 117, -86, 66, -102, 56, -113, 66, 96, 90, 98, 66, -111, 53, -126, 66, -104, -64, 57, 66, 86, 77, -121, 66, -65, -98, 51, 66, -113, -58, -58, 66, 77, -104, 29, 66, 72, 50, -46, 66, -125, -36, 15, 66, 91, -31, 126, 66, -98, 106, 81, 66, -83, -115, 86, 66, -116, -24, 22, 66, 94, 110, 41, 66, -70, 65, -104, 66, 94, 113, -94, 66, -107, -51, 68, 66, -100, 122, -57, 66, -71, -16, 105, 66, -119, -100, -19, 66, 106, -14, 55, 66, -113, -97, 89, 66, -117, 19, -2, 66, -122, -27, 107, 66, 114, -11, -3, 66, -112, 10, -126, 66, -76, -26, 80, 66, 90, -77, -89, 66, 87, 10, 57, 66, -115, 45, 62, 66, -108, -120, -57, 66, -110, -27, -117, 66, 110, -96, 44, 66, -125, 3, 101, 66, 87, -89, -119, 66, -112, 20, 102, 66, -128, -5, 103, 66, -61, 6, -60, 66, -72, -111, -22, 66, -98, -92, -3, 66, 73, -98, -6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], "precision": "FLOAT_32", "root": 0, "canonicalAndNotALeaf": true, "size": 228, "leftIndex": [ -1, 1, 255, 1160410184, 1017177992, 583521974, 969262118, 716729444, 600505403, 1100016922, 753852334, 643567427, 1160578652, 588239222, 597076159, 0, 0 ], "rightIndex": [ -1, 1, 255, 1155824878, 630820141, 581396444, 581216390, 1025975534, 1013272006, 726472544, 626323669, 768460445, 711865301, 582921926, 587687386, 0, 0 ], "nodeFreeIndexes": [], "nodeFreeIndexPointer": 26, "leafFreeIndexes": [], "leafFreeIndexPointer": 26, "partialTreeStateEnabled": true }, "boundingBoxCacheFraction": 0.0, "partialTreeState": true, "seed": 2636386493963874353, "id": 0, "dimensions": 32, "staticSeed": 0, "weight": 0.0, "hasAuxiliaryData": false }, { "version": "2.0", "root": 0, "maxSize": 256, "outputAfter": 32, "storeSequenceIndexesEnabled": false, "centerOfMassEnabled": false, "nodeStoreState": { "version": "2.0", "capacity": 255, "compressed": true, "cutDimension": [ 0, 31, 255, 788174302, 798717110, 366505670, 119613373, 66512334, 853456866, 502119545, 842074535, 914171442, 870410549, 714861873, 489239669, 991668698, 578117463, 74496707, 237819874, 232737587, 1067103550, 599611629, 250213437, 1021368235, 228956670, 595533297, 263410797, 594373949, 402575103, 858203485, 45956269, 194420585, 1010017503, 221618018, 619120463, 706196786, 111868117, 191735609, 903846469, 380274103, 18166, 0, 0, 0, 0, 0 ], "cutValueData": [ 69, 112, -66, 86, 69, 92, 39, 28, 66, 79, -121, 62, 66, -104, 40, -80, 66, 78, 91, -59, 66, 90, -80, 91, 66, -91, -67, 83, 66, -118, 32, 118, 66, -96, -65, -83, 66, -95, 71, -113, 65, -63, -16, 19, 66, 68, 117, 14, 66, -78, -93, -10, 66, -74, -66, -10, 66, 127, -8, -88, 65, 85, -90, 7, 66, 24, -54, -111, 66, -61, -27, -40, 66, -125, 86, 60, 66, -112, 117, 34, 66, -109, 62, -126, 66, -76, -26, 98, 66, -75, 4, 118, 64, -51, 72, -93, 66, -82, -56, 61, 66, -83, 106, 96, 66, -110, 120, -39, 66, -117, 14, -128, 66, 89, -25, -42, 66, -122, 67, 5, 66, -84, 3, -1, 66, 111, 12, -109, 66, -98, -50, 113, 66, -102, 90, 7, 66, -125, 57, 21, 66, 123, -32, 39, 66, -110, 5, 73, 66, 117, 96, 3, 65, -108, 59, -116, 66, 87, -77, 31, 66, -82, 31, 115, 66, -59, -9, -47, 66, 123, -21, 105, 66, -119, 1, -92, 66, -69, -31, -89, 66, -85, -49, -113, 66, 82, -50, -90, 66, -98, -102, -119, 66, -68, -79, 17, 66, -97, 60, -79, 66, -88, -113, 42, 66, -90, -10, -63, 66, 121, 122, -90, 66, 73, 34, 45, 66, -110, 27, 7, 66, -107, -103, -16, 66, -78, 41, 43, 66, -71, -93, -120, 66, -63, -45, -108, 66, -99, -50, 40, 66, -102, 116, 19, 66, -118, 42, 15, 66, 15, 26, -98, 66, 83, -13, 16, 66, -99, 127, -43, 66, -104, 24, 45, 66, -103, -18, -54, 66, 86, 48, -103, 66, -111, -55, -72, 66, -70, -50, -49, 66, -63, -68, 6, 66, -61, 120, 81, 66, -79, 65, 95, 66, -60, 65, 57, 66, -61, -63, -39, 66, 21, -123, -121, 66, -113, 45, 54, 66, -121, -121, 118, 66, 108, -49, -84, 66, -71, 98, -25, 66, 84, -69, -71, 66, -98, 13, -97, 66, 71, 9, 58, 66, -115, -62, -38, 66, 69, 67, 27, 66, -74, 24, 56, 66, -66, 100, 111, 66, -97, -95, -79, 66, 92, -125, -63, 66, -66, -109, 109, 66, -63, -14, 113, 66, 100, 40, 44, 66, -122, -8, -35, 66, -97, -8, 98, 66, -67, -88, 76, 66, -127, 86, -27, 66, 84, 18, 125, 66, -104, 29, 92, 66, -62, -128, -82, 66, -84, 36, -25, 66, -113, 2, 35, 66, -63, -8, 28, 66, -72, -82, 50, 66, -127, 14, -87, 66, -110, 101, -14, 66, -102, 15, 67, 66, -99, -74, -63, 66, 23, -38, -128, 66, -113, 120, -72, 66, 98, 39, -27, 66, -79, 51, 36, 66, -69, 0, 34, 66, 87, -41, 106, 66, -98, -59, -97, 66, -101, -107, -9, 66, -108, -107, -64, 66, -103, 61, -11, 66, 98, -36, -120, 66, -73, 120, -54, 66, 89, -22, -66, 66, 69, -38, 97, 66, -120, -40, -103, 66, -90, -34, 70, 66, -96, 107, -47, 66, -67, -70, 95, 66, -89, -86, -69, 66, -78, 17, -7, 66, 84, -87, 35, 66, -80, -40, 113, 66, 118, -36, 110, 66, -94, -7, 71, 66, -68, 91, -125, 66, -116, -92, -84, 66, 124, -15, -98, 66, 69, 57, -39, 66, -74, 51, -87, 66, 69, 92, -110, 66, -113, 16, 100, 66, -116, 64, -112, 66, 81, 14, 49, 66, -95, -83, 18, 66, -77, -25, 102, 66, 87, 122, 114, 66, 81, 94, 0, 66, -123, -8, -58, 66, -124, 26, -12, 66, 87, -66, 40, 66, -59, -119, 45, 66, -68, 54, -66, 66, -126, -17, 102, 66, 72, 86, 94, 66, 114, -102, -11, 66, 80, -10, -112, 66, -96, 13, -104, 66, 86, -58, 27, 66, 79, 21, 57, 66, -113, -3, -124, 66, -80, 105, 3, 66, -117, 120, 13, 66, -77, -64, -11, 66, -65, -48, 99, 66, -102, 75, -1, 66, -102, 83, 91, 66, -99, 37, -94, 66, 98, 90, -87, 66, -83, 64, 126, 66, 77, -57, -109, 66, -102, -99, 23, 66, -106, 112, -96, 66, 122, 86, 97, 66, 103, 14, 53, 66, -106, 37, 72, 66, -107, 97, -32, 66, -111, 80, 41, 66, 91, 84, 123, 66, -79, -84, -35, 66, -112, -17, -96, 66, 86, 27, -63, 66, 74, -24, 82, 66, -72, -7, -6, 66, -63, -23, 57, 66, 82, -20, 74, 66, -117, 10, -74, 66, 88, -103, 3, 66, 97, 15, -55, 66, -68, -86, 92, 66, 93, 94, -105, 66, -64, -63, -7, 66, -124, -20, 104, 66, -69, -119, -81, 66, -65, 19, -20, 66, -68, 44, -47, 66, -61, 65, -2, 66, -101, 25, 59, 66, -107, -76, 100, 66, 106, -5, 53, 66, -120, 51, 11, 66, -99, 105, -68, 66, -107, 93, -23, 66, -65, 110, -18, 66, -60, 110, -53, 66, -128, -87, 59, 66, -95, 58, 72, 66, 94, -115, -30, 66, -110, -77, -62, 66, -90, 110, -89, 66, -111, 15, -127, 66, 80, 28, -31, 66, -74, 32, 118, 66, -93, -44, 76, 66, -112, 118, 15, 66, -98, 55, -75, 66, -59, -89, 42, 66, 84, -22, -89, 66, -112, -70, 64, 66, -60, -52, 39, 66, 86, 77, 30, 66, -118, -113, 17, 66, -111, -87, -118, 66, -117, -117, 115, 66, -79, 5, -109, 66, 85, -35, 103, 66, -64, -74, 33, 66, 69, 57, 47, 66, -119, 17, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], "precision": "FLOAT_32", "root": 0, "canonicalAndNotALeaf": true, "size": 225, "leftIndex": [ -1, 1, 255, 1112601230, 1098481256, 715612390, 755116096, 774811544, 755091314, 1099883041, 1104134558, 710979488, 639137542, 970204702, 21543125, 0, 0 ], "rightIndex": [ -1, 1, 255, 1100082838, 1026743281, 974929489, 1157397494, 1162075454, 770030701, 1147892029, 1143048553, 712423184, 1155684874, 974042806, 26391631, 0, 0 ], "nodeFreeIndexes": [], "nodeFreeIndexPointer": 29, "leafFreeIndexes": [], "leafFreeIndexPointer": 29, "partialTreeStateEnabled": true }, "boundingBoxCacheFraction": 0.0, "partialTreeState": true, "seed": 1481498699720728495, "id": 0, "dimensions": 32, "staticSeed": 0, "weight": 0.0, "hasAuxiliaryData": false }, { "version": "2.0", "root": 0, "maxSize": 256, "outputAfter": 32, "storeSequenceIndexesEnabled": false, "centerOfMassEnabled": false, "nodeStoreState": { "version": "2.0", "capacity": 255, "compressed": true, "cutDimension": [ 0, 31, 255, 395504574, 585025198, 900579529, 660706858, 129354621, 584653689, 227894714, 496541255, 500241443, 884430901, 196410546, 367394527, 311609830, 737270875, 454334127, 510170670, 178633154, 179615919, 312450938, 93929382, 259980462, 535254690, 572598979, 718329150, 887737550, 371910753, 1033713388, 710371046, 34957989, 909313710, 621919469, 590414885, 859822039, 440044767, 595507497, 102226114, 343784573, 878258135, 0, 0, 0, 0, 0 ], "cutValueData": [ 68, -101, -40, -100, 66, -125, 79, 10, 66, -76, -29, 32, 67, -47, -38, 35, 66, 86, 105, -128, 66, 84, 58, -22, 67, 1, -59, 123, 66, -114, -96, 55, 66, 35, -14, -91, 66, 113, 95, -115, 65, -47, -126, 69, 66, -122, -60, 121, 66, -119, -120, -18, 66, -82, 106, -94, 65, 12, 27, -61, 66, 77, 104, -38, 66, -72, 94, -13, 69, 100, -74, -54, 66, -73, 117, -43, 66, -110, -8, 43, 66, -112, -109, -66, 66, 102, 122, -124, 66, -65, 44, -100, 66, 78, 96, 114, 66, -86, 126, 115, 66, 109, 82, 90, 66, -77, 33, 75, 65, 17, 115, -86, 63, -35, -47, 2, 66, 114, 126, 36, 66, -105, -6, 12, 65, 37, 34, -15, 66, -80, 87, -18, 66, -73, 118, -59, 66, -109, -3, 72, 66, -115, -53, -32, 66, -60, -67, -94, 66, -110, -4, -39, 66, -93, -8, -29, 66, -89, 23, -40, 66, -101, 30, 47, 66, -94, -20, -80, 66, -126, 88, -88, 66, -76, 57, 58, 63, -35, -21, 122, 66, -100, -123, -115, 66, -79, 84, 66, 66, -82, 3, 58, 65, -33, 65, 92, 66, -96, 81, 82, 66, -104, -32, -96, 66, -84, -24, 57, 66, -102, -102, 8, 66, -83, 19, 25, 66, -95, 15, -124, 66, -108, 3, -38, 66, -78, -12, -6, 66, -66, 115, 79, 66, 94, -107, -50, 66, -74, -74, 48, 66, -64, -115, -111, 66, -97, -46, 115, 66, 83, 17, 64, 66, -120, -51, -76, 66, 82, 111, -41, 66, -99, -24, -56, 66, 82, 2, -23, 66, -64, -39, -78, 66, 85, -10, -48, 66, 109, 13, -112, 66, -75, 29, -106, 66, -76, 31, -103, 66, -68, 121, 104, 66, 75, 68, -34, 66, -66, 45, 111, 66, -118, 77, -64, 66, -102, -101, -95, 66, -108, 96, -35, 66, 90, -6, 108, 66, -91, 73, 0, 66, 101, 12, -79, 66, 76, 30, 36, 66, 92, 6, -27, 66, -99, -33, 100, 66, -128, 23, 86, 66, -111, 126, 115, 66, -127, 70, -89, 66, 62, 109, -26, 66, -113, 53, 109, 66, -125, -72, -12, 66, -71, 61, -93, 66, -106, 35, -13, 66, -117, -5, -16, 66, -97, -43, -121, 66, -88, 62, -91, 66, 99, 6, 53, 66, -71, -99, 98, 66, -70, -60, 41, 66, -67, 81, 104, 66, 90, -43, 105, 66, -63, 118, -76, 66, -95, 126, 33, 66, 89, -122, 109, 66, -96, -29, 117, 66, -63, 3, -49, 66, -100, -88, 79, 66, 74, 108, 50, 66, -110, -46, 19, 66, -90, -42, -74, 66, 114, 36, 6, 66, 91, 31, 43, 66, 85, 31, 121, 66, -105, -44, 34, 66, -107, 82, 23, 66, -64, -58, 81, 66, -121, -10, 38, 66, 99, -105, 31, 66, -83, 0, -128, 66, -104, -78, -86, 66, -70, 73, 47, 66, -68, 2, -68, 66, -113, -121, -79, 66, 89, 85, 108, 66, -119, 84, -82, 66, 79, -44, -38, 66, 79, -20, 114, 66, -72, -50, 116, 66, -125, 96, -25, 66, -126, -21, -6, 66, -59, -128, -90, 66, -77, 118, 3, 66, 82, 75, 123, 66, 97, -61, -86, 66, -79, 93, -87, 66, -64, 11, 30, 66, -66, -94, 3, 66, -60, -113, -40, 66, -107, -100, 37, 66, -76, -45, 82, 66, -107, 9, 73, 66, -94, -123, 125, 66, -112, 101, 28, 66, -106, -119, 121, 66, -85, -112, 8, 66, -60, 67, 16, 66, -74, -100, 51, 66, 69, 110, -88, 66, 95, 9, -59, 66, -60, -56, -31, 66, -82, -15, 49, 66, -104, -94, -50, 66, 83, 52, -102, 66, -66, -24, 10, 66, -117, -79, -91, 66, -67, -59, 119, 66, 109, -67, 110, 63, -127, 53, -107, 66, 72, -18, 51, 66, -120, -61, 51, 66, -69, -74, 47, 66, -118, 35, -77, 66, -67, 22, 30, 66, -67, 86, 1, 66, 76, -110, -54, 66, -113, -98, -65, 66, -69, -57, -116, 66, -113, 31, 60, 66, -105, 29, 38, 66, 127, 101, 125, 66, -103, -121, -41, 66, -92, -124, 60, 66, -78, 86, 120, 66, -116, -114, -56, 66, -106, 53, -53, 66, -62, 65, 69, 66, -121, -58, 109, 66, -125, 58, -55, 66, -66, -70, -58, 66, 70, 32, 53, 66, 84, -109, 79, 66, -117, 2, 115, 66, 117, -85, -128, 66, 80, 55, 122, 66, 103, 73, -127, 66, -115, -98, 38, 66, -63, -88, -65, 66, -102, 16, 123, 66, -117, 17, -42, 66, -110, -46, 21, 66, -70, -40, 94, 66, 103, 60, -38, 66, -117, -79, 62, 66, 93, -119, -43, 66, -66, -45, 110, 66, -107, -66, -69, 66, 84, 81, 106, 66, 115, 63, 63, 66, -99, 15, -97, 66, 101, -105, 12, 66, -79, 68, 117, 66, 83, -121, 24, 66, -106, -103, -7, 66, 104, 77, -76, 66, -112, -98, -70, 66, -117, -8, 42, 66, -104, 6, 120, 66, -70, -97, 38, 66, -99, 63, 28, 66, -127, -21, -30, 66, -110, 102, 21, 66, -85, 110, 56, 66, -62, 123, -3, 66, -59, 111, -119, 66, 108, -99, 115, 66, -104, -106, -117, 66, 99, 104, 101, 66, -107, -109, -39, 66, 69, -7, -47, 66, 118, -96, 26, 66, 100, -53, -68, 66, 84, 100, -107, 66, -64, 92, -87, 66, 104, -40, 62, 66, -64, -101, 16, 66, -99, -23, -91, 66, -60, -61, -57, 66, -100, -80, 67, 66, -76, -94, 92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], "precision": "FLOAT_32", "root": 0, "canonicalAndNotALeaf": true, "size": 228, "leftIndex": [ -1, 1, 255, 729935225, 774110515, 644020442, 602647442, 724628632, 1160470031, 1102654741, 975699148, 711885020, 597139601, 624895870, 597251228, 0, 0 ], "rightIndex": [ -1, 1, 255, 643928587, 774602257, 774832121, 1032937514, 1155686359, 984562334, 730133567, 1013920862, 1141526167, 581151478, 624197408, 625949042, 0, 0 ], "nodeFreeIndexes": [], "nodeFreeIndexPointer": 26, "leafFreeIndexes": [], "leafFreeIndexPointer": 26, "partialTreeStateEnabled": true }, "boundingBoxCacheFraction": 0.0, "partialTreeState": true, "seed": -326098280807737610, "id": 0, "dimensions": 32, "staticSeed": 0, "weight": 0.0, "hasAuxiliaryData": false }, { "version": "2.0", "root": 0, "maxSize": 256, "outputAfter": 32, "storeSequenceIndexesEnabled": false, "centerOfMassEnabled": false, "nodeStoreState": { "version": "2.0", "capacity": 255, "compressed": true, "cutDimension": [ 0, 31, 255, 53270838, 647031374, 119730107, 769242474, 81208803, 74292330, 215862725, 487953482, 727395159, 863477410, 347707217, 999504309, 794159870, 345620406, 117119418, 536214317, 240760993, 619092426, 204531182, 743941457, 207144049, 716884917, 358578133, 995748417, 498445609, 792270938, 994048331, 1041956798, 572573245, 764632115, 769913909, 1065293034, 799648081, 913108409, 380348583, 330397483, 664271558, 399767081, 21817, 0, 0, 0, 0 ], "cutValueData": [ 69, 76, 38, 14, 66, 51, -35, -57, 66, -83, 36, -80, 67, -66, 102, -98, 68, -80, -128, -68, 66, -120, 121, 76, 66, -86, 17, 97, 66, -82, 19, 82, 66, -58, -82, 121, 66, -117, -8, -73, 66, -92, -97, -115, 66, 101, -74, 1, 66, 94, 96, 112, 66, -118, 77, 65, 66, 31, 83, 127, 66, -117, 48, 73, 66, -63, 126, -93, 65, 90, 114, 75, 66, -78, -41, 113, 66, 114, -72, -73, 66, -92, -103, -122, 66, 110, -10, 30, 66, -101, 40, 47, 66, -78, -108, 115, 66, 82, 49, -33, 66, 99, -41, 14, 66, -96, -68, -111, 66, -59, -39, 116, 66, 117, 83, 96, 66, -98, -12, -57, 66, -99, 26, 6, 66, 100, 78, 40, 66, 81, 91, -42, 66, 86, 26, 110, 66, -79, 29, 90, 66, -80, 37, -74, 66, -99, -112, -68, 66, -88, 87, 19, 66, 13, 16, 19, 66, 68, 6, 91, 66, -111, -115, -98, 66, -59, -39, 10, 66, -80, -96, -95, 66, -60, 101, 77, 66, -108, 35, 98, 66, 119, 23, -16, 66, 119, -16, 97, 66, -62, -118, 86, 66, 23, -110, 74, 66, -66, 43, -44, 66, -88, 99, 34, 66, -67, 122, 18, 66, -105, 87, -55, 66, -117, -59, -113, 66, -71, 94, -54, 66, -119, -9, -67, 66, 102, 91, 14, 66, 46, 83, -125, 66, 105, -77, 92, 66, -108, -65, -101, 66, -88, 28, 71, 66, -68, 114, 56, 66, -117, -73, -119, 66, 72, -85, 9, 66, 108, 10, -10, 66, -79, -110, 68, 66, -115, -119, -74, 66, -117, -90, 6, 66, -66, -48, -29, 66, -84, 67, -51, 66, -122, 91, -46, 66, -91, 34, 119, 66, -77, 87, -54, 66, 69, -47, 5, 66, -71, -52, -48, 66, 95, -71, 67, 66, -99, 94, -51, 66, 98, 37, -74, 66, -70, 35, 90, 66, -115, -109, -31, 66, 105, -92, 31, 66, -128, 7, -117, 66, -121, -37, 93, 66, -67, 64, -126, 66, -72, -122, 124, 66, -121, 105, 19, 66, -60, 24, -55, 66, -81, 20, 42, 66, 81, 90, -111, 66, 91, -54, 8, 66, -112, -87, -38, 66, -93, -46, -82, 66, -62, 16, -34, 66, 110, -55, 75, 66, 83, 89, -110, 66, 90, -101, 36, 66, -105, 54, -83, 66, -86, -85, -56, 66, -80, -70, -99, 66, 97, 77, -75, 66, -99, 25, 42, 66, 81, 91, 34, 66, -78, 71, -116, 66, -70, -58, -3, 66, -59, -21, -111, 66, -101, 121, 11, 66, -63, 101, -114, 66, -63, 77, 87, 66, -75, -1, 124, 66, 69, -122, 77, 66, -112, 20, -5, 66, -106, 17, -36, 66, 108, -115, -124, 66, -72, -24, -86, 66, -101, 116, -35, 66, -63, 44, 14, 66, -113, 36, -117, 66, 104, 52, -44, 66, -106, -118, -121, 66, -67, -45, -24, 66, -110, 27, 60, 66, 98, 91, -81, 66, -116, 36, 10, 66, -114, -111, 34, 66, -104, -75, 29, 66, -60, 44, -44, 66, 125, -49, -80, 66, -122, -120, -80, 66, -60, 46, 0, 66, -127, 88, -74, 66, 84, 1, -119, 66, -114, -97, 6, 66, -107, 17, 27, 66, -68, 79, 43, 66, -112, -112, -78, 66, -64, 27, -47, 66, -127, -128, 7, 66, -82, -81, 49, 66, -103, -52, -35, 66, -70, -95, 115, 66, -67, -102, -44, 66, 80, 56, -87, 66, -123, -76, -14, 66, -109, 17, -83, 66, -103, -22, -49, 66, -107, -81, 76, 66, 91, -15, -109, 66, 93, -50, 106, 66, 71, 87, -83, 66, -65, -115, -104, 66, -80, 97, 61, 66, -60, 102, 38, 66, -69, -81, 10, 66, -58, -51, 79, 66, 70, 40, -22, 66, 96, -88, -72, 66, 95, -52, 105, 66, -63, 109, 15, 66, -71, 37, -27, 66, 82, 47, 61, 66, 84, 58, 44, 66, -110, 64, 101, 66, -71, -42, 5, 66, -110, -5, 40, 66, 115, -89, 90, 66, -109, -113, 56, 66, -103, 43, 94, 66, 94, -115, 45, 66, -119, -41, 88, 66, -104, -19, 82, 66, -98, -50, -62, 66, -101, 34, -28, 66, -63, -114, 113, 66, -117, 66, 2, 66, 75, 18, 68, 66, -114, -104, -9, 66, 90, -97, -90, 66, -59, 25, 48, 66, -110, 12, -48, 66, -63, 93, -8, 66, -103, -124, 105, 66, -102, -107, -87, 66, -104, -104, -32, 66, 112, -53, -120, 66, -73, -8, -127, 66, -87, 114, 21, 66, -61, 4, -78, 66, -128, 78, -95, 66, -102, 91, 127, 66, -63, 105, -15, 66, 73, 113, 124, 66, 84, 55, -107, 66, -112, 101, -48, 66, -85, 23, -73, 66, -61, 108, 15, 66, 94, 93, -107, 66, -74, 19, -116, 66, -124, -111, -61, 66, -96, 92, -103, 66, -95, 76, 21, 66, 104, 37, 18, 66, -109, -7, -43, 66, -63, 48, 43, 66, 85, 104, -23, 66, 68, -38, 104, 66, -97, -118, 125, 66, -74, 82, 82, 66, 85, -1, 111, 66, -66, -91, -98, 66, 79, -30, -42, 66, 81, 100, 59, 66, -113, 25, -47, 66, -108, -70, 33, 66, -70, 27, -58, 66, 68, -68, 5, 66, -103, -31, 59, 66, -74, -48, -27, 66, -87, -6, 12, 66, -64, 1, -54, 66, 72, 86, -5, 66, -110, 115, 57, 66, 95, -9, 87, 66, -106, -58, -30, 66, -114, -43, -9, 66, -124, -117, -61, 66, 80, -121, 46, 66, -105, -104, -9, 66, 69, -48, -109, 66, -116, -62, -126, 66, -101, 15, -70, 66, -100, 2, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], "precision": "FLOAT_32", "root": 0, "canonicalAndNotALeaf": true, "size": 231, "leftIndex": [ -1, 1, 255, 626568200, 629499437, 753339841, 1030788898, 726831224, 596099411, 586113809, 975114418, 987685622, 1142571545, 587744221, 711000005, 13, 0 ], "rightIndex": [ -1, 1, 255, 1161723346, 987939094, 768285566, 769871048, 588302266, 983461084, 597634816, 985094540, 640298897, 1118597027, 1030729828, 1098223177, 13, 0 ], "nodeFreeIndexes": [], "nodeFreeIndexPointer": 23, "leafFreeIndexes": [], "leafFreeIndexPointer": 23, "partialTreeStateEnabled": true }, "boundingBoxCacheFraction": 0.0, "partialTreeState": true, "seed": 1885563308252954837, "id": 0, "dimensions": 32, "staticSeed": 0, "weight": 0.0, "hasAuxiliaryData": false } ], "executionContext": { "parallelExecutionEnabled": false, "threadPoolSize": 0 }, "saveTreeStateEnabled": true, "saveSamplerStateEnabled": true, "saveCoordinatorStateEnabled": true } ================================================ FILE: Java/core/src/test/resources/com/amazon/randomcutforest/state/state_3.json ================================================ { "version": "3.0", "totalUpdates": 1501, "timeDecay": 1.0e-4, "numberOfTrees": 30, "sampleSize": 256, "shingleSize": 8, "dimensions": 8, "outputAfter": 32, "compressed": true, "partialTreeState": true, "boundingBoxCacheFraction": 0.0, "storeSequenceIndexesEnabled": false, "compact": true, "internalShinglingEnabled": true, "centerOfMassEnabled": false, "precision": "FLOAT_32", "pointStoreState": { "version": "3.0", "dimensions": 8, "capacity": 7681, "shingleSize": 8, "precision": "FLOAT_32", "startOfFreeSegment": 1237, "pointData": [ 65, -96, 0, 0, 65, -96, 0, 0, 65, -96, 0, 0, 65, -96, 0, 0, 65, -96, 0, 0, 65, -96, 0, 0, 65, -96, 0, 0, 65, -96, 0, 0, 65, -96, 0, 0, 65, -96, 0, 0, 65, -96, 0, 0, 65, -88, 0, 0, 65, -88, 0, 0, 65, -88, 0, 0, 65, -88, 0, 0, 65, -88, 0, 0, 65, -88, 0, 0, 65, -88, 0, 0, 65, -88, 0, 0, 65, -88, 0, 0, 65, -88, 0, 0, 65, -88, 0, 0, 65, -88, 0, 0, 65, -88, 0, 0, 65, -88, 0, 0, 65, -88, 0, 0, 65, -80, 0, 0, 65, -80, 0, 0, 65, -80, 0, 0, 65, -80, 0, 0, 65, -80, 0, 0, 65, -80, 0, 0, 65, -80, 0, 0, 65, -80, 0, 0, 65, -80, 0, 0, 65, -80, 0, 0, 65, -80, 0, 0, 65, -80, 0, 0, 65, -80, 0, 0, 65, -80, 0, 0, 65, -80, 0, 0, 65, -72, 0, 0, 65, -72, 0, 0, 65, -72, 0, 0, 65, -72, 0, 0, 65, -72, 0, 0, 65, -72, 0, 0, 65, -72, 0, 0, 65, -72, 0, 0, 65, -72, 0, 0, 65, -72, 0, 0, 65, -72, 0, 0, 65, -72, 0, 0, 65, -80, 0, 0, 65, -80, 0, 0, 65, -80, 0, 0, 65, -80, 0, 0, 65, -80, 0, 0, 65, -88, 0, 0, 65, -88, 0, 0, 65, -88, 0, 0, 65, -88, 0, 0, 65, -88, 0, 0, 65, -96, 0, 0, 65, -96, 0, 0, 65, -96, 0, 0, 65, -96, 0, 0, 65, -96, 0, 0, 65, -104, 0, 0, 65, -104, 0, 0, 65, -104, 0, 0, 65, -104, 0, 0, 65, -104, 0, 0, 65, -112, 0, 0, 65, -112, 0, 0, 65, -112, 0, 0, 65, -112, 0, 0, 65, -112, 0, 0, 65, -120, 0, 0, 65, -120, 0, 0, 65, -120, 0, 0, 65, -120, 0, 0, 65, -120, 0, 0, 65, -128, 0, 0, 65, -128, 0, 0, 65, -128, 0, 0, 65, -128, 0, 0, 65, -128, 0, 0, 65, 112, 0, 0, 65, 112, 0, 0, 65, 112, 0, 0, 65, 112, 0, 0, 65, 112, 0, 0, 65, 96, 0, 0, 65, 96, 0, 0, 65, 96, 0, 0, 65, 96, 0, 0, 65, 96, 0, 0, 65, 80, 0, 0, 65, 80, 0, 0, 65, 80, 0, 0, 65, 80, 0, 0, 65, 80, 0, 0, 65, 64, 0, 0, 65, 64, 0, 0, 65, 64, 0, 0, 65, 64, 0, 0, 65, 64, 0, 0, 65, 48, 0, 0, 65, 48, 0, 0, 65, 48, 0, 0, 65, 48, 0, 0, 65, 48, 0, 0, 65, 48, 0, 0, 65, 48, 0, 0, 65, 48, 0, 0, 65, 48, 0, 0, 65, 48, 0, 0, 65, 48, 0, 0, 65, 48, 0, 0, 65, 48, 0, 0, 65, 48, 0, 0, 65, 48, 0, 0, 65, 64, 0, 0, 65, 64, 0, 0, 65, 64, 0, 0, 65, 64, 0, 0, 65, 64, 0, 0, 65, 64, 0, 0, 65, 64, 0, 0, 65, 64, 0, 0, 65, 64, 0, 0, 65, 64, 0, 0, 65, 64, 0, 0, 65, 64, 0, 0, 65, 64, 0, 0, 65, 64, 0, 0, 65, 64, 0, 0, 65, 64, 0, 0, 65, 80, 0, 0, 65, 80, 0, 0, 65, 80, 0, 0, 65, 80, 0, 0, 65, 80, 0, 0, 65, 80, 0, 0, 65, 80, 0, 0, 65, 80, 0, 0, 65, 80, 0, 0, 65, 80, 0, 0, 65, 80, 0, 0, 65, 80, 0, 0, 65, 80, 0, 0, 65, 80, 0, 0, 65, 80, 0, 0, 65, 80, 0, 0, 65, 64, 0, 0, 65, 64, 0, 0, 65, 64, 0, 0, 65, 64, 0, 0, 65, 64, 0, 0, 65, 64, 0, 0, 65, 64, 0, 0, 65, 64, 0, 0, 65, 64, 0, 0, 65, 64, 0, 0, 65, 64, 0, 0, 65, 64, 0, 0, 65, 64, 0, 0, 65, 64, 0, 0, 65, 80, 0, 0, 65, 80, 0, 0, 65, 80, 0, 0, 65, 80, 0, 0, 65, 80, 0, 0, 65, 80, 0, 0, 65, 96, 0, 0, 65, 96, 0, 0, 65, 96, 0, 0, 65, 96, 0, 0, 65, 96, 0, 0, 65, 112, 0, 0, 65, 112, 0, 0, 65, 112, 0, 0, 65, 112, 0, 0, 65, 112, 0, 0, 65, 112, 0, 0, 65, -128, 0, 0, 65, -128, 0, 0, 65, -128, 0, 0, 65, -128, 0, 0, 65, -128, 0, 0, 65, -120, 0, 0, 65, -120, 0, 0, 65, -120, 0, 0, 65, -120, 0, 0, 65, -120, 0, 0, 65, -112, 0, 0, 65, -112, 0, 0, 65, -112, 0, 0, 65, -112, 0, 0, 65, -112, 0, 0, 65, -112, 0, 0, 65, -104, 0, 0, 65, -104, 0, 0, 65, -104, 0, 0, 65, -104, 0, 0, 65, -104, 0, 0, 65, -96, 0, 0, 65, -96, 0, 0, 65, -96, 0, 0, 65, -96, 0, 0, 65, -96, 0, 0, 65, -96, 0, 0, 65, -88, 0, 0, 65, -88, 0, 0, 65, -88, 0, 0, 65, -88, 0, 0, 65, -88, 0, 0, 65, -80, 0, 0, 65, -80, 0, 0, 65, -80, 0, 0, 65, -80, 0, 0, 65, -80, 0, 0, 65, -80, 0, 0, 65, -72, 0, 0, 65, -72, 0, 0, 65, -72, 0, 0, 65, -72, 0, 0, 65, -72, 0, 0, 65, -72, 0, 0, 65, -72, 0, 0, 65, -80, 0, 0, 65, -80, 0, 0, 65, -80, 0, 0, 65, -80, 0, 0, 65, -80, 0, 0, 65, -80, 0, 0, 65, -80, 0, 0, 65, -80, 0, 0, 65, -80, 0, 0, 65, -80, 0, 0, 65, -80, 0, 0, 65, -88, 0, 0, 65, -88, 0, 0, 65, -88, 0, 0, 65, -88, 0, 0, 65, -88, 0, 0, 65, -88, 0, 0, 65, -88, 0, 0, 65, -88, 0, 0, 65, -88, 0, 0, 65, -96, 0, 0, 65, -96, 0, 0, 65, -96, 0, 0, 65, -96, 0, 0, 65, -96, 0, 0, 65, -96, 0, 0, 65, -96, 0, 0, 65, -96, 0, 0, 65, -96, 0, 0, 65, -96, 0, 0, 65, -96, 0, 0, 65, -104, 0, 0, 65, -104, 0, 0, 65, -104, 0, 0, 65, -104, 0, 0, 65, -104, 0, 0, 65, -104, 0, 0, 65, -104, 0, 0, 65, -104, 0, 0, 65, -104, 0, 0, 65, -112, 0, 0, 65, -112, 0, 0, 65, -112, 0, 0, 65, -112, 0, 0, 65, -112, 0, 0, 65, -112, 0, 0, 65, -112, 0, 0, 65, -112, 0, 0, 65, -112, 0, 0, 65, -112, 0, 0, 65, -112, 0, 0, 65, -120, 0, 0, 65, -120, 0, 0, 65, -120, 0, 0, 65, -120, 0, 0, 65, -120, 0, 0, 65, -120, 0, 0, 65, -120, 0, 0, 65, -112, 0, 0, 65, -112, 0, 0, 65, -112, 0, 0, 65, -112, 0, 0, 65, -112, 0, 0, 65, -112, 0, 0, 65, -112, 0, 0, 65, -104, 0, 0, 65, -104, 0, 0, 65, -104, 0, 0, 65, -104, 0, 0, 65, -104, 0, 0, 65, -96, 0, 0, 65, -96, 0, 0, 65, -96, 0, 0, 65, -96, 0, 0, 65, -96, 0, 0, 65, -96, 0, 0, 65, -96, 0, 0, 65, -88, 0, 0, 65, -88, 0, 0, 65, -88, 0, 0, 65, -88, 0, 0, 65, -88, 0, 0, 65, -80, 0, 0, 65, -80, 0, 0, 65, -80, 0, 0, 65, -80, 0, 0, 65, -80, 0, 0, 65, -80, 0, 0, 65, -80, 0, 0, 65, -72, 0, 0, 65, -72, 0, 0, 65, -72, 0, 0, 65, -72, 0, 0, 65, -72, 0, 0, 65, -64, 0, 0, 65, -64, 0, 0, 65, -64, 0, 0, 65, -64, 0, 0, 65, -64, 0, 0, 65, -64, 0, 0, 65, -64, 0, 0, 65, -56, 0, 0, 65, -56, 0, 0, 65, -56, 0, 0, 65, -56, 0, 0, 65, -56, 0, 0, 65, -48, 0, 0, 65, -48, 0, 0, 65, -48, 0, 0, 65, -48, 0, 0, 65, -48, 0, 0, 65, -48, 0, 0, 65, -48, 0, 0, 65, -40, 0, 0, 65, -40, 0, 0, 65, -40, 0, 0, 65, -40, 0, 0, 65, -40, 0, 0, 65, -48, 0, 0, 65, -48, 0, 0, 65, -48, 0, 0, 65, -48, 0, 0, 65, -48, 0, 0, 65, -48, 0, 0, 65, -48, 0, 0, 65, -56, 0, 0, 65, -56, 0, 0, 65, -56, 0, 0, 65, -56, 0, 0, 65, -56, 0, 0, 65, -64, 0, 0, 65, -64, 0, 0, 65, -64, 0, 0, 65, -64, 0, 0, 65, -64, 0, 0, 65, -64, 0, 0, 65, -64, 0, 0, 65, -72, 0, 0, 65, -72, 0, 0, 65, -72, 0, 0, 65, -72, 0, 0, 65, -72, 0, 0, 65, -80, 0, 0, 65, -80, 0, 0, 65, -80, 0, 0, 65, -80, 0, 0, 65, -80, 0, 0, 65, -80, 0, 0, 65, -80, 0, 0, 65, -88, 0, 0, 65, -88, 0, 0, 65, -88, 0, 0, 65, -88, 0, 0, 65, -88, 0, 0, 65, -96, 0, 0, 65, -96, 0, 0, 65, -96, 0, 0, 65, -96, 0, 0, 65, -96, 0, 0, 65, -96, 0, 0, 65, -96, 0, 0, 65, -104, 0, 0, 65, -104, 0, 0, 65, -104, 0, 0, 65, -104, 0, 0, 65, -104, 0, 0, 65, -112, 0, 0, 65, -112, 0, 0, 65, -112, 0, 0, 65, -112, 0, 0, 65, -112, 0, 0, 65, -112, 0, 0, 65, -112, 0, 0, 65, -120, 0, 0, 65, -120, 0, 0, 65, -120, 0, 0, 65, -120, 0, 0, 65, -120, 0, 0, 65, -120, 0, 0, 65, -120, 0, 0, 65, -128, 0, 0, 65, -128, 0, 0, 65, -128, 0, 0, 65, -128, 0, 0, 65, -128, 0, 0, 65, -128, 0, 0, 65, -128, 0, 0, 65, -128, 0, 0, 65, 112, 0, 0, 65, 112, 0, 0, 65, 112, 0, 0, 65, 112, 0, 0, 65, 112, 0, 0, 65, 112, 0, 0, 65, 112, 0, 0, 65, 112, 0, 0, 65, 112, 0, 0, 65, 96, 0, 0, 65, 96, 0, 0, 65, 96, 0, 0, 65, 96, 0, 0, 65, 96, 0, 0, 65, 96, 0, 0, 65, 96, 0, 0, 65, 96, 0, 0, 65, 96, 0, 0, 65, 80, 0, 0, 65, 80, 0, 0, 65, 80, 0, 0, 65, 80, 0, 0, 65, 80, 0, 0, 65, 80, 0, 0, 65, 80, 0, 0, 65, 80, 0, 0, 65, 64, 0, 0, 65, 64, 0, 0, 65, 64, 0, 0, 65, 64, 0, 0, 65, 64, 0, 0, 65, 64, 0, 0, 65, 64, 0, 0, 65, 64, 0, 0, 65, 64, 0, 0, 65, 48, 0, 0, 65, 48, 0, 0, 65, 48, 0, 0, 65, 48, 0, 0, 65, 48, 0, 0, 65, 48, 0, 0, 65, 48, 0, 0, 65, 48, 0, 0, 65, 32, 0, 0, 65, 32, 0, 0, 65, 32, 0, 0, 65, 32, 0, 0, 65, 32, 0, 0, 65, 32, 0, 0, 65, 32, 0, 0, 65, 48, 0, 0, 65, 48, 0, 0, 65, 48, 0, 0, 65, 48, 0, 0, 65, 48, 0, 0, 65, 64, 0, 0, 65, 64, 0, 0, 65, 64, 0, 0, 65, 64, 0, 0, 65, 64, 0, 0, 65, 80, 0, 0, 65, 80, 0, 0, 65, 80, 0, 0, 65, 80, 0, 0, 65, 80, 0, 0, 65, 96, 0, 0, 65, 96, 0, 0, 65, 96, 0, 0, 65, 96, 0, 0, 65, 96, 0, 0, 65, 112, 0, 0, 65, 112, 0, 0, 65, 112, 0, 0, 65, 112, 0, 0, 65, 112, 0, 0, 65, -128, 0, 0, 65, -128, 0, 0, 65, -128, 0, 0, 65, -128, 0, 0, 65, -128, 0, 0, 65, -120, 0, 0, 65, -120, 0, 0, 65, -120, 0, 0, 65, -120, 0, 0, 65, -120, 0, 0, 65, -112, 0, 0, 65, -112, 0, 0, 65, -112, 0, 0, 65, -112, 0, 0, 65, -112, 0, 0, 65, -104, 0, 0, 65, -104, 0, 0, 65, -104, 0, 0, 65, -104, 0, 0, 65, -104, 0, 0, 65, -96, 0, 0, 65, -96, 0, 0, 65, -96, 0, 0, 65, -96, 0, 0, 65, -96, 0, 0, 65, -88, 0, 0, 65, -88, 0, 0, 65, -88, 0, 0, 65, -88, 0, 0, 65, -88, 0, 0, 65, -80, 0, 0, 65, -80, 0, 0, 65, -80, 0, 0, 65, -80, 0, 0, 65, -80, 0, 0, 65, -80, 0, 0, 65, -80, 0, 0, 65, -88, 0, 0, 65, -88, 0, 0, 65, -88, 0, 0, 65, -88, 0, 0, 65, -88, 0, 0, 65, -88, 0, 0, 65, -88, 0, 0, 65, -88, 0, 0, 65, -88, 0, 0, 65, -88, 0, 0, 65, -96, 0, 0, 65, -96, 0, 0, 65, -96, 0, 0, 65, -96, 0, 0, 65, -96, 0, 0, 65, -96, 0, 0, 65, -96, 0, 0, 65, -96, 0, 0, 65, -96, 0, 0, 65, -96, 0, 0, 65, -96, 0, 0, 65, -104, 0, 0, 65, -104, 0, 0, 65, -104, 0, 0, 65, -104, 0, 0, 65, -104, 0, 0, 65, -104, 0, 0, 65, -104, 0, 0, 65, -104, 0, 0, 65, -104, 0, 0, 65, -112, 0, 0, 65, -112, 0, 0, 65, -112, 0, 0, 65, -112, 0, 0, 65, -112, 0, 0, 65, -112, 0, 0, 65, -112, 0, 0, 65, -112, 0, 0, 65, -112, 0, 0, 65, -112, 0, 0, 65, -112, 0, 0, 65, -120, 0, 0, 65, -120, 0, 0, 65, -120, 0, 0, 65, -120, 0, 0, 65, -120, 0, 0, 65, -120, 0, 0, 65, -120, 0, 0, 65, -120, 0, 0, 65, -120, 0, 0, 65, -128, 0, 0, 65, -128, 0, 0, 65, -128, 0, 0, 65, -128, 0, 0, 65, -128, 0, 0, 65, -128, 0, 0, 65, -128, 0, 0, 65, -128, 0, 0, 65, -128, 0, 0, 65, -128, 0, 0, 65, -128, 0, 0, 65, -128, 0, 0, 65, -128, 0, 0, 65, -128, 0, 0, 65, -128, 0, 0, 65, -128, 0, 0, 65, -128, 0, 0, 65, -128, 0, 0, 65, -128, 0, 0, 65, -128, 0, 0, 65, -128, 0, 0, 65, -128, 0, 0, 65, -128, 0, 0, 65, -128, 0, 0, 65, -128, 0, 0, 65, -120, 0, 0, 65, -120, 0, 0, 65, -120, 0, 0, 65, -120, 0, 0, 65, -120, 0, 0, 65, -120, 0, 0, 65, -120, 0, 0, 65, -120, 0, 0, 65, -120, 0, 0, 65, -120, 0, 0, 65, -120, 0, 0, 65, -120, 0, 0, 65, -120, 0, 0, 65, -120, 0, 0, 65, -120, 0, 0, 65, -120, 0, 0, 65, -120, 0, 0, 65, -120, 0, 0, 65, -120, 0, 0, 65, -112, 0, 0, 65, -112, 0, 0, 65, -112, 0, 0, 65, -112, 0, 0, 65, -112, 0, 0, 65, -112, 0, 0, 65, -104, 0, 0, 65, -104, 0, 0, 65, -104, 0, 0, 65, -104, 0, 0, 65, -104, 0, 0, 65, -96, 0, 0, 65, -96, 0, 0, 65, -96, 0, 0, 65, -96, 0, 0, 65, -96, 0, 0, 65, -96, 0, 0, 65, -88, 0, 0, 65, -88, 0, 0, 65, -88, 0, 0, 65, -88, 0, 0, 65, -88, 0, 0, 65, -80, 0, 0, 65, -80, 0, 0, 65, -80, 0, 0, 65, -80, 0, 0, 65, -80, 0, 0, 65, -80, 0, 0, 65, -72, 0, 0, 65, -72, 0, 0, 65, -72, 0, 0, 65, -72, 0, 0, 65, -72, 0, 0, 65, -64, 0, 0, 65, -64, 0, 0, 65, -64, 0, 0, 65, -64, 0, 0, 65, -64, 0, 0, 65, -56, 0, 0, 65, -56, 0, 0, 65, -56, 0, 0, 65, -56, 0, 0, 65, -56, 0, 0, 65, -56, 0, 0, 65, -48, 0, 0, 65, -48, 0, 0, 65, -48, 0, 0, 65, -48, 0, 0, 65, -48, 0, 0, 65, -40, 0, 0, 65, -40, 0, 0, 65, -40, 0, 0, 65, -40, 0, 0, 65, -40, 0, 0, 65, -40, 0, 0, 65, -32, 0, 0, 65, -32, 0, 0, 65, -32, 0, 0, 65, -32, 0, 0, 65, -32, 0, 0, 65, -32, 0, 0, 65, -32, 0, 0, 65, -40, 0, 0, 65, -40, 0, 0, 65, -40, 0, 0, 65, -40, 0, 0, 65, -40, 0, 0, 65, -40, 0, 0, 65, -40, 0, 0, 65, -40, 0, 0, 65, -40, 0, 0, 65, -40, 0, 0, 65, -48, 0, 0, 65, -48, 0, 0, 65, -48, 0, 0, 65, -48, 0, 0, 65, -48, 0, 0, 65, -48, 0, 0, 65, -48, 0, 0, 65, -48, 0, 0, 65, -48, 0, 0, 65, -48, 0, 0, 65, -48, 0, 0, 65, -56, 0, 0, 65, -56, 0, 0, 65, -56, 0, 0, 65, -56, 0, 0, 65, -56, 0, 0, 65, -56, 0, 0, 65, -56, 0, 0, 65, -56, 0, 0, 65, -56, 0, 0, 65, -64, 0, 0, 65, -64, 0, 0, 65, -64, 0, 0, 65, -64, 0, 0, 65, -64, 0, 0, 65, -64, 0, 0, 65, -64, 0, 0, 65, -64, 0, 0, 65, -64, 0, 0, 65, -64, 0, 0, 65, -64, 0, 0, 65, -72, 0, 0, 65, -72, 0, 0, 65, -72, 0, 0, 65, -72, 0, 0, 65, -72, 0, 0, 65, -72, 0, 0, 65, -72, 0, 0, 65, -72, 0, 0, 65, -72, 0, 0, 65, -80, 0, 0, 65, -80, 0, 0, 65, -80, 0, 0, 65, -80, 0, 0, 65, -80, 0, 0, 65, -80, 0, 0, 65, -80, 0, 0, 65, -80, 0, 0, 65, -88, 0, 0, 65, -88, 0, 0, 65, -88, 0, 0, 65, -88, 0, 0, 65, -88, 0, 0, 65, -96, 0, 0, 65, -96, 0, 0, 65, -96, 0, 0, 65, -96, 0, 0, 65, -96, 0, 0, 65, -104, 0, 0, 65, -104, 0, 0, 65, -104, 0, 0, 65, -104, 0, 0, 65, -104, 0, 0, 65, -112, 0, 0, 65, -112, 0, 0, 65, -112, 0, 0, 65, -112, 0, 0, 65, -112, 0, 0, 65, -120, 0, 0, 65, -120, 0, 0, 65, -120, 0, 0, 65, -120, 0, 0, 65, -120, 0, 0, 65, -128, 0, 0, 65, -128, 0, 0, 65, -128, 0, 0, 65, -128, 0, 0, 65, -128, 0, 0, 65, 112, 0, 0, 65, 112, 0, 0, 65, 112, 0, 0, 65, 112, 0, 0, 65, 112, 0, 0, 65, 96, 0, 0, 65, 96, 0, 0, 65, 96, 0, 0, 65, 96, 0, 0, 65, 96, 0, 0, 65, 80, 0, 0, 65, 80, 0, 0, 65, 80, 0, 0, 65, 80, 0, 0, 65, 80, 0, 0, 65, 64, 0, 0, 65, 64, 0, 0, 65, 64, 0, 0, 65, 64, 0, 0, 65, 64, 0, 0, 65, 48, 0, 0, 65, 48, 0, 0, 65, 48, 0, 0, 65, 48, 0, 0, 65, 48, 0, 0, 65, 32, 0, 0, 65, 32, 0, 0, 65, 32, 0, 0, 65, 32, 0, 0, 65, 32, 0, 0, 65, 32, 0, 0, 65, 32, 0, 0, 65, 32, 0, 0, 65, 32, 0, 0, 65, 32, 0, 0, 65, 32, 0, 0, 65, 32, 0, 0, 65, 32, 0, 0, 65, 32, 0, 0, 65, 32, 0, 0, 65, 32, 0, 0, 65, 32, 0, 0, 65, 32, 0, 0, 65, 32, 0, 0, 65, 32, 0, 0, 65, 32, 0, 0, 65, 32, 0, 0, 65, 32, 0, 0, 65, 32, 0, 0, 65, 32, 0, 0, 65, 32, 0, 0, 65, 48, 0, 0, 65, 48, 0, 0, 65, 48, 0, 0, 65, 64, 0, 0, 65, 64, 0, 0, 65, 64, 0, 0, 65, 64, 0, 0, 65, 80, 0, 0, 65, 80, 0, 0, 65, 80, 0, 0, 65, 96, 0, 0, 65, 96, 0, 0, 65, 96, 0, 0, 65, 96, 0, 0, 65, 112, 0, 0, 65, 112, 0, 0, 65, 112, 0, 0, 65, -128, 0, 0, 65, -128, 0, 0, 65, -128, 0, 0, 65, -120, 0, 0, 65, -120, 0, 0, 65, -120, 0, 0, 65, -112, 0, 0, 65, -112, 0, 0, 65, -112, 0, 0, 65, -112, 0, 0, 65, -104, 0, 0, 65, -104, 0, 0, 65, -104, 0, 0, 65, -96, 0, 0, 65, -96, 0, 0, 65, -96, 0, 0, 65, -96, 0, 0, 65, -88, 0, 0, 65, -88, 0, 0, 65, -88, 0, 0, 65, -80, 0, 0, 65, -80, 0, 0, 65, -80, 0, 0, 65, -72, 0, 0, 65, -72, 0, 0, 65, -72, 0, 0, 65, -64, 0, 0, 65, -64, 0, 0, 65, -64, 0, 0, 65, -64, 0, 0, 65, -56, 0, 0, 65, -56, 0, 0, 65, -56, 0, 0, 65, -48, 0, 0, 65, -48, 0, 0, 65, -48, 0, 0, 65, -48, 0, 0, 65, -40, 0, 0, 65, -40, 0, 0, 65, -40, 0, 0, 65, -32, 0, 0, 65, -32, 0, 0, 65, -32, 0, 0, 65, -40, 0, 0, 65, -40, 0, 0, 65, -40, 0, 0, 65, -48, 0, 0, 65, -48, 0, 0, 65, -48, 0, 0, 65, -48, 0, 0, 65, -56, 0, 0, 65, -56, 0, 0, 65, -56, 0, 0, 65, -64, 0, 0, 65, -64, 0, 0, 65, -64, 0, 0, 65, -64, 0, 0, 65, -72, 0, 0, 65, -72, 0, 0, 65, -72, 0, 0, 65, -80, 0, 0, 65, -80, 0, 0, 65, -80, 0, 0, 65, -88, 0, 0, 65, -88, 0, 0, 65, -88, 0, 0, 65, -96, 0, 0, 65, -96, 0, 0, 65, -96, 0, 0, 65, -96, 0, 0, 65, -104, 0, 0, 65, -104, 0, 0, 65, -104, 0, 0, 65, -112, 0, 0, 65, -112, 0, 0, 65, -112, 0, 0, 65, -112, 0, 0, 65, -120, 0, 0, 65, -120, 0, 0, 65, -120, 0, 0, 65, -128, 0, 0, 65, -128, 0, 0, 65, -128, 0, 0, 65, 112, 0, 0, 65, 112, 0, 0, 65, 112, 0, 0, 65, 96, 0, 0, 65, 96, 0, 0, 65, 96, 0, 0, 65, 96, 0, 0, 65, 80, 0, 0, 65, 80, 0, 0, 65, 80, 0, 0, 65, 64, 0, 0, 65, 64, 0, 0, 65, 64, 0, 0, 65, 64, 0, 0, 65, 48, 0, 0, 65, 48, 0, 0, 65, 48, 0, 0, 65, 32, 0, 0, 65, 32, 0, 0, 65, 32, 0, 0, 65, 32, 0, 0, 65, 32, 0, 0, 65, 32, 0, 0, 65, 32, 0, 0, 65, 32, 0, 0, 65, 32, 0, 0, 65, 48, 0, 0, 65, 48, 0, 0, 65, 48, 0, 0, 65, 48, 0, 0, 65, 48, 0, 0, 65, 48, 0, 0, 65, 48, 0, 0, 65, 48, 0, 0, 65, 48, 0, 0, 65, 48, 0, 0, 65, 48, 0, 0, 65, 48, 0, 0, 65, 48, 0, 0, 65, 48, 0, 0, 65, 64, 0, 0, 65, 64, 0, 0, 65, 64, 0, 0, 65, 64, 0, 0, 65, 64, 0, 0, 65, 64, 0, 0, 65, 64, 0, 0, 65, 64, 0, 0, 65, 64, 0, 0, 65, 64, 0, 0, 65, 64, 0, 0, 65, 64, 0, 0, 65, 64, 0, 0, 65, 64, 0, 0, 65, 80, 0, 0, 65, 80, 0, 0, 65, 80, 0, 0, 65, 80, 0, 0, 65, 80, 0, 0, 65, 80, 0, 0, 65, 80, 0, 0, 65, 80, 0, 0, 65, 80, 0, 0, 65, 80, 0, 0, 65, 80, 0, 0, 65, 80, 0, 0, 65, 80, 0, 0, 65, 80, 0, 0, 65, 96, 0, 0, 65, 96, 0, 0, 65, 96, 0, 0, 65, 96, 0, 0, 65, 96, 0, 0, 65, 96, 0, 0, 65, 96, 0, 0, 65, 96, 0, 0, 65, 96, 0, 0, 65, 96, 0, 0, 65, 112, 0, 0, 65, 112, 0, 0, 65, 112, 0, 0, 65, 112, 0, 0, 65, -128, 0, 0, 65, -128, 0, 0, 65, -128, 0, 0, 65, -128, 0, 0, 65, -128, 0, 0, 65, -120, 0, 0, 65, -120, 0, 0, 65, -120, 0, 0, 65, -120, 0, 0, 65, -120, 0, 0, 65, -112, 0, 0, 65, -112, 0, 0, 65, -112, 0, 0, 65, -112, 0, 0, 65, -104, 0, 0, 65, -104, 0, 0, 65, -104, 0, 0, 65, -104, 0, 0, 65, -104, 0, 0, 65, -96, 0, 0, 65, -96, 0, 0, 65, -96, 0, 0, 65, -96, 0, 0, 65, -96, 0, 0, 65, -88, 0, 0, 65, -88, 0, 0, 65, -88, 0, 0, 65, -88, 0, 0, 65, -80, 0, 0, 65, -80, 0, 0, 65, -80, 0, 0, 65, -80, 0, 0, 65, -80, 0, 0, 65, -72, 0, 0, 65, -72, 0, 0, 65, -72, 0, 0, 65, -72, 0, 0, 65, -64, 0, 0, 65, -64, 0, 0, 65, -64, 0, 0, 65, -64, 0, 0, 65, -64, 0, 0, 65, -56, 0, 0, 65, -56, 0, 0, 65, -56, 0, 0, 65, -56, 0, 0, 65, -56, 0, 0, 65, -48, 0, 0, 65, -48, 0, 0, 65, -48, 0, 0, 65, -48, 0, 0, 65, -40, 0, 0, 65, -40, 0, 0, 65, -40, 0, 0, 65, -40, 0, 0, 65, -40, 0, 0, 65, -40, 0, 0, 65, -40, 0, 0, 65, -40, 0, 0, 65, -40, 0, 0, 65, -40, 0, 0, 65, -40, 0, 0, 65, -40, 0, 0, 65, -40, 0, 0, 65, -40, 0, 0, 65, -40, 0, 0, 65, -40, 0, 0, 65, -40, 0, 0, 65, -48, 0, 0, 65, -48, 0, 0, 65, -48, 0, 0, 65, -48, 0, 0, 65, -48, 0, 0, 65, -48, 0, 0, 65, -48, 0, 0, 65, -48, 0, 0, 65, -48, 0, 0, 65, -48, 0, 0, 65, -48, 0, 0, 65, -48, 0, 0, 65, -48, 0, 0, 65, -48, 0, 0, 65, -48, 0, 0, 65, -48, 0, 0, 65, -48, 0, 0, 65, -48, 0, 0, 65, -48, 0, 0, 65, -48, 0, 0, 65, -48, 0, 0, 65, -48, 0, 0, 65, -48, 0, 0, 65, -48, 0, 0, 65, -48, 0, 0, 65, -56, 0, 0, 65, -56, 0, 0, 65, -56, 0, 0, 65, -56, 0, 0, 65, -56, 0, 0, 65, -56, 0, 0, 65, -56, 0, 0, 65, -56, 0, 0, 65, -56, 0, 0, 65, -56, 0, 0, 65, -56, 0, 0, 65, -56, 0, 0, 65, -56, 0, 0, 65, -56, 0, 0, 65, -56, 0, 0, 65, -56, 0, 0, 65, -56, 0, 0, 65, -64, 0, 0, 65, -64, 0, 0, 65, -64, 0, 0, 65, -64, 0, 0, 65, -64, 0, 0, 65, -64, 0, 0, 65, -64, 0, 0, 65, -72, 0, 0, 65, -72, 0, 0, 65, -72, 0, 0, 65, -72, 0, 0, 65, -72, 0, 0, 65, -80, 0, 0, 65, -80, 0, 0, 65, -80, 0, 0, 65, -80, 0, 0, 65, -80, 0, 0, 65, -80, 0, 0, 65, -80, 0, 0, 65, -88, 0, 0, 65, -88, 0, 0, 65, -88, 0, 0, 65, -88, 0, 0, 65, -88, 0, 0, 65, -96, 0, 0, 65, -96, 0, 0, 65, -96, 0, 0, 65, -96, 0, 0, 65, -96, 0, 0, 65, -96, 0, 0, 65, -96, 0, 0, 65, -104, 0, 0, 65, -104, 0, 0, 65, -104, 0, 0, 65, -104, 0, 0, 65, -104, 0, 0, 65, -112, 0, 0, 65, -112, 0, 0, 65, -112, 0, 0, 65, -112, 0, 0, 65, -112, 0, 0, 65, -112, 0, 0, 65, -112, 0, 0, 65, -120, 0, 0, 65, -120, 0, 0, 65, -120, 0, 0, 65, -120, 0, 0, 65, -120, 0, 0, 65, -128, 0, 0, 65, -128, 0, 0, 65, -128, 0, 0, 65, -128, 0, 0, 65, -128, 0, 0, 65, -128, 0, 0, 65, -128, 0, 0, 65, 112, 0, 0, 65, 112, 0, 0, 65, 112, 0, 0, 65, -128, 0, 0, 65, -120, 0, 0, 65, -104, 0, 0, 65, -96, 0, 0, 65, -88, 0, 0, 65, -80, 0, 0, 65, -64, 0, 0, 65, -56, 0, 0, 65, -48, 0, 0, 65, -40, 0, 0, 65, -32, 0, 0, 65, -16, 0, 0, 65, -8, 0, 0, 66, 0, 0, 0, 66, 4, 0, 0, 66, 8, 0, 0, 66, 16, 0, 0, 66, 20, 0, 0, 66, 24, 0, 0, 66, 28, 0, 0, 66, 36, 0, 0, 66, 40, 0, 0, 66, 44, 0, 0, 66, 48, 0, 0, 66, 52, 0, 0, 66, 60, 0, 0, 66, 64, 0, 0, 66, 68, 0, 0, 66, 72, 0, 0, 66, 80, 0, 0, 66, 84, 0, 0, 66, 88, 0, 0, 66, 92, 0, 0, 66, 96, 0, 0, 66, 104, 0, 0, 66, 108, 0, 0, 66, 112, 0, 0, 66, 116, 0, 0, 66, 120, 0, 0, 66, -128, 0, 0, 66, -126, 0, 0, 66, -124, 0, 0, 66, -122, 0, 0, 66, -118, 0, 0, 66, -116, 0, 0, 66, -114, 0, 0, 66, -112, 0, 0, 66, -110, 0, 0, 66, -106, 0, 0, 66, -104, 0, 0, 66, -102, 0, 0, 66, -100, 0, 0, 66, -98, 0, 0, 66, -94, 0, 0, 66, -92, 0, 0, 66, -90, 0, 0, 66, -88, 0, 0, 66, -84, 0, 0, 66, -82, 0, 0, 66, -80, 0, 0, 66, -80, 0, 0 ], "compressed": true, "refCount": [ 0, 30, 1105, 278589342, 351115866, 228275584, 149050893, 529489237, 361595630, 235719363, 405823962, 329851333, 647509378, 236608032, 149795073, 292908125, 351067413, 120032065, 860972706, 438142281, 177851411, 34379842, 174576285, 175596032, 118367711, 176575356, 389059008, 153668093, 357743235, 61044007, 350166645, 63992188, 32383813, 183400379, 66709002, 41897063, 177675884, 37154258, 37845590, 183880780, 176608001, 148810020, 174668513, 60125002, 146962044, 202286688, 205355169, 289126587, 268099108, 177444879, 178391623, 92597318, 232820762, 234886017, 322463930, 146963935, 58274175, 157123657, 87800030, 59318907, 174702243, 85177337, 175591164, 90659910, 118428062, 120242400, 173833437, 202317473, 90778047, 292937137, 176634874, 116515703, 117320990, 62919619, 61046694, 87887422, 61910691, 206932318, 31460354, 30542568, 59258207, 173863254, 30569443, 117440061, 58276064, 88689825, 116542362, 343224220, 152477257, 312332752, 30599393, 115508482, 30508931, 145947104, 60125062, 206162496, 207914367, 260647353, 204400952, 147976862, 285583350, 173690367, 179486903, 605058218, 33372814, 62870609, 174637823, 30569634, 116454044, 201451611, 173682588, 116517531, 60209729, 86901433, 60208639, 59198658, 121043814, 867285488, 887503680, 92593080, 202467455, 148813893, 206097275, 153372908, 87858534, 121073824, 179373757, 180273156, 148991646, 34351943, 64745643, 150687746, 207024577, 121134270, 61107268, 33399713, 147056286, 175593088, 263327646, 119226532, 97212873, 116487807, 147917189, 205202554, 89674850, 231841344, 145084219, 60120223, 118302203, 115624763, 88810014, 119286206, 149166483, 61044678, 137936241, 148808073, 212565639, 147943168, 146073027, 121044898, 33315052, 92412865, 87769186, 59195743, 58243427, 147855718, 290196367, 120180963, 204254916, 208781255, 147084092, 180182825, 179316094, 235741243, 205175581, 5028, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], "directLocationMap": false, "locationList": [ 0, 1229, 1035, 7569420, 12111816, 16654209, 31795519, 36337912, 51470605, 56021615, 60564008, 71162921, 75705318, 80247711, 84790104, 89332497, 93874890, 98417283, 102959676, 107502069, 112044462, 116586855, 121129248, 125671641, 130214034, 134756427, 139298820, 143841213, 148383606, 152925999, 157468392, 162010785, 177152088, 181694488, 1859504281, 201378184, 205920584, 211303067, 225604280, 230146680, 245279373, 593258683, 254373163, 258915169, 263457562, 267999955, 272542348, 277084741, 281627134, 286169527, 290711920, 295254313, 299796706, 304339099, 308881492, 313423885, 317966278, 322508671, 327051064, 331593457, 336135850, 340678622, 345220636, 355814629, 360361946, 364904339, 372474994, 377017387, 381564700, 390644566, 395186959, 399729352, 404271745, 408814138, 413356531, 417898924, 422441317, 426983710, 431526103, 436068496, 440610889, 445153282, 449695675, 454238068, 459469261, 463322854, 467865247, 472407640, 1600448023, 481493334, 486034819, 490577212, 495119605, 499661998, 504204391, 508746784, 513289177, 517831570, 522373963, 526916356, 531458749, 536001142, 540543535, 545085928, 549628321, 554170714, 1826523307, 563255500, 567797893, 572340286, 1474032379, 581425072, 1537581565, 590509858, 596566381, 601108775, 605651168, 610193561, 614735954, 619278347, 623820740, 628363133, 632905526, 637447919, 641990312, 646532705, 651075098, 655617491, 660159884, 666216408, 670758801, 678329454, 682871849, 688927142, 693470766, 698013159, 702555552, 707097945, 711640338, 716182731, 720725124, 725267517, 729809910, 734352303, 738894696, 743437089, 747979482, 752521875, 757064268, 761606661, 766149054, 770691447, 775233840, 779961963, 784318626, 1394021019, 793403468, 797945805, 802488198, 1253339784, 816115542, 1519617570, 829742787, 834284949, 840341472, 844883866, 860016559, 856997112, 863053437, 867595831, 872138224, 878194747, 882737141, 890307794, 908477361, 914533891, 919076285, 935723108, 940274119, 944816512, 951030475, 956939399, 961471953, 970556793, 1397588142, 981155656, 985698049, 990240442, 994782835, 999325228, 1003867621, 1009924144, 1014466538, 1019008931, 1023551324, 1028093717, 1032636110, 1037178503, 1041720896, 1046263289, 1052319812, 1056862206, 1061404599, 1067461123, 1072003516, 1076545909, 1081088302, 1085630695, 1090173204, 1094715481, 1099257874, 1105599757, 1109856791, 1117426214, 1123484050, 1476482903, 1132568756, 1137111149, 1141653542, 1148052006, 1152252459, 1158308983, 1162851376, 1167393769, 1171936162, 1177991455, 1182535079, 1187077472, 1193132765, 1568336889, 1202218782, 1206761175, 1211303568, 1215845961, 1220388354, 1240063438, 1247642712, 1252185105, 1258241629, 1264296922, 1268840546, 1273382939, 1277925332, 1282467725, 1287010118, 1291552511, 1296094904, 1300637297, 1306692590, 1311236214, 1315778607, 1320321000, 1324863393, 1329405786, 1333948179, 1338490572, 1343032965, 1347575358, 1352117751, 1356660144, 1361202537, 1365744930, 1370287323, 1374829716, 1379372109, 1383914502, 1388456895, 1392999288, 1400569942, 1405112336, 1409654729, 1414197122, 1418739515, 1423281908, 1430850101, 1435394956, 1439937349, 1458106919, 1473239614, 1480818886, 1495960189, 1500502589, 1505044982, 1512615637, 1517158030, 1523214553, 1527756947, 1532299468, 1536841733, 1542898257, 1547440650, 1551983043, 1556525436, 1561067829, 1565610222, 1573180877, 1577723270, 1582265663, 1586808056, 1591350449, 1595892842, 1601948135, 1606491759, 1618601112, 1623147200, 1627689593, 1632231986, 1650392939, 1659486344, 1664028737, 1668571130, 1677654685, 1685226571, 1689768964, 1694311404, 1698853750, 1703396143, 1707938536, 1712480929, 1718646922, 1724592746, 1730649270, 1736707024, 1741249418, 1745791811, 1750334204, 1754876597, 1759418990, 1766989645, 1771532038, 1776074431, 1780616824, 1785159217, 1789701610, 1794244003, 1798786396, 1803328789, 1807871182, 1812413575, 1816955968, 1821498361, 1826040754, 1832097278, 1836639671, 1841182064, 1845724457, 1854805550, 1859351636 ], "reverseAvailable": false, "internalShinglingEnabled": true, "internalShingle": [ 81.0, 82.0, 83.0, 84.0, 86.0, 87.0, 88.0, 88.0 ], "lastTimeStamp": 1502, "rotationEnabled": false, "dynamicResizingEnabled": true, "currentStoreCapacity": 512, "indexCapacity": 1105, "duplicateRefs": [ 0, 695, 44, 3897600, 24716394, 42153264, 110513029, 50402328, 2086095, 241742728, 3738950, 283887772, 17368684, 334297841, 40203129, 335750396, 7264855, 23663 ] }, "compactSamplerStates": [ { "version": "2.0", "weight": [ -1.726248, -1.7356311, -1.7449484, -1.7510741, -1.7539912, -1.7473811, -1.8241102, -1.7670848, -1.7573545, -1.7978079, -1.7825805, -1.7723746, -1.8323271, -1.8414215, -1.8303815, -1.792648, -1.9015952, -1.8188479, -1.9806261, -1.8121938, -1.8129233, -1.8650898, -1.8366604, -1.8418276, -1.999935, -2.032135, -1.8586072, -1.8423811, -1.9055475, -1.8451024, -1.9508317, -1.8134956, -2.2847633, -1.9073308, -2.0071895, -1.8895093, -1.956416, -1.9973236, -2.0586295, -1.8672371, -2.0988955, -2.0428073, -2.011875, -1.8849101, -1.8685876, -2.1907096, -1.9462093, -1.9988756, -2.299218, -2.0017252, -2.0773284, -2.4523854, -2.0663824, -2.023498, -2.0612655, -2.042152, -2.069748, -1.9578686, -1.9781349, -1.8621529, -1.9471117, -2.0265074, -2.2279465, -1.8210775, -1.9795929, -2.5953238, -2.390732, -3.1138978, -2.2910502, -2.0865312, -2.5766997, -2.0562227, -1.9138722, -2.0392447, -2.026909, -2.2205603, -2.091928, -2.1294122, -2.2178159, -2.4366877, -1.8943694, -2.101471, -2.9819884, -2.290241, -2.763693, -2.3244293, -2.0386095, -1.9151877, -2.83677, -1.8807462, -1.9139498, -2.685066, -2.4755366, -2.173793, -2.3330193, -2.6528668, -2.5381188, -2.371536, -2.4438212, -2.0802977, -2.0486376, -2.2020848, -2.5800166, -2.7924101, -2.8116932, -2.2266011, -3.0653925, -2.0397663, -3.11812, -2.2300634, -2.2714894, -2.946862, -2.7537735, -3.161233, -2.7489417, -2.331509, -2.2418895, -2.1874921, -2.0681648, -2.03847, -2.2435958, -2.573769, -2.7047837, -2.9036868, -3.026818, -2.4197178, -2.6823406, -1.8570595, -2.4379678, -5.5215054, -2.5416145, -4.6656966, -3.5039902, -3.2943099, -6.0341554, -3.254804, -3.7077918, -2.739763, -2.9579237, -2.1496873, -3.1787102, -4.4074664, -4.4549766, -2.0833125, -2.603608, -2.2164037, -2.7361348, -2.1582174, -3.0311465, -2.3569057, -3.3770554, -4.742624, -2.7280037, -3.7714725, -2.1618302, -3.2844663, -2.8226726, -2.964899, -2.6862307, -2.9615252, -3.0366094, -2.017697, -2.7177863, -2.8497036, -2.2568204, -3.1616893, -3.207093, -2.3343463, -3.028608, -3.143178, -5.623062, -4.608758, -3.986712, -2.2927513, -3.102124, -2.5337071, -1.9950272, -3.897555, -3.3334637, -5.482882, -3.3254464, -2.1957855, -2.2119808, -2.6956422, -3.8892157, -5.5334697, -2.6207926, -2.2275114, -8.324413, -2.5119126, -4.330357, -3.1112654, -2.7946742, -7.297978, -3.5470343, -3.7771158, -2.9075985, -3.7523994, -3.228332, -3.2314463, -2.6365817, -3.0304646, -3.4130404, -2.3348067, -7.749205, -2.958699, -4.405752, -6.593999, -3.897356, -3.2318664, -4.5506983, -2.412623, -2.7457352, -3.1259267, -4.2919693, -2.3542695, -2.9822729, -3.1331265, -5.3454256, -5.604323, -2.8822865, -2.706761, -2.957169, -3.433357, -3.4868684, -3.9239047, -2.89275, -4.7114544, -3.7985191, -4.4912863, -3.0240886, -2.6035159, -2.5994782, -3.1590285, -2.9561524, -2.869075, -2.4873657, -4.53508, -2.073862, -2.8812068, -2.063298, -2.9101927, -2.3357852, -4.731912, -5.609206, -3.0264845, -3.423773, -4.0586, -3.8452144, -4.7615886, -4.6334796, -3.06386, -3.0389128, -5.4126983, -3.9077544, -2.7038245 ], "pointIndex": [ 0, 1031, 256, 397456478, 214846029, 110866961, 212465124, 695229024, 815817630, 771788473, 263909741, 283686995, 397779630, 935678783, 827059140, 734743071, 1072286907, 1057549205, 1047782471, 102038452, 51219701, 606710213, 949330085, 101215925, 127901944, 110861471, 51646989, 733846016, 101714706, 102119372, 8618248, 101744357, 130218449, 531093095, 734605467, 177505127, 675225791, 764895436, 798523936, 287503034, 554113481, 273357881, 264224, 497012656, 627639407, 943555316, 851625071, 542937296, 852597411, 936944648, 138489344, 37456332, 734512748, 118316393, 46507635, 101275415, 101385401, 101234607, 583731260, 156824879, 547783552, 1067043140, 733899671, 17958068, 57387459, 101328252, 149154706, 227012240, 971327176, 433651570, 24490785, 264119134, 101228425, 694621196, 455309207, 305722871, 665218317, 535731840, 328078255, 27798641, 359011423, 93027933, 1045200399, 712600122, 667222745, 971894136, 529415657, 93423453, 1031 ], "storeSequenceIndicesEnabled": false, "size": 256, "capacity": 256, "initialAcceptFraction": 0.125, "timeDecay": 1.0e-4, "sequenceIndexOfMostRecentTimeDecayUpdate": 0, "maxSequenceIndex": 1494, "compressed": true, "randomSeed": -3710461305226654598 }, { "version": "2.0", "weight": [ -1.6987427, -1.6988138, -1.7114749, -1.6990972, -1.7235111, -1.7235203, -1.7158189, -1.7037977, -1.7455696, -1.7451863, -1.7315372, -1.7678101, -1.7410578, -1.7423337, -1.7279032, -1.7055162, -1.7699987, -1.7759233, -1.7575607, -1.7969104, -1.7797482, -1.7767636, -1.8502752, -1.8698097, -2.1332664, -1.802178, -1.7759057, -1.84717, -1.791979, -1.880251, -2.137471, -1.7164084, -1.8215646, -1.8540864, -1.8427064, -1.7827498, -1.8662268, -2.0459082, -1.8306061, -2.025883, -1.8439078, -1.8316021, -1.8311063, -1.9857459, -1.7843397, -1.9243836, -1.9946369, -1.9436802, -1.9301946, -2.361733, -2.1552134, -1.9145958, -1.8832469, -1.9697897, -2.5311952, -1.8784039, -2.0148246, -1.8317643, -1.9458715, -2.2802289, -2.193603, -2.2077315, -2.1669204, -1.7186235, -2.1428325, -2.2886713, -2.6043172, -1.8573753, -2.1323564, -2.2403038, -2.0174465, -1.9318246, -1.9016538, -1.9055052, -2.0054536, -2.4183135, -2.0512388, -2.1760705, -2.0273197, -2.271114, -2.0847688, -1.9064558, -1.9554824, -2.1253724, -1.98131, -2.3002048, -2.094602, -2.3036559, -2.5028017, -2.6302726, -1.8619525, -1.938369, -1.9711773, -3.1919992, -2.157826, -2.8051956, -2.0006428, -2.3635347, -3.124144, -3.1220577, -2.376385, -2.287251, -2.3049092, -2.07427, -2.163283, -3.0154366, -3.9707642, -2.0178869, -2.125331, -2.7371986, -2.8076415, -1.978846, -2.6553276, -2.7560446, -2.1825616, -2.060888, -1.8457292, -2.053117, -2.0136225, -2.3343344, -2.3349183, -2.4195023, -2.6442425, -2.4659474, -2.6804495, -2.338013, -2.3729303, -1.7446113, -2.5846603, -2.5249848, -2.5094528, -4.942845, -2.7058222, -3.2194257, -5.138144, -2.381514, -3.5102649, -6.12156, -9.068111, -3.8582501, -6.4702754, -3.025642, -2.0585368, -1.968088, -3.1419234, -1.9947373, -2.905421, -2.1778913, -2.9628203, -2.008788, -2.3595178, -2.4967823, -7.301354, -2.5906043, -2.6280746, -3.429913, -3.6139886, -2.5194135, -2.2956996, -2.4574964, -7.172427, -2.5825264, -2.628515, -2.089512, -3.059124, -2.3417923, -1.9770174, -3.038394, -2.370252, -2.8336518, -2.5989141, -5.2617593, -7.253482, -3.0367568, -3.5020788, -3.5063367, -2.5984735, -3.880897, -2.5269272, -3.3172085, -2.725622, -3.4208205, -2.113782, -3.9765637, -2.0370877, -2.4379008, -2.5530434, -3.2248905, -4.210036, -3.2597442, -2.683376, -3.125675, -2.848652, -2.3545458, -3.1987576, -3.697043, -2.5002239, -3.8537326, -4.3223076, -4.366369, -3.2022114, -4.1086054, -3.382559, -4.4218183, -2.5717256, -3.1717417, -3.6525395, -2.8365328, -3.9841425, -3.2895095, -3.5932245, -4.3293204, -4.3896503, -5.628051, -4.3096967, -3.7508967, -3.6594143, -3.3258815, -3.5776339, -5.7001376, -3.542185, -3.0637264, -2.8357048, -2.0344348, -2.1466126, -2.8275092, -8.12309, -3.0167618, -3.660664, -3.2416954, -2.6405907, -2.0970125, -4.1815867, -4.8249936, -2.958169, -3.3893027, -11.295491, -4.4177246, -3.719296, -2.8651376, -3.0947475, -3.5775409, -3.7627654, -2.813284, -3.600927, -3.3611822, -3.1788363, -2.55794, -2.8159835, -3.2947376, -3.492983, -2.9479876, -2.82707, -3.076763, -3.665544, -2.1067598 ], "pointIndex": [ 1, 1032, 256, 689353285, 358062710, 707465627, 928798311, 751922518, 735611480, 1058665567, 265321217, 269679651, 735792016, 100209954, 630601194, 16546650, 877686192, 2227350, 761466660, 548083317, 338882010, 735315837, 868603257, 100421950, 697474313, 100267563, 954840429, 753552253, 25036277, 171566342, 1064449270, 951461745, 76364998, 61220426, 1213400, 91618020, 204165751, 2335086, 595445634, 320319120, 765399906, 8414288, 468060394, 540322388, 1069996826, 378348830, 735579022, 109958692, 891522308, 100821343, 110160730, 101025242, 52293162, 231117526, 16804159, 114844563, 494015502, 243988449, 222627313, 735579234, 38781835, 759759526, 841227313, 131069421, 633475750, 477843141, 802167502, 44889059, 735338391, 16900265, 734973354, 224266811, 318602826, 35337, 1224263, 1090944909, 56727070, 530697219, 953531538, 799480296, 329471125, 132894792, 735474415, 865480170, 697060796, 813409491, 807276385, 987040578, 1031 ], "storeSequenceIndicesEnabled": false, "size": 256, "capacity": 256, "initialAcceptFraction": 0.125, "timeDecay": 1.0e-4, "sequenceIndexOfMostRecentTimeDecayUpdate": 0, "maxSequenceIndex": 1494, "compressed": true, "randomSeed": -1832695825309728817 }, { "version": "2.0", "weight": [ -1.7263805, -1.7375551, -1.7313173, -1.7518847, -1.7382256, -1.8148856, -1.7497174, -1.7751008, -1.7682782, -1.7795463, -1.7421398, -1.8266472, -1.8711087, -1.8068098, -1.7756518, -1.7882441, -1.801252, -1.8973166, -1.7912936, -1.874118, -1.838997, -1.901438, -1.8849925, -1.904245, -1.9089594, -1.8950796, -1.8757346, -1.815007, -1.8165854, -1.8207376, -1.834664, -1.7970071, -2.0420365, -1.8186653, -1.9001725, -1.9416976, -1.925906, -1.7918729, -2.0645015, -1.9327296, -1.9502766, -1.8531502, -1.8582855, -2.2072883, -2.0137906, -1.9007939, -1.938968, -1.9130193, -2.0598137, -2.2761853, -2.0687282, -2.3987145, -1.9022133, -1.923783, -1.940225, -1.9351351, -2.2480874, -2.0033512, -1.9436657, -2.217973, -1.9852718, -1.9654913, -2.1221738, -1.8002614, -2.0962842, -3.2507203, -2.6174097, -1.9439516, -1.9302056, -2.4891465, -2.0648394, -2.0536103, -2.4781923, -2.57167, -2.2196703, -2.1147714, -1.8358169, -2.47737, -2.2866445, -2.5095856, -3.876913, -2.0000772, -1.9559746, -1.8986975, -2.2375166, -2.2407198, -2.155431, -2.3410838, -2.3333297, -2.352641, -2.094627, -2.0666466, -1.9877744, -2.3980875, -2.3612285, -2.3800156, -2.0489552, -2.1511087, -2.2666194, -2.2914808, -2.493814, -2.131418, -2.1959467, -2.7689898, -2.4005754, -2.4278355, -2.180492, -2.7206013, -2.0130916, -2.5957193, -2.2647026, -2.1309671, -2.3937173, -2.808019, -2.796604, -2.5641506, -2.9082766, -2.1960948, -2.0550525, -3.4902134, -2.2626262, -2.0546598, -2.2353933, -2.2925892, -1.9780589, -2.676092, -2.3579953, -1.8052179, -4.061683, -2.124273, -2.243488, -6.8029437, -3.2897651, -4.5654554, -3.5403163, -3.3789957, -2.0621793, -2.7556863, -2.275963, -3.3505375, -3.1508522, -2.7905304, -3.0283778, -4.7304935, -2.2691193, -2.6516175, -5.4103274, -3.0850492, -3.808751, -2.2798278, -2.6754081, -3.649609, -3.43447, -3.3962407, -2.297451, -3.8745487, -2.7456691, -4.346253, -2.8765647, -2.6176047, -3.0547519, -4.024011, -4.148545, -3.075434, -2.3377926, -1.989783, -2.1525402, -2.4560719, -2.035318, -4.531904, -2.4122272, -8.901809, -4.3958845, -4.914483, -4.5451665, -2.666528, -3.0422502, -4.876383, -3.6195297, -2.6072137, -3.276356, -3.1958067, -2.519129, -2.3006656, -2.9947581, -2.6409235, -3.1454105, -2.9574306, -5.6988854, -2.8363302, -6.363191, -4.958148, -2.904896, -3.4956331, -2.8139682, -4.6646104, -2.503981, -2.3116431, -3.7402675, -2.9581175, -2.3116732, -2.837012, -4.2062826, -4.785396, -2.1955554, -2.675852, -2.9000273, -3.276603, -3.3937223, -2.9771085, -3.0301015, -3.150276, -3.587858, -2.2167044, -3.2472196, -2.772113, -3.528512, -2.1612778, -3.5337818, -3.165023, -3.3809435, -2.864679, -2.4150205, -2.3029518, -3.820228, -3.9436743, -2.6318831, -2.8081706, -5.3189373, -3.8409364, -3.647043, -6.631731, -4.7184677, -3.422374, -3.1660762, -2.8524973, -2.216437, -3.2280953, -2.7843888, -5.808835, -3.6174486, -2.4131265, -3.79252, -2.1694925, -2.478608, -2.7515159, -7.3641315, -2.8473504, -3.9948292, -4.4298363, -2.7575362, -4.147462, -3.0440564, -2.7988882, -3.5733883, -3.9266362 ], "pointIndex": [ 0, 1033, 256, 731349338, 14613626, 738787189, 208612697, 872529539, 362840922, 736194611, 85092925, 184539319, 649673555, 689559781, 935619044, 111255393, 386978073, 282355853, 147543623, 217862, 663971652, 329853833, 293228994, 739615088, 1009879862, 376859430, 63225070, 143365238, 84767336, 101898424, 1053135895, 322310899, 229560907, 733539971, 1061815033, 152980298, 738877174, 220340307, 31223905, 800126435, 925351849, 111834680, 477520247, 62617567, 854970829, 739847432, 837248069, 68780741, 444068599, 954926931, 476489926, 101668129, 111595036, 1093735905, 882851311, 113927368, 738928460, 48728107, 111969491, 93189843, 250157976, 946210476, 903589128, 886945811, 153603969, 465215838, 21531192, 281552136, 636349537, 193607220, 81339610, 476765175, 216249893, 50438177, 626619167, 565743034, 931858666, 1050203583, 426998869, 650137156, 738984040, 1022887014, 14415768, 31276962, 702039505, 739501876, 895804636, 490455854, 1033 ], "storeSequenceIndicesEnabled": false, "size": 256, "capacity": 256, "initialAcceptFraction": 0.125, "timeDecay": 1.0e-4, "sequenceIndexOfMostRecentTimeDecayUpdate": 0, "maxSequenceIndex": 1494, "compressed": true, "randomSeed": 7114851682173006812 }, { "version": "2.0", "weight": [ -1.7213378, -1.7361705, -1.7221712, -1.7483038, -1.7481142, -1.734512, -1.7354586, -1.7692962, -1.7863561, -1.7501098, -1.8153974, -1.7605233, -1.7958629, -1.7541641, -1.7527289, -1.8128883, -1.7716357, -1.8419961, -1.798154, -1.8803853, -1.8073257, -1.8491515, -1.8381054, -1.7999474, -1.834759, -1.8552243, -1.9752426, -1.8100715, -1.8214978, -1.815661, -1.7622541, -1.8608704, -1.937013, -1.8063078, -2.097493, -2.0325112, -2.090001, -2.2030551, -1.880542, -1.8989832, -1.9169465, -2.0454733, -2.3608801, -2.0398042, -1.9210875, -1.9601887, -2.1688564, -1.8921643, -2.1079338, -1.8846809, -1.9053581, -1.8609388, -1.861419, -1.9769111, -2.0520697, -2.0500374, -2.1605208, -1.8724028, -2.4285762, -1.9565207, -2.0551217, -2.1283052, -1.780987, -2.0475042, -1.8611298, -2.0052965, -2.480902, -2.116227, -3.3740113, -2.248864, -2.608668, -2.3502972, -2.0546894, -2.1364262, -2.493374, -2.5947201, -2.2172499, -1.9032508, -2.2693121, -2.1549084, -2.317325, -2.1600435, -2.6500542, -2.3052373, -2.0892093, -2.7369802, -2.6205173, -2.3193016, -2.1746347, -2.361723, -2.1305943, -2.4848862, -2.1849778, -2.4694436, -2.3367288, -2.1838152, -2.0030391, -3.9612434, -2.7162955, -2.4098318, -2.184592, -2.4032464, -1.9063706, -2.3570921, -1.9482576, -1.9491566, -1.8808714, -2.0300531, -2.1099784, -2.2152898, -2.096946, -2.1582355, -2.911972, -2.8457968, -2.1733398, -2.0358014, -1.8754802, -2.7525644, -2.5826657, -2.1905253, -2.1240547, -2.1860065, -2.3271196, -2.3023238, -2.2108738, -2.3863454, -1.9728581, -2.0932593, -2.722052, -2.7966716, -3.0517302, -2.1796262, -2.0828886, -2.562471, -3.213032, -4.5760326, -2.4981914, -3.4045708, -5.9084907, -2.377274, -2.4985743, -3.1099327, -2.7495134, -2.5695348, -3.187431, -2.2065935, -2.4225142, -4.160821, -2.4481084, -4.11453, -5.694333, -2.6227708, -4.109512, -4.6349754, -3.980821, -2.2555346, -3.3175068, -2.3780687, -3.4288237, -2.2603228, -3.2764254, -2.3525176, -2.799586, -2.3389485, -3.0396752, -3.6468666, -4.069407, -4.4919386, -2.6284664, -2.120248, -4.5610027, -3.5115538, -3.415773, -2.7309248, -3.5663652, -5.1245418, -3.8632941, -2.4682183, -4.012755, -2.8533666, -3.6104355, -2.9533494, -4.055925, -4.165349, -3.9857836, -2.2085397, -4.4871273, -4.0958743, -2.6484976, -2.529068, -3.3469458, -2.4826763, -2.2764714, -3.134541, -2.082051, -9.624558, -4.521997, -3.217462, -4.2082963, -3.1595595, -4.406593, -5.5054197, -5.135093, -3.4735184, -4.4578037, -3.7940795, -2.4316862, -4.425623, -2.9476283, -2.2842023, -3.7966342, -2.10466, -2.76057, -2.1770823, -2.3118787, -3.3338983, -2.4358966, -2.508122, -2.1342807, -2.881158, -2.2848332, -3.1506746, -3.3806746, -2.2328131, -2.6429768, -4.078485, -3.1872077, -3.1687684, -3.6513085, -2.7235165, -3.5960937, -2.1952925, -2.744159, -2.8644168, -5.7612257, -3.5861068, -4.144304, -4.885823, -2.9428275, -2.2381268, -4.2431483, -2.7445326, -2.2255795, -2.9216354, -3.0350933, -3.3693304, -2.9375076, -4.2570996, -2.4565692, -3.0399098, -2.8765717, -3.1432006, -2.9929404, -2.4635708, -3.6228664 ], "pointIndex": [ 0, 1033, 255, 102282497, 402100990, 263115829, 713115, 1040384128, 771063143, 768652959, 736670769, 152013919, 713599392, 627315414, 111936508, 102347984, 547455531, 737257605, 534676939, 846479071, 748973419, 209359415, 597045158, 39458129, 108697843, 111921523, 671538193, 32777895, 90930055, 102374417, 228443369, 737166609, 233174389, 737625902, 324540835, 1012123581, 815480795, 776409398, 547506257, 291907161, 102283229, 56760764, 244724518, 737177934, 1061307958, 167589652, 17325972, 689631081, 848289559, 324193176, 837187061, 626573700, 278319781, 164757709, 371895, 166495369, 637255259, 180330729, 9325741, 781197039, 879363921, 30034693, 93788208, 737511564, 605241038, 699330485, 294026927, 141260978, 152436549, 547490228, 735083165, 153743430, 306299780, 795663008, 269647623, 560345643, 164680794, 736927768, 325325629, 737264782, 300121328, 1001897653, 131039206, 71436045, 552214868, 25821548, 637943456, 1105481408 ], "storeSequenceIndicesEnabled": false, "size": 255, "capacity": 256, "initialAcceptFraction": 0.125, "timeDecay": 1.0e-4, "sequenceIndexOfMostRecentTimeDecayUpdate": 0, "maxSequenceIndex": 1494, "compressed": true, "randomSeed": -3818791177366136709 }, { "version": "2.0", "weight": [ -1.7702423, -1.7741617, -1.7761874, -1.8201277, -1.7830086, -1.7889271, -1.7833676, -1.8924297, -1.874537, -1.7873601, -1.7973388, -1.8079433, -1.8390552, -1.7958614, -1.814892, -1.9106158, -1.9397742, -1.9598393, -2.1195445, -1.8822867, -1.8601811, -1.8263239, -1.8335419, -1.8965925, -1.8371737, -1.8483274, -1.9001577, -1.8762997, -1.8220085, -2.0048501, -1.819184, -1.9703261, -1.9413223, -1.9491875, -2.1189895, -2.1726112, -1.965673, -2.5208008, -2.2000847, -1.9716797, -1.8830699, -1.8652872, -1.898027, -1.9595675, -1.8423129, -1.8456022, -2.1123471, -2.1530201, -2.092249, -1.9827334, -1.8859129, -2.0667198, -1.9365962, -1.9075276, -1.9287502, -1.9576122, -1.8889908, -1.9392532, -1.9073569, -3.0292616, -2.0586112, -2.083684, -2.1338289, -2.0773046, -2.2736607, -2.734866, -2.3995154, -2.7925901, -2.0446103, -2.3112795, -2.466452, -2.227907, -2.4852831, -2.9385371, -2.014702, -2.7009735, -2.9879744, -2.6110694, -2.2149563, -2.028647, -2.2171886, -2.1633236, -1.9537677, -3.0489364, -2.1664395, -1.9824026, -2.9345503, -2.3468847, -2.2192733, -2.2084255, -2.6179307, -3.1664317, -1.9642246, -2.3182428, -2.3802795, -2.184298, -2.4220433, -2.1763873, -2.5785458, -2.0459166, -2.329075, -2.488287, -2.4209292, -2.289788, -2.432514, -3.602149, -2.2484367, -2.1083975, -1.9968246, -2.41732, -2.0026295, -3.0169873, -2.1224093, -1.9760996, -2.382224, -2.0337443, -2.035265, -2.2563734, -3.0550318, -3.084549, -3.300399, -2.7731838, -2.263299, -2.2811584, -2.718737, -2.45838, -2.9797404, -5.3977304, -2.3861601, -2.578384, -3.7122684, -8.983812, -2.9973774, -4.0429688, -4.6303134, -3.2663412, -3.2816062, -2.323853, -3.3423917, -4.5679555, -3.444484, -3.4950154, -4.2491784, -5.39973, -3.4007435, -7.403896, -2.6254303, -3.2303808, -3.6560638, -4.3585124, -2.105285, -6.5697093, -3.3331714, -3.7785146, -3.531168, -5.574697, -3.2225053, -4.5398073, -2.4795613, -3.6858013, -2.3718863, -2.5371513, -3.7150352, -2.5630503, -2.3375943, -2.902592, -2.5773351, -3.599029, -3.5350518, -6.773025, -3.0676215, -3.2018552, -2.5566518, -3.6761866, -4.0427117, -2.5090013, -2.543057, -4.6302094, -3.399911, -3.6339245, -6.434297, -3.2186852, -4.402264, -4.718331, -3.476106, -2.2835002, -4.386716, -2.4162905, -2.8879254, -2.3906515, -2.549378, -3.7428405, -3.4365635, -4.513357, -5.2633185, -3.860512, -2.5353842, -3.062731, -2.9334655, -4.586098, -2.68154, -3.8288786, -2.4388762, -2.887588, -2.8646297, -3.2624207, -3.6507297, -2.5473955, -2.7972898, -2.5632856, -2.526004, -3.6276956, -4.005558, -2.4402428, -2.9025264, -2.750446, -3.081374, -5.848348, -3.2820542, -2.473018, -5.4867163, -2.3861876, -2.1360703, -3.5660334, -4.956147, -3.6622944, -2.6745722, -2.1847558, -4.5681486, -3.0090547, -2.9648213, -3.0344598, -3.042011, -3.9562647, -4.75239, -3.0026288, -5.348022, -6.03404, -3.1813967, -3.0963845, -3.6727166, -3.4077396, -3.925601, -2.984088, -5.1343, -2.455299, -3.2948701, -3.0572507, -2.553569, -3.5304341, -2.7200413, -2.47091, -5.0832996, -7.197777, -5.735646 ], "pointIndex": [ 0, 1029, 255, 1070066769, 296505090, 17082542, 35027785, 737743212, 110350679, 658687155, 196031728, 844566230, 632394665, 252047322, 825388892, 1054905746, 195921458, 600571869, 30779653, 238901959, 418264477, 208034779, 738096546, 1082870844, 216466534, 738161860, 110550369, 101399425, 588454753, 222896144, 101501350, 530370165, 581398823, 865748093, 19339728, 581457754, 277277224, 976110164, 111019908, 794269074, 988807715, 227532523, 738052345, 742673355, 633035817, 158109115, 44656345, 118289107, 110432056, 100835067, 529496953, 522640781, 55513393, 152485492, 952755174, 522060870, 530435245, 359743779, 952786763, 613298843, 302351015, 999375620, 745607579, 316643295, 2446261, 737407571, 928288389, 293593286, 755411212, 46435184, 258011502, 101104250, 45642214, 1068415975, 27844964, 97070985, 491061346, 821235145, 111238044, 84606955, 466830318, 466249765, 783558506, 475390916, 357468809, 55681109, 759168698, 1092706086 ], "storeSequenceIndicesEnabled": false, "size": 255, "capacity": 256, "initialAcceptFraction": 0.125, "timeDecay": 1.0e-4, "sequenceIndexOfMostRecentTimeDecayUpdate": 0, "maxSequenceIndex": 1494, "compressed": true, "randomSeed": 6086357924367131302 }, { "version": "2.0", "weight": [ -1.7891973, -1.7938184, -1.7990597, -1.794038, -1.8355857, -1.8043972, -1.8624703, -1.8014457, -1.9507738, -1.8365257, -1.8568066, -1.8230112, -1.8497584, -1.9112098, -1.9273734, -1.8456591, -1.9012897, -2.051263, -1.9693652, -1.9001044, -1.8517295, -1.9004611, -1.9388436, -1.8347762, -1.8312088, -1.8608724, -1.9499263, -2.015206, -1.9469022, -1.943752, -1.9391099, -1.851484, -1.9697275, -1.9337447, -1.9535925, -2.55787, -2.1713665, -2.162509, -1.9912992, -2.2144854, -1.9345199, -2.4184113, -2.1061249, -1.9422418, -1.9594705, -2.0076475, -2.0332174, -1.9057178, -1.9363347, -1.8374417, -2.1650097, -2.156692, -2.3073993, -1.9596207, -2.1123805, -2.073181, -2.0820956, -2.0289507, -2.0272346, -2.2688544, -1.96197, -2.037199, -1.9644263, -1.9029511, -2.1392868, -2.0010538, -2.0658603, -2.4028983, -2.031586, -2.4779835, -2.55722, -2.6982176, -2.5748029, -2.266887, -2.7431335, -2.3569906, -2.8150468, -2.2750762, -2.5548105, -2.4642677, -2.6854718, -1.9813852, -2.014481, -2.511371, -2.8830795, -2.16451, -2.3447776, -2.065102, -2.4947796, -1.9728829, -2.305431, -2.3086157, -2.2161295, -2.2300034, -2.3863747, -2.309367, -2.6166027, -2.0461657, -2.0063524, -2.2658095, -2.1662562, -2.3095102, -2.399888, -2.172814, -2.554477, -2.8587255, -2.8032956, -2.4694288, -2.2257938, -2.2674966, -2.5122075, -2.2708306, -2.5574882, -3.0335155, -2.6084294, -2.3969684, -2.2430587, -3.0452266, -2.0837376, -2.7869911, -2.5844896, -2.3934283, -2.7919724, -3.4120383, -2.616348, -2.1856997, -2.629461, -1.9124812, -4.512979, -4.584976, -2.4355335, -2.0747797, -2.308362, -2.4352875, -3.2322314, -2.471324, -2.7473583, -3.5841548, -2.3818414, -2.582833, -7.105225, -2.8461235, -3.6598423, -6.1045427, -3.2373908, -3.3672473, -3.2429414, -3.654256, -3.1720347, -2.7951217, -3.622787, -2.9572363, -2.5096502, -5.2478595, -2.9272563, -5.062048, -2.2758002, -3.0355945, -2.758816, -2.53904, -2.8399243, -2.899185, -2.8000119, -2.6176448, -2.1764967, -2.8477302, -3.8203726, -2.7194335, -3.333414, -3.8880222, -3.387632, -2.832152, -3.8208325, -2.8803353, -3.148308, -2.1635082, -3.6437538, -6.291415, -2.556656, -3.2039547, -2.5613267, -2.8584914, -2.312199, -5.0586023, -2.5204206, -2.5504262, -2.8208148, -2.2910707, -3.1887956, -2.6971226, -2.850193, -4.6429367, -3.400458, -2.8184445, -2.719052, -2.2813413, -2.2796204, -3.3232892, -3.165229, -3.7672992, -4.649677, -4.32578, -2.2768762, -3.4076962, -6.425753, -3.6577134, -3.4111705, -3.7387614, -2.376335, -5.414337, -3.8767424, -2.938985, -3.1410298, -3.217051, -2.9517841, -2.5554893, -3.1065688, -2.747226, -3.1555014, -2.39086, -4.164318, -3.961989, -2.9115572, -3.7175267, -2.638704, -3.8871746, -4.5865183, -5.3320184, -3.2834165, -4.9169993, -3.4118302, -3.037287, -2.8454387, -2.3995957, -2.5613315, -3.7722256, -4.1652484, -2.6312847, -2.4832075, -6.6289434, -3.5507565, -2.9681396, -3.646959, -4.3364744, -2.6795216, -3.705987, -3.0310488, -3.9621572, -4.4465737, -4.2029114, -2.9274888, -2.4574783, -5.6766067, -3.7883599, -4.292392, -1.9271429 ], "pointIndex": [ 0, 1020, 256, 226860082, 241512673, 1028514, 723551144, 724162855, 949770846, 38667373, 724188248, 766423885, 704485949, 109106601, 357033163, 723546981, 99095401, 182257362, 723488220, 8610383, 1063290393, 784982760, 919321232, 870395921, 956194051, 301362488, 215810088, 41501026, 99138166, 801304245, 99074966, 68067424, 980303516, 46445462, 241967848, 16369592, 190912487, 757402334, 43923004, 254452877, 90790379, 899012327, 520475393, 520975967, 710639982, 34664749, 36582529, 414930720, 528773858, 108502724, 824192144, 528623875, 11399825, 85788177, 724121779, 99435884, 39188759, 163329947, 593182680, 988942728, 808378465, 170087464, 72980154, 977459099, 778872932, 288901501, 76250440, 131723719, 8387593, 723618749, 176587137, 413946635, 1038566354, 238951605, 8649378, 905562916, 723751455, 1023415449, 41173026, 485331826, 226684860, 99550015, 724162830, 939031945, 950554570, 168810069, 683416579, 921198886, 991 ], "storeSequenceIndicesEnabled": false, "size": 256, "capacity": 256, "initialAcceptFraction": 0.125, "timeDecay": 1.0e-4, "sequenceIndexOfMostRecentTimeDecayUpdate": 0, "maxSequenceIndex": 1494, "compressed": true, "randomSeed": 130347926699401324 }, { "version": "2.0", "weight": [ -1.7458738, -1.7459202, -1.7540773, -1.749542, -1.7758787, -1.7663901, -1.7597626, -1.7983912, -1.7967318, -1.790723, -1.7942529, -1.7698159, -1.7901419, -1.7606037, -1.7695391, -1.8286564, -1.8160319, -1.816564, -1.8332781, -1.8665884, -1.8134235, -1.8990643, -1.8318924, -1.8472352, -2.2606862, -1.8384478, -1.805894, -1.8035682, -1.913579, -1.9970407, -1.7931528, -1.9376734, -1.9632316, -1.837514, -1.9540465, -1.8792814, -1.9826835, -1.8808243, -1.8765384, -1.9517182, -1.8930686, -1.9339737, -1.8993996, -2.2783897, -2.1686013, -1.8984512, -2.0246086, -1.8897066, -1.9112937, -2.2872317, -2.2853355, -2.0051572, -1.8750285, -1.8121555, -1.8786547, -1.8933679, -2.003782, -1.9410443, -1.9946569, -2.4242601, -2.0011337, -2.1233604, -1.9996283, -2.2002804, -2.5613973, -2.0985966, -2.1519492, -1.9718783, -2.069552, -2.0823627, -2.119145, -1.9674317, -2.4302022, -2.5696392, -2.0152953, -1.965902, -3.1185346, -2.0377831, -2.8895268, -2.2058628, -2.2036233, -2.2515984, -2.0698123, -2.926231, -2.3575144, -1.9349142, -1.9187722, -2.3093095, -2.3299356, -2.2274444, -2.3721182, -1.9954238, -2.0040684, -2.1480374, -2.3712957, -1.9408329, -2.2641346, -2.5376055, -2.378402, -2.4461465, -2.72218, -2.9016545, -3.1972055, -3.4462445, -2.1440892, -2.2128904, -2.7813263, -2.4548275, -1.9589072, -2.2507253, -1.9105552, -2.838215, -1.8960181, -2.129582, -2.564832, -1.9558966, -2.315645, -2.0832243, -2.1454003, -2.7185538, -2.744642, -2.3759334, -2.0640194, -2.6081028, -2.7267694, -2.530277, -2.1042588, -3.52893, -4.7533956, -6.1599216, -2.7777214, -2.1850455, -5.1596055, -4.6121492, -3.4246397, -3.0896103, -2.8528311, -2.8153925, -2.3002465, -2.5653515, -2.1697829, -2.562335, -2.392597, -2.8613794, -4.6819, -2.705143, -3.0419872, -3.25114, -3.7311366, -2.986425, -3.7844992, -2.8878086, -3.5765872, -4.542649, -3.7292254, -3.1321683, -2.1281826, -4.6114335, -3.605644, -2.778752, -6.076429, -3.567361, -2.657346, -3.359025, -2.8356557, -2.7868803, -2.2494237, -4.4436207, -4.687628, -4.907177, -2.7419994, -3.3269196, -2.4788537, -2.1154923, -2.7898583, -3.3839576, -2.9270916, -4.095572, -3.4070337, -2.5832121, -2.338569, -4.0131354, -4.154775, -2.546357, -2.1281435, -2.2800431, -2.0756383, -2.39434, -2.5916631, -3.218564, -3.0408003, -2.1862967, -2.6716952, -2.347239, -2.2905219, -3.3032372, -2.5469925, -2.4376462, -3.320769, -3.902425, -2.9026523, -2.7472348, -4.1579685, -3.2284787, -3.8274834, -3.5813596, -3.491209, -3.4919388, -4.2455463, -2.287259, -2.2776346, -3.9811766, -2.5823433, -4.076829, -3.4749491, -2.5761414, -2.8577077, -5.204262, -2.8644261, -3.53813, -2.4176593, -2.8726804, -2.9213688, -5.10005, -4.142307, -2.0991101, -3.3309941, -5.661359, -2.4053798, -4.96297, -3.2823954, -4.2527103, -4.3435597, -2.5295732, -4.6548147, -2.224739, -3.4724247, -3.3562639, -4.784001, -3.1374204, -2.7418466, -3.4137278, -3.5025773, -2.9059665, -3.780606, -2.6394105, -2.9706342, -3.7509956, -6.758096, -3.0541124, -2.8361156, -4.890127, -2.767828, -4.053451, -3.3795867 ], "pointIndex": [ 3, 1024, 255, 185576736, 888950489, 779888112, 741163838, 959689728, 972420614, 90006619, 1027785997, 718388930, 96119507, 861024445, 380700131, 78693319, 718166718, 726281137, 40314926, 619702085, 9107576, 297396600, 519616482, 267044040, 1023621944, 718327921, 834201033, 106427222, 49706833, 64609982, 917838234, 609414568, 27809213, 198416687, 228836613, 138085226, 80462144, 675439127, 841923879, 241446, 853438035, 416406771, 471276313, 88331809, 718167158, 870758307, 1053506313, 193931755, 58565766, 105974430, 873464539, 211279675, 106338179, 155673097, 738631717, 32122147, 330452441, 96178969, 96133784, 96187348, 96122436, 96327680, 736019852, 969365585, 452668911, 37816136, 219023866, 110373651, 354571714, 367387698, 717758924, 853153560, 5844897, 571426959, 609705866, 319838337, 172264702, 281239823, 733930512, 364618981, 699516135, 1046195557, 730336195, 29948157, 714269810, 863378003, 519811510, 322668571 ], "storeSequenceIndicesEnabled": false, "size": 255, "capacity": 256, "initialAcceptFraction": 0.125, "timeDecay": 1.0e-4, "sequenceIndexOfMostRecentTimeDecayUpdate": 0, "maxSequenceIndex": 1494, "compressed": true, "randomSeed": -8018290736902480486 }, { "version": "2.0", "weight": [ -1.7742779, -1.782927, -1.7935271, -1.8049732, -1.7903272, -1.8037083, -1.811745, -1.817572, -1.8770543, -1.8074085, -1.8207537, -1.8211355, -1.8509297, -1.9178317, -1.8556215, -1.8207356, -1.8654337, -1.8883383, -1.9475877, -1.8493286, -1.8847728, -1.9458281, -1.8740331, -1.8927585, -1.8659846, -1.9389685, -1.9860533, -1.9296442, -1.9357408, -1.863457, -1.8559549, -1.8219192, -2.0432744, -1.870771, -1.953769, -2.301594, -2.4724388, -2.4559312, -2.0348008, -1.9868361, -1.9131081, -2.0091815, -1.8920166, -2.134798, -2.047697, -2.0522218, -1.9108384, -1.8949109, -2.0104938, -1.885111, -1.8947254, -2.0070653, -2.028318, -2.0352836, -2.2318938, -1.9758452, -1.9652188, -2.0490868, -2.000966, -1.9816724, -1.9216161, -2.1491387, -2.1937797, -1.8549658, -3.3671987, -2.4767044, -2.072395, -2.1930852, -2.2067597, -2.0510044, -2.005744, -2.397834, -2.8201542, -2.6242805, -2.525026, -3.0812702, -2.8736756, -2.804161, -2.1336691, -2.7248974, -2.455642, -2.0994189, -2.0893044, -2.615462, -2.9190938, -2.2559266, -2.191257, -2.1453724, -2.3776965, -2.0627317, -2.4819498, -2.2644243, -2.3848276, -2.7275438, -1.9400868, -2.6268668, -2.1447332, -2.4450848, -2.7891557, -2.0396283, -1.9161348, -1.9080963, -2.0300424, -2.632521, -2.0695016, -2.083452, -2.8567162, -2.1522179, -2.4074516, -2.9479344, -3.371155, -2.0262294, -2.4203074, -2.0013454, -2.356698, -4.088611, -2.5771027, -2.145145, -2.1506948, -2.2148411, -2.1181817, -2.1483655, -2.3675692, -2.5563858, -2.1789782, -2.4433784, -2.882444, -2.0437548, -2.97634, -4.9177, -3.4715421, -4.124766, -4.4633274, -3.3401403, -2.3922188, -4.265721, -3.1980264, -4.0759006, -2.535098, -2.5249221, -3.4394972, -2.6583657, -3.174206, -3.934965, -4.263968, -4.2605233, -3.1849203, -2.8849237, -3.0997977, -3.2478483, -2.5998013, -4.2987695, -3.332344, -4.200896, -3.704933, -6.0851536, -4.104127, -2.6303682, -2.3432426, -3.2087345, -6.306906, -2.5917318, -4.953048, -4.36103, -3.274854, -3.2982278, -2.1126833, -3.2233055, -2.9062939, -3.29822, -3.2420087, -2.9634907, -4.788699, -7.4372206, -2.8611424, -2.582046, -2.2423937, -3.9410949, -2.9252014, -4.3836813, -2.4027176, -8.114465, -3.0931153, -3.2290485, -2.7975178, -2.4578404, -2.662729, -2.7658195, -5.132716, -2.4653416, -2.5699165, -4.2840476, -6.238168, -3.4399889, -2.8105867, -4.5309677, -3.4960177, -2.994868, -2.9653075, -2.1339335, -2.3873973, -2.1707273, -2.8777766, -1.9274333, -2.5151055, -2.5358534, -2.5167193, -3.9277947, -2.839244, -2.5179868, -3.5413857, -2.103055, -4.5783806, -3.2729514, -3.3976986, -2.7353375, -2.617493, -6.6083703, -2.6767309, -2.9664655, -4.713502, -4.1384845, -3.643049, -2.028004, -2.3718233, -2.9049892, -2.6818995, -3.360933, -5.6230044, -2.793938, -5.8042717, -4.636513, -4.344588, -3.3438268, -4.0825515, -2.307448, -4.179932, -4.9495397, -2.7999353, -2.8246424, -2.3057222, -2.9527013, -2.9480212, -4.1105733, -2.1817973, -3.0926511, -2.449598, -3.0435505, -4.8923807, -5.040625, -2.8466733, -2.515366, -3.4752016, -5.507589, -4.8790283, -3.6216578 ], "pointIndex": [ 0, 1034, 256, 6454630, 228420051, 102117739, 145331690, 717941456, 47071363, 476793545, 966579389, 296174573, 544604988, 102824353, 112250204, 863461973, 259253184, 432420108, 741546479, 207462832, 336882107, 438512617, 1009020122, 742047311, 93815581, 111515620, 112422621, 152777462, 25849220, 375947882, 179605581, 534561526, 151061379, 6400544, 83317513, 207005262, 657785980, 951604438, 772742693, 376716513, 741824878, 741386078, 628491472, 544947358, 777602277, 1054073684, 111797695, 111521268, 432400235, 933067540, 96414494, 741443604, 719962008, 286342573, 93196954, 111765021, 61125845, 101847200, 82633016, 101784560, 33247368, 28536167, 142607367, 213326518, 741460695, 479005298, 217487759, 93205143, 86497712, 350142065, 227244858, 742020688, 266740190, 210815702, 784426999, 150922760, 844471198, 102482959, 741696763, 310118424, 456440605, 4315620, 390545626, 534640201, 31591804, 705477199, 742004574, 770818026, 1034 ], "storeSequenceIndicesEnabled": false, "size": 256, "capacity": 256, "initialAcceptFraction": 0.125, "timeDecay": 1.0e-4, "sequenceIndexOfMostRecentTimeDecayUpdate": 0, "maxSequenceIndex": 1494, "compressed": true, "randomSeed": 7607273630454256775 }, { "version": "2.0", "weight": [ -1.6166878, -1.6180277, -1.6216232, -1.6228727, -1.6219813, -1.635756, -1.6265807, -1.6560133, -1.6309868, -1.6393675, -1.6336645, -1.636524, -1.6603762, -1.6327052, -1.6808931, -1.6671044, -1.6852964, -1.7933347, -1.6837842, -1.6893544, -1.6658978, -1.649125, -1.6919701, -1.6879814, -1.6927471, -1.7841454, -1.6966611, -1.6869533, -1.6763427, -1.6893233, -1.8322129, -1.6892469, -2.0100207, -1.7677158, -1.932623, -1.8616197, -1.8876401, -1.8663489, -1.6938057, -1.8469261, -1.977507, -2.0190978, -1.8905826, -1.7598318, -1.6648656, -1.9908979, -1.8212391, -1.9193687, -1.7402436, -1.7644914, -1.8605156, -1.9337134, -2.0262332, -1.8630294, -2.0668433, -1.6899385, -1.8363451, -2.0924673, -1.8828721, -1.7820061, -1.6921434, -1.9934251, -2.4187918, -1.7382892, -2.2235272, -2.7753878, -2.516987, -1.8692182, -1.9802023, -2.5232034, -2.0636158, -2.0971892, -2.4341168, -2.2007446, -2.2460756, -1.999314, -2.2191515, -2.7549808, -1.7425053, -2.4137955, -1.9388118, -2.80071, -2.292174, -2.1451943, -2.828744, -2.061893, -2.154893, -1.7792556, -2.602723, -2.1476638, -2.471334, -2.0935545, -2.1884823, -2.2556326, -2.6571348, -2.2234051, -2.1578372, -2.855582, -1.8165001, -1.8029543, -1.9425266, -2.646843, -1.9401612, -2.1620598, -2.0720956, -2.7948859, -2.0363657, -2.141345, -1.9503344, -2.6766877, -2.984802, -1.8757877, -1.867727, -2.9219038, -2.28071, -2.2559128, -2.573712, -3.036459, -2.233641, -2.4557755, -2.5671406, -1.7194425, -1.8867804, -2.19423, -2.3825018, -2.6712582, -2.4469564, -1.7476544, -7.425859, -3.150718, -2.2373273, -3.6050756, -6.20976, -7.979375, -5.4883556, -3.5081415, -3.6902416, -1.9828478, -2.2691176, -4.2087407, -3.6642642, -3.1641202, -8.9014225, -2.4093835, -2.8579707, -5.507862, -3.0440426, -3.4115152, -3.6423595, -2.9895892, -3.7129953, -3.0018919, -2.4316092, -5.2371306, -2.9627035, -3.7204707, -3.455863, -2.4724798, -2.5818582, -3.763166, -2.7013094, -2.1444993, -2.0187795, -4.480569, -3.7178774, -2.3083253, -3.8219557, -3.5712507, -2.5033422, -4.075861, -3.814081, -2.2165027, -3.4429348, -4.63539, -3.060742, -2.1189203, -3.6775537, -2.802239, -4.579251, -2.1857872, -3.1271665, -3.2500339, -2.6241705, -2.244974, -2.158894, -2.5828085, -2.495642, -2.4378066, -4.4089704, -2.9693635, -2.972198, -2.732911, -4.9379916, -3.1752994, -2.2322066, -3.0193737, -3.6216593, -2.3240645, -4.4654694, -3.4344585, -2.8935435, -2.6081583, -3.1192338, -3.543054, -3.6092315, -3.9698086, -3.2849846, -3.2602642, -2.1961646, -2.1579323, -2.7234974, -3.0247269, -3.6815965, -3.5696614, -3.1362653, -3.4984534, -2.2487803, -2.2461174, -2.0616622, -3.310472, -2.9053435, -4.337758, -3.1315777, -3.5387976, -2.6110525, -6.262158, -1.9734536, -2.9705286, -3.0596435, -3.2770479, -2.4924855, -2.3972082, -3.817022, -4.488544, -4.287587, -3.3106089, -4.35999, -4.208139, -2.5065055, -2.6681383, -4.110587, -2.7485754, -3.1977475, -1.8630259, -1.9024656, -2.824685, -2.4826117, -3.794629, -3.091652, -3.2088513, -2.4113505, -3.5489256, -3.6256285, -2.925018, -2.5376785, -2.987564 ], "pointIndex": [ 0, 1032, 256, 739101521, 359625618, 56663841, 189462625, 8938549, 84363683, 102175161, 174017939, 759976805, 738942780, 739344262, 969673660, 758555770, 101471606, 500490033, 154933567, 992269854, 17420240, 591780533, 1016705849, 983580939, 903564063, 212392093, 299500303, 785494059, 542238235, 8626715, 101890554, 322185489, 433953024, 84407643, 21858550, 847498684, 719400066, 1059808564, 894986123, 294786739, 101471993, 463565086, 738890235, 534255403, 739141409, 102390826, 322363837, 9251652, 155259125, 35140253, 796156754, 111319317, 382482816, 101471644, 52280181, 927816936, 479464938, 102088339, 600869544, 104218943, 34807030, 647206627, 1090255153, 17857989, 177006409, 178807254, 827125293, 2772737, 711198074, 816283371, 93781677, 106285378, 209488292, 431628897, 386384872, 41758398, 292157884, 413259159, 542606875, 17523695, 455745233, 58651042, 921613451, 534372261, 46354817, 739124588, 105290257, 1057593386, 1032 ], "storeSequenceIndicesEnabled": false, "size": 256, "capacity": 256, "initialAcceptFraction": 0.125, "timeDecay": 1.0e-4, "sequenceIndexOfMostRecentTimeDecayUpdate": 0, "maxSequenceIndex": 1494, "compressed": true, "randomSeed": -757304452677969426 }, { "version": "2.0", "weight": [ -1.7135965, -1.7136995, -1.7157676, -1.7181004, -1.7154931, -1.8246434, -1.7362574, -1.7346522, -1.8199588, -1.7231078, -1.720099, -1.8612716, -1.83821, -1.7492942, -1.7446247, -1.8284454, -1.8603145, -1.9138993, -1.831228, -1.8718604, -1.91732, -1.7551297, -2.033309, -1.8765991, -1.9802958, -2.058483, -1.84605, -1.8352607, -1.8584217, -1.8029315, -1.7596902, -1.8959981, -1.9026619, -1.871997, -1.8782265, -2.0252016, -2.358552, -1.8533338, -2.083486, -1.9487244, -1.882554, -2.3023517, -1.9679939, -1.8223289, -1.8072971, -2.100339, -2.0707767, -1.9666268, -1.96567, -2.5006826, -2.1979032, -2.529154, -2.0866454, -1.954549, -1.8969742, -1.8679923, -1.9180048, -1.9437361, -2.1521046, -2.1750622, -1.9755299, -1.9878112, -1.8535962, -2.0658393, -2.0703077, -2.6077945, -2.06919, -1.9849111, -3.7793386, -2.493756, -1.9866674, -2.0299413, -3.1066453, -2.6105788, -2.399347, -1.9853977, -2.2428186, -2.2038195, -2.1202793, -2.2240715, -2.861552, -1.891804, -1.9685422, -2.3588803, -2.4016817, -2.257354, -2.43017, -1.8820353, -1.89598, -2.3582041, -1.9059237, -2.4794056, -2.6336129, -2.449261, -2.1423671, -2.46767, -2.4063032, -3.253103, -2.4521403, -2.572619, -2.8532908, -2.4926558, -2.2619705, -2.8127205, -2.6316361, -2.3038146, -2.5326352, -2.7956316, -2.110337, -1.9526602, -2.311502, -2.0347152, -2.957697, -2.0455315, -2.0883517, -2.1302292, -2.7572336, -2.6276178, -2.4254637, -2.5230994, -2.1851058, -2.0715158, -2.0062604, -2.202653, -2.5688324, -2.925744, -2.4261808, -2.4870608, -2.187646, -3.0609841, -2.6472135, -3.3474867, -3.581345, -2.7716699, -2.7266572, -4.3082376, -3.310241, -5.471515, -4.33562, -2.650184, -4.791706, -2.9953864, -5.1024785, -2.8273878, -2.5138736, -4.5667977, -4.2295265, -3.2456486, -2.8843367, -2.5892117, -2.611454, -2.31589, -2.3485153, -5.4121265, -3.8516903, -2.8110795, -2.3436418, -2.582545, -3.97944, -4.651603, -2.411318, -3.0528884, -3.0907474, -3.0097985, -4.7342324, -3.5315208, -2.1657097, -4.2390723, -2.936228, -2.5539465, -4.192869, -3.0271382, -2.7899885, -5.885918, -3.638292, -4.598609, -2.6090565, -2.0222142, -3.514531, -2.9101071, -2.6641734, -1.9962803, -2.7080035, -3.011154, -2.6983337, -3.5960157, -3.275243, -4.408549, -2.4606354, -3.5107026, -3.00748, -6.500345, -3.3213196, -7.8639097, -3.4727492, -4.6648107, -3.6666577, -7.5058265, -3.0931523, -2.670792, -3.4180133, -4.5167036, -3.7396464, -3.338267, -2.600346, -2.5254362, -3.317571, -4.302277, -3.4191096, -2.7749753, -4.1880503, -2.3452837, -3.5135424, -4.338403, -5.9206514, -4.549452, -3.1331377, -5.1705585, -2.442981, -4.7312174, -2.3868985, -2.524929, -3.433922, -4.5218687, -2.8124268, -3.0652313, -3.77391, -3.3301105, -2.085214, -2.547295, -2.3550396, -2.8430412, -2.4300187, -3.0907922, -4.117058, -2.9792786, -2.9986253, -5.410131, -4.5892816, -3.133783, -3.771516, -2.7256246, -2.3179505, -2.8882284, -2.3008482, -2.0544724, -5.2797623, -2.7960348, -3.1948164, -3.7833238, -4.181805, -4.8220587, -3.06365, -3.503508, -2.8300083 ], "pointIndex": [ 0, 1023, 255, 419951453, 96956636, 445365168, 848769, 624321631, 296844304, 845975460, 86206595, 261096359, 774555207, 582347094, 470468273, 3146417, 967960060, 722597372, 929042572, 25896987, 95569830, 99639565, 107498041, 1005199081, 148716648, 595698045, 846168, 723052043, 91259954, 306273711, 423919356, 107725919, 4992630, 92104369, 132129363, 275864745, 27370141, 624707289, 109142797, 722737018, 193644209, 394639409, 860441624, 548465859, 400518711, 193207638, 388007331, 147947184, 682816607, 27369995, 722548468, 993098847, 532818024, 109149472, 378158300, 100320351, 222193406, 814885078, 99712897, 99870350, 722566833, 150043946, 132308992, 715793696, 204614223, 25211, 173673659, 100181587, 70274174, 548940810, 718668443, 814452517, 723516440, 674958431, 100224979, 752969893, 285918601, 292581326, 794307651, 123023730, 386237782, 624298398, 3640080, 582665851, 100132215, 723055281, 901433053, 995876529 ], "storeSequenceIndicesEnabled": false, "size": 255, "capacity": 256, "initialAcceptFraction": 0.125, "timeDecay": 1.0e-4, "sequenceIndexOfMostRecentTimeDecayUpdate": 0, "maxSequenceIndex": 1494, "compressed": true, "randomSeed": -1443679510462455370 }, { "version": "2.0", "weight": [ -1.7347459, -1.7394735, -1.7381483, -1.754231, -1.7740259, -1.7581607, -1.7471995, -1.7623876, -1.7909236, -1.9176275, -1.7906872, -1.7900074, -1.8092201, -1.7612339, -1.7569292, -2.0437467, -1.775545, -1.9971812, -1.8742638, -1.9384868, -1.9833477, -1.8229709, -1.9066781, -1.8882413, -1.8450756, -1.8620235, -2.068681, -1.8370917, -2.0627403, -1.8765723, -1.7724979, -2.0590239, -2.449461, -1.7891802, -1.7974008, -2.2016551, -2.1197975, -1.8853545, -1.9215225, -2.0432634, -1.9771065, -2.0160198, -2.2218409, -1.9348078, -1.8426956, -1.9509114, -2.038082, -2.5543044, -2.152087, -2.648513, -2.133948, -1.916019, -2.000006, -2.0770962, -2.1443796, -1.9983968, -2.1011918, -2.0810418, -2.1482136, -1.9335482, -1.9012893, -1.824644, -1.938661, -2.2046938, -2.2691963, -3.6068864, -2.8661828, -2.1628983, -1.9279547, -1.833832, -2.0551453, -2.713674, -2.795415, -2.462656, -2.2616754, -1.9144489, -2.1650782, -1.997512, -2.782421, -2.4250057, -2.214602, -2.3261878, -2.34799, -2.2042305, -2.126051, -2.268383, -2.750201, -2.0563984, -2.671494, -2.0033872, -2.6995451, -1.9782327, -2.4117901, -2.925236, -2.1892033, -2.6363072, -2.9420497, -2.8249805, -2.6455832, -2.725805, -3.0097766, -2.5371299, -2.717369, -2.7761137, -2.1064897, -2.2279794, -2.0551527, -2.2883182, -2.7291057, -2.5638142, -3.1108234, -3.1955476, -2.0476542, -2.485119, -2.1437218, -2.220851, -2.4143832, -2.8322825, -2.46383, -2.1007354, -2.3364544, -2.2614713, -2.0341384, -1.912449, -2.8362796, -2.3952615, -2.6028316, -2.668597, -3.8440006, -3.5483372, -2.652846, -3.705314, -4.7733226, -4.5258327, -5.084285, -4.82561, -2.233787, -2.7597992, -2.1867697, -2.7386017, -2.0815248, -4.6069117, -3.7802503, -3.1006753, -4.680951, -6.1302423, -4.324174, -7.00268, -4.050277, -2.5169914, -2.504396, -2.6829255, -3.2965174, -3.1454434, -2.7643566, -5.549664, -2.0992694, -2.8647306, -2.9470987, -2.5179236, -3.5217705, -2.493775, -3.2341912, -3.0145593, -3.587833, -2.447179, -2.5390737, -2.601489, -2.771792, -2.5648513, -2.1629953, -2.683225, -4.4290395, -2.8727617, -4.1634107, -7.609809, -3.982252, -3.9179842, -3.3660645, -5.2745104, -2.1295073, -3.0498695, -4.7773256, -3.5502975, -2.9065478, -4.306385, -2.8694503, -3.4804726, -3.3991513, -2.7444286, -2.5565257, -3.3066907, -4.623295, -3.410556, -4.410689, -3.9592216, -3.3761177, -2.822778, -2.7244134, -2.7992866, -5.9734287, -4.5867805, -3.2222269, -2.874869, -4.0116825, -4.6141043, -3.812028, -3.4712565, -4.0439873, -4.130561, -3.120064, -2.7037315, -2.42152, -3.3963015, -3.260484, -3.5456893, -3.0255744, -2.8895788, -2.8674421, -6.5274324, -3.7662706, -3.1172621, -3.491285, -3.7791576, -5.5442123, -2.525858, -3.3795898, -8.791986, -3.3659992, -2.8019388, -4.1974254, -2.8413677, -2.26471, -2.8140738, -2.4340503, -3.7309914, -3.7927318, -4.864571, -2.794539, -3.5314653, -2.785886, -2.6446779, -3.092817, -2.6836123, -5.2115974, -4.941303, -3.84799, -2.0850093, -3.6065555, -3.431646, -3.6578736, -2.778165, -2.8372567, -3.7021728, -2.6941583 ], "pointIndex": [ 0, 1031, 255, 121510804, 735934784, 516644950, 152201424, 36215733, 735940435, 542315149, 903854308, 736615363, 258746231, 34794797, 782551256, 319268912, 149559599, 693352500, 585322202, 147749702, 215650085, 50769623, 757945700, 1065035478, 353623269, 349435891, 256493971, 235019083, 663660283, 3212567, 736833756, 336190540, 16202432, 531534714, 106151486, 531904117, 596274883, 315199618, 786685146, 923527607, 955621339, 349788009, 974505360, 234733889, 158138714, 1091199620, 736142803, 101284997, 101405390, 353686018, 531962048, 706200395, 151538621, 776073587, 736716106, 101275348, 147811068, 367450797, 101885690, 16074429, 319605335, 52186228, 69939700, 102111105, 102130640, 983102903, 736035865, 398422989, 1081458622, 602836680, 300481917, 277106593, 1098574487, 92681970, 616747125, 227483847, 735965216, 1039111769, 532147965, 1025186457, 1006096533, 542328344, 736318141, 736364878, 829785401, 476649019, 532245839, 101890891 ], "storeSequenceIndicesEnabled": false, "size": 255, "capacity": 256, "initialAcceptFraction": 0.125, "timeDecay": 1.0e-4, "sequenceIndexOfMostRecentTimeDecayUpdate": 0, "maxSequenceIndex": 1494, "compressed": true, "randomSeed": -5814447565348109662 }, { "version": "2.0", "weight": [ -1.7511228, -1.7547671, -1.7649827, -1.7602155, -1.7644068, -1.7974786, -1.8111378, -1.76645, -1.7629541, -1.7887746, -1.8424741, -1.8604313, -1.825724, -1.813784, -1.8164799, -1.7996159, -1.9427739, -1.92378, -1.9825747, -1.9355977, -1.929168, -1.9899186, -1.8879479, -1.9810914, -2.139502, -1.8925554, -1.8323439, -1.9457619, -1.9108175, -1.8209031, -1.8621061, -1.8155944, -2.0194373, -2.2031505, -2.2139351, -1.9271352, -2.0317855, -2.103354, -2.068229, -1.9535385, -1.9589801, -2.0048394, -2.141987, -2.1395955, -2.0265355, -1.890522, -1.8963068, -2.1620572, -2.1312373, -2.3032746, -2.2189019, -1.9480989, -2.142841, -1.8506192, -1.9154953, -2.0063877, -1.9699386, -2.2777627, -2.3113956, -2.062702, -2.4268925, -1.8760568, -2.0476923, -1.971264, -2.4704957, -2.1776824, -2.1748862, -2.3667104, -2.265379, -2.649047, -2.4815402, -1.9881247, -2.339695, -2.1896973, -2.3558364, -2.3274946, -2.1282146, -2.111352, -2.153737, -1.9565834, -2.4722, -2.1751769, -2.5557127, -2.5569649, -2.4326591, -2.9176764, -2.2936957, -2.1785498, -2.1606998, -2.1816666, -2.1546662, -2.2656825, -2.3489978, -1.9178797, -2.2084754, -2.425072, -2.697172, -2.2067614, -2.4354026, -3.3640983, -2.5109417, -2.4522586, -2.6146648, -2.590165, -2.4847088, -3.1080565, -2.4759765, -2.1774573, -1.9996259, -2.6539307, -2.0263243, -2.041786, -2.6337276, -2.7405884, -2.14849, -2.297524, -3.4519875, -2.9706388, -2.5154743, -2.9371212, -2.1149318, -2.8048918, -2.8034158, -2.0286958, -2.3253965, -2.4457614, -2.1075993, -2.1707664, -2.4698887, -6.3985457, -5.4553065, -3.0534954, -3.7535856, -3.2119567, -5.0649343, -3.1517365, -2.4478056, -5.2392926, -2.2751443, -2.8633776, -2.672378, -3.5623927, -4.931572, -7.0922966, -3.4948246, -2.7835896, -2.8300126, -6.69674, -2.2213356, -4.852264, -2.5520232, -3.6996858, -3.5319383, -2.7030215, -2.4836402, -3.2883487, -4.276891, -2.2965822, -3.7260692, -3.054534, -2.256999, -3.9361992, -2.6429262, -2.685454, -3.2607734, -3.1706688, -2.6984189, -4.9599323, -4.66685, -2.8531756, -5.126991, -4.127395, -4.217008, -2.5120008, -3.669386, -2.5234091, -2.249207, -2.4890218, -3.3276532, -2.9966183, -4.327049, -4.2945223, -2.4592247, -3.5943713, -3.735938, -2.5562365, -2.998724, -2.0148306, -6.272867, -2.3961935, -3.9867659, -4.4374504, -3.3698826, -3.496857, -3.086979, -2.6779304, -3.9720068, -4.0344386, -2.590073, -8.39037, -6.465327, -3.459859, -2.994035, -2.6803858, -3.9088588, -6.345051, -2.745923, -3.633128, -3.0604568, -3.1205533, -2.825281, -6.732635, -3.4789882, -3.7997115, -2.7432237, -3.4335766, -4.691795, -2.347267, -4.2432585, -4.254174, -4.5696106, -4.059252, -3.132693, -2.108108, -2.608798, -3.0443778, -2.771694, -3.182069, -3.4979742, -2.8097785, -4.098891, -2.8197036, -3.3921201, -3.7390442, -4.041276, -3.0251033, -3.1271384, -4.8476815, -2.759677, -3.203345, -2.9378736, -2.2823048, -2.356367, -3.997121, -3.2126071, -3.6619453, -3.7652857, -2.7961602, -2.204932, -3.3174736, -2.674685, -3.7326925, -3.7288668, -2.671264, -3.8200424, -2.8722172 ], "pointIndex": [ 0, 1034, 256, 658378273, 272611859, 628255945, 603116971, 637527626, 651346795, 881443268, 147910250, 44829463, 49340583, 1035125951, 742467179, 388383245, 101864873, 813158695, 111498040, 1067105795, 600418683, 428136723, 984148151, 675960328, 234153215, 967506175, 112176063, 77723278, 102483830, 43476314, 276541196, 535711148, 218602949, 295304823, 932595614, 52532765, 216033529, 886620574, 1051026440, 722086920, 342897228, 142999594, 966642102, 206144551, 544190789, 314220980, 545201433, 628122974, 111747165, 17247933, 278565179, 106714368, 223878028, 101819255, 526601, 96025368, 28377725, 68289406, 66433649, 275442575, 20451783, 475766536, 743076873, 93914778, 93319406, 896615515, 749806872, 535766469, 2351178, 176407629, 535838823, 321299206, 369671275, 166461715, 25710530, 191293970, 853746211, 215527865, 98870745, 233634706, 109252870, 112348063, 743076508, 743332664, 101955932, 696848625, 637904759, 867338788, 1034 ], "storeSequenceIndicesEnabled": false, "size": 256, "capacity": 256, "initialAcceptFraction": 0.125, "timeDecay": 1.0e-4, "sequenceIndexOfMostRecentTimeDecayUpdate": 0, "maxSequenceIndex": 1494, "compressed": true, "randomSeed": 9075576264812164155 }, { "version": "2.0", "weight": [ -1.7621267, -1.7643011, -1.763683, -1.7669947, -1.7705675, -1.7852368, -1.7799686, -1.787016, -1.7860427, -1.7906151, -1.804153, -1.7959678, -1.7886349, -1.780712, -1.8689903, -1.8409675, -1.8390886, -1.7871509, -1.7943671, -1.8191289, -1.8323922, -2.0644372, -1.811986, -1.9270225, -1.8859811, -1.8729037, -1.7891858, -1.912327, -1.8494794, -2.0217195, -2.0321834, -1.8470848, -1.8650146, -1.8897678, -2.2105854, -1.8611658, -2.2318077, -1.9293029, -1.9301625, -2.0512986, -1.9385352, -1.8857056, -2.0632272, -2.0671606, -3.1690257, -1.845041, -2.0162363, -1.9533851, -2.3013062, -1.942272, -2.048776, -2.0071447, -1.9014169, -1.8215562, -1.8878288, -2.084124, -2.105544, -1.930875, -1.8534234, -2.4047348, -2.0737162, -2.0852304, -2.2555728, -1.9201483, -2.3723779, -2.4816203, -2.2572203, -2.00026, -2.2352657, -3.4017093, -2.3812375, -2.3600125, -1.948214, -2.378624, -5.116084, -2.0990605, -2.6211152, -2.379424, -2.3524148, -3.2209916, -2.104442, -2.2540069, -3.4046257, -2.0181348, -2.247497, -2.21532, -2.3385, -2.1694512, -2.1761441, -3.4597387, -3.4778054, -3.3390796, -2.1121626, -2.5394504, -2.52151, -2.0399206, -2.916308, -2.3191895, -2.467902, -2.1683786, -2.0806942, -2.1553402, -2.9445858, -2.1864026, -2.1571403, -2.1272745, -2.2371612, -1.9967877, -2.1002073, -1.8886058, -1.9997722, -2.4290895, -2.2380104, -2.5270011, -2.1228848, -1.9394033, -2.0246792, -2.047522, -1.9095999, -2.7972586, -2.8287325, -2.2579675, -2.2667637, -2.340637, -2.446997, -2.7029297, -2.5301113, -2.0188444, -3.9801939, -4.3221707, -3.7231228, -3.0825982, -3.1652906, -2.4247813, -3.682891, -2.4476895, -3.1326087, -3.161309, -3.8905435, -4.791954, -3.681021, -3.9389684, -2.7608206, -5.541943, -2.8197322, -4.649828, -2.5776565, -7.7122736, -2.6602604, -6.0711694, -5.9011617, -2.451023, -2.4370933, -3.926926, -3.1887536, -3.626978, -3.3805752, -2.938607, -2.6062891, -3.9242072, -4.9757347, -3.2677634, -3.495387, -3.2367918, -4.1905117, -5.1742563, -4.6259055, -6.2827764, -3.8574424, -2.5101068, -3.5722072, -2.9579268, -3.013874, -3.0330877, -2.6339154, -2.8156097, -7.825379, -2.2691917, -2.188605, -3.525295, -3.6323483, -4.5217543, -3.9747667, -3.508919, -4.025803, -3.7148688, -2.4592361, -7.4555864, -3.52768, -6.5292764, -3.0102146, -2.1134815, -3.1245093, -4.395163, -6.3417835, -2.6456265, -3.9936397, -2.5499356, -4.0562053, -4.370556, -2.4170387, -4.2614927, -2.9061453, -2.6378443, -2.8298671, -3.002344, -3.434466, -2.5555396, -2.2291453, -2.8412664, -3.4274383, -3.688502, -2.2401543, -2.257583, -2.260312, -5.796482, -2.4867, -5.135162, -2.5456197, -2.6322596, -2.2805068, -3.0550194, -2.5237148, -3.818549, -3.6654675, -2.6598873, -2.7249722, -3.9809496, -2.8234189, -2.1623554, -2.6842587, -2.3207495, -3.400828, -2.1300373, -2.0394132, -2.4269812, -3.234777, -2.1932037, -2.0368474, -4.900823, -4.0642343, -2.8681023, -4.077743, -4.435043, -3.6128042, -2.295886, -2.7263608, -2.4196534, -3.7086027, -3.7876077, -4.5064445, -3.5139484, -4.9897804, -2.8504028, -3.0639005, -4.883213 ], "pointIndex": [ 4, 1030, 256, 729477161, 666722929, 867092667, 15851955, 199407070, 728920587, 105566440, 672057594, 304475970, 96243294, 10170045, 803807104, 140289208, 729748292, 72926334, 309953025, 1047057688, 963181714, 58597307, 229197315, 729472995, 88170001, 546851916, 729277820, 106065483, 968337439, 763717344, 96905421, 800893290, 800260166, 728888411, 22150304, 1048984053, 154146676, 992363062, 353550576, 869454101, 976773150, 856137810, 729104404, 367962993, 968829758, 1028357464, 915599229, 951370357, 893578912, 7468862, 367999715, 105780275, 729527444, 294239272, 316073828, 96071757, 59596822, 95982658, 644094438, 296472609, 5367309, 96690087, 367066252, 96911156, 73831936, 956087054, 611836366, 284826207, 88163963, 367394684, 728817819, 96690251, 35892540, 243004824, 25130781, 242741397, 12972296, 218635775, 729012748, 222536880, 956465631, 172678074, 729284679, 528951533, 729376091, 546882251, 969053348, 956303298, 1026 ], "storeSequenceIndicesEnabled": false, "size": 256, "capacity": 256, "initialAcceptFraction": 0.125, "timeDecay": 1.0e-4, "sequenceIndexOfMostRecentTimeDecayUpdate": 0, "maxSequenceIndex": 1494, "compressed": true, "randomSeed": 7626925126556980011 }, { "version": "2.0", "weight": [ -1.6453152, -1.6614803, -1.6473477, -1.6637434, -1.6657788, -1.6709785, -1.6593904, -1.7031668, -1.6661329, -1.7637069, -1.6732891, -1.6751361, -1.6830605, -1.7353961, -1.7056031, -1.7816361, -1.7211266, -1.6736615, -1.6712811, -1.7788934, -1.7689418, -1.98051, -1.7674062, -1.6919633, -1.726131, -1.6992354, -1.7500296, -1.8240614, -1.7669265, -1.7340643, -1.7259476, -1.7856888, -2.0210254, -1.7659334, -1.9669611, -1.7746406, -1.7213353, -1.8095107, -1.7860314, -1.7844567, -1.8628109, -1.8234218, -1.7996061, -2.0139098, -2.4851983, -1.8392967, -1.8668737, -1.7904509, -1.7440853, -1.7646767, -1.7269187, -2.0644567, -1.8533282, -1.826338, -1.8013415, -2.2637458, -2.1390707, -1.7990445, -2.1773386, -1.8273649, -1.8796239, -2.0236528, -1.7728702, -1.796254, -2.532183, -2.2640858, -2.4402175, -3.0296679, -2.314462, -2.0515208, -1.9945575, -2.1140153, -2.1377769, -2.3789532, -1.8386341, -2.9078696, -2.1706057, -1.9561146, -2.509588, -2.4163966, -1.8126116, -2.8045378, -2.3591607, -1.9112797, -2.2252865, -2.481348, -1.8035455, -2.317629, -2.1645021, -2.5073428, -3.436823, -2.3951838, -2.470066, -1.8905722, -2.4852116, -2.6534238, -1.9617916, -2.4085793, -1.7725836, -2.2931128, -2.3572016, -1.8851287, -1.7457126, -2.2169604, -2.1736746, -2.0225914, -2.203509, -2.3658428, -2.001331, -2.306623, -1.9306526, -3.3003302, -2.761781, -2.2639189, -2.63765, -1.8915013, -2.467299, -2.368252, -2.4827886, -2.3959568, -1.862398, -2.3019955, -2.168439, -2.248333, -2.3444448, -2.6407728, -1.7951647, -2.3113253, -2.0520954, -3.3269024, -2.776521, -2.9649208, -3.2885637, -3.7380702, -2.5704145, -4.2792087, -3.7526665, -4.164063, -2.572014, -2.4035897, -2.801594, -3.9647415, -2.0116417, -3.0158849, -2.9728572, -3.526608, -2.900915, -3.164121, -2.682977, -2.2862837, -2.2686222, -3.430326, -4.1960926, -3.1282237, -3.2611117, -3.4850717, -3.356468, -3.7435386, -4.6425886, -2.7259989, -4.021318, -2.699796, -2.2573965, -2.9755998, -3.3193903, -2.7120194, -2.8888395, -2.9086554, -2.017178, -3.199633, -2.9147167, -4.1172676, -5.221965, -1.826881, -3.5926323, -2.884518, -2.638278, -4.167975, -3.7219253, -3.134112, -3.9213047, -3.4879425, -5.1565504, -3.8892734, -2.8100936, -3.8140543, -3.069654, -2.1012354, -2.0253437, -3.95567, -2.640066, -2.6701024, -3.9289021, -2.226513, -2.8312628, -4.4321938, -2.4696536, -3.551235, -1.954873, -4.96489, -3.6705532, -2.6112492, -4.298699, -1.9479235, -2.187532, -2.2313077, -2.9024248, -3.2534902, -2.7297554, -2.3533392, -4.280109, -3.1994207, -2.2891314, -3.4899526, -3.4446754, -2.743274, -2.7455976, -3.549796, -3.896597, -3.74461, -3.1503246, -1.9323839, -3.2648163, -3.516856, -4.318212, -2.9047408, -2.7972558, -3.5502274, -6.969227, -4.3229594, -2.974017, -4.5718613, -2.1149542, -3.5208528, -2.5356367, -5.1357164, -2.7164354, -3.223692, -2.9092143, -8.328084, -3.312988, -1.9736284, -2.565976, -2.4032283, -5.665805, -2.4105263, -5.0699058, -3.0245457, -3.0754614, -2.4222598, -2.4483094, -4.354423, -2.9659104, -6.277456, -1.8456411 ], "pointIndex": [ 0, 1033, 255, 737909804, 264081900, 102740904, 41043409, 1092182004, 111961536, 93844074, 164839321, 985981554, 738131265, 111808790, 627635953, 102750122, 62725430, 34221341, 151864513, 543494778, 556015113, 826005706, 203773138, 1090008334, 568827872, 135932481, 48637673, 25836568, 665053228, 556675487, 387133972, 34352709, 11775348, 1072431840, 152979362, 4990641, 985989549, 1083155150, 271570003, 310343043, 556915269, 430146251, 366244972, 896197824, 103353170, 103531376, 602574436, 111405311, 236030666, 285109047, 767762052, 854458550, 418148486, 103352540, 103493096, 910349206, 3178002, 608561031, 738462145, 927044910, 103237758, 103418766, 102738444, 567463329, 196405325, 310837944, 48905156, 46123288, 789070312, 145308117, 41405525, 167550102, 229613352, 949425728, 772107533, 109468212, 111489490, 1044589884, 727054296, 55625362, 819190664, 556060471, 772046948, 107684267, 1018028166, 601744516, 738205241, 1104533179 ], "storeSequenceIndicesEnabled": false, "size": 255, "capacity": 256, "initialAcceptFraction": 0.125, "timeDecay": 1.0e-4, "sequenceIndexOfMostRecentTimeDecayUpdate": 0, "maxSequenceIndex": 1494, "compressed": true, "randomSeed": 7002002977686977193 }, { "version": "2.0", "weight": [ -1.7950889, -1.8024329, -1.7982606, -1.8035696, -1.8281398, -1.8639559, -1.8087004, -1.804131, -1.8129811, -1.8773781, -1.8434898, -1.8707309, -1.8924979, -1.8152995, -1.8171902, -1.8398887, -1.8526347, -1.8247981, -2.1454496, -1.8797507, -1.9207648, -1.8511003, -1.8830664, -1.941836, -2.0017285, -2.0601752, -2.2392924, -1.8281189, -1.9432348, -2.0512037, -1.8189921, -2.1194618, -1.8805789, -1.9361976, -2.0394275, -1.9197465, -1.9410212, -2.3605905, -2.348308, -1.9919758, -2.149609, -1.9918503, -2.4071586, -2.0133476, -2.017764, -1.9526561, -1.8889744, -1.9908056, -1.9667652, -2.3325937, -2.0894902, -2.076378, -2.1836076, -2.3076813, -2.2943592, -1.8839735, -1.9707458, -1.983549, -1.995676, -2.0890472, -2.862559, -1.8193679, -1.8380246, -2.2423315, -2.468462, -2.0481381, -1.9301186, -2.1135626, -2.0003445, -3.339482, -2.0420012, -2.6025243, -1.9849141, -2.2839487, -2.1166253, -3.2656379, -2.4801033, -3.483298, -2.6237442, -2.5392437, -2.0321038, -2.7748365, -2.5770319, -2.2059803, -2.0158105, -2.8712418, -3.0587385, -2.089214, -2.257485, -2.7786255, -2.223792, -2.0820284, -2.5444684, -1.955107, -1.9992361, -2.177288, -2.8146691, -2.2187133, -2.0178208, -2.4498284, -2.379427, -2.415771, -2.6705427, -2.2836223, -2.1893816, -2.6651056, -2.4998262, -3.0688515, -2.328383, -2.576427, -2.8966498, -2.1519067, -2.0669699, -2.2762961, -2.376951, -2.0982225, -2.240475, -2.5130389, -2.325388, -3.9591777, -2.5050554, -3.4666228, -3.394599, -1.8523328, -1.8810489, -2.2190344, -2.1856875, -2.3854992, -3.3166938, -3.4789212, -2.932038, -2.1035392, -2.2995434, -2.8314764, -2.635736, -4.288215, -3.381147, -2.484196, -2.5066197, -5.4097366, -3.6838872, -3.7094543, -2.7782228, -2.649833, -2.6238856, -2.0065053, -2.1537538, -2.9406908, -4.200969, -2.1703742, -3.143672, -4.5232615, -4.398172, -3.290937, -5.564251, -5.6624002, -3.6470442, -3.0140178, -4.956365, -4.4648337, -4.55664, -5.5627747, -2.6607583, -3.151384, -5.553583, -4.391885, -3.7576783, -2.8761003, -2.5753236, -3.6718168, -4.6668377, -4.191763, -3.9836898, -3.803054, -4.1707954, -2.4958916, -2.9946797, -2.7124336, -4.257737, -3.2523026, -4.0422, -5.5625987, -6.711552, -2.9596972, -2.676174, -2.935767, -2.7992232, -2.1417933, -3.6941488, -2.061812, -3.19682, -2.2330732, -2.647088, -3.0428147, -3.0830877, -5.725817, -2.8337967, -3.7987382, -3.9266934, -3.8552983, -2.9410214, -3.116069, -2.8893232, -2.753992, -3.271512, -5.0558834, -3.365363, -2.5611825, -3.649718, -2.613497, -2.3420799, -4.52002, -6.0026717, -2.8498583, -2.837464, -3.9614494, -3.5146484, -2.8133976, -3.1637628, -5.4409914, -3.1536539, -2.9955816, -3.5310907, -2.2398264, -2.1533244, -3.271155, -2.6116178, -2.973396, -3.0415344, -2.4453475, -3.3096204, -5.7699924, -3.7320168, -3.1326647, -3.3863149, -3.453471, -2.6393962, -4.4104514, -5.6062555, -7.18547, -4.151678, -6.0377564, -2.6741362, -3.4682512, -6.467457, -5.2168, -3.5244913, -3.5629482, -2.1165059, -4.5981874, -2.5121496, -2.3814912, -2.918366, -6.7975726 ], "pointIndex": [ 0, 1031, 254, 15808997, 31395584, 544325994, 205012329, 1007602689, 110781380, 1056602209, 787366551, 299630002, 501655347, 555405793, 658572095, 329207652, 439883859, 330256018, 555078540, 356945520, 993130394, 393202098, 461868252, 1073954910, 757216739, 565415956, 827566055, 283526957, 69841290, 111142829, 17111873, 63549186, 633788108, 955804368, 8627587, 944323890, 466112183, 30299, 12940510, 847685513, 983116125, 165168896, 808547922, 664665450, 1071175664, 955495765, 544229432, 138450399, 495508604, 17748440, 101276153, 4109341, 1049999802, 84883502, 73497080, 1068317207, 101480069, 849438381, 554984832, 101981303, 271927530, 691435967, 517016733, 279748431, 101669033, 861421531, 735102160, 88934859, 101889977, 111475607, 494559182, 25668594, 1028971096, 1043241290, 697229083, 422864340, 101978623, 999704685, 704689540, 15396512, 735766122, 554971642, 55886345, 735144659, 894649641, 711489373, 99958146, 582143 ], "storeSequenceIndicesEnabled": false, "size": 254, "capacity": 256, "initialAcceptFraction": 0.125, "timeDecay": 1.0e-4, "sequenceIndexOfMostRecentTimeDecayUpdate": 0, "maxSequenceIndex": 1494, "compressed": true, "randomSeed": -2136158392537716479 }, { "version": "2.0", "weight": [ -1.8389049, -1.8582478, -1.8621566, -1.8643055, -1.8693254, -1.8780724, -1.8710219, -1.8679392, -1.9071573, -1.8911194, -1.874181, -1.9101987, -1.9005471, -1.9019557, -1.8884401, -1.8702489, -1.9078918, -2.0959382, -1.9267707, -1.9354508, -1.9006048, -1.9771824, -2.0172932, -1.9246653, -1.9861399, -1.9785607, -2.008981, -1.9311252, -2.0913882, -1.8953483, -1.9956613, -1.9409268, -1.9159292, -2.1305833, -2.1965997, -2.1932933, -2.1346116, -2.2781348, -2.4737878, -2.0728786, -1.9427085, -1.921938, -1.9417433, -2.0542886, -2.1985457, -2.2231855, -2.027962, -2.358813, -2.2925675, -2.1171737, -2.3344688, -2.149847, -2.000718, -2.2742512, -2.07202, -1.970888, -2.2694538, -2.481769, -2.4127634, -2.04462, -2.1020927, -2.046081, -2.0036356, -2.0248015, -2.5876567, -2.2180665, -2.2848003, -2.1774225, -2.695223, -2.599535, -2.4118931, -2.378754, -3.6088274, -2.1606565, -2.4938564, -2.9503899, -3.5877342, -2.6274383, -2.642765, -2.1210396, -2.399021, -1.9635254, -1.9627998, -2.1645207, -2.595981, -2.034358, -2.6089687, -2.1189146, -2.514278, -2.2882314, -2.616787, -2.2300506, -2.3724105, -2.0632086, -2.0844212, -2.4226224, -2.424359, -2.4508584, -2.377973, -2.2268398, -2.174555, -2.3871496, -2.4086947, -4.8962784, -2.5416145, -2.8147495, -2.7882042, -3.0068736, -2.8295286, -2.977355, -2.2350152, -2.3157363, -2.116972, -2.3414912, -2.4307325, -2.5298557, -2.9733257, -2.7213256, -2.7864554, -2.0854812, -2.061156, -2.5432658, -2.4814675, -2.3671818, -2.050107, -2.8674266, -2.1412132, -2.115003, -2.309362, -2.9748385, -3.1750696, -6.117957, -3.2993228, -2.4326904, -2.7656958, -3.6295707, -3.7796872, -3.4501362, -3.5745273, -2.862744, -3.1402147, -3.124184, -4.393241, -2.6333466, -2.4891274, -6.58714, -6.1481028, -2.1976051, -3.243949, -2.6412618, -2.675868, -3.130527, -3.8998673, -4.5808806, -3.8964477, -2.8419526, -4.0908203, -3.4633973, -2.8850899, -2.430864, -4.3311377, -3.332464, -3.5289812, -3.8982253, -3.044324, -3.3283892, -2.657505, -5.225944, -2.4993463, -2.7446127, -3.8239253, -2.9740188, -3.3479397, -2.9222534, -5.0559607, -4.0083375, -4.7264814, -2.9090033, -4.7571225, -3.8021138, -3.5721817, -2.670062, -4.261798, -2.711046, -2.59482, -2.9176433, -10.787248, -2.744291, -2.708359, -2.5521755, -3.1740572, -4.420747, -2.8186436, -2.6948342, -3.2279184, -3.211412, -2.950143, -2.4618986, -2.6309628, -3.0331423, -4.045979, -2.6429436, -3.946502, -2.7471793, -2.5223243, -2.8541257, -4.1439, -5.1998134, -6.639591, -4.3845534, -2.8370016, -4.676921, -3.8033836, -4.114506, -4.5905237, -3.1949565, -3.0241742, -3.3643944, -5.335859, -9.016249, -4.3608932, -2.8401525, -3.3107944, -3.051773, -2.9649436, -3.1472259, -2.704784, -2.5415337, -2.8733041, -2.9558587, -2.8383915, -4.776263, -2.5792568, -3.0381863, -3.0412335, -3.6932375, -3.6586297, -4.4209785, -3.0423696, -2.1743321, -3.8594322, -3.0191092, -3.0187564, -2.97037, -5.26951, -3.5140324, -3.0615833, -4.0525646, -7.478893, -3.0442631, -2.15131, -5.027723, -4.1371365, -2.7515888, -3.10321, -2.9851701 ], "pointIndex": [ 8, 1033, 256, 274834802, 722840473, 231678069, 795912372, 815986087, 274399687, 91672173, 723028016, 746495215, 722424190, 668321911, 450435642, 959782935, 814222401, 91643433, 431947113, 640329714, 440239316, 803290989, 407064496, 948964996, 736532039, 89436982, 102027248, 774952204, 906155678, 42942890, 722225094, 150976907, 705382868, 791125, 738621164, 723101289, 92181983, 309633540, 181631932, 214993954, 673129959, 607445380, 386690518, 158514299, 697817580, 135764299, 98727903, 929611432, 373798555, 526785268, 187422052, 101146420, 101266241, 195809237, 523883877, 739602867, 87932408, 625076074, 648537731, 429581157, 60706746, 56887256, 92390361, 96658348, 91668470, 13828540, 413818852, 128077719, 75864152, 722531227, 142816003, 156383949, 517013490, 573720696, 83774327, 722413657, 722293852, 649538714, 890518968, 76366437, 527262720, 299555085, 324557643, 17994668, 491599935, 629151794, 194396952, 877713305, 1025 ], "storeSequenceIndicesEnabled": false, "size": 256, "capacity": 256, "initialAcceptFraction": 0.125, "timeDecay": 1.0e-4, "sequenceIndexOfMostRecentTimeDecayUpdate": 0, "maxSequenceIndex": 1493, "compressed": true, "randomSeed": -4741493720461802206 }, { "version": "2.0", "weight": [ -1.752243, -1.7533684, -1.7537396, -1.7677537, -1.7604302, -1.7603213, -1.7693717, -1.8080763, -1.7989587, -1.7701063, -1.7832211, -1.8612016, -1.8499945, -1.8546313, -1.7741475, -1.8801541, -1.8818759, -1.8566812, -1.8662964, -1.9340073, -1.919586, -1.9013982, -2.041985, -2.0190444, -1.879311, -1.942772, -1.8506889, -1.8971379, -1.8959066, -1.8148371, -1.7917287, -1.944895, -1.8909316, -2.082204, -2.2887707, -1.9522427, -2.1629555, -2.2777903, -2.1407144, -1.9476439, -2.603377, -2.0637445, -2.1055667, -1.9408816, -2.0634787, -2.3307023, -2.4172614, -2.4749308, -2.122187, -1.9501388, -1.9178616, -2.0424654, -2.30427, -2.0592194, -2.0665574, -1.9108924, -1.9543146, -2.02071, -2.1656165, -1.8619995, -1.9695305, -1.8394514, -1.832046, -2.5664601, -2.0323565, -1.9110042, -2.181856, -3.7353666, -2.5042226, -2.4701302, -2.5479352, -2.082757, -2.0454297, -4.2367597, -2.5641592, -2.2863944, -2.2945366, -2.7220585, -2.2455914, -2.1216009, -2.223087, -3.6326237, -2.7867792, -2.5062628, -2.1318126, -3.077885, -2.2636397, -3.8174121, -2.0398188, -2.417976, -2.0693085, -2.4093754, -2.6121898, -2.7665045, -2.5095088, -2.542665, -3.0018454, -2.467339, -2.4261658, -2.0704176, -2.5217953, -1.9301082, -2.1728778, -2.2834375, -2.3522706, -2.3934624, -2.7616513, -2.2527175, -2.216753, -2.2046478, -2.2435293, -2.096313, -2.1982265, -2.4378765, -2.0432262, -2.274692, -2.4702756, -2.8248513, -2.4346766, -2.127786, -2.6401625, -3.0516562, -2.354917, -1.8942295, -3.3560169, -3.3887403, -1.8469124, -4.950463, -2.9408238, -2.9539542, -2.16367, -3.6794176, -4.468372, -3.0370595, -2.718664, -3.8908901, -5.214369, -4.506366, -2.604456, -3.2428453, -5.4598346, -4.3525577, -3.7062507, -4.2400312, -2.6525626, -7.7891884, -2.1886504, -4.5189743, -4.713356, -7.961303, -2.636962, -2.9795358, -2.3244765, -2.4545517, -4.193894, -4.1652184, -2.9075158, -2.6870363, -3.210856, -5.10711, -2.1955056, -3.7639387, -3.14421, -4.9564524, -3.759317, -4.1807175, -3.5626283, -4.674296, -5.1786294, -2.2147112, -4.037663, -3.3469887, -3.2820742, -4.46251, -2.584488, -6.760511, -4.0670295, -3.897869, -4.645763, -4.12243, -2.8523934, -2.4867897, -4.4655023, -2.838182, -2.8930097, -2.8383503, -3.3800075, -4.1138377, -3.0825334, -2.861209, -3.8822439, -4.4328766, -2.6305277, -3.8431482, -5.4775, -3.3559694, -2.9085054, -3.1475658, -3.3428876, -2.573073, -4.376477, -4.332161, -4.128444, -2.3647585, -3.13329, -3.1092715, -2.5185754, -2.960571, -5.9437976, -3.7282207, -2.4549882, -2.7592452, -3.1832874, -4.007347, -3.395472, -3.5422246, -3.5614986, -2.716633, -2.8029552, -2.3256674, -2.3200977, -2.4524872, -3.2619445, -4.8563776, -2.366631, -3.9910896, -4.675242, -2.8386018, -5.1089964, -3.2167192, -2.1725712, -3.0112796, -2.9056556, -2.5540504, -3.3297763, -2.8778107, -3.0756452, -2.8496907, -3.207745, -3.5825412, -2.3615453, -2.6907015, -5.2823467, -3.7028236, -4.088507, -2.8520346, -2.4795697, -3.2107942, -2.532128, -5.2959027, -4.060747, -3.59214, -3.4624677, -4.1062493, -2.3069463 ], "pointIndex": [ 0, 1030, 255, 599157497, 733163768, 430667831, 147887729, 1010523402, 330465266, 110646685, 881819272, 865481917, 88752414, 775336303, 111348581, 155252199, 8602322, 597396805, 715235725, 779861567, 3899346, 326648732, 542208487, 1039223259, 108522539, 12775810, 954706104, 1095577735, 978022754, 733212835, 348736900, 95473788, 412276462, 678114570, 706913169, 3604091, 749943297, 471954771, 347427408, 991820970, 643721315, 223456610, 732754695, 173730375, 819244216, 101113255, 611315637, 18169048, 1049668325, 827494107, 421570787, 1059333078, 192911752, 948894261, 101042534, 100982421, 193651786, 20516379, 64919072, 295658493, 101692273, 1043475195, 532477572, 136312642, 75568263, 1012091369, 972944514, 1040921449, 165170326, 17869111, 199152163, 523709110, 90337152, 101193502, 422937033, 519944870, 19135606, 337418591, 349593493, 1069682181, 970819812, 542474742, 812478370, 436972795, 560016287, 605535668, 768020755, 274656138 ], "storeSequenceIndicesEnabled": false, "size": 255, "capacity": 256, "initialAcceptFraction": 0.125, "timeDecay": 1.0e-4, "sequenceIndexOfMostRecentTimeDecayUpdate": 0, "maxSequenceIndex": 1493, "compressed": true, "randomSeed": 4112441456578588848 }, { "version": "2.0", "weight": [ -1.8468616, -1.8577148, -1.8584853, -1.8745211, -1.8839381, -1.94503, -1.8643191, -1.9429883, -1.9136758, -1.887171, -2.0373986, -1.9586806, -1.973279, -1.8782005, -1.9030881, -1.9531076, -1.9696432, -1.9732479, -2.0213916, -1.8983077, -1.8967689, -2.228283, -2.0511718, -2.143769, -2.0200603, -1.9988045, -2.010393, -2.0065608, -1.9569137, -2.0529115, -1.9493077, -1.972344, -2.003803, -2.0773947, -2.3127484, -2.2136736, -2.3328328, -2.0914764, -2.2352169, -1.9156684, -2.0050547, -1.9736114, -2.0609012, -2.4742713, -2.408185, -2.112794, -2.0947654, -2.252205, -2.1628177, -2.1104808, -2.3102467, -2.0179017, -2.1094272, -2.5425253, -2.1143463, -2.0709038, -2.2949069, -2.1579678, -2.0980825, -2.2455487, -2.1234345, -1.9941081, -2.2426062, -1.9967397, -2.2771735, -2.8543398, -2.0841372, -2.6515484, -2.9777184, -2.4021668, -2.32482, -2.5901673, -2.2633555, -2.6911893, -2.66621, -2.204409, -2.5489252, -2.259339, -2.4003046, -2.4987068, -2.1814759, -2.812882, -2.5994446, -2.30832, -2.6440303, -2.1507392, -2.3437405, -2.7207494, -2.8433661, -2.6356754, -2.711919, -2.1972442, -2.7441664, -2.2961626, -2.968949, -2.461496, -2.7065513, -3.0666206, -2.5042677, -2.1511161, -2.410049, -3.1150498, -3.1232743, -2.4711747, -2.1338673, -2.4432127, -2.1258492, -4.4138207, -2.848164, -2.72116, -2.172272, -2.3880615, -2.2456584, -3.668334, -2.4958708, -2.1932604, -2.4945786, -3.4778702, -2.1258447, -2.7599905, -2.3769214, -2.2937937, -2.162861, -2.0463183, -2.1354322, -2.2427704, -2.4339166, -2.0415628, -4.943682, -3.4416797, -2.5816982, -5.9348507, -3.8164678, -2.6876583, -5.4150963, -3.630908, -2.7943237, -4.6381755, -3.0852098, -2.9603436, -2.4037251, -2.8560138, -2.5588925, -3.2732491, -4.544583, -3.545748, -3.1403248, -3.2913904, -3.3318906, -5.949521, -3.3513587, -3.6747687, -4.3431773, -2.784656, -2.9858577, -2.2760127, -5.151183, -2.8132288, -2.4708939, -3.2697375, -3.1871397, -3.1962037, -3.3917303, -2.8500671, -3.5735934, -3.4771545, -3.7590485, -4.591124, -3.6463501, -2.7249668, -2.8283684, -2.2954454, -2.239896, -3.2431097, -2.3933356, -3.5373518, -3.6627674, -4.899869, -3.8739188, -4.2079306, -4.7997704, -4.528742, -5.6278872, -2.3141618, -2.4921196, -3.3306365, -2.9292293, -5.6206913, -2.9606137, -3.4221005, -3.5165875, -3.1108592, -2.7344708, -3.2038844, -2.8518286, -4.1912704, -3.926871, -4.0916147, -2.917304, -2.835496, -3.090715, -3.7037914, -5.6778426, -3.4291205, -4.4189024, -4.103101, -4.0025125, -2.9999018, -2.7050889, -2.2683651, -2.1401865, -3.9155257, -2.509768, -2.7189946, -3.2245197, -4.96693, -5.27048, -2.9756134, -3.0993168, -3.86548, -2.7816083, -2.9752896, -3.4838676, -2.7449431, -2.4590232, -2.763978, -5.3659043, -5.958337, -3.8688467, -2.6120355, -3.0672078, -2.8505383, -3.0771983, -2.9232905, -3.3036036, -4.107447, -4.397995, -2.456479, -2.7572386, -2.7803311, -4.0642967, -2.587039, -2.8032584, -2.5563083, -6.0977263, -2.1731086, -6.140041, -2.2150917, -2.1759338, -3.2463398, -2.650551, -3.2623303, -7.156755, -3.746851, -4.3848667, -2.2472951 ], "pointIndex": [ 0, 1034, 256, 680026234, 25753038, 12322195, 158222352, 628183527, 221921252, 102613109, 1046167656, 420157403, 101865424, 130688969, 867791470, 377508014, 551236938, 102803294, 169321924, 660760488, 17159871, 825170103, 664320069, 766642787, 840599011, 112123920, 741356230, 68618471, 659963173, 164969792, 17902792, 102050060, 65493591, 128223140, 583803222, 317799508, 377694450, 741395435, 157743738, 742004031, 832370462, 669705405, 1090208986, 557194788, 111052416, 101995009, 377742949, 112315196, 166604936, 159845504, 6249425, 402426115, 111691467, 112014602, 12402500, 113626412, 377079561, 4891505, 17230538, 557671104, 350389592, 337418299, 995193557, 154041381, 72942473, 866821859, 734569468, 163175720, 101829412, 647736761, 159522, 218332428, 102385336, 380438010, 101779620, 557387877, 196072007, 311519757, 742211272, 1034906183, 37137878, 868791521, 170337170, 882633515, 742305584, 742053317, 1030514781, 873156198, 1002 ], "storeSequenceIndicesEnabled": false, "size": 256, "capacity": 256, "initialAcceptFraction": 0.125, "timeDecay": 1.0e-4, "sequenceIndexOfMostRecentTimeDecayUpdate": 0, "maxSequenceIndex": 1493, "compressed": true, "randomSeed": 4595323003598604010 }, { "version": "2.0", "weight": [ -1.7530217, -1.7586434, -1.773849, -1.762592, -1.8131016, -1.7756336, -1.8009828, -1.7741543, -1.8676512, -1.8646407, -1.8707527, -1.8453454, -1.7917652, -1.8828427, -1.8115611, -1.8559371, -1.8460398, -1.9498363, -1.900532, -1.9233395, -1.894581, -1.8888321, -2.0496674, -1.9423137, -1.8953594, -1.8436334, -1.8194907, -1.9315331, -1.8865117, -1.9552362, -1.8730898, -1.861845, -1.8884866, -1.860233, -2.0214474, -2.1342142, -2.0347815, -2.1565762, -1.9986768, -2.179284, -2.2245903, -1.955952, -2.103774, -2.0903578, -2.0280917, -2.2951984, -2.1308136, -2.0280867, -2.0078814, -2.2627485, -2.4328034, -1.927272, -2.1103585, -1.9007114, -1.9655051, -2.1686418, -2.275647, -1.9243559, -1.9329118, -2.1062279, -1.9933932, -2.1088676, -1.9385817, -1.8690796, -1.9547449, -2.9583771, -2.4123116, -2.3242242, -3.0487976, -2.2495193, -2.7892995, -2.1749918, -2.1613662, -2.6085825, -2.2442203, -2.296857, -2.157981, -2.1260428, -2.2767558, -2.222487, -2.5803642, -2.616387, -3.002638, -2.5098755, -2.300245, -2.6012204, -2.3810315, -2.7191963, -2.3465118, -2.1526763, -2.180598, -2.3629231, -2.407416, -2.1790383, -2.1630478, -2.5708795, -2.7394047, -2.1088605, -2.1446357, -2.8772933, -2.3019164, -2.7520542, -2.7482584, -2.1248322, -1.9692047, -2.289044, -2.3144379, -2.1382654, -1.9641585, -2.0770772, -2.445008, -2.7688713, -2.2054334, -2.3642776, -2.3608549, -2.1265533, -2.2273238, -1.9348043, -1.9927022, -2.584606, -2.2076051, -2.110738, -2.1699257, -2.2359812, -2.5681713, -2.115875, -2.0355823, -1.9197799, -3.7159243, -2.3769798, -3.2322044, -3.3137698, -2.9943788, -2.7963326, -2.6795058, -2.4802117, -3.4642274, -5.1411734, -3.66784, -3.256203, -2.312808, -3.182899, -2.9188633, -3.687109, -2.7260873, -3.5744486, -2.2075148, -3.5530431, -3.1810625, -2.6014674, -4.4537644, -2.347711, -2.7858908, -2.2913628, -2.3800812, -2.574793, -2.1803203, -2.487599, -2.4158523, -2.9215314, -2.3955321, -3.1068192, -5.5564446, -6.155976, -4.783527, -3.0313432, -4.6340785, -2.9346814, -3.4056609, -2.9865975, -4.482046, -3.2434604, -3.8362653, -3.1985016, -3.7307, -5.748415, -3.335481, -3.912007, -7.3912263, -2.2853935, -2.7286966, -3.0656602, -2.99954, -4.2920375, -2.8718886, -2.6310093, -2.4226272, -4.126571, -2.6441429, -2.213361, -2.18956, -3.3949723, -6.7583833, -4.7095194, -3.3340955, -4.805968, -2.397384, -2.71102, -2.1774907, -3.360004, -4.7620926, -3.0819888, -2.475726, -3.1784081, -4.8078237, -3.70299, -3.4703214, -2.1942518, -2.2097945, -5.100668, -2.802018, -3.0861547, -2.614707, -3.3183014, -3.8127666, -2.7256925, -2.7711666, -2.5503476, -3.528591, -2.3531575, -2.5413828, -5.374771, -5.0652924, -3.141435, -4.5464096, -3.9200919, -2.547698, -3.4862366, -2.3858218, -3.1564581, -2.7105162, -2.4559617, -2.2118587, -2.4247873, -2.6961098, -2.2285678, -2.5738456, -5.701704, -3.4467978, -4.680556, -2.6207056, -2.3404016, -2.4840865, -3.8120284, -2.602705, -5.501521, -2.279263, -2.925833, -2.895566, -2.7750962, -2.5733013, -3.2968647, -6.0132313, -2.511559, -3.8756485, -2.3297174 ], "pointIndex": [ 0, 1032, 256, 130316049, 182105832, 111076132, 177234996, 997881312, 971575849, 803574544, 108973323, 99959135, 798281318, 1058098, 1054391543, 114761459, 101574028, 873951083, 572162546, 107933, 75000016, 327553633, 698303492, 1042033525, 327999288, 733359851, 102139982, 971271501, 516312555, 272018520, 101432289, 101435011, 775923155, 101481556, 743646378, 446065006, 23645681, 34451246, 595379049, 288901872, 990539428, 1080377477, 630020555, 1016808779, 850122508, 971730593, 241165909, 971091193, 755150944, 17729772, 111502861, 111546447, 288352119, 111975727, 88585509, 115353647, 102111069, 458115968, 542179417, 625317949, 742927762, 101471961, 82062374, 458554097, 743330367, 915215041, 350764572, 278643608, 111120402, 274324176, 63993397, 17575794, 208122117, 299358723, 93871000, 237336095, 101866291, 183064427, 679387979, 337496871, 34464391, 690885954, 743158299, 718346139, 549107147, 521345269, 807182715, 1062661369, 1032 ], "storeSequenceIndicesEnabled": false, "size": 256, "capacity": 256, "initialAcceptFraction": 0.125, "timeDecay": 1.0e-4, "sequenceIndexOfMostRecentTimeDecayUpdate": 0, "maxSequenceIndex": 1493, "compressed": true, "randomSeed": 4638085235929102383 }, { "version": "2.0", "weight": [ -1.7205982, -1.7462441, -1.7224296, -1.7497537, -1.751028, -1.8456761, -1.7242068, -1.7767053, -1.7673215, -1.784796, -1.8923337, -1.8468895, -1.8458989, -1.7726264, -1.7494782, -1.8162304, -1.8506732, -1.8071682, -1.8505014, -1.8663504, -1.8602628, -1.9369192, -2.0685985, -1.8470418, -1.924243, -1.8627342, -1.896682, -1.805714, -1.7924759, -1.8212261, -1.8413523, -1.8166019, -1.9876587, -1.9688573, -1.9867836, -2.1416805, -1.8227341, -1.984371, -1.8936837, -2.0074413, -1.9986775, -2.0292919, -2.149405, -2.153581, -2.0198772, -2.322012, -2.1020737, -1.8685888, -1.866675, -1.9476718, -1.9762423, -1.9931087, -2.0990224, -1.9319134, -1.9236432, -1.8683274, -1.9440625, -1.981607, -1.8613373, -1.9011766, -2.035621, -2.3928623, -1.8578784, -1.8394058, -1.8834316, -2.4774234, -2.745633, -2.330674, -2.2214074, -2.007715, -2.6319563, -2.150613, -2.7581625, -1.855395, -2.1326241, -2.4616501, -2.2978334, -2.11462, -2.2043338, -2.2443311, -2.0909631, -2.0210614, -2.1119738, -2.194734, -2.0480645, -2.5312035, -2.4746358, -2.252974, -2.2932506, -2.15691, -2.5898726, -2.5293722, -2.8775036, -2.3297377, -2.2259276, -2.3367941, -2.0050807, -2.1409955, -2.0319598, -2.6143742, -2.217846, -2.2131999, -2.3793766, -2.1143787, -2.2651167, -2.14071, -2.4633844, -2.256193, -2.2779107, -2.337873, -2.2562742, -2.2765844, -2.1672094, -2.2050443, -2.3057387, -2.3357394, -2.6255481, -2.1946425, -1.9281527, -2.233351, -2.1962113, -2.4188945, -2.1262202, -2.428657, -2.8092623, -2.33741, -2.2612424, -2.203239, -3.0023918, -2.4995358, -4.8756423, -3.8188999, -2.8692102, -6.1800284, -3.7025652, -3.0154636, -2.6822631, -2.8073263, -4.2340283, -2.1536407, -2.5218174, -4.1774282, -3.2186656, -3.0366569, -2.383663, -5.6088076, -2.7851872, -3.2519581, -2.5382798, -3.4154825, -7.3163767, -2.4979515, -4.079501, -2.642788, -2.4024146, -5.3088193, -3.2866457, -3.7070508, -3.195286, -2.6170375, -2.6562896, -4.32288, -4.6731935, -4.7537546, -2.0546222, -3.0340793, -3.7126343, -4.2914305, -2.4861906, -2.346633, -3.5469143, -2.829168, -3.6296227, -2.5642827, -2.7284346, -3.6774755, -3.813522, -2.3384602, -2.86601, -3.2119765, -2.4721215, -4.9027615, -3.1063216, -3.5586183, -2.8718479, -3.2273788, -3.837107, -2.9378967, -2.4388022, -2.7371254, -2.8474655, -7.5629826, -2.6986318, -3.3238146, -2.394846, -2.2454329, -4.489093, -2.320416, -2.4232886, -3.2989602, -4.470059, -3.3212802, -3.0554433, -2.8215988, -2.7696617, -2.5973637, -2.4393094, -2.9112113, -3.0350218, -2.3597577, -2.6048572, -2.319356, -2.2565455, -2.7014203, -5.087077, -3.4070683, -2.2615533, -2.4370053, -5.2219357, -4.003551, -2.6806061, -2.9045835, -2.5617766, -2.5563123, -4.494617, -3.316142, -2.8841674, -6.208882, -4.5145392, -4.1788445, -3.5765295, -3.076847, -3.4893527, -2.654117, -3.4339619, -2.3059309, -2.8830016, -3.1932635, -2.603867, -2.422528, -3.7851768, -3.45282, -3.857833, -2.928278, -2.8723693, -2.3710341, -2.141756, -2.6236925, -3.822677, -3.6973562, -2.8623853, -3.3728542, -2.470519, -2.7904298, -3.4461827, -2.6518717 ], "pointIndex": [ 0, 1031, 256, 636394200, 540065279, 399278101, 499280, 606713065, 891442592, 1021974215, 212538431, 393720532, 445796427, 323044657, 51701512, 729576531, 107782822, 34941551, 823410191, 305112990, 763647192, 967328688, 737338494, 398657872, 112280788, 737004872, 8618236, 598413488, 566043792, 533128314, 392209829, 737266652, 603032783, 37453917, 293619559, 101366862, 101395175, 489560317, 737710841, 2163210, 202671885, 17754786, 915624963, 540430186, 37990816, 102222641, 636034155, 101960673, 17872387, 913257153, 540985857, 397352648, 478910612, 332234994, 5293089, 645386275, 1072636657, 274765347, 512374679, 79526015, 101701358, 15511096, 728027530, 101327015, 838272620, 108479865, 294691815, 980385105, 644477492, 151252929, 804807352, 237006048, 195546607, 389448737, 737210924, 5481644, 4507261, 737094663, 797262587, 895794236, 195217606, 134716329, 234964024, 487214283, 868397547, 827532387, 167915189, 867652677, 1031 ], "storeSequenceIndicesEnabled": false, "size": 256, "capacity": 256, "initialAcceptFraction": 0.125, "timeDecay": 1.0e-4, "sequenceIndexOfMostRecentTimeDecayUpdate": 0, "maxSequenceIndex": 1493, "compressed": true, "randomSeed": -8084622083950763255 }, { "version": "2.0", "weight": [ -1.7102325, -1.7106767, -1.7218745, -1.7244233, -1.7484547, -1.7266585, -1.772923, -1.7281314, -1.734391, -1.752405, -1.7837251, -1.7333705, -1.7823449, -1.817378, -1.8416303, -1.7505863, -1.7800984, -1.9186565, -1.8795339, -1.8090374, -1.8483154, -1.9879023, -1.8898373, -1.7887161, -1.8517776, -1.8900756, -1.9099575, -1.845195, -1.854385, -1.8797662, -1.8626833, -1.7688557, -2.2654526, -1.9594679, -1.7884431, -2.1558592, -2.0876853, -2.0811498, -2.0088906, -1.968705, -1.8442656, -1.8887308, -1.8607655, -3.0018377, -2.1193664, -1.9289687, -1.934932, -1.8580946, -1.8834854, -1.8530927, -2.0006964, -2.0897899, -2.0771008, -1.9469224, -2.0084789, -2.2256832, -2.083075, -1.8657632, -1.9859991, -2.0511184, -1.9161814, -2.4712257, -1.9124635, -1.7808094, -2.200315, -2.2816424, -2.2963982, -2.0322251, -2.0530868, -2.19593, -2.399444, -2.2074344, -2.203682, -2.0975952, -2.1148884, -2.646782, -2.401001, -2.039515, -2.1529696, -2.337291, -2.0687835, -2.413439, -3.056558, -2.312271, -2.0148916, -2.5917294, -2.1651769, -3.1119053, -3.8390062, -2.6814091, -2.4874709, -2.0005178, -2.5307102, -2.0668283, -2.4102242, -2.5936291, -2.5020297, -2.0634851, -1.9583627, -2.0916836, -2.759579, -2.054291, -2.1813471, -2.1769204, -2.5858107, -2.339425, -2.8946817, -2.5120027, -2.153619, -2.1004753, -2.2984838, -2.282694, -2.397826, -2.256161, -2.505667, -2.0490823, -2.1189764, -2.0119197, -2.5590618, -2.0721855, -2.1660438, -2.1627402, -2.0932841, -2.7577784, -2.6576955, -2.0936344, -2.3629692, -1.837828, -2.7482083, -2.3181837, -3.399002, -2.5708067, -3.2452874, -2.955638, -2.9488106, -2.7362404, -2.7175627, -3.9895449, -4.5948253, -2.4460433, -2.8982131, -3.036289, -2.6314957, -2.8254166, -3.2840562, -3.8990328, -2.2284503, -2.629425, -4.0859966, -3.3323238, -2.3749952, -3.6505778, -4.3730307, -2.5451531, -3.2214994, -4.9090548, -3.3397892, -2.9609098, -2.6038854, -2.8999689, -2.9174776, -2.337947, -5.2149744, -2.909756, -2.886039, -4.881517, -3.1630714, -2.9587462, -2.8257945, -2.2071874, -2.1769478, -3.0848937, -2.9584112, -2.4563642, -2.2238102, -5.1002517, -3.1732137, -5.56727, -4.225469, -2.8651657, -3.1462452, -9.351812, -3.2106128, -3.6531513, -8.315354, -4.451452, -2.5656998, -3.6258245, -3.6576633, -2.4644089, -2.8058252, -3.717551, -3.3379807, -3.3480532, -2.6379082, -2.1303928, -3.9951026, -2.6979685, -2.5670674, -2.140809, -2.9114952, -3.4694004, -3.273883, -2.554731, -2.128335, -4.286048, -6.0300655, -2.4410648, -2.459763, -2.6265686, -5.183496, -2.838463, -5.6320653, -5.394695, -3.785626, -5.6052732, -3.4936693, -2.6826017, -5.205424, -3.548408, -6.740735, -2.9324296, -2.3768349, -5.805819, -3.1873932, -2.4063437, -2.9075701, -3.0286765, -4.9715776, -2.6412039, -4.5007315, -3.5917234, -2.9010386, -2.401519, -4.756611, -2.0551183, -2.6262233, -3.2444184, -2.6554153, -2.59962, -3.252687, -3.0759692, -6.125144, -3.1548474, -2.172181, -2.4412844, -3.1854272, -3.338207, -3.7814631, -5.218697, -3.292173, -2.7732189, -2.6392634, -2.8407757, -5.678224, -2.1455255 ], "pointIndex": [ 0, 1033, 256, 12925232, 19860142, 18043876, 737946932, 823923450, 565691376, 183021252, 636417067, 51757271, 737816363, 686449508, 861844860, 427978892, 962954478, 534324419, 636861970, 376576157, 660837573, 738776017, 13232831, 1017869695, 290656334, 102027249, 455666323, 53302351, 102608512, 8690865, 102430203, 905674303, 18691713, 295185350, 228444615, 18363935, 590983554, 184520304, 386941844, 774726528, 377365903, 738735374, 47170199, 164112874, 830353971, 653232343, 102479584, 127943082, 26373829, 853188653, 1065219595, 102500515, 151820201, 49759229, 534223220, 636861288, 57704659, 534440039, 753399667, 624494858, 533952662, 843738734, 788583314, 101668504, 726055258, 835280702, 1043594699, 534232169, 102361968, 187845267, 962395576, 1031624016, 130439257, 903453516, 1095012325, 25807281, 286351021, 838971423, 949437683, 405169980, 375988219, 652284322, 655425716, 761459031, 376440460, 614799833, 738409697, 785504736, 1033 ], "storeSequenceIndicesEnabled": false, "size": 256, "capacity": 256, "initialAcceptFraction": 0.125, "timeDecay": 1.0e-4, "sequenceIndexOfMostRecentTimeDecayUpdate": 0, "maxSequenceIndex": 1493, "compressed": true, "randomSeed": 1876375996478369417 }, { "version": "2.0", "weight": [ -1.656019, -1.6580104, -1.6578665, -1.6640373, -1.6712515, -1.6762936, -1.6730125, -1.6662111, -1.6866534, -1.7095369, -1.7216151, -1.7155652, -1.6988926, -1.6777173, -1.6937543, -1.6859257, -1.7018273, -1.6874223, -1.8165721, -1.7920341, -1.7250608, -1.7262647, -1.7521154, -1.7604737, -1.7186152, -1.8678156, -1.7036458, -1.684932, -1.7272867, -1.7302197, -1.8157284, -1.6931717, -1.8684835, -1.9245646, -1.7443494, -2.3173852, -2.3280199, -1.9060123, -1.885168, -1.9172245, -1.9962476, -1.7415087, -1.804002, -1.7874721, -1.8480979, -1.7777001, -1.7719274, -1.9258261, -1.8681453, -2.0535119, -1.8060087, -2.0503588, -1.9844753, -1.7585043, -2.822942, -1.7392656, -1.7083489, -2.1541893, -1.7901094, -1.7949449, -1.7823777, -1.8484274, -1.8914237, -1.9511005, -1.898297, -2.041157, -2.243955, -2.0601175, -2.067163, -3.0740283, -1.8782701, -2.6605234, -2.3239706, -2.8802342, -2.3282926, -1.9755129, -2.4496348, -1.9982197, -2.0463336, -2.0588064, -2.2567818, -2.8873181, -2.2662315, -1.9776943, -2.3999114, -2.2588086, -1.991948, -1.8267877, -1.8300658, -2.3278456, -1.9874305, -1.9373515, -1.8812344, -1.8328129, -1.9801755, -2.1545746, -2.2382958, -2.1801105, -2.0798466, -2.4324725, -2.375275, -1.8256987, -2.637144, -2.389102, -3.5763822, -2.1500144, -2.226164, -2.3502855, -2.6395602, -2.8662357, -2.8829107, -1.9964328, -1.8523451, -1.7519509, -1.9110743, -2.157954, -2.4338145, -2.005445, -1.9867252, -1.9197575, -1.8163303, -1.8098514, -2.0345504, -2.0476131, -2.043342, -2.5049953, -1.9068856, -1.974582, -3.9669302, -2.4419277, -2.7219682, -3.466173, -2.1854036, -2.248525, -2.4205265, -2.1431952, -2.7012627, -2.2175283, -2.1179817, -3.480231, -4.594685, -4.148525, -2.5355668, -2.7218988, -3.107209, -3.0598428, -3.2045312, -3.0200884, -3.7437663, -2.8024817, -2.8117232, -3.225925, -2.039732, -4.758175, -3.326319, -2.503129, -2.1320293, -2.0589864, -4.8441477, -2.5802937, -2.1175923, -2.7892077, -4.0004416, -3.2411966, -4.2669926, -3.4929066, -2.565467, -4.054648, -2.159858, -3.35157, -3.173471, -2.6001463, -2.4695635, -4.582937, -2.2184834, -2.050262, -1.8738642, -5.7333293, -1.9362634, -4.2702174, -3.821907, -3.0997074, -2.6365895, -2.1213505, -3.0730777, -2.0265932, -2.5071113, -2.6132777, -5.2329154, -3.6723025, -2.0291698, -2.535118, -3.3466601, -3.638253, -2.5475395, -2.1876795, -2.3624208, -2.5825639, -4.5250173, -2.9519923, -3.0251846, -3.7545924, -3.4826229, -4.3434815, -2.801646, -3.7608492, -5.958017, -2.4195075, -6.94603, -4.2892704, -4.299722, -3.2493396, -3.3746479, -3.3338714, -4.1913214, -3.5012274, -6.0780706, -2.761881, -4.0485625, -3.4803429, -4.089557, -3.9174495, -3.7321932, -2.5362492, -2.3141446, -2.4441571, -3.818552, -3.7019074, -2.0417445, -3.7441072, -1.9211413, -3.3088958, -5.695583, -2.4738545, -2.9835706, -3.9554763, -4.294223, -4.011585, -2.8165956, -4.076753, -2.13725, -7.237174, -2.3534398, -3.445057, -2.4009888, -2.042431, -2.2111802, -2.7649636, -2.5871248, -2.6968222, -3.3464444, -3.311163, -4.6309342, -4.032488, -4.330639, -2.9021716 ], "pointIndex": [ 0, 1033, 256, 473734442, 2664181, 112067496, 482288034, 1039874851, 242855522, 215912766, 359297542, 556121297, 897529663, 729678080, 869322643, 1253250, 1017850521, 12928206, 745622665, 48739830, 643858568, 194606339, 543284606, 111913508, 50264771, 804052480, 35729433, 757147520, 102290598, 643731060, 93634695, 745801115, 211791523, 141190295, 876711343, 746008406, 225347926, 556059445, 745878593, 302545701, 343325408, 859987449, 291273751, 21035170, 110844348, 243767315, 770969719, 378589457, 481228433, 771979702, 361435172, 93029262, 212219082, 101586459, 356612281, 101668145, 844435841, 816933684, 102297813, 501970905, 101851348, 661906690, 297946411, 3653217, 745331709, 150287811, 745204308, 38443672, 422201509, 650003963, 599857732, 218302497, 826156409, 225364932, 543229573, 745452197, 191193, 556259609, 326404372, 386302759, 102348821, 640860344, 367363669, 745727814, 638602199, 21202352, 745923171, 111964321, 1030 ], "storeSequenceIndicesEnabled": false, "size": 256, "capacity": 256, "initialAcceptFraction": 0.125, "timeDecay": 1.0e-4, "sequenceIndexOfMostRecentTimeDecayUpdate": 0, "maxSequenceIndex": 1493, "compressed": true, "randomSeed": -2204909260360194046 }, { "version": "2.0", "weight": [ -1.730323, -1.742828, -1.7478267, -1.7488226, -1.7658932, -1.7979212, -1.7513748, -1.7601001, -1.8694206, -1.7907435, -1.8348733, -1.8080705, -1.9233587, -1.8082566, -1.7582871, -1.76278, -1.8169695, -1.9336684, -1.9069245, -1.8038816, -1.84187, -1.8483424, -1.8486806, -1.8643656, -1.8404105, -1.9839911, -1.9260427, -1.8572724, -1.8246914, -1.798383, -1.9120096, -1.7666714, -2.270041, -1.9683915, -1.9873596, -1.9512979, -2.0728245, -1.9253695, -1.94445, -1.8157637, -1.9546065, -2.1858442, -2.0819132, -1.9846267, -1.9278313, -2.015536, -2.1885037, -1.9759471, -2.1634674, -2.0335054, -1.9880213, -2.1104834, -1.9865267, -2.0156908, -2.3391416, -1.9760637, -1.9009969, -1.9003448, -1.9998822, -1.8235197, -1.8613955, -1.9787422, -2.3973725, -1.7952727, -2.3285503, -2.353048, -2.7485626, -2.2356188, -2.834423, -2.1354256, -2.226179, -2.1007419, -2.2443857, -2.1306915, -2.444321, -2.8282566, -1.9531182, -2.0946836, -2.2666774, -2.2573767, -2.1929116, -2.30298, -1.9809619, -2.7987509, -2.550264, -2.283383, -2.3615265, -2.9488018, -2.2610583, -3.1094718, -2.7515755, -2.1720796, -2.2347355, -2.2103302, -2.190134, -2.7173781, -2.33031, -2.616049, -2.5021603, -3.0292487, -2.7652547, -2.2304795, -2.4867032, -2.3336337, -2.1582317, -2.2383635, -2.1751463, -2.2199006, -2.177874, -2.4507465, -2.9135127, -2.0451937, -1.9926541, -2.0187225, -2.2701643, -2.308212, -2.3873026, -2.2092636, -2.752517, -1.9147124, -2.357816, -2.2217934, -2.0571294, -2.2435346, -2.2057357, -3.3210113, -2.5308971, -1.8066989, -4.0470686, -2.378088, -3.5435028, -2.8419998, -3.1035783, -4.3567505, -4.4041286, -4.1313505, -2.3421085, -3.2468865, -3.1362343, -2.8429937, -2.435654, -4.2078276, -2.3967023, -2.4916565, -3.2946203, -3.5685098, -2.7417114, -2.1358972, -3.034784, -4.156872, -2.9813933, -3.027067, -4.866516, -2.1356533, -3.0307004, -3.9780993, -5.536298, -3.1343129, -3.4540765, -3.5801847, -2.3000717, -2.5552542, -2.4868872, -2.6451788, -2.9759266, -4.552585, -3.490288, -4.1270084, -3.3920908, -4.825763, -6.669724, -3.847581, -2.6483405, -2.621604, -4.932221, -3.0901523, -3.3913136, -2.4451401, -2.8663428, -8.479628, -3.5417347, -6.19819, -2.781825, -2.8313844, -3.1323414, -2.3094926, -6.6986847, -2.5223255, -3.894261, -2.2034428, -2.7831585, -2.8053238, -3.980969, -2.7004611, -2.430564, -3.1612046, -3.270475, -3.0698972, -3.2594793, -3.1010172, -3.6406608, -4.078909, -6.4668474, -2.279233, -2.6484544, -2.8335543, -3.2978861, -3.8962936, -3.0345144, -3.2081096, -3.04323, -3.4193723, -2.4854243, -2.9113395, -2.3584383, -8.27435, -3.8476827, -2.668799, -5.420402, -3.4819248, -3.6587346, -3.1479921, -3.0343697, -2.5434158, -2.1916368, -2.6067011, -3.1182675, -3.9397695, -2.4570735, -2.7494276, -2.8964815, -2.7550788, -2.770167, -2.6556418, -2.406011, -4.1283875, -2.3407385, -3.6427588, -3.2966878, -2.1310863, -2.049569, -2.5727491, -2.8036466, -2.7366984, -3.2630098, -2.1418307, -2.421375, -2.4011054, -2.494355, -2.8232613, -3.2020233, -3.3500326, -3.652649, -7.6765313, -4.580076, -2.053722 ], "pointIndex": [ 0, 1034, 256, 892856593, 83782320, 1040366132, 39458104, 354110855, 731111470, 297899383, 970946101, 610707000, 434160422, 525807418, 741603480, 658257941, 101817190, 754317410, 109338530, 1054501127, 741518521, 741603610, 615599867, 930829415, 101870795, 193933163, 608, 991204086, 544293808, 102081741, 943758026, 445749317, 101830553, 868007044, 79054706, 687741632, 5016139, 38572396, 94169663, 12879736, 93790366, 93259240, 165672636, 838735358, 791170729, 167433940, 17330732, 112699772, 112928865, 17248314, 741386624, 101812964, 52049029, 9511314, 472328981, 1787747, 973841945, 327664817, 93627964, 102373904, 600260, 919492622, 742128323, 101987016, 39972498, 102636947, 101864795, 198046330, 1039804545, 150548776, 545078689, 395631936, 17238497, 324606297, 13061357, 558199045, 1052176024, 157759970, 264843794, 313323575, 1084386925, 741612347, 374240190, 40027325, 497241746, 800521821, 764095481, 348247169, 1034 ], "storeSequenceIndicesEnabled": false, "size": 256, "capacity": 256, "initialAcceptFraction": 0.125, "timeDecay": 1.0e-4, "sequenceIndexOfMostRecentTimeDecayUpdate": 0, "maxSequenceIndex": 1493, "compressed": true, "randomSeed": 5154851018987160 }, { "version": "2.0", "weight": [ -1.8081539, -1.8374668, -1.8200548, -1.8378677, -1.8699274, -1.8204843, -1.837169, -1.8560339, -1.8706534, -1.9132446, -1.9125419, -1.8441378, -1.843584, -1.9976562, -1.8647866, -1.8639615, -1.9602515, -2.0096579, -1.9230106, -2.0387719, -1.9202425, -2.0972016, -1.9226053, -2.0360386, -1.9534422, -2.0847018, -1.8873698, -2.0146236, -2.360392, -1.8668797, -2.2097003, -1.9132732, -1.9552976, -2.076997, -1.9653509, -2.1352947, -2.065349, -2.3188722, -1.9250214, -2.4378948, -2.0432777, -2.142098, -1.9360743, -2.487698, -2.1203842, -2.517966, -1.9550864, -2.0991573, -2.159543, -2.1411753, -2.1662586, -2.385162, -2.2047498, -2.0531802, -1.9113472, -2.2622082, -2.1727529, -2.456896, -2.9784014, -1.9387985, -2.0268776, -2.5803947, -2.2401416, -1.9755834, -2.4991083, -2.5011022, -2.0349967, -3.7397747, -2.9534667, -1.9944588, -2.037487, -2.8034809, -2.3971744, -3.147875, -2.4144685, -2.3702087, -2.379169, -2.5259547, -2.1148481, -2.552007, -2.7552524, -2.1916394, -2.8888388, -2.3583164, -2.1572099, -2.4837234, -2.0414467, -2.527586, -2.8253407, -2.319006, -3.878649, -2.556014, -2.6850367, -2.0110333, -2.835685, -2.2800486, -2.222945, -2.204285, -2.1956346, -2.7633805, -2.450427, -2.3268688, -2.6188986, -2.5636187, -2.4748957, -2.2742703, -2.3604908, -2.5363846, -2.1213899, -2.207771, -1.984652, -2.5722198, -2.834556, -3.3804405, -2.203345, -2.8947597, -3.4934092, -3.3917785, -3.1407318, -1.968794, -2.0351653, -2.9231207, -2.4528592, -2.8457716, -2.8268237, -2.8932538, -2.2901223, -1.9915406, -3.8448112, -2.6099825, -5.02955, -3.5970562, -3.6908493, -2.3327637, -2.6917741, -3.83888, -4.2903056, -6.846097, -5.440284, -2.6044068, -3.2046525, -3.0699115, -2.0554912, -3.3021948, -6.288108, -3.5863686, -2.4533448, -4.337389, -5.0689197, -3.590733, -2.4593842, -2.7087104, -5.2342978, -3.591647, -3.240329, -3.914902, -3.1409209, -2.2925715, -2.2064683, -4.645542, -2.8061657, -3.4201372, -6.2779756, -2.6473892, -2.25159, -3.0004153, -4.3399687, -2.778047, -3.686897, -6.5347357, -4.746953, -3.2072554, -3.0714288, -2.2840912, -2.2471886, -4.857505, -2.7394643, -3.725049, -3.6219473, -3.732815, -4.6330414, -4.9115586, -5.9235597, -2.7386565, -3.1102774, -2.7139144, -3.1139874, -4.584773, -4.4270344, -3.285366, -3.441138, -3.2958968, -4.4018235, -3.7060828, -2.7993503, -7.576483, -6.246723, -2.2072713, -4.2723317, -2.8648398, -3.3212817, -3.0167284, -2.7412393, -2.6174183, -4.830457, -5.2901287, -3.81263, -3.8005095, -3.0297546, -3.3717444, -5.015555, -3.2489576, -7.602393, -2.5329897, -9.401524, -3.324802, -4.047294, -3.743376, -2.448434, -2.5218654, -2.5525658, -2.5849967, -2.642297, -3.920143, -2.6349912, -5.1725287, -5.2311077, -5.918149, -4.343884, -3.5727563, -4.8944764, -3.4397783, -3.5534933, -7.381869, -5.341848, -3.879571, -3.4132533, -5.1299214, -5.8725877, -2.2350998, -3.5410697, -2.562155, -2.9176178, -3.6295671, -3.4202685, -4.111259, -3.0156856, -3.8100078, -3.2862966, -3.1310773, -2.8316627, -3.1592243, -3.6751955, -6.4956803, -7.003652, -2.2157168 ], "pointIndex": [ 0, 1031, 256, 730705442, 101541269, 872337104, 733828760, 979610331, 534473934, 734528974, 813205535, 287203103, 389823967, 111232745, 532327301, 969391962, 664575724, 832452191, 1065470943, 301502293, 102230419, 325946114, 625279169, 989065186, 101541559, 431849792, 969883009, 891533291, 22464106, 565533949, 370275387, 734159992, 969270065, 734632883, 147912931, 828569205, 887385125, 645128931, 531554789, 803581937, 729826545, 38785253, 760795904, 226882793, 786958481, 414281905, 988240819, 14948113, 10468712, 111382807, 218315513, 111669281, 360493175, 374912759, 48659354, 101529269, 1094859648, 110779103, 583507302, 13927011, 17752342, 144463961, 198210241, 99386786, 776156565, 8539921, 841806657, 679562898, 101786306, 182607929, 17226317, 199717, 92859558, 93368488, 734037877, 428492437, 101196893, 62051651, 612144416, 454735625, 209071873, 926926205, 101280947, 733900418, 644389555, 727404667, 427786535, 1090139886, 1031 ], "storeSequenceIndicesEnabled": false, "size": 256, "capacity": 256, "initialAcceptFraction": 0.125, "timeDecay": 1.0e-4, "sequenceIndexOfMostRecentTimeDecayUpdate": 0, "maxSequenceIndex": 1493, "compressed": true, "randomSeed": 5217279339685084469 }, { "version": "2.0", "weight": [ -1.7402439, -1.7715176, -1.7717422, -1.7729152, -1.7921242, -1.7870976, -1.7758383, -1.7789812, -1.8094795, -1.7930634, -1.8064483, -1.8188128, -1.792601, -1.7994062, -1.7764919, -1.8312615, -1.8498967, -1.8220494, -1.9127506, -1.8363383, -1.8584883, -1.816268, -1.9125257, -1.9043639, -1.9346454, -2.0878932, -1.8999056, -1.8516107, -1.8305874, -1.825061, -1.7851197, -1.8423272, -1.8922483, -1.9946264, -1.8978056, -1.9140006, -1.9510587, -2.0384092, -1.9432021, -1.8557298, -1.8817563, -2.0289328, -1.9969633, -2.0407221, -1.9843104, -2.0930736, -2.0045543, -1.9131368, -1.9693974, -1.9793379, -2.3255649, -2.1001842, -2.1157966, -1.9513168, -2.4928272, -1.9755663, -2.0237503, -1.8789812, -1.8864049, -2.1880121, -1.8265959, -2.554407, -1.7857251, -1.8430191, -1.9230493, -2.6205242, -2.3441565, -2.6843765, -2.3986797, -2.2215936, -2.143354, -2.0351074, -2.0040874, -3.107786, -2.0737038, -2.2980378, -2.2727246, -2.278061, -2.0756097, -1.8627639, -2.027572, -2.1260366, -2.1081305, -2.0530365, -2.0896275, -2.4408777, -3.171343, -2.4679239, -2.0811162, -2.8935795, -2.0410137, -2.6020117, -2.2546835, -2.7901294, -2.466587, -1.9456893, -2.0967803, -2.079998, -2.105479, -3.0702155, -2.2765713, -2.4188864, -2.5822628, -2.652611, -2.1469536, -2.8105438, -2.305231, -2.0727637, -2.304691, -2.6648202, -2.8879018, -2.3512928, -2.9288738, -2.6278293, -2.3775413, -2.7552533, -2.3438475, -2.17639, -1.8908613, -2.5958147, -2.374652, -2.3235338, -1.93208, -3.1439962, -2.779953, -2.098122, -1.7961223, -2.524623, -6.1634088, -2.234678, -2.4268363, -2.7040474, -3.890868, -2.4822774, -2.463142, -3.2118921, -3.2390893, -2.6532862, -4.385273, -2.744431, -2.9693918, -2.2373397, -2.243682, -3.2172477, -2.9261057, -2.8296132, -2.0616693, -9.601502, -3.495537, -4.6509814, -2.4027858, -3.2622712, -3.134057, -4.5410876, -2.684269, -2.4046478, -3.3885858, -2.761631, -2.1438603, -2.157503, -1.9436723, -2.1001916, -2.5161092, -4.653356, -2.6913075, -7.1517897, -3.5990102, -3.41811, -2.497729, -2.250088, -2.4825282, -5.0283313, -3.0872464, -3.9509413, -4.047483, -2.8081558, -3.23343, -3.2008176, -4.0549593, -3.6211317, -4.5967646, -2.5286436, -2.1516042, -3.1540043, -2.893712, -2.8100188, -2.601966, -3.9216847, -3.706026, -3.1440256, -2.6428132, -2.5636818, -2.020567, -2.281868, -3.9018033, -4.2405014, -3.4563286, -2.2985587, -2.3244133, -5.6315384, -3.4825268, -4.190746, -2.4551625, -2.731267, -2.700726, -2.7283032, -5.2848864, -4.379558, -3.20883, -2.2771497, -3.3881977, -3.0294724, -4.051019, -2.4255893, -3.080031, -3.0699701, -4.016986, -2.4882278, -2.342394, -2.9968462, -2.8596075, -3.7575955, -3.3068979, -2.6474195, -4.8887773, -7.5796194, -3.702549, -2.990904, -4.659867, -2.7444, -3.8493836, -3.880225, -3.4993148, -2.7812548, -3.0489693, -3.534438, -3.2690976, -2.97994, -3.840988, -2.8579106, -3.848355, -2.4177978, -2.4319067, -2.8399181, -3.2112718, -2.4927819, -2.4932735, -4.5259833, -3.6803274, -3.7987075, -3.02941, -5.06464, -6.8033524, -3.0422902, -1.8099041, -4.20267 ], "pointIndex": [ 0, 1032, 256, 322351781, 736453349, 21358807, 532481954, 1062624459, 44859889, 110987148, 101471901, 737004487, 570387769, 653203616, 870390445, 92999519, 617470591, 930169121, 542155801, 578519467, 875577705, 1044989688, 863110088, 1099815297, 17303150, 628833145, 44916074, 111678178, 387406006, 606649764, 9336841, 978059944, 701176298, 102086622, 140403413, 777917117, 634967691, 93896673, 670187970, 634816746, 658685306, 423725050, 39619214, 186421378, 737004706, 737058911, 858037786, 831270595, 40897519, 349547230, 111075652, 721877136, 51545994, 22409289, 1050065693, 40657401, 405732249, 101459289, 101587623, 8944842, 101597621, 635016669, 406018648, 1081674617, 383183594, 736325061, 217943044, 635219231, 68666250, 111690245, 334376103, 593657005, 40545350, 320351456, 67785386, 449550085, 102408424, 291740869, 736452662, 901496954, 737144093, 8951158, 349305231, 703310285, 611540236, 301477630, 701729482, 626664039, 834 ], "storeSequenceIndicesEnabled": false, "size": 256, "capacity": 256, "initialAcceptFraction": 0.125, "timeDecay": 1.0e-4, "sequenceIndexOfMostRecentTimeDecayUpdate": 0, "maxSequenceIndex": 1493, "compressed": true, "randomSeed": -7622741475383530684 }, { "version": "2.0", "weight": [ -1.774023, -1.7915899, -1.7797278, -1.8040701, -1.797157, -1.81414, -1.7931064, -1.8391774, -1.9360573, -1.7999569, -1.860272, -1.8243421, -1.8224331, -1.8005509, -1.9047723, -1.8399519, -1.8803104, -2.0661376, -1.938313, -1.9353746, -1.8669463, -1.8922094, -1.9107784, -2.0149715, -1.8881586, -1.8292402, -1.8839419, -1.8483727, -2.048407, -2.229058, -1.925212, -1.8424052, -1.8865591, -1.8842703, -1.9844824, -2.1245017, -2.0911503, -1.9543402, -2.0314279, -1.935985, -2.060191, -1.9419324, -1.8944805, -1.9358683, -2.0144799, -2.0392423, -2.1870213, -2.1212554, -2.0225325, -1.9322077, -2.2719066, -1.9704443, -1.9016994, -1.8957658, -1.932177, -1.9371688, -1.8726842, -2.4470332, -2.1778688, -2.242843, -2.386395, -2.1215289, -2.0632644, -1.896643, -1.9706954, -2.3573024, -2.4457123, -2.3162618, -2.1529365, -2.1207964, -2.215731, -2.2784538, -2.1408665, -2.7754986, -3.0355916, -2.2823129, -2.0461767, -2.0364351, -2.25437, -1.9475571, -3.3389747, -2.6050103, -2.2292125, -2.0845304, -2.9060955, -2.1522748, -2.150977, -2.4641476, -2.7047272, -2.4684005, -2.2043037, -2.0582888, -2.089416, -2.650215, -2.380549, -3.1685722, -2.3977356, -2.8262534, -2.6793022, -2.393338, -2.0523756, -3.2790527, -2.5578258, -3.6209726, -2.1033509, -2.0837903, -2.463229, -2.0076504, -2.3548303, -2.7862737, -1.9345337, -4.3442693, -2.0491817, -2.2950623, -2.600202, -2.5076246, -2.4542227, -2.4990933, -2.511882, -2.5147402, -2.4657295, -2.9325738, -2.552659, -2.4603546, -2.262115, -2.2550583, -2.126276, -2.0902517, -2.7578685, -3.3128507, -2.5182905, -2.8661375, -3.2242167, -4.054849, -3.5046144, -3.8067148, -2.4343145, -4.1870623, -2.4265811, -2.5110447, -2.583645, -3.0129137, -4.2257824, -2.5676336, -3.0421224, -2.5205665, -2.580509, -3.8105268, -4.5849757, -3.0702279, -4.3156548, -5.339658, -2.4640913, -3.1956568, -3.5012345, -2.1150496, -2.41229, -3.3688462, -2.4248898, -2.633352, -2.5163412, -5.524555, -8.271144, -4.23015, -2.625746, -3.109844, -2.6400166, -2.247166, -3.2418237, -4.3864026, -3.2039948, -2.212502, -3.369073, -2.2032907, -2.6539803, -3.2240422, -2.6461356, -3.6769938, -4.2367015, -3.5965903, -3.993267, -2.508745, -2.693874, -4.23602, -3.8297422, -3.0399187, -2.7611825, -2.7981215, -3.327198, -2.5528767, -3.2257109, -4.360021, -4.2763367, -2.8529687, -2.5961845, -3.0175123, -2.844181, -3.5635657, -3.4486747, -3.3586383, -2.439909, -5.841004, -3.0691068, -6.45293, -4.8199387, -2.8189893, -2.73818, -5.8322053, -3.7959895, -2.4074452, -3.7499707, -3.3297813, -2.226307, -3.956066, -5.8001723, -5.681697, -2.690155, -2.4887192, -3.4882722, -3.751763, -4.210731, -2.3716323, -4.4690185, -4.7768936, -4.98789, -3.72979, -4.115402, -5.0938144, -6.105075, -3.920368, -2.9314928, -2.9202876, -2.5164769, -3.3145072, -2.9779308, -3.7029696, -5.565864, -4.0892644, -3.9738, -4.5081983, -4.2934494, -4.2340026, -2.7774496, -3.2071543, -3.9750972, -4.6741076, -3.725502, -2.9946032, -4.4441195, -4.248562, -3.0811677, -3.390902, -2.641154, -2.4110358, -3.4044423, -2.811184 ], "pointIndex": [ 0, 1027, 256, 795885189, 932794105, 366304510, 302620956, 730686999, 98322627, 324446893, 934006890, 372306516, 549635283, 882361931, 147958088, 101104940, 7008949, 199760027, 1053712108, 372334067, 290391436, 730642959, 781867907, 833752788, 110527534, 85534968, 482000475, 101105239, 17006988, 302636524, 418677249, 412110020, 8606079, 90849690, 100584802, 751480431, 83486627, 47802095, 23221628, 158822718, 405743321, 292597151, 49815305, 730917521, 849220238, 435379570, 12779126, 110101638, 40025284, 109949597, 110527616, 65076474, 26444367, 629497573, 100483916, 131993, 628893666, 985067299, 217795360, 1084043019, 992418307, 861570920, 92095961, 730820283, 629262542, 730374661, 927724258, 649998783, 17107639, 195867320, 31649727, 237391626, 82666283, 1040376095, 301244563, 298625690, 785725167, 595803452, 730345084, 731101690, 100641805, 1074847555, 372208448, 943362196, 853426892, 730254287, 661201039, 91968908, 1027 ], "storeSequenceIndicesEnabled": false, "size": 256, "capacity": 256, "initialAcceptFraction": 0.125, "timeDecay": 1.0e-4, "sequenceIndexOfMostRecentTimeDecayUpdate": 0, "maxSequenceIndex": 1493, "compressed": true, "randomSeed": 6914291515535893206 }, { "version": "2.0", "weight": [ -1.7116114, -1.7193624, -1.7149334, -1.7765579, -1.7227011, -1.7280554, -1.803988, -1.8192419, -1.880212, -1.738068, -1.726055, -1.7334659, -1.7686765, -1.9413058, -1.8400279, -1.8209994, -1.8396332, -1.918436, -1.9853563, -1.7632383, -1.870952, -1.7960379, -1.8212568, -1.847499, -1.735794, -1.8251816, -1.8882881, -2.0010302, -1.9731063, -1.9634166, -1.8403689, -1.8324114, -1.832549, -1.9132676, -2.0487852, -1.9600496, -1.9369367, -2.0255048, -1.9971377, -1.7876623, -1.9030501, -1.9452527, -1.9870477, -1.8936048, -2.052909, -2.2554862, -1.916798, -2.0171506, -1.947983, -1.9357775, -1.8765414, -1.9844109, -2.1523173, -1.8931376, -2.2072728, -2.0916834, -2.2469761, -2.0514321, -2.061675, -2.477312, -2.159413, -1.8466673, -1.9504511, -2.0847456, -2.6211605, -2.119909, -1.9779993, -2.0145493, -2.2308486, -2.5133805, -2.3332384, -3.3734694, -2.7167888, -2.2176805, -2.0644975, -3.0167255, -2.115833, -2.5317225, -2.028342, -2.6108594, -3.0894272, -2.1356087, -2.08475, -2.2557914, -2.4471416, -2.0012484, -2.0584621, -2.0478685, -2.1917071, -2.1792703, -2.0852518, -2.4448123, -2.508048, -2.3951724, -2.2761412, -2.202093, -2.1741457, -2.3569362, -2.2688167, -1.9402057, -2.3326848, -1.9554741, -2.4394348, -2.1338592, -2.2859528, -3.0535233, -2.6992383, -2.3668253, -1.9805595, -2.2191916, -2.9119806, -3.0231638, -3.7940264, -3.472415, -2.2586713, -2.8812935, -2.508815, -2.3506222, -2.7313209, -3.2039728, -2.7354372, -2.2849772, -2.4973497, -2.3568068, -2.6124933, -2.632691, -2.060145, -2.2867982, -3.925342, -3.8566859, -4.712603, -2.7829478, -2.603042, -3.408554, -2.3177102, -3.0999222, -4.162783, -3.377817, -2.3031337, -3.2809277, -2.8068426, -2.7257047, -3.1452985, -3.7654269, -3.3857672, -3.0550027, -3.1665387, -6.631067, -3.0573728, -2.56562, -3.0590615, -4.4657974, -3.4445226, -2.5729485, -3.8201149, -3.057486, -3.3230453, -4.286448, -6.512903, -2.8680158, -2.9603152, -4.0648785, -3.4620616, -3.6702805, -2.4065633, -2.529432, -3.29861, -3.702016, -2.990955, -2.8959627, -2.6874902, -2.3227425, -2.2434037, -2.4430377, -3.0195284, -4.2813425, -3.0892925, -3.2313266, -2.6872704, -4.8481565, -2.2721426, -2.767864, -2.378176, -2.7616863, -3.8259947, -4.6816, -3.7140455, -2.9816554, -2.5336738, -2.459883, -3.1654189, -2.6054814, -3.4753697, -2.4494786, -2.881146, -3.305719, -3.675132, -4.84059, -3.1957328, -2.6364293, -2.0368037, -2.454147, -4.4343657, -2.8810613, -2.626602, -2.4633522, -3.2197614, -4.500364, -3.1722047, -2.9617815, -2.6197367, -3.4670172, -4.1381783, -4.145891, -5.9670277, -2.559469, -2.4521472, -2.6493185, -2.1386209, -3.3228016, -2.2299201, -3.2444708, -5.173487, -3.8103428, -3.3155723, -6.7491, -5.1732445, -4.4776053, -5.708737, -4.027221, -6.0136676, -5.257943, -3.108551, -2.6943, -3.427133, -2.8769026, -3.136073, -3.536758, -2.8335114, -5.6172113, -3.6632707, -2.8230252, -7.357853, -2.4444187, -4.881888, -2.7099879, -3.6604736, -2.8145733, -3.1300023, -4.95443, -2.9404337, -3.2223191, -3.1461432, -2.5188353, -3.2525144, -6.871737 ], "pointIndex": [ 0, 1018, 256, 519300794, 146506775, 85205723, 85851963, 33333624, 608728875, 768456528, 12989886, 251283549, 569589069, 109015562, 842669925, 383253129, 99847830, 108087464, 150587725, 16700547, 276942475, 613190057, 526605359, 199033721, 429988369, 895354274, 719643584, 526507206, 638148238, 100129074, 1023832956, 100457226, 784201501, 608676791, 455582248, 96558550, 100475878, 99780633, 150651584, 526863024, 496725642, 439743694, 231269939, 608492494, 618537702, 46730916, 764339704, 608577466, 720190978, 100555791, 368632517, 519225434, 714819425, 992735130, 987540509, 17249233, 31717446, 148305268, 16717006, 617825478, 617883879, 951104530, 951679556, 102869664, 720181002, 598194776, 759237020, 863257752, 923809299, 178763214, 202905107, 156826406, 201842509, 96149979, 159108543, 816172591, 145758374, 314526868, 952495265, 377269834, 519281456, 720019725, 818326958, 224983534, 720093826, 395904528, 840796964, 1028295913, 1018 ], "storeSequenceIndicesEnabled": false, "size": 256, "capacity": 256, "initialAcceptFraction": 0.125, "timeDecay": 1.0e-4, "sequenceIndexOfMostRecentTimeDecayUpdate": 0, "maxSequenceIndex": 1493, "compressed": true, "randomSeed": 3787296109052444972 }, { "version": "2.0", "weight": [ -1.7822136, -1.7858903, -1.7831833, -1.8468641, -1.8153635, -1.7894135, -1.7899549, -1.8472897, -1.874336, -1.8338463, -1.8562658, -1.7948748, -1.8154186, -1.8210052, -1.7925607, -1.9889343, -1.9014237, -1.8876861, -1.9601402, -1.8670936, -1.9100761, -2.0564911, -1.9975893, -1.9024395, -1.9173448, -1.8259848, -1.9069486, -1.8745391, -1.845707, -1.8465031, -1.8662122, -1.990147, -2.617406, -2.0310469, -1.9210284, -2.0028937, -1.9912771, -2.1610796, -2.0602884, -1.969253, -1.9323772, -2.0420732, -2.0165038, -2.0973177, -2.3302162, -2.0785978, -2.0696776, -2.146571, -2.0262496, -1.9717865, -2.0699093, -1.9783448, -1.8757489, -1.9281723, -1.9349449, -1.9520977, -1.876881, -1.8879987, -2.0160127, -1.9712034, -2.0479581, -2.0290914, -1.9482405, -2.1074188, -2.1253855, -3.0996, -2.7313483, -2.421764, -2.6459022, -2.2389348, -2.3732555, -2.0153146, -2.3576233, -2.0678961, -2.3686795, -2.6385045, -2.2504377, -2.6802177, -2.5189142, -2.7589202, -2.4385686, -2.158965, -2.5009072, -2.561385, -2.4129808, -2.0552092, -2.8681686, -2.228679, -2.40116, -2.4174414, -2.507823, -2.4867747, -2.6855984, -2.5417142, -2.5246844, -2.714921, -2.457773, -2.2524397, -3.1546721, -2.350862, -2.2299194, -2.2532384, -2.2387931, -3.050243, -2.3252528, -2.0254424, -2.1375828, -1.981914, -1.9652152, -2.5572667, -2.0133367, -2.806495, -1.9728041, -1.9287292, -1.9306608, -2.4589405, -2.3715656, -2.374967, -2.3084733, -2.3992236, -2.0633545, -2.0626562, -2.3103857, -2.2842586, -2.1463304, -2.821505, -1.9568058, -4.181665, -3.561463, -2.2161896, -5.574698, -4.390722, -8.17298, -3.1846137, -4.6807904, -2.7791724, -3.1926627, -2.6756501, -3.4955966, -3.6733696, -2.2717636, -2.7559743, -3.0809062, -3.874045, -3.0782855, -2.6614878, -5.440899, -2.3082488, -2.3861485, -4.2845254, -4.9419475, -3.2617643, -2.9930928, -2.982296, -3.7816305, -2.7534387, -4.3778343, -5.1580095, -2.6776557, -2.932181, -3.4272132, -2.646206, -4.590671, -2.2563183, -2.7549548, -3.39904, -3.9190156, -2.6796625, -3.0648444, -2.9834712, -3.099239, -2.346894, -3.2532306, -3.3351984, -3.9248145, -2.4177618, -3.646646, -3.8769495, -3.1397655, -3.476859, -4.1073747, -4.064442, -5.118728, -3.5872788, -2.9099495, -2.8846123, -3.9311929, -3.6287043, -2.6901407, -2.5542114, -3.933894, -6.483869, -3.1626828, -4.0844603, -4.0413003, -2.6275907, -2.607264, -3.3051088, -3.2341933, -3.383726, -2.9389303, -3.2197423, -3.4664629, -2.446136, -4.020691, -4.2334065, -4.3312907, -3.316707, -3.71078, -2.5877986, -3.0791035, -3.800262, -4.5766344, -2.7088625, -2.4924634, -3.4855504, -2.1242063, -5.634541, -2.2405314, -3.9521825, -3.410082, -3.8928645, -2.0707848, -3.598642, -4.171565, -2.0834177, -3.7352693, -2.6254995, -2.2136407, -3.8100197, -3.0341992, -4.7872925, -3.4985518, -2.4324002, -2.3759787, -3.1454952, -2.579984, -3.0597894, -3.0585287, -2.5369391, -6.497095, -2.2841067, -2.8507705, -4.7513022, -4.9640994, -2.3823218, -2.373228, -3.3436816, -3.097494, -3.3242962, -2.5567005, -3.1087434, -3.958174, -4.2728915, -2.1432495 ], "pointIndex": [ 4, 1034, 255, 1084224352, 612775973, 775011877, 14885892, 694393224, 724387472, 16039808, 484741238, 31984030, 136453127, 848243867, 661869503, 98261798, 729204304, 13155652, 20208865, 8585069, 766293447, 98823435, 1041024517, 1094378143, 106654982, 729925165, 729287122, 526260818, 564845704, 546415658, 273691629, 963105285, 98033810, 623036457, 142564715, 1025132454, 729907883, 88257394, 220961513, 729425505, 301172538, 526260874, 797634529, 295643722, 68737602, 852032819, 12991394, 103148435, 97887981, 188230236, 1025796622, 773904579, 379029408, 249903464, 98694588, 98319010, 1058839226, 98070031, 12780293, 370194563, 98598047, 97856078, 1015206828, 396894883, 985009838, 135930133, 41674035, 145270276, 975948990, 963749947, 106297018, 10881852, 641156228, 730126360, 729488250, 1057291153, 659342375, 98826916, 414199327, 370617982, 526304407, 220481755, 586276802, 31893725, 939302324, 584880609, 686776491, 1095865273 ], "storeSequenceIndicesEnabled": false, "size": 255, "capacity": 256, "initialAcceptFraction": 0.125, "timeDecay": 1.0e-4, "sequenceIndexOfMostRecentTimeDecayUpdate": 0, "maxSequenceIndex": 1493, "compressed": true, "randomSeed": -5672753689059104532 }, { "version": "2.0", "weight": [ -1.6926837, -1.6953135, -1.693962, -1.705493, -1.7032226, -1.6956446, -1.7786808, -1.7313516, -1.7263241, -1.8418415, -1.7423624, -1.7487277, -1.7095972, -1.836097, -1.7796501, -1.7407198, -1.8755876, -1.784155, -1.7682477, -1.8493526, -1.9121087, -1.871401, -1.8240936, -1.7850237, -1.7668632, -1.8328153, -1.8089825, -1.8687636, -1.8616337, -1.8001138, -1.7807441, -1.8213158, -1.9684231, -1.9526222, -2.0338533, -2.1408112, -2.2852738, -1.858178, -1.9813877, -1.9749699, -2.139913, -1.9170501, -2.0204365, -1.9807174, -1.8917884, -2.1505165, -1.8590758, -2.3220747, -1.8225602, -1.8185203, -1.788242, -1.8414049, -1.923939, -1.9286638, -1.8780352, -2.113653, -2.0078194, -2.1109946, -2.1245277, -2.000779, -1.9095522, -2.0611165, -1.7839305, -1.8407682, -2.0298007, -1.9727197, -2.399584, -2.4340546, -2.8725019, -2.3679655, -2.2451673, -2.6139588, -3.44795, -2.4071953, -3.473595, -1.9029214, -3.50474, -2.0787017, -1.9874296, -2.3343253, -2.140817, -2.51489, -2.4835806, -2.2768292, -2.1408467, -2.2224417, -2.0280964, -2.250768, -2.6658762, -1.8936803, -2.19682, -2.5010095, -2.241517, -1.9188976, -2.3375504, -2.6596344, -2.5181677, -1.9098765, -2.1285794, -3.0819921, -1.9810567, -2.025805, -1.824923, -2.229054, -2.2262502, -2.0635526, -2.0247133, -2.0068202, -2.379216, -2.650716, -2.270745, -2.480365, -2.2698033, -2.1786253, -2.6187828, -2.6349397, -2.4408374, -2.16784, -2.6513734, -2.3868005, -3.7567942, -2.0029392, -2.3018806, -2.119536, -2.4022324, -2.0750139, -1.82465, -1.9100113, -4.3763776, -2.2374268, -2.2899783, -3.27979, -3.7282438, -2.8306334, -2.806642, -3.3831556, -2.5906067, -2.9573925, -3.3446858, -3.4346583, -2.380708, -2.54247, -2.5066462, -6.5671644, -4.9619064, -5.505471, -3.6775048, -5.238884, -2.4483514, -4.7738414, -5.076409, -2.9238966, -2.0590265, -5.9587255, -4.4078083, -3.310751, -2.1367946, -3.657216, -2.1717088, -2.6528625, -4.5085382, -2.6432714, -2.179861, -2.646898, -3.457495, -2.911759, -2.9127052, -2.6047547, -4.2863765, -3.0610344, -3.6705728, -5.0402956, -2.730269, -2.7664797, -2.209829, -2.28492, -2.6362314, -2.744169, -2.679837, -2.1399748, -4.5384364, -6.703098, -2.5642817, -2.6404674, -4.9929314, -5.103037, -3.0537462, -2.4483762, -2.2775574, -2.751555, -2.4706, -5.9384184, -3.2506516, -2.9461324, -2.9949832, -1.9924194, -2.587697, -2.8196552, -2.4542396, -4.5523725, -3.297143, -2.5533626, -4.3790913, -3.1475134, -5.38378, -2.4848385, -2.6386168, -2.9099476, -3.3272696, -2.4708343, -4.6673064, -4.429226, -2.1829848, -2.2980208, -2.3107493, -3.160515, -2.5365744, -3.2322974, -4.24716, -4.0019116, -2.9284987, -2.5140069, -2.3332412, -4.2852173, -2.7014065, -3.1869707, -4.6838903, -2.4974182, -2.6522963, -4.6085706, -4.223153, -2.8773668, -2.690828, -3.079323, -3.2760134, -2.5726979, -2.3127034, -3.4032867, -2.7532125, -3.2214618, -3.6197226, -4.10335, -4.7822146, -2.63212, -2.7473643, -3.254893, -3.0988417, -2.918465, -3.0267155, -3.5459418, -2.644576, -3.4331813, -2.2789237, -2.186767, -3.0235982, -2.0071416 ], "pointIndex": [ 0, 1031, 256, 157718647, 731955296, 593370763, 10755667, 735980882, 101284650, 101194541, 621141072, 912832920, 864309552, 1005297019, 735936365, 592170510, 749188869, 101194704, 101395734, 470901845, 236753025, 327069920, 1002660931, 971316482, 92864529, 369172905, 501405610, 98224, 729189570, 7168367, 756265080, 735931688, 225883162, 289334653, 138585232, 110852237, 102112011, 237598655, 456664, 314402926, 318750991, 779055088, 411582759, 111475703, 972015691, 836566216, 130646318, 553902566, 458058464, 802460600, 9533434, 736873773, 101714220, 374896746, 258505784, 618452152, 585782867, 1086968543, 403115858, 736773555, 984935064, 297424123, 211521903, 375247243, 36916596, 374889458, 900658965, 147081637, 787552544, 227564148, 101799732, 1048472888, 866953296, 314235899, 30104660, 226930488, 932259359, 261088710, 278470411, 353899952, 1084589557, 903296329, 736039268, 385972574, 375830241, 1049862522, 736946731, 1036225808, 1031 ], "storeSequenceIndicesEnabled": false, "size": 256, "capacity": 256, "initialAcceptFraction": 0.125, "timeDecay": 1.0e-4, "sequenceIndexOfMostRecentTimeDecayUpdate": 0, "maxSequenceIndex": 1493, "compressed": true, "randomSeed": 3900708465367051125 }, { "version": "2.0", "weight": [ -1.773475, -1.7750823, -1.8039148, -1.7926276, -1.8222865, -1.845183, -1.8057612, -1.8494796, -1.7959207, -1.8870348, -1.8974857, -1.876898, -1.8554938, -1.8363189, -1.8354127, -1.9268205, -1.8698647, -1.885897, -1.8517307, -1.9742464, -1.8898609, -1.8985574, -2.143419, -1.8942182, -1.9570466, -1.9082452, -1.8667456, -1.9100269, -1.8808385, -1.9234487, -1.8657014, -2.015931, -2.212913, -2.079569, -1.9724065, -2.1434267, -1.9690714, -1.9440209, -1.9119865, -2.007949, -2.0713964, -1.9026221, -2.139437, -1.9902244, -1.9000142, -2.1980624, -2.1457427, -2.0067115, -2.216963, -2.0078409, -2.0122359, -1.9996728, -1.915653, -2.0284946, -2.0626378, -1.9454858, -2.1004593, -2.1423385, -2.129475, -1.9262174, -1.977599, -1.8705202, -1.9307132, -2.121574, -2.1680737, -2.8059728, -2.4647405, -2.2606895, -2.313719, -2.2319176, -2.0318754, -2.2380648, -2.8375976, -2.01969, -2.7087097, -3.1395059, -2.647385, -1.9943793, -2.3498397, -2.0658169, -2.610816, -2.1383333, -2.4891677, -2.1063142, -1.9341099, -2.4924214, -2.5667586, -2.282426, -2.0006623, -1.9943624, -2.4567404, -2.231521, -2.3374805, -2.4438033, -2.332853, -2.3785813, -2.0585291, -2.3684952, -2.5352397, -2.6059043, -2.9607844, -2.7364335, -2.5759447, -2.209563, -2.3307643, -2.3000574, -2.1801481, -2.1513462, -2.1336575, -2.316492, -2.228415, -2.2936692, -2.0270746, -2.1820061, -2.6000726, -2.6558099, -2.1633737, -2.7425945, -2.7003589, -2.0453358, -2.0839334, -2.2034597, -2.253998, -2.482663, -1.929147, -3.4676502, -2.129417, -2.6941292, -7.0536947, -3.806295, -2.4286122, -7.0180564, -3.3881392, -5.136512, -3.3981059, -3.8108766, -3.3840854, -4.1985803, -7.441683, -4.710874, -4.6753526, -5.147007, -2.0370023, -2.9905117, -4.3437905, -4.3806868, -3.3249528, -2.386633, -4.0770426, -4.478549, -3.0408673, -3.3467047, -7.755527, -4.897061, -4.6437964, -3.2557454, -2.3448482, -2.6056879, -2.9355764, -2.6539245, -2.3337276, -4.9639745, -3.606498, -2.7616386, -2.3524702, -2.9494593, -3.1875296, -3.3687086, -3.209242, -2.2259765, -3.8973262, -2.767681, -3.0772197, -4.175838, -3.2830734, -2.7101471, -2.3953116, -2.1449072, -3.6896677, -2.0912066, -4.703734, -3.083674, -3.4057825, -2.9368424, -4.7275095, -2.6227207, -2.6972537, -3.3707354, -3.1903024, -3.4124644, -3.5304496, -4.147959, -4.2551765, -2.4099114, -2.739606, -3.1460524, -2.7673385, -3.9829004, -5.0396767, -8.161678, -4.1825, -3.8418117, -3.1704817, -4.044603, -4.431857, -4.0561657, -3.804961, -2.8525105, -3.0746922, -4.928778, -2.9308677, -2.5835655, -2.5127409, -3.5566525, -2.3309612, -3.8846962, -2.4834597, -2.2897837, -3.1633084, -3.7128065, -3.0293717, -3.5332227, -3.3851402, -2.5752258, -3.3975627, -3.2494516, -2.9095368, -3.657072, -2.277026, -9.3977165, -2.7371886, -2.8658223, -2.9208083, -3.3934886, -2.8629465, -2.7921765, -4.398424, -3.6718414, -4.985429, -3.2450895, -2.1611288, -2.948474, -4.8580427, -4.6616244, -3.1946328, -4.452989, -2.2626927, -3.6593711, -3.1519105, -4.835316, -1.9358096, -5.905126, -4.93197, -4.673987, -4.10079 ], "pointIndex": [ 0, 1021, 255, 394238046, 170267394, 8373199, 17358714, 1058249458, 36850088, 892019326, 160816191, 438959241, 726546027, 726833720, 243399625, 212128356, 100009038, 441913846, 726828303, 726199270, 11636710, 368016567, 227786778, 986704158, 509806210, 633471384, 170358897, 553937212, 557851753, 984184861, 99845407, 367788974, 997148214, 140058925, 915193933, 86729994, 710561, 937253755, 725964970, 471159564, 372941430, 700960540, 861110378, 1044283242, 102025688, 91630475, 110381205, 167225102, 55448283, 299567365, 62334951, 406814666, 725997473, 579786519, 223063024, 726472639, 236069841, 433698543, 470115719, 726415211, 13675477, 170381457, 669794301, 295154386, 137527569, 1041628532, 23196972, 622673270, 807549675, 761847138, 622949123, 794009092, 99383575, 851860179, 451380848, 235079501, 726276406, 14670191, 284459662, 36573442, 1054928935, 895539518, 150876656, 368018464, 100213126, 726626683, 968342721, 1064327134 ], "storeSequenceIndicesEnabled": false, "size": 255, "capacity": 256, "initialAcceptFraction": 0.125, "timeDecay": 1.0e-4, "sequenceIndexOfMostRecentTimeDecayUpdate": 0, "maxSequenceIndex": 1493, "compressed": true, "randomSeed": -4321941696720968038 } ], "compactRandomCutTreeStates": [ { "version": "3.0", "root": 0, "maxSize": 256, "outputAfter": 32, "storeSequenceIndexesEnabled": false, "centerOfMassEnabled": false, "nodeStoreState": { "version": "3.0", "capacity": 255, "compressed": true, "cutDimension": [ 0, 7, 153, 274729449, 778177146, 792817978, 18480504, 483695922, 201089312, 407829175, 950310681, 803686685, 117207760, 590894414, 104890356, 1066032007, 1053856949, 16690170, 49 ], "cutValueData": [ 66, 33, -38, 92, 66, 12, -52, -25, 66, -126, -127, 111, 65, 34, 82, -1, 66, 60, -7, -37, 66, -120, -48, -117, 65, 45, -20, -73, 65, -123, 84, -79, 66, 66, 26, -44, 66, -118, -89, -48, 66, -101, -117, 61, 65, 39, 20, 24, 65, 38, 111, -1, 65, 86, 85, -117, 65, -128, -104, -50, 66, -117, -33, -96, 65, 68, 16, 118, 65, 115, 42, 34, 65, -117, -22, -81, 65, -97, 93, 75, 66, -122, -25, -15, 65, 78, -119, 85, 65, 84, -104, 101, 65, 108, 111, -61, 65, -115, -39, 124, 65, -125, -41, -117, 65, -107, 106, 49, 65, -41, -96, 1, 65, 50, -22, 127, 65, 64, -19, 87, 65, 96, 24, 101, 65, 105, -4, -48, 65, 118, -18, -85, 65, 123, -6, -99, 65, -103, 89, -33, 65, -100, -103, -97, 65, -30, -42, -79, 65, -36, -68, -85, 65, 60, 22, -96, 65, 48, 44, -29, 65, 72, 40, -53, 65, 95, -62, 0, 65, 95, -29, -78, 65, 112, -76, -79, 65, 117, -13, -103, 65, 127, 105, 103, 65, 121, 127, 89, 65, -128, 127, -7, 65, -118, -112, -105, 65, -110, 21, -126, 65, -97, -113, 93, 65, -104, 8, 43, 65, -81, 21, 41, 65, -42, -62, -109, 65, 33, -96, -121, 65, 38, -124, 71, 65, 54, 58, -22, 65, 71, 33, -11, 65, 84, 107, -117, 65, 104, -26, 60, 65, 99, -95, 125, 65, 112, 123, -22, 65, -126, -54, -40, 65, -122, -67, 127, 65, -122, 38, -122, 65, -107, 103, 57, 65, -105, 120, -80, 65, -99, 38, 91, 65, -78, -26, 6, 65, -61, 28, 62, 65, -45, 62, 8, 65, -38, -56, -92, 65, 63, 105, 50, 65, 109, 126, 105, 65, -124, -83, -33, 65, -120, -23, -89, 65, -118, 62, -94, 65, -119, -103, -27, 65, -119, -110, 54, 65, -120, -27, -105, 65, -111, 3, -112, 65, -86, 43, 100, 65, -62, 108, 7, 65, -57, 10, -112, 65, -40, -94, 92, 65, 59, 8, -88, 65, 108, -23, -112, 65, -124, -47, 63, 65, 126, 71, -13, 65, -127, 31, 26, 65, -117, -78, -1, 65, -113, -87, -53, 65, -119, -31, 93, 65, -106, 35, -87, 65, -81, -24, 24, 65, -87, 57, -109, 65, -52, 127, -73, 65, -63, 24, -1, 65, -37, -57, 7, 65, -128, 38, 88, 65, -119, -6, 73, 65, -96, -93, -57, 65, -83, 9, -33, 65, -82, 89, 17, 65, -87, -80, 78, 65, -48, 125, -23, 65, -43, -111, -128, 65, -113, -82, -24, 65, -91, 127, 89, 65, -93, -67, -122, 65, -79, -102, -100, 65, -33, -124, -18, 65, -48, -92, 48, 65, -109, 4, -10, 65, -96, -53, 88, 65, -86, 81, 29, 65, -76, 10, 110, 65, -75, 103, -78, 65, -51, -100, 48, 65, -116, 51, -23, 65, -101, 63, -100, 65, -97, -34, 116, 65, -93, 117, -38, 65, -90, -8, -105, 65, -73, -63, -48, 65, -67, 75, 11, 65, -55, 35, -68, 65, -41, 103, 10, 65, -91, -84, -28, 65, -86, 85, 59, 65, -73, 95, -65, 65, -65, 5, 106, 65, -58, -92, 35, 65, -56, -108, 84, 65, -77, -38, 36, 65, -66, 9, 32, 65, -51, 73, 12, 65, -47, -104, 78, 65, -70, 49, -65, 65, -67, -114, 70, 65, -64, -98, 36, 65, -47, -123, 10, 65, -51, -127, 112, 65, -46, 96, -46, 65, -65, 49, -57, 65, -65, -31, -52, 65, -60, 112, 27, 65, -74, -6, 83, 65, -72, 8, 19, 65, -65, 46, 30, 65, -68, 75, -25, 65, -77, -2, 122, 65, -67, 47, -90 ], "precision": "FLOAT_32", "root": 0, "canonicalAndNotALeaf": true, "size": 153, "leftIndex": [ 0, 1, 153, 1038836463, 14053374, 157416309, 389318960, 689594608, 1 ], "rightIndex": [ 0, 1, 153, 1020256509, 47599678, 13320816, 463162548, 202107944, 0 ], "nodeFreeIndexPointer": 0, "leafFreeIndexPointer": 0, "partialTreeStateEnabled": true }, "boundingBoxCacheFraction": 0.0, "partialTreeState": true, "seed": 5011849921490949589, "id": 0, "dimensions": 8, "staticSeed": 0, "weight": 0.0, "hasAuxiliaryData": false }, { "version": "3.0", "root": 0, "maxSize": 256, "outputAfter": 32, "storeSequenceIndexesEnabled": false, "centerOfMassEnabled": false, "nodeStoreState": { "version": "3.0", "capacity": 255, "compressed": true, "cutDimension": [ 0, 7, 164, 229393532, 859171247, 278145025, 69103497, 257169857, 600725088, 227890209, 509115888, 193838906, 1058721987, 15036982, 963529275, 47975813, 773911137, 587104727, 935590460, 1230 ], "cutValueData": [ 66, 56, -121, -117, 66, 50, 20, -66, 66, 48, -71, 11, 65, -17, -106, -47, 66, 48, -63, 69, 66, -126, 89, -111, 65, -87, -14, 14, 66, 18, 112, 25, 66, -118, 33, -68, 66, -104, -79, 4, 65, 81, 83, -81, 65, -58, -103, -87, 66, 29, 26, 118, 66, -123, 79, 24, 65, 63, 14, -28, 65, -124, -88, 15, 65, -81, -23, -97, 65, -34, -126, 61, 66, -127, 1, -107, 65, 40, 5, -59, 65, 106, -120, 36, 65, 75, -53, 83, 65, -102, -50, -31, 65, -82, -71, -62, 65, -75, -4, -19, 65, -67, -75, 113, 65, -39, -125, -5, 65, 42, -98, 26, 65, 56, -43, -66, 65, 49, 90, 53, 65, 79, -89, -84, 65, -121, -10, -113, 65, -97, -102, -42, 65, -100, -81, 67, 65, -84, -4, 46, 65, -72, 7, -104, 65, -46, 63, 32, 65, 45, 119, -8, 65, 34, 21, 36, 65, 67, 99, 97, 65, 53, 103, -35, 65, 108, 35, -79, 65, 116, 102, -34, 65, -121, 46, -71, 65, -106, 56, 31, 65, -96, 126, 115, 65, -88, 116, -96, 65, -86, -15, -29, 65, -70, -95, 37, 65, -61, 70, -106, 65, -50, 98, -78, 65, -45, 78, -83, 65, 44, 113, -25, 65, 32, 84, 20, 65, 64, -66, 110, 65, 101, -112, -6, 65, 123, 113, -124, 65, -126, -52, -128, 65, -101, -44, 12, 65, -103, -28, -3, 65, -83, -12, 78, 65, -84, 121, -104, 65, -87, -16, 80, 65, -71, -50, -20, 65, -66, 43, -57, 65, -58, 87, -114, 65, -49, -10, -61, 65, -42, -112, -124, 65, -37, 119, 84, 65, 85, -113, 89, 65, 73, -121, 93, 65, 102, 90, -121, 65, 125, 56, -92, 65, 106, 26, -64, 65, 113, 22, -3, 65, -119, -90, -81, 65, -112, -20, -63, 65, -98, -2, 120, 65, -106, -86, -14, 65, -92, -71, 13, 65, -84, 40, 27, 65, -88, -76, 20, 65, -75, -29, -86, 65, -77, 19, 58, 65, -70, -11, -76, 65, -61, -108, 53, 65, -59, 23, -78, 65, -50, -84, 25, 65, -48, 65, -46, 65, -41, -21, -73, 65, 79, 124, -110, 65, 91, 114, 84, 65, 90, 63, -72, 65, 127, -102, 7, 65, 123, -64, 17, 65, 113, -45, 113, 65, -127, 17, -128, 65, -119, 98, 67, 65, -98, -127, 120, 65, -95, 33, 77, 65, -89, -44, 53, 65, -87, -72, -101, 65, -67, -103, -4, 65, -66, -16, -25, 65, -49, 93, 66, 65, -49, 36, -109, 65, -41, 117, 54, 65, -34, -111, -114, 65, 79, 69, 20, 65, 86, 118, -128, 65, 83, 34, 81, 65, 101, -114, 94, 65, 116, 20, -69, 65, -126, -126, -105, 65, -116, 15, -83, 65, -111, 43, 60, 65, -106, -84, 60, 65, -112, 71, -29, 65, -100, 38, -18, 65, -95, 55, -76, 65, -91, 17, 43, 65, -95, -81, 6, 65, -77, 44, 55, 65, -74, 17, 45, 65, -60, -26, -60, 65, -62, 46, -50, 65, -60, 106, -45, 65, -55, -26, 66, 65, -43, 46, 3, 65, 60, 49, 19, 65, 68, 11, -94, 65, 87, 42, -21, 65, 81, -16, 4, 65, 118, -101, -89, 65, -122, -123, -29, 65, -117, 13, 106, 65, -111, -102, -84, 65, -119, -19, 31, 65, -89, 126, 66, 65, -76, -50, 20, 65, -75, 90, 123, 65, -60, 68, -61, 65, -57, 33, 0, 65, -43, -18, 82, 65, 118, 91, -49, 65, -113, 54, 54, 65, -110, -99, -10, 65, -116, -45, 45, 65, -111, 81, -3, 65, -111, -77, -90, 65, -89, -96, -94, 65, -118, 83, -26, 65, -122, -2, -72, 65, -118, -40, -71, 65, -116, 14, 54, 65, -120, 54, -106, 65, -127, 16, 1, 65, -114, -23, -124, 65, -127, -123, 0, 65, -118, 75, -107, 65, -119, 117, -37, 65, -108, 61, -102, 65, -105, 28, -102, 65, -120, -114, -80 ], "precision": "FLOAT_32", "root": 0, "canonicalAndNotALeaf": true, "size": 164, "leftIndex": [ 0, 1, 164, 427552107, 790464622, 134835145, 128409025, 436535316, 26 ], "rightIndex": [ 0, 1, 164, 862702831, 523988478, 491480381, 18143175, 302244118, 314 ], "nodeFreeIndexPointer": 0, "leafFreeIndexPointer": 0, "partialTreeStateEnabled": true }, "boundingBoxCacheFraction": 0.0, "partialTreeState": true, "seed": 5850655621547167218, "id": 0, "dimensions": 8, "staticSeed": 0, "weight": 0.0, "hasAuxiliaryData": false }, { "version": "3.0", "root": 0, "maxSize": 256, "outputAfter": 32, "storeSequenceIndexesEnabled": false, "centerOfMassEnabled": false, "nodeStoreState": { "version": "3.0", "capacity": 255, "compressed": true, "cutDimension": [ 0, 7, 168, 207670007, 680779907, 251458080, 440530700, 250906682, 90018652, 99108922, 1059814860, 584613312, 507303322, 179824349, 797970334, 822612792, 434918827, 709987523, 733793098, 8340633 ], "cutValueData": [ 66, -120, 125, 114, 65, -44, 64, 30, 66, -113, -27, 99, 65, 76, 22, 114, 65, -36, -105, -59, 66, -126, 48, 83, 66, -101, -127, -112, 65, 65, 121, 33, 65, -80, -34, 45, 65, -61, 85, -90, 66, 13, -40, -92, 66, 119, 15, 46, 65, 54, 14, 73, 65, 90, 18, 70, 65, 70, -95, 89, 65, -58, -54, 108, 65, -44, 44, 127, 65, -32, 125, 40, 66, 80, -108, -94, 65, 54, 62, -29, 65, 48, 125, -73, 65, 76, 107, -118, 65, -91, 77, -52, 65, -78, -43, 84, 65, -53, 83, -48, 65, -51, 99, 122, 65, -33, 81, -69, 65, -37, -106, -37, 66, 91, 79, 13, 65, 36, 115, 126, 65, 62, 44, -106, 65, 51, -34, 117, 65, 57, -83, 12, 65, -108, 100, 68, 65, -94, 126, -123, 65, -78, 80, 29, 65, -49, -25, -99, 65, -55, -107, 71, 65, -46, -6, 5, 65, -48, 115, 94, 65, -35, -90, 33, 66, 99, 71, 12, 65, 42, -6, 120, 65, 34, -39, 46, 65, 39, -17, -114, 65, 74, 48, 98, 65, -115, -122, 65, 65, -80, -9, 28, 65, -90, -16, -12, 65, -79, -120, 75, 65, -60, 82, -71, 65, -59, -39, 92, 65, -53, 9, -13, 65, -56, -126, -25, 65, -47, -120, -81, 66, 90, 66, -28, 65, 41, -106, -125, 65, 39, -93, 27, 65, 45, 105, 121, 65, 69, -18, -116, 65, 75, -123, 42, 65, 98, 121, 34, 65, -120, 41, -99, 65, -105, 25, 115, 65, -95, -97, 25, 65, -78, 0, 50, 65, -80, -95, -32, 65, -71, -126, -112, 65, -57, -74, -103, 65, -57, -41, -30, 65, -49, 23, -76, 65, -46, -114, -90, 65, -47, 33, -66, 65, 32, -14, 111, 65, 36, -110, 27, 65, 50, -21, 102, 65, 79, -103, -104, 65, 109, 112, 25, 65, -109, 107, -127, 65, -106, -42, -74, 65, -112, 86, -118, 65, -84, 25, 113, 65, -76, -69, -62, 65, -81, -122, -91, 65, -80, 80, 4, 65, -62, -97, -37, 65, -64, -65, -54, 65, 36, -72, 38, 65, 86, -46, 46, 65, 105, -24, 57, 65, -125, -23, 10, 65, -115, 112, -35, 65, -109, -87, 31, 65, -107, 35, -48, 65, -106, 104, 123, 65, -109, -49, -109, 65, -108, 62, -119, 65, -82, -58, -87, 65, -75, 112, -41, 65, -75, 49, 48, 65, -80, -116, 36, 65, -67, -32, 75, 65, -68, -90, 14, 65, 93, 94, 111, 65, 81, -14, 44, 65, 113, 70, -25, 65, -128, -91, -19, 65, -122, 87, 30, 65, -118, -59, 75, 65, -110, 103, -2, 65, -106, -60, 59, 65, -93, 105, 0, 65, -88, 46, -49, 65, -84, 116, 88, 65, -68, 66, 88, 65, -71, 98, -4, 65, -67, -123, 94, 65, -70, 47, -59, 65, 75, 91, 27, 65, 82, 62, 69, 65, -121, -72, -40, 65, -101, 18, -110, 65, -126, -52, 27, 65, -117, -70, -72, 65, -114, -103, -2, 65, -110, 37, 4, 65, -98, 111, 39, 65, -97, -96, 35, 65, -101, -61, 87, 65, -81, 88, 53, 65, -83, -44, -4, 65, -85, -66, 124, 65, -78, -73, 100, 65, -65, 33, 102, 65, -72, 72, -3, 65, 69, 19, -121, 65, 92, -94, -107, 65, 124, -37, -113, 65, -122, -45, -23, 65, -126, 69, -113, 65, -126, -121, 31, 65, -124, -89, 91, 65, -117, 98, -9, 65, -118, 0, 63, 65, -102, -70, -21, 65, -98, -61, -19, 65, -103, -3, 45, 65, -103, -23, 3, 65, -92, 58, -98, 65, -87, -73, 115, 65, -82, 107, 11, 65, 115, -59, 89, 65, 115, -110, -104, 65, 118, -122, -34, 65, -127, -14, 74, 65, -121, 124, 99, 65, -122, 32, -24, 65, -112, 73, -81, 65, -102, 16, -126, 65, -104, -97, -9, 65, -92, 101, 15, 65, 126, 87, -111, 65, 112, 35, 10, 65, -117, 1, -45, 65, -101, 69, 19, 65, -97, 58, 74, 65, -121, -35, 11, 65, -98, 70, -76 ], "precision": "FLOAT_32", "root": 0, "canonicalAndNotALeaf": true, "size": 168, "leftIndex": [ 0, 1, 168, 635409855, 10465752, 324944038, 700152013, 23724911, 16896 ], "rightIndex": [ 0, 1, 168, 970586015, 901360285, 836698590, 293014721, 470157193, 4678 ], "nodeFreeIndexPointer": 0, "leafFreeIndexPointer": 0, "partialTreeStateEnabled": true }, "boundingBoxCacheFraction": 0.0, "partialTreeState": true, "seed": 6005716496380461659, "id": 0, "dimensions": 8, "staticSeed": 0, "weight": 0.0, "hasAuxiliaryData": false }, { "version": "3.0", "root": 0, "maxSize": 256, "outputAfter": 32, "storeSequenceIndexesEnabled": false, "centerOfMassEnabled": false, "nodeStoreState": { "version": "3.0", "capacity": 255, "compressed": true, "cutDimension": [ 0, 7, 167, 827785531, 971763877, 80945808, 796184691, 430416111, 957161488, 977275382, 555333116, 708089002, 654375449, 924548635, 859414707, 533709645, 1012117878, 592303265, 874474215, 1854454 ], "cutValueData": [ 65, 65, -60, -75, 65, 63, -57, 51, 65, -88, -64, -30, 65, 74, -34, 33, 65, 60, -22, 106, 65, -98, 37, 40, 66, 70, -6, -113, 65, 40, -33, 78, 65, 52, -111, -60, 65, 73, -4, -87, 65, 85, 68, -51, 65, -96, -15, -127, 65, -31, -99, -85, 65, 46, -128, 1, 65, 34, -74, 63, 65, 70, 114, 101, 65, 67, -54, -82, 65, 92, -16, -2, 65, 77, -119, -83, 65, -107, -123, -80, 65, -117, 22, -34, 65, -96, 4, -15, 65, -75, -115, -4, 66, 20, -43, -68, 65, 60, -102, 11, 65, 51, 66, 83, 65, 68, -88, -11, 65, 65, -112, 89, 65, -121, 120, -8, 65, -102, -84, -56, 65, -91, 66, 64, 65, -85, -100, -19, 65, -83, -32, -79, 65, -77, -68, 118, 65, -38, -96, 64, 65, 61, -11, 84, 65, 54, 104, 60, 65, 88, 72, 106, 65, 99, 111, -80, 65, -128, 65, 33, 65, -104, 67, -110, 65, -102, -29, -40, 65, -99, 30, -96, 65, -83, -63, -24, 65, -81, 61, 46, 65, -65, 110, -103, 65, -74, 116, 73, 65, -68, -117, 51, 65, -53, -89, -61, 65, 62, 83, -81, 65, 88, -112, 41, 65, 109, -83, -67, 65, -117, 96, 49, 65, -110, -5, -63, 65, -116, -19, 66, 65, -108, 52, -80, 65, -98, -4, -121, 65, -110, 108, 31, 65, -93, -97, 114, 65, -94, -70, -18, 65, -90, 103, -91, 65, -74, 9, 126, 65, -81, 108, -6, 65, -54, -102, 75, 65, 45, -103, -81, 65, 101, 6, 45, 65, 127, 35, 98, 65, 103, 86, 9, 65, -118, 67, 12, 65, -115, 38, -115, 65, -108, -66, -15, 65, -92, 125, -91, 65, -82, 86, 21, 65, -88, 125, -73, 65, -77, 51, -113, 65, -80, 29, -52, 65, -61, 93, 53, 65, -39, -111, 120, 65, 94, -6, -44, 65, 110, 0, 91, 65, 120, 41, -67, 65, 104, -114, 105, 65, -126, -23, -32, 65, -123, -20, -85, 65, -120, -101, 103, 65, -111, -4, 112, 65, -111, -44, 57, 65, -108, -4, 60, 65, -98, -61, 67, 65, -89, -25, -72, 65, -89, 95, -64, 65, -84, 60, 1, 65, -84, 52, -15, 65, -79, -64, -68, 65, -79, 31, -48, 65, -55, 3, -24, 65, -57, -63, 28, 65, -53, -22, 112, 65, -44, -4, 102, 65, 95, -117, -120, 65, 100, -124, -53, 65, 98, 95, 28, 65, 104, 32, -29, 65, -121, -128, -93, 65, -126, -42, -33, 65, -106, -48, -103, 65, -108, 61, -28, 65, -92, -99, -4, 65, -86, -86, -66, 65, -78, -46, -82, 65, -66, -16, -76, 65, -67, -2, 26, 65, -62, -63, -7, 65, -59, 124, 84, 65, -42, 83, 50, 65, 94, 9, -34, 65, -124, 101, -120, 65, -113, 95, 17, 65, -120, 118, 8, 65, -116, -95, 23, 65, -112, -94, -80, 65, -97, 76, -2, 65, -80, -36, 58, 65, -78, -25, 38, 65, -65, -114, 16, 65, -66, -69, -121, 65, -59, 49, 36, 65, -55, -11, -113, 65, -43, 100, 22, 65, -46, 67, -86, 65, -41, -89, -85, 65, 118, 4, -29, 65, -121, 33, 102, 65, -128, 69, -95, 65, -117, -33, -91, 65, -119, -34, 65, 65, -109, -128, 54, 65, -102, 73, -12, 65, -80, -95, -124, 65, -70, 34, 2, 65, -70, 87, 92, 65, -57, 12, 0, 65, -53, -40, 39, 65, -56, -55, 19, 65, -52, -10, -85, 65, -47, -84, 13, 65, -33, -54, -47, 65, 127, -66, 103, 65, 115, -126, -83, 65, -117, -37, -74, 65, -118, 7, -122, 65, -120, -81, -114, 65, -67, 0, -125, 65, -61, -103, 96, 65, -45, 83, -127, 65, -50, 112, 11, 65, -50, 22, -101, 65, -45, 63, 104, 65, 120, -92, -104, 65, -113, 110, 122, 65, -115, 10, 18, 65, -43, -25, -112, 65, -43, -98, 82, 65, -114, 28, -81, 65, -115, 90, -7, 65, -41, -62, 26, 65, -40, -106, -58 ], "precision": "FLOAT_32", "root": 0, "canonicalAndNotALeaf": true, "size": 167, "leftIndex": [ 0, 1, 167, 829071359, 283835805, 72314346, 895131888, 909127501, 2048 ], "rightIndex": [ 0, 1, 167, 981229239, 564270940, 329498574, 636514964, 25193761, 3745 ], "nodeFreeIndexPointer": 0, "leafFreeIndexPointer": 0, "partialTreeStateEnabled": true }, "boundingBoxCacheFraction": 0.0, "partialTreeState": true, "seed": 8744577020609081589, "id": 0, "dimensions": 8, "staticSeed": 0, "weight": 0.0, "hasAuxiliaryData": false }, { "version": "3.0", "root": 0, "maxSize": 256, "outputAfter": 32, "storeSequenceIndexesEnabled": false, "centerOfMassEnabled": false, "nodeStoreState": { "version": "3.0", "capacity": 255, "compressed": true, "cutDimension": [ 0, 7, 163, 637052076, 1023292457, 850537944, 671124079, 256574027, 433249855, 173906778, 560411735, 784158733, 655620432, 1008347984, 39312517, 384829375, 50322981, 1008334898, 987135068, 250 ], "cutValueData": [ 66, 99, 0, 12, 66, 70, 125, -86, 66, -124, -102, 97, 65, -127, 92, -60, 66, 80, -99, -109, 66, 126, 48, 107, 66, -110, 19, -79, 65, 43, -53, -47, 66, 21, -110, -17, 66, -127, -110, 87, 65, 37, -37, 58, 65, -121, -74, 9, 65, -51, 35, -55, 66, 50, -122, -7, 66, 113, 40, -80, 65, 34, -7, 25, 65, 65, -68, 120, 65, -116, 111, -124, 65, -93, -118, 80, 66, 4, -76, -13, 65, 85, -88, -60, 65, 65, 109, 42, 65, -118, 120, 120, 65, -57, 113, 22, 65, -56, -111, 49, 65, 57, -122, -54, 65, 67, 0, 112, 65, 113, 16, -8, 65, -114, 13, -31, 65, -102, -88, -125, 65, -67, -1, -10, 65, -49, 65, 109, 65, -43, -3, -10, 65, 49, -54, -46, 65, 34, -53, 85, 65, 50, 31, 0, 65, 77, -100, 48, 65, -121, -37, 78, 65, -117, -108, -38, 65, -113, -47, 88, 65, -106, -37, 5, 65, -93, 39, -1, 65, -96, -64, 11, 65, -79, 79, -58, 65, -64, 125, -95, 65, -46, -46, -67, 65, -48, 47, 122, 65, -42, -41, -85, 65, 57, -127, 41, 65, 49, -66, 104, 65, 93, -76, -90, 65, 125, 69, -56, 65, 105, 44, 63, 65, 113, 58, -12, 65, -126, 4, -99, 65, -126, -118, 47, 65, -113, -74, 77, 65, -107, -22, -64, 65, -112, -65, 67, 65, -103, 99, 9, 65, -90, -108, 86, 65, -94, 112, -85, 65, -77, -86, 93, 65, -68, 91, -4, 65, -58, 110, -24, 65, -50, -87, 10, 65, -46, -72, -50, 65, -35, 98, 59, 65, 38, 81, -37, 65, 37, 65, -83, 65, 55, 113, -80, 65, 72, -42, 121, 65, 117, -96, -44, 65, 122, -100, 5, 65, -124, 77, -43, 65, -124, -72, 123, 65, -117, -14, 126, 65, -118, 31, 78, 65, -116, -127, -107, 65, -110, 21, -65, 65, -102, -38, -112, 65, -101, 54, 28, 65, -87, 78, -120, 65, -80, -60, 88, 65, -72, 127, -89, 65, -58, 56, -74, 65, -41, -107, -56, 65, -51, -43, -22, 65, -47, 13, -91, 65, 47, 17, -19, 65, 79, -64, 27, 65, 103, 85, -62, 65, 111, -73, -30, 65, 125, -10, 58, 65, 115, -27, 58, 65, 120, 24, -95, 65, -118, -65, 56, 65, -112, 32, 21, 65, -97, -50, 89, 65, -97, -80, 57, 65, -89, -127, -48, 65, -97, -116, 125, 65, -96, -55, 11, 65, -92, -31, 92, 65, -82, 121, -100, 65, -80, 65, 31, 65, -80, 115, -19, 65, -79, 99, -4, 65, -60, 71, 58, 65, -54, -98, -82, 65, -37, -73, 29, 65, 57, -103, -122, 65, 75, 116, 3, 65, 80, -32, 56, 65, 111, 84, 124, 65, -123, -50, -58, 65, -113, -95, -47, 65, -114, 69, -41, 65, -112, -13, 50, 65, -98, 63, 89, 65, -100, -80, 116, 65, -91, -52, -1, 65, -84, -128, -36, 65, -78, 99, -8, 65, -72, 95, -98, 65, -72, 89, -124, 65, -66, 79, -43, 65, -45, 92, 59, 65, -37, 69, -33, 65, 81, -125, 88, 65, 107, -117, 4, 65, 97, 8, 13, 65, -125, 82, 28, 65, -108, -47, -38, 65, -106, 3, -40, 65, -105, 68, 42, 65, -89, -118, -102, 65, -79, 72, 35, 65, -73, 60, -5, 65, -79, 127, -60, 65, -79, 81, 26, 65, -69, -95, 116, 65, 99, -96, -26, 65, -110, 12, 95, 65, -112, -62, 99, 65, -101, -94, 107, 65, -93, 41, -22, 65, -91, 43, 55, 65, -87, 32, 109, 65, -82, -2, -57, 65, -75, 90, -69, 65, -71, -100, -91, 65, 105, -35, -67, 65, -112, 37, -111, 65, -84, 47, 110, 65, -83, 98, 78, 65, -88, -43, -113, 65, -74, -47, -65, 65, -73, 22, -49, 65, -83, -6, -59, 65, -83, -46, 34, 65, -76, -118, -14, 65, -75, 57, 38 ], "precision": "FLOAT_32", "root": 0, "canonicalAndNotALeaf": true, "size": 163, "leftIndex": [ 0, 1, 163, 1056775087, 255180751, 16019924, 630264387, 154025988, 161 ], "rightIndex": [ 0, 1, 163, 1004871055, 961428951, 469513268, 680779979, 944357935, 288 ], "nodeFreeIndexPointer": 0, "leafFreeIndexPointer": 0, "partialTreeStateEnabled": true }, "boundingBoxCacheFraction": 0.0, "partialTreeState": true, "seed": -8471452289987912583, "id": 0, "dimensions": 8, "staticSeed": 0, "weight": 0.0, "hasAuxiliaryData": false }, { "version": "3.0", "root": 0, "maxSize": 256, "outputAfter": 32, "storeSequenceIndexesEnabled": false, "centerOfMassEnabled": false, "nodeStoreState": { "version": "3.0", "capacity": 255, "compressed": true, "cutDimension": [ 0, 7, 170, 776084743, 583096645, 151265082, 690207239, 935333819, 253749845, 132792853, 645977550, 656330797, 278729455, 161533650, 500535262, 125878692, 280642008, 800928762, 789164372, 593626072 ], "cutValueData": [ 66, 7, 122, -41, 65, -64, -107, 113, 66, 71, -63, 84, 65, -122, -29, 104, 65, -46, 83, -34, 66, 34, 98, -98, 66, 112, -71, 87, 65, 117, 5, 42, 65, -20, 17, -70, 65, -52, -58, 53, 65, -43, 76, 41, 66, 30, -117, -110, 66, 106, -41, 31, 65, 100, -28, -5, 65, -124, -78, -58, 65, -75, -50, 64, 65, -68, -115, -91, 65, -55, 26, -34, 65, -56, -111, 47, 65, -39, -98, 110, 66, 112, -125, 14, 65, 106, 13, 91, 65, 119, -95, -92, 65, 124, 82, -81, 65, -127, 124, -79, 65, -72, 53, 82, 65, -53, 21, -109, 65, -42, -25, -116, 65, -39, -22, 27, 65, -35, 114, -42, 65, 57, 73, 94, 65, 84, -106, -80, 65, 124, -98, -62, 65, 125, 65, -7, 65, -122, 1, -114, 65, -89, 13, 90, 65, -79, -87, -80, 65, -66, 124, 77, 65, -59, -100, 85, 65, -60, -35, -109, 65, -52, 81, 119, 65, -48, 90, -103, 65, -33, 27, 40, 65, -37, 12, -21, 65, -33, 51, 125, 65, 76, -56, -72, 65, 49, 15, -96, 65, 99, -20, -65, 65, 101, 6, -7, 65, 98, 109, -29, 65, 116, 72, 4, 65, -128, 7, 9, 65, -113, 119, 96, 65, -87, -16, -16, 65, -71, -80, 51, 65, -80, 19, 33, 65, -66, 24, 11, 65, -56, 72, -95, 65, -64, 112, -46, 65, -52, 64, -42, 65, -48, -99, 122, 65, -38, -29, 65, 65, 39, 106, -96, 65, 64, 34, 87, 65, 54, 35, -121, 65, 79, 30, 29, 65, 92, -30, -28, 65, 119, -107, 80, 65, -114, -115, -10, 65, -114, -111, -94, 65, -103, -48, -28, 65, -80, 50, -6, 65, -79, 102, -105, 65, -69, -62, 92, 65, -59, -103, -25, 65, -60, -68, 22, 65, -52, 84, -65, 65, -42, -54, 109, 65, 46, -110, 99, 65, 45, 62, -72, 65, 52, 101, -88, 65, 75, -8, -14, 65, 99, 40, 85, 65, 124, -128, 24, 65, -122, -125, 19, 65, -120, -39, -122, 65, -108, 60, -29, 65, -98, -14, -59, 65, -81, 59, 110, 65, -71, 47, -93, 65, -50, 15, 53, 65, 46, 97, -45, 65, 35, 0, 29, 65, 62, -93, 96, 65, 67, -47, 43, 65, 67, -71, -45, 65, 94, 29, -104, 65, -122, -125, 47, 65, -128, 61, 36, 65, -115, 12, -17, 65, -102, -27, -108, 65, -98, 49, -76, 65, -99, 59, 73, 65, -80, 24, -45, 65, 33, 117, -121, 65, 41, 48, -112, 65, 57, 8, 108, 65, 54, 55, 20, 65, 75, 97, 63, 65, 97, -59, 9, 65, -116, 99, 107, 65, -120, 76, -49, 65, -111, -22, 112, 65, -125, 7, 20, 65, -110, 95, 104, 65, -98, -1, 76, 65, -101, 2, -108, 65, -85, -60, -7, 65, -78, -13, -90, 65, 55, 48, -122, 65, 88, 72, 14, 65, -119, 111, -66, 65, -108, 124, -125, 65, -109, 36, -62, 65, -108, -26, -125, 65, -98, 121, 75, 65, -89, 83, 17, 65, -98, -76, -68, 65, -91, -61, -5, 65, -82, 61, 81, 65, -83, -67, -128, 65, -80, 40, 70, 65, 70, 90, -18, 65, 75, 29, 54, 65, -117, -118, 104, 65, -108, -20, -43, 65, -105, -8, 94, 65, -102, -8, -17, 65, -96, 12, -52, 65, -93, -84, -59, 65, -82, -118, -66, 65, -66, 50, -58, 65, -69, -112, 7, 65, 81, -44, -79, 65, 93, 112, -44, 65, -118, -14, 58, 65, -115, -58, -100, 65, -109, 38, -64, 65, -103, -6, 28, 65, -92, -1, -117, 65, -95, 99, 28, 65, -82, 108, -109, 65, -82, -113, 21, 65, 74, 118, -128, 65, -117, 117, -61, 65, -109, -109, -48, 65, -96, -80, -36, 65, -82, 60, -110, 65, -86, -116, 1, 65, -84, -73, -120, 65, -89, 107, 31, 65, -86, 40, -116, 65, 88, 103, 67, 65, -89, 49, 23, 65, -83, 86, -124, 65, -86, -107, 61, 65, -92, 61, 18, 65, -95, 38, -40, 65, -81, 9, -23, 65, -93, 59, 96 ], "precision": "FLOAT_32", "root": 0, "canonicalAndNotALeaf": true, "size": 170, "leftIndex": [ 0, 1, 170, 1072358367, 23302135, 241714996, 421674508, 555539289, 51782 ], "rightIndex": [ 0, 1, 170, 665630655, 667265605, 248319269, 532949866, 638359817, 131150 ], "nodeFreeIndexPointer": 0, "leafFreeIndexPointer": 0, "partialTreeStateEnabled": true }, "boundingBoxCacheFraction": 0.0, "partialTreeState": true, "seed": 8010610685156690122, "id": 0, "dimensions": 8, "staticSeed": 0, "weight": 0.0, "hasAuxiliaryData": false }, { "version": "3.0", "root": 0, "maxSize": 256, "outputAfter": 32, "storeSequenceIndexesEnabled": false, "centerOfMassEnabled": false, "nodeStoreState": { "version": "3.0", "capacity": 255, "compressed": true, "cutDimension": [ 0, 7, 169, 371568937, 79721695, 1035367483, 188223398, 218372933, 985791552, 648590122, 508429535, 1057874985, 505508042, 1021081623, 908236254, 849287976, 941458535, 644388413, 893733890, 74773754 ], "cutValueData": [ 65, -104, 24, 25, 65, -113, 92, -36, 66, 112, -39, -37, 65, 62, -107, -1, 65, -122, -121, 62, 66, 2, -80, 100, 66, -125, -75, -109, 65, 52, 121, 74, 65, 113, 69, -51, 65, -118, -60, -63, 65, -38, -85, -59, 66, 31, -45, -47, 66, -101, -127, 2, 65, 41, 102, 78, 65, 43, 19, 20, 65, 97, -66, 4, 65, -126, -33, -90, 65, -115, 5, -74, 65, -39, 31, 50, 66, 73, -97, -89, 65, 33, 72, -40, 65, 36, 120, -101, 65, 95, -91, 107, 65, 109, -116, 83, 65, -116, 55, -68, 65, -117, -100, 82, 65, -86, 51, -108, 65, -90, 118, 74, 66, 50, 26, -65, 65, 36, -101, -35, 65, 54, 27, 12, 65, 93, -45, 27, 65, 100, 86, -109, 65, -125, 115, -31, 65, -123, -63, -50, 65, -119, -21, -84, 65, -102, 102, 12, 65, -94, -111, 91, 66, 64, -95, 63, 65, 42, 70, 72, 65, 43, 105, -123, 65, 45, 70, 90, 65, 58, -71, 80, 65, 55, -19, -59, 65, 94, -76, 66, 65, 106, -30, -87, 65, 98, 93, -120, 65, -119, 60, 117, 65, -123, 107, 57, 65, -121, 32, -122, 65, -106, 21, -74, 65, -91, 84, 27, 65, -90, -120, 47, 65, -83, -128, -105, 65, -63, -83, -15, 66, 58, 116, 55, 65, 46, -18, 115, 65, 39, 64, -9, 65, 62, -42, -77, 65, 50, -59, -56, 65, 84, -53, 27, 65, 106, -53, -83, 65, 87, 123, 50, 65, 101, 91, -100, 65, 116, -10, 100, 65, -122, -32, -23, 65, -124, 55, -34, 65, -112, -24, 49, 65, -104, -34, -45, 65, -100, -95, -120, 65, -96, 20, -76, 65, -90, 82, 31, 65, -89, -94, 15, 65, -93, -40, -84, 65, -56, -80, 97, 65, -50, 47, -82, 65, 61, 76, 60, 65, 77, 25, -19, 65, 70, -4, -55, 65, 99, -79, -83, 65, 114, -2, -82, 65, 121, -127, -41, 65, -117, 73, -57, 65, -111, 89, -69, 65, -106, 74, -48, 65, -102, -26, -116, 65, -104, 90, -67, 65, -90, -78, 113, 65, -99, 39, -6, 65, -70, -119, 46, 65, -58, 86, -25, 65, -43, 69, -19, 65, 75, -70, -79, 65, 76, 90, -1, 65, 65, -106, -65, 65, 101, 62, -77, 65, -126, -116, 32, 65, -114, 87, -92, 65, -97, -58, -39, 65, -110, 108, -51, 65, -110, 81, 17, 65, -91, 87, 54, 65, -84, 41, -81, 65, -58, -73, 68, 65, -55, -107, 22, 65, -61, -18, -89, 65, -47, 120, -80, 65, -46, 20, 103, 65, 65, 70, 107, 65, 92, 58, -48, 65, 66, 34, -20, 65, 90, 20, -119, 65, 90, -34, -127, 65, -119, -9, -49, 65, -110, 62, -83, 65, -83, -104, -119, 65, -62, -90, 5, 65, -64, -81, -43, 65, -58, -92, -67, 65, -51, -55, 120, 65, -50, -33, -22, 65, -54, 3, 37, 65, -41, 7, 33, 65, -47, -54, 89, 65, -37, 77, -11, 65, 70, -20, -128, 65, 90, -52, -55, 65, 69, -36, -56, 65, -109, 60, -84, 65, -93, 8, -38, 65, -79, 29, -115, 65, -75, -110, -81, 65, -75, -126, 41, 65, -61, 3, -81, 65, -46, 94, -127, 65, -46, -29, 23, 65, -53, -110, -2, 65, -40, 93, -99, 65, -37, -49, -3, 65, 71, -42, 104, 65, 65, 89, 15, 65, -116, 96, -84, 65, -96, 7, -72, 65, -84, -111, 69, 65, -83, -28, -99, 65, -77, 15, 28, 65, -74, 96, -41, 65, -69, -90, 57, 65, -55, -85, 16, 65, -47, 74, 2, 65, -39, -110, 21, 65, -73, -126, -114, 65, -66, -85, 106, 65, -75, -77, 98, 65, -71, 60, 6, 65, -67, -49, -107, 65, -84, 108, 60, 65, -79, 30, -12, 65, -68, -21, 59, 65, -93, -25, 73, 65, -81, -2, 53, 65, -88, 24, 104, 65, -74, 62, -32, 65, -72, 10, -62, 65, -86, -28, -42, 65, -66, 94, -85, 65, -81, -74, -48, 65, -85, -64, 16, 65, -84, -107, -24 ], "precision": "FLOAT_32", "root": 0, "canonicalAndNotALeaf": true, "size": 169, "leftIndex": [ 0, 1, 169, 761046959, 32696287, 556453652, 236433967, 167791928, 90566 ], "rightIndex": [ 0, 1, 169, 962849663, 836100335, 835092952, 185053339, 235216534, 132296 ], "nodeFreeIndexPointer": 0, "leafFreeIndexPointer": 0, "partialTreeStateEnabled": true }, "boundingBoxCacheFraction": 0.0, "partialTreeState": true, "seed": -6083579190946894998, "id": 0, "dimensions": 8, "staticSeed": 0, "weight": 0.0, "hasAuxiliaryData": false }, { "version": "3.0", "root": 0, "maxSize": 256, "outputAfter": 32, "storeSequenceIndexesEnabled": false, "centerOfMassEnabled": false, "nodeStoreState": { "version": "3.0", "capacity": 255, "compressed": true, "cutDimension": [ 0, 7, 158, 747467411, 749462614, 939905597, 968657267, 182631943, 79699775, 54098181, 288327139, 311561638, 329420228, 75867718, 752704077, 111402505, 1006035975, 959461119, 1559561 ], "cutValueData": [ 66, 74, -85, -53, 66, 8, 40, -39, 66, -96, 114, -25, 65, -110, 87, -82, 66, -114, -39, -55, 65, 65, -73, 42, 65, -41, 32, -2, 66, -124, -104, 97, 66, -115, -9, 81, 65, 63, 52, 12, 65, 79, -81, -81, 65, -46, -44, 95, 65, -43, 81, -42, 65, 47, -111, 17, 65, 64, 126, 21, 65, 58, 67, 9, 65, 126, -49, 126, 65, -62, 9, -21, 65, -6, -78, 80, 65, 34, -3, 79, 65, 35, 69, 76, 65, 74, 41, 42, 65, 52, 121, -90, 65, 87, 45, -18, 65, -118, 125, -124, 65, -126, -117, -104, 65, -102, -86, -99, 65, -61, -38, -115, 65, -37, 126, 0, 65, 43, -76, -39, 65, 33, 6, 51, 65, 60, -125, -55, 65, 65, -82, -125, 65, 71, -120, -31, 65, 73, -27, -56, 65, -126, -7, -102, 65, -116, -56, 61, 65, -103, 72, 52, 65, -91, 17, 71, 65, -44, 70, -82, 65, -43, -77, 103, 65, 33, 20, -4, 65, 67, 53, 124, 65, 81, -113, 99, 65, 70, 4, 33, 65, 78, -10, -44, 65, 98, 77, 1, 65, 126, 95, 0, 65, -125, -57, -32, 65, -115, 12, 35, 65, -101, 24, 101, 65, -106, 16, 118, 65, -101, 68, -112, 65, -101, 51, 64, 65, -77, -91, -107, 65, -49, 122, -1, 65, -56, -97, 81, 65, -43, -25, -123, 65, 52, 65, -121, 65, 95, 82, 102, 65, 102, 73, 117, 65, 112, -2, -78, 65, 124, -70, -56, 65, 112, 99, -71, 65, -122, 2, -60, 65, -113, -100, -11, 65, -107, 117, 58, 65, 113, 85, 76, 65, -112, 0, -120, 65, -103, -42, 98, 65, -100, -9, -117, 65, -98, 85, 110, 65, -81, -26, 11, 65, -88, 31, -36, 65, -77, -26, 62, 65, -64, 8, -72, 65, -49, -19, -108, 65, -53, 21, 106, 65, 57, -54, -1, 65, 92, 112, -80, 65, 122, -74, 80, 65, 121, -72, -121, 65, -121, -73, -85, 65, -121, 94, -32, 65, -116, 44, 33, 65, -114, 46, 50, 65, -113, 4, 99, 65, -111, -97, -32, 65, -106, 66, -89, 65, -110, 12, -76, 65, -109, 37, 114, 65, -112, -20, -18, 65, -94, 102, -114, 65, -102, -91, -62, 65, -100, -107, -11, 65, -88, -14, -11, 65, -81, -18, -60, 65, -79, -62, -14, 65, -67, -79, -27, 65, -49, 86, 94, 65, -52, 59, 49, 65, 56, -113, -53, 65, 81, -118, 105, 65, 84, -43, -51, 65, 104, -118, 114, 65, 118, 120, 99, 65, 120, -111, -115, 65, -125, 76, -24, 65, -124, 49, -23, 65, -128, 41, 11, 65, -116, -1, -54, 65, -121, 46, -111, 65, -120, 83, 64, 65, -100, -69, 118, 65, -89, -21, -32, 65, -91, 114, 67, 65, -98, -110, 80, 65, -85, 114, 26, 65, -80, 124, -92, 65, -73, 13, -61, 65, -66, -19, 45, 65, -46, 44, -71, 65, 93, 66, -69, 65, 72, 1, -35, 65, 89, -70, -89, 65, 103, 103, -61, 65, -124, 104, 119, 65, -122, 126, 117, 65, -119, 63, -19, 65, -126, -37, -48, 65, -107, -19, 54, 65, -112, 79, 23, 65, -95, 92, -71, 65, -96, -11, 52, 65, -83, -52, -30, 65, -93, -6, -44, 65, -86, 98, 42, 65, -87, 88, -69, 65, -75, 85, 80, 65, -73, -117, 123, 65, -62, 52, -41, 65, -106, -50, -60, 65, -95, 35, 54, 65, -94, 114, -48, 65, -88, 123, -56, 65, -76, 99, 78, 65, -75, 2, 73, 65, -68, -16, -81, 65, -61, -8, 85, 65, -83, -13, -65, 65, -88, 37, 125, 65, -69, 102, -76, 65, -92, 85, -122, 65, -79, -48, 27, 65, -86, 87, -29, 65, -73, -77, 81, 65, -81, -109, -114, 65, -84, 13, 14 ], "precision": "FLOAT_32", "root": 0, "canonicalAndNotALeaf": true, "size": 158, "leftIndex": [ 0, 1, 158, 935292543, 129701864, 99169107, 694292968, 51947520, 24 ], "rightIndex": [ 0, 1, 158, 239335033, 335250430, 107838969, 794916240, 604405761, 37 ], "nodeFreeIndexPointer": 0, "leafFreeIndexPointer": 0, "partialTreeStateEnabled": true }, "boundingBoxCacheFraction": 0.0, "partialTreeState": true, "seed": -3523200327259297085, "id": 0, "dimensions": 8, "staticSeed": 0, "weight": 0.0, "hasAuxiliaryData": false }, { "version": "3.0", "root": 0, "maxSize": 256, "outputAfter": 32, "storeSequenceIndexesEnabled": false, "centerOfMassEnabled": false, "nodeStoreState": { "version": "3.0", "capacity": 255, "compressed": true, "cutDimension": [ 0, 7, 160, 32253529, 532378052, 280559654, 218004083, 883455014, 520289098, 149958944, 757105688, 149698447, 748638122, 300409020, 383952219, 938128256, 813967500, 784019911, 221536189 ], "cutValueData": [ 65, -49, -81, 124, 65, 85, 0, -22, 66, -113, -39, -114, 65, 54, -81, -25, 65, -103, 91, -79, 66, 10, -77, -46, 66, -97, -19, 101, 65, 47, 79, -62, 65, 56, 88, 63, 65, 102, 46, 65, 65, -81, -32, -21, 65, -40, -114, -115, 66, 101, -70, 77, 65, 58, 6, -79, 65, 52, 98, -45, 65, 76, 89, -26, 65, 107, 92, -101, 65, -116, -115, -12, 65, -83, -112, -82, 65, -85, -99, 46, 66, 2, 90, 39, 65, -45, 112, 113, 66, 125, -15, -123, 65, 37, 41, 10, 65, 62, -10, 61, 65, 45, 68, 107, 65, 59, -35, -89, 65, 77, 33, 30, 65, 90, -91, 54, 65, 108, 78, -47, 65, 120, 59, -118, 65, -94, 22, -41, 65, -84, 3, 94, 65, -83, 67, -93, 65, -16, 43, 108, 65, -44, -115, 21, 66, 14, -8, -31, 66, -106, 85, 1, 65, 46, 77, 14, 65, 49, 77, 75, 65, 60, 63, 41, 65, 52, 104, -54, 65, 69, -62, 51, 65, 68, -81, -112, 65, 113, -113, 44, 65, 117, 51, -67, 65, -114, -55, -27, 65, -111, 46, 79, 65, -104, -19, -20, 65, -94, -117, 77, 65, -95, 15, -12, 65, -90, -11, 61, 65, -63, -61, -113, 65, -48, -98, -107, 65, -24, -82, -98, 65, 35, 11, 67, 65, 32, 104, -75, 65, 44, -43, -107, 65, 77, 68, -62, 65, 66, 95, -65, 65, 65, -101, 92, 65, 101, -34, 53, 65, 116, -74, 123, 65, -118, -67, -98, 65, -117, 33, -99, 65, -115, -45, -106, 65, -107, 125, 7, 65, -95, -61, -54, 65, -92, -121, -19, 65, -94, -26, 84, 65, -71, -71, -83, 65, -57, 114, -101, 65, -52, -95, 37, 65, -37, -64, -85, 65, 52, -52, -3, 65, 78, -123, -40, 65, 86, 100, 88, 65, 67, -21, 127, 65, 123, 29, -26, 65, 112, -111, 87, 65, -126, 96, -29, 65, -106, 33, 69, 65, -106, 101, -116, 65, -89, -104, -25, 65, -91, 127, 31, 65, -86, 33, -56, 65, -67, 86, -41, 65, -50, 92, 85, 65, -42, -77, -63, 65, -47, -102, 91, 65, 64, 20, 29, 65, 99, -79, 114, 65, -124, -18, 88, 65, -120, 107, 33, 65, -105, 105, 45, 65, -104, 61, 107, 65, -101, 109, -58, 65, -89, 62, 76, 65, -92, -56, -89, 65, -77, -64, -110, 65, -71, 50, -26, 65, -74, -69, -15, 65, -57, -17, 25, 65, -51, -122, 88, 65, -53, 57, 77, 65, -41, 95, -121, 65, -43, 29, -51, 65, -40, 60, 75, 65, -122, 42, -10, 65, -125, -56, -119, 65, -107, 46, -111, 65, -110, -109, -105, 65, -97, -114, -76, 65, -93, -37, -112, 65, -89, -27, 18, 65, -90, 70, -39, 65, -98, 24, -104, 65, -77, 89, -38, 65, -60, -28, 103, 65, -70, -31, -107, 65, -58, 103, -37, 65, -50, 20, -38, 65, -62, 39, -1, 65, -61, 46, -113, 65, -53, 30, 109, 65, -49, 108, 16, 65, -48, 125, 35, 65, -46, 32, -114, 65, -127, -81, 40, 65, 122, -59, 113, 65, -121, 81, -117, 65, -127, -59, 56, 65, -110, -18, -28, 65, -101, -10, -110, 65, -79, -50, -103, 65, -76, 56, -108, 65, -59, 123, 33, 65, -59, -52, 114, 65, -62, 33, -27, 65, -50, 45, -82, 65, -56, -23, 121, 65, -124, 62, 63, 65, -117, -99, -68, 65, -127, -102, -71, 65, -101, -5, 96, 65, -99, 85, -11, 65, -81, -104, 6, 65, -78, -106, 28, 65, -72, 10, -91, 65, -51, -115, -102, 65, -54, -45, 103, 65, -50, -68, 124, 65, 117, -99, 90, 65, -120, 78, 32, 65, -102, -48, -75, 65, -90, 57, -17, 65, -87, -46, -55, 65, -73, -70, -49, 65, -73, 12, 110, 65, -74, 18, -21 ], "precision": "FLOAT_32", "root": 0, "canonicalAndNotALeaf": true, "size": 160, "leftIndex": [ 0, 1, 160, 622325439, 835441983, 530851213, 143588724, 377809234, 64 ], "rightIndex": [ 0, 1, 160, 257941439, 542847275, 1055431784, 137188580, 103573537, 0 ], "nodeFreeIndexPointer": 0, "leafFreeIndexPointer": 0, "partialTreeStateEnabled": true }, "boundingBoxCacheFraction": 0.0, "partialTreeState": true, "seed": -303810271618516607, "id": 0, "dimensions": 8, "staticSeed": 0, "weight": 0.0, "hasAuxiliaryData": false }, { "version": "3.0", "root": 0, "maxSize": 256, "outputAfter": 32, "storeSequenceIndexesEnabled": false, "centerOfMassEnabled": false, "nodeStoreState": { "version": "3.0", "capacity": 255, "compressed": true, "cutDimension": [ 0, 7, 154, 797383228, 977551878, 879546020, 852272575, 829811334, 115498508, 169937353, 538066278, 822076399, 520380110, 270561155, 815792955, 893599489, 352063743, 706034139, 131 ], "cutValueData": [ 65, 125, 99, 120, 65, 111, 24, 94, 66, 59, 23, 64, 65, 77, 95, 95, 65, 107, 64, -15, 65, -39, 35, -63, 66, -122, -76, -95, 65, 64, 9, -114, 65, 89, -84, 26, 65, 104, 103, -94, 65, 127, -115, 25, 65, -64, 68, 59, 65, 39, 64, 42, 65, 88, 96, 61, 65, 87, -23, 27, 65, 99, 11, 5, 65, 93, -110, -120, 65, 111, 60, -61, 65, 122, 46, -31, 65, -78, 20, -37, 65, -50, -90, -47, 65, 38, 93, 97, 65, 56, -37, -25, 65, 75, -81, -31, 65, 93, 54, -69, 65, 107, -17, -57, 65, -92, 91, -85, 65, -63, 5, 110, 65, -60, -89, -72, 65, -52, 71, -30, 65, 38, 46, -84, 65, 51, 113, -119, 65, 60, 62, -77, 65, 64, 25, 113, 65, 85, 59, -110, 65, 76, 100, -111, 65, 104, 117, -117, 65, -111, 77, -81, 65, -85, 126, 20, 65, -68, 57, 116, 65, -49, 93, -123, 65, -51, -67, 112, 65, -50, -115, 4, 65, -43, 97, -64, 65, 34, -124, -73, 65, 63, 32, 0, 65, 60, 104, 104, 65, 70, -86, 47, 65, 74, 89, 91, 65, 80, 100, -80, 65, 97, 34, 50, 65, -113, 75, 91, 65, -93, -122, 70, 65, -96, -90, -64, 65, -87, 67, -45, 65, -72, 56, -58, 65, -85, 57, 14, 65, -54, -126, 51, 65, -60, 38, 90, 65, -33, 33, -50, 65, -44, -26, -48, 65, 33, -39, 118, 65, 33, -56, -39, 65, 63, -75, -35, 65, 75, -35, -26, 65, 75, -128, 7, 65, 83, -99, 51, 65, -124, -26, 18, 65, -120, 109, 111, 65, -98, 32, -45, 65, -100, -125, -1, 65, -91, -69, 92, 65, -83, -72, 82, 65, -96, 88, -61, 65, -74, -87, 98, 65, -73, 78, 96, 65, -67, 56, -41, 65, -53, 28, -74, 65, -47, 120, 24, 65, -43, -123, -74, 65, -34, -66, 106, 65, 44, -28, 13, 65, 52, -111, 91, 65, 54, -71, 63, 65, 63, 12, 4, 65, -115, 24, 51, 65, -115, 66, -5, 65, -120, -67, -18, 65, -105, -46, 39, 65, -94, -2, -32, 65, -86, 107, -59, 65, -92, -47, -68, 65, -82, 37, 107, 65, -81, 16, 109, 65, -75, 4, -100, 65, -82, -65, -16, 65, -79, -63, 27, 65, -76, -46, 72, 65, -47, 77, -38, 65, -44, 8, 86, 65, -46, 49, -63, 65, -38, -61, -57, 65, 57, -109, 122, 65, -128, 96, 92, 65, -114, -55, -115, 65, -118, 69, -9, 65, -121, -96, -69, 65, -107, -118, -76, 65, -101, 74, -79, 65, -108, 56, 109, 65, -100, 5, 84, 65, -106, 98, -48, 65, -94, -101, -20, 65, -86, -118, 41, 65, -89, 99, -54, 65, -73, -84, -70, 65, -77, -62, 71, 65, -73, -46, -127, 65, -78, 48, -11, 65, -59, 81, -73, 65, -52, -127, 90, 65, -52, 72, -49, 65, -41, -87, -48, 65, -39, -24, 109, 65, -35, 38, 7, 65, -47, 14, -117, 65, 53, -9, -58, 65, 122, -69, 29, 65, -126, 92, -101, 65, -121, 12, 53, 65, -126, -80, -82, 65, -108, 15, 10, 65, -116, 58, -109, 65, -110, -54, 112, 65, -104, -97, 71, 65, -100, -39, 27, 65, -95, 21, -7, 65, -103, 49, -117, 65, -82, -23, 51, 65, -75, -47, -86, 65, -65, 62, -115, 65, 118, 123, 7, 65, 119, 3, -45, 65, -124, 43, 125, 65, -123, 41, 112, 65, -120, 39, -31, 65, -119, -95, -21, 65, -114, 40, -19, 65, -108, -77, 53, 65, -110, 73, 107, 65, -99, 103, -38, 65, -65, -9, -57, 65, -121, 51, -11, 65, -106, 27, 75 ], "precision": "FLOAT_32", "root": 0, "canonicalAndNotALeaf": true, "size": 154, "leftIndex": [ 0, 1, 154, 494460863, 602208188, 1041617553, 571911425, 16919168, 0 ], "rightIndex": [ 0, 1, 154, 1056480159, 367354828, 1049457559, 70630381, 68186496, 0 ], "nodeFreeIndexPointer": 0, "leafFreeIndexPointer": 0, "partialTreeStateEnabled": true }, "boundingBoxCacheFraction": 0.0, "partialTreeState": true, "seed": -4385096218651858391, "id": 0, "dimensions": 8, "staticSeed": 0, "weight": 0.0, "hasAuxiliaryData": false }, { "version": "3.0", "root": 0, "maxSize": 256, "outputAfter": 32, "storeSequenceIndexesEnabled": false, "centerOfMassEnabled": false, "nodeStoreState": { "version": "3.0", "capacity": 255, "compressed": true, "cutDimension": [ 0, 7, 156, 582016427, 534283153, 939413062, 215229185, 925060108, 527564300, 1012455218, 152895228, 101168792, 593820895, 973107374, 839604246, 271380495, 600365836, 132329831, 241223 ], "cutValueData": [ 66, 32, 34, -2, 65, -106, -100, -91, 66, 53, 72, -13, 65, 122, 70, 16, 65, -98, 45, 58, 66, 51, 26, 47, 65, 81, 1, -6, 65, -113, 2, 9, 65, -117, -105, -62, 65, -63, 127, -84, 66, 102, -111, -73, 65, 74, -89, -106, 65, 107, 72, -118, 65, -128, 83, 25, 65, -114, -70, -9, 65, -103, 61, -26, 65, -98, -1, 121, 66, 5, 67, 121, 66, -88, -31, -122, 65, 66, 75, 49, 65, 84, 21, 6, 65, 96, -101, 110, 65, 119, 6, -119, 65, -105, -58, -75, 65, -119, 80, -62, 65, -113, -38, -10, 65, -108, 55, -57, 65, -109, -100, 53, 65, -108, 13, -50, 65, -68, -17, 10, 65, -39, 50, 63, 65, -16, -75, 48, 66, 125, 65, 78, 65, 71, -65, -122, 65, 94, -72, -39, 65, 78, -11, -89, 65, 89, -32, -63, 65, 86, 64, 105, 65, 102, -24, 125, 65, -126, 52, 81, 65, -125, 23, -31, 65, -115, -65, -99, 65, -112, -31, 12, 65, -105, -109, -116, 65, -109, 33, 98, 65, -97, 29, 52, 65, -72, -93, 79, 65, -65, 62, -23, 65, -12, -122, 9, 66, 33, -7, 100, 66, -104, 93, 112, 65, 59, -28, -65, 65, 81, 98, -110, 65, 68, 35, -112, 65, 127, -18, -39, 65, 114, -1, 45, 65, 113, -106, -67, 65, -125, -108, 15, 65, -128, -102, 115, 65, -117, -101, 57, 65, -120, 31, -118, 65, -119, 95, -56, 65, -112, 88, -112, 65, -97, 82, -90, 65, -80, -92, -24, 65, -79, -78, 20, 65, -58, 12, 20, 65, -64, -60, -99, 66, -115, -85, 112, 65, 32, 18, -24, 65, 77, 69, 97, 65, 69, -70, -89, 65, 110, 36, 78, 65, 108, 5, -8, 65, 118, 37, 122, 65, 126, 52, 23, 65, -120, 122, 88, 65, -116, -10, 47, 65, -110, 83, -62, 65, -112, -92, -55, 65, -127, -10, 127, 65, -77, -65, 93, 65, -71, 122, 108, 65, -58, -12, 108, 65, -59, 79, -7, 65, -54, -89, 106, 65, 43, -5, 17, 65, 32, -87, 124, 65, 72, -111, 123, 65, -124, -23, 38, 65, -114, 16, 94, 65, -108, -122, -2, 65, -110, -27, -116, 65, -87, 8, 55, 65, -65, -35, 13, 65, -64, 23, 54, 65, -49, 60, -61, 65, -42, -111, 43, 65, 34, 16, -43, 65, 59, 22, -34, 65, 62, 30, -70, 65, 67, -70, -34, 65, -106, 9, 103, 65, -88, -65, 9, 65, -78, 60, 51, 65, -77, 21, -119, 65, -61, 85, -59, 65, -55, 100, -101, 65, -56, -9, -122, 65, -47, -22, 15, 65, -38, 35, 20, 65, 43, -116, -2, 65, 62, 126, -6, 65, 57, 111, 123, 65, -91, -5, -6, 65, -89, -57, -42, 65, -88, -76, 62, 65, -84, -107, -83, 65, -80, -127, -48, 65, -77, -59, 70, 65, -61, 75, 12, 65, -46, 24, 61, 65, -55, 5, 123, 65, -52, 76, 13, 65, -47, 83, 119, 65, -41, 16, 13, 65, 63, 108, -116, 65, -93, 3, 124, 65, -95, 94, -47, 65, -75, 117, 83, 65, -85, 22, -89, 65, -79, -48, -96, 65, -77, -74, 43, 65, -53, -37, 20, 65, -46, -20, 50, 65, -46, 82, 66, 65, 57, 120, -76, 65, -91, 88, -123, 65, -93, 85, -81, 65, -91, 83, 35, 65, -94, 63, -28, 65, -87, -113, -68, 65, -87, 56, 38, 65, -79, 42, -91, 65, -50, 12, -1, 65, -47, 124, 113, 65, -96, -118, -26, 65, -99, 80, -124, 65, -86, -74, -124, 65, -87, 19, 110, 65, -59, 55, 95, 65, -99, 105, 6, 65, -85, 10, -76, 65, -87, 23, 70, 65, -104, 6, -80, 65, -96, -14, 6 ], "precision": "FLOAT_32", "root": 0, "canonicalAndNotALeaf": true, "size": 156, "leftIndex": [ 0, 1, 156, 637467355, 41414169, 313132744, 94038010, 612773842, 18 ], "rightIndex": [ 0, 1, 156, 729022463, 522390806, 505709214, 253550792, 554189200, 0 ], "nodeFreeIndexPointer": 0, "leafFreeIndexPointer": 0, "partialTreeStateEnabled": true }, "boundingBoxCacheFraction": 0.0, "partialTreeState": true, "seed": -2218594253454401235, "id": 0, "dimensions": 8, "staticSeed": 0, "weight": 0.0, "hasAuxiliaryData": false }, { "version": "3.0", "root": 0, "maxSize": 256, "outputAfter": 32, "storeSequenceIndexesEnabled": false, "centerOfMassEnabled": false, "nodeStoreState": { "version": "3.0", "capacity": 255, "compressed": true, "cutDimension": [ 0, 7, 152, 828103086, 892908737, 587253797, 120578392, 1053440845, 989099550, 950733798, 990502692, 834503110, 653899539, 654314506, 762310831, 681661110, 117946417, 473889786, 6 ], "cutValueData": [ 66, -121, 47, -89, 66, 36, -7, 113, 66, -88, 20, -109, 65, -71, 17, -122, 66, 106, -106, 70, 66, -112, 1, 118, 65, -89, -42, -5, 65, -49, 16, 33, 66, -123, -36, -29, 65, 117, 88, 18, 65, -108, 105, 85, 65, -60, -80, 75, 65, -4, -27, -90, 66, -110, -111, 92, 65, 52, 88, -53, 65, -123, -71, 52, 65, -86, -38, -9, 65, -70, -66, -92, 65, -64, -38, 44, 65, -63, -93, 109, 65, -43, 102, 3, 65, 50, -33, -77, 65, 111, 81, -72, 65, 118, -128, 120, 65, -94, -80, -9, 65, -76, 0, -45, 65, -68, -27, 66, 65, -85, 26, -113, 65, -64, 49, 127, 65, -53, -95, -28, 65, -41, 15, -9, 65, -34, 50, -23, 65, 41, 15, 67, 65, 44, -8, -58, 65, 104, 59, -45, 65, 96, 56, -36, 65, 127, 55, -28, 65, -105, -84, -39, 65, -78, 55, -58, 65, -67, 127, 1, 65, -72, -88, 59, 65, -61, -105, 101, 65, -57, 125, -71, 65, -52, -20, 101, 65, -55, -44, 43, 65, -49, -77, -68, 65, -48, 14, -7, 65, -36, -90, 110, 65, -33, 38, 24, 65, 43, 68, -48, 65, 56, -107, 35, 65, 91, -27, -17, 65, 126, -33, -27, 65, 113, -21, -35, 65, -128, 58, 46, 65, -108, 49, -128, 65, -105, 31, -115, 65, -94, 82, 14, 65, -74, -17, 125, 65, -85, 39, -59, 65, -78, -91, 45, 65, -63, -19, -77, 65, -55, -98, 79, 65, -55, -36, 69, 65, -40, 61, 78, 65, -41, 118, 13, 65, 54, 82, 0, 65, 48, 57, -28, 65, 84, -115, -1, 65, 92, 124, -41, 65, 98, -66, -100, 65, 127, -28, -16, 65, -126, -30, 61, 65, -102, 116, 20, 65, -120, 67, -49, 65, -110, 49, 80, 65, -97, -9, -52, 65, -92, -29, 50, 65, -73, 53, 72, 65, -68, 8, 27, 65, -76, -27, 108, 65, -55, -118, 49, 65, -52, -102, 3, 65, -43, -12, 36, 65, -46, -72, 120, 65, 40, -12, 0, 65, 51, 110, -41, 65, 82, -13, 71, 65, 86, -116, -56, 65, -125, -67, -122, 65, -115, -39, 31, 65, -106, -33, 121, 65, -109, 17, 89, 65, -104, -30, -51, 65, -89, -74, -71, 65, -90, -68, 109, 65, -81, -56, -61, 65, -68, -71, -83, 65, -65, 112, 70, 65, -76, 31, 2, 65, -48, -75, 111, 65, -38, -9, 95, 65, 33, 79, 114, 65, 64, 113, 68, 65, 126, -68, 40, 65, -117, 6, 103, 65, -115, -95, 0, 65, -106, -83, 108, 65, -93, -115, -29, 65, -93, -19, 70, 65, -81, -32, -7, 65, -85, 126, 112, 65, -87, 3, 102, 65, -88, 127, 126, 65, -44, 44, 118, 65, 50, 56, -79, 65, 73, -87, 6, 65, 79, -17, -80, 65, -120, -43, -13, 65, -121, -108, -117, 65, -120, 29, 3, 65, -110, -120, 41, 65, -90, 21, 125, 65, -98, 42, -55, 65, -96, -39, 40, 65, -84, -126, 72, 65, -73, 65, -28, 65, -78, 70, -10, 65, 62, 114, -69, 65, 77, -99, 17, 65, 67, 93, -94, 65, -125, 29, -13, 65, -122, -51, -13, 65, -119, 116, 57, 65, -111, -36, -41, 65, -105, -126, -87, 65, -93, 61, -58, 65, -85, -102, -16, 65, 79, 55, -125, 65, 50, -58, -84, 65, 66, 109, -39, 65, 72, 96, 3, 65, -126, -72, -112, 65, -113, -90, 61, 65, -114, -8, 105, 65, -97, -119, 119, 65, -97, -124, 63, 65, 79, -6, -2, 65, -109, -95, -55, 65, -98, -111, 112, 65, -102, -52, -26, 65, -96, 8, 19 ], "precision": "FLOAT_32", "root": 0, "canonicalAndNotALeaf": true, "size": 152, "leftIndex": [ 0, 1, 152, 595517135, 376581047, 18330468, 472688889, 33899589, 1 ], "rightIndex": [ 0, 1, 152, 1056755691, 1068598247, 655065640, 415740001, 50409219, 0 ], "nodeFreeIndexPointer": 0, "leafFreeIndexPointer": 0, "partialTreeStateEnabled": true }, "boundingBoxCacheFraction": 0.0, "partialTreeState": true, "seed": 7575133640203251999, "id": 0, "dimensions": 8, "staticSeed": 0, "weight": 0.0, "hasAuxiliaryData": false }, { "version": "3.0", "root": 0, "maxSize": 256, "outputAfter": 32, "storeSequenceIndexesEnabled": false, "centerOfMassEnabled": false, "nodeStoreState": { "version": "3.0", "capacity": 255, "compressed": true, "cutDimension": [ 0, 7, 157, 866410190, 601875750, 36443360, 255686071, 469648838, 403040790, 790453781, 885203761, 484456532, 301957886, 52112197, 285212204, 401115601, 61099873, 1009364995, 719756 ], "cutValueData": [ 66, -126, -111, 29, 65, -98, -29, -106, 66, 125, -79, 85, 65, 53, -71, 96, 66, 1, -67, 27, 66, -121, -98, -124, 65, 57, 11, -52, 65, -103, 102, 64, 65, -94, -120, -128, 66, 70, 34, -57, 66, -114, 43, 121, 66, -105, 53, 123, 65, 33, 84, 109, 65, 59, 35, 37, 65, -101, 12, 70, 65, -95, 34, -70, 65, -109, 97, -10, 65, -45, 37, -92, 66, 14, 100, 3, 66, 99, 0, -73, 65, 33, 29, -21, 65, 53, 75, 30, 65, 33, -12, 93, 65, -99, -21, 48, 65, -93, -73, 27, 65, -55, 65, -68, 65, -48, 111, 105, 65, -1, -110, 50, 66, 25, 112, 47, 66, 85, -80, -16, 65, 46, 33, -18, 65, -117, 125, 15, 65, -93, -6, 67, 65, -90, 13, 115, 65, -54, 22, 55, 65, -54, -13, -55, 65, -37, -105, 36, 65, -35, 64, -19, 66, 41, 21, -63, 65, 100, 92, 76, 65, -111, 12, -45, 65, -95, -4, -77, 65, -102, -51, 29, 65, -71, 126, -108, 65, -50, -86, 122, 65, -57, 3, -22, 65, -60, 6, 111, 65, -39, -1, -55, 65, -35, 32, -112, 65, 77, 3, 74, 65, 116, 103, -86, 65, -113, 119, 32, 65, -108, -125, -68, 65, -100, 17, -119, 65, -97, 81, 53, 65, -87, 99, -30, 65, -61, -71, -9, 65, -43, -119, -54, 65, -48, 10, 14, 65, -37, -62, -84, 65, 64, -96, -62, 65, 89, -94, -30, 65, 112, 27, -6, 65, -115, -69, -16, 65, -116, -98, 77, 65, -111, 81, -45, 65, -104, 125, -49, 65, -102, 91, 12, 65, -87, 64, -73, 65, -67, -119, -93, 65, -70, -81, -98, 65, -62, 49, -80, 65, -48, 26, 66, 65, -41, -49, 75, 65, -44, 86, 73, 65, -36, -90, -100, 65, 61, 70, -99, 65, 71, -104, 55, 65, 98, 51, -89, 65, 107, 62, -114, 65, 121, 57, 42, 65, 123, -109, -84, 65, -106, 66, 90, 65, -105, -29, 13, 65, -109, 99, -2, 65, -83, 38, 45, 65, -94, -6, 61, 65, -80, -84, 19, 65, -72, -40, -91, 65, -63, 0, 105, 65, -51, 8, -125, 65, -54, -94, -59, 65, -41, -114, -56, 65, 55, 114, -104, 65, 74, -5, -92, 65, 67, 92, 124, 65, 104, -92, 46, 65, 83, 106, 78, 65, 114, -40, -97, 65, -124, -44, -8, 65, -114, 9, -125, 65, -112, -41, 55, 65, -110, 117, -65, 65, -89, 32, -32, 65, -83, 104, -103, 65, -88, -97, -99, 65, -78, -64, 119, 65, -88, 27, -44, 65, -67, 43, -41, 65, -57, -24, 57, 65, -59, -125, 5, 65, -54, -46, 107, 65, -36, -79, -114, 65, 73, -64, -42, 65, 67, 85, 124, 65, 69, 89, 122, 65, 89, -125, 58, 65, 72, 99, -17, 65, 83, -71, -36, 65, 117, 125, 53, 65, -126, 72, -54, 65, -126, -57, 22, 65, -117, 111, 25, 65, -95, 62, 99, 65, -89, -124, 117, 65, -88, -14, -49, 65, -75, -120, -115, 65, -67, 3, 24, 65, -72, -126, -121, 65, 59, -43, 23, 65, 78, 125, 83, 65, 90, -24, 61, 65, 99, 104, -73, 65, -125, 4, -51, 65, -121, -104, 88, 65, -84, 52, 15, 65, -75, 15, -118, 65, -63, -30, 56, 65, 48, -26, 111, 65, 77, 112, 9, 65, 93, 107, 68, 65, 103, 103, -50, 65, -127, -25, -8, 65, 120, 98, 123, 65, -125, 88, 16, 65, -120, -99, 70, 65, -88, 18, -125, 65, -73, 81, -14, 65, -76, -64, 35, 65, 121, -56, -31, 65, -127, -66, -50, 65, -114, 91, 49, 65, -81, -40, 104, 65, -75, -1, 89, 65, -127, -56, 0, 65, -81, -21, 93, 65, -119, -74, 18 ], "precision": "FLOAT_32", "root": 0, "canonicalAndNotALeaf": true, "size": 157, "leftIndex": [ 0, 1, 157, 387372027, 1048194750, 442317679, 344551001, 436333250, 4 ], "rightIndex": [ 0, 1, 157, 122627071, 242953906, 1051927846, 134357356, 12643586, 18 ], "nodeFreeIndexPointer": 0, "leafFreeIndexPointer": 0, "partialTreeStateEnabled": true }, "boundingBoxCacheFraction": 0.0, "partialTreeState": true, "seed": -2303288239725547002, "id": 0, "dimensions": 8, "staticSeed": 0, "weight": 0.0, "hasAuxiliaryData": false }, { "version": "3.0", "root": 0, "maxSize": 256, "outputAfter": 32, "storeSequenceIndexesEnabled": false, "centerOfMassEnabled": false, "nodeStoreState": { "version": "3.0", "capacity": 255, "compressed": true, "cutDimension": [ 0, 7, 161, 226961351, 929827151, 44570955, 640526152, 880438976, 935694327, 100924351, 988904923, 14434166, 620923090, 192472920, 27135989, 77176154, 722999568, 873898353, 960685176, 6 ], "cutValueData": [ 66, -119, 61, 33, 66, 31, 36, -95, 66, -113, 52, 40, 66, 25, 61, 62, 66, 103, -42, 86, 66, -87, -25, 31, 66, 2, -22, 52, 66, 40, -37, -57, 66, 80, -6, -25, 65, -58, 125, -34, 65, -91, -94, -17, 65, -36, 91, -12, 65, 66, -76, 90, 65, -84, -76, 39, 65, -56, -34, -42, 65, -38, 70, 39, 65, 75, -3, 106, 65, 87, 89, -60, 65, -87, -126, -30, 65, -70, -1, -74, 65, -55, -101, -84, 65, -43, -39, 127, 65, 52, 87, 89, 65, 76, 39, 111, 65, 88, 106, -88, 65, 95, -13, -88, 65, -92, 67, 2, 65, -85, 42, -74, 65, -72, -54, -66, 65, -76, 34, 14, 65, -62, -108, -5, 65, -50, -72, -41, 65, -54, -76, -40, 65, -40, -69, 119, 65, 42, 79, 72, 65, 48, -15, -27, 65, 78, 48, 60, 65, 85, -71, -105, 65, -109, 46, 72, 65, -91, -107, 8, 65, -88, 46, 15, 65, -78, 86, -124, 65, -69, -48, 111, 65, -49, 38, 84, 65, -49, -38, -13, 65, -59, -57, -38, 65, -35, 16, -80, 65, -41, 108, -49, 65, 35, -47, 79, 65, 62, -63, -81, 65, 70, -70, -88, 65, 73, -59, -93, 65, -106, 100, -113, 65, -110, -122, -126, 65, -102, -123, -47, 65, -95, -49, -7, 65, -85, 1, -120, 65, -76, -27, 117, 65, -72, 36, -96, 65, -51, 100, 57, 65, -66, -73, -74, 65, -54, -95, -60, 65, -47, -46, 18, 65, -47, -39, -5, 65, 38, 56, -109, 65, 49, -28, -60, 65, 48, -90, 54, 65, 55, 22, -124, 65, 68, 95, -41, 65, 71, 83, 50, 65, -116, 106, -72, 65, -99, -40, 18, 65, -97, 94, -83, 65, -94, -31, -15, 65, -73, 73, 73, 65, -74, 55, 23, 65, -77, 124, 124, 65, -80, 76, -28, 65, -67, -31, -56, 65, -61, -86, -5, 65, -50, -92, 13, 65, -36, -59, -31, 65, 39, 54, 119, 65, 32, -33, 92, 65, 55, 78, 27, 65, 79, 116, -4, 65, 125, -61, 16, 65, -113, 43, 30, 65, -102, 15, 6, 65, -113, -112, 109, 65, -107, 64, 106, 65, -86, -5, -111, 65, -83, -97, -76, 65, -80, 60, 126, 65, -67, -65, 64, 65, -79, -25, -120, 65, -64, 46, -17, 65, -47, -86, 55, 65, 111, 83, 87, 65, -118, 55, 115, 65, -111, -104, 65, 65, -106, 113, 62, 65, -105, 10, 60, 65, -100, -34, -95, 65, -103, -86, 95, 65, -93, -90, -41, 65, -75, 60, -60, 65, -79, 110, -58, 65, -74, -123, -3, 65, -68, -32, -83, 65, -64, -24, 53, 65, 84, 55, 46, 65, 103, -6, -47, 65, -117, -46, 2, 65, -124, -95, 88, 65, -114, -114, 57, 65, -115, 41, -6, 65, -106, -50, 105, 65, -100, -82, -35, 65, -91, 11, 40, 65, -100, -11, 68, 65, -95, -100, -66, 65, -85, -123, 9, 65, -57, 25, -35, 65, 102, 73, 15, 65, 108, 108, 60, 65, 104, 59, -92, 65, 122, 113, -111, 65, -124, 65, 84, 65, -121, -33, -40, 65, -111, 125, -81, 65, -100, -54, -45, 65, -97, 80, -96, 65, -102, 19, 60, 65, -101, 2, -46, 65, -88, 45, 109, 65, -83, 20, 48, 65, 97, -47, -29, 65, 103, -104, -68, 65, 124, 123, -65, 65, 123, 37, -12, 65, -127, 55, 54, 65, -118, 3, -5, 65, -116, -28, 91, 65, -109, -97, 96, 65, -98, -20, -89, 65, -98, -62, 96, 65, -101, -70, -50, 65, -90, -106, -68, 65, -94, -14, 2, 65, -86, 107, -57, 65, -125, 114, -23, 65, -125, -86, -86, 65, -120, 26, -51, 65, -104, 98, -111, 65, -90, -29, -70, 65, -121, 54, 57, 65, -124, -85, 71, 65, -121, -7, -85, 65, -124, 2, 81, 65, -125, 37, -49 ], "precision": "FLOAT_32", "root": 0, "canonicalAndNotALeaf": true, "size": 161, "leftIndex": [ 0, 1, 161, 394231387, 215853849, 738319430, 552710009, 68199825, 76 ], "rightIndex": [ 0, 1, 161, 914325007, 498510709, 739595480, 350268169, 271701895, 516 ], "nodeFreeIndexPointer": 0, "leafFreeIndexPointer": 0, "partialTreeStateEnabled": true }, "boundingBoxCacheFraction": 0.0, "partialTreeState": true, "seed": -7052110192596428648, "id": 0, "dimensions": 8, "staticSeed": 0, "weight": 0.0, "hasAuxiliaryData": false }, { "version": "3.0", "root": 0, "maxSize": 256, "outputAfter": 32, "storeSequenceIndexesEnabled": false, "centerOfMassEnabled": false, "nodeStoreState": { "version": "3.0", "capacity": 255, "compressed": true, "cutDimension": [ 0, 7, 158, 678555297, 808367964, 149986988, 605099107, 871364235, 351107547, 135858030, 1061060801, 26888826, 283728926, 265670822, 403489305, 807399008, 484439018, 50363814, 8680769 ], "cutValueData": [ 66, 90, -8, -20, 65, -11, -46, -6, 66, -124, 81, 25, 65, -53, 88, -88, 66, 81, -111, 91, 66, 114, 11, -7, 66, -98, 84, -99, 65, -112, 88, 91, 65, -62, 35, 111, 66, 61, -76, 94, 66, -103, 76, -115, 65, 42, -2, 26, 65, -56, -76, 58, 65, -53, 68, 3, 65, -41, -92, -100, 66, 45, 59, -5, 66, -111, 42, -84, 65, 46, -66, -79, 65, 86, -16, 25, 65, -87, -47, -23, 65, -51, -36, 22, 65, -41, -111, 125, 65, 42, -47, 116, 65, 65, -63, -123, 65, 106, -46, 3, 65, -101, -91, 53, 65, -73, 108, -52, 65, -41, -99, 122, 65, -38, -11, -34, 65, 56, -85, -117, 65, 94, -16, -19, 65, 81, -42, -113, 65, -114, -34, -6, 65, -104, -109, 25, 65, -83, 4, -100, 65, -78, 8, -76, 65, -67, 53, -3, 65, -53, 86, 98, 65, 51, 120, 76, 65, 63, -114, 94, 65, 78, -99, 3, 65, 90, 94, 0, 65, 92, -117, 34, 65, 106, -41, 39, 65, 125, 16, 70, 65, -98, 89, 122, 65, -101, -120, -112, 65, -91, -72, 52, 65, -100, 69, -9, 65, -89, -73, -68, 65, -81, 47, 125, 65, -76, -43, 105, 65, -66, -85, -75, 65, -50, 47, -24, 65, 32, 1, 30, 65, 55, -47, 44, 65, 58, -32, -37, 65, 57, 82, 120, 65, 65, 116, -99, 65, 78, -101, 114, 65, 73, -85, 58, 65, 89, -94, -104, 65, 124, 5, -78, 65, 104, 30, 117, 65, -116, -71, -80, 65, -114, -116, 84, 65, -104, -18, -29, 65, -101, -6, 54, 65, -74, -55, 13, 65, -99, 14, -20, 65, -79, 35, 122, 65, -66, 40, -25, 65, -72, -15, -45, 65, 54, -100, 5, 65, 46, 35, 43, 65, 42, -32, 60, 65, 32, 0, 78, 65, 70, -128, -71, 65, 95, -104, 78, 65, 108, -119, -28, 65, 111, -124, 118, 65, 96, 54, -108, 65, 112, 97, 27, 65, -115, 24, -10, 65, -109, -6, -101, 65, -102, -84, 2, 65, -104, -107, 75, 65, -81, -10, 47, 65, -91, -66, 126, 65, -88, 13, 23, 65, -77, 23, -71, 65, -68, 119, 107, 65, -78, -34, -125, 65, -66, -28, 100, 65, 35, -84, 113, 65, 34, -42, 103, 65, 68, -63, 25, 65, 82, 54, -23, 65, -124, -14, 16, 65, 112, 61, -114, 65, -122, 50, -55, 65, -118, -70, 108, 65, -111, 29, -127, 65, -103, -4, -8, 65, -95, -37, -47, 65, -85, -36, 92, 65, -84, 69, 104, 65, -80, 124, -123, 65, -76, -48, -94, 65, -71, 126, -11, 65, -69, 86, -93, 65, 73, 7, 12, 65, 107, 8, 115, 65, 114, -48, -17, 65, 119, -122, -63, 65, -123, 32, -17, 65, -113, 43, -95, 65, -110, 98, -122, 65, -96, 127, -99, 65, -90, -18, 81, 65, -89, 115, 64, 65, -85, 41, 92, 65, -82, -22, -121, 65, -85, -110, -106, 65, -80, -71, -30, 65, -78, -102, -69, 65, -80, -68, 42, 65, -57, -50, 76, 65, 126, -55, -72, 65, 120, 98, -96, 65, -125, -93, -24, 65, -120, 70, 119, 65, -116, 99, 94, 65, -108, -24, 46, 65, -90, -47, -59, 65, -104, -95, -22, 65, -84, 36, -92, 65, -60, -120, -37, 65, -61, -33, -59, 65, -127, -68, -95, 65, -119, -94, -68, 65, -119, -37, -39, 65, -119, 77, 0, 65, -105, -124, 24, 65, -117, -45, -21, 65, -82, -7, -34, 65, -85, 105, -106, 65, -72, -88, -3, 65, -58, -41, 62, 65, -56, -52, 95, 65, -125, -4, 101, 65, -113, 97, 55, 65, -106, -40, -14, 65, -91, -82, 53, 65, -70, -58, -11, 65, -69, 97, -42, 65, -93, 21, 86, 65, -64, -50, 121 ], "precision": "FLOAT_32", "root": 0, "canonicalAndNotALeaf": true, "size": 158, "leftIndex": [ 0, 1, 158, 797728735, 97646463, 682130776, 512709890, 311629952, 8 ], "rightIndex": [ 0, 1, 158, 666782095, 756836223, 904010474, 974997192, 143047808, 32 ], "nodeFreeIndexPointer": 0, "leafFreeIndexPointer": 0, "partialTreeStateEnabled": true }, "boundingBoxCacheFraction": 0.0, "partialTreeState": true, "seed": -7613200544347028649, "id": 0, "dimensions": 8, "staticSeed": 0, "weight": 0.0, "hasAuxiliaryData": false }, { "version": "3.0", "root": 0, "maxSize": 256, "outputAfter": 32, "storeSequenceIndexesEnabled": false, "centerOfMassEnabled": false, "nodeStoreState": { "version": "3.0", "capacity": 255, "compressed": true, "cutDimension": [ 0, 7, 159, 493603855, 999138685, 908948587, 195652832, 572209594, 88854975, 123080265, 670799892, 653949563, 502984317, 119402491, 704925700, 966292116, 568532303, 939131048, 85199327 ], "cutValueData": [ 66, 55, -23, -17, 65, -62, -124, 12, 66, -126, 19, -61, 65, -92, -117, -88, 66, 5, -117, 113, 66, 118, -88, 69, 66, -103, 67, -38, 65, 95, -25, -31, 65, -56, 120, -95, 65, -27, -27, 99, 66, 38, -59, 2, 66, -120, -47, 84, 65, 64, -2, 91, 65, -113, -85, 35, 65, -83, -32, 77, 65, -49, 116, 82, 65, 41, 54, -25, 65, 94, 123, -15, 65, 103, 78, 91, 65, -125, -101, -92, 65, -83, 120, 77, 65, -58, 99, -41, 65, -52, 41, 68, 65, -38, -50, -64, 65, 40, -82, -126, 65, 60, 87, -105, 65, 64, -75, 27, 65, 91, 58, -86, 65, -104, -121, -17, 65, -118, -58, 98, 65, -92, -80, -33, 65, -73, 1, 125, 65, -58, -63, -79, 65, -64, -78, -71, 65, -60, 26, -72, 65, -53, -121, -75, 65, 35, -3, -99, 65, 34, 18, -126, 65, 54, -28, -121, 65, 62, -6, 101, 65, 71, 9, -39, 65, 100, -76, 104, 65, 90, -29, -116, 65, 112, 48, -21, 65, -98, -67, 76, 65, -87, -60, 13, 65, -83, 110, 21, 65, -73, -93, -127, 65, -75, -126, -108, 65, -63, -33, -116, 65, -57, 62, -49, 65, -46, 40, 114, 65, -54, 21, 41, 65, 35, 97, -18, 65, 61, 100, 54, 65, 64, 78, 21, 65, 67, -24, -15, 65, 86, 17, -14, 65, 96, -64, 60, 65, -125, -90, -107, 65, -127, 38, 107, 65, -99, 29, 11, 65, -104, 16, -35, 65, -86, 83, 65, 65, -83, -128, 51, 65, -86, -29, -80, 65, -81, 4, 82, 65, -76, -127, -80, 65, -69, 5, -54, 65, -63, 102, 102, 65, -49, 13, 62, 65, -44, -77, -66, 65, 55, 72, 54, 65, 60, -124, 76, 65, 79, -40, -101, 65, 88, -111, 15, 65, 109, 78, 13, 65, 111, -94, -2, 65, -118, 113, -100, 65, -122, -123, 9, 65, -109, 65, 103, 65, -106, 21, -29, 65, -90, -16, -41, 65, -94, -7, -127, 65, -93, -127, -26, 65, -88, -70, -87, 65, -74, 123, 72, 65, -86, -123, -18, 65, -67, 113, 24, 65, -41, 29, -92, 65, -43, 11, 10, 65, 52, -2, -20, 65, 34, 28, 74, 65, 54, -11, -27, 65, 70, 86, -36, 65, 81, -79, -80, 65, 102, 99, -104, 65, 119, 66, -58, 65, 121, 94, -17, 65, -127, -101, -93, 65, -126, 93, 49, 65, -123, 27, 103, 65, -114, -116, 96, 65, -102, 104, 124, 65, -104, -123, -33, 65, -95, 19, 97, 65, -80, 11, 113, 65, -68, -89, -5, 65, -47, -99, 89, 65, -38, 36, -25, 65, 34, -84, 34, 65, 79, -74, -25, 65, 67, -20, -21, 65, 73, 118, -42, 65, 103, -93, -86, 65, 107, -63, 80, 65, 98, 117, 74, 65, 122, 98, 42, 65, -125, -111, 55, 65, -122, -51, -22, 65, -114, 78, -111, 65, -105, 47, 116, 65, -108, -7, -80, 65, -111, -116, 62, 65, -107, -114, 8, 65, -94, -13, 42, 65, -97, 119, 33, 65, -91, 91, 25, 65, -66, -26, 66, 65, -57, 63, 40, 65, -67, -31, -124, 65, -43, -64, -17, 65, 35, 107, -108, 65, 60, -75, 78, 65, 115, 33, 78, 65, 117, 78, 119, 65, -121, 118, 48, 65, -110, 70, -80, 65, -108, 18, 52, 65, -105, 18, -101, 65, -106, 11, 40, 65, -97, -101, -80, 65, -92, -56, -91, 65, -86, -42, -19, 65, -83, -32, -90, 65, -67, -2, 46, 65, -63, -106, 37, 65, -52, 101, -121, 65, 47, -14, -35, 65, -125, 20, -19, 65, -115, 78, -79, 65, -113, 59, 118, 65, -112, 117, -77, 65, -103, 3, -18, 65, -53, -101, 118, 65, 33, -52, 8, 65, -126, 16, -66, 65, -115, 120, -73, 65, -105, 86, 77 ], "precision": "FLOAT_32", "root": 0, "canonicalAndNotALeaf": true, "size": 159, "leftIndex": [ 0, 1, 159, 469234591, 1028121447, 811530955, 2616522, 395907, 1 ], "rightIndex": [ 0, 1, 159, 795734207, 21460523, 274630743, 169015721, 940676317, 4 ], "nodeFreeIndexPointer": 0, "leafFreeIndexPointer": 0, "partialTreeStateEnabled": true }, "boundingBoxCacheFraction": 0.0, "partialTreeState": true, "seed": 3272495365777409116, "id": 0, "dimensions": 8, "staticSeed": 0, "weight": 0.0, "hasAuxiliaryData": false }, { "version": "3.0", "root": 0, "maxSize": 256, "outputAfter": 32, "storeSequenceIndexesEnabled": false, "centerOfMassEnabled": false, "nodeStoreState": { "version": "3.0", "capacity": 255, "compressed": true, "cutDimension": [ 0, 7, 170, 237220975, 619446502, 1060895789, 576375097, 906341353, 603266710, 977175568, 764181511, 200040320, 1070647016, 624794860, 679096514, 64451588, 119598281, 508949507, 1070296763, 159902282 ], "cutValueData": [ 66, -113, 61, 113, 65, -77, 51, 90, 66, -107, 13, -39, 65, 113, -38, 32, 66, 72, 111, 70, 66, -102, 7, -83, 65, 115, 101, 7, 65, -99, -79, -108, 65, -54, 82, -72, 66, 93, -102, 113, 65, 91, -59, -21, 65, 116, 83, -128, 65, -121, -124, -118, 65, -84, -89, -72, 65, -117, 33, -13, 66, 17, -51, -103, 66, 102, -48, -25, 66, -116, 107, -12, 65, 69, -75, 24, 65, 93, -63, 9, 65, 118, 10, -49, 65, -124, -107, 61, 65, -106, 38, -106, 65, -101, -69, -16, 65, -93, -45, 125, 65, -55, -9, -79, 66, 8, 6, -71, 65, 58, 4, -35, 65, 69, -10, -3, 65, 114, -120, -68, 65, 122, 6, 122, 65, -121, 58, 17, 65, -124, 90, 122, 65, -111, -102, -119, 65, -112, 7, -99, 65, -97, 8, 45, 65, -92, 52, 3, 65, -82, 51, 56, 65, -79, -127, 108, 65, -73, -78, -128, 65, -39, 115, -50, 66, 9, -6, 75, 65, 54, -87, -72, 65, 53, -40, -47, 65, 87, 102, -45, 65, 86, -24, 71, 65, 90, -116, -128, 65, 105, -13, 60, 65, 123, 35, -30, 65, -121, -59, -90, 65, -123, -10, 97, 65, -105, -88, -55, 65, -110, -78, -6, 65, -94, -124, -120, 65, -93, -88, -12, 65, -91, 24, -91, 65, -89, 103, -6, 65, -86, 93, -13, 65, -62, -124, 80, 65, -37, -32, 104, 65, 48, -9, -71, 65, 54, 93, -122, 65, 78, -60, -107, 65, 69, 1, 83, 65, 81, -121, 74, 65, 87, 80, -68, 65, 97, -103, 53, 65, 98, -75, 32, 65, 98, -96, 68, 65, 100, 110, 83, 65, 115, -107, -110, 65, -114, -80, -56, 65, -115, -23, 27, 65, -98, 54, 90, 65, -105, -54, 42, 65, -100, 5, 70, 65, -90, 124, -38, 65, -91, -99, 34, 65, -84, 107, 70, 65, -88, -72, -90, 65, -76, 21, -122, 65, -57, -17, 69, 65, -63, 19, 47, 65, -40, 95, 77, 65, 38, 66, -83, 65, 46, -110, -109, 65, 54, 108, -119, 65, 65, -60, -72, 65, 68, 51, 72, 65, 72, -59, -121, 65, 81, -36, 102, 65, 110, 120, -109, 65, 110, -21, 16, 65, 125, -120, 67, 65, 112, 86, -98, 65, -128, 107, 88, 65, -114, 60, -61, 65, -119, -62, -5, 65, -99, 108, -26, 65, -94, -85, -87, 65, -91, 77, 32, 65, -89, -77, -125, 65, -93, 47, -102, 65, -88, -82, -82, 65, -96, -125, 90, 65, -85, -27, -104, 65, -74, -83, -6, 65, -76, -117, 66, 65, -69, -11, 100, 65, -59, 75, 78, 65, -54, -110, 103, 65, -49, -15, 59, 65, 39, -28, 62, 65, 42, 109, 83, 65, 55, 54, 102, 65, 59, -9, -106, 65, 77, -106, 67, 65, 65, -99, -53, 65, 67, 7, -105, 65, 108, -114, -50, 65, 104, 34, -51, 65, -121, 109, -128, 65, -121, 102, -104, 65, -121, 107, 26, 65, -117, 106, 54, 65, -107, -11, -9, 65, -119, 30, 41, 65, -105, 44, -54, 65, -97, 102, -83, 65, -91, 37, 87, 65, -95, 100, -103, 65, -94, 112, 105, 65, -87, 44, -86, 65, -79, -58, 91, 65, -80, 38, -24, 65, -68, 74, -74, 65, -54, 59, -42, 65, -56, 42, 31, 65, -58, -110, -115, 65, -63, 69, -7, 65, -42, -91, 44, 65, 44, -78, 47, 65, 48, -4, 55, 65, 73, 14, 2, 65, 83, -109, 76, 65, 101, -37, -82, 65, 126, 31, -30, 65, -125, -75, -128, 65, -113, -27, -94, 65, -118, -28, -116, 65, -115, 106, -87, 65, -100, 123, -15, 65, -88, 27, -112, 65, -73, -121, 57, 65, -60, 22, -24, 65, -71, 76, 46, 65, -50, 81, -101, 65, -43, 95, 100, 65, -41, -109, -83, 65, 34, 74, 49, 65, 42, -28, -34, 65, -124, -101, 82, 65, -118, -44, -47, 65, -50, -17, -114, 65, -43, -36, 55, 65, -55, -45, -58, 65, 41, 5, -72, 65, -51, 58, 81, 65, -44, 4, 62, 65, -41, 113, 49 ], "precision": "FLOAT_32", "root": 0, "canonicalAndNotALeaf": true, "size": 170, "leftIndex": [ 0, 1, 170, 1073004511, 999798234, 570299295, 276570850, 3179122, 33984 ], "rightIndex": [ 0, 1, 170, 1038907355, 456503898, 794285704, 741695985, 809029648, 41024 ], "nodeFreeIndexPointer": 0, "leafFreeIndexPointer": 0, "partialTreeStateEnabled": true }, "boundingBoxCacheFraction": 0.0, "partialTreeState": true, "seed": -2980812803043547139, "id": 0, "dimensions": 8, "staticSeed": 0, "weight": 0.0, "hasAuxiliaryData": false }, { "version": "3.0", "root": 0, "maxSize": 256, "outputAfter": 32, "storeSequenceIndexesEnabled": false, "centerOfMassEnabled": false, "nodeStoreState": { "version": "3.0", "capacity": 255, "compressed": true, "cutDimension": [ 0, 7, 169, 268713, 61687872, 803564534, 1046203934, 389950222, 431832853, 942191220, 693869819, 815365331, 668449621, 687014684, 953391403, 395923185, 708214781, 887950063, 130390598, 101249503 ], "cutValueData": [ 66, -104, -85, -28, 66, 73, -29, 115, 66, -89, -125, -20, 65, -122, 10, 36, 66, 93, 113, -45, 65, 71, -6, -7, 66, 16, -51, 74, 66, 101, 20, -25, 65, 60, 53, -6, 65, 122, -79, -72, 65, -103, 2, -78, 66, 23, 6, 122, 66, 96, 93, -4, 65, 46, 98, 6, 65, 43, 96, -77, 65, 68, -60, 91, 65, 127, -88, -111, 65, -97, 43, -114, 65, -63, -3, 7, 65, 33, -111, -38, 65, 47, -105, 89, 65, 61, 82, -38, 65, 54, 81, 124, 65, 112, 72, 122, 65, -127, -1, 18, 65, -125, 56, -34, 65, -114, 118, 48, 65, -62, -97, -8, 65, -87, 43, 121, 65, -30, -82, 49, 65, 36, -112, -8, 65, 36, -37, -79, 65, 33, -111, -124, 65, 45, 80, -7, 65, 69, -24, -34, 65, 78, -85, 18, 65, -128, 10, -114, 65, 112, -18, -24, 65, 126, 1, 59, 65, -91, -82, 26, 65, -110, -45, 45, 65, -106, -113, 127, 65, -66, -2, 82, 65, -89, -82, -127, 65, -87, 52, -107, 65, -44, -29, 22, 65, 33, 59, -79, 65, 32, 30, 54, 65, 63, -21, -83, 65, 52, 111, -75, 65, 79, 53, -60, 65, 75, 55, 111, 65, 75, -85, 118, 65, 114, -47, 115, 65, 112, -42, -96, 65, 114, -71, -120, 65, 100, -29, -29, 65, 118, -11, 8, 65, -121, -59, -37, 65, -113, 47, -108, 65, -107, 8, -74, 65, -102, -58, 69, 65, -99, -9, 23, 65, -90, -82, -60, 65, -82, -77, -40, 65, -90, -59, 79, 65, -70, 125, 36, 65, -57, 59, 93, 65, -59, 43, 84, 65, 43, 9, -111, 65, 56, -19, 64, 65, 79, 68, -63, 65, 66, -42, -2, 65, 78, -78, 43, 65, 90, -30, 119, 65, -126, -7, -47, 65, -116, -6, 86, 65, -120, 49, 6, 65, -106, -88, -42, 65, -108, 69, 69, 65, -111, 43, -60, 65, -108, 63, -76, 65, -97, 32, -51, 65, -106, -22, -73, 65, -103, -66, 74, 65, -94, 8, 71, 65, -85, -112, -121, 65, -84, -113, -65, 65, -86, -43, -113, 65, -67, 57, -10, 65, -47, -114, 15, 65, -42, -87, -105, 65, 48, -63, 23, 65, 81, 13, 7, 65, 97, -9, 6, 65, 114, -79, 0, 65, -118, 36, -5, 65, -108, 62, -34, 65, -120, 22, 95, 65, -108, -11, 121, 65, -102, -118, -16, 65, -101, -95, 112, 65, -89, 10, 49, 65, -93, -9, 32, 65, -75, 32, -53, 65, -74, -60, -124, 65, -75, 17, 126, 65, -76, 81, -68, 65, -59, -76, 74, 65, -50, -128, -58, 65, -42, -75, -43, 65, -40, 79, -91, 65, 59, -102, -53, 65, 80, -124, 19, 65, 108, -66, 58, 65, 99, 64, 107, 65, -116, -54, -65, 65, -114, 94, 6, 65, -110, 47, -66, 65, -102, 20, 27, 65, -100, -96, 111, 65, -89, 33, 97, 65, -92, -76, -31, 65, -90, 97, 49, 65, -85, -99, -85, 65, -77, 60, -107, 65, -74, -73, -123, 65, -72, 123, 115, 65, -71, -109, -12, 65, -58, 67, -76, 65, -63, -114, -59, 65, -53, -54, -63, 65, -39, 96, 92, 65, -35, -46, 122, 65, 80, -109, -29, 65, -118, 3, -29, 65, -103, -8, -61, 65, -83, 78, 33, 65, -83, 29, -24, 65, -81, -60, 33, 65, -75, -2, -106, 65, -80, -39, 3, 65, -73, -64, -13, 65, -58, -30, -85, 65, -49, -114, 18, 65, -49, 56, -109, 65, 82, -80, 125, 65, 99, -19, -127, 65, -104, -94, 39, 65, -98, 38, 28, 65, -92, -61, 104, 65, -87, 74, 23, 65, -80, 80, 49, 65, -72, 109, -17, 65, -51, 100, 13, 65, -55, 39, -106, 65, -55, 101, 75, 65, 97, -3, 106, 65, -94, -90, 33, 65, -80, 19, -38, 65, -65, 94, -118, 65, -66, -53, 102, 65, -63, -86, -98, 65, -45, -49, 63, 65, -97, 54, -61, 65, -78, -112, 29, 65, -79, -18, 32, 65, -75, 5, -54, 65, -69, 41, 92 ], "precision": "FLOAT_32", "root": 0, "canonicalAndNotALeaf": true, "size": 169, "leftIndex": [ 0, 1, 169, 1068476395, 817162107, 911524959, 153962771, 35078250, 68876 ], "rightIndex": [ 0, 1, 169, 482338683, 541388276, 847462907, 3095390, 725699928, 1112 ], "nodeFreeIndexPointer": 0, "leafFreeIndexPointer": 0, "partialTreeStateEnabled": true }, "boundingBoxCacheFraction": 0.0, "partialTreeState": true, "seed": 4827200799539851007, "id": 0, "dimensions": 8, "staticSeed": 0, "weight": 0.0, "hasAuxiliaryData": false }, { "version": "3.0", "root": 0, "maxSize": 256, "outputAfter": 32, "storeSequenceIndexesEnabled": false, "centerOfMassEnabled": false, "nodeStoreState": { "version": "3.0", "capacity": 255, "compressed": true, "cutDimension": [ 0, 7, 168, 602289332, 304359344, 1052939443, 135491070, 151455303, 670046361, 328615073, 1031202669, 377003933, 2334910, 643748342, 283638278, 591300592, 991935926, 662865773, 412944657, 8432878 ], "cutValueData": [ 66, 33, 122, -57, 65, -21, 15, -91, 66, 79, 32, -100, 65, 45, -37, -113, 66, 1, 0, 118, 66, 67, 15, 86, 66, 115, -56, -70, 65, 60, -30, 0, 65, -85, 42, 103, 65, -27, -95, -3, 66, 6, 86, 95, 66, -108, 57, -119, 65, 33, -58, 100, 65, 78, 86, -79, 65, -44, 102, 13, 66, -110, -90, 2, 65, 47, -26, -59, 65, 78, 117, -68, 65, 125, -24, -33, 65, -87, -22, -119, 65, -38, 7, 85, 65, 73, -125, -84, 65, 77, 105, -2, 65, 100, -54, 127, 65, -117, 34, 27, 65, -58, 70, 58, 65, -76, 51, -33, 65, -33, -16, -87, 65, 43, -61, 27, 65, 61, 66, 106, 65, 104, 106, -105, 65, 106, 23, 37, 65, -125, -64, -17, 65, -83, 85, 26, 65, -74, 26, 70, 65, -74, -1, -36, 65, -66, -17, 93, 65, -45, -98, -30, 65, -46, -23, 103, 65, 58, -71, -28, 65, 76, 104, -128, 65, 92, -22, -125, 65, 121, -63, -7, 65, 126, 33, 75, 65, -127, 81, -81, 65, -121, -27, -20, 65, -83, 41, 0, 65, -87, -99, -13, 65, -73, -4, 116, 65, -70, 102, 121, 65, -57, -93, -63, 65, -42, 77, -24, 65, 58, -55, -93, 65, 59, 87, -55, 65, 95, 54, -36, 65, 68, -35, 2, 65, 104, -99, 52, 65, -124, 69, -3, 65, 120, 55, -28, 65, -125, 18, -111, 65, 118, -94, -96, 65, -100, 32, -13, 65, -99, -100, -40, 65, -82, -79, 26, 65, -83, -79, 113, 65, -79, 41, -60, 65, -66, -90, -32, 65, -75, 23, -102, 65, -66, -107, 113, 65, -67, -127, -31, 65, -59, 56, 87, 65, -42, -109, 80, 65, 48, -18, 83, 65, 59, 126, 84, 65, 52, -82, -12, 65, 79, -10, -29, 65, 88, -42, 55, 65, 80, 86, 41, 65, 106, 43, 102, 65, 113, -38, -51, 65, 116, -126, 37, 65, -121, 20, -21, 65, -125, -65, 66, 65, -119, 58, 23, 65, -103, -23, 24, 65, -95, -12, -78, 65, -81, 127, 84, 65, -73, 13, -22, 65, -50, -114, -14, 65, -61, -118, -9, 65, -42, 36, 81, 65, -44, -122, 119, 65, 52, -19, -128, 65, 87, 98, -120, 65, 75, 76, -59, 65, 93, 122, -87, 65, 83, 126, 98, 65, 98, -124, -24, 65, -118, 94, 80, 65, -128, -113, 91, 65, -113, 104, 50, 65, -113, 43, -97, 65, -107, 34, -70, 65, -99, 19, -32, 65, -90, 74, -102, 65, -86, 122, -22, 65, -87, 76, -64, 65, -73, 17, 40, 65, -66, -57, -68, 65, -59, -47, 90, 65, -62, -95, -39, 65, -55, -84, -54, 65, 108, -19, -23, 65, -121, -90, -103, 65, -109, 53, 127, 65, -127, 13, -18, 65, -106, -110, 75, 65, -92, -43, 126, 65, -90, 86, -59, 65, -96, 4, 122, 65, -86, 89, -55, 65, -67, -26, -69, 65, -59, 46, -68, 65, -61, 104, 4, 65, -53, 49, -73, 65, -43, -93, 108, 65, 94, 111, -73, 65, 96, 71, -66, 65, -115, -63, -51, 65, -118, 31, -115, 65, -112, 71, -75, 65, -110, -14, 70, 65, -99, -67, 27, 65, -97, -9, -69, 65, -89, 106, 13, 65, -96, -69, -109, 65, -70, 21, -103, 65, -69, 48, -48, 65, -56, 77, -121, 65, -54, -97, -113, 65, 85, 2, -105, 65, 86, 95, 23, 65, -116, 84, 23, 65, -116, -48, -106, 65, -114, 21, 49, 65, -105, -1, -46, 65, -102, 13, -80, 65, -100, 101, 18, 65, -100, 6, -115, 65, -94, 3, 14, 65, -67, 63, 122, 65, -59, -104, -107, 65, -49, -38, -94, 65, -53, -48, 50, 65, -43, -99, -59, 65, -118, -65, 14, 65, -118, 37, 64, 65, -108, -28, 38, 65, -101, -40, 97, 65, -99, -64, -18, 65, -95, -30, -121, 65, -62, -120, 14, 65, -63, -113, 49, 65, -51, -36, -6, 65, -53, 99, 1, 65, -46, 115, -28, 65, -105, -6, 91, 65, -90, 125, 83 ], "precision": "FLOAT_32", "root": 0, "canonicalAndNotALeaf": true, "size": 168, "leftIndex": [ 0, 1, 168, 268333471, 1071507055, 399188998, 359164161, 210636755, 526 ], "rightIndex": [ 0, 1, 168, 495872351, 582995687, 797085236, 911633473, 420109332, 1041 ], "nodeFreeIndexPointer": 0, "leafFreeIndexPointer": 0, "partialTreeStateEnabled": true }, "boundingBoxCacheFraction": 0.0, "partialTreeState": true, "seed": 5119692285027370374, "id": 0, "dimensions": 8, "staticSeed": 0, "weight": 0.0, "hasAuxiliaryData": false }, { "version": "3.0", "root": 0, "maxSize": 256, "outputAfter": 32, "storeSequenceIndexesEnabled": false, "centerOfMassEnabled": false, "nodeStoreState": { "version": "3.0", "capacity": 255, "compressed": true, "cutDimension": [ 0, 7, 163, 182614597, 1005896320, 641439601, 62824495, 573699302, 616799464, 830539293, 187812197, 994754499, 914424517, 835516816, 88108534, 1067369174, 24477568, 179175470, 1067010705, 126 ], "cutValueData": [ 65, 73, -113, 59, 65, 69, -64, -52, 66, -124, 1, 117, 65, 62, -21, -89, 65, 54, 118, -70, 66, 78, 27, -47, 66, -106, 105, -105, 65, 51, 109, 41, 65, 52, -43, 60, 65, 69, 6, -64, 65, -126, 32, -15, 66, 70, 64, -107, 65, 47, -23, 74, 65, 32, 54, -30, 65, 55, 85, 21, 65, 60, 51, 56, 65, 127, 62, -70, 65, -45, 10, 19, 66, 120, 118, 94, 65, 40, -63, 99, 65, 51, 46, -121, 65, 58, 21, -35, 65, 99, 91, 4, 65, 118, 20, 87, 65, -81, 111, -60, 66, 26, -70, 37, 66, 109, 5, 92, 65, 47, -25, -42, 65, 41, 55, -83, 65, 34, -102, -127, 65, 41, -52, 70, 65, 84, 6, -9, 65, 103, -98, -78, 65, 114, 59, -3, 65, -127, 68, 79, 65, -119, 30, 5, 65, -70, 92, -59, 65, -33, 123, -120, 66, 49, 78, -82, 65, 37, -98, -64, 65, 42, 92, 29, 65, 93, 38, 100, 65, 111, 110, -121, 65, 120, -72, -25, 65, 125, 99, 59, 65, -114, 41, 37, 65, -120, -101, -67, 65, -77, -92, -57, 65, -51, 60, 13, 65, -35, 88, -69, 65, -41, 31, 115, 65, 43, -58, -113, 65, 71, 53, -49, 65, 83, 80, 127, 65, 120, 15, -67, 65, -126, -58, -99, 65, -105, 33, 83, 65, -85, 10, 76, 65, -76, 21, -87, 65, -49, -24, 37, 65, -52, 58, -104, 65, -37, -34, 111, 65, -64, 32, 32, 65, 81, -105, -109, 65, 91, -86, 50, 65, 120, 120, -21, 65, 116, 64, 75, 65, -127, -83, -107, 65, -118, 116, -98, 65, -95, -6, -71, 65, -108, 50, -64, 65, -87, -110, -24, 65, -75, 69, -105, 65, -70, 67, -10, 65, -72, 79, 106, 65, -52, 67, 31, 65, -56, -13, -112, 65, -43, 29, -32, 65, -43, 92, 59, 65, 68, 120, -43, 65, 88, -90, 50, 65, 104, 41, -94, 65, -120, 59, -108, 65, -125, 58, -6, 65, -125, 72, 124, 65, -123, -46, -105, 65, -108, -97, -6, 65, -109, 54, -124, 65, -91, 41, 75, 65, -93, 12, 73, 65, -86, -47, 13, 65, -79, -19, -95, 65, -74, 113, -9, 65, -68, 126, 66, 65, -78, -95, 34, 65, -64, 121, -85, 65, -47, -61, 107, 65, -48, 85, 96, 65, -47, 63, -121, 65, -33, -16, 112, 65, 80, 0, -38, 65, 82, 24, -2, 65, 98, 109, -118, 65, -125, -86, -123, 65, -112, 56, 122, 65, -111, 93, -14, 65, -110, -109, 14, 65, -108, 117, -28, 65, -95, 66, -30, 65, -92, 48, -24, 65, -79, 97, -65, 65, -79, -27, -127, 65, -79, -52, 89, 65, -60, -119, 93, 65, -54, 98, 88, 65, -55, 105, 69, 65, -37, -80, 87, 65, -50, 114, 16, 65, -48, 86, 10, 65, -48, 54, -63, 65, 87, -52, 88, 65, 83, 97, 59, 65, -121, 67, 126, 65, -116, -99, 90, 65, -105, -33, 2, 65, -102, -34, -35, 65, -117, -74, 111, 65, -111, -73, 56, 65, -104, -15, -124, 65, -91, 5, -127, 65, -85, 77, -100, 65, -68, 74, -98, 65, -57, 86, -28, 65, -55, 25, 48, 65, 80, -80, -94, 65, -113, -79, 83, 65, -106, -72, -37, 65, -108, 74, -66, 65, -101, 86, -16, 65, -98, -38, 8, 65, -83, -85, -63, 65, -61, 88, 114, 65, -55, 125, 83, 65, -115, 2, 52, 65, -99, -108, -116, 65, -101, 82, 56, 65, -101, 65, -87, 65, -91, 108, -120, 65, -83, 116, 55, 65, -69, 78, 21, 65, -62, 5, -31, 65, -114, 118, -17, 65, -102, -111, 11, 65, -99, -86, 117, 65, -98, 87, -32, 65, -97, -22, -8, 65, -92, 18, -101, 65, -95, 47, 6, 65, -51, -97, -69, 65, -49, -10, -55, 65, -106, -17, 52, 65, -107, -47, -15, 65, -99, -105, 122 ], "precision": "FLOAT_32", "root": 0, "canonicalAndNotALeaf": true, "size": 163, "leftIndex": [ 0, 1, 163, 199169471, 790535410, 874938075, 17942506, 250415385, 5 ], "rightIndex": [ 0, 1, 163, 601570735, 1070022886, 480140497, 42427688, 236720912, 35 ], "nodeFreeIndexPointer": 0, "leafFreeIndexPointer": 0, "partialTreeStateEnabled": true }, "boundingBoxCacheFraction": 0.0, "partialTreeState": true, "seed": -2774403119332030375, "id": 0, "dimensions": 8, "staticSeed": 0, "weight": 0.0, "hasAuxiliaryData": false }, { "version": "3.0", "root": 0, "maxSize": 256, "outputAfter": 32, "storeSequenceIndexesEnabled": false, "centerOfMassEnabled": false, "nodeStoreState": { "version": "3.0", "capacity": 255, "compressed": true, "cutDimension": [ 0, 7, 171, 749729686, 905164191, 894559559, 867085271, 189446049, 190084643, 502374915, 237662142, 335850525, 346322672, 6044538, 406751648, 321352130, 454487303, 114875193, 400523056, 670842561, 6 ], "cutValueData": [ 65, -102, 63, -74, 65, 92, -2, -53, 66, 59, 13, -111, 65, 47, -10, 51, 65, -106, 14, -69, 66, 9, -58, -128, 66, -120, 53, -40, 65, 36, -118, -7, 65, 57, 118, 120, 65, 126, -91, 68, 65, -98, 64, -33, 65, -43, -91, -16, 66, 20, 43, 65, 66, 48, -65, 68, 66, -100, 99, -57, 65, 40, -55, -93, 65, 41, -60, -125, 65, 60, -91, -47, 65, 62, -100, 91, 65, 115, -73, 102, 65, -125, -68, 51, 65, -95, 101, 113, 65, -99, -2, -14, 65, -43, -19, 126, 66, 9, 6, 53, 66, 28, 28, -41, 66, 81, 27, 50, 65, 48, 49, 110, 65, 63, -17, -98, 65, 80, 69, 3, 65, 82, 21, 118, 65, 99, -15, -96, 65, 117, 24, 118, 65, -119, 8, 119, 65, -103, 71, -15, 65, -99, -41, 73, 65, -83, -75, -85, 65, -39, -9, -121, 66, 38, 10, -100, 66, -124, 107, 86, 65, 77, -94, 73, 65, 84, -111, -94, 65, 91, -71, -87, 65, 96, 32, -8, 65, -125, -31, 75, 65, -126, -85, -76, 65, -106, -93, -90, 65, -119, 93, 112, 65, -98, 107, 36, 65, -93, 32, -101, 65, -112, -34, 8, 65, -66, 6, -76, 65, -36, 32, -70, 65, -29, -97, -53, 66, 112, -122, -45, 66, 126, 21, 59, 65, 66, 11, -91, 65, 74, -72, -94, 65, 90, -90, 101, 65, 120, 25, 83, 65, 126, -70, 45, 65, 120, 94, -73, 65, -125, -98, 32, 65, -124, 86, -20, 65, -99, 79, 116, 65, -107, 30, -116, 65, -99, 19, 120, 65, -95, 62, 17, 65, -65, 17, 49, 65, -36, -54, 108, 65, 75, 12, 18, 65, 57, 70, 13, 65, 69, 0, -56, 65, 103, 14, -110, 65, 107, 85, -94, 65, 113, 2, 38, 65, 121, -128, 27, 65, -122, -31, -13, 65, -114, -6, 18, 65, -114, 19, 71, 65, -111, -16, 114, 65, -101, -21, 87, 65, -118, 96, -100, 65, -90, 64, 48, 65, -71, -118, 29, 65, -59, -100, -100, 65, 60, 123, 70, 65, 77, 58, -104, 65, 106, 92, 26, 65, 103, -36, 69, 65, -124, -98, -18, 65, -116, -35, -81, 65, -113, -87, 117, 65, -119, -72, 85, 65, -113, -64, 57, 65, -104, 50, 50, 65, -114, -5, 52, 65, -110, -121, 59, 65, -91, 126, 99, 65, -87, -117, 58, 65, -74, 105, -56, 65, -77, -118, 115, 65, -49, 3, 43, 65, -62, -4, 53, 65, 59, -50, -53, 65, 55, 3, -7, 65, 75, -67, -87, 65, -116, 106, 100, 65, -105, 62, 104, 65, -107, -28, 111, 65, -111, 88, 23, 65, -105, -90, -41, 65, -112, -8, -32, 65, -110, -87, 3, 65, -97, 56, -37, 65, -92, -68, -43, 65, -79, -95, 72, 65, -75, 55, 35, 65, -76, -127, 43, 65, -72, 120, 89, 65, -70, 127, -97, 65, -53, 17, -86, 65, -49, -94, 85, 65, 70, -22, 68, 65, 83, -32, 126, 65, -113, 68, 2, 65, -110, -8, -25, 65, -105, 24, -95, 65, -106, -41, -10, 65, -100, 75, -33, 65, -103, -73, -115, 65, -82, 59, -76, 65, -91, -35, -31, 65, -85, 73, 94, 65, -84, -118, 9, 65, -69, 46, 79, 65, -80, 5, 108, 65, -72, 90, -110, 65, -60, 45, -98, 65, -55, -10, -10, 65, -45, -50, 58, 65, 71, -83, 57, 65, -84, 86, -28, 65, -84, -53, 119, 65, -76, -66, 52, 65, -75, -50, -68, 65, -80, -29, 36, 65, -61, 121, -45, 65, -66, 6, -48, 65, -51, -36, -82, 65, -62, -123, 24, 65, -82, -82, 23, 65, -81, 56, -125, 65, -87, -39, -119, 65, -67, -29, -119, 65, -69, 34, -92, 65, -79, 74, -59, 65, -64, 24, -107, 65, -61, 67, 6, 65, -56, 6, 61, 65, -95, -87, -89, 65, -84, -87, 118, 65, -80, -94, 48, 65, -68, -35, 3, 65, -61, -91, 24, 65, -50, 55, 57, 65, -94, -94, 96, 65, -80, 126, 16, 65, -60, 54, 35, 65, -59, -12, 71, 65, -77, -27, -33 ], "precision": "FLOAT_32", "root": 0, "canonicalAndNotALeaf": true, "size": 171, "leftIndex": [ 0, 1, 171, 540680191, 748799705, 132006965, 522729396, 601530382, 16530 ], "rightIndex": [ 0, 1, 171, 654195711, 406040317, 264851933, 421113236, 352530437, 142985 ], "nodeFreeIndexPointer": 0, "leafFreeIndexPointer": 0, "partialTreeStateEnabled": true }, "boundingBoxCacheFraction": 0.0, "partialTreeState": true, "seed": -8863940819723135715, "id": 0, "dimensions": 8, "staticSeed": 0, "weight": 0.0, "hasAuxiliaryData": false }, { "version": "3.0", "root": 0, "maxSize": 256, "outputAfter": 32, "storeSequenceIndexesEnabled": false, "centerOfMassEnabled": false, "nodeStoreState": { "version": "3.0", "capacity": 255, "compressed": true, "cutDimension": [ 0, 7, 151, 497364640, 762175472, 124580849, 404278442, 862744592, 619203502, 545280122, 672428672, 1015808255, 604209191, 869523384, 1041079814, 842308777, 538422268, 535798055, 6 ], "cutValueData": [ 66, 79, 61, 53, 65, 41, -118, -39, 66, -104, -64, -73, 65, 45, 126, -9, 65, -48, -119, -110, 66, -124, -30, -17, 65, 32, -36, -12, 65, 34, 11, 30, 65, -64, -107, -44, 65, -39, 71, -119, 65, 45, 100, -14, 65, 40, 78, 5, 65, 118, -99, 57, 65, -15, 49, 110, 65, -36, 28, -84, 66, 2, 78, 36, 65, 61, 99, -8, 65, -102, 18, -5, 65, -49, -17, -117, 65, -43, -25, 19, 65, -42, -23, -127, 65, -37, 27, 108, 66, 26, -11, -20, 65, 41, 82, -73, 65, 64, 15, -118, 65, -123, -54, 86, 65, -80, -61, 56, 65, -57, 114, 74, 65, -47, 102, 92, 65, -39, -87, -106, 65, 45, -79, 80, 65, 42, -63, -60, 65, 74, -106, 88, 65, 116, 85, -82, 65, -122, -91, 28, 65, -115, -128, -102, 65, -99, -37, 21, 65, -59, 13, -12, 65, -68, -127, 26, 65, -53, -86, 77, 65, -54, -28, -55, 65, -53, -67, 13, 65, -44, -102, 100, 65, 48, 89, 97, 65, 47, -55, 78, 65, 54, 59, -119, 65, 113, -24, -85, 65, 121, 28, 14, 65, -126, -15, -89, 65, -112, -53, -59, 65, -106, 79, -69, 65, -103, 103, 37, 65, -81, -74, -21, 65, -73, -40, 56, 65, -60, -96, -4, 65, -49, -88, 22, 65, -55, -55, 89, 65, -54, -93, 85, 65, -42, -124, -106, 65, 55, 115, -69, 65, 62, 96, -120, 65, 56, -56, -7, 65, 86, -66, 27, 65, 105, -25, 111, 65, 112, -40, 89, 65, -117, 80, 114, 65, -100, -46, 115, 65, -106, -59, -48, 65, -92, -40, -76, 65, -96, 30, -35, 65, -95, -1, -92, 65, -67, 6, 127, 65, -76, -2, -28, 65, -64, 94, 113, 65, -58, -101, 109, 65, -64, 15, -61, 65, -43, -64, -62, 65, 41, -10, 50, 65, 61, 120, 72, 65, 108, -6, -87, 65, -123, -2, -71, 65, -106, 106, 86, 65, -105, -124, 71, 65, -102, -110, 82, 65, -96, -46, -2, 65, -88, 86, -12, 65, -81, -103, -23, 65, -79, 87, -81, 65, -72, 68, -114, 65, -55, -86, 126, 65, -58, 31, -47, 65, -50, 43, -50, 65, -54, 19, -81, 65, -53, -128, -115, 65, 61, 110, -37, 65, 88, 14, 122, 65, 90, 109, -90, 65, 117, -103, 105, 65, -113, -92, -101, 65, -119, 98, 71, 65, -107, 125, -45, 65, -106, -66, 42, 65, -95, 36, -79, 65, -102, -34, 30, 65, -93, 37, 120, 65, -89, 73, -72, 65, -88, 10, 30, 65, -80, 100, 15, 65, -72, 87, 36, 65, -64, -77, -5, 65, 54, 62, 27, 65, 73, -96, 25, 65, 76, -84, 27, 65, 87, 113, 90, 65, 101, -88, -43, 65, -123, 105, -62, 65, -117, 42, 72, 65, -112, 24, 7, 65, -102, 15, 84, 65, -99, -118, 9, 65, -101, -13, -91, 65, -94, 95, 114, 65, -93, 63, 36, 65, -91, -47, -56, 65, -81, 70, -73, 65, -84, 60, 80, 65, -70, 16, -78, 65, 75, -128, -55, 65, 91, 118, -119, 65, 84, -19, -42, 65, 109, -24, -56, 65, -121, 92, 124, 65, -122, 121, 77, 65, -116, -127, 16, 65, -108, -15, 71, 65, -102, 44, -28, 65, -103, -32, 4, 65, -98, -40, 105, 65, -103, 108, 102, 65, -83, 121, 78, 65, -83, 40, 113, 65, 80, 86, -67, 65, -127, 115, 94, 65, -124, 64, 26, 65, -117, -38, -35, 65, -119, 51, 53, 65, -112, -31, -48, 65, -95, -77, 89, 65, -96, 104, 107, 65, -86, 12, 41, 65, -124, 0, 47 ], "precision": "FLOAT_32", "root": 0, "canonicalAndNotALeaf": true, "size": 151, "leftIndex": [ 0, 1, 151, 1065874399, 920356606, 401156708, 499816368, 706818, 0 ], "rightIndex": [ 0, 1, 151, 529519387, 49466738, 395294356, 440448608, 4331569, 0 ], "nodeFreeIndexPointer": 0, "leafFreeIndexPointer": 0, "partialTreeStateEnabled": true }, "boundingBoxCacheFraction": 0.0, "partialTreeState": true, "seed": 857711434791583806, "id": 0, "dimensions": 8, "staticSeed": 0, "weight": 0.0, "hasAuxiliaryData": false }, { "version": "3.0", "root": 0, "maxSize": 256, "outputAfter": 32, "storeSequenceIndexesEnabled": false, "centerOfMassEnabled": false, "nodeStoreState": { "version": "3.0", "capacity": 255, "compressed": true, "cutDimension": [ 0, 7, 155, 992889064, 310923725, 403928644, 282503518, 990434604, 941095609, 1059012664, 869265428, 414776841, 199683952, 33893286, 567145559, 516346987, 747111319, 548360191, 31606 ], "cutValueData": [ 66, 52, -32, -12, 65, 120, 3, -63, 66, -100, 68, -63, 65, 116, -38, -16, 65, -49, 67, -2, 66, 102, 44, -5, 65, 78, 54, -102, 65, -99, -49, -94, 66, 4, 0, 113, 66, -106, 2, 89, 65, 71, 75, -62, 65, 87, 58, 62, 65, -88, -65, 7, 65, -77, -41, -72, 65, -21, 22, 38, 66, 92, -100, 127, 65, 76, -104, -64, 65, 69, 49, 93, 65, 79, -102, 46, 65, 93, -4, 5, 65, -97, 120, -89, 65, -102, -79, -44, 65, -77, -105, 25, 65, -40, -33, -82, 65, 49, -29, -85, 65, 90, 18, -86, 65, 64, -127, -78, 65, 102, 86, 35, 65, 125, 70, -12, 65, -104, -3, -38, 65, -103, -86, 38, 65, -60, 114, 93, 65, -36, -38, -61, 65, 49, -107, 11, 65, 41, 126, -66, 65, 83, 20, 41, 65, 84, 127, -69, 65, 93, -127, -90, 65, -114, -7, 17, 65, -99, 49, -16, 65, -99, 124, 82, 65, -95, -109, -84, 65, -68, 2, 54, 65, -49, 17, 112, 65, -41, 34, 118, 65, 59, 105, -123, 65, 55, -9, 55, 65, 82, 21, 54, 65, 82, -105, 44, 65, 105, -126, -9, 65, 109, 88, 0, 65, 91, 35, -9, 65, 115, -56, -5, 65, -116, -39, -85, 65, -90, -43, 47, 65, -106, -50, -14, 65, -102, 55, 41, 65, -93, 87, 110, 65, -83, 50, -69, 65, -86, 7, -82, 65, -61, -108, -124, 65, -57, -75, -54, 65, -54, -116, 64, 65, -47, 78, 16, 65, 43, -17, 121, 65, 45, -52, 117, 65, 74, -9, 66, 65, 64, -35, 7, 65, 91, -111, -63, 65, 112, 58, -90, 65, -114, -64, 91, 65, -111, -87, -77, 65, -96, -102, -42, 65, -92, -8, -1, 65, -89, 58, 107, 65, -104, -68, 68, 65, -88, -50, -96, 65, -93, -124, -12, 65, -73, 16, -101, 65, -71, -106, -51, 65, -63, 89, 83, 65, -52, -121, -103, 65, -52, -50, 66, 65, -43, -98, 67, 65, -47, -53, 121, 65, -45, 55, 14, 65, -38, 40, -28, 65, 33, 17, 29, 65, 39, 28, 28, 65, 58, -6, -97, 65, 68, -60, -37, 65, 73, -31, -72, 65, -105, 23, -30, 65, -123, 69, 89, 65, -106, 54, 105, 65, -109, -47, -2, 65, -94, 88, -3, 65, -97, 54, -27, 65, -91, 92, -9, 65, -90, -49, -109, 65, -77, -42, -98, 65, -80, 10, -23, 65, -76, -16, 77, 65, -69, -121, -5, 65, -68, -21, 28, 65, -56, 88, 119, 65, -41, -50, -72, 65, -55, 109, -8, 65, 33, -4, -87, 65, 58, -96, 109, 65, 95, 62, -111, 65, -120, -119, -93, 65, -119, 96, -60, 65, -115, -43, 112, 65, -118, -122, -76, 65, -108, -98, -33, 65, -106, 91, -23, 65, -102, 98, 117, 65, -94, -112, 76, 65, -96, -107, 79, 65, -91, -23, -64, 65, -88, 105, 26, 65, -84, 43, -88, 65, -84, 49, -111, 65, -69, -122, 35, 65, -80, 44, 92, 65, -65, -89, -116, 65, -59, 51, -65, 65, -54, -121, -16, 65, -46, -78, 34, 65, 68, 26, 80, 65, -124, 4, 63, 65, -105, 111, -40, 65, -119, 51, 8, 65, -106, 44, 46, 65, -111, 61, 20, 65, -94, 127, -109, 65, -89, 54, 100, 65, -81, -15, -98, 65, -73, 41, 125, 65, -78, 91, 111, 65, -71, 66, 70, 65, -54, 45, 47, 65, -39, -52, -19, 65, -127, 37, -73, 65, -127, 37, -77, 65, -85, 113, 96, 65, -126, 95, -94, 65, -123, 54, -15, 65, -82, 127, -54, 65, -120, -52, 19, 65, -119, 115, 118, 65, -85, 111, 106, 65, -120, 92, -102, 65, -78, -54, 0 ], "precision": "FLOAT_32", "root": 0, "canonicalAndNotALeaf": true, "size": 155, "leftIndex": [ 0, 1, 155, 160792543, 478870959, 193547359, 11607869, 285739649, 0 ], "rightIndex": [ 0, 1, 155, 1031548147, 1019338739, 1026751, 421681978, 905972042, 5 ], "nodeFreeIndexPointer": 0, "leafFreeIndexPointer": 0, "partialTreeStateEnabled": true }, "boundingBoxCacheFraction": 0.0, "partialTreeState": true, "seed": -1187640641902384027, "id": 0, "dimensions": 8, "staticSeed": 0, "weight": 0.0, "hasAuxiliaryData": false }, { "version": "3.0", "root": 0, "maxSize": 256, "outputAfter": 32, "storeSequenceIndexesEnabled": false, "centerOfMassEnabled": false, "nodeStoreState": { "version": "3.0", "capacity": 255, "compressed": true, "cutDimension": [ 0, 7, 169, 862668693, 348672342, 947549056, 615596819, 974769662, 472870819, 235691778, 443611719, 264015823, 525086843, 1054878591, 486402587, 1065681383, 312544744, 1006618614, 322850877, 18019673 ], "cutValueData": [ 66, 64, -110, 82, 65, -72, -74, 0, 66, -103, 92, 83, 65, 100, 9, 79, 65, -67, 57, -26, 66, 127, -54, -79, 65, 83, 3, 99, 65, 125, 25, 17, 65, -72, -67, 4, 66, 47, -53, 5, 66, 95, 96, 24, 66, 113, 3, 39, 65, 64, -59, 104, 65, 89, 98, 3, 65, 114, 31, 119, 65, -128, 120, -113, 65, -22, 126, 26, 66, 99, -4, 72, 66, 118, -78, 27, 66, -126, 82, -24, 65, 61, -85, -116, 65, 80, -33, -18, 65, 108, 119, 57, 65, 103, 54, -22, 65, 116, 60, 7, 65, 115, 28, 25, 65, -118, 78, -92, 65, -120, -87, -10, 65, -49, -32, -113, 66, -121, 20, -16, 66, -118, -115, 62, 65, 41, -49, 95, 65, 68, 83, -102, 65, 69, 99, 50, 65, 111, -84, 94, 65, 121, 5, -121, 65, -121, 55, 98, 65, -117, -122, -23, 65, -120, 13, 93, 65, -91, 45, -81, 65, -51, 121, 3, 65, -56, 2, 86, 65, 44, -99, 114, 65, 71, 47, -69, 65, 58, 79, 24, 65, 79, 115, 121, 65, 88, 32, -74, 65, 107, -115, 62, 65, 120, 63, 59, 65, -120, -7, 88, 65, -125, -77, -108, 65, -118, 56, -64, 65, -83, 64, -77, 65, -54, -110, 92, 65, -43, -15, 21, 65, -56, 96, -127, 65, -39, 112, 85, 65, 40, 9, -84, 65, 37, 1, -88, 65, 62, -59, 107, 65, 58, -9, -126, 65, 71, -84, -19, 65, 77, 61, 5, 65, 75, -85, -78, 65, 92, -12, 11, 65, 112, -68, -26, 65, -125, 119, 5, 65, 119, 46, -115, 65, 112, -26, 68, 65, -120, -66, 30, 65, -124, -33, -71, 65, -91, -41, 10, 65, -84, -75, 91, 65, -68, 1, -125, 65, -64, -115, -123, 65, -57, 84, -34, 65, -52, 94, 53, 65, -56, 110, 97, 65, -45, 66, -33, 65, 39, 113, 119, 65, 51, -111, 33, 65, 51, -38, -111, 65, 78, -86, 43, 65, 57, -125, -12, 65, 67, 92, -95, 65, 119, -93, 107, 65, -127, -72, -9, 65, -124, -63, -118, 65, -92, 33, 123, 65, -95, 16, -118, 65, -90, 34, -53, 65, -92, 85, 86, 65, -88, 21, 6, 65, -79, -25, 11, 65, -62, -54, 37, 65, -60, 6, 92, 65, -57, 54, -94, 65, -53, -45, 24, 65, -62, -39, -68, 65, -43, -52, -101, 65, -33, -84, -110, 65, 55, -36, -88, 65, 45, 42, -7, 65, 55, 80, 51, 65, 66, 74, 28, 65, -120, -19, 30, 65, -114, -13, 110, 65, -97, 62, 48, 65, -104, -21, -4, 65, -90, 4, 9, 65, -86, -125, -41, 65, -85, -41, -97, 65, -76, -22, -49, 65, -65, 106, 117, 65, -64, 17, 86, 65, -58, 68, 102, 65, -60, 46, 106, 65, -41, -107, -82, 65, -34, -123, 114, 65, 37, -6, 86, 65, 36, 26, -11, 65, -122, -35, -128, 65, -127, -92, 34, 65, -105, -75, -43, 65, -98, 125, 108, 65, -89, 65, 29, 65, -93, 52, -76, 65, -82, -11, -86, 65, -74, 58, 71, 65, -79, 120, -4, 65, -69, -63, 63, 65, -33, -107, 21, 65, -114, -11, -27, 65, -100, -121, -23, 65, -111, -69, 44, 65, -93, -85, 26, 65, -85, -76, 97, 65, -81, -92, -62, 65, -85, 83, -16, 65, -78, 68, -27, 65, -78, 95, -41, 65, -80, 24, 35, 65, -107, -65, 107, 65, -110, 92, -57, 65, -100, -2, -8, 65, -86, 26, 81, 65, -88, 17, 6, 65, -87, -116, 92, 65, -77, 110, -28, 65, -68, 122, 42, 65, -73, 101, -34, 65, -73, -45, -117, 65, -116, -110, 80, 65, -119, -29, -115, 65, -100, -12, -7, 65, -73, 85, 23, 65, -66, -111, 5, 65, -75, -113, 118, 65, -80, -122, 53, 65, -114, -53, -77, 65, -118, -21, 19, 65, -100, 71, -48, 65, -76, 51, -73, 65, -73, 42, 68, 65, -109, 113, 42, 65, -110, -76, 33, 65, -105, -85, -114, 65, -98, 1, 8, 65, -98, -75, -27 ], "precision": "FLOAT_32", "root": 0, "canonicalAndNotALeaf": true, "size": 169, "leftIndex": [ 0, 1, 169, 498727679, 670695278, 404159026, 272864308, 811181400, 51517 ], "rightIndex": [ 0, 1, 169, 471399675, 821911114, 681474082, 8262807, 282646216, 163840 ], "nodeFreeIndexPointer": 0, "leafFreeIndexPointer": 0, "partialTreeStateEnabled": true }, "boundingBoxCacheFraction": 0.0, "partialTreeState": true, "seed": -5063750875311126499, "id": 0, "dimensions": 8, "staticSeed": 0, "weight": 0.0, "hasAuxiliaryData": false }, { "version": "3.0", "root": 0, "maxSize": 256, "outputAfter": 32, "storeSequenceIndexesEnabled": false, "centerOfMassEnabled": false, "nodeStoreState": { "version": "3.0", "capacity": 255, "compressed": true, "cutDimension": [ 0, 7, 160, 130409753, 789048668, 716434689, 657797928, 855753852, 283770276, 417137177, 311753669, 687644860, 1069727695, 1000767199, 788220748, 969933861, 266687793, 685977667, 52226489 ], "cutValueData": [ 66, 118, 80, 108, 66, 75, 83, 39, 66, -104, 35, 1, 65, 105, -121, -29, 66, 112, 74, 49, 66, -107, -79, -127, 65, 36, 101, 49, 66, 53, -94, -15, 66, 109, -102, -61, 66, -124, 81, -7, 65, 41, -31, -81, 65, 87, 27, 17, 65, -30, -25, -93, 65, 39, 88, 62, 65, 51, -83, 91, 65, 81, -64, 41, 65, -33, 76, -54, 66, 3, 36, 66, 65, 38, -95, 59, 65, 39, -107, 32, 65, 57, -126, -93, 65, 91, -9, -53, 65, 90, 21, -102, 65, 101, 51, 39, 65, 108, -112, -42, 65, -35, 125, -13, 65, 41, 27, -16, 65, 61, -43, -83, 65, 60, 0, -6, 65, 64, -97, -11, 65, 106, -76, 51, 65, 96, 36, -26, 65, 106, -51, -63, 65, -123, 81, -105, 65, 36, 98, 40, 65, 57, 73, -106, 65, 67, -127, 87, 65, 86, -58, 90, 65, 119, 118, -88, 65, -113, 92, -87, 65, -89, 10, -91, 65, 36, -45, 8, 65, 72, 83, 25, 65, 69, 57, -99, 65, 101, -98, 65, 65, 103, 110, -2, 65, 120, -15, 28, 65, -95, 57, -112, 65, -78, -33, 53, 65, 77, 35, 5, 65, 71, 88, 116, 65, 75, 20, -43, 65, 95, -48, 87, 65, 121, 52, -48, 65, 112, -45, -64, 65, 119, 58, 112, 65, -113, 86, -123, 65, -101, 106, 66, 65, -86, -78, -29, 65, -65, -70, -94, 65, 50, 108, 118, 65, 68, 34, 112, 65, 64, 100, -97, 65, 77, -5, 58, 65, 109, 112, -66, 65, 120, 77, 61, 65, -121, 60, 102, 65, -128, 16, -25, 65, -100, -79, -69, 65, -89, -85, 113, 65, -84, -96, 53, 65, -75, -40, 122, 65, -71, -53, 47, 65, -56, -61, 72, 65, 85, 15, 74, 65, 108, 104, -99, 65, 124, 5, -43, 65, 126, 86, -90, 65, -126, -103, 118, 65, -121, -123, -25, 65, -120, 64, 21, 65, -102, 77, -46, 65, -99, 121, -27, 65, -85, -22, 24, 65, -93, 13, -13, 65, -85, 112, 108, 65, -78, -74, 2, 65, -81, -54, 57, 65, -77, 122, 37, 65, -71, -17, 99, 65, -65, -41, 30, 65, -49, -53, 14, 65, 117, -11, 87, 65, 114, 12, -70, 65, -122, 51, 118, 65, 126, 30, 46, 65, -114, -32, -84, 65, -118, -61, -124, 65, -106, -46, -73, 65, -124, -45, 22, 65, -94, 125, -111, 65, -101, -94, -7, 65, -93, -53, 84, 65, -94, 92, 48, 65, -81, -107, 70, 65, -78, -14, 118, 65, -75, -25, -42, 65, -73, 0, -122, 65, -70, -46, 66, 65, -61, 49, 39, 65, -41, 36, -95, 65, -114, 1, 44, 65, -119, -95, 81, 65, -114, -71, 19, 65, -104, -52, -95, 65, -94, 89, 39, 65, -98, -97, 50, 65, -84, -10, 111, 65, -85, -85, 42, 65, -77, 15, 122, 65, -71, -113, 103, 65, -59, -25, -124, 65, -70, 100, -102, 65, -43, 95, 47, 65, -45, 102, 93, 65, -116, 122, -99, 65, -117, 72, 75, 65, -106, 18, -98, 65, -109, 113, -65, 65, -97, 69, -114, 65, -93, 86, 109, 65, -84, -75, -113, 65, -84, 91, 34, 65, -59, 24, -109, 65, -61, 25, -55, 65, -53, -77, 12, 65, -41, -16, 71, 65, -37, 48, -78, 65, -115, 74, -18, 65, -107, 49, 37, 65, -110, 113, 4, 65, -96, -11, 38, 65, -92, -20, -34, 65, -57, 82, -62, 65, -58, -45, -41, 65, -52, 72, -17, 65, -43, -74, 34, 65, -44, -23, -18, 65, -110, -23, 26, 65, -105, 50, 77, 65, -64, -29, -2, 65, -48, 34, 96, 65, -116, 76, 74, 65, -107, 88, 33, 65, -51, -32, -84, 65, -105, 89, 69, 65, -50, -107, -54, 65, -117, -127, -50, 65, -112, -69, -60, 65, -109, 50, -124 ], "precision": "FLOAT_32", "root": 0, "canonicalAndNotALeaf": true, "size": 160, "leftIndex": [ 0, 1, 160, 229768447, 911161160, 87965140, 431539329, 604481934, 42 ], "rightIndex": [ 0, 1, 160, 833747019, 1063761258, 494550992, 211562115, 277096596, 176 ], "nodeFreeIndexPointer": 0, "leafFreeIndexPointer": 0, "partialTreeStateEnabled": true }, "boundingBoxCacheFraction": 0.0, "partialTreeState": true, "seed": 5940388363466496244, "id": 0, "dimensions": 8, "staticSeed": 0, "weight": 0.0, "hasAuxiliaryData": false }, { "version": "3.0", "root": 0, "maxSize": 256, "outputAfter": 32, "storeSequenceIndexesEnabled": false, "centerOfMassEnabled": false, "nodeStoreState": { "version": "3.0", "capacity": 255, "compressed": true, "cutDimension": [ 0, 7, 161, 522850868, 527587558, 559853552, 492279565, 546472376, 400180637, 223472585, 457316181, 1063615559, 931380922, 1072195636, 192614000, 436342535, 323529216, 977169129, 100020840, 6 ], "cutValueData": [ 66, 36, 28, -120, 65, -27, -54, -92, 66, 79, 98, -75, 65, -42, 23, -108, 65, -22, -67, -8, 66, 79, 73, 114, 66, 112, -119, -53, 65, -104, -92, -120, 65, -48, -34, 95, 65, -29, 122, 68, 66, 37, -75, 93, 66, -114, -34, 32, 65, 117, 80, 127, 65, -60, -1, 121, 65, -46, 27, -103, 65, -33, 75, -93, 65, 64, -55, 123, 65, -104, 87, -116, 65, -91, -36, 92, 65, -60, 105, -43, 65, -42, -80, 12, 65, 77, 118, 7, 65, 108, -107, -40, 65, -123, -115, 65, 65, -95, -48, 87, 65, -82, 31, -11, 65, -52, 3, 24, 65, -57, 110, -99, 65, -38, -4, 49, 65, 48, 32, -66, 65, 67, -56, 49, 65, 79, 57, -65, 65, 109, 62, 123, 65, -121, 93, -117, 65, -111, 85, 59, 65, -102, 68, 126, 65, -96, -46, -115, 65, -85, -32, -94, 65, -79, 91, 59, 65, -42, -44, -8, 65, -36, -59, 2, 65, 45, 69, 66, 65, 51, 23, -69, 65, 86, -63, 106, 65, 80, 60, -38, 65, 113, 20, -123, 65, 114, -7, -60, 65, -121, -7, -33, 65, 126, -110, -23, 65, -105, -105, 84, 65, -100, 115, -18, 65, -89, 105, 67, 65, -96, 58, -127, 65, -96, -55, -51, 65, -81, 96, -122, 65, -79, 1, -14, 65, -70, 42, -54, 65, -52, 19, 83, 65, -44, 63, 3, 65, 36, 46, 48, 65, 40, 64, -53, 65, 49, -112, 21, 65, 82, 127, 106, 65, 72, 18, -96, 65, 103, -73, -85, 65, 99, -58, -119, 65, 118, -14, -23, 65, -126, -32, -62, 65, -124, -35, 47, 65, 119, 122, 70, 65, -100, 28, -78, 65, -111, 42, 72, 65, -106, -26, 66, 65, -99, 118, -110, 65, -95, -20, 26, 65, -91, -56, 11, 65, -94, -126, 86, 65, -81, 33, -4, 65, -75, 4, 55, 65, -71, 9, 46, 65, -60, -42, 24, 65, -57, -62, 106, 65, 57, -42, 68, 65, 38, 5, -19, 65, 51, 65, -95, 65, 51, 30, 53, 65, 74, -106, 45, 65, 88, -123, 55, 65, 80, 51, -103, 65, 123, 94, 125, 65, 103, 22, -55, 65, 119, 67, -98, 65, -113, 97, -53, 65, -114, -49, 117, 65, -108, 126, -95, 65, -105, 91, -116, 65, -95, 94, 45, 65, -86, -74, 22, 65, -81, -114, 5, 65, -79, 41, -47, 65, -67, -27, 62, 65, -62, 56, -115, 65, -51, 77, -5, 65, -51, -105, 12, 65, -42, -99, 41, 65, 61, -26, 61, 65, 50, -81, -1, 65, 70, 73, -42, 65, 48, 47, -78, 65, 54, -63, 50, 65, 100, 116, 77, 65, 114, 39, 16, 65, 119, 84, -77, 65, -114, -125, 32, 65, -117, 69, -68, 65, -117, 17, -26, 65, -112, 25, -126, 65, -83, -39, 60, 65, -80, 60, -26, 65, -71, 91, 81, 65, -59, 18, -82, 65, -68, 126, 37, 65, -51, -52, -108, 65, -46, 111, 4, 65, -51, -67, 126, 65, 32, 30, 45, 65, 59, -107, 100, 65, 66, 20, -97, 65, 73, 106, 5, 65, 92, -94, -71, 65, -128, 98, -39, 65, -128, 126, 92, 65, -125, -12, -27, 65, -116, -87, 122, 65, -107, -51, 107, 65, -79, -67, 114, 65, -80, 127, 123, 65, -70, -8, -93, 65, -51, 76, -22, 65, -49, 116, 57, 65, -50, -37, 47, 65, 37, 3, -127, 65, 71, 86, 103, 65, 125, 67, 114, 65, -113, -119, 84, 65, -114, -98, -1, 65, -116, -97, -59, 65, -88, 29, -11, 65, -76, -96, -92, 65, -67, 48, 31, 65, -77, -108, 59, 65, -49, -21, -34, 65, -50, 53, -5, 65, -121, 99, -65, 65, -120, 102, -58, 65, -115, 16, 82, 65, -107, -52, -94, 65, -73, 103, 58, 65, -116, -75, -14, 65, -109, -120, 100, 65, -112, -108, 117 ], "precision": "FLOAT_32", "root": 0, "canonicalAndNotALeaf": true, "size": 161, "leftIndex": [ 0, 1, 161, 871346591, 236760060, 359279779, 816957486, 84272152, 576 ], "rightIndex": [ 0, 1, 161, 738013663, 750779358, 104736815, 567040902, 101032232, 33 ], "nodeFreeIndexPointer": 0, "leafFreeIndexPointer": 0, "partialTreeStateEnabled": true }, "boundingBoxCacheFraction": 0.0, "partialTreeState": true, "seed": -5606530679278446991, "id": 0, "dimensions": 8, "staticSeed": 0, "weight": 0.0, "hasAuxiliaryData": false }, { "version": "3.0", "root": 0, "maxSize": 256, "outputAfter": 32, "storeSequenceIndexesEnabled": false, "centerOfMassEnabled": false, "nodeStoreState": { "version": "3.0", "capacity": 255, "compressed": true, "cutDimension": [ 0, 7, 162, 617182353, 210141677, 997884226, 715561017, 570685881, 137754876, 265363614, 266829177, 52065312, 775122586, 551574685, 662981972, 423618675, 115319879, 372939092, 955234747, 0 ], "cutValueData": [ 66, 82, -12, 8, 66, 0, 8, 44, 66, 106, -41, -8, 65, -52, 1, -38, 66, 55, -120, 27, 66, 92, 27, 42, 65, 35, 69, 91, 65, -50, 80, 94, 66, 71, 114, -116, 65, 37, -4, -119, 65, -68, -30, 104, 65, -53, 56, 81, 65, -42, 52, 16, 65, 37, -43, 63, 65, 116, 46, 18, 65, -64, 79, -97, 65, -39, -118, -82, 65, -36, -77, 116, 65, 76, -37, 54, 65, -71, 35, -103, 65, -71, 102, 37, 65, -51, -128, 77, 65, -46, 71, -128, 65, -41, 55, -94, 65, -46, -72, -95, 65, 50, -89, -61, 65, -105, 53, 104, 65, -127, -75, -111, 65, -65, -104, -73, 65, -58, 118, 90, 65, -68, -39, 78, 65, -41, 73, 102, 65, -48, 53, -28, 65, -44, 121, 40, 65, -36, 10, -114, 65, -38, -96, 12, 65, 55, -59, 98, 65, 79, 116, 45, 65, 69, -65, -4, 65, 117, 97, 42, 65, -86, 45, 67, 65, -77, -11, 98, 65, -60, 44, 106, 65, -61, -80, -123, 65, -52, 125, -28, 65, -56, 38, -95, 65, -53, 125, -91, 65, -35, 47, 118, 65, -35, -55, 49, 65, 42, -110, -97, 65, 55, -43, -55, 65, 58, -14, -12, 65, 107, -40, 29, 65, 121, -93, -52, 65, 121, -58, -28, 65, -116, -35, -93, 65, -76, 115, -3, 65, -50, 112, -25, 65, -57, -19, -36, 65, -45, 121, 98, 65, 47, 78, 9, 65, 57, -9, 11, 65, 51, 61, 35, 65, 70, -115, -98, 65, 108, -86, -107, 65, -126, 26, -32, 65, -116, 118, -110, 65, -101, -13, 55, 65, -84, 45, 89, 65, -75, 99, 106, 65, -57, 122, 23, 65, -54, 82, -27, 65, 46, 49, -82, 65, 33, -88, -120, 65, 70, -101, -116, 65, 73, 48, 10, 65, 70, 110, 36, 65, 84, -79, 25, 65, 103, -46, 59, 65, -128, -66, -100, 65, -123, 13, -63, 65, -104, -50, -17, 65, -107, 57, -49, 65, -83, -11, 67, 65, -76, -54, 98, 65, -78, -92, 79, 65, -78, -4, -126, 65, -71, 92, 83, 65, -63, -2, -96, 65, 55, -66, -45, 65, 53, 75, 25, 65, 57, 9, 89, 65, 72, 40, -67, 65, 83, 115, 56, 65, 89, -67, -81, 65, 105, 43, -43, 65, 110, 70, 99, 65, 111, 48, 69, 65, -128, 107, 112, 65, -113, 90, 68, 65, -103, 51, 48, 65, -97, -88, 119, 65, -84, -71, 27, 65, -94, 43, -11, 65, -84, 26, -127, 65, -73, -45, -97, 65, -81, -95, 110, 65, -75, -12, -123, 65, -60, -99, 95, 65, -62, 54, -9, 65, 94, 72, 80, 65, 82, -38, -8, 65, 107, 45, 107, 65, 122, 117, -32, 65, -128, 44, -112, 65, -125, 39, -99, 65, -116, -56, 26, 65, -98, -123, 27, 65, -78, -114, -128, 65, -81, -53, -58, 65, -76, -15, 85, 65, 72, 0, -106, 65, 89, -111, 83, 65, 112, 55, 60, 65, -115, 34, 62, 65, -113, 55, 41, 65, -106, -16, 53, 65, -98, 30, -118, 65, -89, -89, -27, 65, -88, 32, -26, 65, 66, 30, 7, 65, 109, 20, -13, 65, -118, 32, 111, 65, -118, -73, 114, 65, -105, -58, 91, 65, -109, -45, 45, 65, -83, -2, 2, 65, -89, 79, -119, 65, -109, 79, -126, 65, -109, -92, 96, 65, -91, -46, 115, 65, -90, 78, 47, 65, -94, 4, -48, 65, -88, 127, -121, 65, -107, 104, 105, 65, -111, 85, 8, 65, -109, -112, 100, 65, -103, -80, -46, 65, -85, 25, 14, 65, -90, 42, -13, 65, -82, 42, -56, 65, -107, 85, -22, 65, -117, -57, -26, 65, -107, 5, 77, 65, -98, -79, -36, 65, -97, -101, 13, 65, -90, 64, 21, 65, -119, -9, 14, 65, -113, 26, -49, 65, -98, 115, 115, 65, -95, -76, -128, 65, -102, -22, -10 ], "precision": "FLOAT_32", "root": 0, "canonicalAndNotALeaf": true, "size": 162, "leftIndex": [ 0, 1, 162, 520083151, 240129758, 31975375, 638603568, 156713440, 1034 ], "rightIndex": [ 0, 1, 162, 194958555, 392734565, 518920156, 245437376, 732905866, 40 ], "nodeFreeIndexPointer": 0, "leafFreeIndexPointer": 0, "partialTreeStateEnabled": true }, "boundingBoxCacheFraction": 0.0, "partialTreeState": true, "seed": -6048817666391967237, "id": 0, "dimensions": 8, "staticSeed": 0, "weight": 0.0, "hasAuxiliaryData": false }, { "version": "3.0", "root": 0, "maxSize": 256, "outputAfter": 32, "storeSequenceIndexesEnabled": false, "centerOfMassEnabled": false, "nodeStoreState": { "version": "3.0", "capacity": 255, "compressed": true, "cutDimension": [ 0, 7, 161, 637097553, 727030967, 781123065, 239819848, 1021133011, 1051414488, 60260399, 860547615, 941382511, 701943872, 648180016, 605208074, 960876759, 192442351, 378271223, 1059150239, 6 ], "cutValueData": [ 66, -127, -113, 64, 66, 81, -76, -28, 66, -102, -119, 109, 66, 10, -35, -128, 66, 123, -42, 4, 66, -119, -88, -5, 66, -87, -4, -55, 65, -12, -37, -93, 66, 63, -56, 123, 66, 111, 101, -79, 66, -124, 21, 10, 66, -84, 23, -121, 65, 126, 13, -20, 66, 9, -50, -102, 66, 20, 122, 28, 66, 59, 102, 39, 65, 53, 15, 81, 65, -37, 50, 18, 65, 46, -90, 75, 65, 66, 81, 1, 65, -86, 81, -23, 65, -40, -125, 67, 65, 59, -76, -81, 65, 32, -86, 116, 65, 62, -92, 24, 65, 119, 105, 122, 65, -96, -7, 25, 65, -63, 94, -75, 65, 44, -121, -52, 65, 43, -55, 29, 65, 55, 45, 108, 65, 66, -94, 23, 65, 63, -71, -31, 65, 68, -13, 69, 65, -126, 46, -43, 65, -116, 14, 104, 65, -85, -119, 124, 65, -73, -88, 98, 65, -53, 54, 49, 65, 37, 110, -127, 65, 61, -89, -45, 65, 66, -9, -105, 65, 73, -42, -99, 65, 65, -46, 96, 65, 126, -8, 45, 65, -127, -24, 62, 65, -113, -13, 90, 65, -68, 114, 107, 65, -74, -111, 98, 65, -63, 124, -55, 65, -55, 5, -104, 65, -43, 96, 78, 65, 56, 96, -38, 65, 33, -36, -109, 65, 49, -96, 23, 65, 77, 103, -104, 65, 66, -115, 68, 65, 92, -85, -2, 65, -122, 101, 89, 65, 117, -116, -53, 65, -114, 21, 7, 65, -118, 71, 60, 65, -84, 95, 72, 65, -75, 99, 122, 65, -80, 114, 33, 65, -57, -95, 26, 65, -54, 15, 20, 65, -43, 17, 4, 65, -38, -79, -100, 65, 46, 38, 81, 65, 77, -27, 82, 65, 71, -120, 46, 65, 90, -111, -24, 65, 100, -23, 103, 65, 98, 126, 13, 65, -124, -120, 79, 65, -119, 108, -15, 65, -122, 7, 61, 65, -104, -30, -64, 65, -86, 126, 38, 65, -80, 100, -85, 65, -81, -91, -9, 65, -70, 0, -85, 65, -73, -66, 70, 65, -58, -80, 34, 65, -57, -35, 85, 65, -58, 97, 72, 65, -49, -25, 49, 65, -43, 48, 62, 65, 75, 119, 95, 65, 82, -66, 123, 65, 111, -78, -76, 65, -126, 74, -12, 65, -115, -125, 47, 65, -116, -2, 98, 65, -103, -109, 85, 65, -98, -109, 81, 65, -95, 106, 112, 65, -89, -55, -50, 65, -84, -108, -77, 65, -82, -122, 95, 65, -65, -116, 70, 65, -74, -66, 25, 65, -64, 116, 104, 65, -50, 104, 116, 65, -52, 29, 23, 65, -57, -74, 89, 65, -41, -60, -71, 65, -45, -79, -82, 65, -47, 78, -89, 65, 101, -72, 33, 65, 103, -72, 11, 65, 121, -48, 84, 65, -128, 126, -103, 65, -122, -98, -94, 65, -123, -44, -61, 65, -119, 24, 85, 65, -115, 105, -32, 65, -102, 40, -83, 65, -102, 34, -98, 65, -91, -91, 23, 65, -91, -98, 115, 65, -84, -41, 93, 65, -86, -75, 30, 65, -75, -110, 33, 65, -80, -120, 81, 65, -69, -51, 72, 65, -58, -101, -13, 65, -60, 69, -125, 65, -42, 74, -9, 65, -42, 10, 45, 65, -46, -101, 67, 65, 87, 5, 101, 65, 123, -73, -40, 65, -125, -42, 103, 65, -126, 55, 90, 65, -127, 119, -36, 65, -114, 88, 21, 65, -109, -40, 111, 65, -91, 22, -41, 65, -86, -18, -40, 65, -65, -117, 45, 65, -65, -102, 13, 65, -43, -63, -64, 65, -48, -11, -63, 65, -124, -128, -18, 65, -113, -80, -70, 65, -105, -6, -14, 65, -111, -107, 52, 65, -89, -117, 13, 65, -79, -40, 4, 65, -66, 56, 66, 65, -45, -121, -115, 65, -128, -36, -47, 65, -111, 65, -23, 65, -98, 16, -123, 65, -108, 102, -5, 65, -106, -77, 41, 65, -111, 33, -57, 65, -99, -2, -78, 65, -111, 96, 5 ], "precision": "FLOAT_32", "root": 0, "canonicalAndNotALeaf": true, "size": 161, "leftIndex": [ 0, 1, 161, 266277279, 775861233, 450736639, 138556286, 187433024, 240 ], "rightIndex": [ 0, 1, 161, 262083039, 682747823, 480059450, 194799275, 270961737, 256 ], "nodeFreeIndexPointer": 0, "leafFreeIndexPointer": 0, "partialTreeStateEnabled": true }, "boundingBoxCacheFraction": 0.0, "partialTreeState": true, "seed": -264714557822501083, "id": 0, "dimensions": 8, "staticSeed": 0, "weight": 0.0, "hasAuxiliaryData": false }, { "version": "3.0", "root": 0, "maxSize": 256, "outputAfter": 32, "storeSequenceIndexesEnabled": false, "centerOfMassEnabled": false, "nodeStoreState": { "version": "3.0", "capacity": 255, "compressed": true, "cutDimension": [ 0, 7, 157, 849630854, 923894704, 47943257, 750616923, 322763974, 1022413955, 105053119, 1017673610, 699559799, 930866354, 737611215, 793217473, 118289421, 73547865, 117234736, 625023 ], "cutValueData": [ 66, 36, 53, 114, 65, 106, -74, -49, 66, -111, 98, -70, 65, 40, 16, 92, 65, 91, 76, -106, 66, 56, 44, -127, 66, -111, 77, 73, 65, 47, -116, -67, 65, 74, 41, -106, 65, 97, -20, 27, 66, 45, 80, 85, 66, -126, -113, -119, 66, -93, -101, 54, 65, 47, -24, 84, 65, 36, 121, -72, 65, 97, 54, -90, 65, -58, 16, -111, 65, 34, 46, 20, 65, 47, 52, -75, 65, 82, -29, 16, 65, 110, 58, -115, 65, -78, 108, -94, 65, -26, -92, -98, 65, 33, -32, -92, 65, 51, -90, -104, 65, 54, -10, -100, 65, 74, 58, 48, 65, 103, -54, -94, 65, 100, 105, 126, 65, 120, -62, 123, 65, -61, 120, 84, 65, -62, -55, 12, 65, 42, 52, 26, 65, 51, -14, -89, 65, 51, 107, -14, 65, 69, 93, 59, 65, 66, 118, 101, 65, 105, -4, -4, 65, -102, -52, -116, 65, -107, -119, 3, 65, -57, 123, 88, 65, -51, -103, 64, 65, 52, 12, -1, 65, 74, 49, -76, 65, 92, -18, -64, 65, 79, -50, 109, 65, 96, -63, -8, 65, -117, -14, 77, 65, -82, 89, 46, 65, -70, 33, 19, 65, -54, 13, 72, 65, -36, 112, -87, 65, 52, -125, -27, 65, -127, -2, 7, 65, -114, 115, 56, 65, -111, 99, 100, 65, -87, 105, -75, 65, -73, 42, 47, 65, -74, -17, 86, 65, -70, 73, 88, 65, -17, -76, 82, 65, -42, 31, -52, 65, -39, -120, -33, 65, -37, 31, -55, 65, 66, 124, -35, 65, -99, 107, -21, 65, -127, 74, 54, 65, -113, -72, 120, 65, -116, 74, -104, 65, -104, 100, -119, 65, -108, 117, 44, 65, -80, -48, 64, 65, -76, -6, 4, 65, -65, -42, 20, 65, -73, -65, 3, 65, -64, 73, 69, 65, -61, 103, 121, 65, -44, -104, 92, 65, -33, 55, -71, 65, -37, 42, 68, 65, -119, -102, -55, 65, 112, 100, -99, 65, -126, 34, -32, 65, -127, -96, -43, 65, -110, -19, -72, 65, -111, -120, -42, 65, -108, 58, 98, 65, -100, 17, 57, 65, -83, -87, -16, 65, -70, 38, -50, 65, -62, -62, 4, 65, -58, 60, 23, 65, -41, 74, -121, 65, 122, -52, 27, 65, -124, 22, 2, 65, 114, 42, -49, 65, -125, 120, 1, 65, -119, -39, -58, 65, -109, 21, 125, 65, -120, -93, 101, 65, -103, -38, -68, 65, -81, -12, 36, 65, -84, -120, -5, 65, -74, 45, 72, 65, -80, 68, -40, 65, -55, 111, -53, 65, -55, -12, -107, 65, -43, -104, -44, 65, 118, -111, -20, 65, 122, -63, -99, 65, -125, -53, 123, 65, -119, 112, -71, 65, -114, 76, 86, 65, -120, 42, -5, 65, -108, 14, 37, 65, -111, -64, 11, 65, -107, 113, 26, 65, -100, 4, -60, 65, -91, -30, -42, 65, -84, 127, -37, 65, -77, -74, -115, 65, -76, 101, 103, 65, -58, 14, -125, 65, -51, 113, 23, 65, -47, -65, 72, 65, -123, 80, -15, 65, -121, -17, 58, 65, -120, 42, 49, 65, -114, -12, 52, 65, -101, -46, 6, 65, -99, -8, 102, 65, -99, -99, 21, 65, -91, -32, -9, 65, -80, -124, -59, 65, -56, 108, 1, 65, -121, -109, -38, 65, -100, -38, 93, 65, -101, -54, 119, 65, -103, -53, 73, 65, -90, 84, -95, 65, -82, 5, 88, 65, -68, 49, -26, 65, -72, 71, -48, 65, -103, -112, 118, 65, -95, 55, 98, 65, -98, -72, 13, 65, -96, 122, 110, 65, -93, -63, -17, 65, -87, -63, 79, 65, -103, 57, 27, 65, -88, -83, 10, 65, -85, -46, 59, 65, -83, 39, -46, 65, -93, 122, 120, 65, -92, -54, 83, 65, -96, -58, -109, 65, -91, 99, 102 ], "precision": "FLOAT_32", "root": 0, "canonicalAndNotALeaf": true, "size": 157, "leftIndex": [ 0, 1, 157, 645898671, 796798737, 726937445, 188824932, 404241444, 5 ], "rightIndex": [ 0, 1, 157, 791528319, 1002375770, 954303814, 169192694, 528495618, 40 ], "nodeFreeIndexPointer": 0, "leafFreeIndexPointer": 0, "partialTreeStateEnabled": true }, "boundingBoxCacheFraction": 0.0, "partialTreeState": true, "seed": -5733416242359448816, "id": 0, "dimensions": 8, "staticSeed": 0, "weight": 0.0, "hasAuxiliaryData": false }, { "version": "3.0", "root": 0, "maxSize": 256, "outputAfter": 32, "storeSequenceIndexesEnabled": false, "centerOfMassEnabled": false, "nodeStoreState": { "version": "3.0", "capacity": 255, "compressed": true, "cutDimension": [ 0, 7, 159, 565896663, 451510741, 796695071, 1003314144, 407139442, 488855626, 893114946, 17110251, 995033619, 782679017, 333291970, 1060853988, 884007451, 33972487, 864153532, 11931073 ], "cutValueData": [ 65, -96, 113, 100, 65, -101, -26, 11, 66, -120, 51, 93, 65, 59, 70, 13, 65, -102, -24, -75, 66, 3, -118, -106, 65, 37, -46, -58, 65, 101, 33, -63, 65, -87, 31, 11, 65, -71, -5, -18, 66, 124, 51, 44, 65, 43, -108, 14, 65, 63, 101, 72, 65, 62, 48, -103, 65, -128, 26, 67, 65, -90, 41, 0, 65, -87, -62, -56, 65, -84, 119, -114, 65, -72, 119, -18, 66, 75, 8, -121, 65, 38, 65, 14, 65, 32, -72, -91, 65, 37, -52, 113, 65, 49, 119, 115, 65, 59, 11, 2, 65, 108, 12, -58, 65, -118, 70, 79, 65, -123, 19, -67, 65, -98, -78, 89, 65, -96, 20, 34, 65, -66, 100, 100, 65, -82, -65, -123, 65, -51, -75, -7, 65, -68, -12, 30, 66, 78, 34, -46, 66, 82, 102, 39, 65, 37, 127, 92, 65, 63, 40, 108, 65, 50, -106, 25, 65, 71, -95, -100, 65, 83, -127, -38, 65, -124, 5, 45, 65, -122, 20, -82, 65, -126, -2, -54, 65, -118, 24, 65, 65, -91, 41, -23, 65, -92, -31, -46, 65, -89, 38, 121, 65, -95, 51, 87, 65, -76, -87, -36, 65, -43, 48, -92, 66, 21, 37, 5, 66, 97, -35, 4, 65, 44, 14, 67, 65, 49, 124, -61, 65, 99, 118, 66, 65, 106, 90, 40, 65, -126, -69, -26, 65, -113, -4, -76, 65, -112, 33, -39, 65, -94, -21, -8, 65, -98, 109, -80, 65, -85, 89, 13, 65, -75, -55, 90, 65, -73, -65, -91, 65, -55, -49, 117, 65, -40, 82, -90, 66, 0, -2, 111, 65, 34, 78, 59, 65, 33, -26, -28, 65, 79, -41, -63, 65, 90, 125, 52, 65, 100, -8, 22, 65, 120, 110, 100, 65, -118, 72, -102, 65, -109, 43, 76, 65, -108, -54, -107, 65, -105, 72, -22, 65, -102, -79, -112, 65, -85, 119, 67, 65, -87, -91, -38, 65, -76, -58, -31, 65, -68, 4, -30, 65, -68, -111, -5, 65, -72, 18, 21, 65, -53, -27, -80, 65, -43, 105, -18, 65, -40, -29, 6, 65, 48, 126, -56, 65, 75, -53, 50, 65, 76, -119, 113, 65, 115, -62, 0, 65, 115, 36, 27, 65, -123, -94, -123, 65, -113, -99, -39, 65, -119, 35, 112, 65, -112, -93, -82, 65, -103, 7, 46, 65, -95, -1, 104, 65, -82, -57, -72, 65, -88, 57, -23, 65, -68, -11, -66, 65, -61, 75, -30, 65, -58, 22, -83, 65, -61, 35, -100, 65, -51, -45, 43, 65, -55, -124, -4, 65, -44, 68, 112, 65, -34, -18, 126, 65, 66, -98, -64, 65, 79, 37, -12, 65, 67, -53, 37, 65, 120, -44, 32, 65, 116, 16, 90, 65, 115, -94, -110, 65, -123, 7, 41, 65, -113, 60, -5, 65, -115, 59, 36, 65, -100, -54, -103, 65, -109, -62, 111, 65, -102, -32, 57, 65, -81, 65, 70, 65, -83, -93, -124, 65, -78, -45, 34, 65, -68, 107, -36, 65, -53, 102, 125, 65, -51, 40, -94, 65, -41, -15, -69, 65, -45, 57, -96, 65, 66, -41, -95, 65, 73, -76, -109, 65, -114, 120, 50, 65, -113, 82, 18, 65, -117, -27, 79, 65, -109, -107, -89, 65, -100, 22, 85, 65, -81, -68, -48, 65, -76, -103, 97, 65, -75, 124, -122, 65, -80, 64, -76, 65, -57, 79, -34, 65, -63, 7, -67, 65, -49, -125, 76, 65, -47, 48, -125, 65, 86, -101, 105, 65, -115, -17, -18, 65, -111, 25, 83, 65, -105, -15, -78, 65, -57, -35, -94, 65, -59, -39, -38, 65, -56, -127, 1, 65, 84, -67, 117, 65, -107, 74, -44, 65, -111, 88, -120, 65, -100, -26, -107, 65, -62, 105, 120, 65, -110, -120, 45, 65, -108, -1, -125, 65, -52, 127, -69 ], "precision": "FLOAT_32", "root": 0, "canonicalAndNotALeaf": true, "size": 159, "leftIndex": [ 0, 1, 159, 533659631, 934964307, 799237246, 672312548, 631259309, 48 ], "rightIndex": [ 0, 1, 159, 479132667, 890979370, 655779444, 169911471, 168834108, 8 ], "nodeFreeIndexPointer": 0, "leafFreeIndexPointer": 0, "partialTreeStateEnabled": true }, "boundingBoxCacheFraction": 0.0, "partialTreeState": true, "seed": 6721997949784890477, "id": 0, "dimensions": 8, "staticSeed": 0, "weight": 0.0, "hasAuxiliaryData": false } ], "executionContext": { "parallelExecutionEnabled": false, "threadPoolSize": 0 }, "saveTreeStateEnabled": true, "saveSamplerStateEnabled": true, "saveCoordinatorStateEnabled": true } ================================================ FILE: Java/examples/pom.xml ================================================ 4.0.0 software.amazon.randomcutforest randomcutforest-parent 4.4.0 randomcutforest-examples jar software.amazon.randomcutforest randomcutforest-core ${project.version} software.amazon.randomcutforest randomcutforest-parkservices ${project.version} software.amazon.randomcutforest randomcutforest-testutils ${project.version} com.fasterxml.jackson.core jackson-core 2.16.0 com.fasterxml.jackson.core jackson-databind 2.16.0 io.protostuff protostuff-core 1.8.0 io.protostuff protostuff-runtime 1.8.0 org.projectlombok lombok 1.18.30 provided maven-assembly-plugin 3.2.0 jar-with-dependencies com.amazon.randomcutforest.examples.Main ================================================ FILE: Java/examples/src/main/java/com/amazon/randomcutforest/examples/Example.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.examples; public interface Example { String command(); String description(); void run() throws Exception; } ================================================ FILE: Java/examples/src/main/java/com/amazon/randomcutforest/examples/Main.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.examples; import java.util.Map; import java.util.TreeMap; import com.amazon.randomcutforest.examples.dynamicinference.DynamicDensity; import com.amazon.randomcutforest.examples.dynamicinference.DynamicNearNeighbor; import com.amazon.randomcutforest.examples.serialization.JsonExample; import com.amazon.randomcutforest.examples.serialization.ProtostuffExample; public class Main { public static final String ARCHIVE_NAME = "randomcutforest-examples-1.0.jar"; public static void main(String[] args) throws Exception { new Main().run(args); } private final Map examples; private int maxCommandLength; public Main() { examples = new TreeMap<>(); maxCommandLength = 0; add(new JsonExample()); add(new ProtostuffExample()); add(new DynamicDensity()); add(new DynamicNearNeighbor()); } private void add(Example example) { examples.put(example.command(), example); if (maxCommandLength < example.command().length()) { maxCommandLength = example.command().length(); } } public void run(String[] args) throws Exception { if (args == null || args.length < 1 || args[0].equals("-h") || args[0].equals("--help")) { printUsage(); return; } String command = args[0]; if (!examples.containsKey(command)) { throw new IllegalArgumentException("No such example: " + command); } examples.get(command).run(); } public void printUsage() { System.out.printf("Usage: java -cp %s [example]%n", ARCHIVE_NAME); System.out.println("Examples:"); String formatString = String.format("\t %%%ds - %%s%%n", maxCommandLength); for (Example example : examples.values()) { System.out.printf(formatString, example.command(), example.description()); } } } ================================================ FILE: Java/examples/src/main/java/com/amazon/randomcutforest/examples/dynamicconfiguration/DynamicSampling.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.examples.dynamicconfiguration; import com.amazon.randomcutforest.RandomCutForest; import com.amazon.randomcutforest.config.Precision; import com.amazon.randomcutforest.examples.Example; import com.amazon.randomcutforest.state.RandomCutForestMapper; import com.amazon.randomcutforest.testutils.NormalMixtureTestData; public class DynamicSampling implements Example { public static void main(String[] args) throws Exception { new DynamicSampling().run(); } @Override public String command() { return "dynamic_sampling"; } @Override public String description() { return "check dynamic sampling"; } @Override public void run() throws Exception { // Create and populate a random cut forest int dimensions = 4; int numberOfTrees = 50; int sampleSize = 256; Precision precision = Precision.FLOAT_64; int dataSize = 4 * sampleSize; NormalMixtureTestData testData = new NormalMixtureTestData(); RandomCutForest forest = RandomCutForest.builder().compact(true).dimensions(dimensions).randomSeed(0) .numberOfTrees(numberOfTrees).sampleSize(sampleSize).precision(precision).build(); RandomCutForest forest2 = RandomCutForest.builder().compact(true).dimensions(dimensions).randomSeed(0) .numberOfTrees(numberOfTrees).sampleSize(sampleSize).precision(precision).build(); int first_anomalies = 0; int second_anomalies = 0; forest2.setTimeDecay(10 * forest2.getTimeDecay()); for (double[] point : testData.generateTestData(dataSize, dimensions)) { if (forest.getAnomalyScore(point) > 1.0) { first_anomalies++; } if (forest2.getAnomalyScore(point) > 1.0) { second_anomalies++; } forest.update(point); forest2.update(point); } System.out.println("Unusual scores: forest one " + first_anomalies + ", second one " + second_anomalies); // should be roughly equal first_anomalies = second_anomalies = 0; testData = new NormalMixtureTestData(-3, 40); for (double[] point : testData.generateTestData(dataSize, dimensions)) { if (forest.getAnomalyScore(point) > 1.0) { first_anomalies++; } if (forest2.getAnomalyScore(point) > 1.0) { second_anomalies++; } forest.update(point); forest2.update(point); } System.out.println("Unusual scores: forest one " + first_anomalies + ", second one " + second_anomalies); // forest2 should adapt faster first_anomalies = second_anomalies = 0; RandomCutForestMapper mapper = new RandomCutForestMapper(); mapper.setSaveExecutorContextEnabled(true); RandomCutForest copyForest = mapper.toModel(mapper.toState(forest)); copyForest.setTimeDecay(50 * forest.getTimeDecay()); // force an adjustment to catch up testData = new NormalMixtureTestData(-10, -40); int forced_change_anomalies = 0; for (double[] point : testData.generateTestData(dataSize, dimensions)) { if (forest.getAnomalyScore(point) > 1.0) { first_anomalies++; } if (forest2.getAnomalyScore(point) > 1.0) { second_anomalies++; } if (copyForest.getAnomalyScore(point) > 1.0) { forced_change_anomalies++; } copyForest.update(point); forest.update(point); forest2.update(point); } // both should show the similar rate of adjustment System.out.println("Unusual scores: forest one " + first_anomalies + ", second one " + second_anomalies + ", forced (first) " + forced_change_anomalies); } } ================================================ FILE: Java/examples/src/main/java/com/amazon/randomcutforest/examples/dynamicconfiguration/DynamicThroughput.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.examples.dynamicconfiguration; import java.time.Duration; import java.time.Instant; import com.amazon.randomcutforest.RandomCutForest; import com.amazon.randomcutforest.config.Precision; import com.amazon.randomcutforest.examples.Example; import com.amazon.randomcutforest.testutils.NormalMixtureTestData; public class DynamicThroughput implements Example { public static void main(String[] args) throws Exception { new DynamicThroughput().run(); } @Override public String command() { return "dynamic_caching"; } @Override public String description() { return "serialize a Random Cut Forest as a JSON string"; } @Override public void run() throws Exception { // Create and populate a random cut forest int dimensions = 4; int numberOfTrees = 50; int sampleSize = 256; Precision precision = Precision.FLOAT_64; int dataSize = 10 * sampleSize; NormalMixtureTestData testData = new NormalMixtureTestData(); // generate data once to eliminate caching issues testData.generateTestData(dataSize, dimensions); testData.generateTestData(sampleSize, dimensions); for (int i = 0; i < 5; i++) { RandomCutForest forest = RandomCutForest.builder().compact(true).dimensions(dimensions).randomSeed(0) .numberOfTrees(numberOfTrees).sampleSize(sampleSize).precision(precision).build(); RandomCutForest forest2 = RandomCutForest.builder().compact(true).dimensions(dimensions).randomSeed(0) .numberOfTrees(numberOfTrees).sampleSize(sampleSize).precision(precision).build(); forest2.setBoundingBoxCacheFraction(i * 0.25); int anomalies = 0; for (double[] point : testData.generateTestData(dataSize, dimensions)) { double score = forest.getAnomalyScore(point); double score2 = forest2.getAnomalyScore(point); if (Math.abs(score - score2) > 1e-10) { anomalies++; } forest.update(point); forest2.update(point); } Instant start = Instant.now(); for (double[] point : testData.generateTestData(sampleSize, dimensions)) { double score = forest.getAnomalyScore(point); double score2 = forest2.getAnomalyScore(point); if (Math.abs(score - score2) > 1e-10) { anomalies++; } forest.update(point); forest2.update(point); } Instant finish = Instant.now(); // first validate that this was a nontrivial test if (anomalies > 0) { throw new IllegalStateException("score mismatch"); } System.out.println("So far so good! Caching fraction = " + (i * 0.25) + ", Time =" + Duration.between(start, finish).toMillis() + " ms (note only one forest is changing)"); } } } ================================================ FILE: Java/examples/src/main/java/com/amazon/randomcutforest/examples/dynamicinference/ConditionalPredictive.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.examples.dynamicinference; import static com.amazon.randomcutforest.CommonUtils.checkArgument; import static java.lang.Math.min; import java.io.BufferedWriter; import java.io.FileWriter; import java.util.Arrays; import java.util.Random; import com.amazon.randomcutforest.PredictiveRandomCutForest; import com.amazon.randomcutforest.config.TransformMethod; import com.amazon.randomcutforest.examples.Example; import com.amazon.randomcutforest.returntypes.SampleSummary; import com.amazon.randomcutforest.summarization.Summarizer; public class ConditionalPredictive implements Example { public static void main(String[] args) throws Exception { new ConditionalPredictive().run(); } @Override public String command() { return "Conditional_predictive_example"; } @Override public String description() { return "An example that uses imputation for prediction"; } @Override public void run() throws Exception { // Create and populate a random cut forest int shingleSize = 1; int numberOfTrees = 100; int sampleSize = 256; int dataSize = 40 * sampleSize; // 5 dimensions, three are known and 4,5 th unknown (and stochastic) int baseDimensions = 5; PredictiveRandomCutForest forest = new PredictiveRandomCutForest.Builder<>().inputDimensions(baseDimensions) .randomSeed(0).numberOfTrees(numberOfTrees).shingleSize(shingleSize).sampleSize(sampleSize) .startNormalization(sampleSize / 2).transformMethod(TransformMethod.NORMALIZE).build(); long seed = 17; new Random().nextLong(); System.out.println("seed = " + seed); NormalDistribution normal = new NormalDistribution(new Random(seed)); Random random = new Random(seed + 10); String name = "predictive_example"; BufferedWriter file = new BufferedWriter(new FileWriter(name)); for (int i = 0; i < dataSize; i++) { float[] recordWithLabel = generateRecordKey(random); float[] record = Arrays.copyOf(recordWithLabel, 5); checkArgument(record[3] == 0, " should not be filled"); checkArgument(record[4] == 0, " should not be filled"); SampleSummary answer = forest.predict(record, 0, new int[] { 3, 4 }); fillInValues(record, random, normal); forest.update(record, 0); double tag = Double.MAX_VALUE; for (int y = 0; y < answer.summaryPoints.length; y++) { double t = Summarizer.L2distance(record, answer.summaryPoints[y]); tag = min(tag, t); } file.append(record[0] + " " + record[1] + " " + record[2] + " " + record[3] + " " + record[4] + " " + tag + " " + recordWithLabel[5] + "\n"); } file.close(); } float[] generateRecordKey(Random random) { float[] record = new float[6]; double firstToss = random.nextDouble(); double secondToss = random.nextDouble(); double thirdToss = random.nextDouble(); if (firstToss < 0.8) { record[0] = 1.0f; if (secondToss < 0.8) { record[1] = 19; record[5] = 0; } else { record[1] = 25; record[5] = 1; } record[2] = (float) thirdToss * 10; } else { record[0] = 0.0f; if (secondToss < 0.3) { record[1] = 16; record[2] = 12; record[5] = 2; } else { record[1] = 20; record[2] = 4; record[5] = 3; } } return record; } void fillInValues(float[] record, Random random, NormalDistribution normal) { if (record[0] < 0.5) { double next = random.nextDouble(); record[3] = (float) ((next < 0.5) ? normal.nextDouble(20, 5) : normal.nextDouble(40, 5)); record[4] = (float) normal.nextDouble(-30, 3); } else { if (record[1] < 20) { record[3] = (float) normal.nextDouble(30, 10); record[4] = (float) normal.nextDouble(-10, 3); } else { if (record[2] < 6) { double next = random.nextDouble(); record[3] = (float) ((next < 0.3) ? normal.nextDouble(20, 5) : normal.nextDouble(40, 3)); record[4] = (float) normal.nextDouble(-50, 1); } else { double next = random.nextDouble(); record[3] = (float) normal.nextDouble(30, 1); record[4] = (float) ((next < 0.7) ? normal.nextDouble(-10, 3) : normal.nextDouble(-30, 5)); } } } } static class NormalDistribution { private final Random rng; private final double[] buffer; private int index; NormalDistribution(Random rng) { this.rng = rng; buffer = new double[2]; index = 0; } double nextDouble() { if (index == 0) { // apply the Box-Muller transform to produce Normal variates double u = rng.nextDouble(); double v = rng.nextDouble(); double r = Math.sqrt(-2 * Math.log(u)); buffer[0] = r * Math.cos(2 * Math.PI * v); buffer[1] = r * Math.sin(2 * Math.PI * v); } double result = buffer[index]; index = (index + 1) % 2; return result; } double nextDouble(double mu, double sigma) { return mu + sigma * nextDouble(); } } } ================================================ FILE: Java/examples/src/main/java/com/amazon/randomcutforest/examples/dynamicinference/DynamicDensity.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.examples.dynamicinference; import static com.amazon.randomcutforest.testutils.ExampleDataSets.generate; import static com.amazon.randomcutforest.testutils.ExampleDataSets.rotateClockWise; import static java.lang.Math.PI; import java.io.BufferedWriter; import java.io.FileWriter; import com.amazon.randomcutforest.RandomCutForest; import com.amazon.randomcutforest.examples.Example; import com.amazon.randomcutforest.returntypes.DensityOutput; public class DynamicDensity implements Example { public static void main(String[] args) throws Exception { new DynamicDensity().run(); } @Override public String command() { return "dynamic_sampling"; } @Override public String description() { return "shows two potential use of dynamic density computations; estimating density as well " + "as its directional components"; } /** * plot the dynamic_density_example using any tool in gnuplot one can plot the * directions to higher density via do for [i=0:358:2] {plot * "dynamic_density_example" index (i+1) u 1:2:3:4 w vectors t ""} or the raw * density at the points via do for [i=0:358:2] {plot "dynamic_density_example" * index i w p pt 7 palette t ""} * * @throws Exception */ @Override public void run() throws Exception { int newDimensions = 2; long randomSeed = 123; RandomCutForest newForest = RandomCutForest.builder().numberOfTrees(100).sampleSize(256) .dimensions(newDimensions).randomSeed(randomSeed).timeDecay(1.0 / 800).centerOfMassEnabled(true) .build(); String name = "dynamic_density_example"; BufferedWriter file = new BufferedWriter(new FileWriter(name)); double[][] data = generate(1000); double[] queryPoint; for (int degree = 0; degree < 360; degree += 2) { for (double[] datum : data) { newForest.update(rotateClockWise(datum, -2 * PI * degree / 360)); } for (double[] datum : data) { queryPoint = rotateClockWise(datum, -2 * PI * degree / 360); DensityOutput density = newForest.getSimpleDensity(queryPoint); double value = density.getDensity(0.001, 2); file.append(queryPoint[0] + " " + queryPoint[1] + " " + value + "\n"); } file.append("\n"); file.append("\n"); for (double x = -0.95; x < 1; x += 0.1) { for (double y = -0.95; y < 1; y += 0.1) { DensityOutput density = newForest.getSimpleDensity(new double[] { x, y }); double aboveInY = density.getDirectionalDensity(0.001, 2).low[1]; double belowInY = density.getDirectionalDensity(0.001, 2).high[1]; double toTheLeft = density.getDirectionalDensity(0.001, 2).high[0]; double toTheRight = density.getDirectionalDensity(0.001, 2).low[0]; double len = Math.sqrt(aboveInY * aboveInY + belowInY * belowInY + toTheLeft * toTheLeft + toTheRight * toTheRight); file.append(x + " " + y + " " + ((toTheRight - toTheLeft) * 0.05 / len) + " " + ((aboveInY - belowInY) * 0.05 / len) + "\n"); } } file.append("\n"); file.append("\n"); } file.close(); } } ================================================ FILE: Java/examples/src/main/java/com/amazon/randomcutforest/examples/dynamicinference/DynamicNearNeighbor.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.examples.dynamicinference; import static com.amazon.randomcutforest.testutils.ExampleDataSets.generate; import static com.amazon.randomcutforest.testutils.ExampleDataSets.rotateClockWise; import static java.lang.Math.PI; import java.io.BufferedWriter; import java.io.FileWriter; import com.amazon.randomcutforest.RandomCutForest; import com.amazon.randomcutforest.examples.Example; public class DynamicNearNeighbor implements Example { public static void main(String[] args) throws Exception { new DynamicNearNeighbor().run(); } @Override public String command() { return "dynamic_near_neighbor"; } @Override public String description() { return "shows an example of dynamic near neighbor computation where both the data and query are " + "evolving in time"; } @Override public void run() throws Exception { int newDimensions = 2; long randomSeed = 123; RandomCutForest newForest = RandomCutForest.builder().numberOfTrees(100).sampleSize(256) .dimensions(newDimensions).randomSeed(randomSeed).timeDecay(1.0 / 800).centerOfMassEnabled(true) .storeSequenceIndexesEnabled(true).build(); String name = "dynamic_near_neighbor_example"; BufferedWriter file = new BufferedWriter(new FileWriter(name)); double[][] data = generate(1000); double[] queryPoint = new double[] { 0.5, 0.6 }; for (int degree = 0; degree < 360; degree += 2) { for (double[] datum : data) { double[] transformed = rotateClockWise(datum, -2 * PI * degree / 360); file.append(transformed[0] + " " + transformed[1] + "\n"); newForest.update(transformed); } file.append("\n"); file.append("\n"); double[] movingQuery = rotateClockWise(queryPoint, -3 * PI * degree / 360); float[] neighbor = newForest.getNearNeighborsInSample(movingQuery, 1).get(0).point; file.append(movingQuery[0] + " " + movingQuery[1] + " " + (neighbor[0] - movingQuery[0]) + " " + (neighbor[1] - movingQuery[1]) + "\n"); file.append("\n"); file.append("\n"); } } } ================================================ FILE: Java/examples/src/main/java/com/amazon/randomcutforest/examples/parkservices/ForecastWithLimits.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.examples.parkservices; import static java.lang.Math.max; import java.io.BufferedWriter; import java.io.FileWriter; import java.io.IOException; import com.amazon.randomcutforest.config.Precision; import com.amazon.randomcutforest.config.TransformMethod; import com.amazon.randomcutforest.examples.Example; import com.amazon.randomcutforest.parkservices.ForecastDescriptor; import com.amazon.randomcutforest.parkservices.RCFCaster; import com.amazon.randomcutforest.parkservices.config.Calibration; import com.amazon.randomcutforest.returntypes.DiVector; import com.amazon.randomcutforest.returntypes.RangeVector; import com.amazon.randomcutforest.testutils.MultiDimDataWithKey; import com.amazon.randomcutforest.testutils.ShingledMultiDimDataWithKeys; /** * The following example demonstrates the self calibration of RCFCast. Change * various parameters -- we recommend keeping baseDimension = 1 (for single * variate forecasting -- multivariate forecasting can be a complicated * endeavour. The value shifForViz is for easier visualization. * * Once the datafile calibration_example is produced consider plotting it. For * example to use gnuplot, to generate a quick and dirty gif file, consider * these commands * * set terminal gif transparent animate delay 5 * * set output "example.gif" * * do for [i = 0:3000:3] { (all the below in a single line) * * plot [0:1000][-100:500] "example" i 0 u 1:2 w l lc "black" t "Data (seen one * at a time)", "example" index (i+3) u 1:2 w l lw 2 lc "blue" t " Online * Forecast (future)", "example" i (i+2) u 1:(100*$8) w l lw 2 lc "magenta" t * "Interval Accuracy %", "example" index (i+3) u 1:($4-$2):($3-$4) w * filledcurves fc "blue" fs transparent solid 0.3 noborder t "Calibrated * uncertainty range (future)", "example" index (i+2) u 1:7:6 w filledcurves fc * "brown" fs transparent solid 0.5 noborder t "Observed error distribution * range (past)", "example" i (i+1) u 1:2 w impulses t "", 0 lc "gray" t "", 100 * lc "gray" t "", 80 lc "gray" t"" } * * Try different calibrations below to see the precision over the intervals. The * struggle of past and new data would become obvious; however the algorithm * would self-calibrate eventually. Changing the different values for * transformDecay() would correspond to different moving average analysis. * */ public class ForecastWithLimits implements Example { public static void main(String[] args) throws Exception { new ForecastWithLimits().run(); } @Override public String command() { return "Calibrated Forecast with Limits"; } @Override public String description() { return "Calibrated Forecast Example"; } @Override public void run() throws Exception { // Create and populate a random cut forest int numberOfTrees = 50; int sampleSize = 256; Precision precision = Precision.FLOAT_32; int dataSize = 2 * sampleSize; // Multi attribute forecasting is less understood than singe attribute // forecasting; // it is not always clear or easy to decide if multi-attribute forecasting is // reasonable // but the code below will run for multi-attribute case. int baseDimensions = 1; int forecastHorizon = 15; int shingleSize = 20; int outputAfter = 64; long seed = 2023L; double shiftForViz = 200; System.out.println("seed = " + seed); // change the last argument seed for a different run MultiDimDataWithKey dataWithKeys = ShingledMultiDimDataWithKeys.getMultiDimData(dataSize, 50, 50, 5, seed, baseDimensions, true); int dimensions = baseDimensions * shingleSize; // change this line to try other transforms; but the default is NORMALIZE // uncomment the transformMethod() below TransformMethod transformMethod = TransformMethod.NORMALIZE; RCFCaster caster = RCFCaster.builder().dimensions(dimensions).randomSeed(seed + 1).numberOfTrees(numberOfTrees) .shingleSize(shingleSize).sampleSize(sampleSize).internalShinglingEnabled(true).precision(precision) .anomalyRate(0.01).outputAfter(outputAfter).calibration(Calibration.MINIMAL) // the following affects the moving average in many of the transformations // the 0.02 corresponds to a half life of 1/0.02 = 50 observations // this is different from the timeDecay() of RCF; however it is a similar // concept .transformDecay(0.02).forecastHorizon(forecastHorizon).lowerLimit(new float[baseDimensions]) // zero in // every // dimension .initialAcceptFraction(0.125).build(); String name = "example"; BufferedWriter file = new BufferedWriter(new FileWriter(name)); for (int j = 0; j < dataWithKeys.data.length; j++) { file.append(j + " "); for (int k = 0; k < baseDimensions; k++) { dataWithKeys.data[j][k] = max(0, dataWithKeys.data[j][k]); file.append(dataWithKeys.data[j][k] + " "); } file.append("\n"); } file.append("\n"); file.append("\n"); for (int j = 0; j < dataWithKeys.data.length; j++) { ForecastDescriptor result = caster.process(dataWithKeys.data[j], 0L); printResult(file, result, j, baseDimensions); } file.close(); } void printResult(BufferedWriter file, ForecastDescriptor result, int current, int inputLength) throws IOException { RangeVector forecast = result.getTimedForecast().rangeVector; float[] errorP50 = result.getObservedErrorDistribution().values; float[] upperError = result.getObservedErrorDistribution().upper; float[] lowerError = result.getObservedErrorDistribution().lower; DiVector rmse = result.getErrorRMSE(); float[] mean = result.getErrorMean(); float[] intervalPrecision = result.getIntervalPrecision(); file.append(current + " " + 1000 + "\n"); file.append("\n"); file.append("\n"); // block corresponding to the past; print the errors for (int i = forecast.values.length / inputLength - 1; i >= 0; i--) { file.append((current - i) + " "); for (int j = 0; j < inputLength; j++) { int k = i * inputLength + j; file.append(mean[k] + " " + rmse.high[k] + " " + rmse.low[k] + " " + errorP50[k] + " " + upperError[k] + " " + lowerError[k] + " " + intervalPrecision[k] + " "); } file.append("\n"); } file.append("\n"); file.append("\n"); // block corresponding to the future; the projections and the projected errors for (int i = 0; i < forecast.values.length / inputLength; i++) { file.append((current + i) + " "); for (int j = 0; j < inputLength; j++) { int k = i * inputLength + j; file.append(forecast.values[k] + " " + forecast.upper[k] + " " + forecast.lower[k] + " "); } file.append("\n"); } file.append("\n"); file.append("\n"); } } ================================================ FILE: Java/examples/src/main/java/com/amazon/randomcutforest/examples/parkservices/LowNoisePeriodic.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.examples.parkservices; import java.util.Arrays; import java.util.Random; import com.amazon.randomcutforest.config.ForestMode; import com.amazon.randomcutforest.config.TransformMethod; import com.amazon.randomcutforest.examples.Example; import com.amazon.randomcutforest.parkservices.AnomalyDescriptor; import com.amazon.randomcutforest.parkservices.ThresholdedRandomCutForest; public class LowNoisePeriodic implements Example { public static void main(String[] args) throws Exception { new LowNoisePeriodic().run(); } @Override public String command() { return "Thresholded_Multi_Dim_example with low noise"; } @Override public String description() { return "Thresholded Multi Dimensional Example with Low Noise"; } @Override public void run() throws Exception { // Create and populate a random cut forest int shingleSize = 8; int numberOfTrees = 50; int sampleSize = 256; int dataSize = 100000; int initialSegment = 100; double[] reference = new double[] { 1.0f, 3.0f, 5.0f, 7.0f, 9.0f, 11.0f, 9.5f, 8.5f, 7.5f, 6.5f, 6.0f, 6.5f, 7.0f, 7.5f, 9.5f, 11.0f, 12.5f, 10.5f, 8.5f, 7.0f, 5.0f, 3.0f, 2.0f, 1.0f }; // the noise should leave suffient gap between the consecutive levels double noise = 0.25; // the noise will be amplified by something within [factorRange, 2*factorRange] // increase should lead to increased precision--recall; likewise decrease must // also // lead to decreased precision recall; if the factor = 1, then the anomalies are // information theoretically almost non-existent double anomalyFactor = 10; double slope = 0.2 * sampleSize * (Arrays.stream(reference).max().getAsDouble() - Arrays.stream(reference).min().getAsDouble()) / 50000; // to analyse without linear shift; comment out the line below and change the // slope above as desired slope = 0; double anomalyRate = 0.005; long seed = new Random().nextLong(); System.out.println(" Seed " + seed); Random rng = new Random(seed); int numAnomalies = 0; int incorrectlyFlagged = 0; int correct = 0; int late = 0; // change the transformation below to experiment; // if slope != 0 then NONE will have poor result // both of the difference operations also introduce many errors TransformMethod method = TransformMethod.NORMALIZE; int dimensions = shingleSize; ThresholdedRandomCutForest forest = ThresholdedRandomCutForest.builder().dimensions(dimensions).randomSeed(0) .numberOfTrees(numberOfTrees).shingleSize(shingleSize).sampleSize(sampleSize) .internalShinglingEnabled(true).anomalyRate(0.01).forestMode(ForestMode.STANDARD).startNormalization(32) .transformMethod(method).outputAfter(32).initialAcceptFraction(0.125) // for 1D data weights should not alter results significantly (if in reasonable // range say [0.1,10] // weights are not recommended for 1D, but retained here for illustration // as well as a mechanism to verify that results do not vary significantly .weights(new double[] { 1.0 }) // change to transformDecay( 1.0/(desired interval length)) to perform // a moving average smoothing the default is 1.0/sampleSize // .transformDecay(1.0/sampleSize) .build(); // the following ignore anomalies that are shifted up or down by a fixed amount // from the internal prediction of RCF. Default is 0.001 // the below will show results like // missed current value 3.0 (say X), intended 1.0 (equiv., X - noise), because // the shift up in the actual was not 2*noise // forest.setIgnoreNearExpectedFromAbove( new double [] {2*noise}); // or to suppress all anomalies that are shifted up from predicted // for any sequence; using Double.MAX_VALUE may cause overflow // forest.setIgnoreNearExpectedFromAbove(new double [] {Float.MAX_VALUE}); // the below will show results like // missed current value 5.5 (say Y), intended 7.5 (equiv., Y + noise) because // the shift down in the actual was not 2*noise, in effect we suppress all // anomalies // forest.setIgnoreNearExpectedFromBelow(new double [] {noise*2}); // the following suppresses all anomalies that shifted down compared to // predicted // for any sequence // forest.setIgnoreNearExpectedFromBelow(new double [] {Float.MAX_VALUE}); double[] value = new double[] { 0.0 }; int lastAnomaly = 0; for (int count = 0; count < dataSize; count++) { boolean anomaly = false; double intendedValue = reference[(count + 4) % reference.length] + slope * count; // extremely periodic signal -- note that there is no periodicity detection value[0] = intendedValue; if (rng.nextDouble() < anomalyRate && count > initialSegment) { double anomalyValue = noise * anomalyFactor * (1 + rng.nextDouble()); value[0] += (rng.nextDouble() < 0.5) ? -anomalyValue : anomalyValue; anomaly = true; ++numAnomalies; } else { value[0] += (2 * rng.nextDouble() - 1) * noise; } AnomalyDescriptor result = forest.process(new double[] { value[0] }, 0); if (result.getAnomalyGrade() > 0) { System.out.print(count + " " + result.getAnomalyGrade() + " "); if (result.getRelativeIndex() < 0) { System.out.print((lastAnomaly == count + result.getRelativeIndex()) + " " + (-result.getRelativeIndex()) + " steps ago,"); if (lastAnomaly == count + result.getRelativeIndex()) { late++; } else { incorrectlyFlagged++; } } else { System.out.print(anomaly); if (anomaly) { correct++; } else { incorrectlyFlagged++; } } System.out.print(" current value " + value[0]); if (result.isExpectedValuesPresent()) { System.out.print(" expected " + result.getExpectedValuesList()[0][0] + " instead of " + result.getPastValues()[0]); } System.out.print(" score " + result.getRCFScore() + " threshold " + result.getThreshold()); System.out.println(); } else if (anomaly) { System.out.println(count + " missed current value " + value[0] + ", intended " + intendedValue + ", score " + result.getRCFScore() + ", threshold " + result.getThreshold()); } if (anomaly) { lastAnomaly = count; } } System.out.println("Anomalies " + numAnomalies + ", correct " + correct + ", late " + late + ", incorrectly flagged " + incorrectlyFlagged); } } ================================================ FILE: Java/examples/src/main/java/com/amazon/randomcutforest/examples/parkservices/NumericGLADexample.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.examples.parkservices; import static com.amazon.randomcutforest.CommonUtils.checkArgument; import static com.amazon.randomcutforest.CommonUtils.toDoubleArray; import static com.amazon.randomcutforest.CommonUtils.toFloatArray; import static com.amazon.randomcutforest.testutils.ExampleDataSets.rotateClockWise; import static java.lang.Math.PI; import java.io.BufferedWriter; import java.io.FileWriter; import java.util.Random; import com.amazon.randomcutforest.examples.Example; import com.amazon.randomcutforest.parkservices.AnomalyDescriptor; import com.amazon.randomcutforest.parkservices.GlobalLocalAnomalyDetector; import com.amazon.randomcutforest.parkservices.ThresholdedRandomCutForest; import com.amazon.randomcutforest.parkservices.config.ScoringStrategy; import com.amazon.randomcutforest.parkservices.returntypes.GenericAnomalyDescriptor; import com.amazon.randomcutforest.summarization.Summarizer; import com.amazon.randomcutforest.testutils.NormalMixtureTestData; /** * The following example demonstrates clustering based anomaly detection for * numeric vectors. The clustering can use an arbitrary distance metric (but it * has no mechanism to verify if the function provided is a metric beyond * checking that distances are non-negative; improper implementations of * distances can produce uninterpretable results). The clustering corresponds to * clustering a recency biased sample of points (using the exact same as RCF) * and clustering using multi-centroid method (CURE algorithm). * * There is a natural question that given that this is the RCF library, how does * this clustering based algorithm perform vis-a-vis RCF. First, RCF is * preferred/natural for shingled/sequenced data, e.g., in analysis of time * series. Simple clustering of shingles do not seem to provide similar benefit. * In fact, even for shinglesize 1, which correponds to time dependent * population analysis, the recursive decomposition provided by RCF can provide * a richer detail (even though RCF naturally considers the L1/Manhattan * metric). That recursive decomposition can be viewed as a (randomized) partion * based clustering. That distance function is used to compute the DensityOutput * in RCF. Multilevel clustering is known to be more useful than simple * clustering in many applications. Here we show such an application which * * (i) shows an example use of GlobalLocalAnomalyDetector (GLAD) for dynamic * data as well as * * (ii) a comparable use using a new ForestMode.DISTANCE exposed for RCF. * * RCF seems to perform better for this simple two dimensional dynamic case. At * the same time, the new clusering based algorithm works for generic types with * just a distance function. In applications where distances are meaningful and * key, such geo etc., user-defined distance based anomalies can be extremely * beneficial. If the data can be mapped to explicit vectors then perhaps RCF * and its multi-level partitioning can provide more useful insights. * * Try the following in a visualizer. For example in vanilla gnuplot try * * set terminal gif transparent animate delay 5 * * set size square * * set output "test.gif" * * do for [i = 0:359] { plot [-15:15][-15:15] "clustering_example" i i u 1:2:3 w * p palette pt 7 t "" } * * * Try the above/equivalent for setting printFlaggedGLAD = true (setting * printFlaggedRCF = false), or to see the data, printData = true. Try changing * the number of blades in the fan, the zFactor setting etc. */ public class NumericGLADexample implements Example { public static void main(String[] args) throws Exception { new NumericGLADexample().run(); } @Override public String command() { return "An example of Global-Local Anomaly Detector on numeric vectors"; } @Override public String description() { return "An example of Global-Local Anomaly Detector on numeric vectors"; } @Override public void run() throws Exception { long randomSeed = new Random().nextLong(); System.out.println("Seed " + randomSeed); // we would be sending dataSize * 360 vectors int dataSize = 2000; double range = 10.0; int numberOfFans = 3; // corresponds to number of clusters double[][] data = shiftedEllipse(dataSize, 7, range / 2, numberOfFans); int truePos = 0; int falsePos = 0; int falseNeg = 0; int truePosRCF = 0; int falsePosRCF = 0; int falseNegRCF = 0; int reservoirSize = dataSize; // this ensures that the points are flushed out (albeit randomly) duting the // rotation double timedecay = 1.0 / reservoirSize; GlobalLocalAnomalyDetector reservoir = GlobalLocalAnomalyDetector.builder().randomSeed(42) .numberOfRepresentatives(3).timeDecay(timedecay).capacity(reservoirSize).build(); reservoir.setGlobalDistance(Summarizer::L2distance); double zFactor = 6.0; // six sigma deviation; seems to work best reservoir.setZfactor(zFactor); ThresholdedRandomCutForest test = ThresholdedRandomCutForest.builder().dimensions(2).shingleSize(1) .randomSeed(77).timeDecay(timedecay).scoringStrategy(ScoringStrategy.DISTANCE).build(); test.setZfactor(zFactor); // using the zFactor for same apples to apples comparison String name = "clustering_example"; BufferedWriter file = new BufferedWriter(new FileWriter(name)); boolean printData = true; boolean printAnomalies = false; // use one or the other prints below boolean printFlaggedRCF = false; boolean printFlaggedGLAD = true; Random noiseGen = new Random(randomSeed + 1); for (int degree = 0; degree < 360; degree += 1) { int index = 0; while (index < data.length) { boolean injected = false; float[] vec; if (noiseGen.nextDouble() < 0.005) { injected = true; double[] candAnomaly = new double[2]; // generate points along x axis candAnomaly[0] = (range / 2 * noiseGen.nextDouble() + range / 2); candAnomaly[1] = 0.1 * (2.0 * noiseGen.nextDouble() - 1.0); int antiFan = noiseGen.nextInt(numberOfFans); // rotate to be 90-180 degrees away -- these are decidedly anomalous vec = toFloatArray(rotateClockWise(candAnomaly, -2 * PI * (degree + 180 * (1 + 2 * antiFan) / numberOfFans) / 360)); if (printAnomalies) { file.append(vec[0] + " " + vec[1] + " " + 0.0 + "\n"); } } else { vec = toFloatArray(rotateClockWise(data[index], -2 * PI * degree / 360)); if (printData) { file.append(vec[0] + " " + vec[1] + " " + 0.0 + "\n"); } ++index; } GenericAnomalyDescriptor result = reservoir.process(vec, 1.0f, null, true); AnomalyDescriptor res = test.process(toDoubleArray(vec), 0L); double grade = res.getAnomalyGrade(); if (injected) { if (result.getAnomalyGrade() > 0) { ++truePos; } else { ++falseNeg; } if (grade > 0) { ++truePosRCF; } else { ++falseNegRCF; } } else { if (result.getAnomalyGrade() > 0) { ++falsePos; } if (grade > 0) { ++falsePosRCF; } } if (printFlaggedRCF && grade > 0) { file.append(vec[0] + " " + vec[1] + " " + grade + "\n"); } else if (printFlaggedGLAD && result.getAnomalyGrade() > 0) { file.append(vec[0] + " " + vec[1] + " " + result.getAnomalyGrade() + "\n"); } } if (printAnomalies || printData || printFlaggedRCF || printFlaggedGLAD) { file.append("\n"); file.append("\n"); } if (falsePos + truePos == 0) { throw new IllegalStateException(""); } checkArgument(falseNeg + truePos == falseNegRCF + truePosRCF, " incorrect accounting"); System.out.println(" at degree " + degree + " injected " + (truePos + falseNeg)); System.out.print("Precision = " + precision(truePos, falsePos)); System.out.println(" Recall = " + recall(truePos, falseNeg)); System.out.print("RCF Distance Mode Precision = " + precision(truePosRCF, falsePosRCF)); System.out.println(" RCF Distance Mode Recall = " + recall(truePosRCF, falseNegRCF)); } } public double[][] shiftedEllipse(int dataSize, int seed, double shift, int fans) { NormalMixtureTestData generator = new NormalMixtureTestData(0.0, 1.0, 0.0, 1.0, 0.0, 1.0); double[][] data = generator.generateTestData(dataSize, 2, seed); Random prg = new Random(0); for (int i = 0; i < dataSize; i++) { int nextFan = prg.nextInt(fans); // scale data[i][1] *= 1.0 / fans; data[i][0] *= 2.0; // shift data[i][0] += shift + 1.0 / fans; data[i] = rotateClockWise(data[i], 2 * PI * nextFan / fans); } return data; } double precision(int truePos, int falsePos) { return (truePos + falsePos > 0) ? 1.0 * truePos / (truePos + falsePos) : 1.0; } double recall(int truePos, int falseNeg) { return (truePos + falseNeg > 0) ? 1.0 * truePos / (truePos + falseNeg) : 1.0; } } ================================================ FILE: Java/examples/src/main/java/com/amazon/randomcutforest/examples/parkservices/RCFCasterExample.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.examples.parkservices; import java.io.BufferedWriter; import java.io.FileWriter; import java.io.IOException; import java.util.Arrays; import com.amazon.randomcutforest.config.Precision; import com.amazon.randomcutforest.config.TransformMethod; import com.amazon.randomcutforest.examples.Example; import com.amazon.randomcutforest.parkservices.ForecastDescriptor; import com.amazon.randomcutforest.parkservices.RCFCaster; import com.amazon.randomcutforest.parkservices.config.Calibration; import com.amazon.randomcutforest.returntypes.DiVector; import com.amazon.randomcutforest.returntypes.RangeVector; import com.amazon.randomcutforest.testutils.MultiDimDataWithKey; import com.amazon.randomcutforest.testutils.ShingledMultiDimDataWithKeys; /** * The following example demonstrates the self calibration of RCFCast. Change * various parameters -- we recommend keeping baseDimension = 1 (for single * variate forecasting -- multivariate forecasting can be a complicated * endeavour. The value shifForViz is for easier visualization. * * Once the datafile calibration_example is produced consider plotting it. For * example to use gnuplot, to generate a quick and dirty gif file, consider * these commands set terminal gif transparent animate delay 5 set output * "example.gif" do for [i = 0:3000:3] { (all the below in a single line) plot * [0:1000][-100:500] "example" i 0 u 1:2 w l lc "black" t "Data (seen one at a * time)", "example" index (i+3) u 1:2 w l lw 2 lc "blue" t " Online Forecast * (future)", "example" i (i+2) u 1:(100*$8) w l lw 2 lc "magenta" t "Interval * Accuracy %", "example" index (i+3) u 1:($4-$2):($3-$2) w filledcurves fc * "blue" fs transparent solid 0.3 noborder t "Calibrated uncertainty range * (future)", "example" index (i+2) u 1:7:6 w filledcurves fc "brown" fs * transparent solid 0.5 noborder t "Observed error distribution range (past)", * "example" i (i+1) u 1:2 w impulses t "", 0 lc "gray" t "", 100 lc "gray" t * "", 80 lc "gray" t"" } * * Try different calibrations below to see the precision over the intervals. The * struggle of past and new data would become obvious; however the algorithm * would self-calibrate eventually. Changing the different values for * transformDecay() would correspond to different moving average analysis. * */ public class RCFCasterExample implements Example { public static void main(String[] args) throws Exception { new RCFCasterExample().run(); } @Override public String command() { return "Calibrated RCFCast"; } @Override public String description() { return "Calibrated RCFCast Example"; } @Override public void run() throws Exception { // Create and populate a random cut forest int numberOfTrees = 50; int sampleSize = 256; Precision precision = Precision.FLOAT_32; int dataSize = 2 * sampleSize; // Multi attribute forecasting is less understood than singe attribute // forecasting; // it is not always clear or easy to decide if multi-attribute forecasting is // reasonable // but the code below will run for multi-attribute case. int baseDimensions = 2; int forecastHorizon = 15; int shingleSize = 20; int outputAfter = 64; long seed = 2023L; double[][] fulldata = new double[2 * dataSize][]; double shiftForViz = 200; System.out.println("seed = " + seed); // change the last argument seed for a different run MultiDimDataWithKey dataWithKeys = ShingledMultiDimDataWithKeys.getMultiDimData(dataSize, 50, 50, 5, seed, baseDimensions, true); for (int i = 0; i < dataSize; i++) { fulldata[i] = Arrays.copyOf(dataWithKeys.data[i], baseDimensions); fulldata[i][0] += shiftForViz; } // changing both period and amplitude for fun MultiDimDataWithKey second = ShingledMultiDimDataWithKeys.getMultiDimData(dataSize, 70, 30, 5, seed + 1, baseDimensions, true); for (int i = 0; i < dataSize; i++) { fulldata[dataSize + i] = Arrays.copyOf(second.data[i], baseDimensions); fulldata[dataSize + i][0] += shiftForViz; } int dimensions = baseDimensions * shingleSize; // change this line to try other transforms; but the default is NORMALIZE // uncomment the transformMethod() below TransformMethod transformMethod = TransformMethod.NORMALIZE; RCFCaster caster = RCFCaster.builder().dimensions(dimensions).randomSeed(seed + 1).numberOfTrees(numberOfTrees) .shingleSize(shingleSize).sampleSize(sampleSize).internalShinglingEnabled(true).precision(precision) .anomalyRate(0.01).outputAfter(outputAfter).calibration(Calibration.SIMPLE) // the following affects the moving average in many of the transformations // the 0.02 corresponds to a half life of 1/0.02 = 50 observations // this is different from the timeDecay() of RCF; however it is a similar // concept .transformDecay(0.02).forecastHorizon(forecastHorizon).initialAcceptFraction(0.125) .useRCFCallibration(true).build(); String name = "example"; BufferedWriter file = new BufferedWriter(new FileWriter(name)); for (int j = 0; j < fulldata.length; j++) { file.append(j + " "); for (int k = 0; k < baseDimensions; k++) { file.append(fulldata[j][k] + " "); } file.append("\n"); } file.append("\n"); file.append("\n"); for (int j = 0; j < fulldata.length; j++) { ForecastDescriptor result = caster.process(fulldata[j], 0L); printResult(file, result, j, baseDimensions); } file.close(); } void printResult(BufferedWriter file, ForecastDescriptor result, int current, int inputLength) throws IOException { RangeVector forecast = result.getTimedForecast().rangeVector; float[] errorP50 = result.getObservedErrorDistribution().values; float[] upperError = result.getObservedErrorDistribution().upper; float[] lowerError = result.getObservedErrorDistribution().lower; DiVector rmse = result.getErrorRMSE(); float[] mean = result.getErrorMean(); float[] intervalPrecision = result.getIntervalPrecision(); file.append(current + " " + 1000 + "\n"); file.append("\n"); file.append("\n"); // block corresponding to the past; print the errors for (int i = forecast.values.length / inputLength - 1; i >= 0; i--) { file.append((current - i) + " "); for (int j = 0; j < inputLength; j++) { int k = i * inputLength + j; file.append(mean[k] + " " + rmse.high[k] + " " + rmse.low[k] + " " + errorP50[k] + " " + upperError[k] + " " + lowerError[k] + " " + intervalPrecision[k] + " "); } file.append("\n"); } file.append("\n"); file.append("\n"); // block corresponding to the future; the projections and the projected errors for (int i = 0; i < forecast.values.length / inputLength; i++) { file.append((current + i) + " "); for (int j = 0; j < inputLength; j++) { int k = i * inputLength + j; file.append(forecast.values[k] + " " + forecast.upper[k] + " " + forecast.lower[k] + " "); } file.append("\n"); } file.append("\n"); file.append("\n"); } } ================================================ FILE: Java/examples/src/main/java/com/amazon/randomcutforest/examples/parkservices/ScoringStrategyExample.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.examples.parkservices; import static com.amazon.randomcutforest.CommonUtils.checkArgument; import java.util.Arrays; import java.util.Random; import com.amazon.randomcutforest.config.TransformMethod; import com.amazon.randomcutforest.examples.Example; import com.amazon.randomcutforest.parkservices.AnomalyDescriptor; import com.amazon.randomcutforest.parkservices.ThresholdedRandomCutForest; import com.amazon.randomcutforest.parkservices.config.ScoringStrategy; import com.amazon.randomcutforest.testutils.MultiDimDataWithKey; import com.amazon.randomcutforest.testutils.ShingledMultiDimDataWithKeys; public class ScoringStrategyExample implements Example { public static void main(String[] args) throws Exception { new ScoringStrategyExample().run(); } @Override public String command() { return "Scoring_strategy_example"; } @Override public String description() { return "Scoring Strategy Example"; } @Override public void run() throws Exception { // Create and populate a random cut forest int shingleSize = 4; int numberOfTrees = 50; int sampleSize = 256; int dataSize = 4 * sampleSize; // change this to try different number of attributes, // this parameter is not expected to be larger than 5 for this example int baseDimensions = 1; long seed = new Random().nextLong(); long count = 0; int dimensions = baseDimensions * shingleSize; TransformMethod transformMethod = TransformMethod.NORMALIZE; ThresholdedRandomCutForest forest = ThresholdedRandomCutForest.builder().compact(true).dimensions(dimensions) .randomSeed(seed).numberOfTrees(numberOfTrees).shingleSize(shingleSize).sampleSize(sampleSize) .internalShinglingEnabled(true).scoringStrategy(ScoringStrategy.EXPECTED_INVERSE_DEPTH) .transformMethod(transformMethod).outputAfter(32).initialAcceptFraction(0.125).build(); ThresholdedRandomCutForest second = ThresholdedRandomCutForest.builder().compact(true).dimensions(dimensions) .randomSeed(seed).numberOfTrees(numberOfTrees).shingleSize(shingleSize).sampleSize(sampleSize) .internalShinglingEnabled(true).scoringStrategy(ScoringStrategy.MULTI_MODE) .transformMethod(transformMethod).outputAfter(32).initialAcceptFraction(0.125).build(); ThresholdedRandomCutForest third = ThresholdedRandomCutForest.builder().compact(true).dimensions(dimensions) .randomSeed(seed).numberOfTrees(numberOfTrees).shingleSize(shingleSize).sampleSize(sampleSize) .internalShinglingEnabled(true).scoringStrategy(ScoringStrategy.MULTI_MODE_RECALL) .transformMethod(transformMethod).outputAfter(32).initialAcceptFraction(0.125).build(); System.out.println("seed = " + seed); // change the last argument seed for a different run MultiDimDataWithKey dataWithKeys = ShingledMultiDimDataWithKeys.getMultiDimData(dataSize + shingleSize - 1, 50, 100, 5, seed, baseDimensions); int keyCounter = 0; for (double[] point : dataWithKeys.data) { AnomalyDescriptor result = forest.process(point, 0L); AnomalyDescriptor multi_mode = second.process(point, 0L); AnomalyDescriptor multi_mode_recall = third.process(point, 0L); checkArgument(Math.abs(result.getRCFScore() - multi_mode.getRCFScore()) < 1e-10, " error"); checkArgument(Math.abs(result.getRCFScore() - multi_mode_recall.getRCFScore()) < 1e-10, " error"); if (keyCounter < dataWithKeys.changeIndices.length && count == dataWithKeys.changeIndices[keyCounter]) { System.out .println("timestamp " + count + " CHANGE " + Arrays.toString(dataWithKeys.changes[keyCounter])); ++keyCounter; } printResult("MULTI_MODE_RECALL", multi_mode_recall, count, baseDimensions); printResult("EXPECTED_INVERSE_DEPTH", result, count, baseDimensions); printResult("MULTI_MODE", multi_mode, count, baseDimensions); ++count; } } void printResult(String description, AnomalyDescriptor result, long count, int baseDimensions) { if (result.getAnomalyGrade() != 0) { System.out.print(description + " timestamp " + count + " RESULT value "); for (int i = 0; i < baseDimensions; i++) { System.out.print(result.getCurrentInput()[i] + ", "); } System.out.print("score " + result.getRCFScore() + ", grade " + result.getAnomalyGrade() + ", "); if (result.getRelativeIndex() != 0) { System.out.print(-result.getRelativeIndex() + " steps ago, "); } if (result.isExpectedValuesPresent()) { if (result.getRelativeIndex() != 0) { System.out.print("instead of "); for (int i = 0; i < baseDimensions; i++) { System.out.print(result.getPastValues()[i] + ", "); } System.out.print("expected "); for (int i = 0; i < baseDimensions; i++) { System.out.print(result.getExpectedValuesList()[0][i] + ", "); if (result.getPastValues()[i] != result.getExpectedValuesList()[0][i]) { System.out.print( "( " + (result.getPastValues()[i] - result.getExpectedValuesList()[0][i]) + " ) "); } } } else { System.out.print("expected "); for (int i = 0; i < baseDimensions; i++) { System.out.print(result.getExpectedValuesList()[0][i] + ", "); if (result.getCurrentInput()[i] != result.getExpectedValuesList()[0][i]) { System.out.print("( " + (result.getCurrentInput()[i] - result.getExpectedValuesList()[0][i]) + " ) "); } } } } else { System.out.print("insufficient data to provide expected values"); } System.out.println(); } } } ================================================ FILE: Java/examples/src/main/java/com/amazon/randomcutforest/examples/parkservices/SequentialAnomalyExample.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.examples.parkservices; import java.util.Arrays; import java.util.List; import java.util.Random; import com.amazon.randomcutforest.config.TransformMethod; import com.amazon.randomcutforest.examples.Example; import com.amazon.randomcutforest.parkservices.AnomalyDescriptor; import com.amazon.randomcutforest.parkservices.SequentialAnalysis; import com.amazon.randomcutforest.testutils.MultiDimDataWithKey; import com.amazon.randomcutforest.testutils.ShingledMultiDimDataWithKeys; public class SequentialAnomalyExample implements Example { public static void main(String[] args) throws Exception { new SequentialAnomalyExample().run(); } @Override public String command() { return "Sequential_analysis_example"; } @Override public String description() { return "Sequential Analysis Example"; } @Override public void run() throws Exception { // Create and populate a random cut forest int shingleSize = 8; int numberOfTrees = 50; int sampleSize = 256; int dataSize = 4 * sampleSize; // change this to try different number of attributes, // this parameter is not expected to be larger than 5 for this example int baseDimensions = 2; long seed = new Random().nextLong(); System.out.println("seed = " + seed); // change the last argument seed for a different run MultiDimDataWithKey dataWithKeys = ShingledMultiDimDataWithKeys.getMultiDimData(dataSize + shingleSize - 1, 50, 100, 5, seed, baseDimensions); double timeDecay = 1.0 / (10 * sampleSize); List anomalies = SequentialAnalysis.detectAnomalies(dataWithKeys.data, shingleSize, sampleSize, timeDecay, TransformMethod.NONE, seed); int keyCounter = 0; for (AnomalyDescriptor result : anomalies) { // first print the changes while (keyCounter < dataWithKeys.changeIndices.length && dataWithKeys.changeIndices[keyCounter] <= result.getInternalTimeStamp()) { System.out.println("timestamp " + dataWithKeys.changeIndices[keyCounter] + " CHANGE " + Arrays.toString(dataWithKeys.changes[keyCounter])); ++keyCounter; } if (result.getAnomalyGrade() != 0) { System.out.print("timestamp " + result.getInternalTimeStamp() + " RESULT value "); for (int i = 0; i < baseDimensions; i++) { System.out.print(result.getCurrentInput()[i] + ", "); } System.out.print("score " + result.getRCFScore() + ", grade " + result.getAnomalyGrade() + ", "); if (result.getRelativeIndex() != 0 && result.isStartOfAnomaly()) { System.out.print(-result.getRelativeIndex() + " step(s) ago, "); } if (result.isExpectedValuesPresent()) { if (result.getRelativeIndex() != 0 && result.isStartOfAnomaly()) { System.out.print("instead of "); for (int i = 0; i < baseDimensions; i++) { System.out.print(result.getPastValues()[i] + ", "); } System.out.print("expected "); for (int i = 0; i < baseDimensions; i++) { System.out.print(result.getExpectedValuesList()[0][i] + ", "); if (result.getPastValues()[i] != result.getExpectedValuesList()[0][i]) { System.out.print("( " + (result.getPastValues()[i] - result.getExpectedValuesList()[0][i]) + " ) "); } } } else { System.out.print("expected "); for (int i = 0; i < baseDimensions; i++) { System.out.print(result.getExpectedValuesList()[0][i] + ", "); if (result.getCurrentInput()[i] != result.getExpectedValuesList()[0][i]) { System.out.print("( " + (result.getCurrentInput()[i] - result.getExpectedValuesList()[0][i]) + " ) "); } } } } else { System.out.print("insufficient data to provide expected values"); } System.out.println(); } } } } ================================================ FILE: Java/examples/src/main/java/com/amazon/randomcutforest/examples/parkservices/SequentialForecastExample.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.examples.parkservices; import java.util.Arrays; import java.util.List; import java.util.Random; import com.amazon.randomcutforest.config.TransformMethod; import com.amazon.randomcutforest.examples.Example; import com.amazon.randomcutforest.parkservices.AnomalyDescriptor; import com.amazon.randomcutforest.parkservices.SequentialAnalysis; import com.amazon.randomcutforest.testutils.MultiDimDataWithKey; import com.amazon.randomcutforest.testutils.ShingledMultiDimDataWithKeys; public class SequentialForecastExample implements Example { public static void main(String[] args) throws Exception { new SequentialForecastExample().run(); } @Override public String command() { return "Sequential_analysis_example"; } @Override public String description() { return "Sequential Analysis Example"; } @Override public void run() throws Exception { // Create and populate a random cut forest int shingleSize = 8; int numberOfTrees = 50; int sampleSize = 256; int dataSize = 4 * sampleSize; // the code will run if the following is changed, but interpretations of // multivariate forecasting vary int baseDimensions = 1; long seed = new Random().nextLong(); System.out.println("seed = " + seed); // change the last argument seed for a different run MultiDimDataWithKey dataWithKeys = ShingledMultiDimDataWithKeys.getMultiDimData(dataSize + shingleSize - 1, 50, 100, 5, seed, baseDimensions); double timeDecay = 1.0 / (10 * sampleSize); int forecastHorizon = 2 * shingleSize; int errorHorizon = 10 * forecastHorizon; List anomalies = SequentialAnalysis.forecastWithAnomalies(dataWithKeys.data, shingleSize, sampleSize, timeDecay, TransformMethod.NONE, forecastHorizon, errorHorizon, 42L).getAnomalies(); int keyCounter = 0; for (AnomalyDescriptor result : anomalies) { // first print the changes while (keyCounter < dataWithKeys.changeIndices.length && dataWithKeys.changeIndices[keyCounter] <= result.getInternalTimeStamp()) { System.out.println("timestamp " + dataWithKeys.changeIndices[keyCounter] + " CHANGE " + Arrays.toString(dataWithKeys.changes[keyCounter])); ++keyCounter; } if (result.getAnomalyGrade() != 0) { System.out.print("timestamp " + result.getInternalTimeStamp() + " RESULT value "); for (int i = 0; i < baseDimensions; i++) { System.out.print(result.getCurrentInput()[i] + ", "); } System.out.print("score " + result.getRCFScore() + ", grade " + result.getAnomalyGrade() + ", "); if (result.getRelativeIndex() != 0 && result.isStartOfAnomaly()) { System.out.print(-result.getRelativeIndex() + " step(s) ago, "); } if (result.isExpectedValuesPresent()) { if (result.getRelativeIndex() != 0 && result.isStartOfAnomaly()) { System.out.print("instead of "); for (int i = 0; i < baseDimensions; i++) { System.out.print(result.getPastValues()[i] + ", "); } System.out.print("expected "); for (int i = 0; i < baseDimensions; i++) { System.out.print(result.getExpectedValuesList()[0][i] + ", "); if (result.getPastValues()[i] != result.getExpectedValuesList()[0][i]) { System.out.print("( " + (result.getPastValues()[i] - result.getExpectedValuesList()[0][i]) + " ) "); } } } else { System.out.print("expected "); for (int i = 0; i < baseDimensions; i++) { System.out.print(result.getExpectedValuesList()[0][i] + ", "); if (result.getCurrentInput()[i] != result.getExpectedValuesList()[0][i]) { System.out.print("( " + (result.getCurrentInput()[i] - result.getExpectedValuesList()[0][i]) + " ) "); } } } } else { System.out.print("insufficient data to provide expected values"); } System.out.println(); } } } } ================================================ FILE: Java/examples/src/main/java/com/amazon/randomcutforest/examples/parkservices/StringGLADexample.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.examples.parkservices; import static java.lang.Math.min; import java.util.List; import java.util.Random; import java.util.function.BiFunction; import com.amazon.randomcutforest.examples.Example; import com.amazon.randomcutforest.parkservices.GlobalLocalAnomalyDetector; import com.amazon.randomcutforest.parkservices.returntypes.GenericAnomalyDescriptor; import com.amazon.randomcutforest.summarization.ICluster; import com.amazon.randomcutforest.util.Weighted; /** * A clustering based anomaly detection for strings for two characters using * edit distance. Note that the algorithm does not have any inbuilt test for * verifying if the distance is indeed a metric (other than checking for * non-negative values. */ public class StringGLADexample implements Example { public static void main(String[] args) throws Exception { new StringGLADexample().run(); } @Override public String command() { return "Clustering based Global-Local Anomaly Detection Example for strings"; } @Override public String description() { return "Clustering based Global-Local Anomaly Detection Example for strings"; } @Override public void run() throws Exception { long seed = new Random().nextLong(); System.out.println("seed : " + seed); Random random = new Random(seed); int stringSize = 70; int numberOfStrings = 200000; int reservoirSize = 2000; boolean changeInMiddle = true; // the following should be away from 0.5 in [0.5,1] double gapProbOfA = 0.85; double anomalyRate = 0.05; char[][] points = new char[numberOfStrings][]; boolean[] injected = new boolean[numberOfStrings]; boolean printClusters = true; boolean printFalseNeg = false; boolean printFalsePos = false; int numberOfInjected = 0; for (int i = 0; i < numberOfStrings; i++) { if (random.nextDouble() < anomalyRate && i > reservoirSize / 2) { injected[i] = true; ++numberOfInjected; points[i] = getABArray(stringSize + 10, 0.5, random, false, 0); } else { boolean flag = changeInMiddle && random.nextDouble() < 0.25; double prob = (random.nextDouble() < 0.5) ? gapProbOfA : (1 - gapProbOfA); points[i] = getABArray(stringSize, prob, random, flag, 0.25 * i / numberOfStrings); } } System.out.println("Injected " + numberOfInjected + " 'anomalies' in " + points.length); int recluster = reservoirSize / 2; BiFunction dist = (a, b) -> toyD(a, b, stringSize / 2.0); GlobalLocalAnomalyDetector reservoir = GlobalLocalAnomalyDetector.builder().randomSeed(42) .numberOfRepresentatives(5).timeDecay(1.0 / reservoirSize).capacity(reservoirSize).build(); reservoir.setGlobalDistance(dist); // for non-geometric bounded distances, such as for strings, keep the factor at // 3.0 or below // minimum is 2.5, set as default; uncomment to change // reservoir.setZfactor(DEFAULT_Z_FACTOR); int truePos = 0; int falsePos = 0; int falseNeg = 0; for (int y = 0; y < points.length; y++) { GenericAnomalyDescriptor result = reservoir.process(points[y], 1.0f, null, true); if (result.getAnomalyGrade() > 0) { if (!injected[y]) { ++falsePos; List> list = result.getRepresentativeList(); if (printFalsePos) { System.out.println(result.getScore() + " " + injected[y] + " at " + y + " dist " + dist.apply(points[y], list.get(0).index) + " " + result.getThreshold()); printCharArray(list.get(0).index); System.out.println(); printCharArray(points[y]); System.out.println(); } } else { ++truePos; } } else if (injected[y]) { ++falseNeg; if (printFalseNeg) { System.out.println(" missed " + result.getScore() + " " + result.getThreshold()); } } if (printClusters && y % 10000 == 0 && y > 0) { System.out.println(" at " + y); printClusters(reservoir.getClusters()); } if (10 * y % points.length == 0 && y > 0) { System.out.println(" at " + y); System.out.println("Precision = " + precision(truePos, falsePos)); System.out.println("Recall = " + recall(truePos, falseNeg)); } } System.out.println(" Final: "); System.out.println("Precision = " + precision(truePos, falsePos)); System.out.println("Recall = " + recall(truePos, falseNeg)); } public static double toyD(char[] a, char[] b, double u) { if (a.length > b.length) { return toyD(b, a, u); } double[][] dist = new double[2][b.length + 1]; for (int j = 0; j < b.length + 1; j++) { dist[0][j] = j; } for (int i = 1; i < a.length + 1; i++) { dist[1][0] = i; for (int j = 1; j < b.length + 1; j++) { double t = dist[0][j - 1] + ((a[i - 1] == b[j - 1]) ? 0 : 1); dist[1][j] = min(min(t, dist[0][j] + 1), dist[1][j - 1] + 1); } for (int j = 0; j < b.length + 1; j++) { dist[0][j] = dist[1][j]; } } return dist[1][b.length]; } // colors public static final String ANSI_RESET = "\u001B[0m"; public static final String ANSI_RED = "\u001B[31m"; public static final String ANSI_BLUE = "\u001B[34m"; public static void printCharArray(char[] a) { for (int i = 0; i < a.length; i++) { if (a[i] == '-') { System.out.print(ANSI_RED + a[i] + ANSI_RESET); } else { System.out.print(ANSI_BLUE + a[i] + ANSI_RESET); } } } public void printClusters(List> summary) { for (int i = 0; i < summary.size(); i++) { double weight = summary.get(i).getWeight(); System.out.println("Cluster " + i + " representatives, weight " + ((float) Math.round(1000 * weight) * 0.001) + " avg radius " + summary.get(i).averageRadius()); List> representatives = summary.get(i).getRepresentatives(); for (int j = 0; j < representatives.size(); j++) { double t = representatives.get(j).weight; t = Math.round(1000.0 * t / weight) * 0.001; System.out .print("relative weight " + (float) t + " length " + representatives.get(j).index.length + " "); printCharArray(representatives.get(j).index); System.out.println(); } System.out.println(); } } public char[] getABArray(int size, double probabilityOfA, Random random, Boolean changeInMiddle, double fraction) { int newSize = size + random.nextInt(size / 5); char[] a = new char[newSize]; for (int i = 0; i < newSize; i++) { double toss = (changeInMiddle && (i > (1 - fraction) * newSize || i < newSize * fraction)) ? (1 - probabilityOfA) : probabilityOfA; if (random.nextDouble() < toss) { a[i] = '-'; } else { a[i] = '_'; } } return a; } double precision(int truePos, int falsePos) { return (truePos + falsePos > 0) ? 1.0 * truePos / (truePos + falsePos) : 1.0; } double recall(int truePos, int falseNeg) { return (truePos + falseNeg > 0) ? 1.0 * truePos / (truePos + falseNeg) : 1.0; } } ================================================ FILE: Java/examples/src/main/java/com/amazon/randomcutforest/examples/parkservices/Thresholded1DGaussianMix.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.examples.parkservices; import java.util.Random; import com.amazon.randomcutforest.config.ForestMode; import com.amazon.randomcutforest.config.Precision; import com.amazon.randomcutforest.examples.Example; import com.amazon.randomcutforest.parkservices.AnomalyDescriptor; import com.amazon.randomcutforest.parkservices.ThresholdedRandomCutForest; import com.amazon.randomcutforest.testutils.MultiDimDataWithKey; import com.amazon.randomcutforest.testutils.NormalMixtureTestData; public class Thresholded1DGaussianMix implements Example { public static void main(String[] args) throws Exception { new Thresholded1DGaussianMix().run(); } @Override public String command() { return "Thresholded_1D_Gaussian_example"; } @Override public String description() { return "Thresholded one dimensional gassian mixture Example"; } @Override public void run() throws Exception { // Create and populate a random cut forest int shingleSize = 4; int numberOfTrees = 50; int sampleSize = 256; Precision precision = Precision.FLOAT_32; int dataSize = 4 * sampleSize; // change this to try different number of attributes, // this parameter is not expected to be larger than 5 for this example int baseDimensions = 1; int count = 0; int dimensions = baseDimensions * shingleSize; ThresholdedRandomCutForest forest = new ThresholdedRandomCutForest.Builder<>().compact(true) .dimensions(dimensions).randomSeed(0).numberOfTrees(numberOfTrees).shingleSize(shingleSize) .sampleSize(sampleSize).precision(precision).anomalyRate(0.01).forestMode(ForestMode.TIME_AUGMENTED) .build(); long seed = new Random().nextLong(); System.out.println("Anomalies would correspond to a run, based on a change of state."); System.out.println("Each change is normal <-> anomaly; so after the second change the data is normal"); System.out.println("seed = " + seed); NormalMixtureTestData normalMixtureTestData = new NormalMixtureTestData(10, 1.0, 50, 2.0, 0.01, 0.1); MultiDimDataWithKey dataWithKeys = normalMixtureTestData.generateTestDataWithKey(dataSize, 1, 0); int keyCounter = 0; for (double[] point : dataWithKeys.data) { AnomalyDescriptor result = forest.process(point, count); if (keyCounter < dataWithKeys.changeIndices.length && result.getInternalTimeStamp() == dataWithKeys.changeIndices[keyCounter]) { System.out.println("timestamp " + (result.getInputTimestamp()) + " CHANGE"); ++keyCounter; } if (keyCounter < dataWithKeys.changeIndices.length && count == dataWithKeys.changeIndices[keyCounter]) { System.out.println("timestamp " + (count) + " CHANGE "); ++keyCounter; } if (result.getAnomalyGrade() != 0) { System.out.print("timestamp " + (count) + " RESULT value "); for (int i = 0; i < baseDimensions; i++) { System.out.print(result.getCurrentInput()[i] + ", "); } System.out.print("score " + result.getRCFScore() + ", grade " + result.getAnomalyGrade() + ", "); if (result.isExpectedValuesPresent()) { if (result.getRelativeIndex() != 0 && result.isStartOfAnomaly()) { System.out.print(-result.getRelativeIndex() + " steps ago, instead of "); for (int i = 0; i < baseDimensions; i++) { System.out.print(result.getPastValues()[i] + ", "); } System.out.print("expected "); for (int i = 0; i < baseDimensions; i++) { System.out.print(result.getExpectedValuesList()[0][i] + ", "); if (result.getPastValues()[i] != result.getExpectedValuesList()[0][i]) { System.out.print("( " + (result.getPastValues()[i] - result.getExpectedValuesList()[0][i]) + " ) "); } } } else { System.out.print("expected "); for (int i = 0; i < baseDimensions; i++) { System.out.print(result.getExpectedValuesList()[0][i] + ", "); if (result.getCurrentInput()[i] != result.getExpectedValuesList()[0][i]) { System.out.print("( " + (result.getCurrentInput()[i] - result.getExpectedValuesList()[0][i]) + " ) "); } } } } System.out.println(); } ++count; } } } ================================================ FILE: Java/examples/src/main/java/com/amazon/randomcutforest/examples/parkservices/ThresholdedForecast.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.examples.parkservices; import static java.lang.Math.min; import com.amazon.randomcutforest.config.Precision; import com.amazon.randomcutforest.config.TransformMethod; import com.amazon.randomcutforest.examples.Example; import com.amazon.randomcutforest.parkservices.ThresholdedRandomCutForest; import com.amazon.randomcutforest.returntypes.RangeVector; import com.amazon.randomcutforest.returntypes.TimedRangeVector; import com.amazon.randomcutforest.testutils.MultiDimDataWithKey; import com.amazon.randomcutforest.testutils.ShingledMultiDimDataWithKeys; public class ThresholdedForecast implements Example { public static void main(String[] args) throws Exception { new com.amazon.randomcutforest.examples.parkservices.ThresholdedForecast().run(); } @Override public String command() { return "Thresholded_Forecast_example"; } @Override public String description() { return "Example of Forecast using Thresholded RCF"; } @Override public void run() throws Exception { int sampleSize = 256; int baseDimensions = 1; long seed = 100L; int length = 4 * sampleSize; int outputAfter = 128; // as the ratio of amplitude (signal) to noise is changed, the estimation range // in forecast // (or any other inference) should increase MultiDimDataWithKey dataWithKeys = ShingledMultiDimDataWithKeys.getMultiDimData(length, 50, 100, 10, seed, baseDimensions, true); System.out.println(dataWithKeys.changes.length + " anomalies injected "); // horizon/lookahead can be larger than shingleSize for transformations that do // not // involve differencing -- but longer horizon would have larger error int horizon = 60; int shingleSize = 30; // if the useSlope is set as true then it is recommended to use NORMALIZE or // SUBTRACT_MA as // transformation methods to adjust to the linear drift ThresholdedRandomCutForest forest = new ThresholdedRandomCutForest.Builder<>().compact(true) .dimensions(baseDimensions * shingleSize).precision(Precision.FLOAT_32).randomSeed(seed) .internalShinglingEnabled(true).shingleSize(shingleSize).outputAfter(outputAfter) .transformMethod(TransformMethod.NORMALIZE).build(); if (forest.getTransformMethod() == TransformMethod.NORMALIZE_DIFFERENCE || forest.getTransformMethod() == TransformMethod.DIFFERENCE) { // single step differencing will not produce stable forecasts over long horizons horizon = min(horizon, shingleSize / 2 + 1); } double[] error = new double[horizon]; double[] lowerError = new double[horizon]; double[] upperError = new double[horizon]; for (int j = 0; j < dataWithKeys.data.length; j++) { // forecast first; change centrality to achieve a control over the sampling // setting centrality = 0 would correspond to random sampling from the leaves // reached by // impute visitor // the following prints // // where the sequence number varies between next-to-be-read .. (next + horizon // -1 ) // // Every new element corresponds to a new set of horizon forecasts; we measure // the // errors keeping the leadtime fixed. // // verify that forecast is done before seeing the actual value (in the process() // function) // TimedRangeVector extrapolate = forest.extrapolate(horizon, true, 1.0); RangeVector forecast = extrapolate.rangeVector; for (int i = 0; i < horizon; i++) { System.out.println( (j + i) + " " + forecast.values[i] + " " + forecast.upper[i] + " " + forecast.lower[i]); // compute errors if (j > outputAfter + shingleSize - 1 && j + i < dataWithKeys.data.length) { double t = dataWithKeys.data[j + i][0] - forecast.values[i]; error[i] += t * t; t = dataWithKeys.data[j + i][0] - forecast.lower[i]; lowerError[i] += t * t; t = dataWithKeys.data[j + i][0] - forecast.upper[i]; upperError[i] += t * t; } } System.out.println(); System.out.println(); forest.process(dataWithKeys.data[j], j); } System.out.println(forest.getTransformMethod().name() + " RMSE (as horizon increases) "); for (int i = 0; i < horizon; i++) { double t = error[i] / (dataWithKeys.data.length - shingleSize + 1 - outputAfter - i); System.out.print(Math.sqrt(t) + " "); } System.out.println(); System.out.println("RMSE Lower (as horizon increases)"); for (int i = 0; i < horizon; i++) { double t = lowerError[i] / (dataWithKeys.data.length - shingleSize + 1 - outputAfter - i); System.out.print(Math.sqrt(t) + " "); } System.out.println(); System.out.println("RMSE Upper (as horizon increases)"); for (int i = 0; i < horizon; i++) { double t = upperError[i] / (dataWithKeys.data.length - shingleSize + 1 - outputAfter - i); System.out.print(Math.sqrt(t) + " "); } System.out.println(); } } ================================================ FILE: Java/examples/src/main/java/com/amazon/randomcutforest/examples/parkservices/ThresholdedImpute.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.examples.parkservices; import java.util.Arrays; import java.util.Random; import com.amazon.randomcutforest.config.ForestMode; import com.amazon.randomcutforest.config.ImputationMethod; import com.amazon.randomcutforest.config.Precision; import com.amazon.randomcutforest.config.TransformMethod; import com.amazon.randomcutforest.examples.Example; import com.amazon.randomcutforest.parkservices.AnomalyDescriptor; import com.amazon.randomcutforest.parkservices.ThresholdedRandomCutForest; import com.amazon.randomcutforest.testutils.MultiDimDataWithKey; import com.amazon.randomcutforest.testutils.ShingledMultiDimDataWithKeys; public class ThresholdedImpute implements Example { public static void main(String[] args) throws Exception { new ThresholdedImpute().run(); } @Override public String command() { return "Thresholded_Imputation_example"; } @Override public String description() { return "Thresholded Imputation Example"; } @Override public void run() throws Exception { // Create and populate a random cut forest int shingleSize = 4; int numberOfTrees = 50; int sampleSize = 256; Precision precision = Precision.FLOAT_32; int dataSize = 4 * sampleSize; int baseDimensions = 1; long count = 0; int dropped = 0; int dimensions = baseDimensions * shingleSize; ThresholdedRandomCutForest forest = new ThresholdedRandomCutForest.Builder<>().compact(true) .dimensions(dimensions).randomSeed(0).numberOfTrees(numberOfTrees).shingleSize(shingleSize) .sampleSize(sampleSize).precision(precision).anomalyRate(0.01).imputationMethod(ImputationMethod.RCF) .forestMode(ForestMode.STREAMING_IMPUTE).transformMethod(TransformMethod.NORMALIZE_DIFFERENCE) .autoAdjust(true).build(); long seed = new Random().nextLong(); Random noisePRG = new Random(0); System.out.println("seed = " + seed); MultiDimDataWithKey dataWithKeys = ShingledMultiDimDataWithKeys.getMultiDimData(dataSize + shingleSize - 1, 50, 100, 5, seed, baseDimensions); // as we loop over the data we will be dropping observations with probability // 0.2 // note that as a result the predictor correct method would like be more // error-prone // note that estimation of the number of entries to be imputed is also another // estimation // therefore the overall method may have runaway effects if more values are // dropped. int keyCounter = 0; for (double[] point : dataWithKeys.data) { if (noisePRG.nextDouble() < 0.2 && !((keyCounter < dataWithKeys.changeIndices.length && count == dataWithKeys.changeIndices[keyCounter]))) { dropped++; if (keyCounter < dataWithKeys.changeIndices.length && count == dataWithKeys.changeIndices[keyCounter]) { System.out.println(" dropped sequence " + (count) + " INPUT " + Arrays.toString(point) + " CHANGE " + Arrays.toString(dataWithKeys.changes[keyCounter])); } } else { long newStamp = 100 * count + 2 * noisePRG.nextInt(10) - 5; AnomalyDescriptor result = forest.process(point, newStamp); if (keyCounter < dataWithKeys.changeIndices.length && count == dataWithKeys.changeIndices[keyCounter]) { System.out.println("sequence " + (count) + " INPUT " + Arrays.toString(point) + " CHANGE " + Arrays.toString(dataWithKeys.changes[keyCounter])); ++keyCounter; } if (result.getAnomalyGrade() != 0) { System.out.print("sequence " + (count) + " RESULT value "); for (int i = 0; i < baseDimensions; i++) { System.out.print(result.getCurrentInput()[i] + ", "); } System.out.print("score " + result.getRCFScore() + ", grade " + result.getAnomalyGrade() + ", "); if (result.isExpectedValuesPresent()) { if (result.getRelativeIndex() != 0 && result.isStartOfAnomaly()) { System.out.print(-result.getRelativeIndex() + " steps ago, instead of "); for (int i = 0; i < baseDimensions; i++) { System.out.print(result.getPastValues()[i] + ", "); } System.out.print("expected "); for (int i = 0; i < baseDimensions; i++) { System.out.print(result.getExpectedValuesList()[0][i] + ", "); if (result.getPastValues()[i] != result.getExpectedValuesList()[0][i]) { System.out.print( "( " + (result.getPastValues()[i] - result.getExpectedValuesList()[0][i]) + " ) "); } } } else { System.out.print("expected "); for (int i = 0; i < baseDimensions; i++) { System.out.print(result.getExpectedValuesList()[0][i] + ", "); if (result.getCurrentInput()[i] != result.getExpectedValuesList()[0][i]) { System.out.print( "( " + (result.getCurrentInput()[i] - result.getExpectedValuesList()[0][i]) + " ) "); } } } } System.out.println(); } } ++count; } System.out.println("Dropped " + dropped + " out of " + count); } } ================================================ FILE: Java/examples/src/main/java/com/amazon/randomcutforest/examples/parkservices/ThresholdedInternalShinglingExample.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.examples.parkservices; import static com.amazon.randomcutforest.CommonUtils.checkArgument; import java.util.Arrays; import java.util.Random; import com.amazon.randomcutforest.config.ForestMode; import com.amazon.randomcutforest.config.Precision; import com.amazon.randomcutforest.config.TransformMethod; import com.amazon.randomcutforest.examples.Example; import com.amazon.randomcutforest.parkservices.AnomalyDescriptor; import com.amazon.randomcutforest.parkservices.ThresholdedRandomCutForest; import com.amazon.randomcutforest.testutils.MultiDimDataWithKey; import com.amazon.randomcutforest.testutils.ShingledMultiDimDataWithKeys; public class ThresholdedInternalShinglingExample implements Example { public static void main(String[] args) throws Exception { new ThresholdedInternalShinglingExample().run(); } @Override public String command() { return "Thresholded_Multi_Dim_example"; } @Override public String description() { return "Thresholded Multi Dimensional Example"; } @Override public void run() throws Exception { // Create and populate a random cut forest int shingleSize = 4; int numberOfTrees = 50; int sampleSize = 256; Precision precision = Precision.FLOAT_32; int dataSize = 4 * sampleSize; // change this to try different number of attributes, // this parameter is not expected to be larger than 5 for this example int baseDimensions = 1; long count = 0; int dimensions = baseDimensions * shingleSize; TransformMethod transformMethod = TransformMethod.NORMALIZE_DIFFERENCE; ThresholdedRandomCutForest forest = ThresholdedRandomCutForest.builder().compact(true).dimensions(dimensions) .randomSeed(0).numberOfTrees(numberOfTrees).shingleSize(shingleSize).sampleSize(sampleSize) .internalShinglingEnabled(true).precision(precision).anomalyRate(0.01).forestMode(ForestMode.STANDARD) .weightTime(0).transformMethod(transformMethod).normalizeTime(true).outputAfter(32) .initialAcceptFraction(0.125).build(); ThresholdedRandomCutForest second = ThresholdedRandomCutForest.builder().compact(true).dimensions(dimensions) .randomSeed(0).numberOfTrees(numberOfTrees).shingleSize(shingleSize).sampleSize(sampleSize) .internalShinglingEnabled(true).precision(precision).anomalyRate(0.01) .forestMode(ForestMode.TIME_AUGMENTED).weightTime(0).transformMethod(transformMethod) .normalizeTime(true).outputAfter(32).initialAcceptFraction(0.125).build(); // ensuring that the parameters are the same; otherwise the grades/scores cannot // be the same // weighTime has to be 0 forest.setLowerThreshold(1.1); second.setLowerThreshold(1.1); forest.setHorizon(0.75); second.setHorizon(0.75); long seed = new Random().nextLong(); Random noise = new Random(0); System.out.println("seed = " + seed); // change the last argument seed for a different run MultiDimDataWithKey dataWithKeys = ShingledMultiDimDataWithKeys.getMultiDimData(dataSize + shingleSize - 1, 50, 100, 5, seed, baseDimensions); int keyCounter = 0; for (double[] point : dataWithKeys.data) { // idea is that we expect the arrival order to be roughly 100 apart (say // seconds) // then the noise corresponds to a jitter; one can try TIME_AUGMENTED and // .normalizeTime(true) long timestamp = 100 * count + noise.nextInt(10) - 5; AnomalyDescriptor result = forest.process(point, timestamp); AnomalyDescriptor test = second.process(point, timestamp); checkArgument(Math.abs(result.getRCFScore() - test.getRCFScore()) < 1e-10, " error"); checkArgument(Math.abs(result.getAnomalyGrade() - test.getAnomalyGrade()) < 1e-10, " error"); if (keyCounter < dataWithKeys.changeIndices.length && count == dataWithKeys.changeIndices[keyCounter]) { System.out .println("timestamp " + count + " CHANGE " + Arrays.toString(dataWithKeys.changes[keyCounter])); ++keyCounter; } if (result.getAnomalyGrade() != 0) { System.out.print("timestamp " + count + " RESULT value " + result.getInternalTimeStamp() + " "); for (int i = 0; i < baseDimensions; i++) { System.out.print(result.getCurrentInput()[i] + ", "); } System.out.print("score " + result.getRCFScore() + ", grade " + result.getAnomalyGrade() + ", "); if (result.getRelativeIndex() != 0 && result.isStartOfAnomaly()) { System.out.print(-result.getRelativeIndex() + " steps ago, "); } if (result.isExpectedValuesPresent()) { if (result.getRelativeIndex() != 0 && result.isStartOfAnomaly()) { System.out.print("instead of "); for (int i = 0; i < baseDimensions; i++) { System.out.print(result.getPastValues()[i] + ", "); } System.out.print("expected "); for (int i = 0; i < baseDimensions; i++) { System.out.print(result.getExpectedValuesList()[0][i] + ", "); if (result.getPastValues()[i] != result.getExpectedValuesList()[0][i]) { System.out.print("( " + (result.getPastValues()[i] - result.getExpectedValuesList()[0][i]) + " ) "); } } } else { System.out.print("expected "); for (int i = 0; i < baseDimensions; i++) { System.out.print(result.getExpectedValuesList()[0][i] + ", "); if (result.getCurrentInput()[i] != result.getExpectedValuesList()[0][i]) { System.out.print("( " + (result.getCurrentInput()[i] - result.getExpectedValuesList()[0][i]) + " ) "); } } } } else { System.out.print("insufficient data to provide expected values"); } System.out.println(); } ++count; } } } ================================================ FILE: Java/examples/src/main/java/com/amazon/randomcutforest/examples/parkservices/ThresholdedMultiDimensionalExample.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.examples.parkservices; import java.util.Arrays; import java.util.Random; import com.amazon.randomcutforest.config.TransformMethod; import com.amazon.randomcutforest.examples.Example; import com.amazon.randomcutforest.parkservices.AnomalyDescriptor; import com.amazon.randomcutforest.parkservices.ThresholdedRandomCutForest; import com.amazon.randomcutforest.parkservices.config.CorrectionMode; import com.amazon.randomcutforest.testutils.MultiDimDataWithKey; import com.amazon.randomcutforest.testutils.ShingledMultiDimDataWithKeys; public class ThresholdedMultiDimensionalExample implements Example { public static void main(String[] args) throws Exception { new ThresholdedMultiDimensionalExample().run(); } @Override public String command() { return "Thresholded_Multi_Dim_example"; } @Override public String description() { return "Thresholded Multi Dimensional Example"; } @Override public void run() throws Exception { // Create and populate a random cut forest int shingleSize = 8; int numberOfTrees = 50; int sampleSize = 256; int dataSize = 4 * sampleSize; // change this to try different number of attributes, // this parameter is not expected to be larger than 5 for this example int baseDimensions = 3; int dimensions = baseDimensions * shingleSize; ThresholdedRandomCutForest forest = ThresholdedRandomCutForest.builder() // dimensions is shingleSize x the number of base dimensions in input (in this // case 3) .dimensions(dimensions) // shingle size is the context (sliding) window of last contiguous observations .shingleSize(shingleSize) // fixed random seed would produce deterministic/reproducible results .randomSeed(0) // use about 50; more than 100 may not be useful .numberOfTrees(numberOfTrees) // samplesize should be large enough to cover the desired phenomenon; for a // 5-minute // interval reading if one is interested investigating anomalies over a weekly // pattern // there are 12 * 24 * 7 different // 5-minute intervals in a week. That being said, larger samplesize is a larger // model. .sampleSize(sampleSize) // shingling is now performed internally by default -- best not to change it // .internalShinglingEnabled(true) // change to different streaming transformations that are performed on the fly // note the transformation affects the characteristics of the anomaly that can // be // detected .transformMethod(TransformMethod.NORMALIZE) // the following would increase precision at the cost of recall // for the reverse, try ScoringStrategy.MULTI_MODE_RECALL // the default strategy is an attempted goldilocks version and may not work // for all data // .scoringStrategy(ScoringStrategy.MULTI_MODE) // the following will learn data (concept) drifts (also referered to as level // shifts) automatically and // stop repeated alarms. The reverse is also true -- to detect level shifts, set // the following to false // and test for continuous alarms .autoAdjust(true) // the following is a much coarser tool to eliminate repeated alarms // the descriptor below 'result' will contain information about different // correction/suppression modes // .alertOnce(true) .build(); long seed = new Random().nextLong(); System.out.println("seed = " + seed); // basic amplitude of the waves -- the parameter will be randomly scaled up // between 0-20 percent double amplitude = 100.0; // the amplitude of random noise it will be +ve/-ve uniformly at random double noise = 5.0; // the following controls the ratio of anomaly magnitude to noise // notice amplitude/noise would determine signal-to-noise ratio double anomalyFactor = 5; // the following determines if a random linear trend should be added boolean useSlope = false; // provide explanations and alternatives considered for non-anomalies boolean verboseSupression = true; // change the last argument seed for a different run MultiDimDataWithKey dataWithKeys = ShingledMultiDimDataWithKeys.getMultiDimData(dataSize + shingleSize - 1, 24, amplitude, noise, seed, baseDimensions, anomalyFactor, useSlope); int keyCounter = 0; int count = 0; for (double[] point : dataWithKeys.data) { AnomalyDescriptor result = forest.process(point, 0L); if (keyCounter < dataWithKeys.changeIndices.length && count == dataWithKeys.changeIndices[keyCounter]) { System.out.println( "timestamp " + (count) + " CHANGE " + Arrays.toString(dataWithKeys.changes[keyCounter])); ++keyCounter; } if (result.getAnomalyGrade() != 0) { System.out.print("timestamp " + (count) + " RESULT value "); for (int i = 0; i < baseDimensions; i++) { System.out.print(point[i] + ", "); } System.out.print("score " + result.getRCFScore() + ", grade " + result.getAnomalyGrade() + ", "); if (result.isExpectedValuesPresent()) { if (result.getRelativeIndex() != 0 && result.isStartOfAnomaly()) { System.out.print(-result.getRelativeIndex() + " steps ago, instead of "); for (int i = 0; i < baseDimensions; i++) { System.out.print(result.getPastValues()[i] + ", "); } System.out.print("expected "); for (int i = 0; i < baseDimensions; i++) { System.out.print(result.getExpectedValuesList()[0][i] + ", "); if (result.getPastValues()[i] != result.getExpectedValuesList()[0][i]) { System.out.print("( " + (result.getPastValues()[i] - result.getExpectedValuesList()[0][i]) + " ) "); } } } else { System.out.print("expected "); for (int i = 0; i < baseDimensions; i++) { System.out.print(result.getExpectedValuesList()[0][i] + ", "); if (point[i] != result.getExpectedValuesList()[0][i]) { System.out.print("( inferred change = " + (point[i] - result.getExpectedValuesList()[0][i]) + " ) "); } } } } System.out.println(); } else if (verboseSupression && result.getCorrectionMode() != CorrectionMode.NONE) { System.out.println(count + " corrected via " + result.getCorrectionMode().name()); } ++count; } } } ================================================ FILE: Java/examples/src/main/java/com/amazon/randomcutforest/examples/parkservices/ThresholdedPredictive.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.examples.parkservices; import java.util.Random; import com.amazon.randomcutforest.config.Precision; import com.amazon.randomcutforest.config.TransformMethod; import com.amazon.randomcutforest.examples.Example; import com.amazon.randomcutforest.parkservices.ThresholdedRandomCutForest; import com.amazon.randomcutforest.returntypes.RangeVector; import com.amazon.randomcutforest.testutils.MultiDimDataWithKey; import com.amazon.randomcutforest.testutils.ShingledMultiDimDataWithKeys; public class ThresholdedPredictive implements Example { public static void main(String[] args) throws Exception { new com.amazon.randomcutforest.examples.parkservices.ThresholdedPredictive().run(); } @Override public String command() { return "Thresholded_Predictive_example"; } @Override public String description() { return "Example of predictive forecast across multiple time series using ThresholdedRCF"; } @Override public void run() throws Exception { int sampleSize = 256; int baseDimensions = 1; int length = 4 * sampleSize; int outputAfter = 128; long seed = 2022L; Random random = new Random(seed); int numberOfModels = 10; MultiDimDataWithKey[] dataWithKeys = new MultiDimDataWithKey[numberOfModels]; ThresholdedRandomCutForest[] forests = new ThresholdedRandomCutForest[numberOfModels]; int[] period = new int[numberOfModels]; double alertThreshold = 300; double lastActualSum = 0; int anomalies = 0; for (int k = 0; k < numberOfModels; k++) { period[k] = (int) Math.round(40 + 30 * random.nextDouble()); dataWithKeys[k] = ShingledMultiDimDataWithKeys.getMultiDimData(length, period[k], 100, 10, seed, baseDimensions, false); anomalies += dataWithKeys[k].changes.length; } System.out.println(anomalies + " anomalies injected "); int shingleSize = 10; int horizon = 20; for (int k = 0; k < numberOfModels; k++) { forests[k] = new ThresholdedRandomCutForest.Builder<>().compact(true) .dimensions(baseDimensions * shingleSize).precision(Precision.FLOAT_32).randomSeed(seed + k) .internalShinglingEnabled(true).shingleSize(shingleSize).outputAfter(outputAfter) .transformMethod(TransformMethod.NORMALIZE).build(); } boolean predictNextCrossing = true; boolean actualCrossingAlerted = false; boolean printPredictions = false; boolean printEvents = true; for (int i = 0; i < length; i++) { double[] prediction = new double[horizon]; // any prediction needs suffient data // it's best to suggest 0 till such if (i > sampleSize) { for (int k = 0; k < numberOfModels; k++) { RangeVector forecast = forests[k].extrapolate(horizon).rangeVector; for (int t = 0; t < horizon; t++) { prediction[t] += forecast.values[t]; } } if (prediction[horizon - 1] > alertThreshold && predictNextCrossing) { if (printEvents) { System.out.println("Currently at " + i + ", should cross " + alertThreshold + " at sequence " + (i + horizon - 1)); } predictNextCrossing = false; } else if (prediction[horizon - 1] < alertThreshold && !predictNextCrossing) { predictNextCrossing = true; } if (printPredictions) { for (int t = 0; t < horizon; t++) { System.out.println((i + t) + " " + prediction[t]); } System.out.println(); System.out.println(); } } // now look at actuals double sumValue = 0; for (int k = 0; k < numberOfModels; k++) { sumValue += dataWithKeys[k].data[i][0]; } if (lastActualSum > alertThreshold && sumValue > alertThreshold) { if (!actualCrossingAlerted) { if (printEvents) { System.out.println(" Crossing " + alertThreshold + " at consecutive sequence indices " + (i - 1) + " " + i); } actualCrossingAlerted = true; } } else if (sumValue < alertThreshold) { actualCrossingAlerted = false; } lastActualSum = sumValue; // update model for (int k = 0; k < numberOfModels; k++) { forests[k].process(dataWithKeys[k].data[i], 0L); } } } } ================================================ FILE: Java/examples/src/main/java/com/amazon/randomcutforest/examples/parkservices/ThresholdedRCFJsonExample.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.examples.parkservices; import java.util.Random; import com.amazon.randomcutforest.config.TransformMethod; import com.amazon.randomcutforest.examples.Example; import com.amazon.randomcutforest.parkservices.AnomalyDescriptor; import com.amazon.randomcutforest.parkservices.ThresholdedRandomCutForest; import com.amazon.randomcutforest.parkservices.state.ThresholdedRandomCutForestMapper; import com.amazon.randomcutforest.parkservices.state.ThresholdedRandomCutForestState; import com.amazon.randomcutforest.testutils.ShingledMultiDimDataWithKeys; import com.fasterxml.jackson.databind.ObjectMapper; /** * Serialize a Random Cut Forest to JSON using * Jackson. */ public class ThresholdedRCFJsonExample implements Example { public static void main(String[] args) throws Exception { new ThresholdedRCFJsonExample().run(); } @Override public String command() { return "json"; } @Override public String description() { return "serialize a Thresholded Random Cut Forest as a JSON string"; } @Override public void run() throws Exception { // Create and populate a random cut forest int baseDimension = 2; int shingleSize = 8; int numberOfTrees = 50; int sampleSize = 256; long seed = new Random().nextLong(); System.out.println("seed :" + seed); Random rng = new Random(seed); int dimensions = baseDimension * shingleSize; ThresholdedRandomCutForest forest = ThresholdedRandomCutForest.builder().dimensions(dimensions) .shingleSize(shingleSize).transformMethod(TransformMethod.NORMALIZE).numberOfTrees(numberOfTrees) .sampleSize(sampleSize).build(); int dataSize = 4 * sampleSize; int testSize = sampleSize; double[][] data = ShingledMultiDimDataWithKeys.getMultiDimData(dataSize + shingleSize - 1, 50, 100, 5, rng.nextLong(), baseDimension, 5.0, false).data; for (int i = 0; i < data.length - testSize; i++) { forest.process(data[i], 0L); } // Convert to JSON and print the number of bytes ThresholdedRandomCutForestMapper mapper = new ThresholdedRandomCutForestMapper(); ObjectMapper jsonMapper = new ObjectMapper(); String json = jsonMapper.writeValueAsString(mapper.toState(forest)); System.out.printf("JSON size = %d bytes%n", json.getBytes().length); // Restore from JSON and compare anomaly scores produced by the two forests ThresholdedRandomCutForest forest2 = mapper .toModel(jsonMapper.readValue(json, ThresholdedRandomCutForestState.class)); for (int i = data.length; i < data.length; i++) { AnomalyDescriptor result = forest.process(data[i], 0L); AnomalyDescriptor shadow = forest2.process(data[i], 0L); assert (Math.abs(result.getRCFScore() - shadow.getRCFScore()) < 1e-6); } System.out.println("Looks good!"); } } ================================================ FILE: Java/examples/src/main/java/com/amazon/randomcutforest/examples/parkservices/ThresholdedTime.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.examples.parkservices; import java.util.Random; import com.amazon.randomcutforest.config.ForestMode; import com.amazon.randomcutforest.config.Precision; import com.amazon.randomcutforest.examples.Example; import com.amazon.randomcutforest.parkservices.AnomalyDescriptor; import com.amazon.randomcutforest.parkservices.ThresholdedRandomCutForest; import com.amazon.randomcutforest.testutils.MultiDimDataWithKey; import com.amazon.randomcutforest.testutils.NormalMixtureTestData; public class ThresholdedTime implements Example { public static void main(String[] args) throws Exception { new ThresholdedTime().run(); } @Override public String command() { return "Thresholded_Time_example"; } @Override public String description() { return "Thresholded Time Example"; } @Override public void run() throws Exception { // Create and populate a random cut forest int shingleSize = 4; int numberOfTrees = 50; int sampleSize = 256; Precision precision = Precision.FLOAT_32; int dataSize = 4 * sampleSize; // change this to try different number of attributes, // this parameter is not expected to be larger than 5 for this example int baseDimensions = 1; int count = 0; int dimensions = baseDimensions * shingleSize; ThresholdedRandomCutForest forest = new ThresholdedRandomCutForest.Builder<>().compact(true) .dimensions(dimensions).randomSeed(0).numberOfTrees(numberOfTrees).shingleSize(shingleSize) .sampleSize(sampleSize).internalShinglingEnabled(true).precision(precision).anomalyRate(0.01) .forestMode(ForestMode.TIME_AUGMENTED).normalizeTime(true).build(); long seed = new Random().nextLong(); double[] data = new double[] { 1.0 }; System.out.println("seed = " + seed); NormalMixtureTestData normalMixtureTestData = new NormalMixtureTestData(10, 50); MultiDimDataWithKey dataWithKeys = normalMixtureTestData.generateTestDataWithKey(dataSize, 1, 0); /** * the anomalies will move from normal -> anomalous -> normal starts from normal */ boolean anomalyState = false; int keyCounter = 0; for (double[] point : dataWithKeys.data) { long time = (long) (1000L * count + Math.floor(10 * point[0])); AnomalyDescriptor result = forest.process(data, time); if (keyCounter < dataWithKeys.changeIndices.length && count == dataWithKeys.changeIndices[keyCounter]) { System.out.print("Sequence " + count + " stamp " + (result.getInternalTimeStamp()) + " CHANGE "); if (!anomalyState) { System.out.println(" to Distribution 1 "); } else { System.out.println(" to Distribution 0 "); } anomalyState = !anomalyState; ++keyCounter; } if (result.getAnomalyGrade() != 0) { System.out.print("Sequence " + count + " stamp " + (result.getInternalTimeStamp()) + " RESULT "); System.out.print("score " + result.getRCFScore() + ", grade " + result.getAnomalyGrade() + ", "); if (result.isExpectedValuesPresent()) { if (result.getRelativeIndex() != 0 && result.isStartOfAnomaly()) { System.out.print(-result.getRelativeIndex() + " steps ago, instead of stamp " + result.getPastTimeStamp()); System.out.print(", expected timestamp " + result.getExpectedTimeStamp() + " ( " + (result.getPastTimeStamp() - result.getExpectedTimeStamp() + ")")); } else { System.out.print("expected " + result.getExpectedTimeStamp() + " ( " + (result.getInternalTimeStamp() - result.getExpectedTimeStamp() + ")")); } } System.out.println(); } ++count; } } } ================================================ FILE: Java/examples/src/main/java/com/amazon/randomcutforest/examples/serialization/JsonExample.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.examples.serialization; import com.amazon.randomcutforest.RandomCutForest; import com.amazon.randomcutforest.config.Precision; import com.amazon.randomcutforest.examples.Example; import com.amazon.randomcutforest.state.RandomCutForestMapper; import com.amazon.randomcutforest.state.RandomCutForestState; import com.amazon.randomcutforest.testutils.NormalMixtureTestData; import com.fasterxml.jackson.databind.ObjectMapper; /** * Serialize a Random Cut Forest to JSON using * Jackson. */ public class JsonExample implements Example { public static void main(String[] args) throws Exception { new JsonExample().run(); } @Override public String command() { return "json"; } @Override public String description() { return "serialize a Random Cut Forest as a JSON string"; } @Override public void run() throws Exception { // Create and populate a random cut forest int dimensions = 4; int numberOfTrees = 50; int sampleSize = 256; Precision precision = Precision.FLOAT_64; RandomCutForest forest = RandomCutForest.builder().compact(true).dimensions(dimensions) .numberOfTrees(numberOfTrees).sampleSize(sampleSize).precision(precision).build(); int dataSize = 4 * sampleSize; NormalMixtureTestData testData = new NormalMixtureTestData(); for (double[] point : testData.generateTestData(dataSize, dimensions)) { forest.update(point); } // Convert to JSON and print the number of bytes RandomCutForestMapper mapper = new RandomCutForestMapper(); mapper.setSaveExecutorContextEnabled(true); ObjectMapper jsonMapper = new ObjectMapper(); String json = jsonMapper.writeValueAsString(mapper.toState(forest)); System.out.printf("dimensions = %d, numberOfTrees = %d, sampleSize = %d, precision = %s%n", dimensions, numberOfTrees, sampleSize, precision); System.out.printf("JSON size = %d bytes%n", json.getBytes().length); // Restore from JSON and compare anomaly scores produced by the two forests RandomCutForest forest2 = mapper.toModel(jsonMapper.readValue(json, RandomCutForestState.class)); int testSize = 100; double delta = Math.log(sampleSize) / Math.log(2) * 0.05; int differences = 0; int anomalies = 0; for (double[] point : testData.generateTestData(testSize, dimensions)) { double score = forest.getAnomalyScore(point); double score2 = forest2.getAnomalyScore(point); // we mostly care that points that are scored as an anomaly by one forest are // also scored as an anomaly by the other forest if (score > 1 || score2 > 1) { anomalies++; if (Math.abs(score - score2) > delta) { differences++; } } forest.update(point); forest2.update(point); } // first validate that this was a nontrivial test if (anomalies == 0) { throw new IllegalStateException("test data did not produce any anomalies"); } // validate that the two forests agree on anomaly scores if (differences >= 0.01 * testSize) { throw new IllegalStateException("restored forest does not agree with original forest"); } System.out.println("Looks good!"); } } ================================================ FILE: Java/examples/src/main/java/com/amazon/randomcutforest/examples/serialization/ObjectStreamExample.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.examples.serialization; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import com.amazon.randomcutforest.RandomCutForest; import com.amazon.randomcutforest.config.Precision; import com.amazon.randomcutforest.examples.Example; import com.amazon.randomcutforest.state.RandomCutForestMapper; import com.amazon.randomcutforest.state.RandomCutForestState; import com.amazon.randomcutforest.testutils.NormalMixtureTestData; public class ObjectStreamExample implements Example { public static void main(String[] args) throws Exception { new ObjectStreamExample().run(); } @Override public String command() { return "object_stream"; } @Override public String description() { return "serialize a Random Cut Forest with object stream"; } @Override public void run() throws Exception { // Create and populate a random cut forest int dimensions = 10; int numberOfTrees = 50; int sampleSize = 256; Precision precision = Precision.FLOAT_32; RandomCutForest forest = RandomCutForest.builder().compact(true).dimensions(dimensions) .numberOfTrees(numberOfTrees).sampleSize(sampleSize).precision(precision).build(); int dataSize = 1000 * sampleSize; NormalMixtureTestData testData = new NormalMixtureTestData(); for (double[] point : testData.generateTestData(dataSize, dimensions)) { forest.update(point); } // Convert to an array of bytes and print the size RandomCutForestMapper mapper = new RandomCutForestMapper(); mapper.setSaveExecutorContextEnabled(true); System.out.printf("dimensions = %d, numberOfTrees = %d, sampleSize = %d, precision = %s%n", dimensions, numberOfTrees, sampleSize, precision); byte[] bytes = serialize(mapper.toState(forest)); System.out.printf("Object output stream size = %d bytes%n", bytes.length); // Restore from object stream and compare anomaly scores produced by the two // forests RandomCutForestState state2 = (RandomCutForestState) deserialize(bytes); RandomCutForest forest2 = mapper.toModel(state2); int testSize = 100; double delta = Math.log(sampleSize) / Math.log(2) * 0.05; int differences = 0; int anomalies = 0; for (double[] point : testData.generateTestData(testSize, dimensions)) { double score = forest.getAnomalyScore(point); double score2 = forest2.getAnomalyScore(point); // we mostly care that points that are scored as an anomaly by one forest are // also scored as an anomaly by the other forest if (score > 1 || score2 > 1) { anomalies++; if (Math.abs(score - score2) > delta) { differences++; } } forest.update(point); forest2.update(point); } // first validate that this was a nontrivial test if (anomalies == 0) { throw new IllegalStateException("test data did not produce any anomalies"); } // validate that the two forests agree on anomaly scores if (differences >= 0.01 * testSize) { throw new IllegalStateException("restored forest does not agree with original forest"); } System.out.println("Looks good!"); } private byte[] serialize(Object model) { try (ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); ObjectOutputStream objectOutputStream = new ObjectOutputStream(byteArrayOutputStream)) { objectOutputStream.writeObject(model); objectOutputStream.flush(); return byteArrayOutputStream.toByteArray(); } catch (IOException e) { throw new RuntimeException("Failed to serialize model.", e.getCause()); } } private Object deserialize(byte[] modelBin) { try (ObjectInputStream objectInputStream = new ObjectInputStream(new ByteArrayInputStream(modelBin))) { return objectInputStream.readObject(); } catch (IOException | ClassNotFoundException e) { throw new RuntimeException("Failed to deserialize model.", e.getCause()); } } } ================================================ FILE: Java/examples/src/main/java/com/amazon/randomcutforest/examples/serialization/ProtostuffExample.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.examples.serialization; import com.amazon.randomcutforest.RandomCutForest; import com.amazon.randomcutforest.config.Precision; import com.amazon.randomcutforest.examples.Example; import com.amazon.randomcutforest.state.RandomCutForestMapper; import com.amazon.randomcutforest.state.RandomCutForestState; import com.amazon.randomcutforest.testutils.NormalMixtureTestData; import io.protostuff.LinkedBuffer; import io.protostuff.ProtostuffIOUtil; import io.protostuff.Schema; import io.protostuff.runtime.RuntimeSchema; /** * Serialize a Random Cut Forest using the * protostuff library. */ public class ProtostuffExample implements Example { public static void main(String[] args) throws Exception { new ProtostuffExample().run(); } @Override public String command() { return "protostuff"; } @Override public String description() { return "serialize a Random Cut Forest with the protostuff library"; } @Override public void run() throws Exception { // Create and populate a random cut forest int dimensions = 10; int numberOfTrees = 50; int sampleSize = 256; Precision precision = Precision.FLOAT_32; RandomCutForest forest = RandomCutForest.builder().compact(true).dimensions(dimensions) .numberOfTrees(numberOfTrees).sampleSize(sampleSize).precision(precision).build(); int dataSize = 1000 * sampleSize; NormalMixtureTestData testData = new NormalMixtureTestData(); for (double[] point : testData.generateTestData(dataSize, dimensions)) { forest.update(point); } // Convert to an array of bytes and print the size RandomCutForestMapper mapper = new RandomCutForestMapper(); mapper.setSaveExecutorContextEnabled(true); Schema schema = RuntimeSchema.getSchema(RandomCutForestState.class); LinkedBuffer buffer = LinkedBuffer.allocate(512); byte[] bytes; try { RandomCutForestState state = mapper.toState(forest); bytes = ProtostuffIOUtil.toByteArray(state, schema, buffer); } finally { buffer.clear(); } System.out.printf("dimensions = %d, numberOfTrees = %d, sampleSize = %d, precision = %s%n", dimensions, numberOfTrees, sampleSize, precision); System.out.printf("protostuff size = %d bytes%n", bytes.length); // Restore from protostuff and compare anomaly scores produced by the two // forests RandomCutForestState state2 = schema.newMessage(); ProtostuffIOUtil.mergeFrom(bytes, state2, schema); RandomCutForest forest2 = mapper.toModel(state2); int testSize = 100; double delta = Math.log(sampleSize) / Math.log(2) * 0.05; int differences = 0; int anomalies = 0; for (double[] point : testData.generateTestData(testSize, dimensions)) { double score = forest.getAnomalyScore(point); double score2 = forest2.getAnomalyScore(point); // we mostly care that points that are scored as an anomaly by one forest are // also scored as an anomaly by the other forest if (score > 1 || score2 > 1) { anomalies++; if (Math.abs(score - score2) > delta) { differences++; } } forest.update(point); forest2.update(point); } // first validate that this was a nontrivial test if (anomalies == 0) { throw new IllegalStateException("test data did not produce any anomalies"); } // validate that the two forests agree on anomaly scores if (differences >= 0.01 * testSize) { throw new IllegalStateException("restored forest does not agree with original forest"); } System.out.println("Looks good!"); } } ================================================ FILE: Java/examples/src/main/java/com/amazon/randomcutforest/examples/serialization/ProtostuffExampleWithDynamicLambda.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.examples.serialization; import com.amazon.randomcutforest.RandomCutForest; import com.amazon.randomcutforest.config.Precision; import com.amazon.randomcutforest.examples.Example; import com.amazon.randomcutforest.executor.SamplerPlusTree; import com.amazon.randomcutforest.sampler.CompactSampler; import com.amazon.randomcutforest.state.RandomCutForestMapper; import com.amazon.randomcutforest.state.RandomCutForestState; import com.amazon.randomcutforest.testutils.NormalMixtureTestData; import io.protostuff.LinkedBuffer; import io.protostuff.ProtostuffIOUtil; import io.protostuff.Schema; import io.protostuff.runtime.RuntimeSchema; /** * Serialize a Random Cut Forest using the * protostuff library. */ public class ProtostuffExampleWithDynamicLambda implements Example { public static void main(String[] args) throws Exception { new ProtostuffExampleWithDynamicLambda().run(); } @Override public String command() { return "protostuff_dynamic"; } @Override public String description() { return "serialize a Random Cut Forest with the protostuff library"; } @Override public void run() throws Exception { // Create and populate a random cut forest int dimensions = 4; int numberOfTrees = 50; int sampleSize = 256; Precision precision = Precision.FLOAT_64; RandomCutForest forest = RandomCutForest.builder().compact(true).dimensions(dimensions) .numberOfTrees(numberOfTrees).sampleSize(sampleSize).precision(precision).build(); int dataSize = 4 * sampleSize; NormalMixtureTestData testData = new NormalMixtureTestData(); for (double[] point : testData.generateTestData(dataSize, dimensions)) { forest.update(point); } // Convert to an array of bytes and print the size RandomCutForestMapper mapper = new RandomCutForestMapper(); mapper.setSaveExecutorContextEnabled(true); Schema schema = RuntimeSchema.getSchema(RandomCutForestState.class); LinkedBuffer buffer = LinkedBuffer.allocate(512); byte[] bytes; try { RandomCutForestState state = mapper.toState(forest); bytes = ProtostuffIOUtil.toByteArray(state, schema, buffer); } finally { buffer.clear(); } System.out.printf("dimensions = %d, numberOfTrees = %d, sampleSize = %d, precision = %s%n", dimensions, numberOfTrees, sampleSize, precision); System.out.printf("protostuff size = %d bytes%n", bytes.length); // Restore from protostuff and compare anomaly scores produced by the two // forests RandomCutForestState state2 = schema.newMessage(); ProtostuffIOUtil.mergeFrom(bytes, state2, schema); RandomCutForest forest2 = mapper.toModel(state2); double saveLambda = forest.getTimeDecay(); forest.setTimeDecay(10 * forest.getTimeDecay()); forest2.setTimeDecay(10 * forest2.getTimeDecay()); for (int i = 0; i < numberOfTrees; i++) { CompactSampler sampler = (CompactSampler) ((SamplerPlusTree) forest.getComponents().get(i)).getSampler(); CompactSampler sampler2 = (CompactSampler) ((SamplerPlusTree) forest2.getComponents().get(i)).getSampler(); if (sampler.getMaxSequenceIndex() != sampler2.getMaxSequenceIndex()) { throw new IllegalStateException("Incorrect sampler state"); } if (sampler.getMostRecentTimeDecayUpdate() != sampler2.getMostRecentTimeDecayUpdate()) { throw new IllegalStateException("Incorrect sampler state"); } if (sampler2.getMostRecentTimeDecayUpdate() != dataSize - 1) { throw new IllegalStateException("Incorrect sampler state"); } } int testSize = 100; double delta = Math.log(sampleSize) / Math.log(2) * 0.05; int differences = 0; int anomalies = 0; for (double[] point : testData.generateTestData(testSize, dimensions)) { double score = forest.getAnomalyScore(point); double score2 = forest2.getAnomalyScore(point); // we mostly care that points that are scored as an anomaly by one forest are // also scored as an anomaly by the other forest if (score > 1 || score2 > 1) { anomalies++; if (Math.abs(score - score2) > delta) { differences++; } } forest.update(point); forest2.update(point); } // first validate that this was a nontrivial test if (anomalies == 0) { throw new IllegalStateException("test data did not produce any anomalies"); } // validate that the two forests agree on anomaly scores if (differences >= 0.01 * testSize) { throw new IllegalStateException("restored forest does not agree with original forest"); } System.out.println("Looks good!"); } } ================================================ FILE: Java/examples/src/main/java/com/amazon/randomcutforest/examples/serialization/ProtostuffExampleWithShingles.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.examples.serialization; import static java.lang.Math.PI; import java.util.Random; import com.amazon.randomcutforest.RandomCutForest; import com.amazon.randomcutforest.config.Precision; import com.amazon.randomcutforest.examples.Example; import com.amazon.randomcutforest.state.RandomCutForestMapper; import com.amazon.randomcutforest.state.RandomCutForestState; import io.protostuff.LinkedBuffer; import io.protostuff.ProtostuffIOUtil; import io.protostuff.Schema; import io.protostuff.runtime.RuntimeSchema; /** * Serialize a Random Cut Forest using the * protostuff library. */ public class ProtostuffExampleWithShingles implements Example { public static void main(String[] args) throws Exception { new ProtostuffExampleWithShingles().run(); } @Override public String command() { return "protostuffWithShingles"; } @Override public String description() { return "serialize a Random Cut Forest with the protostuff library for shingled points"; } @Override public void run() throws Exception { // Create and populate a random cut forest int dimensions = 10; int numberOfTrees = 50; int sampleSize = 256; Precision precision = Precision.FLOAT_64; RandomCutForest forest = RandomCutForest.builder().compact(true).dimensions(dimensions) .numberOfTrees(numberOfTrees).sampleSize(sampleSize).precision(precision).shingleSize(dimensions) .build(); int count = 1; int dataSize = 1000 * sampleSize; for (double[] point : generateShingledData(dataSize, dimensions, 0)) { forest.update(point); } // Convert to an array of bytes and print the size RandomCutForestMapper mapper = new RandomCutForestMapper(); mapper.setSaveExecutorContextEnabled(true); mapper.setSaveTreeStateEnabled(false); Schema schema = RuntimeSchema.getSchema(RandomCutForestState.class); LinkedBuffer buffer = LinkedBuffer.allocate(512); byte[] bytes; try { RandomCutForestState state = mapper.toState(forest); bytes = ProtostuffIOUtil.toByteArray(state, schema, buffer); } finally { buffer.clear(); } System.out.printf("dimensions = %d, numberOfTrees = %d, sampleSize = %d, precision = %s%n", dimensions, numberOfTrees, sampleSize, precision); System.out.printf("protostuff size = %d bytes%n", bytes.length); // Restore from protostuff and compare anomaly scores produced by the two // forests RandomCutForestState state2 = schema.newMessage(); ProtostuffIOUtil.mergeFrom(bytes, state2, schema); RandomCutForest forest2 = mapper.toModel(state2); int testSize = 10000; double delta = Math.log(sampleSize) / Math.log(2) * 0.05; int differences = 0; int anomalies = 0; for (double[] point : generateShingledData(testSize, dimensions, 2)) { double score = forest.getAnomalyScore(point); double score2 = forest2.getAnomalyScore(point); // we mostly care that points that are scored as an anomaly by one forest are // also scored as an anomaly by the other forest if (score > 1 || score2 > 1) { anomalies++; if (Math.abs(score - score2) > delta) { differences++; } } forest.update(point); forest2.update(point); } // validate that the two forests agree on anomaly scores if (differences >= 0.01 * testSize) { throw new IllegalStateException("restored forest does not agree with original forest"); } System.out.println("Looks good!"); } private double[][] generateShingledData(int size, int dimensions, long seed) { double[][] answer = new double[size][]; int entryIndex = 0; boolean filledShingleAtleastOnce = false; double[] history = new double[dimensions]; int count = 0; double[] data = getDataD(size + dimensions - 1, 100, 5, seed); for (int j = 0; j < size + dimensions - 1; ++j) { // we stream here .... history[entryIndex] = data[j]; entryIndex = (entryIndex + 1) % dimensions; if (entryIndex == 0) { filledShingleAtleastOnce = true; } if (filledShingleAtleastOnce) { // System.out.println("Adding " + j); answer[count++] = getShinglePoint(history, entryIndex, dimensions); } } return answer; } private static double[] getShinglePoint(double[] recentPointsSeen, int indexOfOldestPoint, int shingleLength) { double[] shingledPoint = new double[shingleLength]; int i = 0; for (int j = 0; j < shingleLength; ++j) { double point = recentPointsSeen[(j + indexOfOldestPoint) % shingleLength]; shingledPoint[i++] = point; } return shingledPoint; } double[] getDataD(int num, double amplitude, double noise, long seed) { double[] data = new double[num]; Random noiseprg = new Random(seed); for (int i = 0; i < num; i++) { data[i] = amplitude * Math.cos(2 * PI * (i + 50) / 1000) + noise * noiseprg.nextDouble(); } return data; } } ================================================ FILE: Java/examples/src/main/java/com/amazon/randomcutforest/examples/summarization/DynamicSummarization.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.examples.summarization; import static com.amazon.randomcutforest.testutils.ExampleDataSets.rotateClockWise; import static java.lang.Math.PI; import java.io.BufferedWriter; import java.io.FileWriter; import java.util.Arrays; import java.util.List; import java.util.Random; import com.amazon.randomcutforest.RandomCutForest; import com.amazon.randomcutforest.examples.Example; import com.amazon.randomcutforest.summarization.ICluster; import com.amazon.randomcutforest.summarization.Summarizer; import com.amazon.randomcutforest.testutils.NormalMixtureTestData; import com.amazon.randomcutforest.util.Weighted; /** * Summarized representation of the stored points provide a convenient view into * the "current state" of the stream seen/sampled by an RCF. However since RCFs * provide a generic sketch for multple different scenrios * https://opensearch.org/blog/odfe-updates/2019/11/random-cut-forests/ the * summarization can be used repeatedly to provide a dynamic clustering a * numeric data stream as shown in the example below. * * The summarization is based on a well-scattered multi-centroid representation * as in CURE https://en.wikipedia.org/wiki/CURE_algorithm and distance based * clustering as in https://en.wikipedia.org/wiki/Data_stream_clustering * * The example corresponds to a wheel like arrangement -- where numberOfBlades * determine the number of spokes. For many settings of the parameter the spokes * are closer to each other near the center than the extremity at the rim. Thus * a centroidal representation cannot conceptually capture each spoke as a * cluster, and multi-centroid approach is necessary. Note that the input to the * summarization is not the same as the numberOfBladed; the maxAllowed number * corresponds to the maximum number of clusters which can be much larger. In a * clustering application, the number of clusters are typically not known * apriori. * * The pointset is generated once and are input to RCF with rotations. As the * "blades are running", the output clusters can be colored and we can visualize * the clusters produced. For the parameters below, simplistic plotting * functions such as gnuplot using do for [i = 0:359] { plot [-15:15][-15:15] * "sum" index i u 1:2:3:4 w circles fill solid noborder fc palette z t "" } * would show the rotating clusters where the representatives corresponding to * the same cluster has the same color. We note that the visualizations is * neither polished nor complete, since the goal is to highlight the * functionality of summarization in RCFs. */ public class DynamicSummarization implements Example { public static void main(String[] args) throws Exception { new DynamicSummarization().run(); } @Override public String command() { return "dynamic_summarization"; } @Override public String description() { return "shows a potential use of dynamic clustering/summarization"; } @Override public void run() throws Exception { int newDimensions = 2; long randomSeed = 123; int dataSize = 1350; int numberOfBlades = 9; RandomCutForest newForest = RandomCutForest.builder().numberOfTrees(100).sampleSize(256) .dimensions(newDimensions).randomSeed(randomSeed).timeDecay(1.0 / 800).centerOfMassEnabled(true) .build(); String name = "dynamic_summarization_example"; BufferedWriter file = new BufferedWriter(new FileWriter(name)); double[][] data = getData(dataSize, 0, numberOfBlades); boolean printData = false; boolean printClusters = true; List> oldSummary = null; int[] oldColors = null; int count = 0; int sum = 0; for (int degree = 0; degree < 360; degree += 1) { for (double[] datum : data) { double[] vec = rotateClockWise(datum, -2 * PI * degree / 360); if (printData) { file.append(vec[0] + " " + vec[1] + "\n"); } newForest.update(vec); } if (printData) { file.append("\n"); file.append("\n"); } List> summary = newForest.summarize(2 * numberOfBlades + 2, 0.05, 5, 0.8, Summarizer::L2distance, oldSummary); sum += summary.size(); System.out.println(degree + " " + summary.size()); if (summary.size() == numberOfBlades) { ++count; } int[] colors = align(summary, oldSummary, oldColors); for (int i = 0; i < summary.size(); i++) { double weight = summary.get(i).getWeight(); for (Weighted representative : summary.get(i).getRepresentatives()) { double t = representative.weight / weight; if (t > 0.05 && printClusters) { file.append(representative.index[0] + " " + representative.index[1] + " " + t + " " + colors[i] + "\n"); } } } if (summary.size() == numberOfBlades) { oldSummary = summary; oldColors = colors; } if (printClusters) { file.append("\n"); file.append("\n"); } } System.out.println("Exact detection :" + ((float) Math.round(count / 3.6) * 0.01) + " fraction, average number of clusters " + ((float) Math.round(sum / 3.6) * 0.01)); file.close(); } public double[][] getData(int dataSize, int seed, int fans) { Random prg = new Random(0); NormalMixtureTestData generator = new NormalMixtureTestData(0.0, 1.0, 0.0, 1.0, 0.0, 1.0); int newDimensions = 2; double[][] data = generator.generateTestData(dataSize, newDimensions, seed); for (int i = 0; i < dataSize; i++) { int nextFan = prg.nextInt(fans); // scale, make an ellipse data[i][1] *= 1.0 / fans; data[i][0] *= 2.0; // shift data[i][0] += 5.0 + fans / 2; data[i] = rotateClockWise(data[i], 2 * PI * nextFan / fans); } return data; } int[] align(List> current, List> previous, int[] oldColors) { int[] nearest = new int[current.size()]; if (previous == null || previous.size() == 0) { for (int i = 0; i < current.size(); i++) { nearest[i] = i; } } else { Arrays.fill(nearest, previous.size() + 1); for (int i = 0; i < current.size(); i++) { double dist = previous.get(0).distance(current.get(i), Summarizer::L1distance); nearest[i] = oldColors[0]; for (int j = 1; j < previous.size(); j++) { double t = previous.get(j).distance(current.get(i), Summarizer::L1distance); if (t < dist) { dist = t; nearest[i] = oldColors[j]; } } } } return nearest; } } ================================================ FILE: Java/examples/src/main/java/com/amazon/randomcutforest/examples/summarization/RCFMultiSummarizeExample.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.examples.summarization; import static com.amazon.randomcutforest.CommonUtils.toFloatArray; import static java.lang.Math.abs; import java.util.Arrays; import java.util.List; import java.util.Random; import java.util.function.BiFunction; import com.amazon.randomcutforest.examples.Example; import com.amazon.randomcutforest.summarization.ICluster; import com.amazon.randomcutforest.summarization.Summarizer; import com.amazon.randomcutforest.testutils.NormalMixtureTestData; import com.amazon.randomcutforest.util.Weighted; /** * centroidal clustering fails in many scenarios; primarily because a single * point in combination with a distance metric can only represent a sphere. A * reasonable solution is to use multiple well scattered centroids to represent * a cluster and has been long in use, see CURE * https://en.wikipedia.org/wiki/CURE_algorithm * * The following example demonstrates the use of a multicentroid clustering; the * data corresponds to 2*d clusters in d dimensions (d chosen randomly) such * that the clusters almost touch, but remain separable. Note that the knowledge * of the true number of clusters is not required -- the clustering is invoked * with a maximum of 5*d potential clusters, and yet the example often finds the * true 2*d clusters. */ public class RCFMultiSummarizeExample implements Example { public static void main(String[] args) throws Exception { new com.amazon.randomcutforest.examples.summarization.RCFMultiSummarizeExample().run(); } @Override public String command() { return "RCF_Multi_Summarize_Example"; } @Override public String description() { return "Example of using RCF Multi Summarization"; } @Override public void run() throws Exception { long seed = new Random().nextLong(); Random random = new Random(seed); int newDimensions = random.nextInt(10) + 3; int dataSize = 200000; float[][] points = getData(dataSize, newDimensions, random.nextInt(), Summarizer::L2distance); double epsilon = 0.01; List> summary = Summarizer.multiSummarize(points, 5 * newDimensions, 0.1, true, 5, random.nextLong()); System.out.println(summary.size() + " clusters for " + newDimensions + " dimensions, seed : " + seed); double weight = summary.stream().map(e -> e.getWeight()).reduce(Double::sum).get(); System.out.println( "Total weight " + ((float) Math.round(weight * 1000) * 0.001) + " rounding to multiples of " + epsilon); System.out.println(); for (int i = 0; i < summary.size(); i++) { double clusterWeight = summary.get(i).getWeight(); System.out.println( "Cluster " + i + " representatives, weight " + ((float) Math.round(1000 * clusterWeight) * 0.001)); List> representatives = summary.get(i).getRepresentatives(); for (int j = 0; j < representatives.size(); j++) { double t = representatives.get(j).weight; t = Math.round(1000.0 * t / clusterWeight) * 0.001; System.out.print("relative weight " + (float) t + " center (approx) "); printArray(representatives.get(j).index, epsilon); System.out.println(); } System.out.println(); } } void printArray(float[] values, double epsilon) { System.out.print(" ["); if (abs(values[0]) < epsilon) { System.out.print("0"); } else { if (epsilon <= 0) { System.out.print(values[0]); } else { long t = (int) Math.round(values[0] / epsilon); System.out.print(t * epsilon); } } for (int i = 1; i < values.length; i++) { if (abs(values[i]) < epsilon) { System.out.print(", 0"); } else { if (epsilon <= 0) { System.out.print(", " + values[i]); } else { long t = Math.round(values[i] / epsilon); System.out.print(", " + t * epsilon); } } } System.out.print("]"); } public float[][] getData(int dataSize, int newDimensions, int seed, BiFunction distance) { double baseMu = 0.0; double baseSigma = 1.0; double anomalyMu = 0.0; double anomalySigma = 1.0; double transitionToAnomalyProbability = 0.0; // ignoring anomaly cluster for now double transitionToBaseProbability = 1.0; Random prg = new Random(0); NormalMixtureTestData generator = new NormalMixtureTestData(baseMu, baseSigma, anomalyMu, anomalySigma, transitionToAnomalyProbability, transitionToBaseProbability); double[][] data = generator.generateTestData(dataSize, newDimensions, seed); float[][] floatData = new float[dataSize][]; float[] allZero = new float[newDimensions]; float[] sigma = new float[newDimensions]; Arrays.fill(sigma, 1f); double scale = distance.apply(allZero, sigma); for (int i = 0; i < dataSize; i++) { // shrink, shift at random int nextD = prg.nextInt(newDimensions); for (int j = 0; j < newDimensions; j++) { data[i][j] *= 1.0 / (3.0); // standard deviation adds up across dimension; taking square root // and using s 3 sigma ball if (j == nextD) { if (prg.nextDouble() < 0.5) data[i][j] += 2.0 * scale; else data[i][j] -= 2.0 * scale; } } floatData[i] = toFloatArray(data[i]); } return floatData; } } ================================================ FILE: Java/examples/src/main/java/com/amazon/randomcutforest/examples/summarization/RCFStringSummarizeExample.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.examples.summarization; import static java.lang.Math.min; import java.util.List; import java.util.Random; import com.amazon.randomcutforest.examples.Example; import com.amazon.randomcutforest.summarization.ICluster; import com.amazon.randomcutforest.summarization.Summarizer; import com.amazon.randomcutforest.util.Weighted; /** * the following example showcases the use of RCF multi-summarization on generic * types R, when provided with a distance function from (R,R) into double. In * this example R correpsonds to Strings and the distance is EditDistance The * srings are genrated from two clusters one where character A (or '-' for viz) * occurs with probability 2/3 and anothewr where it occurs with probability 1/3 * (and the character B or '_' occurs with probability 2/3) * * Clearly, and the following example makes it visual, multicentroid approach is * necessary. * * All the strings do not have the same length. Note that the summarization is * asked with a maximum of 10 clusters but the algorithm self-adjusts to 2 * clusters. */ public class RCFStringSummarizeExample implements Example { public static void main(String[] args) throws Exception { new com.amazon.randomcutforest.examples.summarization.RCFStringSummarizeExample().run(); } @Override public String command() { return "RCF_String_Summarize_Example"; } @Override public String description() { return "Example of using RCF String Summarization, uses multi-centroid approach"; } @Override public void run() throws Exception { long seed = -8436172895711381300L; new Random().nextLong(); System.out.println("String summarization seed : " + seed); Random random = new Random(seed); int size = 100; int numberOfStrings = 20000; String[] points = new String[numberOfStrings]; for (int i = 0; i < numberOfStrings; i++) { if (random.nextDouble() < 0.5) { points[i] = getABString(size, 0.8, random); } else { points[i] = getABString(size, 0.2, random); } } int nextSeed = random.nextInt(); List> summary = Summarizer.multiSummarize(points, 5, 10, 1, false, 0.8, RCFStringSummarizeExample::toyDistance, nextSeed, true, 0.1, 5); System.out.println(); for (int i = 0; i < summary.size(); i++) { double weight = summary.get(i).getWeight(); System.out.println( "Cluster " + i + " representatives, weight " + ((float) Math.round(1000 * weight) * 0.001)); List> representatives = summary.get(i).getRepresentatives(); for (int j = 0; j < representatives.size(); j++) { double t = representatives.get(j).weight; t = Math.round(1000.0 * t / weight) * 0.001; System.out.print( "relative weight " + (float) t + " length " + representatives.get(j).index.length() + " "); printString(representatives.get(j).index); System.out.println(); } System.out.println(); } } public static double toyDistance(String a, String b) { if (a.length() > b.length()) { return toyDistance(b, a); } double[][] dist = new double[2][b.length() + 1]; for (int j = 0; j < b.length() + 1; j++) { dist[0][j] = j; } for (int i = 1; i < a.length() + 1; i++) { dist[1][0] = i; for (int j = 1; j < b.length() + 1; j++) { double t = dist[0][j - 1] + ((a.charAt(i - 1) == b.charAt(j - 1)) ? 0 : 1); dist[1][j] = min(min(t, dist[0][j] + 1), dist[1][j - 1] + 1); } for (int j = 0; j < b.length() + 1; j++) { dist[0][j] = dist[1][j]; } } return dist[1][b.length()]; } // colors public static final String ANSI_RESET = "\u001B[0m"; public static final String ANSI_RED = "\u001B[31m"; public static final String ANSI_BLUE = "\u001B[34m"; public static void printString(String a) { for (int i = 0; i < a.length(); i++) { if (a.charAt(i) == '-') { System.out.print(ANSI_RED + a.charAt(i) + ANSI_RESET); } else { System.out.print(ANSI_BLUE + a.charAt(i) + ANSI_RESET); } } } public String getABString(int size, double probabilityOfA, Random random) { StringBuilder stringBuilder = new StringBuilder(); int newSize = size + random.nextInt(size / 5); for (int i = 0; i < newSize; i++) { if (random.nextDouble() < probabilityOfA) { stringBuilder.append("-"); } else { stringBuilder.append("_"); } } return stringBuilder.toString(); } } ================================================ FILE: Java/examples/src/main/java/com/amazon/randomcutforest/examples/summarization/RCFSummarizeExample.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.examples.summarization; import static com.amazon.randomcutforest.CommonUtils.toFloatArray; import static java.lang.Math.abs; import java.util.Arrays; import java.util.Random; import java.util.function.BiFunction; import com.amazon.randomcutforest.examples.Example; import com.amazon.randomcutforest.returntypes.SampleSummary; import com.amazon.randomcutforest.summarization.Summarizer; import com.amazon.randomcutforest.testutils.NormalMixtureTestData; /** * The following example is based off a test of summarization and provides an * example use of summarization based on centroidal representation. The * clustering takes a distance function from (float[],float []) into double as * input, along with a maximum number of allowed clusters and provides a summary * which contains the list of cluster centers as "typical points" along with * relative likelihood. * * The specific example below corresponds to 2*d clusters (one each in +ve and * -ve axis for each of the d dimensions) where d is chosen at random between 3 * and 13. The clusters are designed to almost touch -- but are separable (with * high probability) and should be discoverable separately. Note that the * algorithm does not require the knowledge of the true number of clusters (2*d) * but is run with a maximum allowed number 5*d. */ public class RCFSummarizeExample implements Example { public static void main(String[] args) throws Exception { new com.amazon.randomcutforest.examples.summarization.RCFSummarizeExample().run(); } @Override public String command() { return "RCF_Summarize_Example"; } @Override public String description() { return "Example of using RCF Summarization"; } @Override public void run() throws Exception { long seed = new Random().nextLong(); Random random = new Random(seed); int newDimensions = random.nextInt(10) + 3; int dataSize = 200000; float[][] points = getData(dataSize, newDimensions, random.nextInt(), Summarizer::L2distance); SampleSummary summary = Summarizer.l2summarize(points, 5 * newDimensions, 42); System.out.println( summary.summaryPoints.length + " clusters for " + newDimensions + " dimensions, seed : " + seed); double epsilon = 0.01; System.out.println("Total weight " + summary.weightOfSamples + " rounding to multiples of " + epsilon); System.out.println(); for (int i = 0; i < summary.summaryPoints.length; i++) { long t = Math.round(summary.relativeWeight[i] / epsilon); System.out.print("Cluster " + i + " relative weight " + ((float) t * epsilon) + " center (approx): "); printArray(summary.summaryPoints[i], epsilon); System.out.println(); } } void printArray(float[] values, double epsilon) { System.out.print(" ["); if (abs(values[0]) < epsilon) { System.out.print("0"); } else { if (epsilon <= 0) { System.out.print(values[0]); } else { long t = (int) Math.round(values[0] / epsilon); System.out.print((float) t * epsilon); } } for (int i = 1; i < values.length; i++) { if (abs(values[i]) < epsilon) { System.out.print(", 0"); } else { if (epsilon <= 0) { System.out.print(", " + values[i]); } else { long t = Math.round(values[i] / epsilon); System.out.print(", " + ((float) t * epsilon)); } } } System.out.print("]"); } public float[][] getData(int dataSize, int newDimensions, int seed, BiFunction distance) { double baseMu = 0.0; double baseSigma = 1.0; double anomalyMu = 0.0; double anomalySigma = 1.0; double transitionToAnomalyProbability = 0.0; // ignoring anomaly cluster for now double transitionToBaseProbability = 1.0; Random prg = new Random(0); NormalMixtureTestData generator = new NormalMixtureTestData(baseMu, baseSigma, anomalyMu, anomalySigma, transitionToAnomalyProbability, transitionToBaseProbability); double[][] data = generator.generateTestData(dataSize, newDimensions, seed); float[][] floatData = new float[dataSize][]; float[] allZero = new float[newDimensions]; float[] sigma = new float[newDimensions]; Arrays.fill(sigma, 1f); double scale = distance.apply(allZero, sigma); for (int i = 0; i < dataSize; i++) { // shrink, shift at random int nextD = prg.nextInt(newDimensions); for (int j = 0; j < newDimensions; j++) { data[i][j] *= 1.0 / (3.0); // standard deviation adds up across dimension; taking square root // and using s 3 sigma ball if (j == nextD) { if (prg.nextDouble() < 0.5) data[i][j] += 2.0 * scale; else data[i][j] -= 2.0 * scale; } } floatData[i] = toFloatArray(data[i]); } return floatData; } } ================================================ FILE: Java/findbugs-filters.xml ================================================ ================================================ FILE: Java/license-header ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ ================================================ FILE: Java/lombok.config ================================================ lombok.addLombokGeneratedAnnotation = true ================================================ FILE: Java/parkservices/pom.xml ================================================ 4.0.0 software.amazon.randomcutforest randomcutforest-parent 4.4.0 randomcutforest-parkservices jar software.amazon.randomcutforest randomcutforest-core ${project.version} software.amazon.randomcutforest randomcutforest-testutils ${project.version} org.projectlombok lombok 1.18.30 provided org.junit.jupiter junit-jupiter-engine test org.junit.jupiter junit-jupiter-params test org.mockito mockito-core test org.mockito mockito-junit-jupiter test com.fasterxml.jackson.core jackson-databind 2.16.0 test io.protostuff protostuff-core 1.8.0 test io.protostuff protostuff-runtime 1.8.0 test ================================================ FILE: Java/parkservices/src/main/java/com/amazon/randomcutforest/parkservices/AnomalyDescriptor.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.parkservices; import static com.amazon.randomcutforest.CommonUtils.checkArgument; import java.util.Arrays; import lombok.Getter; import lombok.Setter; import com.amazon.randomcutforest.parkservices.returntypes.RCFComputeDescriptor; @Getter @Setter public class AnomalyDescriptor extends RCFComputeDescriptor { public static int NUMBER_OF_EXPECTED_VALUES = 1; // confidence, for both anomalies/non-anomalies double dataConfidence; // flag indicating if the anomaly is the start of an anomaly or part of a run of // anomalies boolean startOfAnomaly; // flag indicating if the time stamp is in elevated score region to be // considered as anomaly boolean inHighScoreRegion; // a flattened version denoting the basic contribution of each input variable // (not shingled) for the // time slice indicated by relativeIndex double[] relevantAttribution; // when time is appended for the anomalous time slice double timeAttribution; // the values being replaced; may correspond to past double[] pastValues; // older timestamp if that is replaced long pastTimeStamp; // expected values, currently set to maximum 1 double[][] expectedValuesList; // likelihood values for the list double[] likelihoodOfValues; public AnomalyDescriptor(double[] input, long inputTimeStamp) { super(input, inputTimeStamp); } public void setPastValues(double[] values) { pastValues = copyIfNotnull(values); } public boolean isExpectedValuesPresent() { return expectedValuesList != null; } public void setRelevantAttribution(double[] values) { this.relevantAttribution = copyIfNotnull(values); } public void setExpectedValues(int position, double[] values, double likelihood) { checkArgument(position < NUMBER_OF_EXPECTED_VALUES, "Increase size of expected array"); if (expectedValuesList == null) { expectedValuesList = new double[NUMBER_OF_EXPECTED_VALUES][]; } if (likelihoodOfValues == null) { likelihoodOfValues = new double[NUMBER_OF_EXPECTED_VALUES]; } expectedValuesList[position] = Arrays.copyOf(values, values.length); likelihoodOfValues[position] = likelihood; } public void setDataConfidence(double timeDecay, long valuesSeen, long outputAfter, double dataQuality) { long total = valuesSeen; double lambda = timeDecay; double totalExponent = total * lambda; if (totalExponent == 0) { dataConfidence = 0.0; } else if (totalExponent >= 20) { dataConfidence = Math.min(1.0, dataQuality); } else { double eTotal = Math.exp(totalExponent); double confidence = dataQuality * (eTotal - Math.exp(lambda * Math.min(total, outputAfter))) / (eTotal - 1); dataConfidence = Math.max(0, confidence); } } } ================================================ FILE: Java/parkservices/src/main/java/com/amazon/randomcutforest/parkservices/ForecastDescriptor.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.parkservices; import static com.amazon.randomcutforest.CommonUtils.checkArgument; import java.util.Arrays; import lombok.Getter; import lombok.Setter; import com.amazon.randomcutforest.returntypes.DiVector; import com.amazon.randomcutforest.returntypes.RangeVector; import com.amazon.randomcutforest.returntypes.TimedRangeVector; @Getter @Setter public class ForecastDescriptor extends AnomalyDescriptor { // all the following objects will be of length (forecast horizon x the number of // input variables) /** * basic forecast field, with the time information to be used for TIME_AUGMENTED * mode in the future */ TimedRangeVector timedForecast; /** * the distribution of errors -- for an algorithm that self-calibrates, this * information has to be computed exposing the error can be of use for the user * to audit the results. The distributions will use interpolations and will not * adhere to specific quantile values -- thereby allowing for better * generalization. */ RangeVector observedErrorDistribution; /** * typically RMSE is a single vector -- however unlike standard literature, we * would not be limited to zero mean time series; in fact converting a time * series to a zero mean series in an online manner is already challenging. * Moreover, it is often the case that errors have a typical distribution skew; * in the current library we have partitioned many of the explainabilty aspects * (e.g., attribution in anomaly detection, directionality in density * estimation, etc.) based on high/low; when the actual value being observed is * correspondingly higher/lower than some (possibly implicit) baseline. We split * the same for error. */ DiVector errorRMSE; /** * mean error corresponding to the forecast horizon x the number of input * variables This is not used in the current intervalPrecision -- we use the * median value from the error distribution. */ float[] errorMean; /** * in the forecast horizon x the number of input variables this corresponds to * the fraction of variables \predicted correctly over the error horizon. A * value of 1.0 is terrific. */ float[] intervalPrecision; public ForecastDescriptor(double[] input, long inputTimeStamp, int horizon) { super(input, inputTimeStamp); int forecastLength = input.length * horizon; this.timedForecast = new TimedRangeVector(forecastLength, horizon); this.observedErrorDistribution = new RangeVector(forecastLength); Arrays.fill(this.observedErrorDistribution.lower, -Float.MAX_VALUE); Arrays.fill(this.observedErrorDistribution.upper, Float.MAX_VALUE); this.errorMean = new float[forecastLength]; this.errorRMSE = new DiVector(forecastLength); this.intervalPrecision = new float[forecastLength]; } public void setObservedErrorDistribution(RangeVector base) { checkArgument(base.values.length == this.observedErrorDistribution.values.length, " incorrect length"); System.arraycopy(base.values, 0, this.observedErrorDistribution.values, 0, base.values.length); System.arraycopy(base.upper, 0, this.observedErrorDistribution.upper, 0, base.upper.length); System.arraycopy(base.lower, 0, this.observedErrorDistribution.lower, 0, base.lower.length); } public void setIntervalPrecision(float[] calibration) { System.arraycopy(calibration, 0, this.intervalPrecision, 0, calibration.length); } public float[] getIntervalPrecision() { return Arrays.copyOf(intervalPrecision, intervalPrecision.length); } public void setErrorMean(float[] errorMean) { System.arraycopy(errorMean, 0, this.errorMean, 0, errorMean.length); } public void setErrorRMSE(DiVector errorRMSE) { checkArgument(this.errorRMSE.getDimensions() == errorRMSE.getDimensions(), " incorrect input"); System.arraycopy(errorRMSE.high, 0, this.errorRMSE.high, 0, errorRMSE.high.length); System.arraycopy(errorRMSE.low, 0, this.errorRMSE.low, 0, errorRMSE.low.length); } } ================================================ FILE: Java/parkservices/src/main/java/com/amazon/randomcutforest/parkservices/GlobalLocalAnomalyDetector.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.parkservices; import static com.amazon.randomcutforest.CommonUtils.checkArgument; import static com.amazon.randomcutforest.summarization.GenericMultiCenter.DEFAULT_NUMBER_OF_REPRESENTATIVES; import static com.amazon.randomcutforest.summarization.GenericMultiCenter.DEFAULT_SHRINKAGE; import static java.lang.Math.abs; import static java.lang.Math.exp; import static java.lang.Math.min; import java.util.ArrayList; import java.util.List; import java.util.Optional; import java.util.function.BiFunction; import com.amazon.randomcutforest.parkservices.returntypes.GenericAnomalyDescriptor; import com.amazon.randomcutforest.parkservices.threshold.BasicThresholder; import com.amazon.randomcutforest.store.StreamSampler; import com.amazon.randomcutforest.summarization.GenericMultiCenter; import com.amazon.randomcutforest.summarization.ICluster; import com.amazon.randomcutforest.summarization.Summarizer; import com.amazon.randomcutforest.util.Weighted; public class GlobalLocalAnomalyDetector

extends StreamSampler

{ // default maximum number of clusters to consider public static int DEFAULT_MAX = 10; // an upper bound on the score public static float FLOAT_MAX = 10; // the relative weight of small clusters which should not be used in anomaly // detection // this controls masking effects public static double DEFAULT_IGNORE_SMALL_CLUSTER_REPRESENTATIVE = 0.005; public static double DEFAULT_GLAD_THRESHOLD = 1.2; // the number of steps we have to wait before reclustering; in principle this // can be 1, but that would be // neither be meaningful nor efficient; it is set to a default of the capacity/2 protected int doNotreclusterWithin; // a thresholder for flagging anomalies (same thresholder as in TRCF) protected final BasicThresholder thresholder; // remembering when the last clustering was performed protected long lastCluster = 0L; // remembers when the mean of the scores were just above a certain threshold // acts as a calibration mechanism protected double lastMean = 1; // actual list of clusters List> clusters; // the number of maximum clusters to be considered; this is configurable and can // be chaned dynamically protected int maxAllowed; // the shrinkage parameter in multi-centroid clustering such as CURE. Shrinkage // of 0 provides // non-spherical shapes, whereas shrinkage of 1 corresponds to choosing single // centroid (not recommended) protected double shrinkage; // number of representatives used in multi-centroidal clustering protected int numberOfRepresentatives; // threshold of weight for small clusters so that masking can be averted, can be // changed dynamically protected double ignoreBelow; // the global function used in clustering, can be changed dynamically (but // clustering would be controlled // automatically due to efficiency reasons) protected BiFunction globalDistance; public static Builder builder() { return new Builder<>(); } protected GlobalLocalAnomalyDetector(Builder builder) { super(builder); thresholder = new BasicThresholder(builder.getTimeDecay()); thresholder.setAbsoluteThreshold(DEFAULT_GLAD_THRESHOLD); doNotreclusterWithin = builder.doNotReclusterWithin.orElse(builder.getCapacity() / 2); shrinkage = builder.shrinkage; maxAllowed = builder.maxAllowed; numberOfRepresentatives = builder.numberOfRepresentatives; ignoreBelow = builder.ignoreBelow; } protected GlobalLocalAnomalyDetector(Builder builder, BiFunction distance) { this(builder); globalDistance = distance; } public void setGlobalDistance(BiFunction dist) { globalDistance = dist; } // sets the zFactor; increasing this number should increase precision (and will // likely lower recall) // this is the same as in BasicThresholder class public void setZfactor(double factor) { checkArgument(factor > 1, "must be more than 1"); thresholder.setZfactor(factor); } public double getZfactor() { return thresholder.getZFactor(); } // as in BasicThresholder class, useful in tuning public void setLowerThreshold(double lowerThreshold) { checkArgument(lowerThreshold > 0, "cannot be negative"); thresholder.setAbsoluteThreshold(lowerThreshold); } public double getLowerThreshold() { return thresholder.getAbsoluteThreshold(); } public int getDoNotreclusterWithin() { return doNotreclusterWithin; } public void setDoNotreclusterWithin(int value) { checkArgument(value > 0, " has to be positive, recommended as 1/2 the capacity"); doNotreclusterWithin = value; } public int getNumberOfRepresentatives() { return numberOfRepresentatives; } public void setNumberOfRepresentatives(int reps) { checkArgument(reps > 0, " has to be positive"); checkArgument(reps < 25, "too large a number"); numberOfRepresentatives = reps; } public double getShrinkage() { return shrinkage; } public void setShrinkage(double value) { checkArgument(value >= 0 && value <= 1, " has to be in [0,1]"); shrinkage = value; } public double getIgnoreBelow() { return ignoreBelow; } public void setIgnoreBelow(double value) { checkArgument(value >= 0 && value < 0.1, " relative weight has to be in range [0,0.1] "); ignoreBelow = value; } public int getMaxAllowed() { return maxAllowed; } public void setMaxAllowed(int value) { checkArgument(value >= 5 && value < 100, " too few or too many clusters are not " + "meaningful to this algorithm"); maxAllowed = value; } /** * The following provides a single invocation for scoring and updating. * Semantics of the recency biased sampling (sequentiality in decision making) * and efficient automatic reclustering demand that scoring and updating be * simultaneous. While scoring is provided as a separate function to let future * preditor-corrector methods reuse this code, it is strongly recommneded that * only the process() function be invoked. * * @param object current object being considered * @param weight weight of the object (for clustering purposes as * well as recency biased sampling) * @param localDistance a local distance metric that determines the order in * which different clusters are considered; can be * null, in which case the global distance would be * used * @param considerOcclusion consider occlusion by smaller dense clusters, when * adjacent to larger and more spread out clusters * @return a generic descriptor with score, threshold, anomaly grade (anomaly * grade greater than zero is likely anomalous; anomaly grade can be -ve * to allow down stream correction using semi-supervision or other * means) and a list of cluster representatives (sorted by distance) * with corresponding scores (lowest score may not correspond to lowest * distance) which can be used to investigate anomalous points further */ public GenericAnomalyDescriptor

process(P object, float weight, BiFunction localDistance, boolean considerOcclusion) { checkArgument(weight >= 0, "weight cannot be negative"); // recompute clusters first; this enables easier merges and deserialization if (sequenceNumber > lastCluster + doNotreclusterWithin) { checkArgument(globalDistance != null, "set global distance function"); double currentMean = thresholder.getPrimaryDeviation().getMean(); if (abs(currentMean - lastMean) > 0.1 || currentMean > 1.7 || sequenceNumber > lastCluster + 20 * doNotreclusterWithin) { lastCluster = sequenceNumber; lastMean = currentMean; clusters = getClusters(maxAllowed, 4 * maxAllowed, 1, numberOfRepresentatives, shrinkage, globalDistance, null); } } List> result = score(object, localDistance, considerOcclusion); double threshold = thresholder.threshold(); double grade = 0; float score = 0; if (result != null) { score = result.stream().map(a -> a.weight).reduce(FLOAT_MAX, Float::min); if (score < FLOAT_MAX) { // an exponential attribution double sum = result.stream() .map(a -> (double) ((a.weight == FLOAT_MAX) ? 0 : exp(-a.weight * a.weight))) .reduce(0.0, Double::sum); for (Weighted

item : result) { item.weight = (item.weight == FLOAT_MAX) ? 0.0f : (float) min(1.0f, (float) exp(-item.weight * item.weight) / sum); } } else { // uniform attribution for (Weighted

item : result) { item.weight = (float) 1.0 / (result.size()); } } grade = thresholder.getAnomalyGrade(score, false); } // note average score would be 1 thresholder.update(score, min(score, thresholder.getZFactor())); sample(object, weight); return new GenericAnomalyDescriptor<>(result, score, threshold, grade); } /** * The following function scores a point -- it considers an ordering of the * representatives based on the local distance; and considers occlusion -- * namely, should an asteroid between moon and the earth be considered to be a * part of a cluster around the moon or the earth? The below provides some * initial geometric take on the three objects. We deliberately avoid explicit * density computation since it would be difficult to define uniform definition * of density. * * @param current the object being scored * @param localDistance a distance function that we wish to use for this * specific score. This can be null, and in that case * the global distance would be used * @param considerOcclusion a boolean that determines if closeby dense clusters * can occlude membership in further away "less dense * cluster" * @return A list of weighted type where the index is a representative (based on * local distance) and the weight is the score corresponding to that * representative. The scores are sorted from least anomalous to most * anomalous. */ public List> score(P current, BiFunction localDistance, boolean considerOcclusion) { if (clusters == null) { return null; } else { BiFunction local = (localDistance != null) ? localDistance : globalDistance; double totalWeight = clusters.stream().map(e -> e.getWeight()).reduce(0.0, Double::sum); ArrayList candidateList = new ArrayList<>(); for (ICluster

cluster : clusters) { double wt = cluster.averageRadius(); double tempMinimum = Double.MAX_VALUE; P closestInCluster = null; for (Weighted

rep : cluster.getRepresentatives()) { if (rep.weight > ignoreBelow * totalWeight) { double tempDist = local.apply(current, rep.index); if (tempDist < 0) { throw new IllegalArgumentException(" distance cannot be negative "); } if (tempMinimum > tempDist) { tempMinimum = tempDist; closestInCluster = rep.index; } } } if (closestInCluster != null) { candidateList.add(new Candidate(closestInCluster, wt, tempMinimum)); } } candidateList.sort((o1, o2) -> Double.compare(o1.distance, o2.distance)); checkArgument(candidateList.size() > 0, "empty candidate list, should not happen"); ArrayList> answer = new ArrayList<>(); if (candidateList.get(0).distance == 0.0) { answer.add(new Weighted

(candidateList.get(0).representative, 0.0f)); return answer; } int index = 0; while (index < candidateList.size()) { Candidate head = candidateList.get(index); double dist = (localDistance == null) ? head.distance : globalDistance.apply(current, head.representative); float tempMeasure = (head.averageRadiusOfCluster > 0.0) ? min(FLOAT_MAX, (float) (dist / head.averageRadiusOfCluster)) : FLOAT_MAX; answer.add(new Weighted

(head.representative, tempMeasure)); if (considerOcclusion) { int consider = index + 1; while (consider < candidateList.size()) { double occludeDistance = local.apply(head.representative, candidateList.get(consider).representative); double candidateDistance = candidateList.get(consider).distance; if (occludeDistance < candidateDistance && candidateDistance > Math .sqrt(head.distance * head.distance + occludeDistance * occludeDistance)) { // delete element candidateList.remove(consider); } consider++; } } ++index; } // we will not resort answer; the scores will be in order of distance // we note that score() should be invoked with care and likely postprocessing return answer; } } /** * a merging routine for the mopdels which would be used in the future for * distributed analysis. Note that there is no point of storing sequence indices * explicitly in case of a merge. * * @param first the first model * @param second the second model * @param builder the parameters of the new clustering * @param recluster a boolean that determines immediate reclustering * @param distance the distance function of the new clustering */ public GlobalLocalAnomalyDetector(GlobalLocalAnomalyDetector first, GlobalLocalAnomalyDetector second, Builder builder, boolean recluster, BiFunction distance) { super(first, second, builder.getCapacity(), builder.getTimeDecay(), builder.getRandomSeed()); thresholder = new BasicThresholder(builder.getTimeDecay(), builder.anomalyRate, false); thresholder.setAbsoluteThreshold(1.2); doNotreclusterWithin = builder.doNotReclusterWithin.orElse(builder.getCapacity() / 2); shrinkage = builder.shrinkage; maxAllowed = builder.maxAllowed; numberOfRepresentatives = builder.numberOfRepresentatives; globalDistance = distance; if (recluster) { lastCluster = sequenceNumber; clusters = getClusters(maxAllowed, 4 * maxAllowed, 1, numberOfRepresentatives, shrinkage, globalDistance, null); } } /** * an inner class that is useful for the scoring procedure to avoid * recomputation of fields. */ class Candidate { P representative; double averageRadiusOfCluster; double distance; Candidate(P representative, double averageRadiusOfCluster, double distance) { this.representative = representative; this.averageRadiusOfCluster = averageRadiusOfCluster; this.distance = distance; } } public List> getClusters() { return clusters; } public List> getClusters(int maxAllowed, int initial, int stopAt, int representatives, double shrink, BiFunction distance, List> previousClusters) { BiFunction> clusterInitializer = (a, b) -> GenericMultiCenter.initialize(a, b, shrink, representatives); return Summarizer.summarize(objectList, maxAllowed, initial, stopAt, false, 0.8, distance, clusterInitializer, 0L, false, previousClusters); } /** * a builder */ public static class Builder> extends StreamSampler.Builder { protected double shrinkage = DEFAULT_SHRINKAGE; protected double ignoreBelow = DEFAULT_IGNORE_SMALL_CLUSTER_REPRESENTATIVE; protected int numberOfRepresentatives = DEFAULT_NUMBER_OF_REPRESENTATIVES; protected Optional doNotReclusterWithin = Optional.empty(); protected int maxAllowed = DEFAULT_MAX; protected double anomalyRate = 0.01; // ignores small clusters with population weight below this threshold public T ignoreBelow(double ignoreBelow) { this.ignoreBelow = ignoreBelow; return (T) this; } // parameters of the multi-representative CURE algorithm public T shrinkage(double shrinkage) { this.shrinkage = shrinkage; return (T) this; } // a parameter that ensures that clustering is not recomputed too frequently, // which can be both inefficient as well as jittery public T doNotReclusterWithin(int refresh) { this.doNotReclusterWithin = Optional.of(refresh); return (T) this; } // maximum number of clusters to consider public T maxAllowed(int maxAllowed) { this.maxAllowed = maxAllowed; return (T) this; } // parameters of the multi-representative CURE algorithm public T numberOfRepresentatives(int number) { this.numberOfRepresentatives = number; return (T) this; } // a flag that can adjust to the burstiness of anomalies public T anomalyRate(double anomalyRate) { this.anomalyRate = anomalyRate; return (T) this; } @Override public GlobalLocalAnomalyDetector build() { return new GlobalLocalAnomalyDetector<>(this); } } } ================================================ FILE: Java/parkservices/src/main/java/com/amazon/randomcutforest/parkservices/PredictorCorrector.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.parkservices; import static com.amazon.randomcutforest.CommonUtils.checkArgument; import static com.amazon.randomcutforest.parkservices.config.CorrectionMode.ALERT_ONCE; import static com.amazon.randomcutforest.parkservices.config.CorrectionMode.CONDITIONAL_FORECAST; import static com.amazon.randomcutforest.parkservices.config.CorrectionMode.DATA_DRIFT; import static com.amazon.randomcutforest.parkservices.config.CorrectionMode.NONE; import static com.amazon.randomcutforest.preprocessor.Preprocessor.DEFAULT_NORMALIZATION_PRECISION; import static java.lang.Math.exp; import static java.lang.Math.max; import static java.lang.Math.min; import java.util.Arrays; import java.util.List; import java.util.Locale; import java.util.Random; import com.amazon.randomcutforest.RandomCutForest; import com.amazon.randomcutforest.config.ForestMode; import com.amazon.randomcutforest.config.TransformMethod; import com.amazon.randomcutforest.parkservices.config.CorrectionMode; import com.amazon.randomcutforest.parkservices.config.ScoringStrategy; import com.amazon.randomcutforest.parkservices.returntypes.RCFComputeDescriptor; import com.amazon.randomcutforest.parkservices.threshold.BasicThresholder; import com.amazon.randomcutforest.returntypes.DiVector; import com.amazon.randomcutforest.returntypes.Neighbor; import com.amazon.randomcutforest.statistics.Deviation; import com.amazon.randomcutforest.util.Weighted; /** * This class provides a combined RCF and thresholder, both of which operate in * a streaming manner and respect the arrow of time. */ public class PredictorCorrector { private static double DEFAULT_DIFFERENTIAL_FACTOR = 0.3; public static int DEFAULT_NUMBER_OF_MAX_ATTRIBUTORS = 5; public static double DEFAULT_NOISE_SUPPRESSION_FACTOR = 1.0; public static double DEFAULT_MULTI_MODE_SAMPLING_RATE = 0.1; public static double DEFAULT_SAMPLING_SUPPORT = 0.1; public static int DEFAULT_RUN_ALLOWED = 2; // the above will trigger on the 4th occurrence, because the first is not // counted in the run protected static int NUMBER_OF_MODES = 2; protected final static int EXPECTED_INVERSE_DEPTH_INDEX = 0; protected final static int DISTANCE_INDEX = 1; // the following vectors enable suppression of anomalies // the first pair correspond to additive differences // the second pair correspond to multiplicative differences // which are not meaningful for differenced operations double[] ignoreNearExpectedFromBelow; double[] ignoreNearExpectedFromAbove; double[] ignoreNearExpectedFromBelowByRatio; double[] ignoreNearExpectedFromAboveByRatio; // for anomaly description we would only look at these many top attributors // AExpected value is not well-defined when this number is greater than 1 // that being said there is no formal restriction other than the fact that the // answers would be error prone as this parameter is raised. protected int numberOfAttributors = DEFAULT_NUMBER_OF_MAX_ATTRIBUTORS; protected double[] lastScore = new double[NUMBER_OF_MODES]; protected ScoringStrategy lastStrategy = ScoringStrategy.EXPECTED_INVERSE_DEPTH; protected BasicThresholder[] thresholders; protected int baseDimension; protected long randomSeed; protected double[] modeInformation; protected Deviation[] deviationsActual; protected Deviation[] deviationsExpected; protected double samplingRate = DEFAULT_MULTI_MODE_SAMPLING_RATE; protected double noiseFactor = DEFAULT_NOISE_SUPPRESSION_FACTOR; protected boolean autoAdjust = false; protected RCFComputeDescriptor lastDescriptor; protected int runLength; protected boolean ignoreDrift = false; protected double samplingSupport = DEFAULT_SAMPLING_SUPPORT; public PredictorCorrector(double timeDecay, double anomalyRate, boolean adjust, int baseDimension, long randomSeed) { this.thresholders = new BasicThresholder[NUMBER_OF_MODES]; thresholders[0] = new BasicThresholder(timeDecay, anomalyRate, adjust); thresholders[1] = new BasicThresholder(timeDecay); this.baseDimension = baseDimension; this.randomSeed = randomSeed; this.autoAdjust = adjust; if (adjust) { this.deviationsActual = new Deviation[baseDimension]; this.deviationsExpected = new Deviation[baseDimension]; for (int i = 0; i < baseDimension; i++) { this.deviationsActual[i] = new Deviation(timeDecay); this.deviationsExpected[i] = new Deviation(timeDecay); } } ignoreNearExpectedFromAbove = new double[baseDimension]; ignoreNearExpectedFromBelow = new double[baseDimension]; ignoreNearExpectedFromAboveByRatio = new double[baseDimension]; ignoreNearExpectedFromBelowByRatio = new double[baseDimension]; } // for mappers public PredictorCorrector(BasicThresholder[] thresholders, Deviation[] deviations, int baseDimension, long randomSeed) { checkArgument(thresholders.length > 0, " cannot be empty"); this.thresholders = new BasicThresholder[NUMBER_OF_MODES]; int size = min(thresholders.length, NUMBER_OF_MODES); for (int i = 0; i < size; i++) { this.thresholders[i] = thresholders[i]; } Deviation deviation = thresholders[0].getPrimaryDeviation(); for (int i = size; i < NUMBER_OF_MODES; i++) { this.thresholders[i] = new BasicThresholder(thresholders[0].getPrimaryDeviation().getDiscount()); } this.deviationsActual = new Deviation[baseDimension]; this.deviationsExpected = new Deviation[baseDimension]; if (deviations != null) { checkArgument(deviations.length == 2 * baseDimension, "incorrect state"); for (int i = 0; i < baseDimension; i++) { deviationsActual[i] = deviations[i]; } for (int i = 0; i < baseDimension; i++) { deviationsExpected[i] = deviations[i + baseDimension]; } } this.baseDimension = baseDimension; this.randomSeed = randomSeed; ignoreNearExpectedFromAbove = new double[baseDimension]; ignoreNearExpectedFromBelow = new double[baseDimension]; ignoreNearExpectedFromAboveByRatio = new double[baseDimension]; ignoreNearExpectedFromBelowByRatio = new double[baseDimension]; } public PredictorCorrector(BasicThresholder thresholder, int baseDimension) { this(new BasicThresholder[] { thresholder }, null, baseDimension, 0L); } protected double nextDouble() { Random random = new Random(randomSeed); randomSeed = random.nextLong(); return random.nextDouble(); } /** * uses the attribution information to find the time slice which contributed * most to the anomaly note that the basic length of the vectors is shingleSize * * basDimension; the startIndex corresponds to the shingle entry beyond which * the search is performed. if two anomalies are in a shingle it would focus on * later one, the previous one would have been (hopefully) reported earlier. * * @param diVector attribution of current shingle * @param baseDimension number of attributes/variables in original data * @param startIndex time slice of the farthest in the past we are looking * @return the index (in this shingle) which has the largest contributions */ protected int maxContribution(DiVector diVector, int baseDimension, int startIndex) { double val = 0; int index = startIndex; int position = diVector.getDimensions() + startIndex * baseDimension; for (int i = 0; i < baseDimension; i++) { val += diVector.getHighLowSum(i + position); } for (int i = position + baseDimension; i < diVector.getDimensions(); i += baseDimension) { double sum = 0; for (int j = 0; j < baseDimension; j++) { sum += diVector.getHighLowSum(i + j); } if (sum > val) { val = sum; index = (i - diVector.getDimensions()) / baseDimension; } } return index; } /** * the following creates the expected point based on RCF forecasting * * @param diVector the attribution vector that is used to choose which * elements are to be predicted * @param position the block of (multivariate) elements we are focusing on * @param baseDimension the base dimension of the block * @param point the point near which we wish to predict * @param forest the resident RCF * @return a vector that is most likely, conditioned on changing a few elements * in the block at position */ protected float[] getExpectedPoint(DiVector diVector, int position, int baseDimension, float[] point, RandomCutForest forest) { int[] likelyMissingIndices; if (baseDimension == 1) { likelyMissingIndices = new int[] { position }; } else { double sum = 0; double[] values = new double[baseDimension]; for (int i = 0; i < baseDimension; i++) { sum += values[i] = diVector.getHighLowSum(i + position); } Arrays.sort(values); int pick = 1; if (values[baseDimension - pick] < 0.1 * sum) { // largest contributor is only 10 percent; there are too many to predict return null; } double threshold = min(0.1 * sum, 0.1); while (pick < baseDimension && values[baseDimension - pick - 1] >= threshold) { ++pick; } if (pick > numberOfAttributors) { // we chose everything; not usable return null; } double cutoff = values[baseDimension - pick]; likelyMissingIndices = new int[pick]; int count = 0; for (int i = 0; i < baseDimension && count < pick; i++) { if (diVector.getHighLowSum(i + position) >= cutoff && (count == 0 || diVector.getHighLowSum(i + position) > sum * 0.1)) { likelyMissingIndices[count++] = position + i; } } } if (likelyMissingIndices.length > 0.5 * forest.getDimensions()) { return null; } else { return forest.imputeMissingValues(point, likelyMissingIndices.length, likelyMissingIndices); } } /** * a subroutine that helps eliminates flagging anomalies too close to a * previously flagged anomaly -- this avoids the repetition due to shingling; * but still can detect some anomalies if the deviations are usual * * @param candidate the candidate attribution of the point * @param difference the gap (in RCF space) from the last anomaly * @param baseDimension the size of a block * @param ideal an idealized version of the candidate (can be * null) where the most offending elements are * imputed out * @param lastAnomalyDescriptor the description of the last anomaly * @param workingThreshold the threshold to exceed * @return true if the candidate is sufficiently different and false otherwise */ protected boolean trigger(DiVector candidate, int difference, int baseDimension, DiVector ideal, RCFComputeDescriptor lastAnomalyDescriptor, double workingThreshold) { int dimensions = candidate.getDimensions(); if (difference >= dimensions || ideal == null) { return true; } double lastAnomalyScore = lastAnomalyDescriptor.getRCFScore(); double differentialRemainder = 0; for (int i = dimensions - difference; i < dimensions; i++) { differentialRemainder += Math.abs(candidate.low[i] - ideal.low[i]) + Math.abs(candidate.high[i] - ideal.high[i]); } return (differentialRemainder > DEFAULT_DIFFERENTIAL_FACTOR * lastAnomalyScore) && differentialRemainder * dimensions / difference > 1.2 * workingThreshold; } /** * corrects the effect of a last anomaly -- note that an anomaly by definition * will alter the shift and scale of transformations. This computation fixes one * single large anomaly. * * @param transformMethod the transformation method used * @param gap the number of steps the anomaly occurred in the * past * @param lastAnomalyDescriptor the descriptor of the last anomaly * @param currentScale the current scale * @return a correction vector */ public double[] getCorrectionOfLastAnomaly(TransformMethod transformMethod, int gap, RCFComputeDescriptor lastAnomalyDescriptor, double[] currentScale) { double[] deltaShift = lastAnomalyDescriptor.getDeltaShift(); double[] answer = new double[currentScale.length]; // correct the effect of shifts in last observed anomaly because the anomaly may // have skewed the shift and scale -- but the gap cannot last forever // otherwise this will always change the point and force a costlier path if (deltaShift != null && gap < 2 * lastAnomalyDescriptor.getShingleSize() && (transformMethod == TransformMethod.NORMALIZE || transformMethod == TransformMethod.SUBTRACT_MA)) { double factor = exp(-gap * lastAnomalyDescriptor.getTransformDecay()); for (int y = 0; y < answer.length; y++) { answer[y] = (currentScale[y] == 0) ? 0 : deltaShift[y] * factor / currentScale[y]; } } return answer; } /** * a first stage corrector that attempts to fix the after effects of a previous * anomaly which may be in the shingle, or just preceding the shingle * * @param point the current (transformed) point under evaluation * @param gap the relative position of the previous anomaly * being corrected * @param shingleSize size of the shingle * @param baseDimensions number of dimensions in each shingle * @param currentScale scale for current point * @param transformMethod transformation Method * @param lastAnomalyDescriptor description of the last anomaly * @return the corrected point */ protected

float[] applyPastCorrector(float[] point, int gap, int shingleSize, int baseDimensions, double[] currentScale, TransformMethod transformMethod, RCFComputeDescriptor lastAnomalyDescriptor) { float[] correctedPoint = Arrays.copyOf(point, point.length); // following will fail for first 100ish points and if dimension < 3 if (lastAnomalyDescriptor.getExpectedRCFPoint() != null) { float[] lastExpectedPoint = lastAnomalyDescriptor.getExpectedRCFPoint(); float[] lastAnomalyPoint = lastAnomalyDescriptor.getRCFPoint(); int lastRelativeIndex = lastAnomalyDescriptor.getRelativeIndex(); // the following will fail for shingleSize 1 if (gap < shingleSize) { System.arraycopy(lastExpectedPoint, gap * baseDimensions, correctedPoint, 0, point.length - gap * baseDimensions); } if (gap <= shingleSize && lastRelativeIndex == 0) { if (transformMethod == TransformMethod.DIFFERENCE || transformMethod == TransformMethod.NORMALIZE_DIFFERENCE) { for (int y = 0; y < baseDimensions; y++) { correctedPoint[point.length - gap * baseDimensions + y] += lastAnomalyPoint[point.length - baseDimensions + y] - lastExpectedPoint[point.length - baseDimensions + y]; } } if (lastAnomalyDescriptor.getForestMode() == ForestMode.TIME_AUGMENTED) { // definitely correct the time dimension which is always differenced // this applies to the non-differenced cases correctedPoint[point.length - (gap - 1) * baseDimensions - 1] += lastAnomalyPoint[point.length - 1] - lastExpectedPoint[point.length - 1]; } } } double[] correctionVector = getCorrectionOfLastAnomaly(transformMethod, gap, lastAnomalyDescriptor, currentScale); int number = min(gap, shingleSize); for (int y = 0; y < baseDimensions; y++) { for (int j = 0; j < number; j++) { correctedPoint[point.length - (number - j) * baseDimensions + y] += correctionVector[y]; } } return correctedPoint; } /** * The following verifies that the overall shingled point is not explainable by * floating point precision. It then verifies that the point is not within * noiseFactor of the standard deviation of the successive differences (in the * multivariate setting). Finally, it caps the maximum grade possible for this * point * * @param result the transcript of the current point * @param point the current point * @param

Either AnomalyDescriptor of ForecastDescriptor * @return a cap on the grade (can be 0 for filtering out) */ protected

double centeredTransformPass(P result, float[] point) { double maxFactor = 0; // check entire point or some large value double[] scale = result.getScale(); double[] shift = result.getShift(); double[] deviations = result.getDeviations(); for (int i = 0; i < point.length && maxFactor == 0; i++) { double scaleFactor = (scale == null) ? 1.0 : scale[i % baseDimension]; double shiftBase = (shift == null) ? 0 : shift[i % baseDimension]; if (Math.abs(point[i]) * scaleFactor > DEFAULT_NORMALIZATION_PRECISION * (1 + Math.abs(shiftBase))) { maxFactor = 1; } } // check most recent input if (maxFactor > 0) { for (int i = 0; i < baseDimension; i++) { double scaleFactor = (scale == null) ? 1.0 : Math.abs(scale[i]); double z = Math.abs(point[point.length - baseDimension + i]) * scaleFactor; double deviation = (deviations == null) ? 0 : Math.abs(deviations[i + baseDimension]); if (z > noiseFactor * deviation) { maxFactor = (deviation == 0) ? 1 : min(1.0, max(maxFactor, z / (3 * deviation))); } } } return maxFactor; } /** * The following is useful for managing late detection of anomalies -- this * calculates the zig-zag over the values in the late detection * * @param point the point being scored * @param startPosition the position of the block where we think the anomaly * started * @param index the specific index in the block being tracked * @param baseDimension the size of the block * @param differenced has differencing been performed already * @return the average L1 deviation */ double calculatePathDeviation(float[] point, int startPosition, int index, int baseDimension, boolean differenced) { int position = startPosition; double variation = 0; int observation = 0; while (position + index + baseDimension < point.length) { variation += (differenced) ? Math.abs(point[position + index]) : Math.abs(point[position + index] - point[position + baseDimension + index]); position += baseDimension; ++observation; } return (observation == 0) ? 0 : variation / observation; } protected

DiVector constructUncertaintyBox(float[] point, int startPosition, P result) { TransformMethod method = result.getTransformMethod(); boolean differenced = (method == TransformMethod.DIFFERENCE) || (method == TransformMethod.NORMALIZE_DIFFERENCE); double[] scale = result.getScale(); double[] shift = result.getShift(); int baseDimensions = result.getDimension() / result.getShingleSize(); double[] gapLow = new double[baseDimensions]; double[] gapHigh = new double[baseDimensions]; for (int y = 0; y < baseDimensions; y++) { // 'a' represents the scaled value of the current point for dimension 'y'. // Given that 'point[startPosition + y]' is the normalized value of the actual // data point (x - mean) / std, // and 'scale[y]' is the standard deviation (std), we have: // a = std * ((x - mean) / std) = x - mean double a = scale[y] * point[startPosition + y]; // 'shiftBase' is the shift value for dimension 'y', which is the mean (mean) double shiftBase = shift[y]; // Initialize 'shiftAmount' to zero. This will account for numerical precision // adjustments later double shiftAmount = 0; // If the mean ('shiftBase') is not zero, adjust 'shiftAmount' to account for // numerical precision if (shiftBase != 0) { // 'shiftAmount' accounts for potential numerical errors due to shifting and // scaling shiftAmount += DEFAULT_NORMALIZATION_PRECISION * (scale[y] + Math.abs(shiftBase)); } // Calculate the average L1 deviation along the path for dimension 'y'. // This function computes the average absolute difference between successive // values in the shingle, // helping to capture recent fluctuations or trends in the data. double pathGap = calculatePathDeviation(point, startPosition, y, baseDimension, differenced); // 'noiseGap' is calculated based on the noise factor and the deviation for // dimension 'y'. // It represents the expected variation due to noise, scaled appropriately. double noiseGap = noiseFactor * result.getDeviations()[baseDimension + y]; // 'gap' is the maximum of the scaled 'pathGap' and 'noiseGap', adjusted by // 'shiftAmount' // and a small constant to ensure it's not zero. This gap accounts for recent // deviations and noise, // and serves as a baseline threshold for detecting anomalies. double gap = max(scale[y] * pathGap, noiseGap) + shiftAmount + DEFAULT_NORMALIZATION_PRECISION; // Compute 'gapLow[y]' and 'gapHigh[y]', which are thresholds to determine if // the deviation is significant // Since 'a = x - mean' and 'shiftBase = mean', then 'a + shiftBase = x - mean + // mean = x' // Therefore, 'Math.abs(a + shiftBase)' simplifies to the absolute value of the // actual data point |x| // For 'gapLow[y]', calculate the maximum of: // - 'ignoreNearExpectedFromBelow[y]', an absolute threshold for ignoring small // deviations below expected // - 'ignoreNearExpectedFromBelowByRatio[y] * |x|', a relative threshold based // on the actual value x // - 'gap', the calculated deviation adjusted for noise and precision // This ensures that minor deviations within the specified ratio or fixed // threshold are ignored, // reducing false positives. gapLow[y] = max(max(ignoreNearExpectedFromBelow[y], ignoreNearExpectedFromBelowByRatio[y] * (Math.abs(a + shiftBase))), gap); // Similarly, for 'gapHigh[y]': // - 'ignoreNearExpectedFromAbove[y]', an absolute threshold for ignoring small // deviations above expected // - 'ignoreNearExpectedFromAboveByRatio[y] * |x|', a relative threshold based // on the actual value x // - 'gap', the calculated deviation adjusted for noise and precision // This threshold helps in ignoring anomalies that are within an acceptable // deviation ratio from the expected value. gapHigh[y] = max(max(ignoreNearExpectedFromAbove[y], ignoreNearExpectedFromAboveByRatio[y] * (Math.abs(a + shiftBase))), gap); } return new DiVector(gapHigh, gapLow); } protected boolean withinGap(DiVector gap, int startPosition, double[] scale, float[] point, float[] otherPoint, int baseDimension) { boolean answer = false; // only for input dimensions, for which scale is defined currently for (int y = 0; y < baseDimension && !answer; y++) { double a = scale[y] * point[startPosition + y]; double b = scale[y] * otherPoint[startPosition + y]; boolean lower = (a < b - gap.low[y]); boolean upper = (a > b + gap.high[y]); answer = lower || upper; } return !answer; } /** * uses the native approximate near neighbor in RCF to determine what fraction * of samples from different trees are in the uncertainty box around the queried * point * * @param uncertaintyBox the potentially asymmetric box around a point (original * space) * @param point the point in question * @param correctedPoint any correction applied to the point based on prior * anomalies * @param startPosition the potential location of the anomaly * @param result the transcript of the current estimation * @param forest the resident RCF * @param

an extension of AnomalyDescriptor (to support forecast) * @return true if there is enough mass within the box */ protected

boolean explainedByConditionalField(DiVector uncertaintyBox, float[] point, float[] correctedPoint, int startPosition, P result, RandomCutForest forest) { List list = forest.getNearNeighborsInSample(correctedPoint); double averageDistance = list.stream().mapToDouble(e -> e.distance).average().getAsDouble(); double weight = 0; for (Neighbor e : list) { if (e.distance < 1.1 * averageDistance && withinGap(uncertaintyBox, startPosition, result.getScale(), point, e.point, point.length / result.getShingleSize())) { weight += e.count; } } return (weight >= samplingSupport * forest.getNumberOfTrees()); } /** * populates the scores and sets the score and attribution vectors; note some * attributions can remain null (for efficiency reasons) * * @param strategy the scoring strategy * @param point the current point being evaluated * @param forest the resident RCF * @param scoreVector the vector of scores * @param attributionVector the vector of attributions * @return the index of the score/attribution that is relevant */ protected int populateScores(ScoringStrategy strategy, float[] point, RandomCutForest forest, double[] scoreVector, DiVector[] attributionVector) { if (strategy != ScoringStrategy.DISTANCE) { scoreVector[EXPECTED_INVERSE_DEPTH_INDEX] = forest.getAnomalyScore(point); if (strategy == ScoringStrategy.MULTI_MODE || strategy == ScoringStrategy.MULTI_MODE_RECALL) { attributionVector[DISTANCE_INDEX] = forest.getSimpleDensity(point).distances; scoreVector[DISTANCE_INDEX] = attributionVector[DISTANCE_INDEX].getHighLowSum(); } return 0; } else { attributionVector[DISTANCE_INDEX] = forest.getSimpleDensity(point).distances; scoreVector[DISTANCE_INDEX] = attributionVector[DISTANCE_INDEX].getHighLowSum(); return 1; } } /** * returned the attribution vector; it tries to reuse cached version to save * computation * * @param choice the mode of the attribution in question * @param point the point being considered * @param attributionVector the vector (cached) of attributions * @param forest the resident RCF * @return the attribution correspond to the mode of attribution */ DiVector getCachedAttribution(int choice, float[] point, DiVector[] attributionVector, RandomCutForest forest) { if (attributionVector[choice] == null) { checkArgument(choice == EXPECTED_INVERSE_DEPTH_INDEX, "incorrect cached state of scores"); attributionVector[EXPECTED_INVERSE_DEPTH_INDEX] = forest.getAnomalyAttribution(point); } return attributionVector[choice]; } /** * computes the attribution of a (candidate) point based on mode, when the * results are not expected to be cached * * @param choice the mode * @param point the point in question * @param forest the resident RCF * @return the attribution of that mode */ DiVector getNewAttribution(int choice, float[] point, RandomCutForest forest) { if (choice == EXPECTED_INVERSE_DEPTH_INDEX) { return forest.getAnomalyAttribution(point); } else { return forest.getSimpleDensity(point).distances; } } /** * same as getNewAttribution, except when just the score suffices * * @param choice the mode in question * @param point the point in question * @param forest the resident RCF * @return the score corresponding to the mode */ double getNewScore(int choice, float[] point, RandomCutForest forest) { if (choice == EXPECTED_INVERSE_DEPTH_INDEX) { return forest.getAnomalyScore(point); } else { return forest.getSimpleDensity(point).distances.getHighLowSum(); } } /** * returns the threshold and grade corresponding to a mode choice (based on * scoring strategy) currently the scoring strategy is unused, but would likely * be used in future * * @param strategy the scoring strategy * @param choice the chosen mode * @param scoreVector the vector of scores * @param method the transformation method used * @param dimension the number of dimensions in RCF (used in auto adjustment * of thresholds) * @param shingleSize the shingle size (used in auto adjustment of thresholds) * @return a weighted object where the index is the threshold and the weight is * the grade */ protected Weighted getThresholdAndGrade(ScoringStrategy strategy, int choice, double[] scoreVector, TransformMethod method, int dimension, int shingleSize) { if (choice == EXPECTED_INVERSE_DEPTH_INDEX) { return thresholders[EXPECTED_INVERSE_DEPTH_INDEX] .getThresholdAndGrade(scoreVector[EXPECTED_INVERSE_DEPTH_INDEX], method, dimension, shingleSize); } else { return thresholders[DISTANCE_INDEX].getPrimaryThresholdAndGrade(scoreVector[DISTANCE_INDEX]); } } /** * the strategy to save scores based on the scoring strategy * * @param strategy the strategy * @param choice the mode for which corrected score applies * @param scoreVector the vector of scores * @param correctedScore the estimated score with corrections (can be the same * as score) * @param method the transformation method used * @param shingleSize the shingle size */ protected void saveScores(ScoringStrategy strategy, int choice, double[] scoreVector, double correctedScore, TransformMethod method, int shingleSize) { if (scoreVector[EXPECTED_INVERSE_DEPTH_INDEX] > 0) { double temp = (choice == EXPECTED_INVERSE_DEPTH_INDEX) ? correctedScore : scoreVector[EXPECTED_INVERSE_DEPTH_INDEX]; double last = (strategy == lastStrategy) ? lastScore[EXPECTED_INVERSE_DEPTH_INDEX] : 0; thresholders[EXPECTED_INVERSE_DEPTH_INDEX].update(scoreVector[EXPECTED_INVERSE_DEPTH_INDEX], temp, last, method); } if (scoreVector[DISTANCE_INDEX] > 0) { thresholders[DISTANCE_INDEX].update(scoreVector[DISTANCE_INDEX], lastScore[DISTANCE_INDEX]); } if (shingleSize > 1) { for (int i = 0; i < NUMBER_OF_MODES; i++) { lastScore[i] = scoreVector[i]; } } } /** * the core of the predictor-corrector thresholding for shingled data points. It * uses a simple threshold provided by the basic thresholder. It first checks if * obvious effects of the present; and absent such, for repeated breaches, how * critical is the new current information * * @param result returns the augmented description * @param lastSignificantDescriptor state of the computation for the last * candidate anomaly * @param forest the resident RCF * @return the anomaly descriptor result (which has plausibly mutated) */ protected

P detect(P result, RCFComputeDescriptor lastSignificantDescriptor, RandomCutForest forest) { if (result.getRCFPoint() == null) { lastDescriptor = result.copyOf(); return result; } float[] point = result.getRCFPoint(); ScoringStrategy strategy = result.getScoringStrategy(); double[] scoreVector = new double[NUMBER_OF_MODES]; DiVector[] attributionVector = new DiVector[NUMBER_OF_MODES]; final int originalChoice = populateScores(strategy, point, forest, scoreVector, attributionVector); DiVector attribution = null; final double score = scoreVector[originalChoice]; // we will not alter the basic score from RCF under any circumstance result.setRCFScore(score); // we will not have zero scores affect any thresholding if (score == 0) { lastDescriptor = result.copyOf(); return result; } long internalTimeStamp = result.getInternalTimeStamp(); int shingleSize = result.getShingleSize(); Weighted thresholdAndGrade = getThresholdAndGrade(strategy, originalChoice, scoreVector, result.getTransformMethod(), point.length, shingleSize); final double originalThreshold = thresholdAndGrade.index; double workingThreshold = originalThreshold; double workingGrade = thresholdAndGrade.weight; // we will not alter this result.setThreshold(originalThreshold); boolean candidate = false; if (workingGrade > 0 && lastDescriptor != null) { if (score > lastDescriptor.getRCFScore()) { candidate = true; } else { double runDiscount = max(workingThreshold, lastDescriptor.getThreshold()) * (1 + max(0.2, runLength / (2.0 * max(10, shingleSize)))); if (lastDescriptor.getRCFScore() - lastDescriptor.getThreshold() > score - runDiscount) { // the 'run' or the sequence of observations that create large scores // because of data (concept?) drift is defined to increase permissively // so that it is clear when the threshold is above the scores // a consequence of this can be masking -- anomalies just after a run/drift // would be difficult to determine -- but those should be difficult to determine candidate = true; } } } if (workingGrade > 0 && strategy == ScoringStrategy.MULTI_MODE) { Weighted temp = thresholders[DISTANCE_INDEX] .getPrimaryThresholdAndGrade(scoreVector[DISTANCE_INDEX]); if (temp.index > 0 && temp.weight == 0) { // there is a valid threshold and the grade is 0 workingGrade = 0; result.setCorrectionMode(CorrectionMode.MULTI_MODE); } } if (lastDescriptor != null && lastDescriptor.getExpectedRCFPoint() != null) { lastSignificantDescriptor = lastDescriptor; } int gap = (int) (internalTimeStamp - lastSignificantDescriptor.getInternalTimeStamp()); int difference = gap * baseDimension; float[] correctedPoint = null; double correctedScore = score; float[] expectedPoint = null; boolean inHighScoreRegion = false; int index = 0; int relative = (gap >= shingleSize) ? -shingleSize : -gap; int choice = originalChoice; if (strategy == ScoringStrategy.MULTI_MODE_RECALL && workingGrade == 0 && gap >= shingleSize) { // if overlapping shingles are being ruled out, then reconsidering those may not // be useful Weighted temp = thresholders[DISTANCE_INDEX] .getPrimaryThresholdAndGrade(scoreVector[DISTANCE_INDEX]); choice = DISTANCE_INDEX; correctedScore = scoreVector[DISTANCE_INDEX]; workingGrade = temp.weight; workingThreshold = temp.index; } // we perform basic correction correctedPoint = applyPastCorrector(point, gap, shingleSize, point.length / shingleSize, result.getScale(), result.getTransformMethod(), lastSignificantDescriptor); /** * we check if the point is too close to 0 for centered transforms as well as * explainable by the default distribution of differences this acts as a filter * and an upper bound for the grade */ if (workingGrade > 0) { workingGrade *= centeredTransformPass(result, correctedPoint); if (workingGrade == 0) { result.setCorrectionMode(CorrectionMode.NOISE); } } if (workingGrade > 0) { inHighScoreRegion = true; if (!Arrays.equals(correctedPoint, point)) { attribution = getNewAttribution(choice, correctedPoint, forest); correctedScore = attribution.getHighLowSum(); if (correctedScore > workingThreshold) { int tempIndex = maxContribution(attribution, point.length / shingleSize, relative) + 1; // use the additional new data for explanation int tempStartPosition = point.length + (tempIndex - 1) * point.length / shingleSize; float[] tempPoint = getExpectedPoint(attribution, tempStartPosition, point.length / shingleSize, correctedPoint, forest); if (tempPoint != null) { DiVector tempAttribution = getNewAttribution(choice, tempPoint, forest); correctedScore = tempAttribution.getHighLowSum(); if (!trigger(attribution, difference, point.length / shingleSize, tempAttribution, lastSignificantDescriptor, workingThreshold)) { workingGrade = 0; result.setCorrectionMode(CorrectionMode.ANOMALY_IN_SHINGLE); } } } } else { attribution = getCachedAttribution(choice, point, attributionVector, forest); } if (workingGrade > 0 && result.getScale() != null) { index = (shingleSize == 1) ? 0 : maxContribution(attribution, point.length / shingleSize, relative) + 1; int startPosition = point.length + (index - 1) * point.length / shingleSize; DiVector uncertaintyBox = constructUncertaintyBox(point, startPosition, result); if (autoAdjust && explainedByConditionalField(uncertaintyBox, point, correctedPoint, startPosition, result, forest)) { workingGrade = 0; result.setCorrectionMode(CONDITIONAL_FORECAST); } else { expectedPoint = getExpectedPoint(attribution, startPosition, point.length / shingleSize, correctedPoint, forest); if (expectedPoint != null) { if (difference < point.length) { DiVector newAttribution = getNewAttribution(choice, expectedPoint, forest); correctedScore = newAttribution.getHighLowSum(); if (!trigger(attribution, difference, point.length / shingleSize, newAttribution, lastSignificantDescriptor, workingThreshold)) { workingGrade = 0; result.setCorrectionMode(CorrectionMode.ANOMALY_IN_SHINGLE); } } else { // attribution will not be used correctedScore = getNewScore(choice, point, forest); } if (workingGrade > 0 && withinGap(uncertaintyBox, startPosition, result.getScale(), point, expectedPoint, point.length / shingleSize)) { workingGrade = 0; result.setCorrectionMode(CorrectionMode.FORECAST); } } } } if (workingGrade == 0) { // note score is the original score correctedScore = score; } } if (candidate) { if (autoAdjust) { for (int y = 0; y < baseDimension; y++) { deviationsActual[y].update(point[point.length - baseDimension + y]); if (expectedPoint != null) { deviationsExpected[y].update(expectedPoint[point.length - baseDimension + y]); } } if (runLength > DEFAULT_RUN_ALLOWED && workingGrade > 0) { boolean within = true; for (int y = 0; y < baseDimension && within; y++) { within = Math .abs(deviationsActual[y].getMean() - point[point.length - baseDimension + y]) < max( 2 * deviationsActual[y].getDeviation(), // results are in original space -- need to scale back to RCF space noiseFactor * result.getDeviations()[baseDimension + y] / result.getScale()[y]); // estimation of noise from within the run as well as a long term estimation if (expectedPoint != null) { double u = Math.abs( deviationsExpected[y].getMean() - expectedPoint[point.length - baseDimension + y]); within = within && Math.abs(deviationsExpected[y].getMean() - expectedPoint[point.length - baseDimension + y]) < 2 * max(deviationsExpected[y].getDeviation(), deviationsActual[y].getDeviation()) + 0.1 * Math.abs( deviationsActual[y].getMean() - deviationsExpected[y].getMean()); // forecasts cannot be more accurate than actuals; and forecasting would // not be exact } } if (within) { result.setCorrectionMode(DATA_DRIFT); workingGrade = 0; } } } if (ignoreDrift && workingGrade > 0) { if (runLength > 0 && gap < shingleSize) { result.setCorrectionMode(ALERT_ONCE); workingGrade = 0; } } } result.setAnomalyGrade(workingGrade); result.setInHighScoreRegion(inHighScoreRegion); if (workingGrade > 0) { if (expectedPoint != null) { result.setExpectedRCFPoint(expectedPoint); } attribution.renormalize(result.getRCFScore()); result.setStartOfAnomaly(true); result.setAttribution(attribution); result.setRelativeIndex(index); ++runLength; } else if (result.getCorrectionMode() == NONE) { runLength = 0; if (autoAdjust) { for (int y = 0; y < baseDimension; y++) { deviationsActual[y].reset(); deviationsExpected[y].reset(); } } } else if (runLength > 0) { // cannot start a run; but the run can be sustained ++runLength; } lastDescriptor = result.copyOf(); saveScores(strategy, choice, scoreVector, correctedScore, result.getTransformMethod(), shingleSize); return result; } public void setZfactor(double factor) { for (int i = 0; i < thresholders.length; i++) { thresholders[i].setZfactor(factor); } } public void setAbsoluteThreshold(double lower) { // only applies to thresholder 0 thresholders[EXPECTED_INVERSE_DEPTH_INDEX].setAbsoluteThreshold(lower); } public void setScoreDifferencing(double persistence) { // only applies to thresholder 0 thresholders[EXPECTED_INVERSE_DEPTH_INDEX].setScoreDifferencing(persistence); } public void setInitialThreshold(double initial) { // only applies to thresholder 0 thresholders[EXPECTED_INVERSE_DEPTH_INDEX].setInitialThreshold(initial); } public void setNumberOfAttributors(int numberOfAttributors) { checkArgument(numberOfAttributors > 0, "cannot be negative"); this.numberOfAttributors = numberOfAttributors; } public int getNumberOfAttributors() { return numberOfAttributors; } public double[] getLastScore() { return lastScore; } public void setLastScore(double[] score) { if (score != null) { System.arraycopy(score, 0, lastScore, 0, min(NUMBER_OF_MODES, score.length)); } } void validateIgnore(double[] shift, int length) { checkArgument(shift.length == length, () -> String.format(Locale.ROOT, "has to be of length %d but is %d", length, shift.length)); for (double element : shift) { checkArgument(element >= 0, "has to be non-negative"); } } public void setIgnoreNearExpectedFromAbove(double[] ignoreSimilarShift) { if (ignoreSimilarShift != null) { validateIgnore(ignoreSimilarShift, baseDimension); System.arraycopy(ignoreSimilarShift, 0, ignoreNearExpectedFromAbove, 0, baseDimension); } } public void setIgnoreNearExpectedFromBelow(double[] ignoreSimilarShift) { if (ignoreSimilarShift != null) { validateIgnore(ignoreSimilarShift, baseDimension); System.arraycopy(ignoreSimilarShift, 0, ignoreNearExpectedFromBelow, 0, baseDimension); } } public void setIgnoreNearExpectedFromAboveByRatio(double[] ignoreSimilarShift) { if (ignoreSimilarShift != null) { validateIgnore(ignoreSimilarShift, baseDimension); System.arraycopy(ignoreSimilarShift, 0, ignoreNearExpectedFromAboveByRatio, 0, baseDimension); } } public void setIgnoreNearExpectedFromBelowByRatio(double[] ignoreSimilarShift) { if (ignoreSimilarShift != null) { validateIgnore(ignoreSimilarShift, baseDimension); System.arraycopy(ignoreSimilarShift, 0, ignoreNearExpectedFromBelowByRatio, 0, baseDimension); } } // to be used for the state classes only public void setIgnoreNearExpected(double[] ignoreSimilarShift) { if (ignoreSimilarShift != null) { validateIgnore(ignoreSimilarShift, 4 * baseDimension); System.arraycopy(ignoreSimilarShift, 0, ignoreNearExpectedFromAbove, 0, baseDimension); System.arraycopy(ignoreSimilarShift, baseDimension, ignoreNearExpectedFromBelow, 0, baseDimension); System.arraycopy(ignoreSimilarShift, 2 * baseDimension, ignoreNearExpectedFromAboveByRatio, 0, baseDimension); System.arraycopy(ignoreSimilarShift, 3 * baseDimension, ignoreNearExpectedFromBelowByRatio, 0, baseDimension); } } public double[] getIgnoreNearExpected() { double[] answer = new double[4 * baseDimension]; System.arraycopy(ignoreNearExpectedFromAbove, 0, answer, 0, baseDimension); System.arraycopy(ignoreNearExpectedFromBelow, 0, answer, baseDimension, baseDimension); System.arraycopy(ignoreNearExpectedFromAboveByRatio, 0, answer, 2 * baseDimension, baseDimension); System.arraycopy(ignoreNearExpectedFromBelowByRatio, 0, answer, 3 * baseDimension, baseDimension); return answer; } public long getRandomSeed() { return randomSeed; } public BasicThresholder[] getThresholders() { return thresholders; } public int getBaseDimension() { return baseDimension; } public ScoringStrategy getLastStrategy() { return lastStrategy; } public void setLastStrategy(ScoringStrategy strategy) { this.lastStrategy = strategy; } public Deviation[] getDeviations() { if (!autoAdjust) { return null; } checkArgument(deviationsActual.length == deviationsExpected.length, "incorrect state"); checkArgument(deviationsActual.length == baseDimension, "length should be base dimension"); Deviation[] answer = new Deviation[2 * deviationsActual.length]; for (int i = 0; i < deviationsActual.length; i++) { answer[i] = deviationsActual[i]; } for (int i = 0; i < deviationsExpected.length; i++) { answer[i + deviationsActual.length] = deviationsExpected[i]; } return answer; } public double getSamplingRate() { return samplingRate; } public void setSamplingRate(double samplingRate) { checkArgument(samplingRate > 0, " cannot be negative"); checkArgument(samplingRate < 1.0, " has to be in [0,1)"); this.samplingRate = samplingRate; } public double[] getModeInformation() { return modeInformation; } // to be used in future public void setModeInformation(double[] modeInformation) { } public boolean isAutoAdjust() { return autoAdjust; } public void setAutoAdjust(boolean autoAdjust) { this.autoAdjust = autoAdjust; } public double getNoiseFactor() { return noiseFactor; } public void setNoiseFactor(double noiseFactor) { this.noiseFactor = noiseFactor; } public void setIgnoreDrift(boolean ignoreDrift) { this.ignoreDrift = ignoreDrift; } public boolean isIgnoreDrift() { return ignoreDrift; } public void setLastDescriptor(RCFComputeDescriptor lastDescriptor) { this.lastDescriptor = lastDescriptor.copyOf(); } public RCFComputeDescriptor getLastDescriptor() { return lastDescriptor; } public int getRunLength() { return runLength; } public void setRunLength(int runLength) { this.runLength = runLength; } public double getSamplingSupport() { return samplingSupport; } public void setSamplingSupport(double sampling) { checkArgument(sampling >= 0, " cannot be negative "); checkArgument(sampling < 2 * DEFAULT_SAMPLING_SUPPORT, " cannot be more than " + (2 * DEFAULT_SAMPLING_SUPPORT)); } } ================================================ FILE: Java/parkservices/src/main/java/com/amazon/randomcutforest/parkservices/RCFCaster.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.parkservices; import static com.amazon.randomcutforest.CommonUtils.checkArgument; import static java.lang.Math.max; import java.util.ArrayList; import java.util.List; import java.util.Locale; import java.util.Optional; import java.util.function.Function; import lombok.Getter; import lombok.Setter; import com.amazon.randomcutforest.RandomCutForest; import com.amazon.randomcutforest.config.ForestMode; import com.amazon.randomcutforest.config.TransformMethod; import com.amazon.randomcutforest.parkservices.calibration.ErrorHandler; import com.amazon.randomcutforest.parkservices.config.Calibration; import com.amazon.randomcutforest.parkservices.config.ScoringStrategy; import com.amazon.randomcutforest.parkservices.returntypes.RCFComputeDescriptor; import com.amazon.randomcutforest.preprocessor.Preprocessor; import com.amazon.randomcutforest.returntypes.RangeVector; import com.amazon.randomcutforest.returntypes.TimedRangeVector; @Getter @Setter public class RCFCaster extends ThresholdedRandomCutForest { public static double DEFAULT_ERROR_PERCENTILE = 0.1; public static Calibration DEFAULT_CALIBRATION = Calibration.SIMPLE; protected int forecastHorizon; protected ErrorHandler errorHandler; protected int errorHorizon; protected Calibration calibrationMethod; public static class Builder extends ThresholdedRandomCutForest.Builder { int forecastHorizon; int errorHorizon; double percentile = DEFAULT_ERROR_PERCENTILE; protected Calibration calibrationMethod = DEFAULT_CALIBRATION; // default is to use less space protected boolean useRCF = false; Optional upperLimit = Optional.empty(); Optional lowerLimit = Optional.empty(); Builder() { super(); // changing the default; transformMethod = TransformMethod.NORMALIZE; } public Builder forecastHorizon(int horizon) { this.forecastHorizon = horizon; return this; } public Builder errorHorizon(int errorHorizon) { this.errorHorizon = errorHorizon; return this; } public Builder percentile(double percentile) { this.percentile = percentile; return this; } public Builder calibration(Calibration calibrationMethod) { this.calibrationMethod = calibrationMethod; return this; } public Builder lowerLimit(float[] lowerLimit) { this.lowerLimit = Optional.of(lowerLimit); return this; } public Builder upperLimit(float[] upperLimit) { this.upperLimit = Optional.of(upperLimit); return this; } public Builder useRCFCallibration(boolean use) { useRCF = use; return this; } @Override public RCFCaster build() { checkArgument(forecastHorizon > 0, "need non-negative horizon"); checkArgument(shingleSize > 0, "need shingle size > 1"); checkArgument(forestMode != ForestMode.STREAMING_IMPUTE, "error estimation with on the fly imputation should not be abstracted, " + "either estimate errors outside of this object " + "or perform on the fly imputation outside this code"); checkArgument(forestMode != ForestMode.TIME_AUGMENTED, "error estimation when time is used as a field in the forest should not be abstracted" + "perform estimation outside this code"); checkArgument(!internalShinglingEnabled.isPresent() || internalShinglingEnabled.get(), "internal shingling only"); int inputLength = dimensions / shingleSize; if (errorHorizon == 0) { errorHorizon = max(sampleSize, 2 * forecastHorizon); } validate(); return new RCFCaster(this); } } public static Builder builder() { return new Builder(); } public RCFCaster(Builder builder) { super(builder); forecastHorizon = builder.forecastHorizon; errorHorizon = builder.errorHorizon; ErrorHandler.Builder errorBuilder = ErrorHandler.builder().dimensions(builder.dimensions) .shingleSize(builder.shingleSize).forecastHorizon(builder.forecastHorizon) .percentile(builder.percentile).errorHorizon(builder.errorHorizon).useRCF(builder.useRCF); builder.lowerLimit.ifPresent(errorBuilder::lowerLimit); builder.upperLimit.ifPresent(errorBuilder::upperLimit); errorHandler = new ErrorHandler(errorBuilder); calibrationMethod = builder.calibrationMethod; } // for mappers public RCFCaster(ForestMode forestMode, TransformMethod transformMethod, ScoringStrategy scoringStrategy, RandomCutForest forest, PredictorCorrector predictorCorrector, Preprocessor preprocessor, RCFComputeDescriptor descriptor, int forecastHorizon, ErrorHandler errorHandler, int errorHorizon, Calibration calibrationMethod) { super(forestMode, transformMethod, scoringStrategy, forest, predictorCorrector, preprocessor, descriptor); this.forecastHorizon = forecastHorizon; this.errorHandler = errorHandler; this.errorHorizon = errorHorizon; this.calibrationMethod = calibrationMethod; } /** * a single call that preprocesses data, compute score/grade, generates forecast * and updates state * * @param inputPoint current input point * @param timestamp time stamp of input * @return forecast descriptor for the current input point */ @Override public ForecastDescriptor process(double[] inputPoint, long timestamp) { return process(inputPoint, timestamp, null); } void augment(ForecastDescriptor answer) { super.augment(answer); TimedRangeVector timedForecast = new TimedRangeVector( forest.getDimensions() * forecastHorizon / preprocessor.getShingleSize(), forecastHorizon); // forest is ready mens that we can forecast -- but there is an implicit // assumption that preprocessor is ready if (forest.isOutputReady() && preprocessor.isOutputReady()) { if (errorHandler.getSequenceIndex() > 0) { // if not then there is no forecast stored // forecast has to be there first errorHandler.updateActuals(answer.getCurrentInput(), answer.getPostDeviations()); errorHandler.augmentDescriptor(answer); } timedForecast = extrapolate(forecastHorizon, true, 1.0); // note that internal timestamp of answer is 1 step in the past // outputReady corresponds to first (and subsequent) forecast errorHandler.updateForecasts(timedForecast.rangeVector); } answer.setTimedForecast(timedForecast); } /** * a single call that preprocesses data, compute score/grade and updates state * when the current input has potentially missing values * * @param inputPoint current input point * @param timestamp time stamp of input * @param missingValues this is not meaningful for forecast; but kept as a * parameter since it conforms to (sometimes used) * ThresholdedRCF * @return forecast descriptor for the current input point */ @Override public ForecastDescriptor process(double[] inputPoint, long timestamp, int[] missingValues) { checkArgument(missingValues == null, "on the fly imputation and error estimation should not mix"); ForecastDescriptor answer = new ForecastDescriptor(inputPoint, timestamp, forecastHorizon); answer.setScoringStrategy(scoringStrategy); boolean cacheDisabled = (forest.getBoundingBoxCacheFraction() == 0); try { if (cacheDisabled) { // turn caching on temporarily forest.setBoundingBoxCacheFraction(1.0); } augment(answer); } finally { if (cacheDisabled) { // turn caching off forest.setBoundingBoxCacheFraction(0); } } return answer; } public void calibrate(double[] actuals, Calibration calibration, RangeVector ranges) { errorHandler.calibrate(actuals, calibration, ranges); } @Override public TimedRangeVector extrapolate(int horizon, boolean correct, double centrality) { return this.extrapolate(calibrationMethod, horizon, correct, centrality); } public TimedRangeVector extrapolate(Calibration calibration, int horizon, boolean correct, double centrality) { TimedRangeVector answer = super.extrapolate(horizon, correct, centrality); double[] last = getPreprocessor().getShingledInput(getPreprocessor().getShingleSize() - 1); calibrate(last, calibration, answer.rangeVector); return answer; } @Override public List processSequentially(double[][] data, Function filter) { if (data == null || data.length == 0) { return new ArrayList<>(); } long timestamp = preprocessor.getInternalTimeStamp(); long[] timestamps = new long[data.length]; for (int i = 0; i < data.length; i++) { timestamps[i] = ++timestamp; } return processSequentially(data, timestamps, filter); } public List processSequentially(double[][] data, long[] timestamps, Function filter) { // Precondition checks checkArgument(filter != null, "filter must not be null"); if (data != null && data.length > 0) { checkArgument(timestamps != null, "timestamps must not be null when data is non-empty"); checkArgument(timestamps.length == data.length, String.format(Locale.ROOT, "timestamps length (%s) must equal data length (%s)", timestamps.length, data.length)); for (int i = 1; i < timestamps.length; i++) { checkArgument(timestamps[i] > timestamps[i - 1], String.format(Locale.ROOT, "timestamps must be strictly ascending: " + "timestamps[%s]=%s is not > timestamps[%s]=%s", i, timestamps[i], i - 1, timestamps[i - 1])); } } ArrayList answer = new ArrayList<>(); if (data != null) { if (data.length > 0) { boolean cacheDisabled = (forest.getBoundingBoxCacheFraction() == 0); try { if (cacheDisabled) { // turn caching on temporarily forest.setBoundingBoxCacheFraction(1.0); } int length = preprocessor.getInputLength(); for (int i = 0; i < data.length; i++) { double[] point = data[i]; checkArgument(point != null, " data should not be null "); checkArgument(point.length == length, " nonuniform lengths "); ForecastDescriptor description = new ForecastDescriptor(point, timestamps[i], forecastHorizon); augment(description); if (filter.apply(description)) { answer.add(description); } } } finally { if (cacheDisabled) { // turn caching off forest.setBoundingBoxCacheFraction(0); } } } } return answer; } public void setUpperLimit(float[] upperLimit) { errorHandler.setUpperLimit(upperLimit); } public void setLowerLimit(float[] lowerLimit) { errorHandler.setLowerLimit(lowerLimit); } } ================================================ FILE: Java/parkservices/src/main/java/com/amazon/randomcutforest/parkservices/SequentialAnalysis.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.parkservices; import static com.amazon.randomcutforest.CommonUtils.checkArgument; import static com.amazon.randomcutforest.RandomCutForest.DEFAULT_NUMBER_OF_TREES; import static com.amazon.randomcutforest.RandomCutForest.DEFAULT_SAMPLE_SIZE; import java.util.ArrayList; import java.util.List; import com.amazon.randomcutforest.config.ForestMode; import com.amazon.randomcutforest.config.TransformMethod; import com.amazon.randomcutforest.parkservices.config.Calibration; import com.amazon.randomcutforest.parkservices.returntypes.AnalysisDescriptor; public class SequentialAnalysis { /** * provides a list of anomalies given a block of data. While this is a fairly * simple function, it is provided as a reference such that users do not have * depend on interpretations of sequentian analysis * * @param data the array containing the values * @param shingleSize shinglesize of RCF * @param sampleSize sampleSize of RCF * @param numberOfTrees the numberOfTres used by RCF * @param timeDecay the time decay parameter of RCF; think of half life of * data * @param outputAfter the value after which we * @param transformMethod the transformation used in preprocessing * @param transformDecay the half life of data in preprocessing (if in doubt, * use the same as timeDecay) * @param seed a random seed * @return a list of anomalies */ public static List detectAnomalies(double[][] data, int shingleSize, int sampleSize, int numberOfTrees, double timeDecay, int outputAfter, TransformMethod transformMethod, double transformDecay, long seed) { checkArgument(data != null, "cannot be a null array"); int inputDimension = data[0].length; int dimensions = inputDimension * shingleSize; double fraction = 1.0 * outputAfter / sampleSize; ThresholdedRandomCutForest forest = ThresholdedRandomCutForest.builder().dimensions(dimensions).randomSeed(seed) .numberOfTrees(numberOfTrees).shingleSize(shingleSize).sampleSize(sampleSize) .internalShinglingEnabled(true).anomalyRate(0.01).forestMode(ForestMode.STANDARD).timeDecay(timeDecay) .transformMethod(transformMethod).outputAfter(outputAfter).transformDecay(transformDecay) .initialAcceptFraction(fraction).build(); return forest.processSequentially(data); } public static List detectAnomalies(double[][] data, int shingleSize, int sampleSize, double timeDecay, TransformMethod transformMethod, long seed) { return detectAnomalies(data, shingleSize, sampleSize, DEFAULT_NUMBER_OF_TREES, timeDecay, sampleSize / 4, transformMethod, timeDecay, seed); } public static List detectAnomalies(double[][] data, int shingleSize, double timeDecay, TransformMethod transformMethod, double transformDecay, long seed) { return detectAnomalies(data, shingleSize, DEFAULT_SAMPLE_SIZE, DEFAULT_NUMBER_OF_TREES, timeDecay, DEFAULT_SAMPLE_SIZE / 4, transformMethod, transformDecay, seed); } /** * Same as the anomaly detector but provides a list of anomalies as well as a * calibrated (with testing) interval and forecasts. * * @param inputArray the input * @param shingleSize shingle size of RCF * @param sampleSize samplesize of RCF * @param timeDecay timedecay of RCF * @param outputAfter the input after which we perform score evaluation * @param transformMethod transformation method of preprocessing * @param transformDecay the time decay of preprocessing * @param forecastHorizon the number of steps to forecast (during and at the * end) * @param errorHorizon the number of steps to perform calibration (during the * sequence) * @param percentile the percentile of error one is interested in * calibrating (we recommend 0.1) * @param seed random seed * @return a list of anomalies and the final forecast wilh callibration */ public static AnalysisDescriptor forecastWithAnomalies(double[][] inputArray, int shingleSize, int sampleSize, double timeDecay, int outputAfter, TransformMethod transformMethod, double transformDecay, int forecastHorizon, int errorHorizon, double percentile, Calibration calibration, long seed) { checkArgument(inputArray != null, " input cannot be null"); int inputDimension = inputArray[0].length; int dimensions = shingleSize * inputDimension; int numberOfTrees = 50; double fraction = 1.0 * outputAfter / sampleSize; RCFCaster caster = RCFCaster.builder().dimensions(dimensions).randomSeed(seed).numberOfTrees(numberOfTrees) .shingleSize(shingleSize).sampleSize(sampleSize).internalShinglingEnabled(true).anomalyRate(0.01) .forestMode(ForestMode.STANDARD).timeDecay(timeDecay).transformMethod(transformMethod) .outputAfter(outputAfter).calibration(calibration).initialAcceptFraction(fraction) .forecastHorizon(forecastHorizon).transformDecay(transformDecay).errorHorizon(errorHorizon) .percentile(percentile).build(); ArrayList descriptors = new ArrayList<>(); ForecastDescriptor last = null; for (double[] input : inputArray) { ForecastDescriptor descriptor = caster.process(input, 0L); if (descriptor.getAnomalyGrade() > 0) { descriptors.add(descriptor); } last = descriptor; } return new AnalysisDescriptor(descriptors, last); } public static AnalysisDescriptor forecastWithAnomalies(double[][] inputArray, int shingleSize, int sampleSize, double timeDecay, TransformMethod transformMethod, int forecastHorizon, int errorHorizon, long seed) { return forecastWithAnomalies(inputArray, shingleSize, sampleSize, timeDecay, sampleSize / 4, transformMethod, timeDecay, forecastHorizon, errorHorizon, 0.1, Calibration.SIMPLE, seed); } } ================================================ FILE: Java/parkservices/src/main/java/com/amazon/randomcutforest/parkservices/ThresholdedRandomCutForest.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.parkservices; import static com.amazon.randomcutforest.CommonUtils.checkArgument; import static com.amazon.randomcutforest.CommonUtils.toFloatArray; import static com.amazon.randomcutforest.RandomCutForest.DEFAULT_BOUNDING_BOX_CACHE_FRACTION; import static com.amazon.randomcutforest.RandomCutForest.DEFAULT_CENTER_OF_MASS_ENABLED; import static com.amazon.randomcutforest.RandomCutForest.DEFAULT_INITIAL_ACCEPT_FRACTION; import static com.amazon.randomcutforest.RandomCutForest.DEFAULT_INTERNAL_SHINGLING_ENABLED; import static com.amazon.randomcutforest.RandomCutForest.DEFAULT_NUMBER_OF_TREES; import static com.amazon.randomcutforest.RandomCutForest.DEFAULT_OUTPUT_AFTER_FRACTION; import static com.amazon.randomcutforest.RandomCutForest.DEFAULT_PARALLEL_EXECUTION_ENABLED; import static com.amazon.randomcutforest.RandomCutForest.DEFAULT_SAMPLE_SIZE; import static com.amazon.randomcutforest.RandomCutForest.DEFAULT_SHINGLE_SIZE; import static com.amazon.randomcutforest.RandomCutForest.DEFAULT_STORE_SEQUENCE_INDEXES_ENABLED; import static com.amazon.randomcutforest.config.ImputationMethod.RCF; import static com.amazon.randomcutforest.parkservices.threshold.BasicThresholder.DEFAULT_ABSOLUTE_THRESHOLD; import static com.amazon.randomcutforest.parkservices.threshold.BasicThresholder.DEFAULT_SCORE_DIFFERENCING; import static com.amazon.randomcutforest.parkservices.threshold.BasicThresholder.DEFAULT_Z_FACTOR; import static com.amazon.randomcutforest.preprocessor.Preprocessor.DEFAULT_START_NORMALIZATION; import static com.amazon.randomcutforest.preprocessor.Preprocessor.DEFAULT_STOP_NORMALIZATION; import static java.lang.Math.max; import static java.lang.Math.min; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Locale; import java.util.Optional; import java.util.Random; import java.util.function.Function; import lombok.Getter; import lombok.Setter; import com.amazon.randomcutforest.RandomCutForest; import com.amazon.randomcutforest.config.ForestMode; import com.amazon.randomcutforest.config.ImputationMethod; import com.amazon.randomcutforest.config.Precision; import com.amazon.randomcutforest.config.TransformMethod; import com.amazon.randomcutforest.parkservices.config.ScoringStrategy; import com.amazon.randomcutforest.parkservices.returntypes.RCFComputeDescriptor; import com.amazon.randomcutforest.parkservices.threshold.BasicThresholder; import com.amazon.randomcutforest.preprocessor.IPreprocessor; import com.amazon.randomcutforest.preprocessor.Preprocessor; import com.amazon.randomcutforest.returntypes.DiVector; import com.amazon.randomcutforest.returntypes.RangeVector; import com.amazon.randomcutforest.returntypes.TimedRangeVector; /** * This class provides a combined RCF and thresholder, both of which operate in * a streaming manner and respect the arrow of time. */ @Getter @Setter public class ThresholdedRandomCutForest { // saved description of the last seen anomaly RCFComputeDescriptor lastAnomalyDescriptor; // forestMode of operation protected ForestMode forestMode = ForestMode.STANDARD; protected TransformMethod transformMethod = TransformMethod.NONE; protected ScoringStrategy scoringStrategy = ScoringStrategy.EXPECTED_INVERSE_DEPTH; protected RandomCutForest forest; protected PredictorCorrector predictorCorrector; protected IPreprocessor preprocessor; public ThresholdedRandomCutForest(Builder builder) { forestMode = builder.forestMode; transformMethod = builder.transformMethod; scoringStrategy = builder.scoringStrategy; Preprocessor.Builder preprocessorBuilder = Preprocessor.builder().shingleSize(builder.shingleSize) .transformMethod(builder.transformMethod).forestMode(builder.forestMode); int inputLength; if (builder.forestMode == ForestMode.TIME_AUGMENTED) { inputLength = builder.dimensions / builder.shingleSize; preprocessorBuilder.inputLength(inputLength); builder.dimensions += builder.shingleSize; preprocessorBuilder.normalizeTime(builder.normalizeTime); // force internal shingling for this option builder.internalShinglingEnabled = Optional.of(true); } else if (builder.forestMode == ForestMode.STREAMING_IMPUTE) { // already validated inputLength = builder.dimensions / builder.shingleSize; preprocessorBuilder.inputLength(inputLength); preprocessorBuilder.imputationMethod(builder.imputationMethod); preprocessorBuilder.normalizeTime(true); if (builder.fillValues != null) { preprocessorBuilder.fillValues(builder.fillValues); } // forcing external for the forest to control admittance builder.internalShinglingEnabled = Optional.of(true); preprocessorBuilder.useImputedFraction(builder.useImputedFraction.orElse(0.5)); } else { // STANDARD boolean smallInput = builder.internalShinglingEnabled.orElse(DEFAULT_INTERNAL_SHINGLING_ENABLED); inputLength = (smallInput) ? builder.dimensions / builder.shingleSize : builder.dimensions; preprocessorBuilder.inputLength(inputLength); } forest = builder.buildForest(); validateNonNegativeArray(builder.weights); preprocessorBuilder.weights(builder.weights); preprocessorBuilder.weightTime(builder.weightTime.orElse(1.0)); preprocessorBuilder.transformDecay(builder.transformDecay.orElse(1.0 / builder.sampleSize)); // to be used later preprocessorBuilder.randomSeed(builder.randomSeed.orElse(0L) + 1); preprocessorBuilder.dimensions(builder.dimensions); preprocessorBuilder.stopNormalization(builder.stopNormalization.orElse(DEFAULT_STOP_NORMALIZATION)); preprocessorBuilder.startNormalization(builder.startNormalization.orElse(DEFAULT_START_NORMALIZATION)); preprocessor = preprocessorBuilder.build(); predictorCorrector = new PredictorCorrector(forest.getTimeDecay(), builder.anomalyRate, builder.autoAdjust, builder.dimensions / builder.shingleSize, builder.randomSeed.orElse(0L)); lastAnomalyDescriptor = new RCFComputeDescriptor(null, 0, builder.forestMode, builder.transformMethod, builder.imputationMethod); // when autoAdjust is true, the lowerThreshold is dynamically calculated if (!builder.autoAdjust) { predictorCorrector.setAbsoluteThreshold(builder.lowerThreshold.orElse(DEFAULT_ABSOLUTE_THRESHOLD)); } predictorCorrector.setZfactor(builder.zFactor); predictorCorrector.setScoreDifferencing(builder.scoreDifferencing.orElse(DEFAULT_SCORE_DIFFERENCING)); builder.ignoreNearExpectedFromAbove.ifPresent(predictorCorrector::setIgnoreNearExpectedFromAbove); builder.ignoreNearExpectedFromBelow.ifPresent(predictorCorrector::setIgnoreNearExpectedFromBelow); builder.ignoreNearExpectedFromAboveByRatio.ifPresent(predictorCorrector::setIgnoreNearExpectedFromAboveByRatio); builder.ignoreNearExpectedFromBelowByRatio.ifPresent(predictorCorrector::setIgnoreNearExpectedFromBelowByRatio); predictorCorrector.setLastStrategy(builder.scoringStrategy); predictorCorrector.setIgnoreDrift(builder.alertOnceInDrift); } void validateNonNegativeArray(double[] array) { if (array != null) { for (double element : array) { checkArgument(element >= 0, " has to be non-negative"); } } } // for mappers public ThresholdedRandomCutForest(ForestMode forestMode, TransformMethod transformMethod, ScoringStrategy scoringStrategy, RandomCutForest forest, PredictorCorrector predictorCorrector, Preprocessor preprocessor, RCFComputeDescriptor descriptor) { this.forestMode = forestMode; this.transformMethod = transformMethod; this.scoringStrategy = scoringStrategy; this.forest = forest; this.predictorCorrector = predictorCorrector; this.preprocessor = preprocessor; this.lastAnomalyDescriptor = descriptor; } // this constructor produces an internally shingled ThresholdedRCF model from an // externally shingled RCF model -- possibly as a part of an externally shingled // ThresholdedRCF, absent any transformations and augmentations. // (these externally shingled models may or may not be in use in current version // of OpenSearch) // A benefit of this conversion would be that imputations would be accessible // to ThresholdedRCF -- that is, even if not every value of the input tuple is // known // the function process() would be able to provide an anomaly score (which is // likely near // minimum, since RCF is used to fill in the missing values). As a result, high // values of the // anomaly score will continue to be likely anomalies. // Note that the basic RandomCutForest cannot be changed easily // but the process() function would only require a fraction of the input // see ThresholdedRandomCutForestMapperTest public ThresholdedRandomCutForest(RandomCutForest forest, double futureAnomalyRate, List values, double[] lastShingledInput) { this.forest = forest; int dimensions = forest.getDimensions(); int inputLength = dimensions / forest.getShingleSize(); Preprocessor preprocessor = new Preprocessor.Builder<>().transformMethod(TransformMethod.NONE) .dimensions(dimensions).shingleSize(forest.getShingleSize()).inputLength(inputLength) .initialShingledInput(lastShingledInput).initialPoint(toFloatArray(lastShingledInput)) .imputationMethod(RCF).startNormalization(0).build(); this.predictorCorrector = new PredictorCorrector(new BasicThresholder(values, futureAnomalyRate), inputLength); preprocessor.setValuesSeen((int) forest.getTotalUpdates()); preprocessor.getDataQuality()[0].update(1.0); this.preprocessor = preprocessor; this.lastAnomalyDescriptor = new RCFComputeDescriptor(null, forest.getTotalUpdates()); } protected boolean saveDescriptor(T lastDescriptor) { return (lastDescriptor.getAnomalyGrade() > 0); } protected

void augment(P description) { description.setScoringStrategy(scoringStrategy); initialSetup(description, lastAnomalyDescriptor, forest); predictorCorrector.detect(description, lastAnomalyDescriptor, forest); postProcess(description); if (saveDescriptor(description)) { lastAnomalyDescriptor = description.copyOf(); } } /** * a single call that prepreprocesses data, compute score/grade and updates * state * * @param inputPoint current input point * @param timestamp time stamp of input * @return anomaly descriptor for the current input point */ public AnomalyDescriptor process(double[] inputPoint, long timestamp) { return process(inputPoint, timestamp, null); } /** * a single call that prepreprocesses data, compute score/grade and updates * state when the current input has potentially missing values * * @param inputPoint current input point * @param timestamp time stamp of input * @param missingValues indices of the input which are missing/questionable * values * @return anomaly descriptor for the current input point */ public AnomalyDescriptor process(double[] inputPoint, long timestamp, int[] missingValues) { AnomalyDescriptor description = new AnomalyDescriptor(inputPoint, timestamp); description.setScoringStrategy(scoringStrategy); boolean cacheDisabled = (forest.getBoundingBoxCacheFraction() == 0); try { if (cacheDisabled) { // turn caching on temporarily forest.setBoundingBoxCacheFraction(1.0); } if (missingValues != null) { checkArgument(missingValues.length <= inputPoint.length, " incorrect data"); for (int i = 0; i < missingValues.length; i++) { checkArgument(missingValues[i] >= 0, " missing values cannot be at negative position"); checkArgument(missingValues[i] < inputPoint.length, "missing values cannot be at position larger than input length"); } description.setMissingValues(missingValues); } augment(description); } finally { if (cacheDisabled) { // turn caching off forest.setBoundingBoxCacheFraction(0); } } if (saveDescriptor(description)) { lastAnomalyDescriptor = description.copyOf(); } return description; } /** * the following function processes a list of vectors sequentially; the main * benefit of this invocation is the caching is persisted from one data point to * another and thus the execution is efficient. Moreover in many scenarios where * serialization deserialization is expensive then it may be of benefit of * invoking sequential process on a contiguous chunk of input (we avoid the use * of the word batch -- the entire goal of this procedure is to provide * sequential processing and not standard batch processing). The procedure * avoids transfer of ephemeral transient objects for non-anomalies and thereby * can have additional benefits. * * @param data a vectors of vectors (each of which has to have the same * inputLength) * @param filter a condition to drop desriptor (recommended filter: anomalyGrade * positive) * @return collection of descriptors of the anomalies filtered by the condition */ public List processSequentially(double[][] data, Function filter) { if (data == null || data.length == 0) { return new ArrayList<>(); } long timestamp = preprocessor.getInternalTimeStamp(); long[] timestamps = new long[data.length]; for (int i = 0; i < data.length; i++) { timestamps[i] = ++timestamp; } return processSequentially(data, timestamps, filter); } /** * the following function processes a list of vectors sequentially; the main * benefit of this invocation is the caching is persisted from one data point to * another and thus the execution is efficient. Moreover in many scenarios where * serialization deserialization is expensive then it may be of benefit of * invoking sequential process on a contiguous chunk of input (we avoid the use * of the word batch -- the entire goal of this procedure is to provide * sequential processing and not standard batch processing). The procedure * avoids transfer of ephemeral transient objects for non-anomalies and thereby * can have additional benefits. At the moment the operation does not support * external timestamps. * * * * @param data a vectors of vectors (each of which has to have the same * inputLength). Mising values are represented by Double.NaN * in a vector. * @param timestamps a vector of timestamps (in the same order as the data, has * to be same length as data, and ascending) * @param filter a condition to drop desriptor (recommended filter: * anomalyGrade positive) * @return collection of descriptors of the anomalies filtered by the condition * @throws IllegalArgumentException if *

    *
  • data is non-null but timestamps is * null
  • *
  • timestamps.length != data.length
  • *
  • timestamps is not strictly * ascending
  • *
  • any data[i].length != * preprocessor.getInputLength()
  • *
*/ public List processSequentially(double[][] data, long[] timestamps, Function filter) { // Precondition checks checkArgument(filter != null, "filter must not be null"); if (data != null && data.length > 0) { checkArgument(timestamps != null, "timestamps must not be null when data is non-empty"); checkArgument(timestamps.length == data.length, String.format(Locale.ROOT, "timestamps length (%s) must equal data length (%s)", timestamps.length, data.length)); for (int i = 1; i < timestamps.length; i++) { checkArgument(timestamps[i] > timestamps[i - 1], String.format(Locale.ROOT, "timestamps must be strictly ascending: " + "timestamps[%s]=%s is not > timestamps[%s]=%s", i, timestamps[i], i - 1, timestamps[i - 1])); } } ArrayList answer = new ArrayList<>(); if (data != null && data.length > 0) { boolean cacheDisabled = (forest.getBoundingBoxCacheFraction() == 0); try { if (cacheDisabled) { // turn caching on temporarily forest.setBoundingBoxCacheFraction(1.0); } int length = preprocessor.getInputLength(); for (int i = 0; i < data.length; i++) { double[] point = data[i]; long timestamp = timestamps[i]; checkArgument(point != null, " data should not be null "); checkArgument(point.length == length, " nonuniform lengths "); AnomalyDescriptor description = new AnomalyDescriptor(point, timestamp); // check missing values in point. int[] missingValues = generateMissingIndicesArray(point); if (missingValues != null) { description.setMissingValues(missingValues); } augment(description); if (saveDescriptor(description)) { lastAnomalyDescriptor = description.copyOf(); } if (filter.apply(description)) { answer.add(description); } } } finally { if (cacheDisabled) { // turn caching off forest.setBoundingBoxCacheFraction(0); } } } return answer; } // recommended filter public List processSequentially(double[][] data) { return processSequentially(data, x -> x.getAnomalyGrade() > 0); } private int[] generateMissingIndicesArray(double[] point) { List intArray = new ArrayList<>(); for (int i = 0; i < point.length; i++) { if (Double.isNaN(point[i])) { intArray.add(i); } } // Return null if the array is empty if (intArray.size() == 0) { return null; } return intArray.stream().mapToInt(Integer::intValue).toArray(); } /** * a function that extrapolates the data seen by the ThresholdedRCF model, and * uses the transformations allowed (as opposed to just using RCFs). The * forecasting also allows for predictor-corrector pattern which implies that * some noise can be eliminated -- this can be important for various * transformations. While the algorithm can function for STREAMING_IMPUTE mode * where missing data is imputed on the fly, it may require effort to validate * that the internal imputation is reasonably consistent with extrapolation. In * general, since the STREAMING_IMPUTE can use non-RCF options to fill in * missing data, the internal imputation and extrapolation need not be * consistent. * * @param horizon the length of time in the future which is being forecast * @param correct a boolean indicating if predictor-corrector subroutine * should be turned on; this is specially helpful if there has * been an anomaly in the recent past * @param centrality in general RCF predicts the p50 value of conditional * samples (centrality = 1). This parameter relaxes the * conditional sampling. Using assumptions about input data * (hence external to this code) it may be possible to use * this parameter and the range information for confidence * bounds. * @return a timed range vector where the values[i] correspond to the forecast * for horizon (i+1). The upper and lower arrays indicate the * corresponding bounds based on the conditional sampling (and * transformation). Note that TRCF manages time in process() and thus * the forecasts always have timestamps associated which makes it easier * to execute the same code for various forest modes such as * STREAMING_IMPUTE, STANDARD and TIME_AUGMENTED. For STREAMING_IMPUTE * the time components of the prediction will be 0 because the time * information is already being used to fill in missing entries. For * STANDARD mode the time components would correspond to average arrival * difference. For TIME_AUGMENTED mode the time componentes would be the * result of the joint prediction. Finally note that setting weight of * time or any of the input columns will also 0 out the corresponding * forecast. */ public TimedRangeVector extrapolate(int horizon, boolean correct, double centrality) { int shingleSize = preprocessor.getShingleSize(); checkArgument(shingleSize > 1, "extrapolation is not meaningful for shingle size = 1"); // note the forest may have external shingling ... int dimensions = forest.getDimensions(); int blockSize = dimensions / shingleSize; float[] lastPoint = preprocessor.getLastShingledPoint(); if (forest.isOutputReady()) { int gap = (int) (preprocessor.getInternalTimeStamp() - lastAnomalyDescriptor.getInternalTimeStamp()); float[] newPoint = lastPoint; // gap will be at least 1 if (gap <= shingleSize && correct && lastAnomalyDescriptor.getExpectedRCFPoint() != null) { if (gap == 1) { newPoint = lastAnomalyDescriptor.getExpectedRCFPoint(); } else { newPoint = predictorCorrector.applyPastCorrector(newPoint, gap, shingleSize, blockSize, preprocessor.getScale(), transformMethod, lastAnomalyDescriptor); } } RangeVector answer = forest.extrapolateWithRanges(newPoint, horizon, blockSize, false, 0, centrality); return preprocessor.invertForecastRange(answer, lastAnomalyDescriptor.getInputTimestamp(), lastAnomalyDescriptor.getDeltaShift(), lastAnomalyDescriptor.getExpectedRCFPoint() != null, lastAnomalyDescriptor.getExpectedTimeStamp()); } else { return new TimedRangeVector(new TimedRangeVector(horizon * blockSize, horizon)); } } public TimedRangeVector extrapolate(int horizon) { return extrapolate(horizon, true, 1.0); } public RandomCutForest getForest() { return forest; } public void setZfactor(double factor) { predictorCorrector.setZfactor(factor); } public void setLowerThreshold(double lower) { predictorCorrector.setAbsoluteThreshold(lower); } @Deprecated public void setHorizon(double horizon) { predictorCorrector.setScoreDifferencing(1 - horizon); } public void setScoreDifferencing(double scoreDifferencing) { predictorCorrector.setScoreDifferencing(scoreDifferencing); } public void setIgnoreNearExpectedFromAbove(double[] ignoreSimilarFromAbove) { predictorCorrector.setIgnoreNearExpectedFromAbove(ignoreSimilarFromAbove); } public void setIgnoreNearExpectedFromAboveByRatio(double[] ignoreSimilarFromAbove) { predictorCorrector.setIgnoreNearExpectedFromAboveByRatio(ignoreSimilarFromAbove); } public void setIgnoreNearExpectedFromBelow(double[] ignoreSimilarFromBelow) { predictorCorrector.setIgnoreNearExpectedFromBelow(ignoreSimilarFromBelow); } public void setIgnoreNearExpectedFromBelowByRatio(double[] ignoreSimilarFromBelow) { predictorCorrector.setIgnoreNearExpectedFromBelowByRatio(ignoreSimilarFromBelow); } public void setScoringStrategy(ScoringStrategy strategy) { this.scoringStrategy = strategy; } @Deprecated public void setInitialThreshold(double initial) { predictorCorrector.setInitialThreshold(initial); } /** * sets up the AnomalyDescriptor object * * @param description description of the input point * @param lastAnomalyDescriptor the descriptor of the last anomaly * @param forest the RCF * @return the descriptor to be used for anomaly scoring */

P initialSetup(P description, RCFComputeDescriptor lastAnomalyDescriptor, RandomCutForest forest) { description.setForestMode(forestMode); description.setTransformMethod(transformMethod); description.setImputationMethod(preprocessor.getImputationMethod()); description.setNumberOfTrees(forest.getNumberOfTrees()); description.setTotalUpdates(forest.getTotalUpdates()); description.setLastAnomalyInternalTimestamp(lastAnomalyDescriptor.getInternalTimeStamp()); description.setLastExpectedRCFPoint(lastAnomalyDescriptor.getExpectedRCFPoint()); description.setDataConfidence(forest.getTimeDecay(), preprocessor.getValuesSeen(), forest.getOutputAfter(), preprocessor.dataQuality()); description.setShingleSize(preprocessor.getShingleSize()); description.setInputLength(preprocessor.getInputLength()); description.setDimension(forest.getDimensions()); description.setReasonableForecast(forest.isOutputReady() && forest.getDimensions() >= 4); description.setScale(preprocessor.getScale()); description.setShift(preprocessor.getShift()); description.setDeviations(preprocessor.getSmoothedDeviations()); description.setNumberOfNewImputes(preprocessor.numberOfImputes(description.getInputTimestamp())); description.setInternalTimeStamp(preprocessor.getInternalTimeStamp() + description.getNumberOfNewImputes()); description.setRCFPoint(preprocessor.getScaledShingledInput(description.getCurrentInput(), description.getInputTimestamp(), description.getMissingValues(), forest)); return description; }

void postProcess(P result) { float[] point = result.getRCFPoint(); if (point != null) { // first populate the description with current knowledge // then update the preprocessor // then update the RCF if (result.getAnomalyGrade() > 0) { /** * adds information of expected point to the result descriptor (provided it is * marked anomalous) Note that is uses relativeIndex; that is, it can determine * that the anomaly occurred in the past (but within the shingle) and not at the * current point -- even though the detection has triggered now While this may * appear to be improper, information theoretically we may have a situation * where an anomaly is only discoverable after the "horse has bolted" -- suppose * that we see a random mixture of the triples { 1, 2, 3} and {2, 4, 5} * corresponding to "slow weeks" and "busy weeks". For example 1, 2, 3, 1, 2, 3, * 2, 4, 5, 1, 2, 3, 2, 4, 5, ... etc. If we see { 2, 2, X } (at positions 0 and * 1 (mod 3)) and are yet to see X, then we can infer that the pattern is * anomalous -- but we cannot determine which of the 2's are to blame. If it * were the first 2, then the detection is late. If X = 3 then we know it is the * first 2 in that unfinished triple; and if X = 5 then it is the second 2. In a * sense we are only truly wiser once the bolted horse has returned! But if we * were to say that the anomaly was always at the second 2 then that appears to * be suboptimal -- one natural path can be based on the ratio of the triples { * 1, 2, 3} and {2, 4, 5} seen before. Even better, we can attempt to estimate a * dynamic time dependent ratio -- and that is what RCF would do. * * @param result the description of the current point */ int shingleSize = result.getShingleSize(); int dimension = result.getDimension(); int base = dimension / shingleSize; double[] reference = result.getCurrentInput(); float[] newPoint = result.getExpectedRCFPoint(); int index = result.getRelativeIndex(); if (index < 0) { reference = preprocessor.getShingledInput(shingleSize + index); result.setPastTimeStamp(preprocessor.getTimeStamp(shingleSize + index)); } // relative index is the source of truth. Past values always have value: // either current input or previous input. result.setPastValues(reference); if (newPoint != null) { double[] values = preprocessor.getExpectedValue(index, reference, point, newPoint); if (forestMode == ForestMode.TIME_AUGMENTED) { int endPosition = (shingleSize + index) * base; double timeGap = (newPoint[endPosition - 1] - point[endPosition - 1]); long expectedTimestamp = (timeGap == 0) ? result.getInputTimestamp() : (long) values[base - 1]; if (index < 0) { expectedTimestamp = (timeGap == 0) ? preprocessor.getTimeStamp(shingleSize - 1 + index) : (long) values[base - 1]; } result.setExpectedTimeStamp(expectedTimestamp); double[] plausibleValues = Arrays.copyOf(values, base - 1); result.setExpectedValues(0, plausibleValues, 1.0); } else { result.setExpectedValues(0, values, 1.0); } } int startPosition = (shingleSize - 1 + result.getRelativeIndex()) * base; DiVector attribution = result.getAttribution(); if (forestMode == ForestMode.TIME_AUGMENTED) { --base; } double[] flattenedAttribution = new double[base]; for (int i = 0; i < base; i++) { flattenedAttribution[i] = attribution.getHighLowSum(startPosition + i); } result.setRelevantAttribution(flattenedAttribution); if (forestMode == ForestMode.TIME_AUGMENTED) { result.setTimeAttribution(attribution.getHighLowSum(startPosition + base)); } } } // will update the forest preprocessor.update(result.getCurrentInput(), point, result.getInputTimestamp(), result.getMissingValues(), forest); if (point != null) { if (result.getAnomalyGrade() > 0) { double[] postShift = preprocessor.getShift(); // may have changed result.setPostShift(postShift); result.setTransformDecay(preprocessor.getTransformDecay()); } } if (preprocessor.isOutputReady()) { result.setPostDeviations(preprocessor.getSmoothedDeviations()); } } /** * @return a new builder. */ public static Builder builder() { return new Builder<>(); } public static class Builder> { // We use Optional types for optional primitive fields when it doesn't make // sense to use a constant default. protected int dimensions; protected int sampleSize = DEFAULT_SAMPLE_SIZE; protected Optional outputAfter = Optional.empty(); protected Optional startNormalization = Optional.empty(); protected Optional stopNormalization = Optional.empty(); protected int numberOfTrees = DEFAULT_NUMBER_OF_TREES; protected Optional timeDecay = Optional.empty(); protected Optional scoreDifferencing = Optional.empty(); protected Optional lowerThreshold = Optional.empty(); protected Optional weightTime = Optional.empty(); protected Optional randomSeed = Optional.empty(); protected boolean storeSequenceIndexesEnabled = DEFAULT_STORE_SEQUENCE_INDEXES_ENABLED; protected boolean centerOfMassEnabled = DEFAULT_CENTER_OF_MASS_ENABLED; protected boolean parallelExecutionEnabled = DEFAULT_PARALLEL_EXECUTION_ENABLED; protected Optional threadPoolSize = Optional.empty(); protected double boundingBoxCacheFraction = DEFAULT_BOUNDING_BOX_CACHE_FRACTION; protected int shingleSize = DEFAULT_SHINGLE_SIZE; protected Optional internalShinglingEnabled = Optional.empty(); protected double initialAcceptFraction = DEFAULT_INITIAL_ACCEPT_FRACTION; protected double anomalyRate = 0.01; protected TransformMethod transformMethod = TransformMethod.NONE; protected ImputationMethod imputationMethod = RCF; protected ForestMode forestMode = ForestMode.STANDARD; protected ScoringStrategy scoringStrategy = ScoringStrategy.EXPECTED_INVERSE_DEPTH; protected boolean normalizeTime = false; protected double[] fillValues = null; protected double[] weights = null; protected Optional useImputedFraction = Optional.empty(); protected boolean autoAdjust = false; protected double zFactor = DEFAULT_Z_FACTOR; protected boolean alertOnceInDrift = false; protected Optional transformDecay = Optional.empty(); protected Optional ignoreNearExpectedFromAbove = Optional.empty(); protected Optional ignoreNearExpectedFromBelow = Optional.empty(); protected Optional ignoreNearExpectedFromAboveByRatio = Optional.empty(); protected Optional ignoreNearExpectedFromBelowByRatio = Optional.empty(); void validate() { if (forestMode == ForestMode.TIME_AUGMENTED) { if (internalShinglingEnabled.isPresent()) { checkArgument(shingleSize == 1 || internalShinglingEnabled.get(), " shingle size has to be 1 or " + "internal shingling must turned on"); checkArgument(transformMethod == TransformMethod.NONE || internalShinglingEnabled.get(), " internal shingling must turned on for transforms"); } else { internalShinglingEnabled = Optional.of(true); } if (useImputedFraction.isPresent()) { throw new IllegalArgumentException(" imputation infeasible"); } } else if (forestMode == ForestMode.STREAMING_IMPUTE) { checkArgument(shingleSize > 1, "imputation with shingle size 1 is not meaningful"); internalShinglingEnabled.ifPresent(x -> checkArgument(x, " input cannot be shingled (even if internal representation is different) ")); } else { if (!internalShinglingEnabled.isPresent()) { internalShinglingEnabled = Optional.of(true); } if (useImputedFraction.isPresent()) { throw new IllegalArgumentException(" imputation infeasible"); } } if (startNormalization.isPresent()) { // we should not be setting normalizations unless we are careful if (outputAfter.isPresent()) { // can be overspecified checkArgument(outputAfter.get() + shingleSize - 1 > startNormalization.get(), "output after has to wait till normalization, reduce normalization"); } else { int n = startNormalization.get(); checkArgument(n > 0, " startNormalization has to be positive"); // if start normalization is low then first few output can be 0 outputAfter = Optional .of(max(max(1, (int) (sampleSize * DEFAULT_OUTPUT_AFTER_FRACTION)), n - shingleSize + 1)); } } else { if (outputAfter.isPresent()) { startNormalization = Optional.of(min(DEFAULT_START_NORMALIZATION, outputAfter.get())); } } } public ThresholdedRandomCutForest build() { validate(); return new ThresholdedRandomCutForest(this); } protected RandomCutForest buildForest() { RandomCutForest.Builder builder = new RandomCutForest.Builder().dimensions(dimensions) .sampleSize(sampleSize).numberOfTrees(numberOfTrees) .storeSequenceIndexesEnabled(storeSequenceIndexesEnabled).centerOfMassEnabled(centerOfMassEnabled) .parallelExecutionEnabled(parallelExecutionEnabled) .boundingBoxCacheFraction(boundingBoxCacheFraction).shingleSize(shingleSize) .internalShinglingEnabled(internalShinglingEnabled.get()) .initialAcceptFraction(initialAcceptFraction); if (forestMode != ForestMode.STREAMING_IMPUTE) { outputAfter.ifPresent(builder::outputAfter); } else { // forcing the change between internal and external shingling outputAfter.ifPresent(n -> { int num = max(startNormalization.orElse(DEFAULT_START_NORMALIZATION), n) - shingleSize + 1; checkArgument(num > 0, " max(start normalization, output after) should be at least " + shingleSize); builder.outputAfter(num); }); } timeDecay.ifPresent(builder::timeDecay); randomSeed.ifPresent(builder::randomSeed); threadPoolSize.ifPresent(builder::threadPoolSize); return builder.build(); } public T dimensions(int dimensions) { this.dimensions = dimensions; return (T) this; } public T sampleSize(int sampleSize) { this.sampleSize = sampleSize; return (T) this; } public T startNormalization(int startNormalization) { this.startNormalization = Optional.of(startNormalization); return (T) this; } public T stopNormalization(int stopNormalization) { this.stopNormalization = Optional.of(stopNormalization); return (T) this; } public T outputAfter(int outputAfter) { this.outputAfter = Optional.of(outputAfter); return (T) this; } public T numberOfTrees(int numberOfTrees) { this.numberOfTrees = numberOfTrees; return (T) this; } public T shingleSize(int shingleSize) { this.shingleSize = shingleSize; return (T) this; } public T timeDecay(double timeDecay) { this.timeDecay = Optional.of(timeDecay); return (T) this; } public T transformDecay(double transformDecay) { this.transformDecay = Optional.of(transformDecay); return (T) this; } public T zFactor(double zFactor) { this.zFactor = zFactor; return (T) this; } public T useImputedFraction(double fraction) { this.useImputedFraction = Optional.of(fraction); return (T) this; } public T randomSeed(long randomSeed) { this.randomSeed = Optional.of(randomSeed); return (T) this; } public T centerOfMassEnabled(boolean centerOfMassEnabled) { this.centerOfMassEnabled = centerOfMassEnabled; return (T) this; } public T parallelExecutionEnabled(boolean parallelExecutionEnabled) { this.parallelExecutionEnabled = parallelExecutionEnabled; return (T) this; } public T threadPoolSize(int threadPoolSize) { this.threadPoolSize = Optional.of(threadPoolSize); return (T) this; } public T storeSequenceIndexesEnabled(boolean storeSequenceIndexesEnabled) { this.storeSequenceIndexesEnabled = storeSequenceIndexesEnabled; return (T) this; } @Deprecated public T compact(boolean compact) { return (T) this; } public T internalShinglingEnabled(boolean internalShinglingEnabled) { this.internalShinglingEnabled = Optional.of(internalShinglingEnabled); return (T) this; } @Deprecated public T precision(Precision precision) { return (T) this; } public T boundingBoxCacheFraction(double boundingBoxCacheFraction) { this.boundingBoxCacheFraction = boundingBoxCacheFraction; return (T) this; } public T initialAcceptFraction(double initialAcceptFraction) { this.initialAcceptFraction = initialAcceptFraction; return (T) this; } public Random getRandom() { // If a random seed was given, use it to create a new Random. Otherwise, call // the 0-argument constructor return randomSeed.map(Random::new).orElseGet(Random::new); } public T anomalyRate(double anomalyRate) { this.anomalyRate = anomalyRate; return (T) this; } public T imputationMethod(ImputationMethod imputationMethod) { this.imputationMethod = imputationMethod; return (T) this; } public T fillValues(double[] values) { // values cannot be a null this.fillValues = Arrays.copyOf(values, values.length); return (T) this; } public T weights(double[] values) { // values cannot be a null this.weights = Arrays.copyOf(values, values.length); return (T) this; } public T normalizeTime(boolean normalizeTime) { this.normalizeTime = normalizeTime; return (T) this; } public T transformMethod(TransformMethod method) { this.transformMethod = method; return (T) this; } public T forestMode(ForestMode forestMode) { this.forestMode = forestMode; return (T) this; } public T scoreDifferencing(double persistence) { this.scoreDifferencing = Optional.of(persistence); return (T) this; } public T autoAdjust(boolean autoAdjust) { this.autoAdjust = autoAdjust; return (T) this; } public T weightTime(double value) { this.weightTime = Optional.of(value); return (T) this; } public T ignoreNearExpectedFromAbove(double[] ignoreSimilarFromAbove) { this.ignoreNearExpectedFromAbove = Optional.ofNullable(ignoreSimilarFromAbove); return (T) this; } public T ignoreNearExpectedFromBelow(double[] ignoreSimilarFromBelow) { this.ignoreNearExpectedFromBelow = Optional.ofNullable(ignoreSimilarFromBelow); return (T) this; } public T ignoreNearExpectedFromAboveByRatio(double[] ignoreSimilarFromAboveByRatio) { this.ignoreNearExpectedFromAboveByRatio = Optional.ofNullable(ignoreSimilarFromAboveByRatio); return (T) this; } public T ignoreNearExpectedFromBelowByRatio(double[] ignoreSimilarFromBelowByRatio) { this.ignoreNearExpectedFromBelowByRatio = Optional.ofNullable(ignoreSimilarFromBelowByRatio); return (T) this; } public T scoringStrategy(ScoringStrategy scoringStrategy) { this.scoringStrategy = scoringStrategy; return (T) this; } public T alertOnce(boolean alertOnceInDrift) { this.alertOnceInDrift = alertOnceInDrift; return (T) this; } } } ================================================ FILE: Java/parkservices/src/main/java/com/amazon/randomcutforest/parkservices/calibration/ErrorHandler.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.parkservices.calibration; import static com.amazon.randomcutforest.CommonUtils.checkArgument; import static com.amazon.randomcutforest.CommonUtils.toFloatArray; import static com.amazon.randomcutforest.parkservices.RCFCaster.DEFAULT_ERROR_PERCENTILE; import static java.lang.Math.max; import static java.lang.Math.min; import java.util.Arrays; import java.util.Optional; import lombok.Getter; import lombok.Setter; import com.amazon.randomcutforest.PredictiveRandomCutForest; import com.amazon.randomcutforest.config.TransformMethod; import com.amazon.randomcutforest.parkservices.ForecastDescriptor; import com.amazon.randomcutforest.parkservices.config.Calibration; import com.amazon.randomcutforest.returntypes.DiVector; import com.amazon.randomcutforest.returntypes.RangeVector; import com.amazon.randomcutforest.returntypes.SampleSummary; import com.amazon.randomcutforest.statistics.Deviation; // we recommend the article "Regret in the On-Line Decision Problem", by Foster and Vohra, // Games and Economic Behavior, Vol=29 (1-2), 1999 // the discussion is applicable to non-regret scenarios as well; but essentially boils down to // fixed point/minimax computation. One could use multiplicative update type methods which would be // uniform over all quantiles, provided sufficient data and a large enough calibration horizon. // Multiplicative updates are scale free -- but providing scale free forecasting over a stream raises the // issue "what is the current scale of the stream". While such questions can be answered, that discussion // can be involved and out of current scope of this library. We simplify the issue to calibrating two // fixed quantiles and hence additive updates are reasonable. @Getter @Setter public class ErrorHandler { int sequenceIndex; double percentile; int forecastHorizon; int errorHorizon; // the following arrays store the state of the sequential computation // these can be optimized -- for example once could store the errors; which // would see much fewer increments. // However, for a small enough errorHorizon, the generality of // changing the error function // outweighs the benefit of recomputation. The search in the ensemble tree is // still a larger bottleneck than // these computations at the moment; not to mention issues of saving and // restoring state. protected RangeVector[] pastForecasts; RangeVector errorDistribution; DiVector errorRMSE; float[] errorMean; Deviation[] intervalPrecision; Deviation[] rmseHighDeviations; Deviation[] rmseLowDeviations; float[] lowerLimit; float[] upperLimit; double[] lastInputs; PredictiveRandomCutForest estimator; float[] lastDataDeviations; // We keep the multipliers defined for potential // future use. RangeVector multipliers; RangeVector adders; public ErrorHandler(Builder builder) { checkArgument(builder.forecastHorizon > 0, "has to be positive"); checkArgument(builder.errorHorizon >= builder.forecastHorizon, "intervalPrecision horizon should be at least as large as forecast horizon"); checkArgument(builder.errorHorizon <= 1024, "reduce error horizon"); forecastHorizon = builder.forecastHorizon; errorHorizon = builder.errorHorizon; int inputLength = (builder.dimensions / builder.shingleSize); int length = inputLength * forecastHorizon; percentile = builder.percentile; pastForecasts = new RangeVector[forecastHorizon]; for (int i = 0; i < forecastHorizon; i++) { pastForecasts[i] = new RangeVector(length); } sequenceIndex = 0; lastInputs = new double[2 * inputLength]; rmseHighDeviations = new Deviation[length]; rmseLowDeviations = new Deviation[length]; intervalPrecision = new Deviation[length]; for (int i = 0; i < length; i++) { rmseHighDeviations[i] = new Deviation(1.0 / errorHorizon); rmseLowDeviations[i] = new Deviation(1.0 / errorHorizon); intervalPrecision[i] = new Deviation(1.0 / errorHorizon); } errorMean = new float[length]; errorRMSE = new DiVector(length); lastDataDeviations = new float[inputLength]; errorDistribution = new RangeVector(length); if (builder.upperLimit.isPresent()) { checkArgument(builder.upperLimit.get().length == inputLength, "incorrect length"); upperLimit = Arrays.copyOf(builder.upperLimit.get(), inputLength); } else { upperLimit = new float[inputLength]; Arrays.fill(upperLimit, Float.MAX_VALUE); } if (builder.lowerLimit.isPresent()) { checkArgument(builder.lowerLimit.get().length == inputLength, "incorrect length"); for (int y = 0; y < inputLength; y++) { checkArgument(builder.lowerLimit.get()[y] <= upperLimit[y], "incorrect limits"); } lowerLimit = Arrays.copyOf(builder.lowerLimit.get(), inputLength); } else { lowerLimit = new float[inputLength]; Arrays.fill(lowerLimit, -Float.MAX_VALUE); } // uses lastInputs as a markov input, the +2 corresponds to lookahead and // forecasthorizon - lookahed; the 2*inputlength correspond to the // (plausibly correlated) positive and negative errors // There are potentially many different variations -- use a difference encoding // for the // last two values (keeps lastInputs the same length) -- or change lastInputs to // be a full // on wavelet transform, etc. // if (builder.useRCF) { int inputDimensions = lastInputs.length + 2 * inputLength + 2; double[] weights = new double[inputDimensions]; Arrays.fill(weights, 1.0); // the lookahead has 1/3 the weight of the total weights[lastInputs.length] = lastInputs.length; weights[lastInputs.length + 1] = lastInputs.length; estimator = new PredictiveRandomCutForest.Builder<>().inputDimensions(inputDimensions).weights(weights) .randomSeed(13).outputAfter(50).transformMethod(TransformMethod.NORMALIZE).startNormalization(49) .build(); } } // for mappers public ErrorHandler(int errorHorizon, int forecastHorizon, int sequenceIndex, double percentile, int inputLength, float[] pastForecastsFlattened, float[] lastDataDeviations, double[] lastInput, Deviation[] deviations, PredictiveRandomCutForest estimator, float[] auxiliary) { checkArgument(forecastHorizon > 0, " incorrect forecast horizon"); checkArgument(errorHorizon >= forecastHorizon, "incorrect error horizon"); checkArgument(inputLength > 0, "incorrect parameters"); checkArgument(sequenceIndex >= 0, "cannot be negative"); checkArgument(Math.abs(percentile - 0.25) < 0.24, "has to be between (0,0.5) "); checkArgument(deviations.length == 3 * inputLength * forecastHorizon, "incorrect length"); checkArgument(lastInput.length == 2 * inputLength, "incorrect length"); this.sequenceIndex = sequenceIndex; this.errorHorizon = errorHorizon; this.percentile = percentile; this.forecastHorizon = forecastHorizon; this.pastForecasts = new RangeVector[forecastHorizon]; this.lastInputs = Arrays.copyOf(lastInput, lastInput.length); int length = forecastHorizon * inputLength; checkArgument(lastDataDeviations.length >= inputLength, "incorrect length"); this.lastDataDeviations = Arrays.copyOf(lastDataDeviations, lastDataDeviations.length); this.errorMean = new float[length]; this.errorRMSE = new DiVector(length); this.errorDistribution = new RangeVector(length); this.intervalPrecision = new Deviation[inputLength * forecastHorizon]; this.rmseHighDeviations = new Deviation[inputLength * forecastHorizon]; this.rmseLowDeviations = new Deviation[inputLength * forecastHorizon]; for (int y = 0; y < inputLength * forecastHorizon; y++) { this.intervalPrecision[y] = deviations[y].copy(); this.rmseHighDeviations[y] = deviations[y + inputLength * forecastHorizon].copy(); this.rmseLowDeviations[y] = deviations[y + 2 * inputLength * forecastHorizon].copy(); } lowerLimit = new float[inputLength]; Arrays.fill(lowerLimit, -Float.MAX_VALUE); upperLimit = new float[inputLength]; Arrays.fill(upperLimit, Float.MAX_VALUE); this.estimator = estimator; int arrayLength = pastForecastsFlattened.length / (3 * length); checkArgument(arrayLength * 3 * length == pastForecastsFlattened.length, " has to be multiple of 3"); for (int i = 0; i < arrayLength; i++) { float[] values = Arrays.copyOfRange(pastForecastsFlattened, i * 3 * length, (i * 3 + 1) * length); float[] upper = Arrays.copyOfRange(pastForecastsFlattened, (i * 3 + 1) * length, (i * 3 + 2) * length); float[] lower = Arrays.copyOfRange(pastForecastsFlattened, (i * 3 + 2) * length, (i * 3 + 3) * length); pastForecasts[i] = new RangeVector(values, upper, lower); } for (int i = arrayLength; i < forecastHorizon; i++) { pastForecasts[i] = new RangeVector(length); } recomputeErrors(lastInputs, inputLength); } public void setUpperLimit(float[] upperLimit) { if (upperLimit != null) { checkArgument(upperLimit.length == this.upperLimit.length, "incorrect Length"); System.arraycopy(upperLimit, 0, this.upperLimit, 0, upperLimit.length); } } public void setLowerLimit(float[] lowerLimit) { if (lowerLimit != null) { checkArgument(lowerLimit.length == this.lowerLimit.length, "incorrect Length"); for (int i = 0; i < lowerLimit.length; i++) { checkArgument(lowerLimit[i] <= this.upperLimit[i], "lower limit is higher than upper limit"); this.lowerLimit[i] = lowerLimit[i]; } } } /** * updates the stored information (actuals) and recomputes the calibrations * * @param input the actual input * @param deviations the deviations (post the current input) */ public void updateActuals(double[] input, double[] deviations) { int arrayLength = pastForecasts.length; int inputLength = input.length; for (int i = 0; i < lastInputs.length - inputLength; i++) { lastInputs[i] = lastInputs[i + inputLength]; } System.arraycopy(input, 0, lastInputs, lastInputs.length - inputLength, inputLength); if (sequenceIndex > 0) { // sequenceIndex indicates the first empty place for input // note the predictions have already been stored int inputIndex = (sequenceIndex + arrayLength - 1) % arrayLength; float[] errorTuple = new float[lastInputs.length + 2 * inputLength + 2]; for (int y = 0; y < lastInputs.length; y++) { errorTuple[y] = (float) lastInputs[y]; } for (int i = 0; i < forecastHorizon; i++) { if (sequenceIndex > i) { for (int j = 0; j < inputLength; j++) { RangeVector a = pastForecasts[inputIndex]; int offset = i * inputLength; errorTuple[lastInputs.length] = i; errorTuple[lastInputs.length + 1] = forecastHorizon - i; if (input[j] <= a.upper[offset + j] && input[j] >= a.lower[offset + j]) { intervalPrecision[offset + j].update(1.0); } else { intervalPrecision[offset + j].update(0); } double error = input[j] - a.values[offset + j]; if (error >= 0) { rmseHighDeviations[offset + j].update(error); rmseLowDeviations[offset + j].update(0); errorTuple[lastInputs.length + 2 + j] = (float) error; errorTuple[lastInputs.length + inputLength + 2 + j] = 0; } else { rmseLowDeviations[offset + j].update(error); rmseHighDeviations[offset + j].update(0); errorTuple[lastInputs.length + inputLength + 2 + j] = (float) (error); errorTuple[lastInputs.length + 2 + j] = 0; } } if (estimator != null) { estimator.update(errorTuple, 0L); } } inputIndex = (inputIndex + arrayLength - 1) % arrayLength; } } lastDataDeviations = toFloatArray(deviations); recomputeErrors(lastInputs, inputLength); } void recomputeErrors(double[] lastInputs, int inputLength) { double a; if (estimator != null) { a = (double) (sequenceIndex) / (estimator.getForest().getOutputAfter()); } else { a = (double) (sequenceIndex) / (10 * forecastHorizon); } float[] query = new float[lastInputs.length + inputLength * 2 + 2]; System.arraycopy(toFloatArray(lastInputs), 0, query, 0, lastInputs.length); float[] errorHigh = new float[intervalPrecision.length]; float[] errorLow = new float[intervalPrecision.length]; if (a < 1) { for (int y = 0; y < intervalPrecision.length; y++) { errorRMSE.high[y] = errorRMSE.low[y] = lastDataDeviations[y % inputLength]; errorHigh[y] = errorLow[y] = lastDataDeviations[y % inputLength]; } } else { if (a < 2) { for (int y = 0; y < errorRMSE.high.length; y++) { double offset = (2 - a) * lastDataDeviations[y % inputLength]; errorRMSE.high[y] = (offset + (a - 1) * rmseHighDeviations[y].getDeviation()); errorRMSE.low[y] = (offset + (a - 1) * rmseLowDeviations[y].getDeviation()); } } else { for (int y = 0; y < errorRMSE.high.length; y++) { errorRMSE.high[y] = rmseHighDeviations[y].getDeviation(); errorRMSE.low[y] = rmseLowDeviations[y].getDeviation(); } } if (estimator != null) { for (int i = 0; i < forecastHorizon; i++) { int[] missing = new int[inputLength]; query[lastInputs.length] = i; query[lastInputs.length + 1] = forecastHorizon - i; for (int j = 0; j < inputLength; j++) { missing[j] = lastInputs.length + 2 + j; } // at this moment we use the PredictiveRCF more for the shorter term estimation, // and use an interpolation // with the observed error for the longer term SampleSummary answer = estimator.predict(query, 0, missing, 1, 0.5, 0.7); for (int j = 0; j < inputLength; j++) { errorHigh[i * inputLength + j] = (forecastHorizon - i) * max(0, answer.deviation[lastInputs.length + 2 + j]) / forecastHorizon + (float) (i * rmseHighDeviations[i * inputLength + j].getDeviation() / forecastHorizon); } for (int j = 0; j < inputLength; j++) { missing[j] = lastInputs.length + inputLength + 2 + j; } answer = estimator.predict(query, 0, missing, 1, 0.5, 0.7); for (int j = 0; j < inputLength; j++) { errorLow[i * inputLength + j] = (forecastHorizon - i) * max(0, answer.deviation[lastInputs.length + inputLength + 2 + j]) / forecastHorizon + (float) (i * rmseLowDeviations[i * inputLength + j].getDeviation() / forecastHorizon); } } } else { for (int y = 0; y < errorRMSE.high.length; y++) { errorHigh[y] = (float) errorRMSE.high[y]; errorLow[y] = (float) errorRMSE.low[y]; } } } // a control loop for (int y = 0; y < intervalPrecision.length; y++) { if (intervalPrecision[y].getMean() < 1.0 - percentile) { errorHigh[y] = (float) max(1.0, 1.0 / (intervalPrecision[y].getMean() + 0.1)) * errorHigh[y]; errorLow[y] = (float) max(1.0, 1.0 / (intervalPrecision[y].getMean() + 0.1)) * errorLow[y]; } } for (int i = 0; i < errorMean.length; i++) { errorMean[i] = (float) (rmseHighDeviations[i].getMean() + rmseLowDeviations[i].getMean()); errorDistribution.values[i] = errorMean[i]; errorDistribution.upper[i] = errorMean[i] + (float) (1.3 * errorHigh[i]); errorDistribution.lower[i] = errorMean[i] - (float) (1.3 * errorLow[i]); } } public void augmentDescriptor(ForecastDescriptor descriptor) { int inputLength = descriptor.getInputLength(); float[] iPrecision = new float[inputLength * forecastHorizon]; for (int i = 0; i < errorMean.length; i++) { iPrecision[i] = (float) intervalPrecision[i].getMean(); } descriptor.setErrorMean(errorMean); descriptor.setErrorRMSE(errorRMSE); descriptor.setObservedErrorDistribution(errorDistribution); descriptor.setIntervalPrecision(iPrecision); } /** * saves the forecast -- note that this section assumes that updateActuals() has * been invoked prior (to recompute the deviations) * * @param vector the forecast */ public void updateForecasts(RangeVector vector) { ++sequenceIndex; int arrayLength = pastForecasts.length; int storedForecastIndex = (sequenceIndex + arrayLength - 1) % (arrayLength); int length = pastForecasts[0].values.length; System.arraycopy(vector.values, 0, pastForecasts[storedForecastIndex].values, 0, length); System.arraycopy(vector.upper, 0, pastForecasts[storedForecastIndex].upper, 0, length); System.arraycopy(vector.lower, 0, pastForecasts[storedForecastIndex].lower, 0, length); } public RangeVector getErrorDistribution() { return new RangeVector(errorDistribution); } public float[] getErrorMean() { return Arrays.copyOf(errorMean, errorMean.length); } public DiVector getErrorRMSE() { return new DiVector(errorRMSE); } public Deviation[] getDeviationList() { Deviation[] list = new Deviation[3 * intervalPrecision.length]; for (int i = 0; i < intervalPrecision.length; i++) { list[i] = intervalPrecision[i].copy(); list[i + intervalPrecision.length] = rmseHighDeviations[i].copy(); list[i + 2 * intervalPrecision.length] = rmseLowDeviations[i].copy(); } return list; } public float[] getIntervalPrecision() { float[] iPrecision = new float[intervalPrecision.length]; for (int i = 0; i < iPrecision.length; i++) { iPrecision[i] = (float) (intervalPrecision[i].getMean()); } return iPrecision; } public void calibrate(double[] input, Calibration calibration, RangeVector ranges) { if (calibration != Calibration.NONE) { int inputLength = intervalPrecision.length / forecastHorizon; checkArgument(input.length == inputLength, "incorrect input"); checkArgument(intervalPrecision.length == ranges.values.length, "mismatched lengths"); for (int y = 0; y < intervalPrecision.length; y++) { if (calibration == Calibration.SIMPLE) { ranges.values[y] = min( max(ranges.values[y] + errorDistribution.values[y], lowerLimit[y % inputLength]), upperLimit[y % inputLength]); } else { ranges.values[y] = min(max(ranges.values[y], lowerLimit[y % inputLength]), upperLimit[y % inputLength]); } ranges.upper[y] = min(max(ranges.upper[y], ranges.values[y] + errorDistribution.upper[y]), upperLimit[y % inputLength]); ranges.lower[y] = max(min(ranges.lower[y], ranges.values[y] + errorDistribution.lower[y]), lowerLimit[y % inputLength]); } } } public int getInputLength() { return lastInputs.length / 2; } /** * produces the stored forecasts as a non-null array */ public float[] getPastForecastsFlattened() { int arrayLength = min(sequenceIndex, pastForecasts.length); int length = intervalPrecision.length; float[] answer = new float[3 * length * arrayLength]; for (int i = 0; i < arrayLength; i++) { System.arraycopy(pastForecasts[i].values, 0, answer, 3 * i * length, length); System.arraycopy(pastForecasts[i].upper, 0, answer, 3 * i * length + length, length); System.arraycopy(pastForecasts[i].lower, 0, answer, 3 * i * length + 2 * length, length); } return answer; } public static Builder builder() { return new Builder(); } public static class Builder { protected int dimensions; protected int shingleSize = 1; protected int forecastHorizon; protected boolean useRCF = true; protected int errorHorizon = 100; // easy for percentile protected double percentile = DEFAULT_ERROR_PERCENTILE; protected Optional upperLimit = Optional.empty(); protected Optional lowerLimit = Optional.empty(); public Builder dimensions(int dimensions) { this.dimensions = dimensions; return this; } public Builder shingleSize(int shingleSize) { this.shingleSize = shingleSize; return this; } public Builder forecastHorizon(int horizon) { this.forecastHorizon = horizon; return this; } public Builder errorHorizon(int errorHorizon) { this.errorHorizon = errorHorizon; return this; } public Builder percentile(double percentile) { this.percentile = percentile; return this; } public Builder lowerLimit(float[] lowerLimit) { this.lowerLimit = Optional.of(lowerLimit); return this; } public Builder upperLimit(float[] upperLimit) { this.upperLimit = Optional.of(upperLimit); return this; } public Builder useRCF(boolean use) { useRCF = use; return this; } public ErrorHandler build() { return new ErrorHandler(this); } } } ================================================ FILE: Java/parkservices/src/main/java/com/amazon/randomcutforest/parkservices/config/Calibration.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.parkservices.config; public enum Calibration { NONE, /** * a basic staring point where the intervals are adjusted to be the minimal * necessary based on past error the intervals are smaller -- but the interval * precision will likely be close to 1 - 2 * percentile */ MINIMAL, /** * a Markov inequality based interval, where the past error and model errors are * additive. The interval precision is likely higher than MINIMAL but so are the * intervals. */ SIMPLE; } ================================================ FILE: Java/parkservices/src/main/java/com/amazon/randomcutforest/parkservices/config/CorrectionMode.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.parkservices.config; /** * Options for using RCF, specially with thresholds */ public enum CorrectionMode { /** * default behavior, no correction */ NONE, /** * due to transforms, or due to input noise */ NOISE, /** * elimination due to multi mode operation */ MULTI_MODE, /** * effect of an anomaly in shingle */ ANOMALY_IN_SHINGLE, /** * conditional forecast, using conditional fields */ CONDITIONAL_FORECAST, /** * forecasted value was not very different */ FORECAST, /** * data drifts and level shifts, will not be corrected unless level shifts are * turned on */ DATA_DRIFT, // forced suppression - do not use for extended anomalies ALERT_ONCE } ================================================ FILE: Java/parkservices/src/main/java/com/amazon/randomcutforest/parkservices/config/ScoringStrategy.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.parkservices.config; /** * Options for using RCF, specially with thresholds */ public enum ScoringStrategy { /** * default behavior to be optimized; currently EXPECTED_INVERSE_DEPTH */ EXPECTED_INVERSE_DEPTH, /** * This is the same as STANDARD mode where the scoring function is switched to * distances between the vectors. Since RCFs build a multiresolution tree, and * in the aggregate, preserves distances to some approximation, this provides an * alternate anomaly detection mechanism which can be useful for shingleSize = 1 * and (dynamic) population analysis via RCFs. Specifically it switches the * scoring to be based on the distance computation in the Density Estimation * (interpolation). This allows for a direct comparison of clustering based * outlier detection and RCFs over numeric vectors. All transformations * available to the STANDARD mode in the ThresholdedRCF are available for this * mode as well; this does not affect RandomCutForest core in any way. For * timeseries analysis the STANDARD mode is recommended, but this does provide * another option in combination with the TransformMethods. */ DISTANCE, /** * RCFs are an updatable data structure that can support multiple difference * inference methods. Given the longstanding interest in ensembles of different * models, this strategy uses the multiple inference capabilities to increase * precision. It does not escape our attention that multi-mode allows the * functionality of multi-models yet use a significantly smaller state/memory * footprint since all the modes use RCF. The different modes are probed with * computational efficiency in mind. */ MULTI_MODE, /** * Same as above, except optimized for increasing recall. */ MULTI_MODE_RECALL; } ================================================ FILE: Java/parkservices/src/main/java/com/amazon/randomcutforest/parkservices/returntypes/AnalysisDescriptor.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.parkservices.returntypes; import java.util.ArrayList; import lombok.Getter; import lombok.Setter; import com.amazon.randomcutforest.parkservices.AnomalyDescriptor; import com.amazon.randomcutforest.parkservices.ForecastDescriptor; @Getter @Setter public class AnalysisDescriptor { /** * the intent of this class is to describe the list of anomalies and the final * forecast of some data this is most useful in sequential analysis when that * data is processed sequentially */ ArrayList anomalies; ForecastDescriptor forecastDescriptor; public AnalysisDescriptor(ArrayList anomalies, ForecastDescriptor forecastDescriptor) { this.anomalies = anomalies; this.forecastDescriptor = forecastDescriptor; } } ================================================ FILE: Java/parkservices/src/main/java/com/amazon/randomcutforest/parkservices/returntypes/GenericAnomalyDescriptor.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.parkservices.returntypes; import java.util.List; import lombok.Getter; import lombok.Setter; import com.amazon.randomcutforest.util.Weighted; @Getter @Setter public class GenericAnomalyDescriptor

{ // the following corresponds to the list of extected points in AnomalyDetector, // which is returned from // TRCF. The list corresponds to plausible values (cluster centers) and a weight // representing the likelihood // The list is sorted in decreasing order of likelihood. Most often, the first // element should suffice. // in case of an anomalous point, however the information here can provide more // insight List> representativeList; // standard, as in AnomalyDetector; we do not recommend attempting to // disambiguate scores of non-anomalous // points. Note that scores can be low. double score; // standard as in AnomalyDetector double threshold; // a value between [0,1] indicating the strength of the anomaly, it can be // viewed as a confidence score // projected by the algorithm. double anomalyGrade; public GenericAnomalyDescriptor(List> representative, double score, double threshold, double anomalyGrade) { this.representativeList = representative; this.score = score; this.threshold = threshold; this.anomalyGrade = anomalyGrade; } } ================================================ FILE: Java/parkservices/src/main/java/com/amazon/randomcutforest/parkservices/returntypes/RCFComputeDescriptor.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.parkservices.returntypes; import static com.amazon.randomcutforest.CommonUtils.checkArgument; import java.util.Arrays; import lombok.Getter; import lombok.Setter; import com.amazon.randomcutforest.config.ForestMode; import com.amazon.randomcutforest.config.ImputationMethod; import com.amazon.randomcutforest.config.TransformMethod; import com.amazon.randomcutforest.inputtypes.Point; import com.amazon.randomcutforest.parkservices.config.CorrectionMode; import com.amazon.randomcutforest.parkservices.config.ScoringStrategy; import com.amazon.randomcutforest.returntypes.DiVector; /** * a basic class that is used to store the internal state of the streaming * processing in ThresholdedRandomCutForest and others. */ @Getter @Setter public class RCFComputeDescriptor extends Point { ForestMode forestMode = ForestMode.STANDARD; TransformMethod transformMethod = TransformMethod.NONE; ImputationMethod imputationMethod = ImputationMethod.PREVIOUS; ScoringStrategy scoringStrategy = ScoringStrategy.EXPECTED_INVERSE_DEPTH; CorrectionMode correctionMode = CorrectionMode.NONE; // the most important parameter of the forest int shingleSize; // the actual dimensions int dimension; // the input length; useful for standalone analysis int inputLength; // sequence index (the number of updates to RCF) -- it is possible in imputation // that // the number of updates more than the input tuples seen by the overall program long totalUpdates; // determines if values can be input and or expected point calculated boolean reasonableForecast; // internal timestamp (basically a sequence index, but can be scaled and // jittered as in // the example); // kept as long for potential future use long internalTimeStamp; // number of trees in the forest int numberOfTrees; // current missing values, if any int[] missingValues; // potential number of imputes before processing current point int numberOfNewImputes; // actual, potentially transformed point on which compute occurs float[] RCFPoint; // score for various postprocessing double RCFScore; // the following describes the grade of the anomaly in the range [0:1] where // 0 is not an anomaly double anomalyGrade; // the threshold used in inference double threshold; // same for attribution; this is basic RCF attribution which has high/low // information DiVector attribution; /** * position of the anomaly vis a vis the current time (can be -ve) if anomaly is * detected late, which can and should happen sometime; for shingle size 1; this * is always 0 */ int relativeIndex; // useful for detecting noise double[] deviations; // useful for calibration in RCFCaster double[] postDeviations; // the multiplication factors to convert RCF representation to actuals/input double[] scale; // the addition performed (after multiplications) to convert RCF representation // to actuals/input double[] shift; // effects of a specific anomaly double[] postShift; // how long the effects last double transformDecay; // expected RCFPoint for the current point float[] expectedRCFPoint; // internal timestamp of last anomaly long lastAnomalyInternalTimestamp; // expected point of last anomaly float[] lastExpectedRCFPoint; // if the anomaly is due to timestamp when it is augmented only for current time long expectedTimeStamp; // used for streaming imputation double[][] imputedPoints; public RCFComputeDescriptor(double[] input, long inputTimeStamp) { super(input, inputTimeStamp); } public RCFComputeDescriptor(double[] input, long inputTimeStamp, ForestMode forestMode, TransformMethod transformMethod, ImputationMethod imputationMethod) { super(input, inputTimeStamp); this.forestMode = forestMode; this.transformMethod = transformMethod; this.imputationMethod = imputationMethod; } public void setShift(double[] shift) { this.shift = copyIfNotnull(shift); } public void setPostShift(double[] shift) { this.postShift = copyIfNotnull(shift); } public double[] getShift() { return copyIfNotnull(shift); } public void setScale(double[] scale) { this.scale = copyIfNotnull(scale); } public double[] getScale() { return copyIfNotnull(scale); } public double[] getDeltaShift() { if (shift == null || postShift == null) { return null; } double[] answer = new double[shift.length]; for (int i = 0; i < shift.length; i++) { answer[i] = postShift[i] - shift[i]; } return answer; } public void setExpectedRCFPoint(float[] point) { expectedRCFPoint = copyIfNotnull(point); } public float[] getExpectedRCFPoint() { return copyIfNotnull(expectedRCFPoint); } public void setRCFPoint(float[] point) { RCFPoint = copyIfNotnull(point); } public float[] getRCFPoint() { return copyIfNotnull(RCFPoint); } public void setLastExpectedRCFdPoint(float[] point) { lastExpectedRCFPoint = copyIfNotnull(point); } public float[] getLastExpectedRCFPoint() { return copyIfNotnull(lastExpectedRCFPoint); } public void setAttribution(DiVector attribution) { this.attribution = (attribution == null) ? null : new DiVector(attribution); } public DiVector getAttribution() { return (attribution == null) ? null : new DiVector(attribution); } public int[] getMissingValues() { return (missingValues == null) ? null : Arrays.copyOf(missingValues, missingValues.length); } public void setMissingValues(int[] values) { missingValues = (values == null) ? null : Arrays.copyOf(values, values.length); } protected float[] copyIfNotnull(float[] array) { return array == null ? null : Arrays.copyOf(array, array.length); } public void setImputedPoint(int index, double[] impute) { checkArgument(numberOfNewImputes > 0, " no imputation is indicated"); checkArgument(impute != null && impute.length == inputLength, "incorrect length"); if (imputedPoints == null) { imputedPoints = new double[Math.min(numberOfNewImputes, shingleSize - 1)][]; } checkArgument(imputedPoints.length > index && index >= 0 && imputedPoints[index] == null, "already set!"); imputedPoints[index] = Arrays.copyOf(impute, inputLength); } // an explicit copy operation to control the stored state public RCFComputeDescriptor copyOf() { RCFComputeDescriptor answer = new RCFComputeDescriptor(getCurrentInput(), getInputTimestamp(), forestMode, transformMethod, imputationMethod); answer.setShingleSize(shingleSize); answer.setDimension(dimension); answer.setInputLength(inputLength); answer.setReasonableForecast(reasonableForecast); answer.setAttribution(attribution); answer.setRCFPoint(RCFPoint); answer.setRCFScore(RCFScore); answer.setInternalTimeStamp(internalTimeStamp); answer.setExpectedRCFPoint(expectedRCFPoint); answer.setNumberOfTrees(numberOfTrees); answer.setTotalUpdates(totalUpdates); answer.setNumberOfNewImputes(numberOfNewImputes); answer.setLastAnomalyInternalTimestamp(lastAnomalyInternalTimestamp); answer.setLastExpectedRCFdPoint(lastExpectedRCFPoint); answer.setScoringStrategy(scoringStrategy); answer.setShift(shift); answer.setScale(scale); answer.setPostShift(postShift); answer.setTransformDecay(transformDecay); answer.setAnomalyGrade(anomalyGrade); answer.setThreshold(threshold); answer.setCorrectionMode(correctionMode); return answer; } } ================================================ FILE: Java/parkservices/src/main/java/com/amazon/randomcutforest/parkservices/state/RCFCasterMapper.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.parkservices.state; import lombok.Getter; import lombok.Setter; import com.amazon.randomcutforest.RandomCutForest; import com.amazon.randomcutforest.config.ForestMode; import com.amazon.randomcutforest.config.ImputationMethod; import com.amazon.randomcutforest.config.TransformMethod; import com.amazon.randomcutforest.parkservices.PredictorCorrector; import com.amazon.randomcutforest.parkservices.RCFCaster; import com.amazon.randomcutforest.parkservices.calibration.ErrorHandler; import com.amazon.randomcutforest.parkservices.config.Calibration; import com.amazon.randomcutforest.parkservices.config.ScoringStrategy; import com.amazon.randomcutforest.parkservices.returntypes.RCFComputeDescriptor; import com.amazon.randomcutforest.parkservices.state.errorhandler.ErrorHandlerMapper; import com.amazon.randomcutforest.parkservices.state.predictorcorrector.PredictorCorrectorMapper; import com.amazon.randomcutforest.parkservices.state.returntypes.ComputeDescriptorMapper; import com.amazon.randomcutforest.preprocessor.Preprocessor; import com.amazon.randomcutforest.state.IStateMapper; import com.amazon.randomcutforest.state.RandomCutForestMapper; import com.amazon.randomcutforest.state.preprocessor.PreprocessorMapper; import com.amazon.randomcutforest.state.preprocessor.PreprocessorState; @Getter @Setter public class RCFCasterMapper implements IStateMapper { @Override public RCFCasterState toState(RCFCaster model) { RCFCasterState state = new RCFCasterState(); RandomCutForestMapper randomCutForestMapper = new RandomCutForestMapper(); randomCutForestMapper.setPartialTreeStateEnabled(true); randomCutForestMapper.setSaveTreeStateEnabled(true); randomCutForestMapper.setCompressionEnabled(true); randomCutForestMapper.setSaveCoordinatorStateEnabled(true); randomCutForestMapper.setSaveExecutorContextEnabled(true); state.setForestState(randomCutForestMapper.toState(model.getForest())); PreprocessorMapper preprocessorMapper = new PreprocessorMapper(); state.setPreprocessorStates( new PreprocessorState[] { preprocessorMapper.toState((Preprocessor) model.getPreprocessor()) }); state.setPredictorCorrectorState(new PredictorCorrectorMapper().toState(model.getPredictorCorrector())); state.setLastDescriptorState( new ComputeDescriptorMapper().toState((RCFComputeDescriptor) model.getLastAnomalyDescriptor())); state.setForestMode(model.getForestMode().name()); state.setTransformMethod(model.getTransformMethod().name()); state.setForecastHorizon(model.getForecastHorizon()); ErrorHandlerMapper errorHandlerMapper = new ErrorHandlerMapper(); state.setErrorHandler(errorHandlerMapper.toState(model.getErrorHandler())); state.setErrorHorizon(model.getErrorHorizon()); state.setCalibrationMethod(model.getCalibrationMethod().name()); state.setScoringStrategy(model.getScoringStrategy().name()); return state; } @Override public RCFCaster toModel(RCFCasterState state, long seed) { RandomCutForestMapper randomCutForestMapper = new RandomCutForestMapper(); PreprocessorMapper preprocessorMapper = new PreprocessorMapper(); RandomCutForest forest = randomCutForestMapper.toModel(state.getForestState()); Preprocessor preprocessor = preprocessorMapper.toModel(state.getPreprocessorStates()[0]); ForestMode forestMode = ForestMode.valueOf(state.getForestMode()); TransformMethod transformMethod = TransformMethod.valueOf(state.getTransformMethod()); RCFComputeDescriptor descriptor = new ComputeDescriptorMapper().toModel(state.getLastDescriptorState()); descriptor.setForestMode(forestMode); descriptor.setTransformMethod(transformMethod); descriptor .setImputationMethod(ImputationMethod.valueOf(state.getPreprocessorStates()[0].getImputationMethod())); descriptor.setShingleSize(preprocessor.getShingleSize()); PredictorCorrectorMapper mapper = new PredictorCorrectorMapper(); PredictorCorrector predictorCorrector = mapper.toModel(state.getPredictorCorrectorState()); ErrorHandlerMapper errorHandlerMapper = new ErrorHandlerMapper(); ErrorHandler errorHandler = errorHandlerMapper.toModel(state.getErrorHandler()); Calibration calibrationMethod = Calibration.valueOf(state.getCalibrationMethod()); ScoringStrategy scoringStrategy = ScoringStrategy.valueOf(state.getScoringStrategy()); return new RCFCaster(forestMode, transformMethod, scoringStrategy, forest, predictorCorrector, preprocessor, descriptor, state.getForecastHorizon(), errorHandler, state.getErrorHorizon(), calibrationMethod); } } ================================================ FILE: Java/parkservices/src/main/java/com/amazon/randomcutforest/parkservices/state/RCFCasterState.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.parkservices.state; import static com.amazon.randomcutforest.state.Version.V3_8; import lombok.Data; import com.amazon.randomcutforest.parkservices.state.errorhandler.ErrorHandlerState; @Data public class RCFCasterState extends ThresholdedRandomCutForestState { private static final long serialVersionUID = 1L; private String version = V3_8; private int forecastHorizon; private ErrorHandlerState errorHandler; private int errorHorizon; private String calibrationMethod; } ================================================ FILE: Java/parkservices/src/main/java/com/amazon/randomcutforest/parkservices/state/ThresholdedRandomCutForestMapper.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.parkservices.state; import static com.amazon.randomcutforest.CommonUtils.toFloatArrayNullable; import lombok.Getter; import lombok.Setter; import com.amazon.randomcutforest.RandomCutForest; import com.amazon.randomcutforest.config.ForestMode; import com.amazon.randomcutforest.config.ImputationMethod; import com.amazon.randomcutforest.config.TransformMethod; import com.amazon.randomcutforest.parkservices.PredictorCorrector; import com.amazon.randomcutforest.parkservices.ThresholdedRandomCutForest; import com.amazon.randomcutforest.parkservices.config.ScoringStrategy; import com.amazon.randomcutforest.parkservices.returntypes.RCFComputeDescriptor; import com.amazon.randomcutforest.parkservices.state.predictorcorrector.PredictorCorrectorMapper; import com.amazon.randomcutforest.parkservices.state.returntypes.ComputeDescriptorMapper; import com.amazon.randomcutforest.parkservices.state.threshold.BasicThresholderMapper; import com.amazon.randomcutforest.parkservices.threshold.BasicThresholder; import com.amazon.randomcutforest.preprocessor.Preprocessor; import com.amazon.randomcutforest.state.IStateMapper; import com.amazon.randomcutforest.state.RandomCutForestMapper; import com.amazon.randomcutforest.state.preprocessor.PreprocessorMapper; import com.amazon.randomcutforest.state.preprocessor.PreprocessorState; import com.amazon.randomcutforest.state.returntypes.DiVectorMapper; @Getter @Setter public class ThresholdedRandomCutForestMapper implements IStateMapper { @Override public ThresholdedRandomCutForest toModel(ThresholdedRandomCutForestState state, long seed) { RandomCutForestMapper randomCutForestMapper = new RandomCutForestMapper(); PreprocessorMapper preprocessorMapper = new PreprocessorMapper(); RandomCutForest forest = randomCutForestMapper.toModel(state.getForestState()); Preprocessor preprocessor = preprocessorMapper.toModel(state.getPreprocessorStates()[0]); ForestMode forestMode = ForestMode.valueOf(state.getForestMode()); TransformMethod transformMethod = TransformMethod.valueOf(state.getTransformMethod()); ScoringStrategy scoringStrategy = ScoringStrategy.EXPECTED_INVERSE_DEPTH; if (state.getScoringStrategy() != null && !state.getScoringStrategy().isEmpty()) { scoringStrategy = ScoringStrategy.valueOf(state.getScoringStrategy()); } RCFComputeDescriptor descriptor; if (state.getLastDescriptorState() == null) { descriptor = new RCFComputeDescriptor(null, 0L); descriptor.setRCFScore(state.getLastAnomalyScore()); descriptor.setInternalTimeStamp(state.getLastAnomalyTimeStamp()); descriptor.setAttribution(new DiVectorMapper().toModel(state.getLastAnomalyAttribution())); descriptor.setRCFPoint(toFloatArrayNullable(state.getLastAnomalyPoint())); descriptor.setExpectedRCFPoint(toFloatArrayNullable(state.getLastExpectedPoint())); descriptor.setRelativeIndex(state.getLastRelativeIndex()); descriptor.setScoringStrategy(scoringStrategy); } else { descriptor = new ComputeDescriptorMapper().toModel(state.getLastDescriptorState()); } descriptor.setShingleSize(preprocessor.getShingleSize()); descriptor.setForestMode(forestMode); descriptor.setTransformMethod(transformMethod); descriptor.setScoringStrategy(scoringStrategy); descriptor .setImputationMethod(ImputationMethod.valueOf(state.getPreprocessorStates()[0].getImputationMethod())); PredictorCorrector predictorCorrector; if (state.getPredictorCorrectorState() == null) { BasicThresholderMapper thresholderMapper = new BasicThresholderMapper(); BasicThresholder thresholder = thresholderMapper.toModel(state.getThresholderState()); predictorCorrector = new PredictorCorrector(thresholder, preprocessor.getInputLength()); predictorCorrector.setNumberOfAttributors(state.getNumberOfAttributors()); predictorCorrector.setLastScore(new double[] { state.getLastScore() }); } else { PredictorCorrectorMapper mapper = new PredictorCorrectorMapper(); predictorCorrector = mapper.toModel(state.getPredictorCorrectorState()); } return new ThresholdedRandomCutForest(forestMode, transformMethod, scoringStrategy, forest, predictorCorrector, preprocessor, descriptor); } @Override public ThresholdedRandomCutForestState toState(ThresholdedRandomCutForest model) { ThresholdedRandomCutForestState state = new ThresholdedRandomCutForestState(); RandomCutForestMapper randomCutForestMapper = new RandomCutForestMapper(); randomCutForestMapper.setPartialTreeStateEnabled(true); randomCutForestMapper.setSaveTreeStateEnabled(true); randomCutForestMapper.setCompressionEnabled(true); randomCutForestMapper.setSaveCoordinatorStateEnabled(true); randomCutForestMapper.setSaveExecutorContextEnabled(true); state.setForestState(randomCutForestMapper.toState(model.getForest())); PreprocessorMapper preprocessorMapper = new PreprocessorMapper(); state.setPreprocessorStates( new PreprocessorState[] { preprocessorMapper.toState((Preprocessor) model.getPreprocessor()) }); state.setPredictorCorrectorState(new PredictorCorrectorMapper().toState(model.getPredictorCorrector())); state.setForestMode(model.getForestMode().name()); state.setTransformMethod(model.getTransformMethod().name()); state.setScoringStrategy(model.getScoringStrategy().name()); state.setLastDescriptorState(new ComputeDescriptorMapper().toState(model.getLastAnomalyDescriptor())); return state; } } ================================================ FILE: Java/parkservices/src/main/java/com/amazon/randomcutforest/parkservices/state/ThresholdedRandomCutForestState.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.parkservices.state; import static com.amazon.randomcutforest.state.Version.V3_8; import java.io.Serializable; import lombok.Data; import com.amazon.randomcutforest.parkservices.state.predictorcorrector.PredictorCorrectorState; import com.amazon.randomcutforest.parkservices.state.returntypes.ComputeDescriptorState; import com.amazon.randomcutforest.parkservices.state.threshold.BasicThresholderState; import com.amazon.randomcutforest.state.RandomCutForestState; import com.amazon.randomcutforest.state.preprocessor.PreprocessorState; import com.amazon.randomcutforest.state.returntypes.DiVectorState; @Data public class ThresholdedRandomCutForestState implements Serializable { private static final long serialVersionUID = 1L; private String version = V3_8; RandomCutForestState forestState; // deprecated but not marked due to 2.1 models private BasicThresholderState thresholderState; private PreprocessorState[] preprocessorStates; // following fields are deprecated, but not removed for compatibility with 2.1 // models private double ignoreSimilarFactor; private double triggerFactor; private long lastAnomalyTimeStamp; private double lastAnomalyScore; private DiVectorState lastAnomalyAttribution; private double lastScore; private double[] lastAnomalyPoint; private double[] lastExpectedPoint; private boolean previousIsPotentialAnomaly; private boolean inHighScoreRegion; private boolean ignoreSimilar; private int numberOfAttributors; // end deprecated segment private long randomSeed; private String forestMode; private String transformMethod; private String scoringStrategy; private int lastRelativeIndex; private int lastReset; private PredictorCorrectorState predictorCorrectorState; private ComputeDescriptorState lastDescriptorState; } ================================================ FILE: Java/parkservices/src/main/java/com/amazon/randomcutforest/parkservices/state/errorhandler/ErrorHandlerMapper.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.parkservices.state.errorhandler; import static com.amazon.randomcutforest.state.statistics.DeviationMapper.getDeviations; import static com.amazon.randomcutforest.state.statistics.DeviationMapper.getStates; import com.amazon.randomcutforest.PredictiveRandomCutForest; import com.amazon.randomcutforest.parkservices.calibration.ErrorHandler; import com.amazon.randomcutforest.state.IStateMapper; import com.amazon.randomcutforest.state.PredictiveRandomCutForestMapper; import com.amazon.randomcutforest.state.statistics.DeviationMapper; public class ErrorHandlerMapper implements IStateMapper { @Override public ErrorHandlerState toState(ErrorHandler model) { ErrorHandlerState errorHandlerState = new ErrorHandlerState(); errorHandlerState.setSequenceIndex(model.getSequenceIndex()); errorHandlerState.setPercentile(model.getPercentile()); errorHandlerState.setForecastHorizon(model.getForecastHorizon()); errorHandlerState.setErrorHorizon(model.getErrorHorizon()); errorHandlerState.setLastDataDeviations(model.getLastDataDeviations()); DeviationMapper deviationMapper = new DeviationMapper(); errorHandlerState.setDeviationStates(getStates(model.getDeviationList(), deviationMapper)); errorHandlerState.setLastInput(model.getLastInputs()); errorHandlerState.setInputLength(model.getInputLength()); errorHandlerState.setPastForecastsFlattened(model.getPastForecastsFlattened()); if (model.getEstimator() != null) { PredictiveRandomCutForestMapper mapper = new PredictiveRandomCutForestMapper(); errorHandlerState.setEstimatorState(mapper.toState(model.getEstimator())); } errorHandlerState.setLowerLimit(model.getLowerLimit()); errorHandlerState.setUpperLimit(model.getUpperLimit()); return errorHandlerState; } @Override public ErrorHandler toModel(ErrorHandlerState state, long seed) { PredictiveRandomCutForest forest = null; PredictiveRandomCutForestMapper mapper = new PredictiveRandomCutForestMapper(); if (state.getEstimatorState() != null) { forest = mapper.toModel(state.getEstimatorState()); } DeviationMapper deviationMapper = new DeviationMapper(); ErrorHandler errorHandler = new ErrorHandler(state.getErrorHorizon(), state.getForecastHorizon(), state.getSequenceIndex(), state.getPercentile(), state.getInputLength(), state.getPastForecastsFlattened(), state.getLastDataDeviations(), state.getLastInput(), getDeviations(state.getDeviationStates(), deviationMapper), forest, null); errorHandler.setUpperLimit(state.getUpperLimit()); errorHandler.setLowerLimit(state.getLowerLimit()); return errorHandler; } } ================================================ FILE: Java/parkservices/src/main/java/com/amazon/randomcutforest/parkservices/state/errorhandler/ErrorHandlerState.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.parkservices.state.errorhandler; import static com.amazon.randomcutforest.state.Version.V4_0; import java.io.Serializable; import lombok.Data; import com.amazon.randomcutforest.state.PredictiveRandomCutForestState; import com.amazon.randomcutforest.state.statistics.DeviationState; @Data public class ErrorHandlerState implements Serializable { private static final long serialVersionUID = 1L; private String version = V4_0; private int sequenceIndex; private double percentile; private int forecastHorizon; private int errorHorizon; private float[] pastForecastsFlattened; private int inputLength; private float[] lastDataDeviations; private double[] lastInput; private float[] upperLimit; private float[] lowerLimit; private DeviationState[] deviationStates; private PredictiveRandomCutForestState estimatorState; // items below are not used now. Kept for regret computation later. // Regret is what we feel when we realize that we should have been better off // had we done something else. A basic requirement of regret computation is that // it should avoid or at least reduce the regret that will be felt. private float[] addersFlattened; private float[] multipliersFlattened; } ================================================ FILE: Java/parkservices/src/main/java/com/amazon/randomcutforest/parkservices/state/predictorcorrector/PredictorCorrectorMapper.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.parkservices.state.predictorcorrector; import com.amazon.randomcutforest.parkservices.PredictorCorrector; import com.amazon.randomcutforest.parkservices.config.ScoringStrategy; import com.amazon.randomcutforest.parkservices.state.returntypes.ComputeDescriptorMapper; import com.amazon.randomcutforest.parkservices.state.threshold.BasicThresholderMapper; import com.amazon.randomcutforest.parkservices.state.threshold.BasicThresholderState; import com.amazon.randomcutforest.parkservices.threshold.BasicThresholder; import com.amazon.randomcutforest.state.IStateMapper; import com.amazon.randomcutforest.state.statistics.DeviationMapper; import com.amazon.randomcutforest.state.statistics.DeviationState; import com.amazon.randomcutforest.statistics.Deviation; public class PredictorCorrectorMapper implements IStateMapper { @Override public PredictorCorrectorState toState(PredictorCorrector model) { PredictorCorrectorState state = new PredictorCorrectorState(); state.setLastScore(model.getLastScore()); state.setNumberOfAttributors(model.getNumberOfAttributors()); state.setIgnoreNearExpected(model.getIgnoreNearExpected()); BasicThresholderMapper mapper = new BasicThresholderMapper(); BasicThresholder[] thresholders = model.getThresholders(); BasicThresholderState thresholderState[] = new BasicThresholderState[thresholders.length]; for (int y = 0; y < thresholders.length; y++) { thresholderState[y] = mapper.toState(thresholders[y]); } state.setThresholderStates(thresholderState); DeviationMapper devMapper = new DeviationMapper(); Deviation[] deviations = model.getDeviations(); state.setAutoAdjust(model.isAutoAdjust()); if (state.isAutoAdjust()) { DeviationState deviationState[] = new DeviationState[deviations.length]; for (int y = 0; y < deviations.length; y++) { deviationState[y] = devMapper.toState(deviations[y]); } state.setDeviationStates(deviationState); } state.setNoiseFactor(model.getNoiseFactor()); state.setBaseDimension(model.getBaseDimension()); state.setLastStrategy(model.getLastStrategy().name()); state.setRandomSeed(model.getRandomSeed()); if (model.getLastDescriptor() != null) { ComputeDescriptorMapper descriptorMapper = new ComputeDescriptorMapper(); state.setLastDescriptor(descriptorMapper.toState(model.getLastDescriptor())); } state.setModeInformation(model.getModeInformation()); state.setRunLength(model.getRunLength()); state.setIgnoreDrift(model.isIgnoreDrift()); state.setSamplingSuppport(model.getSamplingSupport()); return state; } @Override public PredictorCorrector toModel(PredictorCorrectorState state, long seed) { BasicThresholderMapper mapper = new BasicThresholderMapper(); int num = state.getThresholderStates().length; BasicThresholder[] thresholders = new BasicThresholder[num]; for (int i = 0; i < num; i++) { thresholders[i] = mapper.toModel(state.getThresholderStates()[i]); } Deviation[] deviations = null; if (state.isAutoAdjust()) { DeviationMapper devMapper = new DeviationMapper(); deviations = new Deviation[state.getDeviationStates().length]; for (int y = 0; y < deviations.length; y++) { deviations[y] = devMapper.toModel(state.getDeviationStates()[y]); } } PredictorCorrector predictorCorrector = new PredictorCorrector(thresholders, deviations, state.getBaseDimension(), state.getRandomSeed()); predictorCorrector.setNumberOfAttributors(state.getNumberOfAttributors()); predictorCorrector.setLastStrategy(ScoringStrategy.valueOf(state.getLastStrategy())); predictorCorrector.setLastScore(state.getLastScore()); predictorCorrector.setIgnoreNearExpected(state.getIgnoreNearExpected()); predictorCorrector.setAutoAdjust(state.isAutoAdjust()); predictorCorrector.setNoiseFactor(state.getNoiseFactor()); predictorCorrector.setRunLength(state.getRunLength()); predictorCorrector.setModeInformation(state.getModeInformation()); if (state.getLastDescriptor() != null) { ComputeDescriptorMapper descriptorMapper = new ComputeDescriptorMapper(); predictorCorrector.setLastDescriptor(descriptorMapper.toModel(state.getLastDescriptor())); } predictorCorrector.setIgnoreDrift(state.isIgnoreDrift()); predictorCorrector.setSamplingSupport(state.getSamplingSuppport()); return predictorCorrector; } } ================================================ FILE: Java/parkservices/src/main/java/com/amazon/randomcutforest/parkservices/state/predictorcorrector/PredictorCorrectorState.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.parkservices.state.predictorcorrector; import static com.amazon.randomcutforest.state.Version.V3_8; import java.io.Serializable; import lombok.Data; import com.amazon.randomcutforest.parkservices.state.returntypes.ComputeDescriptorState; import com.amazon.randomcutforest.parkservices.state.threshold.BasicThresholderState; import com.amazon.randomcutforest.state.statistics.DeviationState; @Data public class PredictorCorrectorState implements Serializable { private static final long serialVersionUID = 1L; private String version = V3_8; private BasicThresholderState[] thresholderStates; private double[] lastScore; private String lastStrategy; private int numberOfAttributors; private int baseDimension; private long randomSeed; private double noiseFactor; private boolean autoAdjust; private boolean ignoreDrift; private ComputeDescriptorState lastDescriptor; private int runLength; private double samplingSuppport; private double[] modeInformation; // multiple modes -- to be used in future private DeviationState[] deviationStates; // in future to be used for learning deviations private double[] ignoreNearExpected; } ================================================ FILE: Java/parkservices/src/main/java/com/amazon/randomcutforest/parkservices/state/returntypes/ComputeDescriptorMapper.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.parkservices.state.returntypes; import static com.amazon.randomcutforest.CommonUtils.toDoubleArrayNullable; import static com.amazon.randomcutforest.CommonUtils.toFloatArrayNullable; import lombok.Getter; import lombok.Setter; import com.amazon.randomcutforest.parkservices.config.CorrectionMode; import com.amazon.randomcutforest.parkservices.config.ScoringStrategy; import com.amazon.randomcutforest.parkservices.returntypes.RCFComputeDescriptor; import com.amazon.randomcutforest.state.IStateMapper; import com.amazon.randomcutforest.state.returntypes.DiVectorMapper; @Getter @Setter public class ComputeDescriptorMapper implements IStateMapper { @Override public RCFComputeDescriptor toModel(ComputeDescriptorState state, long seed) { RCFComputeDescriptor descriptor = new RCFComputeDescriptor(state.getCurrentInput(), state.getInputTimeStamp()); descriptor.setRCFScore(state.getScore()); descriptor.setInternalTimeStamp(state.getInternalTimeStamp()); descriptor.setAttribution(new DiVectorMapper().toModel(state.getAttribution())); descriptor.setRCFPoint(toFloatArrayNullable(state.getPoint())); descriptor.setExpectedRCFPoint(toFloatArrayNullable(state.getExpectedPoint())); descriptor.setRelativeIndex(state.getRelativeIndex()); descriptor.setScoringStrategy(ScoringStrategy.valueOf(state.getStrategy())); descriptor.setShift(state.getShift()); descriptor.setPostShift(state.getPostShift()); descriptor.setTransformDecay(state.getTransformDecay()); descriptor.setPostDeviations(state.getPostDeviations()); descriptor.setScale(state.getScale()); descriptor.setAnomalyGrade(state.getAnomalyGrade()); descriptor.setThreshold(state.getThreshold()); descriptor.setCorrectionMode(CorrectionMode.valueOf(state.getCorrectionMode())); return descriptor; } @Override public ComputeDescriptorState toState(RCFComputeDescriptor descriptor) { ComputeDescriptorState state = new ComputeDescriptorState(); state.setInternalTimeStamp(descriptor.getInternalTimeStamp()); state.setScore(descriptor.getRCFScore()); state.setAttribution(new DiVectorMapper().toState(descriptor.getAttribution())); state.setPoint(toDoubleArrayNullable(descriptor.getRCFPoint())); state.setExpectedPoint(toDoubleArrayNullable(descriptor.getExpectedRCFPoint())); state.setRelativeIndex(descriptor.getRelativeIndex()); state.setStrategy(descriptor.getScoringStrategy().name()); state.setShift(descriptor.getShift()); state.setPostShift(descriptor.getPostShift()); state.setTransformDecay(descriptor.getTransformDecay()); state.setPostDeviations(descriptor.getPostDeviations()); state.setScale(descriptor.getScale()); state.setAnomalyGrade(descriptor.getAnomalyGrade()); state.setThreshold(descriptor.getThreshold()); state.setCorrectionMode(descriptor.getCorrectionMode().name()); state.setInputTimeStamp(descriptor.getInputTimestamp()); state.setCurrentInput(descriptor.getCurrentInput()); return state; } } ================================================ FILE: Java/parkservices/src/main/java/com/amazon/randomcutforest/parkservices/state/returntypes/ComputeDescriptorState.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.parkservices.state.returntypes; import java.io.Serializable; import lombok.Data; import com.amazon.randomcutforest.state.returntypes.DiVectorState; @Data public class ComputeDescriptorState implements Serializable { private static final long serialVersionUID = 2L; private long internalTimeStamp; private double score; private DiVectorState attribution; private double lastScore; private double[] point; private double[] expectedPoint; private int relativeIndex; private int lastReset; private String strategy; private double[] shift; private double[] scale; private double[] postShift; private double transformDecay; private double[] postDeviations; private double threshold; private double anomalyGrade; private String correctionMode; private long inputTimeStamp; private double[] currentInput; } ================================================ FILE: Java/parkservices/src/main/java/com/amazon/randomcutforest/parkservices/state/threshold/BasicThresholderMapper.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.parkservices.state.threshold; import static com.amazon.randomcutforest.state.statistics.DeviationMapper.getDeviations; import static com.amazon.randomcutforest.state.statistics.DeviationMapper.getStates; import lombok.Getter; import lombok.Setter; import com.amazon.randomcutforest.parkservices.threshold.BasicThresholder; import com.amazon.randomcutforest.state.IStateMapper; import com.amazon.randomcutforest.state.statistics.DeviationMapper; import com.amazon.randomcutforest.statistics.Deviation; @Getter @Setter public class BasicThresholderMapper implements IStateMapper { @Override public BasicThresholder toModel(BasicThresholderState state, long seed) { DeviationMapper deviationMapper = new DeviationMapper(); Deviation[] deviations = null; if (state.getDeviationStates() != null) { deviations = getDeviations(state.getDeviationStates(), deviationMapper); } else if (state.getPrimaryDeviationState() != null) { // backward compatility; will be deprecated in 4.0 deviations = new Deviation[3]; deviations[0] = deviationMapper.toModel(state.getPrimaryDeviationState()); deviations[1] = deviationMapper.toModel(state.getSecondaryDeviationState()); deviations[2] = deviationMapper.toModel(state.getThresholdDeviationState()); } BasicThresholder thresholder = new BasicThresholder(deviations); thresholder.setAbsoluteThreshold(state.getAbsoluteThreshold()); thresholder.setLowerThreshold(state.getLowerThreshold()); thresholder.setInitialThreshold(state.getInitialThreshold()); thresholder.setScoreDifferencing(state.getHorizon()); thresholder.setCount(state.getCount()); thresholder.setAutoThreshold(state.isAutoThreshold()); thresholder.setMinimumScores(state.getMinimumScores()); thresholder.setZfactor(state.getZFactor()); return thresholder; } @Override public BasicThresholderState toState(BasicThresholder model) { BasicThresholderState state = new BasicThresholderState(); DeviationMapper deviationMapper = new DeviationMapper(); state.setZFactor(model.getZFactor()); state.setLowerThreshold(model.getLowerThreshold()); state.setAbsoluteThreshold(model.getAbsoluteThreshold()); state.setInitialThreshold(model.getInitialThreshold()); state.setCount(model.getCount()); state.setAutoThreshold(model.isAutoThreshold()); state.setMinimumScores(model.getMinimumScores()); state.setDeviationStates(getStates(model.getDeviations(), deviationMapper)); state.setHorizon(model.getScoreDifferencing()); return state; } } ================================================ FILE: Java/parkservices/src/main/java/com/amazon/randomcutforest/parkservices/state/threshold/BasicThresholderState.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.parkservices.state.threshold; import java.io.Serializable; import lombok.Data; import com.amazon.randomcutforest.state.statistics.DeviationState; @Data public class BasicThresholderState implements Serializable { private static final long serialVersionUID = 1L; private long randomseed; @Deprecated private boolean inAnomaly; @Deprecated private double elasticity; @Deprecated private boolean attributionEnabled; private int count; private int minimumScores; // do not use private DeviationState primaryDeviationState; // do not use private DeviationState secondaryDeviationState; // do not use private DeviationState thresholdDeviationState; @Deprecated private double upperThreshold; private double lowerThreshold; private double absoluteThreshold; private boolean autoThreshold; private double initialThreshold; private double zFactor; @Deprecated private double upperZfactor; @Deprecated private double absoluteScoreFraction; private double horizon; private DeviationState[] deviationStates; } ================================================ FILE: Java/parkservices/src/main/java/com/amazon/randomcutforest/parkservices/threshold/BasicThresholder.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.parkservices.threshold; import static com.amazon.randomcutforest.CommonUtils.checkArgument; import static com.amazon.randomcutforest.RandomCutForest.DEFAULT_SAMPLE_SIZE; import static com.amazon.randomcutforest.RandomCutForest.DEFAULT_SAMPLE_SIZE_COEFFICIENT_IN_TIME_DECAY; import static java.lang.Math.max; import static java.lang.Math.min; import static java.lang.Math.sqrt; import java.util.List; import com.amazon.randomcutforest.config.TransformMethod; import com.amazon.randomcutforest.statistics.Deviation; import com.amazon.randomcutforest.util.Weighted; public class BasicThresholder { public static double DEFAULT_SCORE_DIFFERENCING = 0.5; public static int DEFAULT_MINIMUM_SCORES = 10; public static double DEFAULT_FACTOR_ADJUSTMENT_THRESHOLD = 0.9; public static double DEFAULT_ABSOLUTE_THRESHOLD = 0.8; public static double DEFAULT_INITIAL_THRESHOLD = 1.5; public static double DEFAULT_Z_FACTOR = 3.0; public static double MINIMUM_Z_FACTOR = 2.0; public static boolean DEFAULT_AUTO_THRESHOLD = true; public static int DEFAULT_DEVIATION_STATES = 3; // keeping a count of the values seen because both deviation variables // primaryDeviation // and secondaryDeviation may not be used always protected int count = 0; // horizon = 0 is short term, switches to secondary // horizon = 1 long term, switches to primary protected double scoreDifferencing = DEFAULT_SCORE_DIFFERENCING; // below these many observations, deviation is not useful protected int minimumScores = DEFAULT_MINIMUM_SCORES; protected Deviation primaryDeviation; protected Deviation secondaryDeviation; protected Deviation thresholdDeviation; protected boolean autoThreshold = DEFAULT_AUTO_THRESHOLD; // an absoluteThreshold protected double absoluteThreshold = DEFAULT_ABSOLUTE_THRESHOLD; // the upper threshold of scores above which points are likely anomalies protected double factorAdjustmentThreshold = DEFAULT_FACTOR_ADJUSTMENT_THRESHOLD; // initial absolute threshold used to determine anomalies before sufficient // values are seen protected double initialThreshold = DEFAULT_INITIAL_THRESHOLD; // used to determine the surprise coefficient above which we can call a // potential anomaly protected double zFactor = DEFAULT_Z_FACTOR; public BasicThresholder(double primaryDiscount, double secondaryDiscount, boolean adjust) { primaryDeviation = new Deviation(primaryDiscount); secondaryDeviation = new Deviation(secondaryDiscount); // a longer horizon to adjust thresholdDeviation = new Deviation(primaryDiscount / 2); autoThreshold = adjust; } public BasicThresholder(double discount) { this(discount, discount, false); } public BasicThresholder(Deviation[] deviations) { int length = (deviations == null) ? 0 : deviations.length; if (length != DEFAULT_DEVIATION_STATES) { double timeDecay = 1.0 / (DEFAULT_SAMPLE_SIZE * DEFAULT_SAMPLE_SIZE_COEFFICIENT_IN_TIME_DECAY); this.primaryDeviation = new Deviation(timeDecay); this.secondaryDeviation = new Deviation(timeDecay); this.thresholdDeviation = new Deviation(0.1 * timeDecay); } else { this.primaryDeviation = deviations[0]; this.secondaryDeviation = deviations[1]; this.thresholdDeviation = deviations[2]; } } public BasicThresholder(List scores, double rate) { this.primaryDeviation = new Deviation(0); this.secondaryDeviation = new Deviation(0); this.thresholdDeviation = new Deviation(0); if (scores != null) { scores.forEach(s -> update(s, s)); } primaryDeviation.setDiscount(rate); secondaryDeviation.setDiscount(rate); thresholdDeviation.setDiscount(0.1 * rate); } /** * a boolean that determines if enough values have been seen to be able to * discern deviations * * @return true/false based on counts of various statistic */ public boolean isDeviationReady() { if (count < minimumScores) { return false; } if (scoreDifferencing != 0) { return secondaryDeviation.getCount() >= minimumScores; } return true; } /** * this function helps switch from short term (not able to use deviation, using * absolute scores) which is the first minimumScores observations of the scoring * function to using deviation (and not using absokute scores, except as a lower * bound) at 2*minimumScores It is often the case that the data has "run" * effects and the initial scopres can all come in low or can all come in high * * @return a parameter that helps smoot transition of initial to long term * behavior */ protected double intermediateTermFraction() { if (count < minimumScores) { return 0; } else if (count > 2 * minimumScores) { return 1; } else { return (count - minimumScores) * 1.0 / minimumScores; } } @Deprecated public double threshold() { return getPrimaryThreshold(); } public double getPrimaryThreshold() { if (!isDeviationReady()) { return 0; } return primaryDeviation.getMean() + zFactor * primaryDeviation.getDeviation(); } /** * The simplest thresholder that does not use any auxilliary correction, an can * be used for multiple scoring capabilities. * * @param score the value being thresholded * @return a computation of grade between [-1,1], grades in the range (0,1] are * to be considered anomalous */ public double getPrimaryGrade(double score) { if (!isDeviationReady()) { return 0; } double tFactor = 2 * zFactor; double deviation = primaryDeviation.getDeviation(); if (deviation > 0) { tFactor = min(tFactor, (score - primaryDeviation.getMean()) / deviation); } else { return (score > primaryDeviation.getMean() + 1e-10) ? 1.0 : 0; } double t = (tFactor - zFactor) / (zFactor); return max(0, t); } public Weighted getPrimaryThresholdAndGrade(double score) { if (!isDeviationReady() || score <= 0) { return new Weighted(0.0, 0.0f); } double threshold = getPrimaryThreshold(); float grade = (threshold > 0 && score > threshold) ? (float) getPrimaryGrade(score) : 0f; return new Weighted<>(threshold, grade); } @Deprecated public double getAnomalyGrade(double score, boolean flag) { return getPrimaryGrade(score); } /** * The following adapts the notion of x-sigma (standard deviation) to admit the * case that RCF scores are asymmetric and values lower than 1 (closer to 0.5) * can be more common; whereas anomalies are typically larger the x-factor is * automatically scaled to be calibrated with the average score (bounded below * by an absolute constant like 0.7) * * @param factor the factor being scaled * @param method transformation method * @param dimension the dimension of the problem (currently unused) * @return a scaled value of the factor */ protected double adjustedFactor(double factor, TransformMethod method, int dimension) { double correctedFactor = factor; double base = primaryDeviation.getMean(); if (base < factorAdjustmentThreshold && method != TransformMethod.NONE) { correctedFactor = primaryDeviation.getMean() * factor / factorAdjustmentThreshold; } return max(correctedFactor, MINIMUM_Z_FACTOR); } /** * The following computes the standard deviation of the scores. But we have * multiple ways of measuring that -- if the scores are typically symmetric then * many of these measures concide. However transformation of the values may * cause the score distribution to be unusual. For example, if NORMALIZATION is * used then the scores (below the average) end up being close to the average * (an example of the asymmetry) and thus only standard deviation is used. But * for other distributions we could directly estimate the deviation of the * scores below the dynamic mean in an online manner, and we do so in * thresholdDeviation. An orthogonal component is the effect of * shingling/differencing which connect up the scores from consecutive input. * * @param method transformation method * @param shingleSize shinglesize used * @return an estimate of long term deviation from mean of a stochastic series */ protected double longTermDeviation(TransformMethod method, int shingleSize) { if (shingleSize == 1 && !(method == TransformMethod.DIFFERENCE || method == TransformMethod.NORMALIZE_DIFFERENCE)) { // control the effect of large values above a threshold from raising the // threshold return min(sqrt(2.0) * thresholdDeviation.getDeviation(), primaryDeviation.getDeviation()); } else { double first = primaryDeviation.getDeviation(); first = min(first, max(secondaryDeviation.getDeviation(), sqrt(2.0) * thresholdDeviation.getDeviation())); // there is a role of differencing; either by shingling or by explicit // transformation return scoreDifferencing * first + (1 - scoreDifferencing) * secondaryDeviation.getDeviation(); } } public Weighted getThresholdAndGrade(double score, TransformMethod method, int dimension, int shingleSize) { return getThresholdAndGrade(score, zFactor, method, dimension, shingleSize); } public Weighted getThresholdAndGrade(double score, double factor, TransformMethod method, int dimension, int shingleSize) { double intermediateFraction = intermediateTermFraction(); double newFactor = adjustedFactor(factor, method, dimension); double longTerm = longTermDeviation(method, shingleSize); double scaledDeviation = (newFactor - 1) * longTerm + primaryDeviation.getDeviation(); double absolute = absoluteThreshold; if (autoThreshold && intermediateFraction >= 1.0 && primaryDeviation.getMean() < factorAdjustmentThreshold) { absolute = primaryDeviation.getMean() * absolute / factorAdjustmentThreshold; } double threshold = (!isDeviationReady()) ? max(initialThreshold, absolute) : max(absolute, intermediateFraction * (primaryDeviation.getMean() + scaledDeviation) + (1 - intermediateFraction) * initialThreshold); if (score < threshold || threshold <= 0) { return new Weighted<>(threshold, 0); } else { double t = getSurpriseIndex(score, threshold, newFactor, scaledDeviation / newFactor); t = min((Math.floor(t * 20)) / 16, 1.0); // grade 1 at scaledDeviation at 4 sigma if (t == 0) { // round off errors threshold = score; } return new Weighted<>(threshold, (float) t); } } /** * how surprised are seeing a value from a series with mean base with deviation, * where factor controls the separation * * @param score score * @param base mean of series * @param factor control parameter for determining surprise * @param deviation relevant deviation for the series * @return a clipped value of the "surpise" index */ protected float getSurpriseIndex(double score, double base, double factor, double deviation) { if (isDeviationReady()) { double tFactor = 2 * factor; if (deviation > 0) { tFactor = min(factor, (score - base) / deviation); } return max(0, (float) (tFactor / factor)); } else { return (float) min(1, max(0, (score - absoluteThreshold) / absoluteThreshold)); } } // mean or below; uses the asymmetry of the RCF score protected void updateThreshold(double score) { double gap = primaryDeviation.getMean() - score; if (gap > 0) { thresholdDeviation.update(gap); } } protected void updatePrimary(double score) { updateThreshold(score); primaryDeviation.update(score); ++count; } public void update(double primary, double secondary) { updateThreshold(primary); primaryDeviation.update(primary); secondaryDeviation.update(secondary); ++count; } public void update(double score, double secondScore, double lastScore, TransformMethod method) { update(min(score, 2.0), secondScore - lastScore); } public Deviation getPrimaryDeviation() { return primaryDeviation; } public Deviation getSecondaryDeviation() { return secondaryDeviation; } public void setZfactor(double factor) { zFactor = factor; } /** * sets the lower threshold -- which is used to scale the factor variable */ public void setLowerThreshold(double lower) { factorAdjustmentThreshold = lower; } /** * * @param value absolute lower bound thresholds turns off auto adjustment -- to * respect the direct setting */ public void setAbsoluteThreshold(double value) { autoThreshold = false; absoluteThreshold = value; } public void setInitialThreshold(double initial) { initialThreshold = initial; } public void setScoreDifferencing(double scoreDifferencing) { checkArgument(scoreDifferencing >= 0 && scoreDifferencing <= 1, "incorrect score differencing parameter"); this.scoreDifferencing = scoreDifferencing; } // to be updated as more deviations are added public Deviation[] getDeviations() { Deviation[] deviations = new Deviation[DEFAULT_DEVIATION_STATES]; deviations[0] = primaryDeviation.copy(); deviations[1] = secondaryDeviation.copy(); deviations[2] = thresholdDeviation.copy(); return deviations; } public boolean isAutoThreshold() { return autoThreshold; } public int getCount() { return count; } public void setCount(int count) { this.count = count; } public double getAbsoluteThreshold() { return absoluteThreshold; } public double getLowerThreshold() { return factorAdjustmentThreshold; } public double getInitialThreshold() { return initialThreshold; } public double getScoreDifferencing() { return scoreDifferencing; } public double getZFactor() { return zFactor; } public int getMinimumScores() { return minimumScores; } public void setMinimumScores(int minimumScores) { this.minimumScores = minimumScores; } public void setAutoThreshold(boolean autoThreshold) { this.autoThreshold = autoThreshold; } } ================================================ FILE: Java/parkservices/src/test/java/com/amazon/randomcutforest/parkservices/AnomalyDescriptorTest.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.parkservices; import static org.junit.jupiter.api.Assertions.assertArrayEquals; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertTrue; import java.util.Random; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.EnumSource; import com.amazon.randomcutforest.config.ForestMode; import com.amazon.randomcutforest.config.Precision; import com.amazon.randomcutforest.parkservices.config.ScoringStrategy; import com.amazon.randomcutforest.testutils.MultiDimDataWithKey; import com.amazon.randomcutforest.testutils.ShingledMultiDimDataWithKeys; public class AnomalyDescriptorTest { @ParameterizedTest @EnumSource(ScoringStrategy.class) public void PastValuesTest(ScoringStrategy strategy) { int sampleSize = 256; long seed = new Random().nextLong(); System.out.println(" seed " + seed); Random rng = new Random(seed); int numTrials = 10; // just once since testing exact equality int length = 40 * sampleSize; for (int i = 0; i < numTrials; i++) { int outputAfter = 2 + 1; int shingleSize = 1 + rng.nextInt(15); int baseDimensions = 1 + rng.nextInt(5); int dimensions = baseDimensions * shingleSize; ThresholdedRandomCutForest first = new ThresholdedRandomCutForest.Builder<>().compact(true) .dimensions(dimensions).precision(Precision.FLOAT_32).randomSeed(rng.nextLong()) .outputAfter(outputAfter).scoringStrategy(strategy).internalShinglingEnabled(true) .shingleSize(shingleSize).build(); MultiDimDataWithKey dataWithKeys = ShingledMultiDimDataWithKeys.getMultiDimData(length, 50, 100, 5, rng.nextLong(), baseDimensions); int count = 0; for (double[] point : dataWithKeys.data) { if (count == 82) { point[0] += 10000; // introducing an anomaly } AnomalyDescriptor firstResult = first.process(point, 0L); assertArrayEquals(firstResult.getCurrentInput(), point, 1e-6); assertEquals(firstResult.getScoringStrategy(), strategy); if (count < outputAfter || count < shingleSize) { assertEquals(firstResult.getRCFScore(), 0); } else { // distances can be 0 assertTrue(strategy == ScoringStrategy.DISTANCE || firstResult.getRCFScore() > 0); assertTrue(strategy == ScoringStrategy.DISTANCE || firstResult.getThreshold() > 0); assertEquals(firstResult.getScale().length, baseDimensions); assertEquals(firstResult.getShift().length, baseDimensions); assertTrue(firstResult.getRelativeIndex() <= 0); if (count == 82 && strategy != ScoringStrategy.DISTANCE) { // because distances are 0 till sampleSize; by which time // forecasts would be reasonable assertTrue(firstResult.getAnomalyGrade() > 0); } if (firstResult.getAnomalyGrade() > 0) { assertNotNull(firstResult.getPastValues()); assertEquals(firstResult.getPastValues().length, baseDimensions); if (firstResult.getRelativeIndex() == 0) { assertArrayEquals(firstResult.getPastValues(), firstResult.getCurrentInput(), 1e-10); } assertNotNull(firstResult.getRelevantAttribution()); assertEquals(firstResult.getRelevantAttribution().length, baseDimensions); assertEquals(firstResult.getAttribution().getHighLowSum(), firstResult.getRCFScore(), 1e-6); // the reverse of this condition need not be true -- the predictor corrector // often may declare grade 0 even when score is greater than threshold, to // account for shingling and initial results that populate the thresholder assertTrue(strategy == ScoringStrategy.MULTI_MODE_RECALL || firstResult.getRCFScore() >= firstResult.getThreshold()); } else { assertTrue(firstResult.getRelativeIndex() == 0); } } ++count; } } } @ParameterizedTest @EnumSource(ScoringStrategy.class) public void TimeAugmentedTest(ScoringStrategy strategy) { int sampleSize = 256; long seed = new Random().nextLong(); System.out.println(" seed " + seed); Random rng = new Random(seed); int numTrials = 10; // just once since testing exact equality int length = 40 * sampleSize; for (int i = 0; i < numTrials; i++) { int outputAfter = 2 + 1; int shingleSize = 1 + rng.nextInt(15); int baseDimensions = 1 + rng.nextInt(5); int dimensions = baseDimensions * shingleSize; ThresholdedRandomCutForest first = new ThresholdedRandomCutForest.Builder<>().compact(true) .dimensions(dimensions).precision(Precision.FLOAT_32).randomSeed(rng.nextLong()) .outputAfter(outputAfter).forestMode(ForestMode.TIME_AUGMENTED).scoringStrategy(strategy) .internalShinglingEnabled(true).shingleSize(shingleSize).build(); MultiDimDataWithKey dataWithKeys = ShingledMultiDimDataWithKeys.getMultiDimData(length, 50, 100, 5, rng.nextLong(), baseDimensions); int count = 0; for (double[] point : dataWithKeys.data) { AnomalyDescriptor firstResult = first.process(point, 0L); assertArrayEquals(firstResult.getCurrentInput(), point, 1e-6); assertEquals(firstResult.getScoringStrategy(), strategy); if (count < outputAfter || count < shingleSize) { assertEquals(firstResult.getRCFScore(), 0); } else { // distances can be 0 assertTrue(strategy == ScoringStrategy.DISTANCE || firstResult.getRCFScore() > 0); assertTrue(strategy == ScoringStrategy.DISTANCE || firstResult.getThreshold() > 0); assertEquals(firstResult.getScale().length, baseDimensions + 1); assertEquals(firstResult.getShift().length, baseDimensions + 1); assertTrue(firstResult.getRelativeIndex() <= 0); if (firstResult.getAnomalyGrade() > 0) { assertNotNull(firstResult.getPastValues()); assertEquals(firstResult.getPastValues().length, baseDimensions); if (firstResult.getRelativeIndex() == 0) { assertArrayEquals(firstResult.getPastValues(), firstResult.getCurrentInput(), 1e-10); } assertEquals(firstResult.getAttribution().getHighLowSum(), firstResult.getRCFScore(), 1e-6); assertNotNull(firstResult.getRelevantAttribution()); assertEquals(firstResult.getRelevantAttribution().length, baseDimensions); assertTrue(strategy == ScoringStrategy.MULTI_MODE_RECALL || firstResult.getRCFScore() >= firstResult.getThreshold()); } } ++count; } } } } ================================================ FILE: Java/parkservices/src/test/java/com/amazon/randomcutforest/parkservices/ConsistencyTest.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.parkservices; import static com.amazon.randomcutforest.testutils.ShingledMultiDimDataWithKeys.generateShingledData; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertTrue; import java.util.Arrays; import java.util.Random; import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.EnumSource; import com.amazon.randomcutforest.RandomCutForest; import com.amazon.randomcutforest.config.ForestMode; import com.amazon.randomcutforest.config.Precision; import com.amazon.randomcutforest.config.TransformMethod; import com.amazon.randomcutforest.parkservices.state.ThresholdedRandomCutForestMapper; import com.amazon.randomcutforest.testutils.MultiDimDataWithKey; import com.amazon.randomcutforest.testutils.ShingledMultiDimDataWithKeys; @Tag("functional") public class ConsistencyTest { @Test public void InternalShinglingTest() { int sampleSize = 256; int baseDimensions = 2; int shingleSize = 4; int dimensions = baseDimensions * shingleSize; long seed = new Random().nextLong(); int numTrials = 1; // just once since testing exact equality int length = 40 * sampleSize; for (int i = 0; i < numTrials; i++) { RandomCutForest forest = RandomCutForest.builder().compact(true).dimensions(dimensions) .precision(Precision.FLOAT_32).internalShinglingEnabled(true).shingleSize(shingleSize) .randomSeed(seed).build(); ThresholdedRandomCutForest first = new ThresholdedRandomCutForest.Builder<>().compact(true) .dimensions(dimensions).precision(Precision.FLOAT_32).randomSeed(seed) .internalShinglingEnabled(true).shingleSize(shingleSize).anomalyRate(0.01).build(); MultiDimDataWithKey dataWithKeys = ShingledMultiDimDataWithKeys.getMultiDimData(length, 50, 100, 5, seed + i, baseDimensions); for (double[] point : dataWithKeys.data) { AnomalyDescriptor firstResult = first.process(point, 0L); assertEquals(firstResult.getRCFScore(), forest.getAnomalyScore(point), 1e-10); forest.update(point); } } } @Test public void ExternalShinglingTest() { int sampleSize = 256; int baseDimensions = 1; int shingleSize = 4; int dimensions = baseDimensions * shingleSize; long seed = new Random().nextLong(); int numTrials = 1; // just once since testing exact equality int length = 400 * sampleSize; for (int i = 0; i < numTrials; i++) { RandomCutForest forest = RandomCutForest.builder().compact(true).dimensions(dimensions) .precision(Precision.FLOAT_32).internalShinglingEnabled(false).shingleSize(shingleSize) .randomSeed(seed).build(); RandomCutForest copyForest = RandomCutForest.builder().compact(true).dimensions(dimensions) .precision(Precision.FLOAT_32).internalShinglingEnabled(false).shingleSize(1).randomSeed(seed) .build(); ThresholdedRandomCutForest first = new ThresholdedRandomCutForest.Builder<>().compact(true) .dimensions(dimensions).precision(Precision.FLOAT_32).randomSeed(seed) .internalShinglingEnabled(false).shingleSize(shingleSize).anomalyRate(0.01).build(); ThresholdedRandomCutForest second = new ThresholdedRandomCutForest.Builder<>().compact(true) .dimensions(dimensions).precision(Precision.FLOAT_32).randomSeed(seed) .internalShinglingEnabled(false).shingleSize(1).anomalyRate(0.01).build(); MultiDimDataWithKey dataWithKeys = ShingledMultiDimDataWithKeys.generateShingledDataWithKey(length, 50, shingleSize, baseDimensions, seed); int gradeDifference = 0; for (double[] point : dataWithKeys.data) { AnomalyDescriptor firstResult = first.process(point, 0L); AnomalyDescriptor secondResult = second.process(point, 0L); assertEquals(firstResult.getRCFScore(), forest.getAnomalyScore(point), 1e-10); assertEquals(firstResult.getRCFScore(), copyForest.getAnomalyScore(point), 1e-10); assertEquals(firstResult.getRCFScore(), secondResult.getRCFScore(), 1e-10); if ((firstResult.getAnomalyGrade() > 0) != (secondResult.getAnomalyGrade() > 0)) { ++gradeDifference; // thresholded random cut forest uses shingle size in the corrector step // this is supposed to be different } forest.update(point); copyForest.update(point); } assertTrue(gradeDifference > 0); } } @Test public void MixedShinglingTest() { int sampleSize = 256; int baseDimensions = 1; int shingleSize = 4; int dimensions = baseDimensions * shingleSize; long seed = new Random().nextLong(); System.out.println(seed); Random rng = new Random(seed); int numTrials = 5; // test is exact equality, reducing the number of trials int numberOfTrees = 30; // and using fewer trees to speed up test int length = 40 * sampleSize; int testLength = length; for (int i = 0; i < numTrials; i++) { long newSeed = rng.nextLong(); int outputAfter = rng.nextInt(sampleSize * 10) + 1; ThresholdedRandomCutForest first = new ThresholdedRandomCutForest.Builder<>().compact(true) .dimensions(dimensions).precision(Precision.FLOAT_32).randomSeed(newSeed) .numberOfTrees(numberOfTrees).internalShinglingEnabled(true) // increasing outputAfter for internal shingling .outputAfter(outputAfter + shingleSize - 1).shingleSize(shingleSize).anomalyRate(0.01).build(); ThresholdedRandomCutForest second = new ThresholdedRandomCutForest.Builder<>().compact(true) .dimensions(dimensions).precision(Precision.FLOAT_32).randomSeed(newSeed) .numberOfTrees(numberOfTrees).internalShinglingEnabled(false).outputAfter(outputAfter) .shingleSize(shingleSize).anomalyRate(0.01).build(); MultiDimDataWithKey dataWithKeys = ShingledMultiDimDataWithKeys.getMultiDimData(length + testLength, 50, 100, 5, newSeed + i, baseDimensions); double[][] shingledData = generateShingledData(dataWithKeys.data, shingleSize, baseDimensions, false); assertEquals(shingledData.length, dataWithKeys.data.length - shingleSize + 1); int count = shingleSize - 1; // insert initial points for (int j = 0; j < shingleSize - 1; j++) { first.process(dataWithKeys.data[j], 0L); } for (int j = 0; j < length; j++) { // validate equality of points for (int y = 0; y < baseDimensions; y++) { assertEquals(dataWithKeys.data[count][y], shingledData[j][(shingleSize - 1) * baseDimensions + y], 1e-10); } AnomalyDescriptor firstResult = first.process(dataWithKeys.data[count], 0L); ++count; AnomalyDescriptor secondResult = second.process(shingledData[j], 0L); assertEquals(firstResult.getRCFScore(), secondResult.getRCFScore(), 1e-10); // grades will not match } ThresholdedRandomCutForestMapper mapper = new ThresholdedRandomCutForestMapper(); ThresholdedRandomCutForest fourth = mapper.toModel(mapper.toState(first)); for (int j = length; j < shingledData.length; j++) { // validate eaulity of points for (int y = 0; y < baseDimensions; y++) { assertEquals(dataWithKeys.data[count][y], shingledData[j][(shingleSize - 1) * baseDimensions + y], 1e-10); } AnomalyDescriptor firstResult = first.process(dataWithKeys.data[count], 0L); AnomalyDescriptor secondResult = second.process(shingledData[j], 0L); AnomalyDescriptor fourthResult = fourth.process(dataWithKeys.data[count], 0L); ++count; assertEquals(firstResult.getRCFScore(), secondResult.getRCFScore(), 1e-10); assertEquals(firstResult.getRCFScore(), fourthResult.getRCFScore(), 1e-10); assertEquals(firstResult.getAnomalyGrade(), fourthResult.getAnomalyGrade(), 1e-10); } } } @ParameterizedTest @EnumSource(TransformMethod.class) public void TimeAugmentedTest(TransformMethod transformMethod) { int sampleSize = 256; int baseDimensions = 1; int shingleSize = 4; int dimensions = baseDimensions * shingleSize; int numTrials = 1; // test is exact equality, reducing the number of trials int numberOfTrees = 30; // and using fewer trees to speed up test int length = 10 * sampleSize; int dataSize = 2 * length; for (int i = 0; i < numTrials; i++) { Precision precision = Precision.FLOAT_32; long seed = new Random().nextLong(); System.out.println("seed = " + seed); ThresholdedRandomCutForest first = ThresholdedRandomCutForest.builder().compact(true).dimensions(dimensions) .randomSeed(0).numberOfTrees(numberOfTrees).shingleSize(shingleSize).sampleSize(sampleSize) .internalShinglingEnabled(true).precision(precision).anomalyRate(0.01) .forestMode(ForestMode.STANDARD).weightTime(0).transformMethod(transformMethod).normalizeTime(true) .outputAfter(32).initialAcceptFraction(0.125).build(); ThresholdedRandomCutForest second = ThresholdedRandomCutForest.builder().compact(true) .dimensions(dimensions).randomSeed(0).numberOfTrees(numberOfTrees).shingleSize(shingleSize) .sampleSize(sampleSize).internalShinglingEnabled(true).precision(precision).anomalyRate(0.01) .forestMode(ForestMode.TIME_AUGMENTED).weightTime(0).transformMethod(transformMethod) .normalizeTime(true).outputAfter(32).initialAcceptFraction(0.125).build(); // ensuring that the parameters are the same; otherwise the grades/scores cannot // be the same // weighTime has to be 0 in the above first.setLowerThreshold(1.1); second.setLowerThreshold(1.1); first.setHorizon(0.75); second.setHorizon(0.75); Random noise = new Random(0); // change the last argument seed for a different run MultiDimDataWithKey dataWithKeys = ShingledMultiDimDataWithKeys.getMultiDimData(dataSize + shingleSize - 1, 50, 100, 5, seed, baseDimensions); int count = 0; for (int j = 0; j < length; j++) { long timestamp = 100 * count + noise.nextInt(10) - 5; AnomalyDescriptor result = first.process(dataWithKeys.data[j], timestamp); AnomalyDescriptor test = second.process(dataWithKeys.data[j], timestamp); assertEquals(result.getRCFScore(), test.getRCFScore(), 1e-10); // grade will not be the same because dimension changes ++count; } ThresholdedRandomCutForestMapper mapper = new ThresholdedRandomCutForestMapper(); ThresholdedRandomCutForest third = mapper.toModel(mapper.toState(second)); for (int j = length; j < 2 * length; j++) { // can be a different gap long timestamp = 150 * count + noise.nextInt(10) - 5; AnomalyDescriptor firstResult = first.process(dataWithKeys.data[count], timestamp); AnomalyDescriptor secondResult = second.process(dataWithKeys.data[count], timestamp); AnomalyDescriptor thirdResult = third.process(dataWithKeys.data[count], timestamp); assertEquals(firstResult.getRCFScore(), secondResult.getRCFScore(), 1e-10); assertEquals(firstResult.getRCFScore(), thirdResult.getRCFScore(), 1e-10); assertEquals(secondResult.getAnomalyGrade(), thirdResult.getAnomalyGrade(), 1e-10); } } } // streaming impute changes normalizations @ParameterizedTest @EnumSource(TransformMethod.class) public void ImputeTest(TransformMethod transformMethod) { int sampleSize = 256; int baseDimensions = 2; int shingleSize = 4; int dimensions = baseDimensions * shingleSize; int numTrials = 1; // test is exact equality, reducing the number of trials int numberOfTrees = 30; // and using fewer trees to speed up test int length = 10 * sampleSize; int dataSize = 2 * length; for (int i = 0; i < numTrials; i++) { Precision precision = Precision.FLOAT_32; long seed = new Random().nextLong(); System.out.println("seed = " + seed); Random rng = new Random(seed); double[] weights = new double[baseDimensions]; Arrays.fill(weights, 1.0); int startNormalization = 10; int outputAfter = startNormalization + shingleSize; long newSeed = rng.nextLong(); ThresholdedRandomCutForest first = ThresholdedRandomCutForest.builder().compact(true).dimensions(dimensions) .randomSeed(newSeed).numberOfTrees(numberOfTrees).shingleSize(shingleSize).sampleSize(sampleSize) .internalShinglingEnabled(true).precision(precision).anomalyRate(0.01) .forestMode(ForestMode.STANDARD).weightTime(0).transformMethod(transformMethod).normalizeTime(true) .startNormalization(startNormalization).outputAfter(outputAfter).initialAcceptFraction(0.125) .weights(weights).build(); ThresholdedRandomCutForest second = ThresholdedRandomCutForest.builder().compact(true) .dimensions(dimensions).randomSeed(newSeed).numberOfTrees(numberOfTrees).shingleSize(shingleSize) .sampleSize(sampleSize).internalShinglingEnabled(true).precision(precision).anomalyRate(0.01) .forestMode(ForestMode.STREAMING_IMPUTE).weightTime(0).transformMethod(transformMethod) .startNormalization(startNormalization).normalizeTime(true).outputAfter(outputAfter) .initialAcceptFraction(0.125).weights(weights).build(); Random noise = new Random(0); // change the last argument seed for a different run MultiDimDataWithKey dataWithKeys = ShingledMultiDimDataWithKeys.getMultiDimData(dataSize + shingleSize - 1, 50, 100, 5, seed, baseDimensions); for (int j = 0; j < length; j++) { // gap has to be asymptotically same long timestamp = 100 * j + 0 * noise.nextInt(10) - 5; AnomalyDescriptor result = first.process(dataWithKeys.data[j], 0L); AnomalyDescriptor test = second.process(dataWithKeys.data[j], timestamp); if (result.getRCFScore() > 0 && test.getRCFScore() > 0) { assertEquals(result.getRCFScore(), test.getRCFScore(), 1e-6); } } ThresholdedRandomCutForestMapper mapper = new ThresholdedRandomCutForestMapper(); ThresholdedRandomCutForest third = mapper.toModel(mapper.toState(second)); for (int j = length; j < 2 * length; j++) { // has to be the same gap long timestamp = 100 * j + noise.nextInt(10) - 5; AnomalyDescriptor firstResult = first.process(dataWithKeys.data[j], 0L); AnomalyDescriptor thirdResult = third.process(dataWithKeys.data[j], timestamp); assertEquals(firstResult.getRCFScore(), thirdResult.getRCFScore(), 1e-6); } } } } ================================================ FILE: Java/parkservices/src/test/java/com/amazon/randomcutforest/parkservices/DescriptorTest.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.parkservices; import static org.junit.jupiter.api.Assertions.assertArrayEquals; import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNull; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import com.amazon.randomcutforest.returntypes.DiVector; import com.amazon.randomcutforest.returntypes.RangeVector; public class DescriptorTest { int dimensions; int horizon; private ForecastDescriptor forecastDescriptor; @BeforeEach public void setUp() { dimensions = 4; horizon = 2; forecastDescriptor = new ForecastDescriptor(new double[] { 2.0, 3.0 }, 0L, 7); } @Test public void testSet() { assertThrows(IllegalArgumentException.class, () -> forecastDescriptor.setObservedErrorDistribution(new RangeVector(15))); assertDoesNotThrow(() -> forecastDescriptor.setObservedErrorDistribution(new RangeVector(14))); assertThrows(IllegalArgumentException.class, () -> forecastDescriptor.setErrorRMSE(new DiVector(13))); assertDoesNotThrow(() -> forecastDescriptor.setErrorRMSE(new DiVector(14))); assertFalse(forecastDescriptor.isExpectedValuesPresent()); assertThrows(IllegalArgumentException.class, () -> forecastDescriptor.setExpectedValues(2, new double[2], 1.0)); forecastDescriptor.setExpectedValues(0, new double[2], 1.0); assertTrue(forecastDescriptor.isExpectedValuesPresent()); assertNull(forecastDescriptor.getLastExpectedRCFPoint()); assertArrayEquals(forecastDescriptor.getExpectedValuesList()[0], new double[2]); forecastDescriptor.setExpectedValues(0, new double[] { -1.0, -1.0 }, 0.5); assertArrayEquals(forecastDescriptor.getExpectedValuesList()[0], new double[] { -1.0, -1.0 }); assertNull(forecastDescriptor.getMissingValues()); forecastDescriptor.setMissingValues(null); assertNull(forecastDescriptor.getMissingValues()); forecastDescriptor.setMissingValues(new int[] { 17 }); assertArrayEquals(forecastDescriptor.getMissingValues(), new int[] { 17 }); assertThrows(IllegalArgumentException.class, () -> forecastDescriptor.setImputedPoint(0, null)); forecastDescriptor.setNumberOfNewImputes(1); forecastDescriptor.setInputLength(1); forecastDescriptor.setShingleSize(1); assertThrows(IllegalArgumentException.class, () -> forecastDescriptor.setImputedPoint(0, null)); assertThrows(IllegalArgumentException.class, () -> forecastDescriptor.setImputedPoint(0, new double[3])); assertThrows(IllegalArgumentException.class, () -> forecastDescriptor.setImputedPoint(0, new double[1])); forecastDescriptor.setShingleSize(2); forecastDescriptor.setImputedPoints(null); // reset assertThrows(IllegalArgumentException.class, () -> forecastDescriptor.setImputedPoint(-1, new double[1])); assertDoesNotThrow(() -> forecastDescriptor.setImputedPoint(0, new double[1])); // cannot set twice assertThrows(IllegalArgumentException.class, () -> forecastDescriptor.setImputedPoint(0, new double[1])); } } ================================================ FILE: Java/parkservices/src/test/java/com/amazon/randomcutforest/parkservices/ForecastTest.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.parkservices; import static com.amazon.randomcutforest.config.ImputationMethod.RCF; import static com.amazon.randomcutforest.testutils.ShingledMultiDimDataWithKeys.generateShingledData; import static java.lang.Math.min; import static org.junit.jupiter.api.Assertions.assertArrayEquals; import static org.junit.jupiter.api.Assertions.assertEquals; import java.util.Random; import org.junit.jupiter.api.Tag; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.CsvSource; import org.junit.jupiter.params.provider.EnumSource; import org.junit.jupiter.params.provider.ValueSource; import com.amazon.randomcutforest.config.ForestMode; import com.amazon.randomcutforest.config.Precision; import com.amazon.randomcutforest.config.TransformMethod; import com.amazon.randomcutforest.returntypes.RangeVector; import com.amazon.randomcutforest.returntypes.TimedRangeVector; import com.amazon.randomcutforest.testutils.MultiDimDataWithKey; import com.amazon.randomcutforest.testutils.ShingledMultiDimDataWithKeys; @Tag("functional") public class ForecastTest { @ParameterizedTest @EnumSource(TransformMethod.class) public void basicAndIdempotence(TransformMethod method) { int sampleSize = 256; int baseDimensions = 1; int shingleSize = 8; int dimensions = baseDimensions * shingleSize; long seed = 1L; int length = 4 * sampleSize; int outputAfter = 128; ThresholdedRandomCutForest forest = new ThresholdedRandomCutForest.Builder<>().compact(true) .dimensions(dimensions).precision(Precision.FLOAT_32).randomSeed(seed).internalShinglingEnabled(true) .shingleSize(shingleSize).outputAfter(outputAfter).transformMethod(method).build(); // as the ratio of amplitude (signal) to noise is changed, the estimation range // in forecast // (or any other inference) should increase MultiDimDataWithKey dataWithKeys = ShingledMultiDimDataWithKeys.getMultiDimData(length, 50, 100, 10, seed, baseDimensions); System.out.println(dataWithKeys.changes.length + " anomalies injected "); double[][] shingledData = generateShingledData(dataWithKeys.data, shingleSize, baseDimensions, false); assertEquals(shingledData.length, dataWithKeys.data.length - shingleSize + 1); int horizon = 20; if (method == TransformMethod.NORMALIZE_DIFFERENCE || method == TransformMethod.DIFFERENCE) { horizon = min(horizon, shingleSize / 2 + 1); } double[] error = new double[horizon]; double[] lowerError = new double[horizon]; double[] upperError = new double[horizon]; for (int j = 0; j < dataWithKeys.data.length; j++) { // forecast first; change centrality to achieve a control over the sampling // setting centrality = 0 would correspond to random sampling from the leaves // reached by // impute visitor TimedRangeVector extrapolate = forest.extrapolate(horizon, true, 1.0); RangeVector forecast = extrapolate.rangeVector; assert (forecast.values.length == horizon); assert (extrapolate.timeStamps.length == horizon); assert (extrapolate.lowerTimeStamps.length == horizon); assert (extrapolate.upperTimeStamps.length == horizon); RangeVector alternative = forest.extrapolate(horizon, true, 1.0).rangeVector; // repeated invocations of extrapolate should return same result // for the same values of correction,centrality assertArrayEquals(forecast.values, alternative.values, 1e-6f); assertArrayEquals(forecast.lower, alternative.lower, 1e-6f); assertArrayEquals(forecast.upper, alternative.upper, 1e-6f); for (int i = 0; i < horizon; i++) { // check ranges if (j > sampleSize) { assert (extrapolate.timeStamps[i] == j + i); assert (extrapolate.upperTimeStamps[i] == j + i); assert (extrapolate.lowerTimeStamps[i] == j + i); } assert (forecast.values[i] >= forecast.lower[i]); assert (forecast.values[i] <= forecast.upper[i]); // compute errors if (j > outputAfter + shingleSize - 1 && j + i < dataWithKeys.data.length) { double t = dataWithKeys.data[j + i][0] - forecast.values[i]; error[i] += t * t; t = dataWithKeys.data[j + i][0] - forecast.lower[i]; lowerError[i] += t * t; t = dataWithKeys.data[j + i][0] - forecast.upper[i]; upperError[i] += t * t; } } forest.process(dataWithKeys.data[j], j); } System.out.println(forest.getTransformMethod().name() + " RMSE (as horizon increases) "); for (int i = 0; i < horizon; i++) { double t = error[i] / (dataWithKeys.data.length - shingleSize + 1 - outputAfter - i); System.out.print(Math.sqrt(t) + " "); } System.out.println(); System.out.println("RMSE Lower (as horizon increases)"); for (int i = 0; i < horizon; i++) { double t = lowerError[i] / (dataWithKeys.data.length - shingleSize + 1 - outputAfter - i); System.out.print(Math.sqrt(t) + " "); } System.out.println(); System.out.println("RMSE Upper (as horizon increases)"); for (int i = 0; i < horizon; i++) { double t = upperError[i] / (dataWithKeys.data.length - shingleSize + 1 - outputAfter - i); System.out.print(Math.sqrt(t) + " "); } System.out.println(); } @ParameterizedTest @CsvSource({ "NORMALIZE,true", "NORMALIZE,false", "SUBTRACT_MA,true", "SUBTRACT_MA,false", "WEIGHTED,true", "WEIGHTED,false" }) public void linearShift(String methodString, String normalizeTime) { int sampleSize = 256; int baseDimensions = 1; int shingleSize = 8; int dimensions = baseDimensions * shingleSize; long seed = 0L; int length = 10 * sampleSize; int outputAfter = 128; ThresholdedRandomCutForest forest = new ThresholdedRandomCutForest.Builder<>().compact(true) .dimensions(dimensions).precision(Precision.FLOAT_32).randomSeed(seed).internalShinglingEnabled(true) .shingleSize(shingleSize).timeDecay(1.0 / 1024).outputAfter(outputAfter) .transformMethod(TransformMethod.valueOf(methodString)) .normalizeTime(Boolean.parseBoolean(normalizeTime)).build(); // as the ratio of amplitude (signal) to noise is changed, the estimation range // in forecast // (or any other inference) should increase MultiDimDataWithKey dataWithKeys = ShingledMultiDimDataWithKeys.getMultiDimData(length, 50, 100, 10, seed, baseDimensions, true); System.out.println(dataWithKeys.changes.length + " anomalies injected "); double[][] shingledData = generateShingledData(dataWithKeys.data, shingleSize, baseDimensions, false); assertEquals(shingledData.length, dataWithKeys.data.length - shingleSize + 1); // the following constraint is for differencing based methods int horizon = shingleSize / 2 + 1; double[] error = new double[horizon]; double[] lowerError = new double[horizon]; double[] upperError = new double[horizon]; for (int j = 0; j < dataWithKeys.data.length; j++) { // forecast first; change centrality to achieve a control over the sampling // setting centrality = 0 would correspond to random sampling from the leaves // reached by // impute visitor TimedRangeVector extrapolate = forest.extrapolate(horizon, true, 1.0); RangeVector forecast = extrapolate.rangeVector; assert (forecast.values.length == horizon); assert (extrapolate.timeStamps.length == horizon); assert (extrapolate.lowerTimeStamps.length == horizon); assert (extrapolate.upperTimeStamps.length == horizon); RangeVector alternative = forest.extrapolate(horizon, true, 1.0).rangeVector; // repeated invocations of extrapolate should return same result // for the same values of correction,centrality assertArrayEquals(forecast.values, alternative.values, 1e-6f); assertArrayEquals(forecast.lower, alternative.lower, 1e-6f); assertArrayEquals(forecast.upper, alternative.upper, 1e-6f); for (int i = 0; i < horizon; i++) { if (j > outputAfter) { assert (extrapolate.timeStamps[i] == i + j); assert (extrapolate.upperTimeStamps[i] == i + j); assert (extrapolate.lowerTimeStamps[i] == i + j); } // check ranges assert (forecast.values[i] >= forecast.lower[i]); assert (forecast.values[i] <= forecast.upper[i]); // compute errors if (j > outputAfter + shingleSize - 1 && j + i < dataWithKeys.data.length) { double t = dataWithKeys.data[j + i][0] - forecast.values[i]; error[i] += t * t; t = dataWithKeys.data[j + i][0] - forecast.lower[i]; lowerError[i] += t * t; t = dataWithKeys.data[j + i][0] - forecast.upper[i]; upperError[i] += t * t; } } forest.process(dataWithKeys.data[j], j); } System.out.println(forest.getTransformMethod().name() + " RMSE (as horizon increases)"); for (int i = 0; i < horizon; i++) { double t = error[i] / (dataWithKeys.data.length - shingleSize + 1 - outputAfter - i); System.out.print(Math.sqrt(t) + " "); } System.out.println(); System.out.println("RMSE Lower (as horizon increases)"); for (int i = 0; i < horizon; i++) { double t = lowerError[i] / (dataWithKeys.data.length - shingleSize + 1 - outputAfter - i); System.out.print(Math.sqrt(t) + " "); } System.out.println(); System.out.println("RMSE Upper (as horizon increases)"); for (int i = 0; i < horizon; i++) { double t = upperError[i] / (dataWithKeys.data.length - shingleSize + 1 - outputAfter - i); System.out.print(Math.sqrt(t) + " "); } System.out.println(); } @ParameterizedTest @CsvSource({ "DIFFERENCE,true", "DIFFERENCE,false", "NORMALIZE_DIFFERENCE,true", "NORMALIZE_DIFFERENCE,false" }) public void linearShiftDifference(String methodString, String normalizeTime) { int sampleSize = 256; int baseDimensions = 1; int shingleSize = 8; int dimensions = baseDimensions * shingleSize; // use same seed as previous test long seed = 0L; int length = 10 * sampleSize; int outputAfter = 128; ThresholdedRandomCutForest forest = new ThresholdedRandomCutForest.Builder<>().compact(true) .dimensions(dimensions).precision(Precision.FLOAT_32).randomSeed(seed).internalShinglingEnabled(true) .shingleSize(shingleSize).timeDecay(1.0 / 1024).outputAfter(outputAfter) .transformMethod(TransformMethod.valueOf(methodString)) .normalizeTime(Boolean.parseBoolean(normalizeTime)).build(); // as the ratio of amplitude (signal) to noise is changed, the estimation range // in forecast // (or any other inference) should increase MultiDimDataWithKey dataWithKeys = ShingledMultiDimDataWithKeys.getMultiDimData(length, 50, 100, 10, seed, baseDimensions, true); System.out.println(dataWithKeys.changes.length + " anomalies injected "); double[][] shingledData = generateShingledData(dataWithKeys.data, shingleSize, baseDimensions, false); assertEquals(shingledData.length, dataWithKeys.data.length - shingleSize + 1); // the following constraint is for differencing based methods // the differenced values will be noisy in the presence of anomalies // the example demonstrates that the best forecaster need not be the best // anomaly detector, even from a restricted family of algorithms int horizon = shingleSize / 2 + 1; double[] error = new double[horizon]; double[] lowerError = new double[horizon]; double[] upperError = new double[horizon]; for (int j = 0; j < dataWithKeys.data.length; j++) { TimedRangeVector extrapolate = forest.extrapolate(horizon, true, 1.0); RangeVector forecast = extrapolate.rangeVector; assert (forecast.values.length == horizon); assert (extrapolate.timeStamps.length == horizon); assert (extrapolate.lowerTimeStamps.length == horizon); assert (extrapolate.upperTimeStamps.length == horizon); RangeVector alternative = forest.extrapolate(horizon, true, 1.0).rangeVector; // repeated invocations of extrapolate should return same result // for the same values of correction,centrality assertArrayEquals(forecast.values, alternative.values, 1e-6f); assertArrayEquals(forecast.lower, alternative.lower, 1e-6f); assertArrayEquals(forecast.upper, alternative.upper, 1e-6f); for (int i = 0; i < horizon; i++) { // check ranges assertEquals(extrapolate.timeStamps[i], 0); assertEquals(extrapolate.upperTimeStamps[i], 0); assertEquals(extrapolate.lowerTimeStamps[i], 0); assert (forecast.values[i] >= forecast.lower[i]); assert (forecast.values[i] <= forecast.upper[i]); // compute errors if (j > outputAfter + shingleSize - 1 && j + i < dataWithKeys.data.length) { double t = dataWithKeys.data[j + i][0] - forecast.values[i]; error[i] += t * t; t = dataWithKeys.data[j + i][0] - forecast.lower[i]; lowerError[i] += t * t; t = dataWithKeys.data[j + i][0] - forecast.upper[i]; upperError[i] += t * t; } } forest.process(dataWithKeys.data[j], 0L); } System.out.println(forest.getTransformMethod().name() + " RMSE (as horizon increases)"); for (int i = 0; i < horizon; i++) { double t = error[i] / (dataWithKeys.data.length - shingleSize + 1 - outputAfter - i); System.out.print(Math.sqrt(t) + " "); } System.out.println(); System.out.println("RMSE Lower (as horizon increases)"); for (int i = 0; i < horizon; i++) { double t = lowerError[i] / (dataWithKeys.data.length - shingleSize + 1 - outputAfter - i); System.out.print(Math.sqrt(t) + " "); } System.out.println(); System.out.println("RMSE Upper (as horizon increases)"); for (int i = 0; i < horizon; i++) { double t = upperError[i] / (dataWithKeys.data.length - shingleSize + 1 - outputAfter - i); System.out.print(Math.sqrt(t) + " "); } System.out.println(); } @ParameterizedTest @ValueSource(booleans = { true, false }) void timeAugmentedTest(boolean normalize) { int shingleSize = 4; int numberOfTrees = 50; int sampleSize = 256; Precision precision = Precision.FLOAT_32; int baseDimensions = 1; int horizon = 10; int count = 0; int dimensions = baseDimensions * shingleSize; ThresholdedRandomCutForest forest = new ThresholdedRandomCutForest.Builder<>().compact(true) .dimensions(dimensions).randomSeed(0).numberOfTrees(numberOfTrees).shingleSize(shingleSize) .sampleSize(sampleSize).internalShinglingEnabled(true).precision(precision).anomalyRate(0.01) .forestMode(ForestMode.TIME_AUGMENTED).normalizeTime(normalize).build(); long seed = new Random().nextLong(); double[] data = new double[] { 1.0 }; System.out.println("seed = " + seed); Random rng = new Random(seed); for (int i = 0; i < 200; i++) { long time = 1000L * count + rng.nextInt(100); forest.process(data, time); ++count; } TimedRangeVector extrapolate = forest.extrapolate(horizon, true, 1.0); RangeVector range = extrapolate.rangeVector; assert (range.values.length == baseDimensions * horizon); assert (extrapolate.timeStamps.length == horizon); assert (extrapolate.lowerTimeStamps.length == horizon); assert (extrapolate.upperTimeStamps.length == horizon); /* * the forecasted time stamps should be close to 1000 * (count + i) the data * values should remain as in data[] */ for (int i = 0; i < horizon; i++) { assertEquals(range.values[i], data[0]); assertEquals(range.upper[i], data[0]); assertEquals(range.lower[i], data[0]); assert (Math.abs(Math.round(extrapolate.timeStamps[i] * 0.001) - count - i) <= 1); assert (extrapolate.timeStamps[i] >= extrapolate.lowerTimeStamps[i]); assert (extrapolate.upperTimeStamps[i] >= extrapolate.timeStamps[i]); } } @ParameterizedTest @EnumSource(TransformMethod.class) public void streamingImputeTest(TransformMethod method) { int shingleSize = 8; int numberOfTrees = 100; int sampleSize = 256; Precision precision = Precision.FLOAT_32; int dataSize = 4 * sampleSize; int outputAfter = sampleSize; // change this to try different number of attributes, int baseDimensions = 1; int dropped = 0; long seed = 2022L; // the following simulates random drops long dropSeed = 7L; Random dropPRG = new Random(dropSeed); System.out.println("seed = " + seed); System.out.println("dropping seed = " + dropSeed); int dimensions = baseDimensions * shingleSize; ThresholdedRandomCutForest forest = new ThresholdedRandomCutForest.Builder<>().compact(true) .dimensions(dimensions).randomSeed(0).numberOfTrees(numberOfTrees).shingleSize(shingleSize) .sampleSize(sampleSize).precision(precision).anomalyRate(0.01).forestMode(ForestMode.STREAMING_IMPUTE) .transformMethod(method).imputationMethod(RCF).build(); // limited to shingleSize/2+1 due to the differenced methods int horizon = shingleSize / 2 + 1; double[] error = new double[horizon]; double[] lowerError = new double[horizon]; double[] upperError = new double[horizon]; MultiDimDataWithKey dataWithKeys = ShingledMultiDimDataWithKeys.getMultiDimData(dataSize + shingleSize - 1, 50, 100, 5, seed, baseDimensions, true); System.out.println(dataWithKeys.changes.length + " anomalies injected "); for (int j = 0; j < dataWithKeys.data.length; j++) { if (dropPRG.nextDouble() < 0.2) { ++dropped; } else { // note that the forecast does not change without a new reading in streaming // impute // in this case the forecast corresponds to j+1 .. j + horizon // so we will add the j'th entry and then measure error against j+1 ... // j+horizon values long newStamp = 1000L * j + 10 * dropPRG.nextInt(10) - 5; forest.process(dataWithKeys.data[j], newStamp); TimedRangeVector extrapolate = forest.extrapolate(horizon, true, 1.0); RangeVector forecast = extrapolate.rangeVector; assert (forecast.values.length == horizon); assert (extrapolate.timeStamps.length == horizon); RangeVector alternative = forest.extrapolate(horizon, true, 1.0).rangeVector; // repeated invocations of extrapolate should return same result // for the same values of correction,centrality assertArrayEquals(forecast.values, alternative.values, 1e-6f); assertArrayEquals(forecast.lower, alternative.lower, 1e-6f); assertArrayEquals(forecast.upper, alternative.upper, 1e-6f); for (int i = 0; i < horizon; i++) { // check ranges assert (forecast.values[i] >= forecast.lower[i]); assert (forecast.values[i] <= forecast.upper[i]); assertEquals(extrapolate.timeStamps[i], 0); assertEquals(extrapolate.upperTimeStamps[i], 0); assertEquals(extrapolate.lowerTimeStamps[i], 0); // compute errors // NOTE the +1 since we are predicting the unseen values in the data if (j > outputAfter + shingleSize - 1 && j + i + 1 < dataWithKeys.data.length) { double t = dataWithKeys.data[j + i + 1][0] - forecast.values[i]; error[i] += t * t; t = dataWithKeys.data[j + i + 1][0] - forecast.lower[i]; lowerError[i] += t * t; t = dataWithKeys.data[j + i + 1][0] - forecast.upper[i]; upperError[i] += t * t; } } } } System.out.println("Impute with " + dropped + " dropped values from " + dataWithKeys.data.length + " values"); System.out.println(forest.getTransformMethod().name() + " RMSE (as horizon increases)"); for (int i = 0; i < horizon; i++) { double t = error[i] / (dataWithKeys.data.length - shingleSize + 1 - outputAfter - i - dropped); System.out.print(Math.sqrt(t) + " "); } System.out.println(); System.out.println("RMSE Lower (as horizon increases)"); for (int i = 0; i < horizon; i++) { double t = lowerError[i] / (dataWithKeys.data.length - shingleSize + 1 - outputAfter - i - dropped); System.out.print(Math.sqrt(t) + " "); } System.out.println(); System.out.println("RMSE Upper (as horizon increases)"); for (int i = 0; i < horizon; i++) { double t = upperError[i] / (dataWithKeys.data.length - shingleSize + 1 - outputAfter - i - dropped); System.out.print(Math.sqrt(t) + " "); } System.out.println(); } } ================================================ FILE: Java/parkservices/src/test/java/com/amazon/randomcutforest/parkservices/IgnoreTest.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.parkservices; import static org.junit.jupiter.api.Assertions.assertTrue; import java.time.LocalDateTime; import java.time.temporal.ChronoUnit; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Random; import java.util.Set; import java.util.TreeSet; import org.junit.jupiter.api.Test; import com.amazon.randomcutforest.config.ForestMode; import com.amazon.randomcutforest.config.Precision; import com.amazon.randomcutforest.config.TransformMethod; public class IgnoreTest { @Test public void testAnomalies() { // Initialize the forest parameters int shingleSize = 8; int numberOfTrees = 50; int sampleSize = 256; Precision precision = Precision.FLOAT_32; int baseDimensions = 1; long count = 0; int dimensions = baseDimensions * shingleSize; // Build the ThresholdedRandomCutForest ThresholdedRandomCutForest forest = new ThresholdedRandomCutForest.Builder<>().compact(true) .dimensions(dimensions).randomSeed(0).numberOfTrees(numberOfTrees).shingleSize(shingleSize) .sampleSize(sampleSize).precision(precision).anomalyRate(0.01).forestMode(ForestMode.STREAMING_IMPUTE) .transformMethod(TransformMethod.NORMALIZE).autoAdjust(true) .ignoreNearExpectedFromAboveByRatio(new double[] { 0.1 }) .ignoreNearExpectedFromBelowByRatio(new double[] { 0.1 }).build(); // Generate the list of doubles List randomDoubles = generateUniformRandomDoubles(); // List to store detected anomaly indices List anomalies = new ArrayList<>(); // Process each data point through the forest for (double val : randomDoubles) { double[] point = new double[] { val }; long newStamp = 100 * count; AnomalyDescriptor result = forest.process(point, newStamp); if (result.getAnomalyGrade() != 0) { anomalies.add((int) count); } ++count; } // Expected anomalies List expectedAnomalies = Arrays.asList(273, 283, 505, 1323); System.out.println("Anomalies detected at indices: " + anomalies); // Verify that all expected anomalies are detected assertTrue(anomalies.containsAll(expectedAnomalies), "Anomalies detected do not contain all expected anomalies"); } public static List generateUniformRandomDoubles() { // Set fixed times for reproducibility LocalDateTime startTime = LocalDateTime.of(2020, 1, 1, 0, 0, 0); LocalDateTime endTime = LocalDateTime.of(2020, 1, 2, 0, 0, 0); long totalIntervals = ChronoUnit.MINUTES.between(startTime, endTime); // Generate timestamps (not used but kept for completeness) List timestamps = new ArrayList<>(); for (int i = 0; i < totalIntervals; i++) { timestamps.add(startTime.plusMinutes(i)); } // Initialize variables Random random = new Random(0); // For reproducibility double level = 0; List logCounts = new ArrayList<>(); // Decide random change points where level will change int numChanges = random.nextInt(6) + 5; // Random number between 5 and 10 inclusive Set changeIndicesSet = new TreeSet<>(); changeIndicesSet.add(0); // Ensure the first index is included while (changeIndicesSet.size() < numChanges) { int idx = random.nextInt((int) totalIntervals - 1) + 1; // Random index between 1 and totalIntervals -1 changeIndicesSet.add(idx); } List changeIndices = new ArrayList<>(changeIndicesSet); // Generate levels at each change point List levels = new ArrayList<>(); for (int i = 0; i < changeIndices.size(); i++) { if (i == 0) { level = random.nextDouble() * 10; // Starting level between 0 and 10 } else { double increment = -2 + random.nextDouble() * 7; // Random increment between -2 and 5 level = Math.max(0, level + increment); } levels.add(level); } // Now generate logCounts for each timestamp with even smoother transitions int currentLevelIndex = 0; for (int idx = 0; idx < totalIntervals; idx++) { if (currentLevelIndex + 1 < changeIndices.size() && idx >= changeIndices.get(currentLevelIndex + 1)) { currentLevelIndex++; } level = levels.get(currentLevelIndex); double sineWave = Math.sin((idx % 300) * (Math.PI / 150)) * 0.05 * level; double noise = (-0.01 * level) + random.nextDouble() * (0.02 * level); // Noise between -0.01*level and // 0.01*level double count = Math.max(0, level + sineWave + noise); logCounts.add(count); } // Introduce controlled changes for anomaly detection testing for (int changeIdx : changeIndices) { if (changeIdx + 10 < totalIntervals) { logCounts.set(changeIdx + 5, logCounts.get(changeIdx + 5) * 1.05); // 5% increase logCounts.set(changeIdx + 10, logCounts.get(changeIdx + 10) * 1.10); // 10% increase } } // Output the generated logCounts System.out.println("Generated logCounts of size: " + logCounts.size()); return logCounts; } } ================================================ FILE: Java/parkservices/src/test/java/com/amazon/randomcutforest/parkservices/MissingValueTest.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.parkservices; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertTrue; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Locale; import java.util.Random; import java.util.stream.Stream; import org.junit.jupiter.api.extension.ExtensionContext; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; import org.junit.jupiter.params.provider.ArgumentsProvider; import org.junit.jupiter.params.provider.ArgumentsSource; import com.amazon.randomcutforest.config.ForestMode; import com.amazon.randomcutforest.config.ImputationMethod; import com.amazon.randomcutforest.config.Precision; import com.amazon.randomcutforest.config.TransformMethod; public class MissingValueTest { private static class EnumAndValueProvider implements ArgumentsProvider { @Override public Stream provideArguments(ExtensionContext context) { return Stream.of(ImputationMethod.PREVIOUS, ImputationMethod.ZERO, ImputationMethod.FIXED_VALUES) .flatMap(method -> Stream.of(4, 8, 16) // Example shingle sizes .map(shingleSize -> Arguments.of(method, shingleSize))); } } @ParameterizedTest @ArgumentsSource(EnumAndValueProvider.class) public void testConfidence(ImputationMethod method, int shingleSize) { // Create and populate a random cut forest int numberOfTrees = 50; int sampleSize = 256; Precision precision = Precision.FLOAT_32; int baseDimensions = 1; long count = 0; int dimensions = baseDimensions * shingleSize; ThresholdedRandomCutForest.Builder forestBuilder = new ThresholdedRandomCutForest.Builder<>().compact(true) .dimensions(dimensions).randomSeed(0).numberOfTrees(numberOfTrees).shingleSize(shingleSize) .sampleSize(sampleSize).precision(precision).anomalyRate(0.01).imputationMethod(method) .forestMode(ForestMode.STREAMING_IMPUTE).transformMethod(TransformMethod.NORMALIZE).autoAdjust(true); if (method == ImputationMethod.FIXED_VALUES) { // we cannot pass fillValues when the method is not fixed values. Otherwise, we // will impute // filled in values irregardless of imputation method forestBuilder.fillValues(new double[] { 3 }); } ThresholdedRandomCutForest forest = forestBuilder.build(); // Define the size and range int size = 400; double min = 200.0; double max = 240.0; // Generate the list of doubles List randomDoubles = generateUniformRandomDoubles(size, min, max); double lastConfidence = 0; for (double val : randomDoubles) { double[] point = new double[] { val }; long newStamp = 100 * count; if (count >= 300 && count < 325) { // drop observations AnomalyDescriptor result = forest.process(new double[] { Double.NaN }, newStamp, generateIntArray(point.length)); if (count > 300) { // confidence start decreasing after 1 missing point assertTrue(result.getDataConfidence() < lastConfidence, "count " + count); } lastConfidence = result.getDataConfidence(); float[] rcfPoint = result.getRCFPoint(); double scale = result.getScale()[0]; double shift = result.getShift()[0]; double[] actual = new double[] { (rcfPoint[shingleSize - 1] * scale) + shift }; if (method == ImputationMethod.ZERO) { assertEquals(0, actual[0], 0.001d); if (count == 300) { assertTrue(result.getAnomalyGrade() > 0); } } else if (method == ImputationMethod.FIXED_VALUES) { assertEquals(3.0d, actual[0], 0.001d); if (count == 300) { assertTrue(result.getAnomalyGrade() > 0); } } else if (method == ImputationMethod.PREVIOUS) { assertEquals(0, result.getAnomalyGrade(), 0.001d, "count: " + count + " actual: " + Arrays.toString(actual)); } } else { AnomalyDescriptor result = forest.process(point, newStamp); // after 325, we have a period of confidence decreasing. After that, confidence // starts increasing again. // We are not sure where the confidence will start increasing after decreasing. // So we start check the behavior after 325 + shingleSize. int backupPoint = 325 + shingleSize; if ((count > 100 && count < 300) || count >= backupPoint) { // The first 65+ observations gives 0 confidence. // Confidence start increasing after 1 observed point assertTrue(result.getDataConfidence() > lastConfidence, String.format(Locale.ROOT, "count: %d, confidence: %f, last confidence: %f", count, result.getDataConfidence(), lastConfidence)); } else if (count < 325 && count > 300) { assertTrue(result.getDataConfidence() < lastConfidence, String.format(Locale.ROOT, "count: %d, confidence: %f, last confidence: %f", count, result.getDataConfidence(), lastConfidence)); } lastConfidence = result.getDataConfidence(); } ++count; } } public static int[] generateIntArray(int size) { int[] intArray = new int[size]; for (int i = 0; i < size; i++) { intArray[i] = i; } return intArray; } public static List generateUniformRandomDoubles(int size, double min, double max) { List randomDoubles = new ArrayList<>(size); Random random = new Random(0); for (int i = 0; i < size; i++) { double randomValue = min + (max - min) * random.nextDouble(); randomDoubles.add(randomValue); } return randomDoubles; } } ================================================ FILE: Java/parkservices/src/test/java/com/amazon/randomcutforest/parkservices/PredictorCorrectorTest.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.parkservices; import static com.amazon.randomcutforest.CommonUtils.toFloatArray; import static com.amazon.randomcutforest.config.TransformMethod.NORMALIZE; import static com.amazon.randomcutforest.parkservices.PredictorCorrector.DEFAULT_SAMPLING_SUPPORT; import static org.junit.jupiter.api.Assertions.assertArrayEquals; import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertNull; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; import java.util.Arrays; import java.util.Random; import org.junit.jupiter.api.Test; import com.amazon.randomcutforest.config.ForestMode; import com.amazon.randomcutforest.parkservices.config.ScoringStrategy; import com.amazon.randomcutforest.parkservices.state.predictorcorrector.PredictorCorrectorMapper; import com.amazon.randomcutforest.parkservices.threshold.BasicThresholder; import com.amazon.randomcutforest.returntypes.DiVector; import com.amazon.randomcutforest.statistics.Deviation; public class PredictorCorrectorTest { @Test void AttributorTest() { int sampleSize = 256; int baseDimensions = 10; int shingleSize = 10; int dimensions = baseDimensions * shingleSize; ThresholdedRandomCutForest forest = ThresholdedRandomCutForest.builder().dimensions(dimensions).randomSeed(0L) .forestMode(ForestMode.STANDARD).shingleSize(shingleSize).anomalyRate(0.01).transformMethod(NORMALIZE) .build(); DiVector test = new DiVector(baseDimensions * shingleSize); assert (forest.predictorCorrector.getExpectedPoint(test, 0, baseDimensions, null, null) == null); assertThrows(IllegalArgumentException.class, () -> forest.predictorCorrector.setNumberOfAttributors(-1)); forest.predictorCorrector.setNumberOfAttributors(baseDimensions); assertThrows(NullPointerException.class, () -> forest.predictorCorrector.getExpectedPoint(test, 0, baseDimensions, null, null)); double[] array = new double[20]; Arrays.fill(array, 1.0); DiVector testTwo = new DiVector(array, array); assertThrows(NullPointerException.class, () -> forest.predictorCorrector.getExpectedPoint(test, 0, baseDimensions, null, null)); } @Test void configTest() { int sampleSize = 256; int baseDimensions = 2; int shingleSize = 10; int dimensions = baseDimensions * shingleSize; double[] testOne = new double[] { new Random().nextDouble(), new Random().nextDouble() }; double[] testTwo = new double[] { new Random().nextDouble(), new Random().nextDouble() }; double[] testThree = new double[] { new Random().nextDouble(), new Random().nextDouble() }; double[] testFour = new double[] { new Random().nextDouble(), new Random().nextDouble() }; ThresholdedRandomCutForest forest = ThresholdedRandomCutForest.builder().dimensions(dimensions).randomSeed(0L) .forestMode(ForestMode.STANDARD).shingleSize(shingleSize).anomalyRate(0.01) .scoringStrategy(ScoringStrategy.DISTANCE).transformMethod(NORMALIZE).randomSeed(1110).autoAdjust(true) .ignoreNearExpectedFromAbove(testOne).ignoreNearExpectedFromBelow(testTwo) .ignoreNearExpectedFromAboveByRatio(testThree).ignoreNearExpectedFromBelowByRatio(testFour).build(); PredictorCorrector predictorCorrector = forest.getPredictorCorrector(); assertEquals(predictorCorrector.getSamplingSupport(), DEFAULT_SAMPLING_SUPPORT); assertThrows(IllegalArgumentException.class, () -> predictorCorrector.setSamplingSupport(-1.0)); assertThrows(IllegalArgumentException.class, () -> predictorCorrector.setSamplingSupport(2.0)); assertDoesNotThrow(() -> predictorCorrector.setSamplingSupport(1.5 * DEFAULT_SAMPLING_SUPPORT)); double[] test = new double[1]; assertThrows(IllegalArgumentException.class, () -> predictorCorrector.setIgnoreNearExpected(test)); assertDoesNotThrow(() -> predictorCorrector.setIgnoreNearExpected(null)); assertArrayEquals(predictorCorrector.ignoreNearExpectedFromAbove, testOne, 1e-10); assertDoesNotThrow(() -> predictorCorrector.setIgnoreNearExpectedFromAbove(null)); assertArrayEquals(predictorCorrector.ignoreNearExpectedFromAbove, testOne, 1e-10); assertArrayEquals(predictorCorrector.ignoreNearExpectedFromBelow, testTwo, 1e-10); assertDoesNotThrow(() -> predictorCorrector.setIgnoreNearExpectedFromBelow(null)); assertArrayEquals(predictorCorrector.ignoreNearExpectedFromBelow, testTwo, 1e-10); assertArrayEquals(predictorCorrector.ignoreNearExpectedFromAboveByRatio, testThree, 1e-10); assertDoesNotThrow(() -> predictorCorrector.setIgnoreNearExpectedFromAboveByRatio(null)); assertArrayEquals(predictorCorrector.ignoreNearExpectedFromAboveByRatio, testThree, 1e-10); assertArrayEquals(predictorCorrector.ignoreNearExpectedFromBelowByRatio, testFour, 1e-10); assertDoesNotThrow(() -> predictorCorrector.setIgnoreNearExpectedFromBelowByRatio(null)); assertArrayEquals(predictorCorrector.ignoreNearExpectedFromBelowByRatio, testFour, 1e-10); assertNotNull(predictorCorrector.getDeviations()); assertEquals(predictorCorrector.lastStrategy, ScoringStrategy.DISTANCE); assertThrows(IllegalArgumentException.class, () -> predictorCorrector.getCachedAttribution(1, null, new DiVector[2], null)); PredictorCorrectorMapper mapper = new PredictorCorrectorMapper(); PredictorCorrector copy = mapper.toModel(mapper.toState(predictorCorrector)); assertArrayEquals(copy.ignoreNearExpectedFromAbove, testOne, 1e-10); assertArrayEquals(copy.ignoreNearExpectedFromBelow, testTwo, 1e-10); assertArrayEquals(copy.ignoreNearExpectedFromAboveByRatio, testThree, 1e-10); assertArrayEquals(copy.ignoreNearExpectedFromBelowByRatio, testFour, 1e-10); assertNotNull(copy.getDeviations()); assertEquals(copy.lastStrategy, ScoringStrategy.DISTANCE); copy.deviationsActual = new Deviation[1]; // changing the state IllegalArgumentException exception = assertThrows(IllegalArgumentException.class, () -> copy.getDeviations()); assertEquals("incorrect state", exception.getMessage()); copy.deviationsExpected = new Deviation[1]; exception = assertThrows(IllegalArgumentException.class, () -> copy.getDeviations()); assertEquals("length should be base dimension", exception.getMessage()); double[] another = new double[4 * baseDimensions]; assertDoesNotThrow(() -> predictorCorrector.setIgnoreNearExpected(another)); assertArrayEquals(predictorCorrector.ignoreNearExpectedFromAbove, new double[2]); assertArrayEquals(predictorCorrector.ignoreNearExpectedFromBelow, new double[2]); assertArrayEquals(predictorCorrector.ignoreNearExpectedFromAboveByRatio, new double[2]); assertArrayEquals(predictorCorrector.ignoreNearExpectedFromBelowByRatio, new double[2]); another[0] = -1; assertThrows(IllegalArgumentException.class, () -> predictorCorrector.setIgnoreNearExpected(another)); forest.setIgnoreNearExpectedFromAbove(testOne); forest.setIgnoreNearExpectedFromBelow(testTwo); forest.setIgnoreNearExpectedFromAboveByRatio(testThree); forest.setIgnoreNearExpectedFromBelowByRatio(testFour); assertArrayEquals(predictorCorrector.ignoreNearExpectedFromAbove, testOne, 1e-10); assertArrayEquals(predictorCorrector.ignoreNearExpectedFromBelow, testTwo, 1e-10); assertArrayEquals(predictorCorrector.ignoreNearExpectedFromAboveByRatio, testThree, 1e-10); assertArrayEquals(predictorCorrector.ignoreNearExpectedFromBelowByRatio, testFour, 1e-10); Random testRandom = new Random(1110L); assertEquals(predictorCorrector.getRandomSeed(), 1110L); double nextDouble = predictorCorrector.nextDouble(); assertEquals(predictorCorrector.getRandomSeed(), testRandom.nextLong()); assertEquals(nextDouble, testRandom.nextDouble(), 1e-10); } @Test public void mapperTest() { assertThrows(IllegalArgumentException.class, () -> new PredictorCorrector(new BasicThresholder[0], null, 1, 0)); assertThrows(NullPointerException.class, () -> new PredictorCorrector(new BasicThresholder[1], null, 1, 0)); assertThrows(IllegalArgumentException.class, () -> new PredictorCorrector(new BasicThresholder[] { new BasicThresholder(0) }, new Deviation[1], 1, 0)); } @Test public void expectedValueTest() { ThresholdedRandomCutForest forest = ThresholdedRandomCutForest.builder().dimensions(20).randomSeed(0L) .forestMode(ForestMode.STANDARD).shingleSize(1).anomalyRate(0.01) .scoringStrategy(ScoringStrategy.DISTANCE).transformMethod(NORMALIZE).build(); PredictorCorrector predictorCorrector = forest.getPredictorCorrector(); double[] vector = new double[20]; Arrays.fill(vector, 1.0); DiVector diVec = new DiVector(vector, vector); assertNull(predictorCorrector.getExpectedPoint(diVec, 0, 20, null, null)); assertTrue(predictorCorrector.trigger(diVec, 1, 20, null, null, 1.0)); assertTrue(predictorCorrector.trigger(diVec, 21, 20, null, null, 1.0)); assertTrue(predictorCorrector.trigger(diVec, 21, 20, diVec, null, 1.0)); assertEquals(1, predictorCorrector.centeredTransformPass(new AnomalyDescriptor(null, 0), toFloatArray(vector))); Arrays.fill(vector, 0); assertEquals(0, predictorCorrector.centeredTransformPass(new AnomalyDescriptor(null, 0), toFloatArray(vector))); } @Test public void runLengthTest() { ThresholdedRandomCutForest forest = ThresholdedRandomCutForest.builder().dimensions(4).randomSeed(0L) .forestMode(ForestMode.STANDARD).shingleSize(4).anomalyRate(0.01).autoAdjust(false) .scoringStrategy(ScoringStrategy.MULTI_MODE).transformMethod(NORMALIZE).build(); for (int i = 0; i < 100; i++) { forest.process(new double[] { 10 }, 0); } for (int i = 0; i < 100; i++) { forest.process(new double[] { 20 }, 0); } double[] scores = forest.getPredictorCorrector().getLastScore(); forest.predictorCorrector.setLastScore(null); assertArrayEquals(forest.predictorCorrector.getLastScore(), scores, 1e-10); } } ================================================ FILE: Java/parkservices/src/test/java/com/amazon/randomcutforest/parkservices/RCFCasterTest.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.parkservices; import static org.junit.jupiter.api.Assertions.assertArrayEquals; import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotEquals; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; import java.util.List; import java.util.Random; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.EnumSource; import org.junit.jupiter.params.provider.ValueSource; import com.amazon.randomcutforest.config.ForestMode; import com.amazon.randomcutforest.config.Precision; import com.amazon.randomcutforest.config.TransformMethod; import com.amazon.randomcutforest.parkservices.config.Calibration; import com.amazon.randomcutforest.parkservices.config.ScoringStrategy; import com.amazon.randomcutforest.parkservices.state.RCFCasterMapper; import com.amazon.randomcutforest.returntypes.TimedRangeVector; import com.amazon.randomcutforest.testutils.MultiDimDataWithKey; import com.amazon.randomcutforest.testutils.ShingledMultiDimDataWithKeys; public class RCFCasterTest { @Test public void constructorTest() { RCFCaster.Builder builder = new RCFCaster.Builder(); assertThrows(IllegalArgumentException.class, builder::build); builder.forecastHorizon(-1); assertThrows(IllegalArgumentException.class, builder::build); builder.forecastHorizon(2).shingleSize(0); assertThrows(IllegalArgumentException.class, builder::build); builder.shingleSize(1).dimensions(1).scoreDifferencing(0); assertDoesNotThrow(builder::build); // unlikely to succeed; independent random number generator assertNotEquals(builder.getRandom().nextInt(), builder.getRandom().nextInt()); builder.randomSeed(10); assertEquals(builder.getRandom().nextInt(), builder.getRandom().nextInt()); builder.internalShinglingEnabled(false); assertThrows(IllegalArgumentException.class, builder::build); builder.internalShinglingEnabled(true); assertDoesNotThrow(builder::build); builder.forestMode(ForestMode.STREAMING_IMPUTE); assertThrows(IllegalArgumentException.class, builder::build); builder.forestMode(ForestMode.TIME_AUGMENTED); assertThrows(IllegalArgumentException.class, builder::build); builder.forestMode(ForestMode.STANDARD); builder.upperLimit(new float[] {}); assertThrows(IllegalArgumentException.class, builder::build); builder.upperLimit(new float[] { 1.0f }); builder.lowerLimit(new float[] {}); assertThrows(IllegalArgumentException.class, builder::build); builder.lowerLimit(new float[] { 2.0f }); assertThrows(IllegalArgumentException.class, builder::build); builder.lowerLimit(new float[] { 0.0f }); builder.parallelExecutionEnabled(true).threadPoolSize(2).zFactor(2.0); assertDoesNotThrow(builder::build); builder.startNormalization(-1); assertThrows(IllegalArgumentException.class, builder::build); builder.startNormalization(200).outputAfter(1); assertThrows(IllegalArgumentException.class, builder::build); } @Test public void configTest() { RCFCaster.Builder builder = new RCFCaster.Builder().dimensions(1).shingleSize(1).forecastHorizon(1); RCFCaster caster = builder.build(); caster.setLowerLimit(null); caster.setUpperLimit(null); assertThrows(IllegalArgumentException.class, () -> caster.setUpperLimit(new float[] { 0, 0 })); assertThrows(IllegalArgumentException.class, () -> caster.setLowerLimit(new float[] { 0, 0 })); assertDoesNotThrow(() -> caster.setUpperLimit(new float[] { 0 })); assertThrows(IllegalArgumentException.class, () -> caster.setLowerLimit(new float[] { 1 })); assertThrows(IllegalArgumentException.class, () -> caster.processSequentially(new double[][] { new double[0] })); assertThrows(IllegalArgumentException.class, () -> caster.process(new double[1], 0L, new int[1])); } @ParameterizedTest @EnumSource(Calibration.class) void testRCFCast(Calibration calibration) { int numberOfTrees = 50; int sampleSize = 256; Precision precision = Precision.FLOAT_32; int dataSize = 2 * sampleSize; // change this to try different number of attributes, // this parameter is not expected to be larger than 5 for this example int baseDimensions = 1; int forecastHorizon = 5; // speeding up int shingleSize = 10; int outputAfter = 32; int errorHorizon = 256; long seed = new Random().nextLong(); System.out.println("seed = " + seed); // change the last argument seed for a different run MultiDimDataWithKey dataWithKeys = ShingledMultiDimDataWithKeys.getMultiDimData(dataSize + shingleSize - 1, 50, 50, 5, seed, baseDimensions, false); // force introduce anomalies double[][] data = new double[dataSize + shingleSize][]; for (int i = 0; i < dataWithKeys.data.length; i++) { data[i] = dataWithKeys.data[i]; } for (int i = dataSize; i < dataSize + shingleSize; i++) { // all zero data[i] = new double[baseDimensions]; } int dimensions = baseDimensions * shingleSize; TransformMethod transformMethod = TransformMethod.NORMALIZE; RCFCaster caster = RCFCaster.builder().dimensions(dimensions).randomSeed(seed + 1).numberOfTrees(numberOfTrees) .shingleSize(shingleSize).sampleSize(sampleSize).internalShinglingEnabled(true).anomalyRate(0.01) .forestMode(ForestMode.STANDARD).transformMethod(transformMethod).outputAfter(outputAfter) .forecastHorizon(forecastHorizon).centerOfMassEnabled(true).storeSequenceIndexesEnabled(true) // neither // is // relevant .calibration(calibration).errorHorizon(errorHorizon).initialAcceptFraction(0.125).build(); RCFCaster shadow = RCFCaster.builder().dimensions(dimensions).randomSeed(seed + 1).numberOfTrees(numberOfTrees) .shingleSize(shingleSize).sampleSize(sampleSize).internalShinglingEnabled(true).anomalyRate(0.01) .forestMode(ForestMode.STANDARD).transformMethod(transformMethod).outputAfter(outputAfter) .forecastHorizon(forecastHorizon).calibration(calibration).errorHorizon(errorHorizon) .initialAcceptFraction(0.125).boundingBoxCacheFraction(0).build(); RCFCaster secondShadow = RCFCaster.builder().dimensions(dimensions).randomSeed(seed + 1) .numberOfTrees(numberOfTrees).shingleSize(shingleSize).sampleSize(sampleSize) .internalShinglingEnabled(true).anomalyRate(0.01).forestMode(ForestMode.STANDARD) .transformMethod(transformMethod).outputAfter(outputAfter).forecastHorizon(forecastHorizon) .calibration(calibration).errorHorizon(errorHorizon).initialAcceptFraction(0.125) .boundingBoxCacheFraction(0).build(); RCFCaster thirdShadow = RCFCaster.builder().dimensions(dimensions).randomSeed(seed + 1) .numberOfTrees(numberOfTrees).shingleSize(shingleSize).sampleSize(sampleSize) .internalShinglingEnabled(true).anomalyRate(0.01).forestMode(ForestMode.STANDARD) .transformMethod(transformMethod).outputAfter(outputAfter).forecastHorizon(forecastHorizon) .calibration(calibration).errorHorizon(errorHorizon).initialAcceptFraction(0.125) .boundingBoxCacheFraction(1.0).build(); // testing scoring strategies caster.setScoringStrategy(ScoringStrategy.MULTI_MODE); shadow.setScoringStrategy(ScoringStrategy.MULTI_MODE); secondShadow.setScoringStrategy(ScoringStrategy.MULTI_MODE); thirdShadow.setScoringStrategy(ScoringStrategy.MULTI_MODE); // ensuring/testing that the parameters are the same; otherwise the // grades/scores cannot be the same caster.setLowerThreshold(1.1); shadow.setLowerThreshold(1.1); secondShadow.setLowerThreshold(1.1); thirdShadow.setLowerThreshold(1.1); caster.setInitialThreshold(2.0); shadow.setInitialThreshold(2.0); secondShadow.setInitialThreshold(2.0); thirdShadow.setInitialThreshold(2.0); caster.setScoreDifferencing(0.4); shadow.setScoreDifferencing(0.4); secondShadow.setScoreDifferencing(0.4); thirdShadow.setScoreDifferencing(0.4); assert (caster.errorHandler.getErrorHorizon() == errorHorizon); assert (caster.errorHorizon == errorHorizon); for (int j = 0; j < data.length; j++) { ForecastDescriptor result = caster.process(data[j], 0L); ForecastDescriptor shadowResult = shadow.process(data[j], 0L); assertEquals(result.getRCFScore(), shadowResult.getRCFScore(), 1e-6); int sequenceIndex = caster.errorHandler.getSequenceIndex(); assertEquals(shadow.errorHandler.getSequenceIndex(), sequenceIndex); if (caster.forest.isOutputReady()) { float[] meanArray = caster.errorHandler.getErrorMean(); float[] intervalPrecision = shadow.errorHandler.getIntervalPrecision(); for (float y : intervalPrecision) { assertTrue(0 <= y && y <= 1.0); } assertArrayEquals(intervalPrecision, result.getIntervalPrecision(), 1e-6f); } } // 0 length arrays do not change state secondShadow.processSequentially(new double[0][]); List firstList = secondShadow.processSequentially(data, x -> true); List thirdList = thirdShadow.processSequentially(data, x -> true); assertEquals(firstList.size(), data.length); assertEquals(thirdList.size(), data.length); assertEquals(firstList.get(data.length - 1).getInternalTimeStamp(), thirdList.get(data.length - 1).getInternalTimeStamp()); // null does not change state thirdShadow.processSequentially(null); if (calibration != Calibration.NONE) { // calibration fails assertThrows(IllegalArgumentException.class, () -> caster.extrapolate(forecastHorizon - 1)); assertThrows(IllegalArgumentException.class, () -> caster.extrapolate(forecastHorizon + 1)); } TimedRangeVector forecast1 = caster.extrapolate(forecastHorizon); TimedRangeVector forecast2 = shadow.extrapolate(forecastHorizon); TimedRangeVector forecast3 = secondShadow.extrapolate(forecastHorizon); TimedRangeVector forecast4 = thirdShadow.extrapolate(forecastHorizon); assertArrayEquals(forecast1.rangeVector.values, forecast2.rangeVector.values, 1e-6f); assertArrayEquals(forecast3.rangeVector.values, forecast4.rangeVector.values, 1e-6f); // the order of floating point operations now vary for (int i = 0; i < forecast1.rangeVector.values.length; i++) { assertTrue(Math.abs(forecast1.rangeVector.values[i] - forecast3.rangeVector.values[i]) < 1e-4 * (1 + Math.abs(forecast1.rangeVector.values[i]))); } } @ParameterizedTest @EnumSource(Calibration.class) void testRCFCastThresholdedRCF(Calibration calibration) { int numberOfTrees = 50; int sampleSize = 256; Precision precision = Precision.FLOAT_32; int dataSize = 4 * sampleSize; // change this to try different number of attributes, // this parameter is not expected to be larger than 5 for this example int baseDimensions = 1; int forecastHorizon = 15; int shingleSize = 10; int outputAfter = 32; int errorHorizon = 256; long seed = new Random().nextLong(); System.out.println("seed = " + seed); // change the last argument seed for a different run MultiDimDataWithKey dataWithKeys = ShingledMultiDimDataWithKeys.getMultiDimData(dataSize + shingleSize - 1, 50, 50, 5, seed, baseDimensions, false); int dimensions = baseDimensions * shingleSize; TransformMethod transformMethod = TransformMethod.NORMALIZE; RCFCaster caster = RCFCaster.builder().compact(true).dimensions(dimensions).randomSeed(seed + 1) .numberOfTrees(numberOfTrees).shingleSize(shingleSize).sampleSize(sampleSize) .internalShinglingEnabled(true).precision(precision).anomalyRate(0.01).forestMode(ForestMode.STANDARD) .transformMethod(transformMethod).outputAfter(outputAfter).forecastHorizon(forecastHorizon) .calibration(calibration).errorHorizon(errorHorizon).initialAcceptFraction(0.125).build(); ThresholdedRandomCutForest shadow = ThresholdedRandomCutForest.builder().compact(true).dimensions(dimensions) .randomSeed(seed + 1).numberOfTrees(numberOfTrees).shingleSize(shingleSize).sampleSize(sampleSize) .internalShinglingEnabled(true).precision(precision).anomalyRate(0.01).forestMode(ForestMode.STANDARD) .transformMethod(transformMethod).outputAfter(outputAfter).initialAcceptFraction(0.125).build(); // ensuring that the parameters are the same; otherwise the grades/scores cannot // be the same // weighTime has to be 0 caster.setLowerThreshold(1.1); shadow.setLowerThreshold(1.1); assertTrue(caster.errorHandler.getErrorHorizon() == errorHorizon); assertTrue(caster.errorHorizon == errorHorizon); for (int j = 0; j < dataWithKeys.data.length; j++) { ForecastDescriptor result = caster.process(dataWithKeys.data[j], 0L); AnomalyDescriptor shadowResult = shadow.process(dataWithKeys.data[j], 0L); assertEquals(result.getRCFScore(), shadowResult.getRCFScore(), 1e-6f); TimedRangeVector timedShadowForecast = shadow.extrapolate(forecastHorizon); assertArrayEquals(timedShadowForecast.timeStamps, result.getTimedForecast().timeStamps); assertArrayEquals(timedShadowForecast.upperTimeStamps, result.getTimedForecast().upperTimeStamps); assertArrayEquals(timedShadowForecast.lowerTimeStamps, result.getTimedForecast().lowerTimeStamps); // first check idempotence -- forecasts are state dependent only // for ThresholdedRCF TimedRangeVector newShadow = shadow.extrapolate(forecastHorizon); assertArrayEquals(newShadow.rangeVector.values, timedShadowForecast.rangeVector.values, 1e-6f); assertArrayEquals(newShadow.rangeVector.upper, timedShadowForecast.rangeVector.upper, 1e-6f); assertArrayEquals(newShadow.rangeVector.lower, timedShadowForecast.rangeVector.lower, 1e-6f); assertArrayEquals(newShadow.timeStamps, timedShadowForecast.timeStamps); assertArrayEquals(newShadow.upperTimeStamps, timedShadowForecast.upperTimeStamps); assertArrayEquals(newShadow.lowerTimeStamps, timedShadowForecast.lowerTimeStamps); // extrapolate is idempotent for RCF casters TimedRangeVector newVector = caster.extrapolate(forecastHorizon); assertArrayEquals(newVector.rangeVector.values, result.getTimedForecast().rangeVector.values, 1e-6f); assertArrayEquals(newVector.rangeVector.upper, result.getTimedForecast().rangeVector.upper, 1e-6f); assertArrayEquals(newVector.rangeVector.lower, result.getTimedForecast().rangeVector.lower, 1e-6f); assertArrayEquals(newVector.timeStamps, result.getTimedForecast().timeStamps); assertArrayEquals(newVector.upperTimeStamps, result.getTimedForecast().upperTimeStamps); assertArrayEquals(newVector.lowerTimeStamps, result.getTimedForecast().lowerTimeStamps); // only difference between RCFCaster and ThresholdedRCF is calibration caster.calibrate(dataWithKeys.data[j], calibration, timedShadowForecast.rangeVector); assertArrayEquals(timedShadowForecast.rangeVector.values, result.getTimedForecast().rangeVector.values, 1e-6f); assertArrayEquals(timedShadowForecast.rangeVector.upper, result.getTimedForecast().rangeVector.upper, 1e-6f); assertArrayEquals(timedShadowForecast.rangeVector.lower, result.getTimedForecast().rangeVector.lower, 1e-6f); } } @ParameterizedTest @ValueSource(booleans = { true, false }) void testRCFCallibration(boolean useRCF) { int numberOfTrees = 50; int sampleSize = 256; Precision precision = Precision.FLOAT_32; int dataSize = 4 * sampleSize; // change this to try different number of attributes, // this parameter is not expected to be larger than 5 for this example int baseDimensions = 1; int forecastHorizon = 15; int shingleSize = 10; int outputAfter = 32; int errorHorizon = 256; long seed = new Random().nextLong(); System.out.println("seed = " + seed); // change the last argument seed for a different run MultiDimDataWithKey dataWithKeys = ShingledMultiDimDataWithKeys.getMultiDimData(dataSize + shingleSize - 1, 50, 50, 5, seed, baseDimensions, false); int dimensions = baseDimensions * shingleSize; TransformMethod transformMethod = TransformMethod.NORMALIZE; RCFCaster caster = RCFCaster.builder().dimensions(dimensions).randomSeed(seed + 1).numberOfTrees(numberOfTrees) .shingleSize(shingleSize).sampleSize(sampleSize).internalShinglingEnabled(true).anomalyRate(0.01) .forestMode(ForestMode.STANDARD).transformMethod(transformMethod).outputAfter(outputAfter) .forecastHorizon(forecastHorizon).useRCFCallibration(useRCF).calibration(Calibration.SIMPLE) .errorHorizon(errorHorizon).initialAcceptFraction(0.125).build(); ThresholdedRandomCutForest shadow = ThresholdedRandomCutForest.builder().dimensions(dimensions) .randomSeed(seed + 1).numberOfTrees(numberOfTrees).shingleSize(shingleSize).sampleSize(sampleSize) .internalShinglingEnabled(true).anomalyRate(0.01).forestMode(ForestMode.STANDARD) .transformMethod(transformMethod).outputAfter(outputAfter).initialAcceptFraction(0.125).build(); // ensuring that the parameters are the same; otherwise the grades/scores cannot // be the same // weighTime has to be 0 caster.setLowerThreshold(1.1); shadow.setLowerThreshold(1.1); RCFCasterMapper mapper = new RCFCasterMapper(); RCFCaster secondShadow = mapper.toModel(mapper.toState(caster)); assertTrue(secondShadow.errorHandler.getErrorHorizon() == errorHorizon); assertTrue(secondShadow.errorHorizon == errorHorizon); for (int j = 0; j < dataWithKeys.data.length; j++) { ForecastDescriptor result = caster.process(dataWithKeys.data[j], 0L); AnomalyDescriptor shadowResult = shadow.process(dataWithKeys.data[j], 0L); assertEquals(result.getRCFScore(), shadowResult.getRCFScore(), 1e-6f); TimedRangeVector timedShadowForecast = shadow.extrapolate(forecastHorizon); assertArrayEquals(timedShadowForecast.timeStamps, result.getTimedForecast().timeStamps); assertArrayEquals(timedShadowForecast.upperTimeStamps, result.getTimedForecast().upperTimeStamps); assertArrayEquals(timedShadowForecast.lowerTimeStamps, result.getTimedForecast().lowerTimeStamps); // first check idempotence -- forecasts are state dependent only // for ThresholdedRCF TimedRangeVector newShadow = shadow.extrapolate(forecastHorizon); assertArrayEquals(newShadow.rangeVector.values, timedShadowForecast.rangeVector.values, 1e-6f); assertArrayEquals(newShadow.rangeVector.upper, timedShadowForecast.rangeVector.upper, 1e-6f); assertArrayEquals(newShadow.rangeVector.lower, timedShadowForecast.rangeVector.lower, 1e-6f); assertArrayEquals(newShadow.timeStamps, timedShadowForecast.timeStamps); assertArrayEquals(newShadow.upperTimeStamps, timedShadowForecast.upperTimeStamps); assertArrayEquals(newShadow.lowerTimeStamps, timedShadowForecast.lowerTimeStamps); // extrapolate is idempotent for RCF casters TimedRangeVector newVector = caster.extrapolate(forecastHorizon); assertArrayEquals(newVector.rangeVector.values, result.getTimedForecast().rangeVector.values, 1e-6f); assertArrayEquals(newVector.rangeVector.upper, result.getTimedForecast().rangeVector.upper, 1e-6f); assertArrayEquals(newVector.rangeVector.lower, result.getTimedForecast().rangeVector.lower, 1e-6f); assertArrayEquals(newVector.timeStamps, result.getTimedForecast().timeStamps); assertArrayEquals(newVector.upperTimeStamps, result.getTimedForecast().upperTimeStamps); assertArrayEquals(newVector.lowerTimeStamps, result.getTimedForecast().lowerTimeStamps); // only difference between RCFCaster and ThresholdedRCF is calibration caster.calibrate(dataWithKeys.data[j], Calibration.SIMPLE, timedShadowForecast.rangeVector); assertArrayEquals(timedShadowForecast.rangeVector.values, result.getTimedForecast().rangeVector.values, 1e-6f); assertArrayEquals(timedShadowForecast.rangeVector.upper, result.getTimedForecast().rangeVector.upper, 1e-6f); assertArrayEquals(timedShadowForecast.rangeVector.lower, result.getTimedForecast().rangeVector.lower, 1e-6f); } } } ================================================ FILE: Java/parkservices/src/test/java/com/amazon/randomcutforest/parkservices/SequentialAnalysisTest.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.parkservices; import static com.amazon.randomcutforest.RandomCutForest.DEFAULT_SAMPLE_SIZE; import static java.lang.Math.min; import static org.junit.jupiter.api.Assertions.assertArrayEquals; import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; import java.util.List; import java.util.Random; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.EnumSource; import com.amazon.randomcutforest.config.TransformMethod; import com.amazon.randomcutforest.parkservices.config.Calibration; import com.amazon.randomcutforest.parkservices.returntypes.AnalysisDescriptor; import com.amazon.randomcutforest.returntypes.RangeVector; import com.amazon.randomcutforest.testutils.MultiDimDataWithKey; import com.amazon.randomcutforest.testutils.ShingledMultiDimDataWithKeys; public class SequentialAnalysisTest { protected SequentialAnalysis test = new SequentialAnalysis(); @Test public void basicTest() { int sampleSize = 256; long seed = new Random().nextLong(); System.out.println(" seed " + seed); Random rng = new Random(seed); int numTrials = 1; // just once since testing exact equality int length = 40 * sampleSize; int numberOfTrees = 30 + rng.nextInt(20); int outputAfter = 1 + rng.nextInt(50); int shingleSize = 1 + rng.nextInt(15); int baseDimensions = 1 + rng.nextInt(5); int dimensions = baseDimensions * shingleSize; long forestSeed = rng.nextLong(); double timeDecay = 0.1 / sampleSize; double transformDecay = 1.0 / sampleSize; double fraction = 1.0 * outputAfter / sampleSize; ThresholdedRandomCutForest first = new ThresholdedRandomCutForest.Builder<>().dimensions(dimensions) .numberOfTrees(numberOfTrees).randomSeed(forestSeed).outputAfter(outputAfter).timeDecay(timeDecay) .transformDecay(transformDecay).internalShinglingEnabled(true).initialAcceptFraction(fraction) .shingleSize(shingleSize).build(); ThresholdedRandomCutForest second = new ThresholdedRandomCutForest.Builder<>().dimensions(dimensions) .numberOfTrees(numberOfTrees).randomSeed(forestSeed).outputAfter(outputAfter).timeDecay(timeDecay) .transformDecay(transformDecay).boundingBoxCacheFraction(0).internalShinglingEnabled(true) .initialAcceptFraction(fraction).shingleSize(shingleSize).build(); assertEquals(first.processSequentially(null), second.processSequentially(null)); assertEquals(first.processSequentially(new double[0][]), second.processSequentially(new double[0][])); MultiDimDataWithKey dataWithKeys = ShingledMultiDimDataWithKeys.getMultiDimData(length, 50, 100, 5, rng.nextLong(), baseDimensions); List a = first.processSequentially(dataWithKeys.data); List b = second.processSequentially(dataWithKeys.data); assertEquals(a.size(), b.size()); assertDoesNotThrow( () -> test.forecastWithAnomalies(dataWithKeys.data, 2, 256, 0.001, TransformMethod.NONE, 10, 10, 0)); dataWithKeys.data[0] = new double[0]; // changing length assertThrows(IllegalArgumentException.class, () -> first.processSequentially(dataWithKeys.data)); assertThrows(IllegalArgumentException.class, () -> test.detectAnomalies(null, 1, 256, 0.001, TransformMethod.NONE, 0L)); assertThrows(IllegalArgumentException.class, () -> test.forecastWithAnomalies(null, 1, 256, 0.001, TransformMethod.NONE, 10, 10, 0)); } @ParameterizedTest @EnumSource(TransformMethod.class) public void AnomalyTest(TransformMethod method) { int sampleSize = 256; long seed = new Random().nextLong(); System.out.println(" seed " + seed); Random rng = new Random(seed); int numTrials = 1; // just once since testing exact equality int length = 40 * sampleSize; for (int i = 0; i < numTrials; i++) { int numberOfTrees = 30 + rng.nextInt(20); int outputAfter = 1 + rng.nextInt(50); int shingleSize = 1 + rng.nextInt(15); int baseDimensions = 1 + rng.nextInt(5); int dimensions = baseDimensions * shingleSize; long forestSeed = rng.nextLong(); double timeDecay = 0.1 / sampleSize; double transformDecay = 1.0 / sampleSize; double fraction = 1.0 * outputAfter / sampleSize; ThresholdedRandomCutForest first = new ThresholdedRandomCutForest.Builder<>().compact(true) .dimensions(dimensions).numberOfTrees(numberOfTrees).randomSeed(forestSeed).outputAfter(outputAfter) .transformMethod(method).timeDecay(timeDecay).transformDecay(transformDecay) .internalShinglingEnabled(true).initialAcceptFraction(fraction).shingleSize(shingleSize).build(); MultiDimDataWithKey dataWithKeys = ShingledMultiDimDataWithKeys.getMultiDimData(length, 50, 100, 5, rng.nextLong(), baseDimensions); List result = SequentialAnalysis.detectAnomalies(dataWithKeys.data, shingleSize, sampleSize, numberOfTrees, timeDecay, outputAfter, method, transformDecay, forestSeed); int count = 0; for (double[] point : dataWithKeys.data) { AnomalyDescriptor firstResult = first.process(point, 0L); if (firstResult.getAnomalyGrade() > 0) { assertEquals(firstResult.getAnomalyGrade(), result.get(count).getAnomalyGrade(), 1e-3); assertEquals(firstResult.getInternalTimeStamp(), result.get(count).getInternalTimeStamp()); ++count; } } assertTrue(count == result.size()); } } @ParameterizedTest @EnumSource(TransformMethod.class) public void AnomalyTest2(TransformMethod method) { int sampleSize = 256; long seed = new Random().nextLong(); System.out.println(" seed " + seed); Random rng = new Random(seed); int numTrials = 1; // just once since testing exact equality int length = 40 * sampleSize; for (int i = 0; i < numTrials; i++) { int outputAfter = sampleSize / 4; int shingleSize = 1 + rng.nextInt(15); int baseDimensions = 1 + rng.nextInt(5); int dimensions = baseDimensions * shingleSize; long forestSeed = rng.nextLong(); double timeDecay = 0.1 / sampleSize; double fraction = 1.0 * outputAfter / sampleSize; ThresholdedRandomCutForest first = new ThresholdedRandomCutForest.Builder<>().compact(true) .dimensions(dimensions).randomSeed(forestSeed).transformMethod(method).timeDecay(timeDecay) .internalShinglingEnabled(true).transformDecay(timeDecay).initialAcceptFraction(fraction) .shingleSize(shingleSize).build(); MultiDimDataWithKey dataWithKeys = ShingledMultiDimDataWithKeys.getMultiDimData(length, 50, 100, 5, rng.nextLong(), baseDimensions); List result = SequentialAnalysis.detectAnomalies(dataWithKeys.data, shingleSize, sampleSize, timeDecay, method, forestSeed); int count = 0; for (double[] point : dataWithKeys.data) { AnomalyDescriptor firstResult = first.process(point, 0L); if (firstResult.getAnomalyGrade() > 0) { assertEquals(firstResult.getAnomalyGrade(), result.get(count).getAnomalyGrade(), 1e-3); assertEquals(firstResult.getInternalTimeStamp(), result.get(count).getInternalTimeStamp()); assertEquals(firstResult.getRCFScore(), result.get(count).getRCFScore(), 1e-3); ++count; } } assertTrue(count == result.size()); } } @ParameterizedTest @EnumSource(TransformMethod.class) public void AnomalyTest3(TransformMethod method) { int sampleSize = DEFAULT_SAMPLE_SIZE; long seed = new Random().nextLong(); System.out.println(" seed " + seed); Random rng = new Random(seed); int numTrials = 1; // just once since testing exact equality int length = 40 * sampleSize; for (int i = 0; i < numTrials; i++) { int outputAfter = sampleSize / 4; int shingleSize = 1 + rng.nextInt(15); int baseDimensions = 1 + rng.nextInt(5); int dimensions = baseDimensions * shingleSize; long forestSeed = rng.nextLong(); double timeDecay = 0.1 / sampleSize; double transformDecay = (1.0 + rng.nextDouble()) / sampleSize; double fraction = 1.0 * outputAfter / sampleSize; ThresholdedRandomCutForest first = new ThresholdedRandomCutForest.Builder<>().compact(true) .dimensions(dimensions).randomSeed(forestSeed).transformMethod(method).timeDecay(timeDecay) .internalShinglingEnabled(true).transformDecay(transformDecay).initialAcceptFraction(fraction) .shingleSize(shingleSize).build(); MultiDimDataWithKey dataWithKeys = ShingledMultiDimDataWithKeys.getMultiDimData(length, 50, 100, 5, rng.nextLong(), baseDimensions); List result = SequentialAnalysis.detectAnomalies(dataWithKeys.data, shingleSize, timeDecay, method, transformDecay, forestSeed); int count = 0; for (double[] point : dataWithKeys.data) { AnomalyDescriptor firstResult = first.process(point, 0L); if (firstResult.getAnomalyGrade() > 0) { assertEquals(firstResult.getAnomalyGrade(), result.get(count).getAnomalyGrade(), 1e-3); assertEquals(firstResult.getInternalTimeStamp(), result.get(count).getInternalTimeStamp()); assertEquals(firstResult.getRCFScore(), result.get(count).getRCFScore(), 1e-3); ++count; } } assertTrue(count == result.size()); } } @ParameterizedTest @EnumSource(Calibration.class) public void ForecasterTest(Calibration calibration) { int sampleSize = 256; long seed = new Random().nextLong(); System.out.println(" seed " + seed); Random rng = new Random(seed); int numTrials = 1; // just once since testing exact equality int length = 4 * sampleSize; for (int i = 0; i < numTrials; i++) { int numberOfTrees = 50; int outputAfter = 1 + rng.nextInt(50); int shingleSize = 2 + rng.nextInt(15); int forecastHorizon = min(4 * shingleSize, 10); int errorHorizon = 100; int baseDimensions = 1 + rng.nextInt(5); int dimensions = baseDimensions * shingleSize; long forestSeed = rng.nextLong(); double timeDecay = 0.1 / sampleSize; double transformDecay = 1.0 / sampleSize; double fraction = 1.0 * outputAfter / sampleSize; RCFCaster first = new RCFCaster.Builder().dimensions(dimensions).numberOfTrees(numberOfTrees) .randomSeed(forestSeed).outputAfter(outputAfter).transformMethod(TransformMethod.NORMALIZE) .timeDecay(timeDecay).transformDecay(transformDecay).internalShinglingEnabled(true) .forecastHorizon(forecastHorizon).errorHorizon(errorHorizon).calibration(calibration) .initialAcceptFraction(fraction).shingleSize(shingleSize).build(); MultiDimDataWithKey dataWithKeys = ShingledMultiDimDataWithKeys.getMultiDimData(length, 50, 100, 5, rng.nextLong(), baseDimensions); AnalysisDescriptor descriptor = SequentialAnalysis.forecastWithAnomalies(dataWithKeys.data, shingleSize, sampleSize, timeDecay, outputAfter, TransformMethod.NORMALIZE, transformDecay, forecastHorizon, errorHorizon, 0.1, calibration, forestSeed); List result = descriptor.getAnomalies(); int count = 0; ForecastDescriptor last = null; for (double[] point : dataWithKeys.data) { ForecastDescriptor firstResult = first.process(point, 0L); if (firstResult.getAnomalyGrade() > 0) { assertEquals(firstResult.getAnomalyGrade(), result.get(count).getAnomalyGrade(), 1e-3); assertEquals(firstResult.getInternalTimeStamp(), result.get(count).getInternalTimeStamp()); assertEquals(firstResult.getRCFScore(), result.get(count).getRCFScore(), 1e-3); ++count; } last = firstResult; } assertTrue(count == result.size()); RangeVector sequential = descriptor.getForecastDescriptor().getTimedForecast().rangeVector; RangeVector current = last.getTimedForecast().rangeVector; assertArrayEquals(current.values, sequential.values, 1e-3f); assertArrayEquals(current.upper, sequential.upper, 1e-3f); assertArrayEquals(current.lower, sequential.lower, 1e-3f); assertArrayEquals(descriptor.getForecastDescriptor().getIntervalPrecision(), last.getIntervalPrecision(), 1e-3f); assertArrayEquals(descriptor.getForecastDescriptor().getErrorMean(), last.getErrorMean(), 1e-3f); } } } ================================================ FILE: Java/parkservices/src/test/java/com/amazon/randomcutforest/parkservices/TestGlobalLocalAnomalyDetector.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.parkservices; import static com.amazon.randomcutforest.CommonUtils.checkArgument; import static com.amazon.randomcutforest.CommonUtils.toDoubleArray; import static com.amazon.randomcutforest.CommonUtils.toFloatArray; import static com.amazon.randomcutforest.parkservices.GlobalLocalAnomalyDetector.DEFAULT_GLAD_THRESHOLD; import static com.amazon.randomcutforest.parkservices.GlobalLocalAnomalyDetector.DEFAULT_IGNORE_SMALL_CLUSTER_REPRESENTATIVE; import static com.amazon.randomcutforest.parkservices.GlobalLocalAnomalyDetector.DEFAULT_MAX; import static com.amazon.randomcutforest.parkservices.threshold.BasicThresholder.DEFAULT_Z_FACTOR; import static com.amazon.randomcutforest.summarization.GenericMultiCenter.DEFAULT_NUMBER_OF_REPRESENTATIVES; import static com.amazon.randomcutforest.summarization.GenericMultiCenter.DEFAULT_SHRINKAGE; import static com.amazon.randomcutforest.testutils.ExampleDataSets.rotateClockWise; import static java.lang.Math.PI; import static java.lang.Math.cos; import static java.lang.Math.min; import static java.lang.Math.sin; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotEquals; import static org.junit.jupiter.api.Assertions.assertNull; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; import java.io.BufferedWriter; import java.io.FileWriter; import java.io.IOException; import java.util.List; import java.util.Random; import java.util.function.BiFunction; import org.junit.jupiter.api.Test; import com.amazon.randomcutforest.parkservices.config.ScoringStrategy; import com.amazon.randomcutforest.parkservices.returntypes.GenericAnomalyDescriptor; import com.amazon.randomcutforest.summarization.ICluster; import com.amazon.randomcutforest.summarization.Summarizer; import com.amazon.randomcutforest.testutils.NormalMixtureTestData; import com.amazon.randomcutforest.util.Weighted; public class TestGlobalLocalAnomalyDetector { @Test void testConstructor() { int reservoirSize = 2000; int stringSize = 70; BiFunction dist = (a, b) -> toyD(a, b, stringSize / 2.0); GlobalLocalAnomalyDetector reservoir = new GlobalLocalAnomalyDetector<>( GlobalLocalAnomalyDetector.builder().randomSeed(42).numberOfRepresentatives(5) .timeDecay(1.0 / reservoirSize).capacity(reservoirSize), dist); assertEquals(reservoir.getObjectList().size(), 0); assertThrows(IllegalArgumentException.class, () -> reservoir.setMaxAllowed(200)); assertThrows(IllegalArgumentException.class, () -> reservoir.setMaxAllowed(2)); assertEquals(reservoir.getMaxAllowed(), DEFAULT_MAX); reservoir.setMaxAllowed(DEFAULT_MAX + 1); assertEquals(reservoir.getMaxAllowed(), DEFAULT_MAX + 1); assertEquals(reservoir.getIgnoreBelow(), DEFAULT_IGNORE_SMALL_CLUSTER_REPRESENTATIVE); assertThrows(IllegalArgumentException.class, () -> reservoir.setIgnoreBelow(-1.0)); assertThrows(IllegalArgumentException.class, () -> reservoir.setIgnoreBelow(0.2)); reservoir.setIgnoreBelow(2 * DEFAULT_IGNORE_SMALL_CLUSTER_REPRESENTATIVE); assertEquals(reservoir.getIgnoreBelow(), 2 * DEFAULT_IGNORE_SMALL_CLUSTER_REPRESENTATIVE); assertEquals(reservoir.getZfactor(), DEFAULT_Z_FACTOR); assertThrows(IllegalArgumentException.class, () -> reservoir.setZfactor(1.0)); reservoir.setZfactor(0.95 * DEFAULT_Z_FACTOR); assertEquals(reservoir.getZfactor(), 0.95 * DEFAULT_Z_FACTOR); assertEquals(reservoir.getDoNotreclusterWithin(), reservoir.getCapacity() / 2); assertThrows(IllegalArgumentException.class, () -> reservoir.setDoNotreclusterWithin(-100)); reservoir.setDoNotreclusterWithin(reservoir.getCapacity() / 2 + 1); assertEquals(reservoir.getDoNotreclusterWithin(), reservoir.getCapacity() / 2 + 1); assertEquals(reservoir.getLowerThreshold(), DEFAULT_GLAD_THRESHOLD); assertEquals(reservoir.getShrinkage(), DEFAULT_SHRINKAGE); assertThrows(IllegalArgumentException.class, () -> reservoir.setShrinkage(-1.0)); assertThrows(IllegalArgumentException.class, () -> reservoir.setShrinkage(2.0)); reservoir.setShrinkage(DEFAULT_SHRINKAGE); assertEquals(reservoir.getShrinkage(), DEFAULT_SHRINKAGE); assertEquals(reservoir.getNumberOfRepresentatives(), DEFAULT_NUMBER_OF_REPRESENTATIVES); assertThrows(IllegalArgumentException.class, () -> reservoir.setNumberOfRepresentatives(0)); assertThrows(IllegalArgumentException.class, () -> reservoir.setNumberOfRepresentatives(200)); reservoir.setNumberOfRepresentatives(DEFAULT_NUMBER_OF_REPRESENTATIVES + 1); assertEquals(reservoir.getNumberOfRepresentatives(), DEFAULT_NUMBER_OF_REPRESENTATIVES + 1); assertThrows(IllegalArgumentException.class, () -> reservoir.setLowerThreshold(-1.0)); assertThrows(IllegalArgumentException.class, () -> reservoir.process(null, -1.0f, dist, true)); GlobalLocalAnomalyDetector second = GlobalLocalAnomalyDetector.builder().randomSeed(42) .numberOfRepresentatives(5).timeDecay(1.0 / reservoirSize).capacity(reservoirSize).maxAllowed(5) .anomalyRate(0.01).ignoreBelow(0.01).doNotReclusterWithin(1).build(); second.process(null, 1.0f, dist, true); second.process(null, 1.0f, dist, true); second.process(null, 1.0f, dist, true); // global function not set assertThrows(IllegalArgumentException.class, () -> second.process(null, 1.0f, dist, true)); } @Test void testDynamicStringClustering() { long seed = new Random().nextLong(); System.out.println("String summarization seed : " + seed); Random random = new Random(seed); int stringSize = 70; int numberOfStrings = 200000; int reservoirSize = 2000; boolean changeInMiddle = true; // the following should be away from 0.5 in [0.5,1] double gapProbOfA = 0.85; double anomalyRate = 0.05; char[][] points = new char[numberOfStrings][]; boolean[] injected = new boolean[numberOfStrings]; int numberOfInjected = 0; for (int i = 0; i < numberOfStrings; i++) { if (random.nextDouble() < anomalyRate && i > reservoirSize / 2) { injected[i] = true; ++numberOfInjected; points[i] = getABArray(stringSize + 10, 0.5, random, false, 0); } else { boolean flag = changeInMiddle && random.nextDouble() < 0.25; double prob = (random.nextDouble() < 0.5) ? gapProbOfA : (1 - gapProbOfA); points[i] = getABArray(stringSize, prob, random, flag, 0.25 * i / numberOfStrings); } } System.out.println("Injected " + numberOfInjected + " 'anomalies' in " + points.length); BiFunction dist = (a, b) -> toyD(a, b, stringSize / 2.0); GlobalLocalAnomalyDetector reservoir = GlobalLocalAnomalyDetector.builder().randomSeed(42) .numberOfRepresentatives(5).timeDecay(1.0 / reservoirSize).capacity(reservoirSize).build(); reservoir.setGlobalDistance(dist); reservoir.setLowerThreshold(0.8); int truePos = 0; int falsePos = 0; int falseNeg = 0; for (int y = 0; y < points.length; y++) { if (y % 200 == 100 && y > reservoirSize) { char[] temp = points[y]; // check for malformed distance function, to the extent we can check efficiently BiFunction badDistance = (a, b) -> -1.0; assertThrows(IllegalArgumentException.class, () -> reservoir.process(temp, 1.0f, badDistance, true)); BiFunction superBadDistance = (a, b) -> Double.MAX_VALUE; assertThrows(IllegalArgumentException.class, () -> reservoir.process(temp, 1.0f, superBadDistance, true)); } GenericAnomalyDescriptor result = reservoir.process(points[y], 1.0f, null, false); if (result.getRepresentativeList() != null) { double sum = 0; for (Weighted rep : result.getRepresentativeList()) { assert (rep.weight <= 1.0); sum += rep.weight; } // checking likelihood summing to 1 assertEquals(sum, 1.0, 1e-6); } if (result.getAnomalyGrade() > 0) { if (!injected[y]) { ++falsePos; } else { ++truePos; } } else if (injected[y]) { ++falseNeg; } if (10 * y % points.length == 0 && y > 0) { System.out.println(" at " + y); System.out.println("Precision = " + precision(truePos, falsePos)); System.out.println("Recall = " + recall(truePos, falseNeg)); } } System.out.println(" Final: "); System.out.println("Precision = " + precision(truePos, falsePos)); System.out.println("Recall = " + recall(truePos, falseNeg)); assert (reservoir.getObjectList().size() > reservoirSize / 2); } public static double toyD(char[] a, char[] b, double u) { if (a.length > b.length) { return toyD(b, a, u); } double[][] dist = new double[2][b.length + 1]; for (int j = 0; j < b.length + 1; j++) { dist[0][j] = j; } for (int i = 1; i < a.length + 1; i++) { dist[1][0] = i; for (int j = 1; j < b.length + 1; j++) { double t = dist[0][j - 1] + ((a[i - 1] == b[j - 1]) ? 0 : 1); dist[1][j] = min(min(t, dist[0][j] + 1), dist[1][j - 1] + 1); } for (int j = 0; j < b.length + 1; j++) { dist[0][j] = dist[1][j]; } } return dist[1][b.length]; } // colors public static final String ANSI_RESET = "\u001B[0m"; public static final String ANSI_RED = "\u001B[31m"; public static final String ANSI_BLUE = "\u001B[34m"; public char[] getABArray(int size, double probabilityOfA, Random random, Boolean changeInMiddle, double fraction) { int newSize = size + random.nextInt(size / 5); char[] a = new char[newSize]; for (int i = 0; i < newSize; i++) { double toss = (changeInMiddle && (i > (1 - fraction) * newSize || i < newSize * fraction)) ? (1 - probabilityOfA) : probabilityOfA; if (random.nextDouble() < toss) { a[i] = '-'; } else { a[i] = '_'; } } return a; } public double[][] shiftedEllipse(int dataSize, int seed, double shift, int fans) { NormalMixtureTestData generator = new NormalMixtureTestData(0.0, 1.0, 0.0, 1.0, 0.0, 1.0); double[][] data = generator.generateTestData(dataSize, 2, seed); Random prg = new Random(0); for (int i = 0; i < dataSize; i++) { int nextFan = prg.nextInt(fans); // scale data[i][1] *= 1.0 / fans; data[i][0] *= 2.0; // shift data[i][0] += shift + 1.0 / fans; data[i] = rotateClockWise(data[i], 2 * PI * nextFan / fans); } return data; } @Test void testDynamicNumericClustering() throws IOException { long randomSeed = new Random().nextLong(); System.out.println("Seed " + randomSeed); // we would be sending dataSize * 360 vectors int dataSize = 2000; double range = 10.0; int numberOfFans = 3; // corresponds to number of clusters double[][] data = shiftedEllipse(dataSize, 7, range / 2, numberOfFans); int truePos = 0; int falsePos = 0; int falseNeg = 0; int truePosRCF = 0; int falsePosRCF = 0; int falseNegRCF = 0; int reservoirSize = dataSize; double timedecay = 1.0 / reservoirSize; GlobalLocalAnomalyDetector reservoir = GlobalLocalAnomalyDetector.builder().randomSeed(42) .numberOfRepresentatives(3).timeDecay(timedecay).capacity(reservoirSize).build(); reservoir.setGlobalDistance(Summarizer::L2distance); double zFactor = 6.0; // six sigma deviation; seems to work best reservoir.setZfactor(zFactor); ThresholdedRandomCutForest test = ThresholdedRandomCutForest.builder().dimensions(2).shingleSize(1) .randomSeed(77).timeDecay(timedecay).scoringStrategy(ScoringStrategy.DISTANCE).build(); test.setZfactor(zFactor); // using the same apples to apples comparison String name = "clustering_example"; BufferedWriter file = new BufferedWriter(new FileWriter(name)); Random noiseGen = new Random(randomSeed + 1); for (int degree = 0; degree < 360; degree += 1) { int index = 0; while (index < data.length) { boolean injected = false; float[] vec; if (noiseGen.nextDouble() < 0.005) { injected = true; double[] candAnomaly = new double[2]; // generate points along x axis candAnomaly[0] = (range / 2 * noiseGen.nextDouble() + range / 2); candAnomaly[1] = 0.1 * (2.0 * noiseGen.nextDouble() - 1.0); int antiFan = noiseGen.nextInt(numberOfFans); // rotate to be 90-180 degrees away -- these are decidedly anomalous vec = toFloatArray(rotateClockWise(candAnomaly, -2 * PI * (degree + 180 * (1 + 2 * antiFan) / numberOfFans) / 360)); } else { vec = toFloatArray(rotateClockWise(data[index], -2 * PI * degree / 360)); ++index; } GenericAnomalyDescriptor result = reservoir.process(vec, 1.0f, null, true); AnomalyDescriptor res = test.process(toDoubleArray(vec), 0L); double grade = res.getAnomalyGrade(); if (result.getRepresentativeList() != null) { double sum = 0; for (Weighted rep : result.getRepresentativeList()) { assert (rep.weight <= 1.0); sum += rep.weight; } // checking likelihood summing to 1 assert (sum > 0.9); } if (injected) { if (result.getAnomalyGrade() > 0) { ++truePos; } else { ++falseNeg; } if (grade > 0) { ++truePosRCF; assert (res.getAttribution() != null); // even though scoring is different, we should see attribution add up to score assertEquals(res.getAttribution().getHighLowSum(), res.getRCFScore(), 1e-6); } else { ++falseNegRCF; } } else { if (result.getAnomalyGrade() > 0) { ++falsePos; } if (grade > 0) { ++falsePosRCF; assert (res.getAttribution() != null); // even though scoring is different, we should see attribution add up to score assertEquals(res.getAttribution().getHighLowSum(), res.getRCFScore(), 1e-6); } } } if (falsePos + truePos == 0) { throw new IllegalStateException(""); } checkArgument(falseNeg + truePos == falseNegRCF + truePosRCF, " incorrect accounting"); System.out.println(" at degree " + degree + " injected " + (truePos + falseNeg)); System.out.print("Precision = " + precision(truePos, falsePos)); System.out.println(" Recall = " + recall(truePos, falseNeg)); System.out.print("RCF Distance Mode Precision = " + precision(truePosRCF, falsePosRCF)); System.out.println(" RCF Distance Mode Recall = " + recall(truePosRCF, falseNegRCF)); } // attempting merge long number = new Random().nextLong(); int size = reservoirSize;// - new Random().nextInt(100); double newShrinkage = new Random().nextDouble(); int reps = new Random().nextInt(10) + 1; // cannot be 0 GlobalLocalAnomalyDetector.Builder builder = GlobalLocalAnomalyDetector.builder().capacity(size) .shrinkage(newShrinkage).numberOfRepresentatives(reps).timeDecay(timedecay).randomSeed(number); GlobalLocalAnomalyDetector newDetector = new GlobalLocalAnomalyDetector<>(reservoir, reservoir, builder, true, Summarizer::L1distance); assertEquals(newDetector.getCapacity(), size); List> clusters = newDetector.getClusters(); assertNotEquals(clusters, null); double score = newDetector.score(clusters.get(0).getRepresentatives().get(0).index, null, true).get(0).weight; assertEquals(0.0, score); assertEquals(newDetector.numberOfRepresentatives, reps); assertEquals(newDetector.shrinkage, newShrinkage); GlobalLocalAnomalyDetector another = new GlobalLocalAnomalyDetector<>(reservoir, reservoir, builder, false, Summarizer::L2distance); assertNull(another.getClusters()); file.close(); } double precision(int truePos, int falsePos) { return (truePos + falsePos > 0) ? 1.0 * truePos / (truePos + falsePos) : 1.0; } double recall(int truePos, int falseNeg) { return (truePos + falseNeg > 0) ? 1.0 * truePos / (truePos + falseNeg) : 1.0; } @Test public void testOcclusion() { GlobalLocalAnomalyDetector reservoir = GlobalLocalAnomalyDetector.builder().randomSeed(42) .numberOfRepresentatives(3).initialAcceptFraction(1.0).timeDecay(0).capacity(100).maxAllowed(20) .build(); reservoir.setGlobalDistance(Summarizer::L2distance); for (int i = 0; i < 10; i++) { reservoir.process(new float[] { 1.0f, 0 }, 1.0f, null, false); reservoir.process(new float[] { (float) cos(2 * PI / 6), (float) sin(2 * PI / 6) }, 1.0f, null, false); reservoir.process(new float[] { (float) cos(2 * 2 * PI / 6), (float) sin(2 * 2 * PI / 6) }, 1.0f, null, false); reservoir.process(new float[] { (float) cos(3 * 2 * PI / 6), (float) sin(3 * 2 * PI / 6) }, 1.0f, null, false); reservoir.process(new float[] { (float) cos(4 * 2 * PI / 6), (float) sin(4 * 2 * PI / 6) }, 1.0f, null, false); reservoir.process(new float[] { (float) cos(5 * 2 * PI / 6), (float) sin(5 * 2 * PI / 6) }, 1.0f, null, false); } assertTrue(reservoir.getClusters().size() == 6); assert (reservoir.score(new float[] { 1.5f, 0 }, Summarizer::L2distance, true).size() < 6); } } ================================================ FILE: Java/parkservices/src/test/java/com/amazon/randomcutforest/parkservices/ThresholdedRandomCutForestTest.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.parkservices; import static com.amazon.randomcutforest.config.ImputationMethod.FIXED_VALUES; import static com.amazon.randomcutforest.config.ImputationMethod.LINEAR; import static com.amazon.randomcutforest.config.ImputationMethod.NEXT; import static com.amazon.randomcutforest.config.ImputationMethod.PREVIOUS; import static com.amazon.randomcutforest.config.ImputationMethod.RCF; import static com.amazon.randomcutforest.config.ImputationMethod.ZERO; import static com.amazon.randomcutforest.config.TransformMethod.DIFFERENCE; import static com.amazon.randomcutforest.config.TransformMethod.NORMALIZE; import static com.amazon.randomcutforest.config.TransformMethod.NORMALIZE_DIFFERENCE; import static org.junit.jupiter.api.Assertions.assertArrayEquals; import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertNull; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; import java.util.List; import java.util.Random; import java.util.stream.Stream; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; import org.junit.jupiter.params.provider.EnumSource; import org.junit.jupiter.params.provider.MethodSource; import org.junit.jupiter.params.provider.ValueSource; import com.amazon.randomcutforest.config.ForestMode; import com.amazon.randomcutforest.config.ImputationMethod; import com.amazon.randomcutforest.config.Precision; import com.amazon.randomcutforest.config.TransformMethod; import com.amazon.randomcutforest.parkservices.state.ThresholdedRandomCutForestMapper; import com.amazon.randomcutforest.preprocessor.Preprocessor; public class ThresholdedRandomCutForestTest { @Test public void testConfigAugmentOne() { int sampleSize = 256; int baseDimensions = 2; int shingleSize = 4; int dimensions = baseDimensions * shingleSize; long seed = new Random().nextLong(); assertThrows(IllegalArgumentException.class, () -> ThresholdedRandomCutForest.builder().compact(true).sampleSize(sampleSize).dimensions(dimensions) .precision(Precision.FLOAT_32).randomSeed(seed).forestMode(ForestMode.TIME_AUGMENTED) .internalShinglingEnabled(false).shingleSize(shingleSize).anomalyRate(0.01).build()); // have to enable internal shingling or keep it unspecified assertDoesNotThrow( () -> ThresholdedRandomCutForest.builder().compact(true).sampleSize(sampleSize).dimensions(dimensions) .precision(Precision.FLOAT_32).randomSeed(seed).forestMode(ForestMode.TIME_AUGMENTED) .internalShinglingEnabled(true).shingleSize(shingleSize).anomalyRate(0.01).build()); // imputefraction not allowed assertThrows(IllegalArgumentException.class, () -> new ThresholdedRandomCutForest.Builder<>().compact(true).sampleSize(sampleSize) .dimensions(dimensions).precision(Precision.FLOAT_32).randomSeed(seed) .forestMode(ForestMode.TIME_AUGMENTED).useImputedFraction(0.5).internalShinglingEnabled(true) .shingleSize(shingleSize).anomalyRate(0.01).build()); ThresholdedRandomCutForest forest = ThresholdedRandomCutForest.builder().compact(true).sampleSize(sampleSize) .dimensions(dimensions).precision(Precision.FLOAT_32).randomSeed(seed) .forestMode(ForestMode.TIME_AUGMENTED).normalizeTime(true).shingleSize(shingleSize).anomalyRate(0.01) .build(); assertNotNull(((Preprocessor) forest.getPreprocessor()).getInitialTimeStamps()); } @Test public void testConfigAugmentTwo() { int baseDimensions = 2; int shingleSize = 1; // passes due to this int dimensions = baseDimensions * shingleSize; long seed = new Random().nextLong(); ThresholdedRandomCutForest.Builder b = new ThresholdedRandomCutForest.Builder().dimensions(dimensions) .randomSeed(seed).forestMode(ForestMode.TIME_AUGMENTED).internalShinglingEnabled(false) .shingleSize(shingleSize).anomalyRate(0.01); ThresholdedRandomCutForest f = b.build(); assertEquals(f.getForest().getDimensions(), dimensions + 1); assertThrows(IllegalArgumentException.class, () -> f.process(new double[1], 0L, new int[] { -1 })); assertThrows(IllegalArgumentException.class, () -> f.process(new double[1], 0L, new int[] { 1 })); assertThrows(IllegalArgumentException.class, () -> f.process(new double[1], 0L, new int[2])); assertThrows(IllegalArgumentException.class, () -> f.extrapolate(10)); assertThrows(IllegalArgumentException.class, () -> new ThresholdedRandomCutForest.Builder<>().dimensions(dimensions).randomSeed(seed) .weights(new double[] { -1 }).forestMode(ForestMode.TIME_AUGMENTED) .internalShinglingEnabled(false).shingleSize(shingleSize).anomalyRate(0.01).build()); assertThrows(IllegalArgumentException.class, () -> new ThresholdedRandomCutForest.Builder<>().dimensions(dimensions).randomSeed(seed) .transformMethod(NORMALIZE).forestMode(ForestMode.TIME_AUGMENTED) .internalShinglingEnabled(false).shingleSize(shingleSize).anomalyRate(0.01).build()); ThresholdedRandomCutForest forest = new ThresholdedRandomCutForest.Builder<>().compact(true) .dimensions(dimensions).precision(Precision.FLOAT_32).randomSeed(seed) .forestMode(ForestMode.TIME_AUGMENTED).shingleSize(shingleSize).anomalyRate(0.01).build(); assertTrue(forest.getForest().isInternalShinglingEnabled()); // default on } @Test public void testConfigImpute() { int sampleSize = 256; int baseDimensions = 2; int shingleSize = 4; int dimensions = baseDimensions * shingleSize; long seed = new Random().nextLong(); // have to enable internal shingling or keep it unfixed assertThrows(IllegalArgumentException.class, () -> new ThresholdedRandomCutForest.Builder<>().compact(true).dimensions(dimensions) .precision(Precision.FLOAT_32).randomSeed(seed).forestMode(ForestMode.STREAMING_IMPUTE) .internalShinglingEnabled(false).shingleSize(shingleSize).anomalyRate(0.01).build()); assertDoesNotThrow(() -> new ThresholdedRandomCutForest.Builder<>().compact(true).dimensions(dimensions) .precision(Precision.FLOAT_32).randomSeed(seed).forestMode(ForestMode.STREAMING_IMPUTE) .shingleSize(shingleSize).anomalyRate(0.01).build()); assertThrows(IllegalArgumentException.class, () -> new ThresholdedRandomCutForest.Builder<>().dimensions(dimensions).randomSeed(seed) .forestMode(ForestMode.STREAMING_IMPUTE).outputAfter(1).startNormalization(1) .shingleSize(shingleSize).anomalyRate(0.01).build()); } @Test public void testConfigStandard() { int sampleSize = 256; int baseDimensions = 2; int shingleSize = 4; int dimensions = baseDimensions * shingleSize; long seed = new Random().nextLong(); // have to enable internal shingling or keep it unfixed assertThrows(IllegalArgumentException.class, () -> ThresholdedRandomCutForest.builder().compact(true).dimensions(dimensions) .precision(Precision.FLOAT_32).randomSeed(seed).forestMode(ForestMode.STANDARD) .useImputedFraction(0.5).internalShinglingEnabled(false).shingleSize(shingleSize) .anomalyRate(0.01).build()); assertDoesNotThrow(() -> { ThresholdedRandomCutForest.builder().compact(true).dimensions(dimensions).precision(Precision.FLOAT_32) .randomSeed(seed).forestMode(ForestMode.STANDARD).internalShinglingEnabled(false) .shingleSize(shingleSize).anomalyRate(0.01).build(); }); assertThrows(IllegalArgumentException.class, () -> { ThresholdedRandomCutForest forest = ThresholdedRandomCutForest.builder().compact(true) .dimensions(dimensions).precision(Precision.FLOAT_32).randomSeed(seed) .forestMode(ForestMode.STANDARD).shingleSize(shingleSize).anomalyRate(0.01) .transformMethod(NORMALIZE).startNormalization(111).stopNormalization(100).build(); }); // change if baseDimension != 2 double[] testOne = new double[] { 0 }; double[] testTwo = new double[] { 0, -1 }; double[] testThree = new double[] { new Random().nextDouble(), new Random().nextDouble() }; double[] testFour = new double[] { new Random().nextDouble(), new Random().nextDouble() }; double[] testFive = new double[] { new Random().nextDouble(), new Random().nextDouble() }; double[] testSix = new double[] { new Random().nextDouble(), new Random().nextDouble() }; assertThrows(IllegalArgumentException.class, () -> { ThresholdedRandomCutForest forest = ThresholdedRandomCutForest.builder().compact(true) .dimensions(dimensions).precision(Precision.FLOAT_32).randomSeed(seed) .forestMode(ForestMode.STANDARD).shingleSize(shingleSize).anomalyRate(0.01) .transformMethod(NORMALIZE).ignoreNearExpectedFromAbove(testOne).build(); }); assertThrows(IllegalArgumentException.class, () -> { ThresholdedRandomCutForest forest = ThresholdedRandomCutForest.builder().compact(true) .dimensions(dimensions).precision(Precision.FLOAT_32).randomSeed(seed) .forestMode(ForestMode.STANDARD).shingleSize(shingleSize).anomalyRate(0.01) .transformMethod(NORMALIZE).ignoreNearExpectedFromAbove(testTwo).build(); }); assertDoesNotThrow(() -> { ThresholdedRandomCutForest forest = ThresholdedRandomCutForest.builder().compact(true) .dimensions(dimensions).precision(Precision.FLOAT_32).randomSeed(seed) .forestMode(ForestMode.STANDARD).shingleSize(shingleSize).anomalyRate(0.01) .transformMethod(NORMALIZE).ignoreNearExpectedFromAbove(testThree) .ignoreNearExpectedFromBelow(testFour).ignoreNearExpectedFromAboveByRatio(testFive) .ignoreNearExpectedFromBelowByRatio(testSix).build(); double[] array = forest.getPredictorCorrector().getIgnoreNearExpected(); assert (array.length == 4 * baseDimensions); assert (array[0] == testThree[0]); assert (array[1] == testThree[1]); assert (array[2] == testFour[0]); assert (array[3] == testFour[1]); assert (array[4] == testFive[0]); assert (array[5] == testFive[1]); assert (array[6] == testSix[0]); assert (array[7] == testSix[1]); double random = new Random().nextDouble(); assertThrows(IllegalArgumentException.class, () -> forest.predictorCorrector.setSamplingRate(-1)); assertThrows(IllegalArgumentException.class, () -> forest.predictorCorrector.setSamplingRate(2)); assertDoesNotThrow(() -> forest.predictorCorrector.setSamplingRate(random)); assertEquals(forest.predictorCorrector.getSamplingRate(), random, 1e-10); long newSeed = forest.predictorCorrector.getRandomSeed(); assertEquals(seed, newSeed); assertFalse(forest.predictorCorrector.autoAdjust); assertNull(forest.predictorCorrector.getDeviations()); }); assertDoesNotThrow(() -> { ThresholdedRandomCutForest forest = ThresholdedRandomCutForest.builder().compact(true) .dimensions(dimensions).precision(Precision.FLOAT_32).randomSeed(seed) .forestMode(ForestMode.STANDARD).shingleSize(shingleSize).anomalyRate(0.01) .transformMethod(NORMALIZE).autoAdjust(true).build(); assertTrue(forest.predictorCorrector.autoAdjust); assert (forest.predictorCorrector.getDeviations().length == 2 * baseDimensions); }); ThresholdedRandomCutForest forest = ThresholdedRandomCutForest.builder().compact(true).dimensions(dimensions) .precision(Precision.FLOAT_32).randomSeed(seed).forestMode(ForestMode.STANDARD).shingleSize(shingleSize) .anomalyRate(0.01).transformMethod(NORMALIZE).startNormalization(111).stopNormalization(111).build(); assertTrue(forest.getForest().isInternalShinglingEnabled()); // left to false assertEquals(((Preprocessor) forest.getPreprocessor()).getInitialValues().length, 111); assertEquals(((Preprocessor) forest.getPreprocessor()).getInitialTimeStamps().length, 111); assertEquals(((Preprocessor) forest.getPreprocessor()).getStopNormalization(), 111); assertEquals(((Preprocessor) forest.getPreprocessor()).getStartNormalization(), 111); } @Test void testImputeConfig() { int baseDimensions = 1; int shingleSize = 2; int dimensions = baseDimensions * shingleSize; long seed = new Random().nextLong(); // not providing values assertThrows(IllegalArgumentException.class, () -> { ThresholdedRandomCutForest forest = ThresholdedRandomCutForest.builder().compact(true) .dimensions(dimensions).precision(Precision.FLOAT_32).randomSeed(seed) .forestMode(ForestMode.STREAMING_IMPUTE).imputationMethod(ImputationMethod.FIXED_VALUES) .normalizeTime(true).internalShinglingEnabled(true).shingleSize(shingleSize).anomalyRate(0.01) .build(); }); // incorrect number of values to fill assertThrows(IllegalArgumentException.class, () -> { ThresholdedRandomCutForest forest = ThresholdedRandomCutForest.builder().compact(true) .dimensions(dimensions).precision(Precision.FLOAT_32).randomSeed(seed) .forestMode(ForestMode.STREAMING_IMPUTE).imputationMethod(ImputationMethod.FIXED_VALUES) .fillValues(new double[] { 0.0, 17.0 }).normalizeTime(true).internalShinglingEnabled(true) .shingleSize(shingleSize).anomalyRate(0.01).build(); }); assertDoesNotThrow(() -> { ThresholdedRandomCutForest forest = ThresholdedRandomCutForest.builder().compact(true) .dimensions(dimensions).precision(Precision.FLOAT_32).randomSeed(seed) .forestMode(ForestMode.STREAMING_IMPUTE).imputationMethod(ImputationMethod.FIXED_VALUES) .fillValues(new double[] { 2.0 }).internalShinglingEnabled(true).shingleSize(shingleSize) .anomalyRate(0.01).build(); }); } @ParameterizedTest @EnumSource(ImputationMethod.class) void testImpute(ImputationMethod method) { int baseDimensions = 1; int shingleSize = 1; int dimensions = baseDimensions * shingleSize; long seed = new Random().nextLong(); // shingle size 1 ie not useful for impute assertThrows(IllegalArgumentException.class, () -> { ThresholdedRandomCutForest forest = ThresholdedRandomCutForest.builder().compact(true) .dimensions(dimensions).precision(Precision.FLOAT_32).randomSeed(seed) .forestMode(ForestMode.STREAMING_IMPUTE).imputationMethod(method).normalizeTime(true) .internalShinglingEnabled(true).shingleSize(shingleSize).anomalyRate(0.01).build(); }); int newShingleSize = 4; int newDimensions = baseDimensions * newShingleSize; ThresholdedRandomCutForest forest = ThresholdedRandomCutForest.builder().compact(true).dimensions(newDimensions) .precision(Precision.FLOAT_32).randomSeed(seed).forestMode(ForestMode.STREAMING_IMPUTE) .imputationMethod(method).internalShinglingEnabled(true).shingleSize(newShingleSize).anomalyRate(0.01) .useImputedFraction(0.76).fillValues(new double[] { 0 }).build(); double[] fixedData = new double[] { 1.0 }; double[] newData = new double[] { 10.0 }; Random random = new Random(0); int count = 0; for (int i = 0; i < 200 + new Random().nextInt(100); i++) { forest.process(fixedData, (long) count * 113 + random.nextInt(10)); ++count; } AnomalyDescriptor result = forest.process(newData, (long) count * 113 + 1000); assert (result.getAnomalyGrade() > 0); assert (result.isExpectedValuesPresent()); if (method != NEXT && method != ZERO && method != FIXED_VALUES) { assert (result.getRelativeIndex() == 0); assertArrayEquals(result.getExpectedValuesList()[0], fixedData, 1e-6); } // the gap is 1000 + 113 which is about 9 times 113 // but only the first three entries are allowed in with shinglesize 4, // after which the imputation is 100% and // only at most 76% imputed tuples are allowed in the forest // an additional one arise from the actual input assertEquals(forest.getForest().getTotalUpdates(), count + 9 + 1); // triggerring consecutive anomalies (no differencing) if (method == PREVIOUS && method == RCF) { assertEquals(forest.process(newData, (long) count * 113 + 1113).getAnomalyGrade(), 1.0); } assert (forest.process(new double[] { 20 }, (long) count * 113 + 1226).getAnomalyGrade() > 0); long stamp = (long) count * 113 + 1226; // time has to increase assertThrows(IllegalArgumentException.class, () -> { forest.process(new double[] { 20 }, stamp); }); } @ParameterizedTest @MethodSource("args") void testImpute(TransformMethod transformMethod, ImputationMethod method) { int baseDimensions = 1; int shingleSize = 4; int dimensions = baseDimensions * shingleSize; long seed = new Random().nextLong(); ThresholdedRandomCutForest forest = ThresholdedRandomCutForest.builder().compact(true).dimensions(dimensions) .precision(Precision.FLOAT_32).randomSeed(seed).forestMode(ForestMode.STREAMING_IMPUTE) .imputationMethod(method).internalShinglingEnabled(true).shingleSize(shingleSize).anomalyRate(0.01) .useImputedFraction(0.76).fillValues(new double[] { 1.0 }).transformMethod(transformMethod).build(); double[] fixedData = new double[] { 1.0 }; double[] newData = new double[] { 10.0 }; Random random = new Random(); int count = 0; for (int i = 0; i < 2000 + new Random().nextInt(100); i++) { forest.process(fixedData, (long) count * 113 + random.nextInt(10)); ++count; } // note every will have an update assertEquals(forest.getForest().getTotalUpdates(), count); AnomalyDescriptor result = forest.process(newData, (long) count * 113 + 1000); if (method != NEXT && method != LINEAR) { assert (result.getAnomalyGrade() > 0); assert (result.isExpectedValuesPresent()); } // the other impute methods generate too much noise if (method == RCF || method == PREVIOUS) { assert (Math.abs(result.getExpectedValuesList()[0][0] - fixedData[0]) < 0.05); } // the gap is 1000 + 113 which is about 9 times 113 // but only the first three entries are allowed in with shinglesize 4, // after which the imputation is 100% and // only at most 76% imputed tuples are allowed in the forest // an additional one does not arise from the actual input because all the // initial // entries are imputed and the method involves differencing if (transformMethod != DIFFERENCE && transformMethod != NORMALIZE_DIFFERENCE) { assertEquals(forest.getForest().getTotalUpdates(), count + 9 + 1); } else { assertEquals(forest.getForest().getTotalUpdates(), count + 9 + 1); } } static Stream args() { return transformMethodStream().flatMap( classParameter -> imputationMethod().map(testParameter -> Arguments.of(classParameter, testParameter))); } static Stream imputationMethod() { return Stream.of(ImputationMethod.values()); } static Stream transformMethodStream() { return Stream.of(TransformMethod.values()); } @Test void testMapper() { double[] initialData = new double[] { 25.0, 25.0, 25.0, 24.0, 24.0, 24.0, 24.0, 24.0, 24.0, 24.0, 23.0, 23.0, 23.0, 23.0, 23.0, 22.0, 22.0, 22.0, 22.0, 22.0, 22.0, 22.0, 21.0, 21.0, 21.0, 21.0, 21.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 19.0, 19.0, 19.0, 19.0, 19.0, 18.0, 18.0, 18.0, 18.0, 18.0, 18.0, 18.0, 17.0, 17.0, 17.0, 17.0, 17.0, 16.0, 16.0, 16.0, 16.0, 16.0, 16.0, 16.0, 15.0, 15.0, 15.0, 15.0, 15.0, 15.0, 16.0, 16.0, 16.0, 16.0, 16.0, 16.0, 16.0, 17.0, 17.0, 17.0, 17.0, 17.0, 17.0, 18.0, 18.0, 18.0, 18.0, 18.0, 18.0, 18.0, 19.0, 19.0, 19.0, 19.0, 19.0, 19.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 21.0, 21.0, 21.0, 21.0, 21.0, 21.0, 21.0, 22.0, 22.0, 22.0, 22.0, 22.0, 22.0, 22.0, 23.0, 23.0, 23.0, 23.0, 23.0, 23.0, 24.0, 24.0, 24.0, 24.0, 24.0, 24.0, 24.0, 24.0, 23.0, 23.0, 23.0, 23.0, 23.0, 23.0, 23.0, 23.0, 22.0, 22.0, 22.0, 22.0, 22.0, 22.0, 22.0, 22.0, 22.0, 21.0, 21.0, 21.0, 21.0, 21.0, 21.0, 21.0, 21.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 19.0, 19.0, 19.0, 19.0, 19.0, 19.0, 19.0, 19.0, 19.0, 18.0, 18.0, 18.0, 18.0, 18.0, 18.0, 18.0, 18.0, 17.0, 17.0, 17.0, 17.0, 17.0, 17.0, 17.0, 17.0, 17.0, 17.0, 17.0, 17.0, 16.0, 16.0, 16.0, 16.0, 16.0, 16.0, 16.0, 16.0, 16.0, 16.0, 16.0, 16.0, 16.0, 16.0, 16.0, 15.0, 15.0, 15.0, 15.0, 15.0, 15.0, 15.0, 15.0, 15.0, 15.0, 15.0, 15.0, 15.0, 15.0, 15.0, 14.0, 14.0, 14.0, 14.0, 14.0, 14.0, 14.0, 14.0, 14.0, 14.0, 14.0, 14.0, 14.0, 14.0, 14.0, 13.0, 13.0, 13.0, 13.0, 13.0, 13.0, 13.0, 13.0, 13.0, 14.0, 14.0, 14.0, 14.0, 15.0, 15.0, 15.0, 15.0, 16.0, 16.0, 16.0, 16.0, 17.0, 17.0, 17.0, 18.0, 18.0, 18.0, 18.0, 19.0, 19.0, 19.0, 19.0, 20.0, 20.0, 20.0, 20.0, 21.0, 21.0, 21.0, 22.0, 22.0, 22.0, 22.0, 23.0, 23.0, 23.0, 23.0, 24.0, 24.0, 24.0, 24.0, 25.0, 25.0, 25.0, 26.0, 26.0, 26.0, 26.0, 27.0, 27.0, 27.0, 27.0, 28.0, 28.0, 28.0, 28.0, 29.0, 29.0, 29.0, 29.0, 29.0, 29.0, 29.0, 29.0, 29.0, 28.0, 28.0, 28.0, 28.0, 28.0, 28.0, 28.0, 28.0, 28.0, 28.0, 28.0, 28.0, 28.0, 28.0, 28.0, 27.0, 27.0, 27.0, 27.0, 27.0, 27.0, 27.0, 27.0, 27.0, 27.0, 27.0, 27.0, 27.0, 27.0, 27.0, 26.0, 26.0, 26.0, 26.0, 26.0, 26.0, 26.0, 26.0, 26.0, 26.0, 26.0, 26.0, 26.0, 26.0, 26.0, 25.0, 25.0, 25.0, 25.0, 25.0, 25.0, 25.0, 25.0, 25.0, 25.0, 25.0, 25.0, 25.0, 25.0, 25.0, 25.0, 25.0, 26.0, 26.0, 26.0, 26.0, 26.0, 26.0, 26.0, 26.0, 26.0, 26.0, 26.0, 26.0, 26.0, 26.0, 26.0, 26.0, 26.0, 26.0, 26.0, 26.0, 26.0, 27.0, 27.0, 27.0, 27.0, 27.0, 27.0, 27.0, 27.0, 27.0, 27.0, 27.0, 27.0, 27.0, 27.0, 27.0, 27.0, 27.0, 27.0, 27.0, 28.0, 28.0, 28.0, 28.0, 28.0, 28.0, 28.0, 28.0, 28.0, 28.0, 28.0, 28.0, 28.0, 27.0, 27.0, 27.0, 27.0, 27.0, 27.0, 26.0, 26.0, 26.0, 26.0, 26.0, 26.0, 26.0, 25.0, 25.0, 25.0, 25.0, 25.0, 24.0, 24.0, 24.0, 24.0, 24.0, 24.0, 24.0, 23.0, 23.0, 23.0, 23.0, 23.0, 22.0, 22.0, 22.0, 22.0, 22.0, 22.0, 22.0, 21.0, 21.0, 21.0, 21.0, 21.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 19.0, 19.0, 19.0, 19.0, 19.0, 18.0, 18.0, 18.0, 18.0, 18.0, 18.0, 18.0, 18.0, 18.0, 18.0, 18.0, 18.0, 18.0, 18.0, 18.0, 18.0, 18.0, 18.0, 18.0, 18.0, 18.0, 18.0, 18.0, 18.0, 18.0, 18.0, 18.0, 18.0, 18.0, 18.0, 18.0, 18.0, 18.0, 18.0, 19.0, 19.0, 19.0, 19.0, 19.0, 19.0, 19.0, 19.0, 19.0, 19.0, 19.0, 19.0, 19.0, 19.0, 19.0, 19.0, 19.0, 19.0, 19.0, 19.0, 19.0, 19.0, 19.0, 19.0, 19.0, 19.0, 19.0, 19.0, 19.0, 19.0, 19.0, 19.0, 19.0, 19.0, 19.0, 19.0, 19.0, 19.0, 19.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 21.0, 21.0, 21.0, 21.0, 21.0, 21.0, 21.0, 21.0, 21.0, 21.0, 21.0, 21.0, 21.0, 21.0, 21.0, 21.0, 21.0, 21.0, 21.0, 22.0, 22.0, 22.0, 22.0, 22.0, 22.0, 22.0, 22.0, 22.0, 22.0, 22.0, 22.0, 22.0, 22.0, 22.0, 22.0, 22.0, 22.0, 22.0, 22.0, 22.0, 21.0, 21.0, 21.0, 21.0, 21.0, 21.0, 21.0, 21.0, 21.0, 21.0, 21.0, 21.0, 21.0, 21.0, 21.0, 21.0, 21.0, 21.0, 21.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 20.0, 19.0, 19.0, 19.0, 19.0, 19.0, 19.0, 19.0, 19.0, 19.0, 19.0, 19.0, 19.0, 19.0, 19.0, 18.0, 18.0, 18.0, 18.0, 18.0, 18.0, 18.0, 18.0, 17.0, 17.0, 17.0, 17.0, 17.0, 17.0, 17.0, 17.0, 17.0, 16.0, 16.0, 16.0, 16.0, 16.0, 16.0, 16.0, 16.0, 16.0, 15.0, 15.0, 15.0, 15.0, 15.0, 15.0, 15.0, 15.0, 14.0, 14.0, 14.0, 14.0, 14.0, 14.0, 14.0, 14.0, 14.0, 13.0, 13.0, 13.0, 13.0, 13.0, 13.0, 13.0, 13.0, 12.0, 12.0, 12.0, 12.0, 12.0, 12.0, 12.0, 13.0, 13.0, 13.0, 14.0, 14.0, 14.0, 14.0, 14.0, 15.0, 15.0, 15.0, 16.0, 16.0, 16.0, 16.0, 16.0, 17.0, 17.0, 17.0, 18.0, 18.0, 18.0, 18.0, 18.0, 19.0, 19.0, 19.0, 20.0, 20.0, 20.0, 20.0, 20.0, 21.0, 21.0, 21.0, 22.0, 22.0, 22.0, 22.0, 22.0, 23.0, 23.0, 23.0, 24.0, 24.0, 24.0, 24.0, 24.0, 25.0, 25.0, 25.0, 26.0, 26.0, 26.0, 26.0, 26.0, 27.0, 27.0, 27.0, 27.0, 27.0, 27.0, 27.0, 27.0, 27.0, 27.0, 27.0, 27.0, 27.0, 27.0, 27.0, 27.0, 27.0, 27.0, 27.0, 27.0, 27.0, 27.0, 27.0, 27.0, 27.0, 27.0, 27.0, 27.0, 27.0, 27.0, 27.0, 26.0, 26.0, 26.0, 26.0, 26.0, 26.0, 26.0, 26.0, 26.0, 26.0, 26.0, 26.0, 26.0, 26.0, 26.0, 26.0, 26.0, 26.0, 26.0, 26.0, 26.0, 26.0, 26.0, 26.0, 26.0, 26.0, 26.0, 26.0, 26.0, 26.0, 26.0, 26.0, 26.0, 26.0, 26.0, 26.0, 26.0, 26.0, 26.0, 26.0, 26.0, 26.0, 26.0, 26.0, 26.0, 26.0, 26.0, 26.0, 26.0, 26.0, 26.0, 26.0, 26.0, 26.0, 26.0, 26.0, 26.0, 26.0, 26.0, 26.0, 26.0, 26.0, 26.0, 26.0, 26.0, 26.0, 26.0, 26.0, 26.0, 26.0, 26.0, 26.0, 26.0, 26.0, 26.0, 26.0, 26.0, 26.0, 26.0, 26.0, 26.0, 26.0, 26.0, 26.0, 26.0, 26.0, 26.0, 26.0, 26.0, 26.0, 26.0, 26.0, 26.0, 25.0, 25.0, 25.0, 25.0, 24.0, 24.0, 24.0, 24.0, 24.0, 23.0, 23.0, 23.0, 23.0, 23.0, 22.0, 22.0, 22.0, 22.0, 21.0, 21.0, 21.0, 21.0, 21.0, 20.0, 20.0, 20.0, 20.0, 20.0, 19.0, 19.0, 19.0, 19.0, 18.0, 18.0, 18.0, 18.0, 18.0, 17.0, 17.0, 17.0, 17.0, 16.0, 16.0, 16.0, 16.0, 16.0, 15.0, 15.0, 15.0, 15.0, 15.0, 14.0, 14.0, 14.0, 14.0, 13.0, 13.0, 13.0, 13.0, 13.0, 13.0, 13.0, 14.0, 14.0, 14.0, 14.0, 14.0, 14.0, 14.0, 14.0, 15.0, 15.0, 15.0, 15.0, 15.0, 15.0, 15.0, 15.0, 15.0, 16.0, 16.0, 16.0, 16.0, 16.0, 16.0, 16.0, 16.0, 16.0, 17.0, 17.0, 17.0, 17.0, 17.0, 17.0, 17.0, 17.0, 18.0, 18.0, 18.0, 18.0, 18.0, 18.0, 18.0, 18.0, 18.0, 19.0, 19.0, 19.0, 19.0, 19.0, 19.0, 19.0, 19.0, 20.0, 20.0, 20.0, 20.0, 20.0 }; double[] data = new double[] { 13.0, 20.0, 26.0, 18.0 }; int shingleSize = 8; int numberOfTrees = 30; int sampleSize = 256; Precision precision = Precision.FLOAT_32; int baseDimensions = 1; long seed = -3095522926185205814L; int dimensions = baseDimensions * shingleSize; ThresholdedRandomCutForest forest = ThresholdedRandomCutForest.builder().compact(true).dimensions(dimensions) .randomSeed(seed).numberOfTrees(numberOfTrees).shingleSize(shingleSize).sampleSize(sampleSize) .precision(precision).parallelExecutionEnabled(false).outputAfter(32).internalShinglingEnabled(true) .anomalyRate(0.005).initialAcceptFraction(0.125).timeDecay(0.0001).boundingBoxCacheFraction(0) .forestMode(ForestMode.STANDARD).build(); double scoreSum = 0; for (double dataPoint : initialData) { AnomalyDescriptor result = forest.process(new double[] { dataPoint }, 0L); scoreSum += result.getRCFScore(); } // checking average score < 1 assert (scoreSum < initialData.length); ThresholdedRandomCutForestMapper mapper = new ThresholdedRandomCutForestMapper(); ThresholdedRandomCutForest second = mapper.toModel(mapper.toState(forest)); for (double dataPoint : data) { AnomalyDescriptor result = second.process(new double[] { dataPoint }, 0L); // average score jumps due to discontinuity, checking > 1 assert (result.getRCFScore() > 1.0); } } @ParameterizedTest @ValueSource(ints = { 1, 2, 3, 4, 5, 6 }) void smallGap(int gap) { int shingleSize = 4; int numberOfTrees = 50; int sampleSize = 256; Precision precision = Precision.FLOAT_32; int dataSize = 4 * sampleSize; // change this to try different number of attributes, // this parameter is not expected to be larger than 5 for this example int baseDimensions = 1; // 10 trials each int numTrials = 10; int correct = 0; for (int z = 0; z < numTrials; z++) { int dimensions = baseDimensions * shingleSize; TransformMethod transformMethod = TransformMethod.NORMALIZE; ThresholdedRandomCutForest forest = ThresholdedRandomCutForest.builder().compact(true) .dimensions(dimensions).randomSeed(0).numberOfTrees(numberOfTrees).shingleSize(shingleSize) .sampleSize(sampleSize).precision(precision).anomalyRate(0.01).forestMode(ForestMode.STANDARD) .transformMethod(transformMethod).build(); long seed = new Random().nextLong(); System.out.println("seed = " + seed); Random rng = new Random(seed); for (int i = 0; i < dataSize; i++) { double[] point = new double[] { 0.6 + 0.2 * (2 * rng.nextDouble() - 1) }; AnomalyDescriptor result = forest.process(point, 0L); } AnomalyDescriptor result = forest.process(new double[] { 11.2 }, 0L); for (int y = 0; y < gap; y++) { forest.process(new double[] { 0.6 + 0.2 * (2 * rng.nextDouble() - 1) }, 0L); } assert (forest.extrapolate(1, true, 1.0).rangeVector.values[0] < 1.0); assert (forest.extrapolate(1, true, 1.0).rangeVector.values[0] < 1.0); result = forest.process(new double[] { 10.0 }, 0L); if (result.getAnomalyGrade() > 0) { ++correct; } } assert (correct > 0.9 * numTrials); } @Test public void testAutoAdjustDoesNotSetAbsoluteThreshold() { int dimensions = 4; // any small positive value is fine long seed = new Random().nextLong(); // ── autoAdjust = false → setAbsoluteThreshold *is* invoked ThresholdedRandomCutForest manual = ThresholdedRandomCutForest.builder().dimensions(dimensions).randomSeed(seed) .shingleSize(1).autoAdjust(false).build(); // ── autoAdjust = true → setAbsoluteThreshold is *skipped* ThresholdedRandomCutForest auto = ThresholdedRandomCutForest.builder().dimensions(dimensions).randomSeed(seed) .shingleSize(1).autoAdjust(true).build(); boolean autoThresholdOff = !manual.getPredictorCorrector().getThresholders()[0].isAutoThreshold(); boolean autoThresholdOn = auto.getPredictorCorrector().getThresholders()[0].isAutoThreshold(); // the manual lower thresholder should turn off auto-adjusting assertTrue(autoThresholdOff); // … whereas the auto-adjusting build should *not* turn off auto-adjusting assertTrue(autoThresholdOn); } @Test void psqPrecondition_nullTimestamps() { ThresholdedRandomCutForest f = ThresholdedRandomCutForest.builder().dimensions(1).shingleSize(1).build(); double[][] data = { { 1.0 } }; long[] stamps = null; assertThrows(IllegalArgumentException.class, () -> f.processSequentially(data, stamps, d -> true)); } @Test void psqPrecondition_lengthMismatch() { ThresholdedRandomCutForest f = ThresholdedRandomCutForest.builder().dimensions(1).shingleSize(1).build(); double[][] data = { { 1.0 }, { 2.0 } }; long[] stamps = { 0L }; // shorter than data.length assertThrows(IllegalArgumentException.class, () -> f.processSequentially(data, stamps, d -> true)); } @Test void psqPrecondition_notAscending() { ThresholdedRandomCutForest f = ThresholdedRandomCutForest.builder().dimensions(1).shingleSize(1).build(); double[][] data = { { 1.0 }, { 2.0 } }; long[] stamps = { 1L, 0L }; // 2nd stamp ≤ 1st assertThrows(IllegalArgumentException.class, () -> f.processSequentially(data, stamps, d -> true)); } @Test void psqLoop_nonUniformLengths() { ThresholdedRandomCutForest f = ThresholdedRandomCutForest.builder().dimensions(1).shingleSize(1).build(); // second row has the wrong length double[][] data = { { 1.0 }, { 2.0, 3.0 } }; long[] stamps = { 0L, 1L }; assertThrows(IllegalArgumentException.class, () -> f.processSequentially(data, stamps, d -> true)); } /** * Filter rejects everything → returned list must be empty even after warm-up. */ @Test void psqValidButFilterRejectsAll() { int warmup = 450; // > 400 to guarantee outputReady int total = warmup + 3; double[][] data = new double[total][1]; long[] stamps = new long[total]; // 450 normal points (value 1.0) + 3 more normal points for (int i = 0; i < total; i++) { data[i][0] = 1.0; stamps[i] = i; // strictly ascending } ThresholdedRandomCutForest f = ThresholdedRandomCutForest.builder().dimensions(1).shingleSize(1).build(); // filter ALWAYS returns false List out = f.processSequentially(data, stamps, d -> false); assertTrue(out.isEmpty(), "filter rejects all so list must be empty"); } @Test void psqCacheToggle_path() { int warmup = 500; int total = warmup + 3; double[][] data = new double[total][1]; long[] stamps = new long[total]; // 500 benign points (≈1.0), then a spike (20.0), then two benign points for (int i = 0; i < warmup; i++) { data[i][0] = 1.0 + 0.05 * ((i % 5) - 2); // tiny noise stamps[i] = i; } data[warmup][0] = 20.0; // clear outlier data[warmup + 1][0] = 1.0; data[warmup + 2][0] = 1.0; stamps[warmup] = warmup; stamps[warmup + 1] = warmup + 1; stamps[warmup + 2] = warmup + 2; ThresholdedRandomCutForest f = ThresholdedRandomCutForest.builder().dimensions(1).shingleSize(1) .boundingBoxCacheFraction(0) // ensures cacheDisabled == true .build(); assertEquals(0.0, f.getForest().getBoundingBoxCacheFraction(), 1e-10); List out = f.processSequentially(data, stamps, d -> d.getAnomalyGrade() > 0); /* * Expectations ───────────── 1. The spike should raise at least one descriptor * with grade>0. 2. The finally-block must restore the cache fraction to 0. */ assertFalse(out.isEmpty(), "spike should be detected as anomaly"); assertEquals(0.0, f.getForest().getBoundingBoxCacheFraction(), 1e-10); } @Test void psqEmptyDataReturnsEmpty() { ThresholdedRandomCutForest f = ThresholdedRandomCutForest.builder().dimensions(1).shingleSize(1).build(); List out1 = f.processSequentially(new double[0][0], new long[0], d -> true); assertTrue(out1.isEmpty()); List out2 = f.processSequentially(null, null, d -> true); assertTrue(out2.isEmpty()); } @Test void testProcessSequentiallyWithMissingValues() { ThresholdedRandomCutForest f = ThresholdedRandomCutForest.builder().dimensions(2).shingleSize(1).build(); double[][] data = { { 1.0, Double.NaN }, { 3.0, 4.0 }, { Double.NaN, 5.0 }, { Double.NaN, Double.NaN } }; long[] stamps = { 10L, 20L, 30L, 40L }; List descriptors = f.processSequentially(data, stamps, d -> true); assertEquals(4, descriptors.size()); AnomalyDescriptor first = descriptors.get(0); assertEquals(10L, first.getInputTimestamp()); assertArrayEquals(new double[] { 1.0, Double.NaN }, first.getCurrentInput()); assertNotNull(first.getMissingValues()); assertArrayEquals(new int[] { 1 }, first.getMissingValues()); AnomalyDescriptor second = descriptors.get(1); assertEquals(20L, second.getInputTimestamp()); assertArrayEquals(new double[] { 3.0, 4.0 }, second.getCurrentInput()); assertNull(second.getMissingValues()); AnomalyDescriptor third = descriptors.get(2); assertEquals(30L, third.getInputTimestamp()); assertArrayEquals(new double[] { Double.NaN, 5.0 }, third.getCurrentInput()); assertNotNull(third.getMissingValues()); assertArrayEquals(new int[] { 0 }, third.getMissingValues()); AnomalyDescriptor fourth = descriptors.get(3); assertEquals(40L, fourth.getInputTimestamp()); assertArrayEquals(new double[] { Double.NaN, Double.NaN }, fourth.getCurrentInput()); assertNotNull(fourth.getMissingValues()); assertArrayEquals(new int[] { 0, 1 }, fourth.getMissingValues()); } } ================================================ FILE: Java/parkservices/src/test/java/com/amazon/randomcutforest/parkservices/TransformTest.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.parkservices; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertTrue; import java.util.Random; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.EnumSource; import com.amazon.randomcutforest.config.TransformMethod; import com.amazon.randomcutforest.testutils.ShingledMultiDimDataWithKeys; public class TransformTest { @ParameterizedTest @EnumSource(TransformMethod.class) public void AnomalyTest(TransformMethod method) { int sampleSize = 256; long seed = new Random().nextLong(); System.out.println(" seed " + seed); Random rng = new Random(seed); int numTrials = 10; int length = 40 * sampleSize; int totalcount = 0; for (int i = 0; i < numTrials; i++) { int numberOfTrees = 30 + rng.nextInt(20); int outputAfter = 32 + rng.nextInt(50); // shingleSize 1 is not recommended for complicated input // The test sets alertOnce(true) to suppress cascades after a single injected spike. // Current suppression only triggers for overlapping shingles: gap < shingleSize // (in PredictorCorrector.detect), so “late” follow-on spikes (gap ≥ shingleSize) // still raise grades. // If shingleSize is small (e.g., 2), gap is small, anomaly would not be suppressed, // may cause totalcount > numTrials. int shingleSize = 3 + rng.nextInt(15); int baseDimensions = 1 + rng.nextInt(5); int dimensions = baseDimensions * shingleSize; long forestSeed = rng.nextLong(); System.out.println(" forestSeed " + forestSeed + " method " + method + " seed " + seed + " outputAfter " + outputAfter + " shingleSize " + shingleSize + " baseDimensions " + baseDimensions + " dimensions " + dimensions + " numberOfTrees " + numberOfTrees + " rng " + rng + " i " + i + " shingleSize " + shingleSize + " rng.nextLong() "); ThresholdedRandomCutForest first = new ThresholdedRandomCutForest.Builder<>().dimensions(dimensions) .numberOfTrees(numberOfTrees).randomSeed(forestSeed).outputAfter(outputAfter).alertOnce(true) .transformMethod(method).internalShinglingEnabled(true).shingleSize(shingleSize).build(); int count = 0; double[] point = new double[baseDimensions]; double[] anomalyPoint = new double[baseDimensions]; for (int j = 0; j < baseDimensions; j++) { point[j] = 50 - rng.nextInt(100); int sign = (rng.nextDouble() < 0.5) ? -1 : 1; anomalyPoint[j] = point[j] + sign * (10 - rng.nextInt(5)); } int anomalyAt = outputAfter + rng.nextInt(length / 2); for (int j = 0; j < anomalyAt; j++) { AnomalyDescriptor firstResult = first.process(point, 0L); if (firstResult.getAnomalyGrade() > 0) { ++count; } } assertEquals(0, count); assertTrue(first.process(anomalyPoint, 0L).getAnomalyGrade() > 0); for (int j = anomalyAt + 1; j < length; j++) { AnomalyDescriptor firstResult = first.process(point, 0L); if (firstResult.getAnomalyGrade() > 0) { ++count; } } // differencing introduces cascades totalcount += count; } System.out.println(totalcount); int finalTotalcount = totalcount; assertTrue( totalcount < numTrials || method == TransformMethod.DIFFERENCE || method == TransformMethod.NORMALIZE_DIFFERENCE, () -> String.format( "Assertion failed: totalcount=%d, numTrials=%d, method=%s, sampleSize=%d, length=%d, seed=%d", finalTotalcount, numTrials, method, sampleSize, length, seed)); } @ParameterizedTest @EnumSource(value = TransformMethod.class, names = { "NONE", "NORMALIZE" }) public void AnomalyTestSine1D(TransformMethod method) { int sampleSize = 256; long seed = new Random().nextLong(); System.out.println(" seed " + seed); Random rng = new Random(seed); int numTrials = 50; int length = 4 * sampleSize; int found = 0; int count = 0; double grade = 0; for (int i = 0; i < numTrials; i++) { int numberOfTrees = 50 + rng.nextInt(20); int outputAfter = 64 + rng.nextInt(50); int shingleSize = 8; int baseDimensions = 1; // multiple dimensions would have anti-correlations induced by // differring periods int dimensions = baseDimensions * shingleSize; long forestSeed = rng.nextLong(); ThresholdedRandomCutForest first = new ThresholdedRandomCutForest.Builder<>().dimensions(dimensions) .numberOfTrees(numberOfTrees).randomSeed(forestSeed).outputAfter(outputAfter) .transformMethod(method).internalShinglingEnabled(true).shingleSize(shingleSize).build(); double[][] data = ShingledMultiDimDataWithKeys.getMultiDimData(length, 50, 100, 0, rng.nextLong(), baseDimensions, 0, false).data; int anomalyAt = outputAfter + rng.nextInt(length / 2); for (int j = 0; j < baseDimensions; j++) { int sign = (rng.nextDouble() < 0.5) ? -1 : 1; // large obvious spike data[anomalyAt][j] += sign * 100; } for (int j = 0; j < length; j++) { AnomalyDescriptor firstResult = first.process(data[j], 0L); if (firstResult.getAnomalyGrade() > 0) { // detection can be late if (j + firstResult.getRelativeIndex() == anomalyAt) { ++found; } ++count; grade += firstResult.getAnomalyGrade(); } } } System.out.println(found); // catch anomalies 80% of the time assertTrue(found > 0.8 * numTrials); // precision is not terrible assertTrue(count < 2 * numTrials); // average grade is closer to found assertTrue(grade < 1.5 * numTrials); } @ParameterizedTest @EnumSource(value = TransformMethod.class, names = { "NORMALIZE", "NORMALIZE_DIFFERENCE", "DIFFERENCE" }) public void RCFCastTest(TransformMethod method) { int sampleSize = 256; long seed = new Random().nextLong(); System.out.println(" seed " + seed); Random rng = new Random(seed); int numTrials = 1; int length = sampleSize / 2; int forecastHorizon = 2; for (int i = 0; i < numTrials; i++) { int numberOfTrees = 30 + rng.nextInt(20); int outputAfter = 32 + rng.nextInt(50); // shingleSize 1 is not recommended for complicated input int shingleSize = 4 + rng.nextInt(5); int baseDimensions = 1; int offset = rng.nextInt(10); int dimensions = baseDimensions * shingleSize; RCFCaster first = new RCFCaster.Builder().dimensions(dimensions).numberOfTrees(numberOfTrees).randomSeed(0) .outputAfter(outputAfter).alertOnce(true).forecastHorizon(forecastHorizon).transformMethod(method) .internalShinglingEnabled(true).shingleSize(shingleSize).build(); for (int j = 0; j < length; j++) { ForecastDescriptor firstResult = first.process(new double[] { j + offset }, 0L); if (j >= outputAfter - 1) { for (int y = 0; y < forecastHorizon; y++) { assertTrue(Math.abs( firstResult.getTimedForecast().rangeVector.values[y] - (j + offset + 1 + y)) < 0.3); } } } } } } ================================================ FILE: Java/parkservices/src/test/java/com/amazon/randomcutforest/parkservices/calibration/ErrorHandlerTest.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.parkservices.calibration; import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertThrows; import java.util.Random; import org.junit.jupiter.api.Test; import com.amazon.randomcutforest.parkservices.config.Calibration; import com.amazon.randomcutforest.returntypes.RangeVector; import com.amazon.randomcutforest.statistics.Deviation; public class ErrorHandlerTest { @Test public void errorHandlerConstructorTest() { ErrorHandler.Builder builder = new ErrorHandler.Builder(); // builder().compact(true).dimensions(dimensions).randomSeed(seed + 1) // .numberOfTrees(numberOfTrees).shingleSize(shingleSize).sampleSize(sampleSize) // .internalShinglingEnabled(true).precision(precision).anomalyRate(0.01).forestMode(ForestMode.STANDARD) // .transformMethod(transformMethod).outputAfter(outputAfter).forecastHorizon(forecastHorizon) // .calibration(calibration).errorHorizon(errorHorizon).initialAcceptFraction(0.125); assertThrows(IllegalArgumentException.class, () -> new ErrorHandler(builder)); builder.errorHorizon(1).forecastHorizon(2); assertThrows(IllegalArgumentException.class, () -> new ErrorHandler(builder)); builder.errorHorizon(2).forecastHorizon(2); assertThrows(IllegalArgumentException.class, () -> new ErrorHandler(builder)); builder.dimensions(1); assertDoesNotThrow(() -> new ErrorHandler(builder)); builder.errorHorizon(10000); assertThrows(IllegalArgumentException.class, () -> new ErrorHandler(builder)); } @Test public void testCalibrate() { ErrorHandler e = ErrorHandler.builder().errorHorizon(2).forecastHorizon(2).dimensions(2).build(); assertThrows(IllegalArgumentException.class, () -> e.calibrate(new double[2], Calibration.SIMPLE, new RangeVector(5))); RangeVector r = new RangeVector(4); e.sequenceIndex = 5; e.lastDataDeviations = new float[] { 1.0f, 1.3f }; float v = new Random().nextFloat(); r.shift(0, v); assertThrows(IllegalArgumentException.class, () -> e.calibrate(new double[1], Calibration.SIMPLE, new RangeVector(r))); e.calibrate(new double[2], Calibration.SIMPLE, new RangeVector(r)); assertEquals(r.values[0], v); e.calibrate(new double[2], Calibration.NONE, r); assertEquals(r.values[0], v); assertEquals(r.upper[0], v); assertEquals(r.values[1], 0); e.lastDataDeviations = new float[] { v + 1.0f, 1.3f }; e.calibrate(new double[2], Calibration.MINIMAL, r); assertEquals(r.values[0], v); assertEquals(r.values[1], 0); } @Test public void testSerializedConstructor() { assertThrows(IllegalArgumentException.class, () -> new ErrorHandler(0, 0, 0, 0, 0, null, null, null, null, null, null)); assertThrows(IllegalArgumentException.class, () -> new ErrorHandler(0, 1, 0, 0, 0, null, null, null, null, null, null)); assertThrows(IllegalArgumentException.class, () -> new ErrorHandler(1, 1, 0, 0, 0, null, null, null, null, null, null)); assertThrows(IllegalArgumentException.class, () -> new ErrorHandler(1, 1, -1, 0, 1, null, null, null, null, null, null)); assertThrows(IllegalArgumentException.class, () -> new ErrorHandler(1, 1, 0, 0, 1, null, null, null, null, null, null)); assertThrows(IllegalArgumentException.class, () -> new ErrorHandler(1, 1, 0, 0.1, 1, null, null, null, new Deviation[2], null, null)); assertThrows(IllegalArgumentException.class, () -> new ErrorHandler(1, 1, 0, 0.1, 1, null, null, new double[1], new Deviation[3], null, null)); assertThrows(IllegalArgumentException.class, () -> new ErrorHandler(1, 1, 0, 0.1, 1, null, new float[0], new double[2], new Deviation[3], null, null)); Deviation[] deviations = new Deviation[3]; deviations[0] = deviations[1] = deviations[2] = new Deviation(0); assertThrows(IllegalArgumentException.class, () -> new ErrorHandler(1, 1, 0, 0.1, 1, new float[2], new float[1], new double[2], deviations, null, null)); assertDoesNotThrow(() -> new ErrorHandler(1, 1, 0, 0.1, 1, new float[0], new float[1], new double[2], deviations, null, null)); } } ================================================ FILE: Java/parkservices/src/test/java/com/amazon/randomcutforest/parkservices/state/RCFCasterMapperTest.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.parkservices.state; import static org.junit.jupiter.api.Assertions.assertArrayEquals; import static org.junit.jupiter.api.Assertions.assertEquals; import java.util.Random; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.CsvSource; import com.amazon.randomcutforest.config.TransformMethod; import com.amazon.randomcutforest.parkservices.ForecastDescriptor; import com.amazon.randomcutforest.parkservices.RCFCaster; import com.amazon.randomcutforest.parkservices.config.Calibration; import com.amazon.randomcutforest.returntypes.DiVector; import com.amazon.randomcutforest.returntypes.RangeVector; public class RCFCasterMapperTest { @ParameterizedTest @CsvSource({ "SIMPLE,1", "MINIMAL,1", "NONE,1", "SIMPLE,2", "MINIMAL,2", "NONE,2" }) public void testRoundTripStandardShingleSizeEight(String calibrationString, int inputLength) { int shingleSize = 8; int dimensions = inputLength * shingleSize; int forecastHorizon = shingleSize * 3; for (int trials = 0; trials < 1; trials++) { long seed = new Random().nextLong(); System.out.println(" seed " + seed); // note shingleSize == 8 RCFCaster first = RCFCaster.builder().dimensions(dimensions).randomSeed(seed).internalShinglingEnabled(true) .anomalyRate(0.01).shingleSize(shingleSize).calibration(Calibration.MINIMAL) .forecastHorizon(forecastHorizon).calibration(Calibration.valueOf(calibrationString)) .transformMethod(TransformMethod.NORMALIZE).build(); Random r = new Random(seed); for (int i = 0; i < 2000 + r.nextInt(1000); i++) { double[] point = r.ints(inputLength, 0, 50).asDoubleStream().toArray(); first.process(point, 0L); } // serialize + deserialize RCFCasterMapper mapper = new RCFCasterMapper(); RCFCaster second = mapper.toModel(mapper.toState(first)); assertArrayEquals(first.getErrorHandler().getIntervalPrecision(), second.getErrorHandler().getIntervalPrecision(), 1e-6f); assertArrayEquals(first.getErrorHandler().getErrorRMSE().high, second.getErrorHandler().getErrorRMSE().high, 1e-6f); assertArrayEquals(first.getErrorHandler().getErrorRMSE().low, second.getErrorHandler().getErrorRMSE().low, 1e-6f); assertArrayEquals(first.getErrorHandler().getErrorDistribution().values, second.getErrorHandler().getErrorDistribution().values, 1e-6f); assertArrayEquals(first.getErrorHandler().getErrorDistribution().upper, second.getErrorHandler().getErrorDistribution().upper, 1e-6f); assertArrayEquals(first.getErrorHandler().getErrorDistribution().lower, second.getErrorHandler().getErrorDistribution().lower, 1e-6f); // update re-instantiated forest for (int i = 0; i < 100; i++) { double[] point = r.ints(inputLength, 0, 50).asDoubleStream().toArray(); ForecastDescriptor firstResult = first.process(point, 0L); ForecastDescriptor secondResult = second.process(point, 0L); assertEquals(firstResult.getDataConfidence(), secondResult.getDataConfidence(), 1e-10); verifyForecast(firstResult, secondResult, inputLength); } } } void verifyForecast(ForecastDescriptor firstResult, ForecastDescriptor secondResult, int inputLength) { RangeVector firstForecast = firstResult.getTimedForecast().rangeVector; RangeVector secondForecast = secondResult.getTimedForecast().rangeVector; assertArrayEquals(firstForecast.values, secondForecast.values, 1e-6f); assertArrayEquals(firstForecast.upper, secondForecast.upper, 1e-6f); assertArrayEquals(firstForecast.lower, secondForecast.lower, 1e-6f); float[] firstErrorP50 = firstResult.getObservedErrorDistribution().values; float[] secondErrorP50 = secondResult.getObservedErrorDistribution().values; assertArrayEquals(firstErrorP50, secondErrorP50, 1e-6f); float[] firstUpperError = firstResult.getObservedErrorDistribution().upper; float[] secondUpperError = secondResult.getObservedErrorDistribution().upper; assertArrayEquals(firstUpperError, secondUpperError, 1e-6f); float[] firstLowerError = firstResult.getObservedErrorDistribution().lower; float[] secondLowerError = secondResult.getObservedErrorDistribution().lower; assertArrayEquals(firstLowerError, secondLowerError, 1e-6f); DiVector firstRmse = firstResult.getErrorRMSE(); DiVector secondRmse = secondResult.getErrorRMSE(); assertArrayEquals(firstRmse.high, secondRmse.high, 1e-6); assertArrayEquals(firstRmse.low, secondRmse.low, 1e-6); assertArrayEquals(firstResult.getErrorMean(), secondResult.getErrorMean(), 1e-6f); assertArrayEquals(firstResult.getIntervalPrecision(), secondResult.getIntervalPrecision(), 1e-6f); } @ParameterizedTest @CsvSource({ "SIMPLE,1", "MINIMAL,1", "NONE,1", "SIMPLE,2", "MINIMAL,2", "NONE,2" }) public void testNotFullyInitialized(String calibrationString, int inputLength) { int shingleSize = 8; int dimensions = inputLength * shingleSize; int forecastHorizon = shingleSize * 3; int outputAfter = 32; for (int trials = 0; trials < 10; trials++) { long seed = new Random().nextLong(); System.out.println(" seed " + seed); // note shingleSize == 8 RCFCaster first = RCFCaster.builder().dimensions(dimensions).randomSeed(seed).internalShinglingEnabled(true) .anomalyRate(0.01).shingleSize(shingleSize).calibration(Calibration.valueOf(calibrationString)) .forecastHorizon(forecastHorizon).transformMethod(TransformMethod.NORMALIZE) .outputAfter(outputAfter).build(); Random r = new Random(); for (int i = 0; i < new Random().nextInt(outputAfter); i++) { double[] point = r.ints(inputLength, 0, 50).asDoubleStream().toArray(); RCFCasterMapper mapper = new RCFCasterMapper(); RCFCaster shadow = mapper.toModel(mapper.toState(first)); ForecastDescriptor a = first.process(point, 0L); ForecastDescriptor b = shadow.process(point, 0L); assertEquals(a.getRCFScore(), b.getRCFScore(), 1e-6); first.process(point, 0L); } // serialize + deserialize RCFCasterMapper mapper = new RCFCasterMapper(); RCFCaster second = mapper.toModel(mapper.toState(first)); // update re-instantiated forest for (int i = 0; i < 100; i++) { double[] point = r.ints(inputLength, 0, 50).asDoubleStream().toArray(); ForecastDescriptor firstResult = first.process(point, 0L); ForecastDescriptor secondResult = second.process(point, 0L); assertEquals(firstResult.getDataConfidence(), secondResult.getDataConfidence(), 1e-10); verifyForecast(firstResult, secondResult, 1); } } } } ================================================ FILE: Java/parkservices/src/test/java/com/amazon/randomcutforest/parkservices/state/ThresholdedRandomCutForestMapperTest.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.parkservices.state; import static com.amazon.randomcutforest.preprocessor.Preprocessor.copyAtEnd; import static com.amazon.randomcutforest.preprocessor.Preprocessor.shiftLeft; import static org.junit.jupiter.api.Assertions.assertArrayEquals; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertNull; import java.util.Random; import java.util.stream.Stream; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; import org.junit.jupiter.params.provider.EnumSource; import org.junit.jupiter.params.provider.MethodSource; import org.junit.jupiter.params.provider.ValueSource; import com.amazon.randomcutforest.RandomCutForest; import com.amazon.randomcutforest.config.ForestMode; import com.amazon.randomcutforest.config.ImputationMethod; import com.amazon.randomcutforest.config.TransformMethod; import com.amazon.randomcutforest.parkservices.AnomalyDescriptor; import com.amazon.randomcutforest.parkservices.ThresholdedRandomCutForest; import com.amazon.randomcutforest.parkservices.returntypes.RCFComputeDescriptor; import com.amazon.randomcutforest.returntypes.TimedRangeVector; import com.amazon.randomcutforest.state.RandomCutForestMapper; import com.amazon.randomcutforest.testutils.MultiDimDataWithKey; import com.amazon.randomcutforest.testutils.ShingledMultiDimDataWithKeys; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; public class ThresholdedRandomCutForestMapperTest { @Test public void testRoundTripStandardShingleSizeOne() { int dimensions = 10; for (int trials = 0; trials < 1; trials++) { long seed = new Random().nextLong(); RandomCutForest.Builder builder = RandomCutForest.builder().dimensions(dimensions).randomSeed(seed); // note shingleSize == 1 ThresholdedRandomCutForest first = new ThresholdedRandomCutForest.Builder<>().dimensions(dimensions) .randomSeed(seed).internalShinglingEnabled(true).anomalyRate(0.01).build(); ThresholdedRandomCutForest second = new ThresholdedRandomCutForest.Builder<>().dimensions(dimensions) .randomSeed(seed).anomalyRate(0.01).forestMode(ForestMode.STANDARD).internalShinglingEnabled(false) .build(); RandomCutForest forest = builder.build(); Random r = new Random(); for (int i = 0; i < 2000 + new Random().nextInt(1000); i++) { double[] point = r.ints(dimensions, 0, 50).asDoubleStream().toArray(); AnomalyDescriptor firstResult = first.process(point, 0L); AnomalyDescriptor secondResult = second.process(point, 0L); assertEquals(firstResult.getDataConfidence(), secondResult.getDataConfidence(), 1e-10); assertEquals(firstResult.getRCFScore(), secondResult.getRCFScore(), 1e-10); assertEquals(firstResult.getRCFScore(), forest.getAnomalyScore(point), 1e-10); forest.update(point); } // serialize + deserialize ThresholdedRandomCutForestMapper mapper = new ThresholdedRandomCutForestMapper(); ThresholdedRandomCutForest third = mapper.toModel(mapper.toState(second)); // update re-instantiated forest for (int i = 0; i < 100; i++) { double[] point = r.ints(dimensions, 0, 50).asDoubleStream().toArray(); AnomalyDescriptor firstResult = first.process(point, 0L); AnomalyDescriptor secondResult = second.process(point, 0L); AnomalyDescriptor thirdResult = third.process(point, 0L); double score = forest.getAnomalyScore(point); assertEquals(score, firstResult.getRCFScore(), 1e-10); assertEquals(score, secondResult.getRCFScore(), 1e-10); assertEquals(score, thirdResult.getRCFScore(), 1e-10); assertEquals(firstResult.getDataConfidence(), secondResult.getDataConfidence(), 1e-10); forest.update(point); } } } @ParameterizedTest @ValueSource(booleans = { true, false }) public void testConversions(boolean internal) { int dimensions = 10; int shingleSize = 2; for (int trials = 0; trials < 5; trials++) { long seed = new Random().nextLong(); System.out.println("Seed " + seed); RandomCutForest forest = RandomCutForest.builder().dimensions(dimensions).internalShinglingEnabled(internal) .shingleSize(shingleSize).randomSeed(seed).build(); ThresholdedRandomCutForest first = new ThresholdedRandomCutForest.Builder<>().dimensions(dimensions) .randomSeed(seed).internalShinglingEnabled(internal).shingleSize(shingleSize).anomalyRate(0.01) .build(); double[] shingle = new double[dimensions]; Random r = new Random(seed + 1); for (int i = 0; i < new Random(seed + 2).nextInt(1000); i++) { int length = dimensions / shingleSize; double[] point = r.ints(length, 0, 50).asDoubleStream().toArray(); shiftLeft(shingle, length); copyAtEnd(shingle, point); first.process((internal) ? point : shingle, 0L); forest.update((internal) ? point : shingle); } RandomCutForestMapper mapper = new RandomCutForestMapper(); mapper.setSaveExecutorContextEnabled(true); mapper.setSaveTreeStateEnabled(true); mapper.setPartialTreeStateEnabled(true); RandomCutForest copyForest = mapper.toModel(mapper.toState(forest)); ThresholdedRandomCutForest second = new ThresholdedRandomCutForest(copyForest, 0.01, null, first.getPreprocessor().getShingledInput()); for (int i = 0; i < new Random(seed + 3).nextInt(1000); i++) { int length = dimensions / shingleSize; double[] point = r.ints(length, 0, 50).asDoubleStream().toArray(); shiftLeft(shingle, length); copyAtEnd(shingle, point); AnomalyDescriptor firstResult = first.process((internal) ? point : shingle, 0L); // second only accepts the shorter input // -- but note transformation is NONE as default AnomalyDescriptor secondResult = second.process(point, 0L); assertEquals(firstResult.getRCFScore(), secondResult.getRCFScore(), 1e-10); assertEquals(firstResult.getRCFScore(), forest.getAnomalyScore((internal) ? point : shingle), 1e-10); forest.update((internal) ? point : shingle); } // serialize + deserialize ThresholdedRandomCutForestMapper newMapper = new ThresholdedRandomCutForestMapper(); ThresholdedRandomCutForest third = newMapper.toModel(newMapper.toState(second)); // update re-instantiated forest for (int i = 0; i < 100; i++) { int length = dimensions / shingleSize; double[] point = r.ints(length, 0, 50).asDoubleStream().toArray(); shiftLeft(shingle, length); copyAtEnd(shingle, point); AnomalyDescriptor firstResult = first.process((internal) ? point : shingle, 0L); AnomalyDescriptor secondResult = second.process(point, 0L); AnomalyDescriptor thirdResult = third.process(point, 0L); double score = forest.getAnomalyScore((internal) ? point : shingle); assertEquals(score, firstResult.getRCFScore(), 1e-10); assertEquals(score, secondResult.getRCFScore(), 1e-10); assertEquals(score, thirdResult.getRCFScore(), 1e-10); assertEquals(firstResult.getDataConfidence(), thirdResult.getDataConfidence(), 1e-10); forest.update((internal) ? point : shingle); } } } @Test public void testRoundTripStandardShingled() throws JsonProcessingException { int sampleSize = 256; int baseDimensions = 2; int shingleSize = 4; int dimensions = baseDimensions * shingleSize; long seed = new Random().nextLong(); RandomCutForest.Builder builder = RandomCutForest.builder().dimensions(dimensions).randomSeed(seed); ThresholdedRandomCutForest first = new ThresholdedRandomCutForest.Builder<>().dimensions(dimensions) .randomSeed(seed).shingleSize(shingleSize).internalShinglingEnabled(false).anomalyRate(0.01).build(); ThresholdedRandomCutForest second = new ThresholdedRandomCutForest.Builder<>().dimensions(dimensions) .randomSeed(seed).shingleSize(shingleSize).internalShinglingEnabled(false).anomalyRate(0.01).build(); RandomCutForest forest = builder.build(); // thresholds should not affect scores double value = 0.75 + 0.5 * new Random().nextDouble(); first.setLowerThreshold(value); second.setLowerThreshold(value); MultiDimDataWithKey dataWithKeys = ShingledMultiDimDataWithKeys.generateShingledDataWithKey(10 * sampleSize, 50, shingleSize, baseDimensions, seed); for (double[] point : dataWithKeys.data) { AnomalyDescriptor firstResult = first.process(point, 0L); AnomalyDescriptor secondResult = second.process(point, 0L); assertEquals(firstResult.getRCFScore(), secondResult.getRCFScore(), 1e-10); assertEquals(firstResult.getRCFScore(), forest.getAnomalyScore(point), 1e-4); forest.update(point); } ObjectMapper jsonMapper = new ObjectMapper(); ThresholdedRandomCutForestMapper mapper = new ThresholdedRandomCutForestMapper(); String json = jsonMapper.writeValueAsString(mapper.toState(second)); ThresholdedRandomCutForest third = mapper .toModel(jsonMapper.readValue(json, ThresholdedRandomCutForestState.class)); MultiDimDataWithKey testData = ShingledMultiDimDataWithKeys.generateShingledDataWithKey(100, 50, shingleSize, baseDimensions, seed); // update re-instantiated forest for (double[] point : testData.data) { AnomalyDescriptor firstResult = first.process(point, 0L); AnomalyDescriptor secondResult = second.process(point, 0L); AnomalyDescriptor thirdResult = third.process(point, 0L); double score = forest.getAnomalyScore(point); assertEquals(score, firstResult.getRCFScore(), 1e-4); assertEquals(firstResult.getRCFScore(), secondResult.getRCFScore(), 1e-10); assertEquals(firstResult.getRCFScore(), thirdResult.getRCFScore(), 1e-10); assertEquals(firstResult.getDataConfidence(), thirdResult.getDataConfidence(), 1e-10); forest.update(point); } } @Test public void testRoundTripStandardShingledInternal() throws JsonProcessingException { int sampleSize = 256; int baseDimensions = 2; int shingleSize = 8; int dimensions = baseDimensions * shingleSize; long seed = new Random().nextLong(); System.out.println(" seed " + seed); RandomCutForest forest = RandomCutForest.builder().dimensions(dimensions).internalShinglingEnabled(true) .shingleSize(shingleSize).randomSeed(seed).build(); ThresholdedRandomCutForest first = new ThresholdedRandomCutForest.Builder<>().dimensions(dimensions) .randomSeed(seed).internalShinglingEnabled(true).shingleSize(shingleSize).anomalyRate(0.01) .autoAdjust(true).boundingBoxCacheFraction(0).build(); ThresholdedRandomCutForest second = new ThresholdedRandomCutForest.Builder<>().dimensions(dimensions) .randomSeed(seed).internalShinglingEnabled(true).shingleSize(shingleSize).anomalyRate(0.01) .autoAdjust(true).build(); double value = 0.75 + 0.5 * new Random().nextDouble(); first.setLowerThreshold(value); second.setLowerThreshold(value); MultiDimDataWithKey dataWithKeys = ShingledMultiDimDataWithKeys.getMultiDimData(10 * sampleSize, 50, 100, 5, seed, baseDimensions); long count = 0; for (double[] point : dataWithKeys.data) { AnomalyDescriptor firstResult = first.process(point, count); AnomalyDescriptor secondResult = second.process(point, count); ++count; assertEquals(firstResult.getRCFScore(), secondResult.getRCFScore(), 1e-10); assertEquals(firstResult.getRCFScore(), forest.getAnomalyScore(point), 1e-4); if (firstResult.getAnomalyGrade() > 0) { assertEquals(secondResult.getAnomalyGrade(), firstResult.getAnomalyGrade(), 1e-10); } forest.update(point); } ObjectMapper jsonMapper = new ObjectMapper(); ThresholdedRandomCutForestMapper mapper = new ThresholdedRandomCutForestMapper(); String json = jsonMapper.writeValueAsString(mapper.toState(second)); ThresholdedRandomCutForest third = mapper .toModel(jsonMapper.readValue(json, ThresholdedRandomCutForestState.class)); MultiDimDataWithKey testData = ShingledMultiDimDataWithKeys.getMultiDimData(100, 50, 100, 5, seed, baseDimensions); // update re-instantiated forest for (double[] point : testData.data) { AnomalyDescriptor firstResult = first.process(point, count); AnomalyDescriptor secondResult = second.process(point, count); AnomalyDescriptor thirdResult = third.process(point, count); ++count; double score = forest.getAnomalyScore(point); assertEquals(score, firstResult.getRCFScore(), 1e-4); assertEquals(firstResult.getRCFScore(), secondResult.getRCFScore(), 1e-10); assertEquals(firstResult.getRCFScore(), thirdResult.getRCFScore(), 1e-10); assertEquals(firstResult.getDataConfidence(), thirdResult.getDataConfidence(), 1e-10); forest.update(point); } TimedRangeVector one = first.extrapolate(10); TimedRangeVector two = second.extrapolate(10); assertArrayEquals(one.upperTimeStamps, two.upperTimeStamps); assertArrayEquals(one.lowerTimeStamps, two.lowerTimeStamps); assertArrayEquals(one.timeStamps, two.timeStamps); assertArrayEquals(one.rangeVector.values, two.rangeVector.values, 1e-6f); assertArrayEquals(one.rangeVector.upper, two.rangeVector.upper, 1e-6f); assertArrayEquals(one.rangeVector.lower, two.rangeVector.lower, 1e-6f); for (int j = 0; j < 10; j++) { assert (one.lowerTimeStamps[j] <= one.timeStamps[j]); assert (one.upperTimeStamps[j] >= one.timeStamps[j]); assert (one.timeStamps[j] == count + j); } } @ParameterizedTest @EnumSource(value = TransformMethod.class) public void testRoundTripStandardInitial(TransformMethod method) { int sampleSize = 256; int baseDimensions = 2; int shingleSize = 8; int dimensions = baseDimensions * shingleSize; long seed = new Random().nextLong(); ThresholdedRandomCutForest first = new ThresholdedRandomCutForest.Builder<>().dimensions(dimensions) .randomSeed(seed).internalShinglingEnabled(true).shingleSize(shingleSize).anomalyRate(0.01) .autoAdjust(true).transformMethod(method).build(); ThresholdedRandomCutForest second = new ThresholdedRandomCutForest.Builder<>().dimensions(dimensions) .randomSeed(seed).internalShinglingEnabled(true).shingleSize(shingleSize).anomalyRate(0.01) .autoAdjust(true).transformMethod(method).build(); MultiDimDataWithKey dataWithKeys = ShingledMultiDimDataWithKeys.getMultiDimData(sampleSize, 50, 100, 5, seed, baseDimensions); for (double[] point : dataWithKeys.data) { AnomalyDescriptor firstResult = first.process(point, 0L); AnomalyDescriptor secondResult = second.process(point, 0L); assertEquals(firstResult.getRCFScore(), secondResult.getRCFScore(), 1e-10); assertEquals(secondResult.getAnomalyGrade(), firstResult.getAnomalyGrade(), 1e-10); // serialize + deserialize ThresholdedRandomCutForestMapper mapper = new ThresholdedRandomCutForestMapper(); second = mapper.toModel(mapper.toState(second)); } } @ParameterizedTest @EnumSource(value = TransformMethod.class) public void testRoundTripStandard(TransformMethod method) { int sampleSize = 256; int baseDimensions = 1; int shingleSize = 8; int dimensions = baseDimensions * shingleSize; long seed = 0; new Random().nextLong(); ThresholdedRandomCutForest first = new ThresholdedRandomCutForest.Builder<>().dimensions(dimensions) .randomSeed(seed).internalShinglingEnabled(true).shingleSize(shingleSize).anomalyRate(0.01) .transformMethod(method).autoAdjust(true).boundingBoxCacheFraction(0).weights(new double[] { 1.0 }) .build(); ThresholdedRandomCutForest second = new ThresholdedRandomCutForest.Builder<>().dimensions(dimensions) .randomSeed(seed).internalShinglingEnabled(true).shingleSize(shingleSize).anomalyRate(0.01) .transformMethod(method).autoAdjust(true).weights(new double[] { 1.0 }).build(); MultiDimDataWithKey dataWithKeys = ShingledMultiDimDataWithKeys.getMultiDimData(10 * sampleSize, 50, 100, 5, seed, baseDimensions); for (double[] point : dataWithKeys.data) { AnomalyDescriptor firstResult = first.process(point, 0L); AnomalyDescriptor secondResult = second.process(point, 0L); assertEquals(firstResult.getRCFScore(), secondResult.getRCFScore(), 1e-10); if (firstResult.getAnomalyGrade() > 0) { assertEquals(secondResult.getAnomalyGrade(), firstResult.getAnomalyGrade(), 1e-10); } } // serialize + deserialize ThresholdedRandomCutForestMapper mapper = new ThresholdedRandomCutForestMapper(); ThresholdedRandomCutForest third = mapper.toModel(mapper.toState(second)); MultiDimDataWithKey testData = ShingledMultiDimDataWithKeys.getMultiDimData(100, 50, 100, 5, seed, baseDimensions); // update re-instantiated forest for (double[] point : testData.data) { AnomalyDescriptor firstResult = first.process(point, 0L); AnomalyDescriptor secondResult = second.process(point, 0L); AnomalyDescriptor thirdResult = third.process(point, 0L); assertEquals(firstResult.getRCFScore(), secondResult.getRCFScore(), 1e-10); assertEquals(firstResult.getRCFScore(), thirdResult.getRCFScore(), 1e-10); } } @ParameterizedTest @EnumSource(value = TransformMethod.class, names = { "WEIGHTED", "NORMALIZE", "NORMALIZE_DIFFERENCE", "DIFFERENCE", "SUBTRACT_MA" }) public void testRoundTripAugmentedInitial(TransformMethod method) { int sampleSize = 256; int baseDimensions = 2; int shingleSize = 8; int dimensions = baseDimensions * shingleSize; long seed = new Random().nextLong(); double value = 0.75 + 0.25 * new Random().nextDouble(); ThresholdedRandomCutForest first = new ThresholdedRandomCutForest.Builder<>().dimensions(dimensions) .randomSeed(seed).forestMode(ForestMode.TIME_AUGMENTED).internalShinglingEnabled(true) .shingleSize(shingleSize).transformMethod(method).anomalyRate(0.01).autoAdjust(true) .weights(new double[] { 1.0, 2.0 }).build(); ThresholdedRandomCutForest second = new ThresholdedRandomCutForest.Builder<>().dimensions(dimensions) .randomSeed(seed).forestMode(ForestMode.TIME_AUGMENTED).internalShinglingEnabled(true) .shingleSize(shingleSize).transformMethod(method).anomalyRate(0.01).autoAdjust(true) .weights(new double[] { 1.0, 2.0 }).build(); first.setLowerThreshold(value); second.setLowerThreshold(value); MultiDimDataWithKey dataWithKeys = ShingledMultiDimDataWithKeys.getMultiDimData(sampleSize, 50, 100, 5, seed, baseDimensions); for (double[] point : dataWithKeys.data) { AnomalyDescriptor firstResult = first.process(point, 0L); AnomalyDescriptor secondResult = second.process(point, 0L); assertEquals(firstResult.getRCFScore(), secondResult.getRCFScore(), 1e-10); assertEquals(secondResult.getAnomalyGrade(), firstResult.getAnomalyGrade(), 1e-10); // serialize + deserialize ThresholdedRandomCutForestMapper mapper = new ThresholdedRandomCutForestMapper(); second = mapper.toModel(mapper.toState(second)); } } @Test public void testRoundTripAugmentedInitialNone() { int sampleSize = 256; int baseDimensions = 2; int shingleSize = 8; int dimensions = baseDimensions * shingleSize; long seed = new Random().nextLong(); double value = 0.75 + 0.25 * new Random().nextDouble(); ThresholdedRandomCutForest first = new ThresholdedRandomCutForest.Builder<>().dimensions(dimensions) .randomSeed(seed).forestMode(ForestMode.TIME_AUGMENTED).internalShinglingEnabled(true) .shingleSize(shingleSize).transformMethod(TransformMethod.NONE).anomalyRate(0.01).autoAdjust(true) .weights(new double[] { 1.0, 1.0 }).build(); ThresholdedRandomCutForest second = new ThresholdedRandomCutForest.Builder<>().dimensions(dimensions) .randomSeed(seed).forestMode(ForestMode.TIME_AUGMENTED).internalShinglingEnabled(true) .shingleSize(shingleSize).transformMethod(TransformMethod.NONE).anomalyRate(0.01).autoAdjust(true) .weights(new double[] { 1.0, 1.0 }).build(); first.setLowerThreshold(value); second.setLowerThreshold(value); MultiDimDataWithKey dataWithKeys = ShingledMultiDimDataWithKeys.getMultiDimData(sampleSize, 50, 100, 5, seed, baseDimensions); for (double[] point : dataWithKeys.data) { AnomalyDescriptor firstResult = first.process(point, 0L); AnomalyDescriptor secondResult = second.process(point, 0L); assertEquals(firstResult.getRCFScore(), secondResult.getRCFScore(), 1e-10); assertEquals(secondResult.getAnomalyGrade(), firstResult.getAnomalyGrade(), 1e-10); // serialize + deserialize ThresholdedRandomCutForestMapper mapper = new ThresholdedRandomCutForestMapper(); second = mapper.toModel(mapper.toState(second)); } } @ParameterizedTest @EnumSource(value = TransformMethod.class) public void testRoundTripTimeAugmented(TransformMethod method) { int sampleSize = 256; int baseDimensions = 1; int shingleSize = 8; int dimensions = baseDimensions * shingleSize; long seed = new Random().nextLong(); double value = 0.75 + 0.25 * new Random().nextDouble(); ThresholdedRandomCutForest first = new ThresholdedRandomCutForest.Builder<>().dimensions(dimensions) .randomSeed(seed).forestMode(ForestMode.TIME_AUGMENTED).internalShinglingEnabled(true) .shingleSize(shingleSize).transformMethod(method).anomalyRate(0.01).autoAdjust(true) .weights(new double[] { 1.0 }).build(); ThresholdedRandomCutForest second = new ThresholdedRandomCutForest.Builder<>().dimensions(dimensions) .randomSeed(seed).forestMode(ForestMode.TIME_AUGMENTED).internalShinglingEnabled(true) .shingleSize(shingleSize).transformMethod(method).anomalyRate(0.01).autoAdjust(true) .weights(new double[] { 1.0 }).build(); first.setLowerThreshold(value); second.setLowerThreshold(value); Random r = new Random(); long count = 0; MultiDimDataWithKey dataWithKeys = ShingledMultiDimDataWithKeys.getMultiDimData(10 * sampleSize, 50, 100, 5, seed, baseDimensions); for (double[] point : dataWithKeys.data) { long stamp = 100 * count + r.nextInt(10) - 5; AnomalyDescriptor firstResult = first.process(point, stamp); AnomalyDescriptor secondResult = second.process(point, stamp); ++count; assertEquals(firstResult.getRCFScore(), secondResult.getRCFScore(), 1e-10); if (firstResult.getAnomalyGrade() > 0) { assertEquals(secondResult.getAnomalyGrade(), firstResult.getAnomalyGrade(), 1e-10); } } // serialize + deserialize ThresholdedRandomCutForestMapper mapper = new ThresholdedRandomCutForestMapper(); ThresholdedRandomCutForest third = mapper.toModel(mapper.toState(second)); MultiDimDataWithKey testData = ShingledMultiDimDataWithKeys.getMultiDimData(100, 50, 100, 5, seed, baseDimensions); // update re-instantiated forest for (double[] point : testData.data) { long stamp = 100 * count + r.nextInt(10) - 5; AnomalyDescriptor firstResult = first.process(point, 0L); AnomalyDescriptor secondResult = second.process(point, 0L); AnomalyDescriptor thirdResult = third.process(point, 0L); assertEquals(firstResult.getRCFScore(), secondResult.getRCFScore(), 1e-10); assertEquals(firstResult.getRCFScore(), thirdResult.getRCFScore(), 1e-10); assertEquals(firstResult.getAnomalyGrade(), thirdResult.getAnomalyGrade(), 1e-10); ++count; } } @ParameterizedTest @EnumSource(value = TransformMethod.class, names = { "WEIGHTED", "NORMALIZE", "NORMALIZE_DIFFERENCE", "DIFFERENCE", "SUBTRACT_MA" }) public void testRoundTripTimeAugmentedNormalize(TransformMethod method) { int sampleSize = 256; int baseDimensions = 2; int shingleSize = 4; int dimensions = baseDimensions * shingleSize; long seed = new Random().nextLong(); ThresholdedRandomCutForest first = ThresholdedRandomCutForest.builder().dimensions(dimensions).randomSeed(seed) .forestMode(ForestMode.TIME_AUGMENTED).normalizeTime(true).transformMethod(method) .internalShinglingEnabled(true).shingleSize(shingleSize).anomalyRate(0.01) .weights(new double[] { 1.0, 2.0 }).build(); ThresholdedRandomCutForest second = new ThresholdedRandomCutForest.Builder<>().dimensions(dimensions) .randomSeed(seed).forestMode(ForestMode.TIME_AUGMENTED).normalizeTime(true) .internalShinglingEnabled(true).transformMethod(method).shingleSize(shingleSize).anomalyRate(0.01) .weights(new double[] { 1.0, 2.0 }).build(); Random r = new Random(); long count = 0; MultiDimDataWithKey dataWithKeys = ShingledMultiDimDataWithKeys.getMultiDimData(10 * sampleSize, 50, 100, 5, seed, baseDimensions); for (double[] point : dataWithKeys.data) { long stamp = 1000 * count + r.nextInt(10) - 5; AnomalyDescriptor firstResult = first.process(point, stamp); AnomalyDescriptor secondResult = second.process(point, stamp); ++count; assertEquals(firstResult.getRCFScore(), secondResult.getRCFScore(), 1e-10); } // serialize + deserialize ThresholdedRandomCutForestMapper mapper = new ThresholdedRandomCutForestMapper(); ThresholdedRandomCutForest third = mapper.toModel(mapper.toState(second)); MultiDimDataWithKey testData = ShingledMultiDimDataWithKeys.getMultiDimData(100, 50, 100, 5, seed, baseDimensions); // update re-instantiated forest for (double[] point : testData.data) { long stamp = 100 * count + r.nextInt(10) - 5; AnomalyDescriptor firstResult = first.process(point, stamp); AnomalyDescriptor secondResult = second.process(point, stamp); AnomalyDescriptor thirdResult = third.process(point, stamp); assertEquals(firstResult.getRCFScore(), secondResult.getRCFScore(), 1e-10); assertEquals(firstResult.getRCFScore(), thirdResult.getRCFScore(), 1e-10); ++count; } } @Test public void testRoundTripTimeAugmentedNone() { int sampleSize = 256; int baseDimensions = 2; int shingleSize = 4; int dimensions = baseDimensions * shingleSize; long seed = new Random().nextLong(); ThresholdedRandomCutForest first = ThresholdedRandomCutForest.builder().dimensions(dimensions).randomSeed(seed) .forestMode(ForestMode.TIME_AUGMENTED).normalizeTime(true).transformMethod(TransformMethod.NONE) .internalShinglingEnabled(true).shingleSize(shingleSize).anomalyRate(0.01) .weights(new double[] { 1.0, 1.0 }).build(); ThresholdedRandomCutForest second = new ThresholdedRandomCutForest.Builder<>().dimensions(dimensions) .randomSeed(seed).forestMode(ForestMode.TIME_AUGMENTED).normalizeTime(true) .internalShinglingEnabled(true).transformMethod(TransformMethod.NONE).shingleSize(shingleSize) .anomalyRate(0.01).weights(new double[] { 1.0, 1.0 }).build(); Random r = new Random(); long count = 0; MultiDimDataWithKey dataWithKeys = ShingledMultiDimDataWithKeys.getMultiDimData(10 * sampleSize, 50, 100, 5, seed, baseDimensions); for (double[] point : dataWithKeys.data) { long stamp = 1000 * count + r.nextInt(10) - 5; AnomalyDescriptor firstResult = first.process(point, stamp); AnomalyDescriptor secondResult = second.process(point, stamp); ++count; assertEquals(firstResult.getRCFScore(), secondResult.getRCFScore(), 1e-10); } // serialize + deserialize ThresholdedRandomCutForestMapper mapper = new ThresholdedRandomCutForestMapper(); ThresholdedRandomCutForest third = mapper.toModel(mapper.toState(second)); MultiDimDataWithKey testData = ShingledMultiDimDataWithKeys.getMultiDimData(100, 50, 100, 5, seed, baseDimensions); // update re-instantiated forest for (double[] point : testData.data) { long stamp = 100 * count + r.nextInt(10) - 5; AnomalyDescriptor firstResult = first.process(point, stamp); AnomalyDescriptor secondResult = second.process(point, stamp); AnomalyDescriptor thirdResult = third.process(point, stamp); assertEquals(firstResult.getRCFScore(), secondResult.getRCFScore(), 1e-10); assertEquals(firstResult.getRCFScore(), thirdResult.getRCFScore(), 1e-10); ++count; } } @ParameterizedTest @MethodSource("args") public void testRoundTripImputeInitial(TransformMethod transformMethod, ImputationMethod imputationMethod) { int sampleSize = 256; int baseDimensions = 2; int shingleSize = 4; int dimensions = baseDimensions * shingleSize; long seed = new Random().nextLong(); System.out.println(seed); ThresholdedRandomCutForest first = new ThresholdedRandomCutForest.Builder<>().dimensions(dimensions) .randomSeed(seed).forestMode(ForestMode.STREAMING_IMPUTE).internalShinglingEnabled(true) .shingleSize(shingleSize).transformMethod(transformMethod).imputationMethod(imputationMethod) .fillValues(new double[] { 1.0, 2.0 }).anomalyRate(0.01).build(); ThresholdedRandomCutForest second = new ThresholdedRandomCutForest.Builder<>().dimensions(dimensions) .randomSeed(seed).forestMode(ForestMode.STREAMING_IMPUTE).internalShinglingEnabled(true) .shingleSize(shingleSize).transformMethod(transformMethod).imputationMethod(imputationMethod) .fillValues(new double[] { 1.0, 2.0 }).anomalyRate(0.01).build(); Random r = new Random(0); long count = 0; MultiDimDataWithKey dataWithKeys = ShingledMultiDimDataWithKeys.getMultiDimData(sampleSize, 50, 100, 5, seed, baseDimensions); for (double[] point : dataWithKeys.data) { if (r.nextDouble() > 0.1) { long stamp = 1000 * count + r.nextInt(10) - 5; AnomalyDescriptor firstResult = first.process(point, stamp); AnomalyDescriptor secondResult = second.process(point, stamp); assertEquals(firstResult.getRCFScore(), secondResult.getRCFScore(), 1e-10); } ++count; // serialize + deserialize ThresholdedRandomCutForestMapper mapper = new ThresholdedRandomCutForestMapper(); second = mapper.toModel(mapper.toState(second)); } } @ParameterizedTest @MethodSource("args") public void testRoundTripImpute(TransformMethod transformMethod, ImputationMethod imputationMethod) { int sampleSize = 256; int baseDimensions = 1; int shingleSize = 8; int dimensions = baseDimensions * shingleSize; long seed = new Random().nextLong(); ThresholdedRandomCutForest first = ThresholdedRandomCutForest.builder().dimensions(dimensions).randomSeed(seed) .forestMode(ForestMode.STREAMING_IMPUTE).internalShinglingEnabled(true).shingleSize(shingleSize) .transformMethod(transformMethod).imputationMethod(imputationMethod).fillValues(new double[] { 1.0 }) .anomalyRate(0.01).build(); ThresholdedRandomCutForest second = new ThresholdedRandomCutForest.Builder<>().dimensions(dimensions) .randomSeed(seed).forestMode(ForestMode.STREAMING_IMPUTE).internalShinglingEnabled(true) .shingleSize(shingleSize).transformMethod(transformMethod).imputationMethod(imputationMethod) .fillValues(new double[] { 1.0 }).anomalyRate(0.01).build(); Random r = new Random(); long count = 0; MultiDimDataWithKey dataWithKeys = ShingledMultiDimDataWithKeys.getMultiDimData(10 * sampleSize, 50, 100, 5, seed, baseDimensions); for (double[] point : dataWithKeys.data) { if (r.nextDouble() > 0.1) { long stamp = 1000 * count + r.nextInt(10) - 5; AnomalyDescriptor firstResult = first.process(point, stamp); AnomalyDescriptor secondResult = second.process(point, stamp); assertEquals(firstResult.getRCFScore(), secondResult.getRCFScore(), 1e-10); } ++count; } // serialize + deserialize ThresholdedRandomCutForestMapper mapper = new ThresholdedRandomCutForestMapper(); ThresholdedRandomCutForest third = mapper.toModel(mapper.toState(second)); MultiDimDataWithKey testData = ShingledMultiDimDataWithKeys.getMultiDimData(100, 50, 100, 5, seed, baseDimensions); // update re-instantiated forest for (double[] point : testData.data) { long stamp = 1000 * count + r.nextInt(10) - 5; AnomalyDescriptor firstResult = first.process(point, stamp); // AnomalyDescriptor secondResult = second.process(point, stamp); AnomalyDescriptor thirdResult = third.process(point, stamp); // assertEquals(firstResult.getRcfScore(), secondResult.getRcfScore(), 1e-10); assertEquals(firstResult.getRCFScore(), thirdResult.getRCFScore(), 1e-10); ++count; } } @Test public void testRoundTripLastDescriptor() { int dimensions = 2; long seed = new Random().nextLong(); ThresholdedRandomCutForest trcf = new ThresholdedRandomCutForest.Builder<>().dimensions(dimensions) .randomSeed(seed).build(); double[] point = { 1.0, Double.NaN }; long timestamp = 123L; trcf.process(point, timestamp, new int[] { 1 }); ThresholdedRandomCutForestMapper mapper = new ThresholdedRandomCutForestMapper(); ThresholdedRandomCutForestState state = mapper.toState(trcf); ThresholdedRandomCutForest deserializedTrcf = mapper.toModel(state); RCFComputeDescriptor deserializedDescriptor = deserializedTrcf.getPredictorCorrector().getLastDescriptor(); assertNotNull(deserializedDescriptor); assertArrayEquals(point, deserializedDescriptor.getCurrentInput()); assertEquals(timestamp, deserializedDescriptor.getInputTimestamp()); } @Test public void testRoundTripProcessSequentially() { int dimensions = 2; long seed = new Random().nextLong(); ThresholdedRandomCutForestMapper mapper = new ThresholdedRandomCutForestMapper(); // Case 1: Zero input ThresholdedRandomCutForest emptyTrcf = new ThresholdedRandomCutForest.Builder<>().dimensions(dimensions) .randomSeed(seed).build(); ThresholdedRandomCutForestState emptyState = mapper.toState(emptyTrcf); ThresholdedRandomCutForest deserializedEmptyTrcf = mapper.toModel(emptyState); assertNull(deserializedEmptyTrcf.getPredictorCorrector().getLastDescriptor()); // Case 2: 100 inputs ThresholdedRandomCutForest trcf = new ThresholdedRandomCutForest.Builder<>().dimensions(dimensions) .randomSeed(seed).build(); int numPoints = 100; double[][] data = new double[numPoints][dimensions]; long[] timestamps = new long[numPoints]; Random random = new Random(seed); for (int i = 0; i < numPoints; i++) { for (int j = 0; j < dimensions; j++) { data[i][j] = random.nextDouble(); } timestamps[i] = i * 100L; } // Set the last point to have a missing value data[numPoints - 1][dimensions - 1] = Double.NaN; trcf.processSequentially(data, timestamps, d -> true); ThresholdedRandomCutForestState state = mapper.toState(trcf); ThresholdedRandomCutForest deserializedTrcf = mapper.toModel(state); RCFComputeDescriptor deserializedDescriptor = deserializedTrcf.getPredictorCorrector().getLastDescriptor(); assertNotNull(deserializedDescriptor); double[] lastPoint = data[numPoints - 1]; long lastTimestamp = timestamps[numPoints - 1]; assertArrayEquals(lastPoint, deserializedDescriptor.getCurrentInput()); assertEquals(lastTimestamp, deserializedDescriptor.getInputTimestamp()); } static Stream args() { return transformMethodStream().flatMap( classParameter -> imputationMethod().map(testParameter -> Arguments.of(classParameter, testParameter))); } static Stream imputationMethod() { return Stream.of(ImputationMethod.values()); } static Stream transformMethodStream() { return Stream.of(TransformMethod.values()); } } ================================================ FILE: Java/parkservices/src/test/java/com/amazon/randomcutforest/parkservices/state/V2TRCFByteBase64Resource.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.parkservices.state; import lombok.Getter; @Getter public enum V2TRCFByteBase64Resource { TRCF_STATE_1("byte_base64_1.txt"), TRCF_STATE_2("byte_base64_2.txt"); private final String resource; V2TRCFByteBase64Resource(String resource) { this.resource = resource; } } ================================================ FILE: Java/parkservices/src/test/java/com/amazon/randomcutforest/parkservices/state/V2TRCFJsonResource.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.parkservices.state; import lombok.Getter; @Getter public enum V2TRCFJsonResource { TRCF_1("state_1.json"), TRCF_2("state_2.json"); private final String resource; V2TRCFJsonResource(String resource) { this.resource = resource; } } ================================================ FILE: Java/parkservices/src/test/java/com/amazon/randomcutforest/parkservices/state/V2TRCFToV3StateConverterTest.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.parkservices.state; import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.fail; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.nio.charset.StandardCharsets; import java.util.Base64; import java.util.Random; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.EnumSource; import com.amazon.randomcutforest.parkservices.ThresholdedRandomCutForest; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.MapperFeature; import com.fasterxml.jackson.databind.ObjectMapper; import io.protostuff.ProtostuffIOUtil; import io.protostuff.Schema; import io.protostuff.runtime.RuntimeSchema; public class V2TRCFToV3StateConverterTest { private ThresholdedRandomCutForestMapper trcfMapper = new ThresholdedRandomCutForestMapper(); @ParameterizedTest @EnumSource(V2TRCFJsonResource.class) public void testJson(V2TRCFJsonResource jsonResource) throws JsonProcessingException { String json = getStateFromFile(jsonResource.getResource()); assertNotNull(json); ObjectMapper mapper = new ObjectMapper(); mapper.configure(MapperFeature.ACCEPT_CASE_INSENSITIVE_PROPERTIES, true); ThresholdedRandomCutForestState state = mapper.readValue(json, ThresholdedRandomCutForestState.class); ThresholdedRandomCutForest forest = trcfMapper.toModel(state); Random r = new Random(0); for (int i = 0; i < 20000; i++) { double[] point = r.ints(forest.getForest().getDimensions(), 0, 50).asDoubleStream().toArray(); forest.process(point, 0L); } assertNotNull(forest); } @ParameterizedTest @EnumSource(V2TRCFByteBase64Resource.class) public void testByteBase64(V2TRCFByteBase64Resource byteBase64Resource) { String byteBase64 = getStateFromFile(byteBase64Resource.getResource()); assertNotNull(byteBase64); Schema trcfSchema = RuntimeSchema .getSchema(ThresholdedRandomCutForestState.class); byte[] bytes = Base64.getDecoder().decode(byteBase64); ThresholdedRandomCutForestState state = trcfSchema.newMessage(); ProtostuffIOUtil.mergeFrom(bytes, state, trcfSchema); ThresholdedRandomCutForest forest = trcfMapper.toModel(state); assertNotNull(forest); } private String getStateFromFile(String resourceFile) { try (InputStream is = V2TRCFToV3StateConverterTest.class.getResourceAsStream(resourceFile); BufferedReader rr = new BufferedReader(new InputStreamReader(is, StandardCharsets.UTF_8))) { StringBuilder b = new StringBuilder(); String line; while ((line = rr.readLine()) != null) { b.append(line); } return b.toString(); } catch (IOException e) { fail("Unable to load resource"); } return null; } } ================================================ FILE: Java/parkservices/src/test/java/com/amazon/randomcutforest/parkservices/threshold/BasicThresholderTest.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.parkservices.threshold; import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNotEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; import java.util.Random; import java.util.stream.Collectors; import java.util.stream.DoubleStream; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; import com.amazon.randomcutforest.config.TransformMethod; import com.amazon.randomcutforest.statistics.Deviation; public class BasicThresholderTest { @Test void scoreDifferencingTest() { BasicThresholder basicThresholder = new BasicThresholder(0.01); assertThrows(IllegalArgumentException.class, () -> { basicThresholder.setScoreDifferencing(-new Random().nextDouble()); }); assertThrows(IllegalArgumentException.class, () -> { basicThresholder.setScoreDifferencing(1 + 1e-10 + new Random().nextDouble()); }); assertDoesNotThrow(() -> basicThresholder.setScoreDifferencing(new Random().nextDouble())); } @Test void constructorTest() { BasicThresholder thresholder = new BasicThresholder(null); assertEquals(thresholder.getDeviations().length, 3); BasicThresholder thresholder2 = new BasicThresholder(new Deviation[] { new Deviation(0) }); assertNotNull(thresholder2.getSecondaryDeviation()); double[] list = new double[] { 1.0, 2.0, 3.0 }; BasicThresholder basicThresholder = new BasicThresholder( DoubleStream.of(list).boxed().collect(Collectors.toList()), 0.01); assertEquals(basicThresholder.getPrimaryDeviation().getCount(), 3); assertEquals(basicThresholder.getSecondaryDeviation().getCount(), 3); assertEquals(basicThresholder.getPrimaryDeviation().getMean(), 2, 1e-10); assertEquals(basicThresholder.getSecondaryDeviation().getMean(), 2, 1e-10); assertEquals(basicThresholder.getPrimaryDeviation().getDiscount(), 0.01, 1e-10); System.out.println(basicThresholder.count); assertFalse(basicThresholder.isDeviationReady()); basicThresholder.updatePrimary(0.0); basicThresholder.updatePrimary(0.0); System.out.println(basicThresholder.count); assertFalse(basicThresholder.isDeviationReady()); basicThresholder.setScoreDifferencing(0); assertFalse(basicThresholder.isDeviationReady()); basicThresholder.setMinimumScores(5); assertTrue(basicThresholder.isDeviationReady()); basicThresholder.setScoreDifferencing(1.0); assertFalse(basicThresholder.isDeviationReady()); basicThresholder.update(0.0, 0.0); basicThresholder.update(0.0, 0.0); assertTrue(basicThresholder.isDeviationReady()); basicThresholder.setScoreDifferencing(0.5); assertTrue(basicThresholder.isDeviationReady()); assertEquals(basicThresholder.intermediateTermFraction(), 0.4, 1e-10); basicThresholder.updatePrimary(0.0); assertNotEquals(1, basicThresholder.intermediateTermFraction(), 0.0); basicThresholder.setMinimumScores(4); assertEquals(1, basicThresholder.intermediateTermFraction()); } @ParameterizedTest @ValueSource(booleans = { true, false }) void gradeTest(boolean flag) { BasicThresholder thresholder = new BasicThresholder(null); thresholder.setScoreDifferencing(0.0); if (flag) { thresholder.setInitialThreshold(0.0); thresholder.setAbsoluteThreshold(0.0); } assertEquals(0, thresholder.threshold()); assertEquals(0, thresholder.getPrimaryThreshold()); assertEquals(0, thresholder.getPrimaryGrade(0)); assertEquals(0, thresholder.getPrimaryThresholdAndGrade(0.0).weight); assertEquals(0, thresholder.getPrimaryThresholdAndGrade(1.0).weight); assertEquals(thresholder.initialThreshold, thresholder.getThresholdAndGrade(0, TransformMethod.NONE, 1, 1).index); assertEquals(thresholder.initialThreshold, thresholder.getThresholdAndGrade(1.0, TransformMethod.NONE, 1, 1).index); thresholder.setCount(12); assertTrue(thresholder.isDeviationReady()); assertEquals(thresholder.getSurpriseIndex(1.0, 0, 2.5, 0), 2); assertEquals(thresholder.getPrimaryGrade(0), 0); assertEquals(0, thresholder.getPrimaryThresholdAndGrade(0.0).weight); assertEquals(0, thresholder.getPrimaryThresholdAndGrade(1.0).weight); // threshold 0 thresholder.updatePrimary(1.0); assertEquals(1.0, thresholder.getPrimaryThresholdAndGrade(2.0).weight); thresholder.update(1.0, 1.0); thresholder.update(1.0, 0.5); assertEquals(0, thresholder.longTermDeviation(TransformMethod.NONE, 1)); assertEquals(thresholder.getThresholdAndGrade(0, TransformMethod.NONE, 1, 1).weight, 0); assertTrue(thresholder.longTermDeviation(TransformMethod.DIFFERENCE, 1) > 0); assertTrue(thresholder.longTermDeviation(TransformMethod.NORMALIZE_DIFFERENCE, 1) > 0); assertTrue(thresholder.longTermDeviation(TransformMethod.NONE, 2) > 0); assertTrue(thresholder.longTermDeviation(TransformMethod.DIFFERENCE, 2) > 0); assertTrue(thresholder.longTermDeviation(TransformMethod.NORMALIZE_DIFFERENCE, 2) > 0); } } ================================================ FILE: Java/parkservices/src/test/resources/com/amazon/randomcutforest/parkservices/state/byte_base64_1.txt ================================================ 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 ================================================ FILE: Java/parkservices/src/test/resources/com/amazon/randomcutforest/parkservices/state/byte_base64_2.txt ================================================ CgMyLjETCgMyLjAQmQsZLUMc6+I2Gj8gHiiAAjAIOCBAIEgBUAFZAAAAAAAAAABgAGgBcAB4AIIBCEZMT0FUXzMyiwEKAzIuMBAgGIE8IAgqCEZMT0FUXzMyMIAtOoC0AUHYAABCRAAAQdgAAEJEAABB4AAAQjgAAEHgAABCOAAAQegAAEI0AABB6AAAQjQAAEHwAABCPAAAQfAAAEI8AABB+AAAQjQAAEH4AABCNAAAQfAAAEI4AABB8AAAQjgAAEIEAABCRAAAQgQAAEJEAABB8AAAQjgAAEHwAABCOAAAQgQAAEJAAABCBAAAQkAAAEH4AABCTAAAQfgAAEJMAABB+AAAQkAAAEH4AABCQAAAQfAAAEJAAABB8AAAQkAAAEHgAABCSAAAQeAAAEJIAABB2AAAQlQAAEHYAABCVAAAQdAAAEJYAABB0AAAQlgAAEHgAABCTAAAQeAAAEJMAABB+AAAQkgAAEH4AABCSAAAQgQAAEJAAABCBAAAQkAAAEIMAABCSAAAQgwAAEJIAABCBAAAQkgAAEIEAABCSAAAQgwAAEJIAABCDAAAQkgAAEIAAABCTAAAQgAAAEJMAABB8AAAQkgAAEHwAABCSAAAQeAAAEJAAABB4AAAQkAAAEHQAABCPAAAQdAAAEI8AABB6AAAQkgAAEHoAABCSAAAQdAAAEI8AABB0AAAQjwAAEHIAABCSAAAQcgAAEJIAABB4AAAQkQAAEHgAABCRAAAQfgAAEJAAABB+AAAQkAAAEIAAABCSAAAQgAAAEJIAABCCAAAQkAAAEIIAABCQAAAQfgAAEJEAABB+AAAQkQAAEIIAABCRAAAQggAAEJEAABB+AAAQkwAAEH4AABCTAAAQgAAAEJQAABCAAAAQlAAAEIEAABCTAAAQgQAAEJMAABCDAAAQlQAAEIMAABCVAAAQgQAAEJMAABCBAAAQkwAAEIMAABCWAAAQgwAAEJYAABCCAAAQlgAAEIIAABCWAAAQfgAAEJQAABB+AAAQlAAAEIEAABCUAAAQgQAAEJQAABCCAAAQlgAAEIIAABCWAAAQgwAAEJcAABCDAAAQlwAAEIEAABCXAAAQgQAAEJcAABCAAAAQlwAAEIAAABCXAAAQegAAEJYAABB6AAAQlgAAEH4AABCUAAAQfgAAEJQAABCBAAAQlgAAEIEAABCWAAAQfgAAEJcAABB+AAAQlwAAEIEAABCWAAAQgQAAEJYAABB+AAAQlQAAEH4AABCVAAAQfAAAEJQAABB8AAAQlAAAEH4AABCUAAAQfgAAEJQAABB6AAAQlwAAEHoAABCXAAAQfAAAEJUAABB8AAAQlQAAEH4AABCVAAAQfgAAEJUAABB+AAAQlgAAEH4AABCWAAAQggAAEJcAABCCAAAQlwAAEIAAABCXAAAQgAAAEJcAABB8AAAQlQAAEHwAABCVAAAQgQAAEJQAABCBAAAQlAAAEIEAABCXAAAQgQAAEJcAABCCAAAQlgAAEIIAABCWAAAQggAAEJUAABCCAAAQlQAAEIIAABCSAAAQggAAEJIAABCAAAAQkwAAEIAAABCTAAAQggAAEJQAABCCAAAQlAAAEIAAABCSAAAQgAAAEJIAABB8AAAQlQAAEHwAABCVAAAQdgAAEJIAABB2AAAQkgAAEHQAABCTAAAQdAAAEJMAABB0AAAQkQAAEHQAABCRAAAQdgAAEJAAABB2AAAQkAAAEHQAABCPAAAQdAAAEI8AABB2AAAQjwAAEHYAABCPAAAQeAAAEJEAABB4AAAQkQAAEHYAABCOAAAQdgAAEI4AABB8AAAQjwAAEHwAABCPAAAQgAAAEI0AABCAAAAQjQAAEHwAABCOAAAQfAAAEI4AABB2AAAQjgAAEHYAABCOAAAQcgAAEI4AABByAAAQjgAAEHYAABCNAAAQdgAAEI0AABB0AAAQkAAAEHQAABCQAAAQeAAAEI4AABB4AAAQjgAAEHYAABCOAAAQdgAAEI4AABB0AAAQjwAAEHQAABCPAAAQdAAAEI0AABB0AAAQjQAAEHYAABCOAAAQdgAAEI4AABB6AAAQkAAAEHoAABCQAAAQeAAAEI0AABB4AAAQjQAAEHwAABCOAAAQfAAAEI4AABB4AAAQjwAAEHgAABCPAAAQeAAAEJEAABB4AAAQkQAAEHQAABCRAAAQdAAAEJEAABB0AAAQjwAAEHQAABCPAAAQegAAEI0AABB6AAAQjQAAEHYAABCPAAAQdgAAEI8AABB2AAAQjQAAEHYAABCNAAAQeAAAEJAAABB4AAAQkAAAEHwAABCPAAAQfAAAEI8AABB8AAAQjQAAEHwAABCNAAAQgQAAEJAAABCBAAAQkAAAEIIAABCPAAAQggAAEI8AABCBAAAQjQAAEIEAABCNAAAQgQAAEI0AABCBAAAQjQAAEH4AABCNAAAQfgAAEI0AABCBAAAQkAAAEIEAABCQAAAQfgAAEJAAABB+AAAQkAAAEHwAABCQAAAQfAAAEJAAABCAAAAQjQAAEIAAABCNAAAQfAAAEJAAABB8AAAQkAAAEIAAABCQAAAQgAAAEJAAABB6AAAQkAAAEHoAABCQAAAQfAAAEJEAABB8AAAQkQAAEHgAABCUAAAQeAAAEJQAABByAAAQkQAAEHIAABCRAAAQcgAAEI8AABByAAAQjwAAEHQAABCNAAAQdAAAEI0AABB6AAAQjwAAEHoAABCPAAAQdAAAEI0AABB0AAAQjQAAEHYAABCQAAAQdgAAEJAAABB6AAAQkAAAEHoAABCQAAAQfgAAEI8AABB+AAAQjwAAEHwAABCSAAAQfAAAEJIAABCAAAAQkAAAEIAAABCQAAAQegAAEJEAABB6AAAQkQAAEHYAABCQAAAQdgAAEJAAABB6AAAQjwAAEHoAABCPAAAQdAAAEI8AABB0AAAQjwAAEHQAABCRAAAQdAAAEJEAABB2AAAQlAAAEHYAABCUAAAQcgAAEJcAABByAAAQlwAAEHIAABCWAAAQcgAAEJYAABB0AAAQlgAAEHQAABCWAAAQdgAAEJMAABB2AAAQkwAAEHgAABCWAAAQeAAAEJYAABB4AAAQlAAAEHgAABCUAAAQegAAEJMAABB6AAAQkwAAEIAAABCQAAAQgAAAEJAAABCBAAAQkgAAEIEAABCSAAAQgQAAEJQAABCBAAAQlAAAEIAAABCRAAAQgAAAEJEAABB+AAAQkQAAEH4AABCRAAAQegAAEJAAABB6AAAQkAAAEHwAABCNAAAQfAAAEI0AABB+AAAQjgAAEH4AABCOAAAQfAAAEI8AABB8AAAQjwAAEIEAABCQAAAQgQAAEJAAABCAAAAQjgAAEIAAABCOAAAQegAAEI4AABB6AAAQjgAAEHwAABCNAAAQfAAAEI0AABB6AAAQkAAAEHoAABCQAAAQeAAAEI8AABB4AAAQjwAAEHQAABCOAAAQdAAAEI4AABB0AAAQjwAAEHQAABCPAAAQdgAAEJEAABB2AAAQkQAAEHQAABCRAAAQdAAAEJEAABB6AAAQjwAAEHoAABCPAAAQdAAAEI0AABB0AAAQjQAAEHgAABCPAAAQeAAAEI8AABB6AAAQjgAAEHoAABCOAAAQdgAAEI8AABB2AAAQjwAAEHIAABCNAAAQcgAAEI0AABB0AAAQjQAAEHQAABCNAAAQdgAAEI8AABB2AAAQjwAAEHoAABCPAAAQegAAEI8AABB8AAAQkAAAEHwAABCQAAAQfgAAEJMAABB+AAAQkwAAEIIAABCRAAAQggAAEJEAABCBAAAQjwAAEIEAABCPAAAQfgAAEI8AABB+AAAQjwAAEHwAABCNAAAQfAAAEI0AABCAAAAQjgAAEIAAABCOAAAQggAAEI0AABCCAAAQjQAAEH4AABCNAAAQfgAAEI0AABB+AAAQjQAAEH4AABCNAAAQgAAAEI4AABCAAAAQjgAAEIMAABCPAAAQgwAAEI8AABCBAAAQjwAAEIEAABCPAAAQgwAAEJIAABCDAAAQkgAAEIEAABCQAAAQgQAAEJAAABCAAAAQjwAAEIAAABCPAAAQfgAAEJIAABB+AAAQkgAAEIEAABCPAAAQgQAAEI8AABCBAAAQjgAAEIEAABCOAAAQggAAEI0AABCCAAAQjQAAEH4AABCNAAAQfgAAEI0AABB+AAAQjQAAEH4AABCNAAAQgAAAEI4AABCAAAAQjgAAEIAAABCOAAAQgAAAEI4AABB+AAAQkAAAEH4AABCQAAAQeAAAEI8AABB4AAAQjwAAEH4AABCPAAAQfgAAEI8AABB6AAAQjgAAEHoAABCOAAAQeAAAEI8AABB4AAAQjwAAEHwAABCOAAAQfAAAEI4AABB4AAAQjgAAEHgAABCOAAAQdgAAEI4AABB2AAAQjgAAEHIAABCNAAAQcgAAEI0AABB0AAAQjQAAEHQAABCNAAAQeAAAEI0AABB4AAAQjQAAEHgAABCNAAAQeAAAEI0AABB2AAAQjgAAEHYAABCOAAAQfAAAEI4AABB8AAAQjgAAEHoAABCRAAAQegAAEJEAABB0AAAQjgAAEHQAABCOAAAQdAAAEI8AABB0AAAQjwAAEHQAABCRAAAQdAAAEJEAABB0AAAQkAAAEHQAABCQAAAQdgAAEI4AABB2AAAQjgAAEHoAABCRAAAQegAAEJEAABB+AAAQkAAAEH4AABCQAAAQgAAAEJEAABCAAAAQkQAAEH4AABCSAAAQfgAAEJIAABB4AAAQlQAAEHgAABCVAAAQfAAAEJYAABB8AAAQlgAAEHoAABCVAAAQegAAEJUAABB2AAAQlgAAEHYAABCWAAAQeAAAEJUAABB4AAAQlQAAEHgAABCXAAAQeAAAEJcAABB2AAAQlQAAEHYAABCVAAAQcgAAEJMAABByAAAQkwAAEHYAABCUAAAQdgAAEJQAABB8AAAQkwAAEHwAABCTAAAQfAAAEJMAABB8AAAQkwAAEHwAABCVAAAQfAAAEJUAABCAAAAQkgAAEIAAABCSAAAQggAAEJIAABCCAAAQkgAAEIMAABCRAAAQgwAAEJEAABCAAAAQkwAAEIAAABCTAAAQfgAAEJMAABB+AAAQkwAAEHoAABCQAAAQegAAEJAAABB0AAAQkgAAEHQAABCSAAAQdAAAEJIAABB0AAAQkgAAEHIAABCQAAAQcgAAEJAAABB2AAAQkQAAEHYAABCRAAAQcgAAEJQAABByAAAQlAAAEHIAABCUAAAQcgAAEJQAABByAAAQkQAAEHIAABCRAAAQcgAAEJMAABByAAAQkwAAEHIAABCWAAAQcgAAEJYAABByAAAQlgAAEHIAABCWAAAQdAAAEJMAABB0AAAQkwAAEHIAABCUAAAQcgAAEJQAABB2AAAQlAAAEHYAABCUAAAQcgAAEJEAABByAAAQkQAAEHIAABCUAAAQcgAAEJQAABB4AAAQlAAAEHgAABCUAAAQegAAEJMAABB6AAAQkwAAEHgAABCQAAAQeAAAEJAAABB6AAAQkwAAEHoAABCTAAAQfAAAEJIAABB8AAAQkgAAEH4AABCTAAAQfgAAEJMAABB6AAAQlAAAEHoAABCUAAAQgAAAEJQAABCAAAAQlAAAEH4AABCUAAAQfgAAEJQAABCAAAAQkwAAEIAAABCTAAAQgwAAEJUAABCDAAAQlQAAEIMAABCXAAAQgwAAEJcAABCCAAAQlwAAEIIAABCXAAAQgwAAEJUAABCDAAAQlQAAEIMAABCVAAAQgwAAEJUAABCCAAAQlAAAEIIAABCUAAAQgQAAEJUAABCBAAAQlQAAEIEAABCSAAAQgQAAEJIAABCCAAAQkQAAEIIAABCRAAAQfgAAEJMAABB+AAAQkwAAEHoAABCQAAAQegAAEJAAABB2AAAQjwAAEHYAABCPAAAQfAAAEI0AABB8AAAQjQAAEIAAABCNAAAQgAAAEI0AABB+AAAQjQAAEH4AABCNAAAQgQAAEI0AABCBAAAQjQAAEIAAABCQAAAQgAAAEJAAABCBAAAQkgAAEIEAABCSAAAQggAAEI8AABCCAAAQjwAAEH4AABCNAAAQfgAAEI0AABB6AAAQjgAAEHoAABCOAAAQfgAAEI4AABB+AAAQjgAAEHwAABCQAAAQfAAAEJAAABB2AAAQkwAAEHYAABCTAAAQegAAEJAAABB6AAAQkAAAEHQAABCPAAAQdAAAEI8AABB4AAAQjQAAEHgAABCNAAAQfAAAEJAAABB8AAAQkAAAEIAAABCRAAAQgAAAEJEAABCAAAAQjgAAEIAAABCOAAAQgQAAEJAAABCBAAAQkAAAEIMAABCTAAAQgwAAEJMAABCCAAAQlAAAEIIAABCUAAAQgwAAEJUAABCDAAAQlQAAEIAAABCTAAAQgAAAEJMAABCBAAAQkQAAEIEAABCRAAAQggAAEJEAABCCAAAQkQAAEIIAABCPAAAQggAAEI8AABCAAAAQjgAAEIAAABCOAAAQggAAEJAAABCCAAAQkAAAEIIAABCOAAAQggAAEI4AABB+AAAQjwAAEH4AABCPAAAQgQAAEJAAABCBAAAQkAAAEHwAABCQAAAQfAAAEJAAABB2AAAQkQAAEHYAABCRAAAQfAAAEI4AABB8AAAQjgAAEHYAABCPAAAQdgAAEI8AABB8AAAQjQAAEHwAABCNAAAQgQAAEJAAABCBAAAQkAAAEHwAABCRAAAQfAAAEJEAABB8AAAQlAAAEHwAABCUAAAQegAAEJcAABB6AAAQlwAAEHQAABCXAAAQdAAAEJcAABB2AAAQlwAAEHYAABCXAAAQcgAAEJYAABByAAAQlgAAEHQAABCUAAAQdAAAEJQAABByAAAQlgAAEHIAABCWAAAQeAAAEJYAABB4AAAQlgAAEHoAABCUAAAQegAAEJQAABB6AAAQlwAAEHoAABCXAAAQeAAAEJYAABB4AAAQlgAAEH4AABCTAAAQfgAAEJMAABCBAAAQlAAAEIEAABCUAAAQggAAEJMAABCCAAAQkwAAEIMAABCUAAAQgwAAEJQAABCBAAAQkgAAEIEAABCSAAAQfAAAEJAAABB8AAAQkAAAEHYAABCNAAAQdgAAEI0AABB8AAAQjgAAEHwAABCOAAAQfgAAEI0AABB+AAAQjQAAEHoAABCPAAAQegAAEI8AABB+AAAQkAAAEH4AABCQAAAQfgAAEI8AABB+AAAQjwAAEHoAABCPAAAQegAAEI8AABB8AAAQjQAAEHwAABCNAAAQgAAAEJAAABCAAAAQkAAAEHoAABCQAAAQegAAEJAAABB6AAAQkAAAEHoAABCQAAAQdAAAEJEAABB0AAAQkQAAEHQAABCOAAAQdAAAEI4AABB0AAAQjQAAEHQAABCNAAAQdAAAEI4AABB0AAAQjgAAEHIAABCQAAAQcgAAEJAAABB4AAAQjwAAEHgAABCPAAAQegAAEJEAABB6AAAQkQAAEHoAABCUAAAQegAAEJQAABB+AAAQlwAAEH4AABCXAAAQggAAEJYAABCCAAAQlgAAEIAAABCWAAAQgAAAEJYAABB+AAAQkwAAEH4AABCTAAAQegAAEJYAABB6AAAQlgAAEHwAABCVAAAQfAAAEJUAABB2AAAQlgAAEHYAABCWAAAQegAAEJYAABB6AAAQlgAAEHoAABCXAAAQegAAEJcAABB2AAAQlQAAEHYAABCVAAAQfAAAEJMAABB8AAAQkwAAEIEAABCUAAAQgQAAEJQAABCDAAAQkwAAEIMAABCTAAAQgQAAEJQAABCBAAAQlAAAEIIAABCUAAAQggAAEJQAABCDAAAQlgAAEIMAABCWAAAQgQAAEJYAABCBAAAQlgAAEIAAABCTAAAQgAAAEJMAABCBAAAQkQAAEIEAABCRAAAQgQAAEI4AABCBAAAQjgAAEH4AABCOAAAQfgAAEI4AABB6AAAQjQAAEHoAABCNAAAQfgAAEJAAABB+AAAQkAAAEH4AABCSAAAQfgAAEJIAABB8AAAQkQAAEHwAABCRAAAQdgAAEJQAABB2AAAQlAAAEHYAABCXAAAQdgAAEJcAABB4AAAQlAAAEHgAABCUAAAQfAAAEJQAABB8AAAQlAAAEHoAABCUAAAQegAAEJQAABB2AAAQlgAAEHYAABCWAAAQdgAAEJcAABB2AAAQlwAAEHgAABCUAAAQeAAAEJQAABByAAAQlgAAEHIAABCWAAAQdgAAEJUAABB2AAAQlQAAEHYAABCSAAAQdgAAEJIAABB2AAAQkgAAEHYAABCSAAAQdgAAEJAAABB2AAAQkAAAEHIAABCOAAAQcgAAEI4AABB4AAAQjgAAEHgAABCOAAAQdAAAEI4AABB0AAAQjgAAEHYAABCNAAAQdgAAEI0AABB0AAAQjwAAEHQAABCPAAAQdgAAEI0AABB2AAAQjQAAEHYAABCNAAAQdgAAEI0AABB6AAAQjgAAEHoAABCOAAAQfgAAEJAAABB+AAAQkAAAEHwAABCOAAAQfAAAEI4AABCBAAAQkAAAEIEAABCQAAAQgAAAEI8AABCAAAAQjwAAEIAAABCQAAAQgAAAEJAAABB+AAAQjgAAEH4AABCOAAAQeAAAEI4AABB4AAAQjgAAEH4AABCPAAAQfgAAEI8AABB8AAAQjgAAEHwAABCOAAAQeAAAEI4AABB4AAAQjgAAEHgAABCPAAAQeAAAEI8AABB0AAAQkgAAEHQAABCSAAAQeAAAEI8AABB4AAAQjwAAEHoAABCRAAAQegAAEJEAABB4AAAQkQAAEHgAABCRAAAQfgAAEJAAABB+AAAQkAAAEHgAABCRAAAQeAAAEJEAABB8AAAQlAAAEHwAABCUAAAQfgAAEJcAABB+AAAQlwAAEIEAABCXAAAQgQAAEJcAABCCAAAQlgAAEIIAABCWAAAQfgAAEJQAABB+AAAQlAAAEH4AABCWAAAQfgAAEJYAABB6AAAQlwAAEHoAABCXAAAQgAAAEJYAABCAAAAQlgAAEHoAABCTAAAQegAAEJMAABCAAAAQkQAAEIAAABCRAAAQfgAAEJIAABB+AAAQkgAAEHoAABCUAAAQegAAEJQAABB8AAAQkQAAEHwAABCRAAAQeAAAEI4AABB4AAAQjgAAEHQAABCPAAAQdAAAEI8AABB0AAAQkQAAEHQAABCRAAAQdAAAEI8AABB0AAAQjwAAEHgAABCRAAAQeAAAEJEAABB4AAAQlAAAEHgAABCUAAAQfAAAEJEAABB8AAAQkQAAEH4AABCOAAAQfgAAEI4AABB6AAAQjQAAEHoAABCNAAAQdAAAEI4AABB0AAAQjgAAEHgAABCPAAAQeAAAEI8AABByAAAQkgAAEHIAABCSAAAQdgAAEJAAABB2AAAQkAAAEHoAABCNAAAQegAAEI0AABB4AAAQjgAAEHgAABCOAAAQcgAAEI4AABByAAAQjgAAEHQAABCNAAAQdAAAEI0AABByAAAQjgAAEHIAABCOAAAQeAAAEI8AABB4AAAQjwAAEHYAABCQAAAQdgAAEJAAABB0AAAQkgAAEHQAABCSAAAQdgAAEJUAABB2AAAQlQAAEHgAABCWAAAQeAAAEJYAABB+AAAQlwAAEH4AABCXAAAQggAAEJcAABCCAAAQlwAAEIAAABCVAAAQgAAAEJUAABB6AAAQlAAAEHoAABCUAAAQdgAAEJMAABB2AAAQkwAAEHwAABCWAAAQfAAAEJYAABCAAAAQlAAAEIAAABCUAAAQegAAEJMAABB6AAAQkwAAEHoAABCUAAAQegAAEJQAABB+AAAQlQAAEH4AABCVAAAQfgAAEJUAABB+AAAQlQAAEIEAABCXAAAQgQAAEJcAABCBAAAQlAAAEIEAABCUAAAQgQAAEJQAABCBAAAQlAAAEIMAABCRAAAQgwAAEJEAABCDAAAQlAAAEIMAABCUAAAQgQAAEJQAABCBAAAQlAAAEH4AABCTAAAQfgAAEJMAABB+AAAQlgAAEH4AABCWAAAQfAAAEJUAABB8AAAQlQAAEHwAABCWAAAQfAAAEJYAABB6AAAQlgAAEHoAABCWAAAQegAAEJcAABB6AAAQlwAAEHQAABCVAAAQdAAAEJUAABByAAAQlAAAEHIAABCUAAAQdgAAEJMAABB2AAAQkwAAEHQAABCVAAAQdAAAEJUAABByAAAQlAAAEHIAABCUAAAQdAAAEJYAABB0AAAQlgAAEHYAABCWAAAQdgAAEJYAABB2AAAQlgAAEHYAABCWAAAQeAAAEJUAABB4AAAQlQAAEHYAABCWAAAQdgAAEJYAABB8AAAQlQAAEHwAABCVAAAQegAAEJcAABB6AAAQlwAAEHQAABCVAAAQdAAAEJUAABB2AAAQlwAAEHYAABCXAAAQdAAAEJUAABB0AAAQlQAAEHYAABCWAAAQdgAAEJYAABB2AAAQkwAAEHYAABCTAAAQdAAAEJEAABB0AAAQkQAAEHYAABCSAAAQdgAAEJIAABB0AAAQjwAAEHQAABCPAAAQdgAAEJAAABB2AAAQkAAAEHwAABCSAAAQfAAAEJIAABB6AAAQjwAAEHoAABCPAAAQeAAAEI8AABB4AAAQjwAAEHYAABCOAAAQdgAAEI4AABB4AAAQjQAAEHgAABCNAAAQegAAEI8AABB6AAAQjwAAEHgAABCOAAAQeAAAEI4AABByAAAQjwAAEHIAABCPAAAQdgAAEJAAABB2AAAQkAAAEHgAABCTAAAQeAAAEJMAABB2AAAQkAAAEHYAABCQAAAQdAAAEJEAABB0AAAQkQAAEHQAABCQAAAQdAAAEJAAABB0AAAQkAAAEHQAABCQAAAQcgAAEI8AABByAAAQjwAAEHIAABCNAAAQcgAAEI0AABB4AAAQjQAAEHgAABCNAAAQdgAAEJAAABB2AAAQkAAAEHgAABCSAAAQeAAAEJIAABB4AAAQkAAAEHgAABCQAAAQfAAAEI0AABB8AAAQjQAAEIEAABCPAAAQgQAAEI8AABCCAAAQkAAAEIIAABCQAAAQgwAAEI8AABCDAAAQjwAAEIAAABCOAAAQgAAAEI4AABCDAAAQkQAAEIMAABCRAAAQggAAEJQAABCCAAAQlAAAEH4AABCXAAAQfgAAEJcAABCCAAAQlAAAEIIAABCUAAAQggAAEJYAABCCAAAQlgAAEIEAABCXAAAQgQAAEJcAABB8AAAQlAAAEHwAABCUAAAQegAAEJUAABB6AAAQlQAAEH4AABCXAAAQfgAAEJcAABB+AAAQlQAAEH4AABCVAAAQegAAEJUAABB6AAAQlQAAEH4AABCWAAAQfgAAEJYAABCAAAAQkwAAEIAAABCTAAAQgwAAEJMAABCDAAAQkwAAEIIAABCTAAAQggAAEJMAABCCAAAQkQAAEIIAABCRAAAQggAAEJIAABCCAAAQkgAAEIMAABCTAAAQgwAAEJMAABCDAAAQlgAAEIMAABCWAAAQgwAAEJcAABCDAAAQlwAAEIAAABCXAAAQgAAAEJcAABB+AAAQlgAAEH4AABCWAAAQegAAEJYAABB6AAAQlgAAEHwAABCVAAAQfAAAEJUAABCAAAAQlQAAEIAAABCVAAAQfAAAEJMAABB8AAAQkwAAEIEAABCRAAAQgQAAEJEAABCDAAAQjwAAEIMAABCPAAAQggAAEJEAABCCAAAQkQAAEIMAABCRAAAQgwAAEJEAABCBAAAQlAAAEIEAABCUAAAQfgAAEJQAABB+AAAQlAAAEHoAABCSAAAQegAAEJIAABB6AAAQlQAAEHoAABCVAAAQdgAAEJYAABB2AAAQlgAAEHIAABCXAAAQcgAAEJcAABB4AAAQlwAAEHgAABCXAAAQeAAAEJQAABB4AAAQlAAAEHgAABCVAAAQeAAAEJUAABByAAAQlgAAEHIAABCWAAAQdAAAEJQAABB0AAAQlAAAEHQAABCRAAAQdAAAEJEAABB0AAAQkwAAEHQAABCTAAAQdAAAEJUAABB0AAAQlQAAEHYAABCTAAAQdgAAEJMAABB6AAAQlQAAEHoAABCVAAAQeAAAEJMAABB4AAAQkwAAEH4AABCRAAAQfgAAEJEAABCAAAAQlAAAEIAAABCUAAAQggAAEJcAABCCAAAQlwAAEIIAABCVAAAQggAAEJUAABCDAAAQlAAAEIMAABCUAAAQgwAAEJcAABCDAAAQlwAAEIMAABCXAAAQgwAAEJcAABCBAAAQlgAAEIEAABCWAAAQfAAAEJcAABB8AAAQlwAAEHoAABCVAAAQegAAEJUAABB8AAAQkgAAEHwAABCSAAAQegAAEI8AABB6AAAQjwAAEHQAABCSAAAQdAAAEJIAABByAAAQkwAAEHIAABCTAAAQdAAAEJUAABB0AAAQlQAAEHQAABCUAAAQdAAAEJQAABB4AAAQkgAAEHgAABCSAAAQegAAEJAAABB6AAAQkAAAEHQAABCQAAAQdAAAEJAAABB2AAAQjQAAEHYAABCNAAAQdAAAEI4AABB0AAAQjgAAEHYAABCNAAAQdgAAEI0AABByAAAQjgAAEHIAABCOAAAQcgAAEI4AABByAAAQjgAAEHIAABCNAAAQcgAAEI0AABB2AAAQjQAAEHYAABCNAAAQdAAAEI0AABB0AAAQjQAAEHYAABCPAAAQdgAAEI8AABB8AAAQjQAAEHwAABCNAAAQeAAAEI4AABB4AAAQjgAAEHoAABCNAAAQegAAEI0AABB+AAAQkAAAEH4AABCQAAAQggAAEJEAABCCAAAQkQAAEIEAABCOAAAQgQAAEI4AABCCAAAQjwAAEIIAABCPAAAQgQAAEI4AABCBAAAQjgAAEIMAABCNAAAQgwAAEI0AABCBAAAQjgAAEIEAABCOAAAQgQAAEI4AABCBAAAQjgAAEHwAABCNAAAQfAAAEI0AABB4AAAQjgAAEHgAABCOAAAQfAAAEI4AABB8AAAQjgAAEHYAABCPAAAQdgAAEI8AABB6AAAQjQAAEHoAABCNAAAQdgAAEI8AABB2AAAQjwAAEHwAABCNAAAQfAAAEI0AABB8AAAQjgAAEHwAABCOAAAQfgAAEI0AABB+AAAQjQAAEIIAABCPAAAQggAAEI8AABCCAAAQkQAAEIIAABCRAAAQfgAAEJEAABB+AAAQkQAAEHoAABCUAAAQegAAEJQAABB4AAAQlwAAEHgAABCXAAAQegAAEJYAABB6AAAQlgAAEHoAABCVAAAQegAAEJUAABB4AAAQlgAAEHgAABCWAAAQdgAAEJUAABB2AAAQlQAAEHgAABCXAAAQeAAAEJcAABB6AAAQlAAAEHoAABCUAAAQfAAAEJcAABB8AAAQlwAAEHgAABCWAAAQeAAAEJYAABByAAAQlwAAEHIAABCXAAAQdgAAEJcAABB2AAAQlwAAEHYAABCWAAAQdgAAEJYAABB0AAAQlwAAEHQAABCXAAAQcgAAEJYAABByAAAQlgAAEHgAABCUAAAQeAAAEJQAABB0AAAQlQAAEHQAABCVAAAQdAAAEJQAABB0AAAQlAAAEHIAABCTAAAQcgAAEJMAABByAAAQkQAAEHIAABCRAAAQdgAAEJEAABB2AAAQkQAAEHIAABCUAAAQcgAAEJQAABB2AAAQlQAAEHYAABCVAAAQdAAAEJMAABB0AAAQkwAAEHQAABCQAAAQdAAAEJAAABB0AAAQkQAAEHQAABCRAAAQdgAAEJAAABB2AAAQkAAAEHgAABCRAAAQeAAAEJEAABB0AAAQkAAAEHQAABCQAAAQdAAAEI0AABB0AAAQjQAAEHYAABCQAAAQdgAAEJAAABB8AAAQjgAAEHwAABCOAAAQfgAAEI0AABB+AAAQjQAAEHgAABCNAAAQeAAAEI0AABB6AAAQjQAAEHoAABCNAAAQfgAAEI4AABB+AAAQjgAAEIEAABCQAAAQgQAAEJAAABB8AAAQkgAAEHwAABCSAAAQegAAEJIAABB6AAAQkgAAEHoAABCPAAAQegAAEI8AABB0AAAQkgAAEHQAABCSAAAQdAAAEJIAABB0AAAQkgAAEHYAABCRAAAQdgAAEJEAABB0AAAQkAAAEHQAABCQAAAQdAAAEJAAABB0AAAQkAAAEHYAABCOAAAQdgAAEI4AABB2AAAQjwAAEHYAABCPAAAQeAAAEI0AABB4AAAQjQAAEHIAABCNAAAQcgAAEI0AABB0AAAQjgAAEHQAABCOAAAQdAAAEJEAABB0AAAQkQAAEHYAABCRAAAQdgAAEJEAABB6AAAQkAAAEHoAABCQAAAQdgAAEJMAABB2AAAQkwAAEHgAABCQAAAQeAAAEJAAABB6AAAQkQAAEHoAABCRAAAQegAAEI4AABB6AAAQjgAAEIAAABCOAAAQgAAAEI4AABB6AAAQjQAAEHoAABCNAAAQgAAAEI8AABCAAAAQjwAAEHwAABCQAAAQfAAAEJAAABB2AAAQjQAAEHYAABCNAAAQdgAAEJAAABB2AAAQkAAAEHoAABCRAAAQegAAEJEAABB6AAAQlAAAEHoAABCUAAAQegAAEJcAABB6AAAQlwAAEIAAABCVAAAQgAAAEJUAABB6AAAQlQAAEHoAABCVAAAQdgAAEJUAABB2AAAQlQAAEHgAABCSAAAQeAAAEJIAABB6AAAQkgAAEHoAABCSAAAQfAAAEJAAABB8AAAQkAAAEHYAABCOAAAQdgAAEI4AABB6AAAQjgAAEHoAABCOAAAQeAAAEJEAABB4AAAQkQAAEHIAABCQAAAQcgAAEJAAABB0AAAQkQAAEHQAABCRAAAQdAAAEJEAABB0AAAQkQAAEHoAABCOAAAQegAAEI4AABB+AAAQjgAAEH4AABCOAAAQeAAAEJEAABB4AAAQkQAAEHoAABCPAAAQegAAEI8AABB6AAAQjwAAEHoAABCPAAAQgAAAEJIAABCAAAAQkgAAEIEAABCRAAAQgQAAEJEAABCBAAAQjwAAEIEAABCPAAAQgQAAEJEAABCBAAAQkQAAEIEAABCPAAAQgQAAEI8AABCDAAAQkgAAEIMAABCSAAAQgAAAEJMAABCAAAAQkwAAEIAAABCQAAAQgAAAEJAAABCBAAAQjQAAEIEAABCNAAAQggAAEI0AABCCAAAQjQAAEH4AABCPAAAQfgAAEI8AABB6AAAQkAAAEHoAABCQAAAQdAAAEI8AABB0AAAQjwAAEHIAABCOAAAQcgAAEI4AABB2AAAQjwAAEHYAABCPAAAQcgAAEJAAABByAAAQkAAAEHIAABCSAAAQcgAAEJIAABB0AAAQlQAAEHQAABCVAAAQcgAAEJIAABByAAAQkgAAEHYAABCTAAAQdgAAEJMAABB2AAAQkgAAEHYAABCSAAAQdAAAEI8AABB0AAAQjwAAEHoAABCOAAAQegAAEI4AABB4AAAQjgAAEHgAABCOAAAQfAAAEJAAABB8AAAQkAAAEH4AABCOAAAQfgAAEI4AABCCAAAQjgAAEIIAABCOAAAQgQAAEI4AABCBAAAQjgAAEH4AABCPAAAQfgAAEI8AABB6AAAQjgAAEHoAABCOAAAQfgAAEJAAABB+AAAQkAAAEHwAABCSAAAQfAAAEJIAABCAAAAQkwAAEIAAABCTAAAQfgAAEJMAABB+AAAQkwAAEHoAABCTAAAQegAAEJMAABB4AAAQkQAAEHgAABCRAAAQfgAAEI8AABB+AAAQjwAAEHgAABCOAAAQeAAAEI4AABB8AAAQkQAAEHwAABCRAAAQfAAAEJAAABB8AAAQkAAAEHoAABCNAAAQegAAEI0AABB4AAAQjgAAEHgAABCOAAAQdgAAEI0AABB2AAAQjQAAEHwAABCQAAAQfAAAEJAAABB+AAAQkAAAEH4AABCQAAAQegAAEJEAABB6AAAQkQAAEHoAABCOAAAQegAAEI4AABB6AAAQkAAAEHoAABCQAAAQeAAAEI0AABB4AAAQjQAAEHgAABCNAAAQeAAAEI0AABB2AAAQjQAAEHYAABCNAAAQeAAAEI4AABB4AAAQjgAAEHwAABCQAAAQfAAAEJAAABB+AAAQkQAAEH4AABCRAAAQgAAAEI4AABCAAAAQjgAAEHoAABCRAAAQegAAEJEAABB4AAAQjgAAEHgAABCOAAAQfAAAEI4AABB8AAAQjgAAEHgAABCOAAAQeAAAEI4AABByAAAQjwAAEHIAABCPAAAQcgAAEI0AABByAAAQjQAAEHIAABCOAAAQcgAAEI4AABB2AAAQjgAAEHYAABCOAAAQcgAAEI8AABByAAAQjwAAEHIAABCNAAAQcgAAEI0AABB4AAAQkAAAEHgAABCQAAAQdAAAEJIAABB0AAAQkgAAEHoAABCQAAAQegAAEJAAABB8AAAQkAAAEHwAABCQAAAQfgAAEI8AABB+AAAQjwAAEHgAABCSAAAQeAAAEJIAABB0AAAQkwAAEHQAABCTAAAQdAAAEJAAABB0AAAQkAAAEHYAABCRAAAQdgAAEJEAABB6AAAQkwAAEHoAABCTAAAQdAAAEJYAABB0AAAQlgAAEHgAABCVAAAQeAAAEJUAABB2AAAQkgAAEHYAABCSAAAQcgAAEJIAABByAAAQkgAAEHYAABCSAAAQdgAAEJIAABB4AAAQlQAAEHgAABCVAAAQcgAAEJQAABByAAAQlAAAEHYAABCUAAAQdgAAEJQAABB0AAAQkgAAEHQAABCSAAAQeAAAEJAAABB4AAAQkAAAEHYAABCOAAAQdgAAEI4AABB2AAAQjgAAEHYAABCOAAAQeAAAEI0AABB4AAAQjQAAEHQAABCNAAAQdAAAEI0AABByAAAQjQAAEHIAABCNAAAQdgAAEI8AABB2AAAQjwAAEHwAABCNAAAQfAAAEI0AABCBAAAQkAAAEIEAABCQAAAQgQAAEI8AABCBAAAQjwAAEH4AABCRAAAQfgAAEJEAABCCAAAQkAAAEIIAABCQAAAQgwAAEJMAABCDAAAQkwAAEIMAABCTAAAQgwAAEJMAABCCAAAQkAAAEIIAABCQAAAQfgAAEI4AABB+AAAQjgAAEHoAABCNAAAQegAAEI0AABB6AAAQjQAAEHoAABCNAAAQdgAAEI8AABB2AAAQjwAAEHIAABCRAAAQcgAAEJEAABB2AAAQkgAAEHYAABCSAAAQcgAAEJEAABByAAAQkQAAEHYAABCTAAAQdgAAEJMAABB2AAAQlQAAEHYAABCVAAAQegAAEJIAABB6AAAQkgAAEHwAABCVAAAQfAAAEJUAABB+AAAQlwAAEH4AABCXAAAQegAAEJcAABB6AAAQlwAAEHgAABCXAAAQeAAAEJcAABB2AAAQlwAAEHYAABCXAAAQdgAAEJUAABB2AAAQlQAAEHgAABCSAAAQeAAAEJIAABB2AAAQkwAAEHYAABCTAAAQdgAAEJEAABB2AAAQkQAAEHgAABCUAAAQeAAAEJQAABB2AAAQlAAAEHYAABCUAAAQeAAAEJQAABB4AAAQlAAAEHIAABCRAAAQcgAAEJEAABB2AAAQjwAAEHYAABCPAAAQdgAAEI8AABB2AAAQjwAAEHIAABCQAAAQcgAAEJAAABB2AAAQjQAAEHYAABCNAAAQdgAAEI0AABB2AAAQjQAAEHIAABCQAAAQcgAAEJAAABB4AAAQjwAAEHgAABCPAAAQfgAAEI4AABB+AAAQjgAAEHwAABCNAAAQfAAAEI0AABB+AAAQjwAAEH4AABCPAAAQgQAAEI0AABCBAAAQjQAAEIEAABCOAAAQgQAAEI4AABCDAAAQjQAAEIMAABCNAAAQggAAEI0AABCCAAAQjQAAEIAAABCQAAAQgAAAEJAAABCBAAAQkQAAEIEAABCRAAAQgQAAEJAAABCBAAAQkAAAEIIAABCOAAAQggAAEI4AABCDAAAQjwAAEIMAABCPAAAQgwAAEI4AABCDAAAQjgAAEIMAABCRAAAQgwAAEJEAABCBAAAQkAAAEIEAABCQAAAQggAAEI4AABCCAAAQjgAAEIIAABCPAAAQggAAEI8AABCBAAAQjwAAEIEAABCPAAAQfgAAEJAAABB+AAAQkAAAEHwAABCPAAAQfAAAEI8AABCAAAAQjgAAEIAAABCOAAAQgQAAEI8AABCBAAAQjwAAEIAAABCOAAAQgAAAEI4AABB8AAAQjgAAEHwAABCOAAAQgAAAEJAAABCAAAAQkAAAEH4AABCQAAAQfgAAEJAAABCCAAAQjwAAEIIAABCPAAAQggAAEJIAABCCAAAQkgAAEIEAABCRAAAQgQAAEJEAABCCAAAQkAAAEIIAABCQAAAQgwAAEJAAABCDAAAQkAAAEIAAABCQAAAQgAAAEJAAABB8AAAQjgAAEHwAABCOAAAQdgAAEJAAABB2AAAQkAAAEHQAABCTAAAQdAAAEJMAABB4AAAQlQAAEHgAABCVAAAQfAAAEJQAABB8AAAQlAAAEHoAABCWAAAQegAAEJYAABB+AAAQlgAAEH4AABCWAAAQfAAAEJUAABB8AAAQlQAAEHoAABCWAAAQegAAEJYAABB8AAAQlwAAEHwAABCXAAAQgQAAEJYAABCBAAAQlgAAEH4AABCXAAAQfgAAEJcAABB+AAAQlgAAEH4AABCWAAAQfAAAEJMAABB8AAAQkwAAEHgAABCVAAAQeAAAEJUAABB8AAAQkwAAEHwAABCTAAAQgAAAEJIAABCAAAAQkgAAEIAAABCSAAAQgAAAEJIAABCCAAAQkQAAEIIAABCRAAAQgwAAEJAAABCDAAAQkAAAEIEAABCPAAAQgQAAEI8AABCAAAAQkAAAEIAAABCQAAAQfAAAEI0AABB8AAAQjQAAEHwAABCOAAAQfAAAEI4AABCAAAAQjwAAEIAAABCPAAAQgAAAEI8AABCAAAAQjwAAEIIAABCQAAAQggAAEJAAABCDAAAQkAAAEIMAABCQAAAQgAAAEI4AABCAAAAQjgAAEIMAABCPAAAQgwAAEI8AABCBAAAQkQAAEIEAABCRAAAQggAAEJMAABCCAAAQkwAAEIAAABCTAAAQgAAAEJMAABCCAAAQlAAAEIIAABCUAAAQgwAAEJIAABCDAAAQkgAAEIMAABCTAAAQgwAAEJMAABCDAAAQkQAAEIMAABCRAAAQggAAEJEAABCCAAAQkQAAEIIAABCUAAAQggAAEJQAABCCAAAQlQAAEIIAABCVAAAQgQAAEJMAABCBAAAQkwAAEIAAABCSAAAQgAAAEJIAABCBAAAQkwAAEIEAABCTAAAQgwAAEJQAABCDAAAQlAAAEIEAABCRAAAQgQAAEJEAABCBAAAQkwAAEIEAABCTAAAQgwAAEJEAABCDAAAQkQAAEIMAABCQAAAQgwAAEJAAABCAAAAQjwAAEIAAABCPAAAQgwAAEI4AABCDAAAQjgAAEIEAABCPAAAQgQAAEI8AABCDAAAQjgAAEIMAABCOAAAQggAAEI0AABCCAAAQjQAAEIMAABCNAAAQgwAAEI0AABCDAAAQjgAAEIMAABCOAAAQgwAAEI0AABCDAAAQjQAAEIIAABCNAAAQggAAEI0AABCDAAAQjQAAEIMAABCNAAAQgQAAEI0AABCBAAAQjQAAEIEAABCOAAAQgQAAEI4AABB8AAAQkAAAEHwAABCQAAAQeAAAEJAAABB4AAAQkAAAEHQAABCNAAAQdAAAEI0AABB0AAAQjwAAEHQAABCPAAAQdAAAEJIAABB0AAAQkgAAEHQAABCSAAAQdAAAEJIAABByAAAQlQAAEHIAABCVAAAQcgAAEJUAABByAAAQlQAAEHYAABCXAAAQdgAAEJcAABB6AAAQlAAAEHoAABCUAAAQfAAAEJQAABB8AAAQlAAAEH4AABCUAAAQfgAAEJQAABB6AAAQlQAAEHoAABCVAAAQfAAAEJUAABB8AAAQlQAAEHwAABCXAAAQfAAAEJcAABB8AAAQlwAAEHwAABCXAAAQgAAAEJYAABCAAAAQlgAAEH4AABCVAAAQfgAAEJUAABB4AAAQkwAAEHgAABCTAAAQdgAAEJYAABB2AAAQlgAAEHgAABCUAAAQeAAAEJQAABB2AAAQkgAAEHYAABCSAAAQeAAAEJIAABB4AAAQkgAAEHwAABCVAAAQfAAAEJUAABB2AAAQlwAAEHYAABCXAAAQcgAAEJQAABByAAAQlAAAEHYAABCTAAAQdgAAEJMAABB0AAAQkwAAEHQAABCTAAAQdgAAEJMAABB2AAAQkwAAEHYAABCTAAAQdgAAEJMAABB6AAAQkAAAEHoAABCQAAAQegAAEI8AABB6AAAQjwAAEHgAABCOAAAQeAAAEI4AABB8AAAQjwAAEHwAABCPAAAQfgAAEI8AABB+AAAQjwAAEHwAABCPAAAQfAAAEI8AABB2AAAQkQAAEHYAABCRAAAQfAAAEI8AABB8AAAQjwAAEIEAABCRAAAQgQAAEJEAABB+AAAQkAAAEH4AABCQAAAQggAAEI8AABCCAAAQjwAAEIMAABCQAAAQgwAAEJAAABCAAAAQjQAAEIAAABCNAAAQgQAAEI8AABCBAAAQjwAAEIAAABCNAAAQgAAAEI0AABCAAAAQjwAAEIAAABCPAAAQggAAEI0AABCCAAAQjQAAEH4AABCOAAAQfgAAEI4AABB6AAAQjQAAEHoAABCNAAAQdAAAEI0AABB0AAAQjQAAEHgAABCPAAAQeAAAEI8AABB0AAAQjgAAEHQAABCOAAAQegAAEI4AABB6AAAQjgAAEIAAABCOAAAQgAAAEI4AABCAAAAQjQAAEIAAABCNAAAQgAAAEI4AABCAAAAQjgAAEH4AABCRAAAQfgAAEJEAABCBAAAQjgAAEIEAABCOAAAQgAAAEI4AABCAAAAQjgAAEH4AABCNAAAQfgAAEI0AABB+AAAQjgAAEH4AABCOAAAQgQAAEI8AABCBAAAQjwAAEIIAABCRAAAQggAAEJEAABCBAAAQkQAAEIEAABCRAAAQfAAAEJAAABB8AAAQkAAAEIEAABCRAAAQgQAAEJEAABCBAAAQkQAAEIEAABCRAAAQfgAAEJMAABB+AAAQkwAAEIAAABCQAAAQgAAAEJAAABCCAAAQkAAAEIIAABCQAAAQgAAAEJEAABCAAAAQkQAAEH4AABCTAAAQfgAAEJMAABB+AAAQkQAAEH4AABCRAAAQfAAAEJMAABB8AAAQkwAAEHoAABCVAAAQegAAEJUAABB2AAAQlgAAEHYAABCWAAAQdgAAEJQAABB2AAAQlAAAEHYAABCVAAAQdgAAEJUAABB2AAAQlQAAEHYAABCVAAAQdAAAEJIAABB0AAAQkgAAEHYAABCRAAAQdgAAEJEAABB8AAAQkAAAEHwAABCQAAAQfAAAEI8AABB8AAAQjwAAEHoAABCRAAAQegAAEJEAABB6AAAQjwAAEHoAABCPAAAQfgAAEJEAABB+AAAQkQAAEIAAABCQAAAQgAAAEJAAABCDAAAQjQAAEIMAABCNAAAQgwAAEI8AABCDAAAQjwAAEIIAABCPAAAQggAAEI8AABCBAAAQjQAAEIEAABCNAAAQgwAAEI4AABCDAAAQjgAAEIEAABCNAAAQgQAAEI0AABB+AAAQjgAAEH4AABCOAAAQgAAAEI8AABCAAAAQjwAAEIEAABCPAAAQgQAAEI8AABCBAAAQjQAAEIEAABCNAAAQfAAAEI0AABB8AAAQjQAAEHgAABCNAAAQeAAAEI0AABB0AAAQjgAAEHQAABCOAAAQdAAAEI8AABB0AAAQjwAAEHQAABCOAAAQdAAAEI4AABB0AAAQjQAAEHQAABCNAAAQdgAAEI8AABB2AAAQjwAAEHgAABCSAAAQeAAAEJIAABB4AAAQlAAAEHgAABCUAAAQegAAEJEAABB6AAAQkQAAEH4AABCSAAAQfgAAEJIAABB+AAAQjwAAEH4AABCPAAAQfgAAEI4AABB+AAAQjgAAEHgAABCRAAAQeAAAEJEAABB8AAAQkAAAEHwAABCQAAAQfgAAEJMAABB+AAAQkwAAEIIAABCWAAAQggAAEJYAABCDAAAQlgAAEIMAABCWAAAQgwAAEJYAABCDAAAQlgAAEIEAABCVAAAQgQAAEJUAABB+AAAQlwAAEH4AABCXAAAQeAAAEJUAABB4AAAQlQAAEHgAABCXAAAQeAAAEJcAABByAAAQlQAAEHIAABCVAAAQdAAAEJQAABB0AAAQlAAAEHYAABCUAAAQdgAAEJQAABB6AAAQkgAAEHoAABCSAAAQegAAEJAAABB6AAAQkAAAEHQAABCQAAAQdAAAEJAAABB0AAAQjgAAEHQAABCOAAAQdAAAEI8AABB0AAAQjwAAEHoAABCSAAAQegAAEJIAABB0AAAQkgAAEHQAABCSAAAQdgAAEJMAABB2AAAQkwAAEHgAABCSAAAQeAAAEJIAABB8AAAQkgAAEHwAABCSAAAQegAAEJUAABB6AAAQlQAAEH4AABCXAAAQfgAAEJcAABCCAAAQlAAAEIIAABCUAAAQgwAAEJIAABCDAAAQkgAAEIMAABCSAAAQgwAAEJIAABCCAAAQkQAAEIIAABCRAAAQfgAAEJAAABB+AAAQkAAAEIEAABCNAAAQgQAAEI0AABCDAAAQjgAAEIMAABCOAAAQggAAEI4AABCCAAAQjgAAEIIAABCNAAAQggAAEI0AABCAAAAQkAAAEIAAABCQAAAQfAAAEI0AABB8AAAQjQAAEHoAABCNAAAQegAAEI0AABB0AAAQjwAAEHQAABCPAAAQcgAAEI8AABByAAAQjwAAEHIAABCNAAAQcgAAEI0AABB2AAAQjQAAEHYAABCNAAAQegAAEI8AABB6AAAQjwAAEHQAABCPAAAQdAAAEI8AABB2AAAQjwAAEHYAABCPAAAQcgAAEJEAABByAAAQkQAAEHIAABCOAAAQcgAAEI4AABB2AAAQkAAAEHYAABCQAAAQegAAEJAAABB6AAAQkAAAEH4AABCSAAAQfgAAEJIAABB4AAAQkQAAEHgAABCRAAAQegAAEJEAABB6AAAQkQAAEH4AABCSAAAQfgAAEJIAABCCAAAQlAAAEIIAABCUAAAQgwAAEJQAABCDAAAQlAAAEIEAABCTAAAQgQAAEJMAABB8AAAQkwAAEHwAABCTAAAQfgAAEJIAABB+AAAQkgAAEHwAABCRAAAQfAAAEJEAABB8AAAQkQAAEHwAABCRAAAQgAAAEJIAABCAAAAQkgAAEHoAABCRAAAQegAAEJEAABB2AAAQjwAAEHYAABCPAAAQdgAAEI4AABB2AAAQjgAAEHoAABCOAAAQegAAEI4AABB2AAAQkAAAEHYAABCQAAAQcgAAEJAAABByAAAQkAAAEHYAABCNAAAQdgAAEI0AABB4AAAQkAAAEHgAABCQAAAQdAAAEJAAABB0AAAQkAAAEHgAABCOAAAQeAAAEI4AABB8AAAQkAAAEHwAABCQAAAQgQAAEI8AABCBAAAQjwAAEIIAABCSAAAQggAAEJIAABCBAAAQlAAAEIEAABCUAAAQgwAAEJUAABCDAAAQlQAAEIEAABCSAAAQgQAAEJIAABCAAAAQkQAAEIAAABCRAAAQfgAAEJEAABB+AAAQkQAAEHwAABCTAAAQfAAAEJMAABB6AAAQkAAAEHoAABCQAAAQdgAAEJMAABB2AAAQkwAAEHQAABCWAAAQdAAAEJYAABB4AAAQlAAAEHgAABCUAAAQfgAAEJMAABB+AAAQkwAAEIEAABCQAAAQgQAAEJAAABCAAAAQjwAAEIAAABCPAAAQggAAEI8AABCCAAAQjwAAEIIAABCSAAAQggAAEJIAABCAAAAQlAAAEIAAABCUAAAQegAAEJIAABB6AAAQkgAAEHoAABCRAAAQegAAEJEAABB6AAAQjgAAEHoAABCOAAAQfAAAEI0AABB8AAAQjQAAEH4AABCQAAAQfgAAEJAAABB8AAAQkgAAEHwAABCSAAAQegAAEJAAABB6AAAQkAAAEHYAABCTAAAQdgAAEJMAABB6AAAQkAAAEHoAABCQAAAQdAAAEJIAABB0AAAQkgAAEHYAABCTAAAQdgAAEJMAABB4AAAQkQAAEHgAABCRAAAQegAAEJMAABB6AAAQkwAAEHYAABCSAAAQdgAAEJIAABB8AAAQjwAAEHwAABCPAAAQfgAAEJAAABB+AAAQkAAAEH4AABCQAAAQfgAAEJAAABCBAAAQkQAAEIEAABCRAAAQgAAAEJMAABCAAAAQkwAAEHoAABCQAAAQegAAEJAAABB8AAAQkAAAEHwAABCQAAAQdgAAEI4AABB2AAAQjgAAEHQAABCPAAAQdAAAEI8AABB6AAAQjQAAEHoAABCNAAAQdAAAEI0AABB0AAAQjQAAEHIAABCNAAAQcgAAEI0AABB2AAAQjQAAEHYAABCNAAAQeAAAEI0AABB4AAAQjQAAEH4AABCQAAAQfgAAEJAAABB+AAAQjwAAEH4AABCPAAAQggAAEI8AABCCAAAQjwAAEIMAABCPAAAQgwAAEI8AABCBAAAQjgAAEIEAABCOAAAQggAAEJEAABCCAAAQkQAAEH4AABCSAAAQfgAAEJIAABCBAAAQjwAAEIEAABCPAAAQgAAAEI4AABCAAAAQjgAAEIIAABCOAAAQggAAEI4AABCAAAAQjgAAEIAAABCOAAAQgAAAEJEAABCAAAAQkQAAEIMAABCUAAAQgwAAEJQAABCBAAAQlgAAEIEAABCWAAAQgQAAEJYAABCBAAAQlgAAEIIAABCXAAAQggAAEJcAABCDAAAQlgAAEIMAABCWAAAQgAAAEJcAABCAAAAQlwAAEIMAABCXAAAQgwAAEJcAABCDAAAQlQAAEIMAABCVAAAQgAAAEJcAABCAAAAQlwAAEIIAABCXAAAQggAAEJcAABCBAAAQlgAAEIEAABCWAAAQfAAAEJQAABB8AAAQlAAAEH4AABCWAAAQfgAAEJYAABB6AAAQlQAAEHoAABCVAAAQfAAAEJIAABB8AAAQkgAAEHoAABCQAAAQegAAEJAAABB0AAAQjQAAEHQAABCNAAAQdgAAEI0AABB2AAAQjQAAEHoAABCPAAAQegAAEI8AABB+AAAQjgAAEH4AABCOAAAQgQAAEI4AABCBAAAQjgAAEIIAABCOAAAQggAAEI4AABCDAAAQjQAAEIMAABCNAAAQgwAAEI4AABCDAAAQjgAAEIAAABCNAAAQgAAAEI0AABCBAAAQjwAAEIEAABCPAAAQgAAAEJAAABCAAAAQkAAAEH4AABCNAAAQfgAAEI0AABB6AAAQjgAAEHoAABCOAAAQdAAAEI8AABB0AAAQjwAAEHYAABCOAAAQdgAAEI4AABByAAAQkQAAEHIAABCRAAAQcgAAEJQAABByAAAQlAAAEHgAABCSAAAQeAAAEJIAABB4AAAQlQAAEHgAABCVAAAQfAAAEJUAABB8AAAQlQAAEIEAABCXAAAQgQAAEJcAABB8AAAQlwAAEHwAABCXAAAQdgAAEJcAABB2AAAQlwAAEHgAABCXAAAQeAAAEJcAABB4AAAQlgAAEHgAABCWAAAQdgAAEJUAABB2AAAQlQAAEHIAABCTAAAQcgAAEJMAABByAAAQkAAAEHIAABCQAAAQeAAAEI8AABB4AAAQjwAAEHwAABCQAAAQfAAAEJAAABB6AAAQjgAAEHoAABCOAAAQdgAAEJAAABB2AAAQkAAAEHwAABCTAAAQfAAAEJMAABB+AAAQlgAAEH4AABCWAAAQggAAEJUAABCCAAAQlQAAEIMAABCSAAAQgwAAEJIAABCDAAAQkgAAEIMAABCSAAAQgQAAEI8AABCBAAAQjwAAEIIAABCOAAAQggAAEI4AABCCAAAQjwAAEIIAABCPAAAQgAAAEI0AABCAAAAQjQAAEIAAABCNAAAQgAAAEI0AABCAAAAQjwAAEIAAABCPAAAQegAAEI8AABB6AAAQjwAAEHgAABCQAAAQeAAAEJAAABB6AAAQkQAAEHoAABCRAAAQdgAAEI8AABB2AAAQjwAAEHoAABCOAAAQegAAEI4AABB0AAAQjwAAEHQAABCPAAAQdAAAEI4AABB0AAAQjgAAEHQAABCOAAAQdAAAEI4AABB2AAAQjQAAEHYAABCNAAAQcgAAEJAAABByAAAQkAAAEHIAABCSAAAQcgAAEJIAABB0AAAQkwAAEHQAABCTAAAQdgAAEJMAABB2AAAQkwAAEHoAABCRAAAQegAAEJEAABB0AAAQkwAAEHQAABCTAAAQcgAAEJYAABByAAAQlgAAEHIAABCWAAAQcgAAEJYAABByAAAQlgAAEHIAABCWAAAQdAAAEJcAABB0AAAQlwAAEHIAABCXAAAQcgAAEJcAABB0AAAQlQAAEHQAABCVAAAQcgAAEJUAABByAAAQlQAAEHIAABCTAAAQcgAAEJMAABB0AAAQkAAAEHQAABCQAAAQeAAAEI8AABB4AAAQjwAAEHoAABCQAAAQegAAEJAAABB6AAAQkgAAEHoAABCSAAAQegAAEI8AABB6AAAQjwAAEHYAABCQAAAQdgAAEJAAABB6AAAQjgAAEHoAABCOAAAQdAAAEJEAABB0AAAQkQAAEHoAABCPAAAQegAAEI8AABB4AAAQjgAAEHgAABCOAAAQfAAAEJEAABB8AAAQkQAAEH4AABCQAAAQfgAAEJAAABB4AAAQkAAAEHgAABCQAAAQdgAAEJAAABB2AAAQkAAAEHwAABCQAAAQfAAAEJAAABB8AAAQkgAAEHwAABCSAAAQdgAAEJUAABB2AAAQlQAAEHIAABCUAAAQcgAAEJQAABB4AAAQlQAAEHgAABCVAAAQegAAEJQAABB6AAAQlAAAEIAAABCRAAAQgAAAEJEAABCCAAAQkwAAEIIAABCTAAAQgQAAEJYAABCBAAAQlgAAEH4AABCXAAAQfgAAEJcAABB6AAAQlgAAEHoAABCWAAAQdAAAEJcAABB0AAAQlwAAEHQAABCVAAAQdAAAEJUAABByAAAQkgAAEHIAABCSAAAQdAAAEI8AABB0AAAQjwAAEHIAABCRAAAQcgAAEJEAABB0AAAQkwAAEHQAABCTAAAQcgAAEJYAABByAAAQlgAAEHIAABCUAAAQcgAAEJQAABB0AAAQlgAAEHQAABCWAAAQcgAAEJMAABByAAAQkwAAEHYAABCSAAAQdgAAEJIAABB6AAAQkwAAEHoAABCTAAAQdgAAEJIAABB2AAAQkgAAEHIAABCQAAAQcgAAEJAAABByAAAQjQAAEHIAABCNAAAQdAAAEI0AABB0AAAQjQAAEHQAABCPAAAQdAAAEI8AABB6AAAQkgAAEHoAABCSAAAQegAAEJIAABB6AAAQkgAAEHQAABCRAAAQdAAAEJEAABB4AAAQjgAAEHgAABCOAAAQcgAAEI0AABByAAAQjQAAEHYAABCPAAAQdgAAEI8AABB6AAAQkgAAEHoAABCSAAAQdgAAEJAAABB2AAAQkAAAEHYAABCOAAAQdgAAEI4AABByAAAQkAAAEHIAABCQAAAQdAAAEJEAABB0AAAQkQAAEHIAABCQAAAQcgAAEJAAABB0AAAQjgAAEHQAABCOAAAQdgAAEI8AABB2AAAQjwAAEHYAABCSAAAQdgAAEJIAABB8AAAQkwAAEHwAABCTAAAQfAAAEJMAABB8AAAQkwAAEIEAABCTAAAQgQAAEJMAABCCAAAQlgAAEIIAABCWAAAQggAAEJUAABCCAAAQlQAAEIEAABCTAAAQgQAAEJMAABCBAAAQkQAAEIEAABCRAAAQfAAAEJAAABB8AAAQkAAAEHgAABCNAAAQeAAAEI0AABB+AAAQjgAAEH4AABCOAAAQegAAEI8AABB6AAAQjwAAEHoAABCQAAAQegAAEJAAABB8AAAQjQAAEHwAABCNAAAQgAAAEI0AABCAAAAQjQAAEIMAABCPAAAQgwAAEI8AABCCAAAQjQAAEIIAABCNAAAQgwAAEI0AABCDAAAQjQAAEIAAABCPAAAQgAAAEI8AABB+AAAQjwAAEH4AABCPAAAQfgAAEJEAABB+AAAQkQAAEHwAABCRAAAQfAAAEJEAABB6AAAQlAAAEHoAABCUAAAQeAAAEJQAABB4AAAQlAAAEHIAABCUAAAQcgAAEJQAABB0AAAQkQAAEHQAABCRAAAQdAAAEJAAABB0AAAQkAAAEHYAABCTAAAQdgAAEJMAABB6AAAQlgAAEHoAABCWAAAQdgAAEJcAABB2AAAQlwAAEHwAABCWAAAQfAAAEJYAABB8AAAQlQAAEHwAABCVAAAQegAAEJIAABB6AAAQkgAAEHoAABCQAAAQegAAEJAAABB4AAAQjQAAEHgAABCNAAAQcgAAEI0AABByAAAQjQAAEHgAABCQAAAQeAAAEJAAABB4AAAQjQAAEHgAABCNAAAQcgAAEI8AABByAAAQjwAAEHYAABCSAAAQdgAAEJIAABB0AAAQkAAAEHQAABCQAAAQcgAAEI0AABByAAAQjQAAEHIAABCPAAAQcgAAEI8AABB0AAAQjQAAEHQAABCNAAAQdAAAEI4AABB0AAAQjgAAEHYAABCPAAAQdgAAEI8AABB4AAAQjQAAEHgAABCNAAAQdgAAEI4AABB2AAAQjgAAEHYAABCPAAAQdgAAEI8AABB4AAAQkQAAEHgAABCRAAAQdgAAEI4AABB2AAAQjgAAEHwAABCOAAAQfAAAEI4AABB8AAAQkQAAEHwAABCRAAAQdgAAEJMAABB2AAAQkwAAEHIAABCQAAAQcgAAEJAAABB2AAAQkQAAEHYAABCRAAAQdAAAEJMAABB0AAAQkwAAEHYAABCTAAAQdgAAEJMAABB0AAAQlgAAEHQAABCWAAAQegAAEJQAABB6AAAQlAAAEHQAABCVAAAQdAAAEJUAABB6AAAQlwAAEHoAABCXAAAQgAAAEJUAABCAAAAQlQAAEIEAABCVAAAQgQAAEJUAABB8AAAQlgAAEHwAABCWAAAQfAAAEJYAABB8AAAQlgAAEIEAABCVAAAQgQAAEJUAABCDAAAQlwAAEIMAABCXAAAQgQAAEJUAABCBAAAQlQAAEIMAABCVAAAQgwAAEJUAABCBAAAQlwAAEIEAABCXAAAQgwAAEJUAABCDAAAQlQAAEIIAABCTAAAQggAAEJMAABCBAAAQlAAAEIEAABCUAAAQgQAAEJEAABCBAAAQkQAAEIMAABCPAAAQgwAAEI8AABCCAAAQjgAAEIIAABCOAAAQggAAEI0AABCCAAAQjQAAEIIAABCNAAAQggAAEI0AABCAAAAQjgAAEIAAABCOAAAQegAAEI4AABB6AAAQjgAAEHYAABCNAAAQdgAAEI0AABB8AAAQjQAAEHwAABCNAAAQeAAAEI8AABB4AAAQjwAAEHgAABCOAAAQeAAAEI4AABB4AAAQjwAAEHgAABCPAAAQegAAEJAAABB6AAAQkAAAEIAAABCNAAAQgAAAEI0AABCAAAAQjQAAEIAAABCNAAAQgQAAEJAAABCBAAAQkAAAEIEAABCOAAAQgQAAEI4AABCBAAAQjgAAEIEAABCOAAAQfAAAEJAAABB8AAAQkAAAEHgAABCTAAAQeAAAEJMAABB+AAAQlQAAEH4AABCVAAAQegAAEJIAABB6AAAQkgAAEHQAABCPAAAQdAAAEI8AABB0AAAQkQAAEHQAABCRAAAQdAAAEJEAABB0AAAQkQAAEHgAABCOAAAQeAAAEI4AABB0AAAQjwAAEHQAABCPAAAQcgAAEJEAABByAAAQkQAAEHQAABCOAAAQdAAAEI4AABB2AAAQkQAAEHYAABCRAAAQeAAAEJQAABB4AAAQlAAAEHoAABCSAAAQegAAEJIAABB8AAAQjwAAEHwAABCPAAAQegA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AAAAQEARAAAAAAAAR0ARAAAAAAAAQEARAAAAAAAAR0ARAAAAAAAAQEARAAAAAACASEARAAAAAAAAQEARAAAAAACASEARAAAAAACAQUARAAAAAAAASkARAAAAAACAQUARAAAAAAAASkARAAAAAACAQEARAAAAAAAAS0ARAAAAAACAQEARAAAAAAAAS0ARAAAAAACAQEARAAAAAAAAS0ARAAAAAACAQEARAAAAAAAAS0ARAAAAAAAAQUARAAAAAACAS0ARAAAAAAAAQUARAAAAAACAS0ARAAAAAACAQUARAAAAAAAAS0ARAAAAAACAQUARAAAAAAAAS0BcYwggEQAAAAAAADxAEQAAAAAAgEdAEQAAAAAAADxAEQAAAAAAgEdAEQAAAAAAAEBAEQAAAAAAAEdAEQAAAAAAAEBAEQAAAAAAAEdAEQAAAAAAAEBAEQAAAAAAgEhAEQAAAAAAAEBAEQAAAAAAgEhAEQAAAAAAgEFAEQAAAAAAAEpAEQAAAAAAgEFAEQAAAAAAAEpAEQAAAAAAgEBAEQAAAAAAAEtAEQAAAAAAgEBAEQAAAAAAAEtAEQAAAAAAgEBAEQAAAAAAAEtAEQAAAAAAgEBAEQAAAAAAAEtAEQAAAAAAAEFAEQAAAAAAgEtAEQAAAAAAAEFAEQAAAAAAgEtAEQAAAAAAgEFAEQAAAAAAAEtAEQAAAAAAgEFAEQAAAAAAAEtAZGgAcAB4AIABBYgBAJIBCFNUQU5EQVJEmgEETk9ORaABAKgBAA== ================================================ FILE: Java/parkservices/src/test/resources/com/amazon/randomcutforest/parkservices/state/state_1.json ================================================ { "version": "2.1", "forestState": { "version": "2.0", "totalUpdates": 1257, "timeDecay": 1.0e-4, "numberOfTrees": 30, "sampleSize": 256, "shingleSize": 8, "dimensions": 32, "outputAfter": 32, "compressed": true, "partialTreeState": true, "boundingBoxCacheFraction": 0.0, "storeSequenceIndexesEnabled": false, "compact": true, "internalShinglingEnabled": false, "centerOfMassEnabled": false, "precision": "FLOAT_32", "pointStoreState": { "version": "2.0", "dimensions": 32, "capacity": 7681, "shingleSize": 8, "precision": "FLOAT_32", "startOfFreeSegment": 9536, "pointData": [ 0, 0, 0, 0, 66, -114, 0, 0, 66, -114, 0, 0, 66, -114, 0, 0, 0, 0, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 0, 0, 0, 0, 66, -76, 0, 0, 66, -76, 0, 0, 66, -76, 0, 0, 0, 0, 0, 0, 66, -76, 0, 0, 66, -76, 0, 0, 66, -76, 0, 0, 0, 0, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 0, 0, 0, 0, 66, 72, 0, 0, 66, 72, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, 100, 0, 0, 66, 100, 0, 0, 66, 100, 0, 0, 0, 0, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 0, 0, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 0, 0, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 0, 0, 0, 0, 66, 72, 0, 0, 66, 72, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, 100, 0, 0, 66, 100, 0, 0, 66, 100, 0, 0, 0, 0, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 0, 0, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 0, 0, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 0, 0, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -70, 0, 0, 66, -70, 0, 0, 66, -70, 0, 0, 0, 0, 0, 0, 66, -85, 0, 0, 66, -64, 0, 0, 66, -106, 0, 0, 0, 0, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 0, 0, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 0, 0, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -70, 0, 0, 66, -70, 0, 0, 66, -70, 0, 0, 0, 0, 0, 0, 66, -85, 0, 0, 66, -64, 0, 0, 66, -106, 0, 0, 0, 0, 0, 0, 66, -106, 0, 0, 66, -106, 0, 0, 66, -106, 0, 0, 0, 0, 0, 0, 66, -106, 0, 0, 66, -106, 0, 0, 66, -106, 0, 0, 0, 0, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -96, 0, 0, 66, -96, 0, 0, 66, -96, 0, 0, 0, 0, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 0, 0, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 0, 0, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 0, 0, 0, 0, 66, -62, 0, 0, 66, -62, 0, 0, 66, -62, 0, 0, 0, 0, 0, 0, 66, -120, 0, 0, 66, -120, 0, 0, 66, -120, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, -104, 0, 0, 66, -104, 0, 0, 66, -104, 0, 0, 0, 0, 0, 0, 66, -102, 0, 0, 66, -102, 0, 0, 66, -102, 0, 0, 0, 0, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 0, 0, 0, 0, 66, -74, 0, 0, 66, -74, 0, 0, 66, -74, 0, 0, 0, 0, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 0, 0, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 0, 0, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -102, 0, 0, 66, -102, 0, 0, 66, -102, 0, 0, 0, 0, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 0, 0, 0, 0, 66, -74, 0, 0, 66, -74, 0, 0, 66, -74, 0, 0, 0, 0, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 0, 0, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 0, 0, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, 106, 0, 0, 66, 116, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, 106, 0, 0, 66, 116, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 0, 0, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, 104, 0, 0, 66, 104, 0, 0, 66, 104, 0, 0, 0, 0, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 0, 0, 0, 0, 66, -62, 0, 0, 66, -58, 0, 0, 66, -66, 0, 0, 0, 0, 0, 0, 66, -70, 0, 0, 66, -70, 0, 0, 66, -70, 0, 0, 0, 0, 0, 0, 66, -112, 0, 0, 66, -112, 0, 0, 66, -112, 0, 0, 0, 0, 0, 0, 66, -102, 0, 0, 66, -102, 0, 0, 66, -102, 0, 0, 0, 0, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 0, 0, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 0, 0, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 0, 0, 0, 0, 66, -102, 0, 0, 66, -102, 0, 0, 66, -102, 0, 0, 0, 0, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 0, 0, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 0, 0, 0, 0, 66, -98, 0, 0, 66, -68, 0, 0, 66, -128, 0, 0, 0, 0, 0, 0, 66, -111, 0, 0, 66, -90, 0, 0, 66, 120, 0, 0, 0, 0, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 0, 0, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 0, 0, 0, 0, 66, -80, 0, 0, 66, -80, 0, 0, 66, -80, 0, 0, 0, 0, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 0, 0, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 0, 0, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 0, 0, 0, 0, 66, -114, 0, 0, 66, -76, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 0, 0, 0, 0, 66, -80, 0, 0, 66, -80, 0, 0, 66, -80, 0, 0, 0, 0, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 0, 0, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 0, 0, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 0, 0, 0, 0, 66, -114, 0, 0, 66, -76, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, -104, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, -104, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -62, 0, 0, 66, -62, 0, 0, 66, -62, 0, 0, 0, 0, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 0, 0, 0, 0, 66, -127, 0, 0, 66, -98, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 0, 0, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 0, 0, 0, 0, 66, -127, 0, 0, 66, -98, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 0, 0, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, 72, 0, 0, 66, 72, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -122, 0, 0, 66, -122, 0, 0, 66, -122, 0, 0, 0, 0, 0, 0, 66, -98, 0, 0, 66, -98, 0, 0, 66, -98, 0, 0, 0, 0, 0, 0, 66, -62, 0, 0, 66, -62, 0, 0, 66, -62, 0, 0, 0, 0, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 0, 0, 0, 0, 66, 104, 0, 0, 66, 104, 0, 0, 66, 104, 0, 0, 0, 0, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 0, 0, 0, 0, 66, -106, 0, 0, 66, -106, 0, 0, 66, -106, 0, 0, 0, 0, 0, 0, 66, -106, 0, 0, 66, -106, 0, 0, 66, -106, 0, 0, 0, 0, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 0, 0, 0, 0, 66, -102, 0, 0, 66, -102, 0, 0, 66, -102, 0, 0, 0, 0, 0, 0, 66, 110, 0, 0, 66, -116, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 0, 0, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 0, 0, 0, 0, 66, -102, 0, 0, 66, -102, 0, 0, 66, -102, 0, 0, 0, 0, 0, 0, 66, 92, 0, 0, 66, 100, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 0, 0, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 0, 0, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 0, 0, 0, 0, 66, -102, 0, 0, 66, -102, 0, 0, 66, -102, 0, 0, 0, 0, 0, 0, 66, 92, 0, 0, 66, 100, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 0, 0, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 0, 0, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 0, 0, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 0, 0, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 0, 0, 0, 0, 66, 120, 0, 0, 66, 120, 0, 0, 66, 120, 0, 0, 0, 0, 0, 0, 66, -74, 0, 0, 66, -74, 0, 0, 66, -74, 0, 0, 0, 0, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 0, 0, 0, 0, 66, -96, 0, 0, 66, -96, 0, 0, 66, -96, 0, 0, 0, 0, 0, 0, 66, -104, 0, 0, 66, -104, 0, 0, 66, -104, 0, 0, 0, 0, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 0, 0, 0, 0, 66, -80, 0, 0, 66, -80, 0, 0, 66, -80, 0, 0, 0, 0, 0, 0, 66, -108, 0, 0, 66, -80, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 0, 0, 0, 0, 66, -96, 0, 0, 66, -96, 0, 0, 66, -96, 0, 0, 0, 0, 0, 0, 66, -104, 0, 0, 66, -104, 0, 0, 66, -104, 0, 0, 0, 0, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 0, 0, 0, 0, 66, -80, 0, 0, 66, -80, 0, 0, 66, -80, 0, 0, 0, 0, 0, 0, 66, -108, 0, 0, 66, -80, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, -111, 0, 0, 66, -106, 0, 0, 66, -116, 0, 0, 0, 0, 0, 0, 66, -111, 0, 0, 66, -106, 0, 0, 66, -116, 0, 0, 0, 0, 0, 0, 66, -104, 0, 0, 66, -104, 0, 0, 66, -104, 0, 0, 0, 0, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 0, 0, 0, 0, 66, -80, 0, 0, 66, -80, 0, 0, 66, -80, 0, 0, 0, 0, 0, 0, 66, -108, 0, 0, 66, -80, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, -111, 0, 0, 66, -106, 0, 0, 66, -116, 0, 0, 0, 0, 0, 0, 66, -111, 0, 0, 66, -106, 0, 0, 66, -116, 0, 0, 0, 0, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 0, 0, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, -120, 0, 0, 66, -108, 0, 0, 66, 120, 0, 0, 0, 0, 0, 0, 66, -60, 0, 0, 66, -60, 0, 0, 66, -60, 0, 0, 0, 0, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 0, 0, 0, 0, 66, 96, 0, 0, 66, 108, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, -120, 0, 0, 66, -108, 0, 0, 66, 120, 0, 0, 0, 0, 0, 0, 66, -60, 0, 0, 66, -60, 0, 0, 66, -60, 0, 0, 0, 0, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 0, 0, 0, 0, 66, 96, 0, 0, 66, 108, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -60, 0, 0, 66, -60, 0, 0, 66, -60, 0, 0, 0, 0, 0, 0, 66, -60, 0, 0, 66, -60, 0, 0, 66, -60, 0, 0, 0, 0, 0, 0, 66, 72, 0, 0, 66, 72, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -65, 0, 0, 66, -64, 0, 0, 66, -66, 0, 0, 0, 0, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 0, 0, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 0, 0, 0, 0, 66, -122, 0, 0, 66, -122, 0, 0, 66, -122, 0, 0, 0, 0, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 0, 0, 0, 0, 66, -98, 0, 0, 66, -98, 0, 0, 66, -98, 0, 0, 0, 0, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 0, 0, 0, 0, 66, -64, 0, 0, 66, -64, 0, 0, 66, -64, 0, 0, 0, 0, 0, 0, 66, -74, 0, 0, 66, -74, 0, 0, 66, -74, 0, 0, 0, 0, 0, 0, 66, 126, 0, 0, 66, -100, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -98, 0, 0, 66, -98, 0, 0, 66, -98, 0, 0, 0, 0, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 0, 0, 0, 0, 66, -64, 0, 0, 66, -64, 0, 0, 66, -64, 0, 0, 0, 0, 0, 0, 66, -74, 0, 0, 66, -74, 0, 0, 66, -74, 0, 0, 0, 0, 0, 0, 66, 126, 0, 0, 66, -100, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -106, 0, 0, 66, -74, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, -106, 0, 0, 66, -74, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, -62, 0, 0, 66, -62, 0, 0, 66, -62, 0, 0, 0, 0, 0, 0, 66, -102, 0, 0, 66, -102, 0, 0, 66, -102, 0, 0, 0, 0, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 0, 0, 0, 0, 66, -112, 0, 0, 66, -112, 0, 0, 66, -112, 0, 0, 0, 0, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 0, 0, 0, 0, 66, -98, 0, 0, 66, -98, 0, 0, 66, -98, 0, 0, 0, 0, 0, 0, 66, -109, 0, 0, 66, -86, 0, 0, 66, 120, 0, 0, 0, 0, 0, 0, 66, -80, 0, 0, 66, -80, 0, 0, 66, -80, 0, 0, 0, 0, 0, 0, 66, -112, 0, 0, 66, -112, 0, 0, 66, -112, 0, 0, 0, 0, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 0, 0, 0, 0, 66, -98, 0, 0, 66, -98, 0, 0, 66, -98, 0, 0, 0, 0, 0, 0, 66, -109, 0, 0, 66, -86, 0, 0, 66, 120, 0, 0, 0, 0, 0, 0, 66, -80, 0, 0, 66, -80, 0, 0, 66, -80, 0, 0, 0, 0, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 0, 0, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 0, 0, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 0, 0, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 0, 0, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 0, 0, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 0, 0, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 0, 0, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 0, 0, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 0, 0, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 0, 0, 0, 0, 66, -89, 0, 0, 66, -62, 0, 0, 66, -116, 0, 0, 0, 0, 0, 0, 66, -89, 0, 0, 66, -62, 0, 0, 66, -116, 0, 0, 0, 0, 0, 0, 66, -64, 0, 0, 66, -64, 0, 0, 66, -64, 0, 0, 0, 0, 0, 0, 66, -85, 0, 0, 66, -68, 0, 0, 66, -102, 0, 0, 0, 0, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 0, 0, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 0, 0, 0, 0, 66, -89, 0, 0, 66, -62, 0, 0, 66, -116, 0, 0, 0, 0, 0, 0, 66, -89, 0, 0, 66, -62, 0, 0, 66, -116, 0, 0, 0, 0, 0, 0, 66, -64, 0, 0, 66, -64, 0, 0, 66, -64, 0, 0, 0, 0, 0, 0, 66, -85, 0, 0, 66, -68, 0, 0, 66, -102, 0, 0, 0, 0, 0, 0, 66, -111, 0, 0, 66, -78, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, -111, 0, 0, 66, -78, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, -89, 0, 0, 66, -62, 0, 0, 66, -116, 0, 0, 0, 0, 0, 0, 66, -64, 0, 0, 66, -64, 0, 0, 66, -64, 0, 0, 0, 0, 0, 0, 66, -85, 0, 0, 66, -68, 0, 0, 66, -102, 0, 0, 0, 0, 0, 0, 66, -111, 0, 0, 66, -78, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, -111, 0, 0, 66, -78, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 0, 0, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 0, 0, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 0, 0, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -114, 0, 0, 66, -114, 0, 0, 66, -114, 0, 0, 0, 0, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 0, 0, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 0, 0, 0, 0, 66, -82, 0, 0, 66, -82, 0, 0, 66, -82, 0, 0, 0, 0, 0, 0, 66, -102, 0, 0, 66, -102, 0, 0, 66, -102, 0, 0, 0, 0, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 0, 0, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 0, 0, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 0, 0, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 0, 0, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, -76, 0, 0, 66, -76, 0, 0, 66, -76, 0, 0, 0, 0, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 0, 0, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 0, 0, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 0, 0, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 0, 0, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, -76, 0, 0, 66, -76, 0, 0, 66, -76, 0, 0, 0, 0, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 0, 0, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 0, 0, 0, 0, 66, -109, 0, 0, 66, -72, 0, 0, 66, 92, 0, 0, 0, 0, 0, 0, 66, -64, 0, 0, 66, -64, 0, 0, 66, -64, 0, 0, 0, 0, 0, 0, 66, 104, 0, 0, 66, 104, 0, 0, 66, 104, 0, 0, 0, 0, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 0, 0, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -60, 0, 0, 66, -60, 0, 0, 66, -60, 0, 0, 0, 0, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 0, 0, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 0, 0, 0, 0, 66, -113, 0, 0, 66, -102, 0, 0, 66, -124, 0, 0, 0, 0, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 0, 0, 0, 0, 66, -76, 0, 0, 66, -76, 0, 0, 66, -76, 0, 0, 0, 0, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -122, 0, 0, 66, -122, 0, 0, 66, -122, 0, 0, 0, 0, 0, 0, 66, -120, 0, 0, 66, -120, 0, 0, 66, -120, 0, 0, 0, 0, 0, 0, 66, -113, 0, 0, 66, -102, 0, 0, 66, -124, 0, 0, 0, 0, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 0, 0, 0, 0, 66, -76, 0, 0, 66, -76, 0, 0, 66, -76, 0, 0, 0, 0, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -122, 0, 0, 66, -122, 0, 0, 66, -122, 0, 0, 0, 0, 0, 0, 66, -120, 0, 0, 66, -120, 0, 0, 66, -120, 0, 0, 0, 0, 0, 0, 66, -105, 0, 0, 66, -64, 0, 0, 66, 92, 0, 0, 0, 0, 0, 0, 66, -105, 0, 0, 66, -64, 0, 0, 66, 92, 0, 0, 0, 0, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, 100, 0, 0, 66, 116, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -120, 0, 0, 66, -120, 0, 0, 66, -120, 0, 0, 0, 0, 0, 0, 66, -105, 0, 0, 66, -64, 0, 0, 66, 92, 0, 0, 0, 0, 0, 0, 66, -105, 0, 0, 66, -64, 0, 0, 66, 92, 0, 0, 0, 0, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, 100, 0, 0, 66, 116, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 0, 0, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 0, 0, 0, 0, 66, -106, 0, 0, 66, -100, 0, 0, 66, -112, 0, 0, 0, 0, 0, 0, 66, -62, 0, 0, 66, -62, 0, 0, 66, -62, 0, 0, 0, 0, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 0, 0, 0, 0, 66, -94, 0, 0, 66, -78, 0, 0, 66, -110, 0, 0, 0, 0, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 0, 0, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 0, 0, 0, 0, 66, -106, 0, 0, 66, -100, 0, 0, 66, -112, 0, 0, 0, 0, 0, 0, 66, -62, 0, 0, 66, -62, 0, 0, 66, -62, 0, 0, 0, 0, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 0, 0, 0, 0, 66, -94, 0, 0, 66, -78, 0, 0, 66, -110, 0, 0, 0, 0, 0, 0, 66, 100, 0, 0, 66, 120, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, 100, 0, 0, 66, 120, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 0, 0, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 0, 0, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 0, 0, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 0, 0, 0, 0, 66, 120, 0, 0, 66, 120, 0, 0, 66, 120, 0, 0, 0, 0, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 0, 0, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, 72, 0, 0, 66, 72, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 0, 0, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 0, 0, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 0, 0, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 0, 0, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 0, 0, 0, 0, 66, -70, 0, 0, 66, -70, 0, 0, 66, -70, 0, 0, 0, 0, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, 104, 0, 0, 66, 104, 0, 0, 66, 104, 0, 0, 0, 0, 0, 0, 66, -84, 0, 0, 66, -84, 0, 0, 66, -84, 0, 0, 0, 0, 0, 0, 66, -64, 0, 0, 66, -64, 0, 0, 66, -64, 0, 0, 0, 0, 0, 0, 66, -70, 0, 0, 66, -70, 0, 0, 66, -70, 0, 0, 0, 0, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, -110, 0, 0, 66, -80, 0, 0, 66, 104, 0, 0, 0, 0, 0, 0, 66, 104, 0, 0, 66, 104, 0, 0, 66, 104, 0, 0, 0, 0, 0, 0, 66, -84, 0, 0, 66, -84, 0, 0, 66, -84, 0, 0, 0, 0, 0, 0, 66, -64, 0, 0, 66, -64, 0, 0, 66, -64, 0, 0, 0, 0, 0, 0, 66, -70, 0, 0, 66, -70, 0, 0, 66, -70, 0, 0, 0, 0, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, -110, 0, 0, 66, -80, 0, 0, 66, 104, 0, 0, 0, 0, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 0, 0, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 0, 0, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 0, 0, 0, 0, 66, 104, 0, 0, 66, 104, 0, 0, 66, 104, 0, 0, 0, 0, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 0, 0, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -74, 0, 0, 66, -74, 0, 0, 66, -74, 0, 0, 0, 0, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 0, 0, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 0, 0, 0, 0, 66, -104, 0, 0, 66, -104, 0, 0, 66, -104, 0, 0, 0, 0, 0, 0, 66, -82, 0, 0, 66, -76, 0, 0, 66, -88, 0, 0, 0, 0, 0, 0, 66, -98, 0, 0, 66, -98, 0, 0, 66, -98, 0, 0, 0, 0, 0, 0, 66, -102, 0, 0, 66, -102, 0, 0, 66, -102, 0, 0, 0, 0, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 0, 0, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 0, 0, 0, 0, 66, -121, 0, 0, 66, -98, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, -102, 0, 0, 66, -102, 0, 0, 66, -102, 0, 0, 0, 0, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 0, 0, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 0, 0, 0, 0, 66, -121, 0, 0, 66, -98, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, -70, 0, 0, 66, -70, 0, 0, 66, -70, 0, 0, 0, 0, 0, 0, 66, -70, 0, 0, 66, -70, 0, 0, 66, -70, 0, 0, 0, 0, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 0, 0, 0, 0, 66, 108, 0, 0, 66, -126, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, -70, 0, 0, 66, -70, 0, 0, 66, -70, 0, 0, 0, 0, 0, 0, 66, -70, 0, 0, 66, -70, 0, 0, 66, -70, 0, 0, 0, 0, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 0, 0, 0, 0, 66, 108, 0, 0, 66, -126, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, -64, 0, 0, 66, -64, 0, 0, 66, -64, 0, 0, 0, 0, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 0, 0, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 0, 0, 0, 0, 66, -62, 0, 0, 66, -62, 0, 0, 66, -62, 0, 0, 0, 0, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 0, 0, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 0, 0, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 0, 0, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 0, 0, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 0, 0, 0, 0, 66, -125, 0, 0, 66, -114, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, 120, 0, 0, 66, 120, 0, 0, 66, 120, 0, 0, 0, 0, 0, 0, 66, -114, 0, 0, 66, -114, 0, 0, 66, -114, 0, 0, 0, 0, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 0, 0, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 0, 0, 0, 0, 66, -125, 0, 0, 66, -114, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, 120, 0, 0, 66, 120, 0, 0, 66, 120, 0, 0, 0, 0, 0, 0, 66, -114, 0, 0, 66, -114, 0, 0, 66, -114, 0, 0, 0, 0, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 0, 0, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 0, 0, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 0, 0, 0, 0, 66, -106, 0, 0, 66, -106, 0, 0, 66, -106, 0, 0, 0, 0, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 0, 0, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 0, 0, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 0, 0, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 0, 0, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 0, 0, 0, 0, 66, -106, 0, 0, 66, -106, 0, 0, 66, -106, 0, 0, 0, 0, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 0, 0, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 0, 0, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 0, 0, 0, 0, 66, -68, 0, 0, 66, -62, 0, 0, 66, -74, 0, 0, 0, 0, 0, 0, 66, -68, 0, 0, 66, -62, 0, 0, 66, -74, 0, 0, 0, 0, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 0, 0, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 0, 0, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 0, 0, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 0, 0, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 0, 0, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -102, 0, 0, 66, -102, 0, 0, 66, -102, 0, 0, 0, 0, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 0, 0, 0, 0, 66, -84, 0, 0, 66, -84, 0, 0, 66, -84, 0, 0, 0, 0, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 0, 0, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 0, 0, 0, 0, 66, 120, 0, 0, 66, 120, 0, 0, 66, 120, 0, 0, 0, 0, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 0, 0, 0, 0, 66, -84, 0, 0, 66, -84, 0, 0, 66, -84, 0, 0, 0, 0, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 0, 0, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 0, 0, 0, 0, 66, 120, 0, 0, 66, 120, 0, 0, 66, 120, 0, 0, 0, 0, 0, 0, 66, -107, 0, 0, 66, -102, 0, 0, 66, -112, 0, 0, 0, 0, 0, 0, 66, -107, 0, 0, 66, -102, 0, 0, 66, -112, 0, 0, 0, 0, 0, 0, 66, -123, 0, 0, 66, -108, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 0, 0, 0, 0, 66, 120, 0, 0, 66, 120, 0, 0, 66, 120, 0, 0, 0, 0, 0, 0, 66, -107, 0, 0, 66, -102, 0, 0, 66, -112, 0, 0, 0, 0, 0, 0, 66, -107, 0, 0, 66, -102, 0, 0, 66, -112, 0, 0, 0, 0, 0, 0, 66, -123, 0, 0, 66, -108, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, 120, 0, 0, 66, 120, 0, 0, 66, 120, 0, 0, 0, 0, 0, 0, 66, 120, 0, 0, 66, 120, 0, 0, 66, 120, 0, 0, 0, 0, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 0, 0, 0, 0, 66, -107, 0, 0, 66, -102, 0, 0, 66, -112, 0, 0, 0, 0, 0, 0, 66, -123, 0, 0, 66, -108, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, 120, 0, 0, 66, 120, 0, 0, 66, 120, 0, 0, 0, 0, 0, 0, 66, 120, 0, 0, 66, 120, 0, 0, 66, 120, 0, 0, 0, 0, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 0, 0, 0, 0, 66, -109, 0, 0, 66, -96, 0, 0, 66, -122, 0, 0, 0, 0, 0, 0, 66, -109, 0, 0, 66, -96, 0, 0, 66, -122, 0, 0, 0, 0, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 0, 0, 0, 0, 66, 120, 0, 0, 66, 120, 0, 0, 66, 120, 0, 0, 0, 0, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 0, 0, 0, 0, 66, -109, 0, 0, 66, -96, 0, 0, 66, -122, 0, 0, 0, 0, 0, 0, 66, -109, 0, 0, 66, -96, 0, 0, 66, -122, 0, 0, 0, 0, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 0, 0, 0, 0, 66, -96, 0, 0, 66, -96, 0, 0, 66, -96, 0, 0, 0, 0, 0, 0, 66, -96, 0, 0, 66, -96, 0, 0, 66, -96, 0, 0, 0, 0, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 0, 0, 0, 0, 66, -116, 0, 0, 66, -112, 0, 0, 66, -120, 0, 0, 0, 0, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 0, 0, 0, 0, 66, -96, 0, 0, 66, -96, 0, 0, 66, -96, 0, 0, 0, 0, 0, 0, 66, -96, 0, 0, 66, -96, 0, 0, 66, -96, 0, 0, 0, 0, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 0, 0, 0, 0, 66, -116, 0, 0, 66, -112, 0, 0, 66, -120, 0, 0, 0, 0, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 0, 0, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 0, 0, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -120, 0, 0, 66, -120, 0, 0, 66, -120, 0, 0, 0, 0, 0, 0, 66, -71, 0, 0, 66, -62, 0, 0, 66, -80, 0, 0, 0, 0, 0, 0, 66, -70, 0, 0, 66, -70, 0, 0, 66, -70, 0, 0, 0, 0, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 0, 0, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 0, 0, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 0, 0, 0, 0, 66, -98, 0, 0, 66, -98, 0, 0, 66, -98, 0, 0, 0, 0, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 0, 0, 0, 0, 66, -64, 0, 0, 66, -64, 0, 0, 66, -64, 0, 0, 0, 0, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 0, 0, 0, 0, 66, -60, 0, 0, 66, -60, 0, 0, 66, -60, 0, 0, 0, 0, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, -104, 0, 0, 66, -104, 0, 0, 66, -104, 0, 0, 0, 0, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, -84, 0, 0, 66, -84, 0, 0, 66, -84, 0, 0, 0, 0, 0, 0, 66, 108, 0, 0, 66, 112, 0, 0, 66, 104, 0, 0, 0, 0, 0, 0, 66, -84, 0, 0, 66, -84, 0, 0, 66, -84, 0, 0, 0, 0, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 0, 0, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 0, 0, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 0, 0, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 0, 0, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -95, 0, 0, 66, -88, 0, 0, 66, -102, 0, 0, 0, 0, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 0, 0, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -95, 0, 0, 66, -88, 0, 0, 66, -102, 0, 0, 0, 0, 0, 0, 66, -122, 0, 0, 66, -100, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, -122, 0, 0, 66, -100, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -95, 0, 0, 66, -88, 0, 0, 66, -102, 0, 0, 0, 0, 0, 0, 66, -122, 0, 0, 66, -100, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, -122, 0, 0, 66, -100, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, -62, 0, 0, 66, -62, 0, 0, 66, -62, 0, 0, 0, 0, 0, 0, 66, -62, 0, 0, 66, -62, 0, 0, 66, -62, 0, 0, 0, 0, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 0, 0, 0, 0, 66, -60, 0, 0, 66, -60, 0, 0, 66, -60, 0, 0, 0, 0, 0, 0, 66, -122, 0, 0, 66, -122, 0, 0, 66, -122, 0, 0, 0, 0, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 0, 0, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 0, 0, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, 72, 0, 0, 66, 72, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -60, 0, 0, 66, -60, 0, 0, 66, -60, 0, 0, 0, 0, 0, 0, 66, -122, 0, 0, 66, -122, 0, 0, 66, -122, 0, 0, 0, 0, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 0, 0, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 0, 0, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, 72, 0, 0, 66, 72, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -92, 0, 0, 66, -68, 0, 0, 66, -116, 0, 0, 0, 0, 0, 0, 66, -92, 0, 0, 66, -68, 0, 0, 66, -116, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, -120, 0, 0, 66, -120, 0, 0, 66, -120, 0, 0, 0, 0, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 0, 0, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 0, 0, 0, 0, 66, -102, 0, 0, 66, -102, 0, 0, 66, -102, 0, 0, 0, 0, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 0, 0, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 0, 0, 0, 0, 66, -70, 0, 0, 66, -70, 0, 0, 66, -70, 0, 0, 0, 0, 0, 0, 66, -82, 0, 0, 66, -82, 0, 0, 66, -82, 0, 0, 0, 0, 0, 0, 66, -112, 0, 0, 66, -112, 0, 0, 66, -112, 0, 0, 0, 0, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 0, 0, 0, 0, 66, -120, 0, 0, 66, -120, 0, 0, 66, -120, 0, 0, 0, 0, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 0, 0, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 0, 0, 0, 0, 66, -82, 0, 0, 66, -82, 0, 0, 66, -82, 0, 0, 0, 0, 0, 0, 66, -112, 0, 0, 66, -112, 0, 0, 66, -112, 0, 0, 0, 0, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 0, 0, 0, 0, 66, -120, 0, 0, 66, -120, 0, 0, 66, -120, 0, 0, 0, 0, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 0, 0, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 0, 0, 0, 0, 66, -73, 0, 0, 66, -70, 0, 0, 66, -76, 0, 0, 0, 0, 0, 0, 66, -73, 0, 0, 66, -70, 0, 0, 66, -76, 0, 0, 0, 0, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 0, 0, 0, 0, 66, -120, 0, 0, 66, -120, 0, 0, 66, -120, 0, 0, 0, 0, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 0, 0, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 0, 0, 0, 0, 66, -73, 0, 0, 66, -70, 0, 0, 66, -76, 0, 0, 0, 0, 0, 0, 66, -73, 0, 0, 66, -70, 0, 0, 66, -76, 0, 0, 0, 0, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 0, 0, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 0, 0, 0, 0, 66, -62, 0, 0, 66, -62, 0, 0, 66, -62, 0, 0, 0, 0, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 0, 0, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 0, 0, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, -80, 0, 0, 66, -80, 0, 0, 66, -80, 0, 0, 0, 0, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 0, 0, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 0, 0, 0, 0, 66, 114, 0, 0, 66, -126, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -112, 0, 0, 66, -112, 0, 0, 66, -112, 0, 0, 0, 0, 0, 0, 66, -80, 0, 0, 66, -80, 0, 0, 66, -80, 0, 0, 0, 0, 0, 0, 66, -104, 0, 0, 66, -104, 0, 0, 66, -104, 0, 0, 0, 0, 0, 0, 66, -114, 0, 0, 66, -114, 0, 0, 66, -114, 0, 0, 0, 0, 0, 0, 66, 114, 0, 0, 66, -126, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -112, 0, 0, 66, -112, 0, 0, 66, -112, 0, 0, 0, 0, 0, 0, 66, -80, 0, 0, 66, -80, 0, 0, 66, -80, 0, 0, 0, 0, 0, 0, 66, -104, 0, 0, 66, -104, 0, 0, 66, -104, 0, 0, 0, 0, 0, 0, 66, -114, 0, 0, 66, -114, 0, 0, 66, -114, 0, 0, 0, 0, 0, 0, 66, -107, 0, 0, 66, -90, 0, 0, 66, -124, 0, 0, 0, 0, 0, 0, 66, -107, 0, 0, 66, -90, 0, 0, 66, -124, 0, 0, 0, 0, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, -112, 0, 0, 66, -112, 0, 0, 66, -112, 0, 0, 0, 0, 0, 0, 66, -104, 0, 0, 66, -104, 0, 0, 66, -104, 0, 0, 0, 0, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, 120, 0, 0, 66, 120, 0, 0, 66, 120, 0, 0, 0, 0, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 0, 0, 0, 0, 66, 72, 0, 0, 66, 72, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 0, 0, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 0, 0, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, -62, 0, 0, 66, -62, 0, 0, 66, -62, 0, 0, 0, 0, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -84, 0, 0, 66, -84, 0, 0, 66, -84, 0, 0, 0, 0, 0, 0, 66, 72, 0, 0, 66, 72, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -112, 0, 0, 66, -112, 0, 0, 66, -112, 0, 0, 0, 0, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 0, 0, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -84, 0, 0, 66, -84, 0, 0, 66, -84, 0, 0, 0, 0, 0, 0, 66, 72, 0, 0, 66, 72, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -112, 0, 0, 66, -112, 0, 0, 66, -112, 0, 0, 0, 0, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 0, 0, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, -102, 0, 0, 66, -102, 0, 0, 66, -102, 0, 0, 0, 0, 0, 0, 66, -102, 0, 0, 66, -102, 0, 0, 66, -102, 0, 0, 0, 0, 0, 0, 66, -62, 0, 0, 66, -62, 0, 0, 66, -62, 0, 0, 0, 0, 0, 0, 66, -128, 0, 0, 66, -102, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 0, 0, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 0, 0, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 0, 0, 0, 0, 66, -98, 0, 0, 66, -98, 0, 0, 66, -98, 0, 0, 0, 0, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 0, 0, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 0, 0, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 0, 0, 0, 0, 66, -98, 0, 0, 66, -98, 0, 0, 66, -98, 0, 0, 0, 0, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -116, 0, 0, 66, -104, 0, 0, 66, -128, 0, 0, 0, 0, 0, 0, 66, -116, 0, 0, 66, -104, 0, 0, 66, -128, 0, 0, 0, 0, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 0, 0, 0, 0, 66, -98, 0, 0, 66, -98, 0, 0, 66, -98, 0, 0, 0, 0, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -116, 0, 0, 66, -104, 0, 0, 66, -128, 0, 0, 0, 0, 0, 0, 66, -116, 0, 0, 66, -104, 0, 0, 66, -128, 0, 0, 0, 0, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, 120, 0, 0, 66, 120, 0, 0, 66, 120, 0, 0, 0, 0, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 0, 0, 0, 0, 66, -70, 0, 0, 66, -70, 0, 0, 66, -70, 0, 0, 0, 0, 0, 0, 66, -120, 0, 0, 66, -120, 0, 0, 66, -120, 0, 0, 0, 0, 0, 0, 66, -92, 0, 0, 66, -58, 0, 0, 66, -126, 0, 0, 0, 0, 0, 0, 66, -98, 0, 0, 66, -98, 0, 0, 66, -98, 0, 0, 0, 0, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, -70, 0, 0, 66, -70, 0, 0, 66, -70, 0, 0, 0, 0, 0, 0, 66, -120, 0, 0, 66, -120, 0, 0, 66, -120, 0, 0, 0, 0, 0, 0, 66, -92, 0, 0, 66, -58, 0, 0, 66, -126, 0, 0, 0, 0, 0, 0, 66, -98, 0, 0, 66, -98, 0, 0, 66, -98, 0, 0, 0, 0, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, -88, 0, 0, 66, -72, 0, 0, 66, -104, 0, 0, 0, 0, 0, 0, 66, -88, 0, 0, 66, -72, 0, 0, 66, -104, 0, 0, 0, 0, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -60, 0, 0, 66, -60, 0, 0, 66, -60, 0, 0, 0, 0, 0, 0, 66, 104, 0, 0, 66, 104, 0, 0, 66, 104, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, -88, 0, 0, 66, -72, 0, 0, 66, -104, 0, 0, 0, 0, 0, 0, 66, -88, 0, 0, 66, -72, 0, 0, 66, -104, 0, 0, 0, 0, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -60, 0, 0, 66, -60, 0, 0, 66, -60, 0, 0, 0, 0, 0, 0, 66, 104, 0, 0, 66, 104, 0, 0, 66, 104, 0, 0, 0, 0, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 0, 0, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 0, 0, 0, 0, 66, -85, 0, 0, 66, -60, 0, 0, 66, -110, 0, 0, 0, 0, 0, 0, 66, 104, 0, 0, 66, 104, 0, 0, 66, 104, 0, 0, 0, 0, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 0, 0, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 0, 0, 0, 0, 66, -85, 0, 0, 66, -60, 0, 0, 66, -110, 0, 0, 0, 0, 0, 0, 66, -112, 0, 0, 66, -112, 0, 0, 66, -112, 0, 0, 0, 0, 0, 0, 66, -112, 0, 0, 66, -112, 0, 0, 66, -112, 0, 0, 0, 0, 0, 0, 66, -92, 0, 0, 66, -88, 0, 0, 66, -96, 0, 0, 0, 0, 0, 0, 66, -70, 0, 0, 66, -70, 0, 0, 66, -70, 0, 0, 0, 0, 0, 0, 66, -60, 0, 0, 66, -60, 0, 0, 66, -60, 0, 0, 0, 0, 0, 0, 66, -98, 0, 0, 66, -98, 0, 0, 66, -98, 0, 0, 0, 0, 0, 0, 66, -84, 0, 0, 66, -84, 0, 0, 66, -84, 0, 0, 0, 0, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 0, 0, 0, 0, 66, -92, 0, 0, 66, -88, 0, 0, 66, -96, 0, 0, 0, 0, 0, 0, 66, -70, 0, 0, 66, -70, 0, 0, 66, -70, 0, 0, 0, 0, 0, 0, 66, -60, 0, 0, 66, -60, 0, 0, 66, -60, 0, 0, 0, 0, 0, 0, 66, -98, 0, 0, 66, -98, 0, 0, 66, -98, 0, 0, 0, 0, 0, 0, 66, -84, 0, 0, 66, -84, 0, 0, 66, -84, 0, 0, 0, 0, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 0, 0, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 0, 0, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 0, 0, 0, 0, 66, -112, 0, 0, 66, -112, 0, 0, 66, -112, 0, 0, 0, 0, 0, 0, 66, -126, 0, 0, 66, -100, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 0, 0, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 0, 0, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 0, 0, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 0, 0, 0, 0, 66, -112, 0, 0, 66, -112, 0, 0, 66, -112, 0, 0, 0, 0, 0, 0, 66, -126, 0, 0, 66, -100, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 0, 0, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 0, 0, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 0, 0, 0, 0, 66, -84, 0, 0, 66, -84, 0, 0, 66, -84, 0, 0, 0, 0, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 0, 0, 0, 0, 66, -112, 0, 0, 66, -112, 0, 0, 66, -112, 0, 0, 0, 0, 0, 0, 66, 122, 0, 0, 66, -118, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 0, 0, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 0, 0, 0, 0, 66, -84, 0, 0, 66, -84, 0, 0, 66, -84, 0, 0, 0, 0, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 0, 0, 0, 0, 66, -112, 0, 0, 66, -112, 0, 0, 66, -112, 0, 0, 0, 0, 0, 0, 66, 122, 0, 0, 66, -118, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, -114, 0, 0, 66, -114, 0, 0, 66, -114, 0, 0, 0, 0, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 0, 0, 0, 0, 66, -84, 0, 0, 66, -84, 0, 0, 66, -84, 0, 0, 0, 0, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -98, 0, 0, 66, -98, 0, 0, 66, -98, 0, 0, 0, 0, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 0, 0, 0, 0, 66, -114, 0, 0, 66, -114, 0, 0, 66, -114, 0, 0, 0, 0, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 0, 0, 0, 0, 66, -84, 0, 0, 66, -84, 0, 0, 66, -84, 0, 0, 0, 0, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -98, 0, 0, 66, -98, 0, 0, 66, -98, 0, 0, 0, 0, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, -124, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, -124, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 0, 0, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 0, 0, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 0, 0, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 0, 0, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 0, 0, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 0, 0, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 0, 0, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 0, 0, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -122, 0, 0, 66, -122, 0, 0, 66, -122, 0, 0, 0, 0, 0, 0, 66, -122, 0, 0, 66, -122, 0, 0, 66, -122, 0, 0, 0, 0, 0, 0, 66, -60, 0, 0, 66, -60, 0, 0, 66, -60, 0, 0, 0, 0, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 0, 0, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -122, 0, 0, 66, -122, 0, 0, 66, -122, 0, 0, 0, 0, 0, 0, 66, -122, 0, 0, 66, -122, 0, 0, 66, -122, 0, 0, 0, 0, 0, 0, 66, -60, 0, 0, 66, -60, 0, 0, 66, -60, 0, 0, 0, 0, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -122, 0, 0, 66, -122, 0, 0, 66, -122, 0, 0, 0, 0, 0, 0, 66, -98, 0, 0, 66, -98, 0, 0, 66, -98, 0, 0, 0, 0, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 0, 0, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 0, 0, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 0, 0, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 0, 0, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 0, 0, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 0, 0, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 0, 0, 0, 0, 66, -86, 0, 0, 66, -68, 0, 0, 66, -104, 0, 0, 0, 0, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 0, 0, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 0, 0, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 0, 0, 0, 0, 66, -86, 0, 0, 66, -68, 0, 0, 66, -104, 0, 0, 0, 0, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 0, 0, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 0, 0, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 0, 0, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 0, 0, 0, 0, 66, -86, 0, 0, 66, -68, 0, 0, 66, -104, 0, 0, 0, 0, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 0, 0, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 0, 0, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 0, 0, 0, 0, 66, -119, 0, 0, 66, -112, 0, 0, 66, -126, 0, 0, 0, 0, 0, 0, 66, -119, 0, 0, 66, -112, 0, 0, 66, -126, 0, 0, 0, 0, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 0, 0, 0, 0, 66, 110, 0, 0, 66, 124, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 0, 0, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 0, 0, 0, 0, 66, -119, 0, 0, 66, -112, 0, 0, 66, -126, 0, 0, 0, 0, 0, 0, 66, -119, 0, 0, 66, -112, 0, 0, 66, -126, 0, 0, 0, 0, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 0, 0, 0, 0, 66, 110, 0, 0, 66, 124, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 0, 0, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 0, 0, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 0, 0, 0, 0, 66, -119, 0, 0, 66, -112, 0, 0, 66, -126, 0, 0, 0, 0, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 0, 0, 0, 0, 66, 110, 0, 0, 66, 124, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 0, 0, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 0, 0, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 0, 0, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 0, 0, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 0, 0, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 0, 0, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 0, 0, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, -99, 0, 0, 66, -96, 0, 0, 66, -102, 0, 0, 0, 0, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 0, 0, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 0, 0, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, -99, 0, 0, 66, -96, 0, 0, 66, -102, 0, 0, 0, 0, 0, 0, 66, -76, 0, 0, 66, -76, 0, 0, 66, -76, 0, 0, 0, 0, 0, 0, 66, -76, 0, 0, 66, -76, 0, 0, 66, -76, 0, 0, 0, 0, 0, 0, 66, -106, 0, 0, 66, -106, 0, 0, 66, -106, 0, 0, 0, 0, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 0, 0, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 0, 0, 0, 0, 66, -99, 0, 0, 66, -96, 0, 0, 66, -102, 0, 0, 0, 0, 0, 0, 66, -76, 0, 0, 66, -76, 0, 0, 66, -76, 0, 0, 0, 0, 0, 0, 66, -76, 0, 0, 66, -76, 0, 0, 66, -76, 0, 0, 0, 0, 0, 0, 66, -106, 0, 0, 66, -106, 0, 0, 66, -106, 0, 0, 0, 0, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 0, 0, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 0, 0, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 0, 0, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 0, 0, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 0, 0, 0, 0, 66, -117, 0, 0, 66, -84, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -114, 0, 0, 66, -114, 0, 0, 66, -114, 0, 0, 0, 0, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -98, 0, 0, 66, -98, 0, 0, 66, -98, 0, 0, 0, 0, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 0, 0, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 0, 0, 0, 0, 66, 104, 0, 0, 66, 104, 0, 0, 66, 104, 0, 0, 0, 0, 0, 0, 66, -104, 0, 0, 66, -104, 0, 0, 66, -104, 0, 0, 0, 0, 0, 0, 66, -70, 0, 0, 66, -70, 0, 0, 66, -70, 0, 0, 0, 0, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 0, 0, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -106, 0, 0, 66, -106, 0, 0, 66, -106, 0, 0, 0, 0, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 0, 0, 0, 0, 66, -106, 0, 0, 66, -106, 0, 0, 66, -106, 0, 0, 0, 0, 0, 0, 66, -97, 0, 0, 66, -94, 0, 0, 66, -100, 0, 0, 0, 0, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 0, 0, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 0, 0, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 0, 0, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, -80, 0, 0, 66, -80, 0, 0, 66, -80, 0, 0, 0, 0, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 0, 0, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 0, 0, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 0, 0, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, -80, 0, 0, 66, -80, 0, 0, 66, -80, 0, 0, 0, 0, 0, 0, 66, 126, 0, 0, 66, -100, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, 126, 0, 0, 66, -100, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 0, 0, 0, 0, 66, 100, 0, 0, 66, 100, 0, 0, 66, 100, 0, 0, 0, 0, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, -80, 0, 0, 66, -80, 0, 0, 66, -80, 0, 0, 0, 0, 0, 0, 66, 126, 0, 0, 66, -100, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, 126, 0, 0, 66, -100, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 0, 0, 0, 0, 66, 100, 0, 0, 66, 100, 0, 0, 66, 100, 0, 0, 0, 0, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 0, 0, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 0, 0, 0, 0, 66, -123, 0, 0, 66, -114, 0, 0, 66, 120, 0, 0, 0, 0, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 0, 0, 0, 0, 66, 100, 0, 0, 66, 100, 0, 0, 66, 100, 0, 0, 0, 0, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 0, 0, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 0, 0, 0, 0, 66, -123, 0, 0, 66, -114, 0, 0, 66, 120, 0, 0, 0, 0, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, -128, 0, 0, 66, -118, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, -128, 0, 0, 66, -118, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 0, 0, 0, 0, 66, -123, 0, 0, 66, -114, 0, 0, 66, 120, 0, 0, 0, 0, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, -128, 0, 0, 66, -118, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, -128, 0, 0, 66, -118, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, -70, 0, 0, 66, -70, 0, 0, 66, -70, 0, 0, 0, 0, 0, 0, 66, -70, 0, 0, 66, -70, 0, 0, 66, -70, 0, 0, 0, 0, 0, 0, 66, -122, 0, 0, 66, -122, 0, 0, 66, -122, 0, 0, 0, 0, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 0, 0, 0, 0, 66, -60, 0, 0, 66, -60, 0, 0, 66, -60, 0, 0, 0, 0, 0, 0, 66, -98, 0, 0, 66, -76, 0, 0, 66, -120, 0, 0, 0, 0, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 0, 0, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 0, 0, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 0, 0, 0, 0, 66, -82, 0, 0, 66, -82, 0, 0, 66, -82, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 0, 0, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 0, 0, 0, 0, 66, -111, 0, 0, 66, -84, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, -102, 0, 0, 66, -102, 0, 0, 66, -102, 0, 0, 0, 0, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 0, 0, 0, 0, 66, -99, 0, 0, 66, -70, 0, 0, 66, -128, 0, 0, 0, 0, 0, 0, 66, 72, 0, 0, 66, 72, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 0, 0, 0, 0, 66, -111, 0, 0, 66, -84, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, -102, 0, 0, 66, -102, 0, 0, 66, -102, 0, 0, 0, 0, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 0, 0, 0, 0, 66, -99, 0, 0, 66, -70, 0, 0, 66, -128, 0, 0, 0, 0, 0, 0, 66, 72, 0, 0, 66, 72, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 0, 0, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 0, 0, 0, 0, 66, -74, 0, 0, 66, -74, 0, 0, 66, -74, 0, 0, 0, 0, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 0, 0, 0, 0, 66, -106, 0, 0, 66, -106, 0, 0, 66, -106, 0, 0, 0, 0, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 0, 0, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 0, 0, 0, 0, 66, -125, 0, 0, 66, -92, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 0, 0, 0, 0, 66, -106, 0, 0, 66, -106, 0, 0, 66, -106, 0, 0, 0, 0, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 0, 0, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 0, 0, 0, 0, 66, -125, 0, 0, 66, -92, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 0, 0, 0, 0, 66, -72, 0, 0, 66, -64, 0, 0, 66, -80, 0, 0, 0, 0, 0, 0, 66, -72, 0, 0, 66, -64, 0, 0, 66, -80, 0, 0, 0, 0, 0, 0, 66, -120, 0, 0, 66, -120, 0, 0, 66, -120, 0, 0, 0, 0, 0, 0, 66, -62, 0, 0, 66, -62, 0, 0, 66, -62, 0, 0, 0, 0, 0, 0, 66, 102, 0, 0, 66, -128, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -93, 0, 0, 66, -66, 0, 0, 66, -120, 0, 0, 0, 0, 0, 0, 66, -72, 0, 0, 66, -64, 0, 0, 66, -80, 0, 0, 0, 0, 0, 0, 66, -72, 0, 0, 66, -64, 0, 0, 66, -80, 0, 0, 0, 0, 0, 0, 66, -120, 0, 0, 66, -120, 0, 0, 66, -120, 0, 0, 0, 0, 0, 0, 66, -62, 0, 0, 66, -62, 0, 0, 66, -62, 0, 0, 0, 0, 0, 0, 66, 102, 0, 0, 66, -128, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -93, 0, 0, 66, -66, 0, 0, 66, -120, 0, 0, 0, 0, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -109, 0, 0, 66, -82, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 0, 0, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 0, 0, 0, 0, 66, -125, 0, 0, 66, -124, 0, 0, 66, -126, 0, 0, 0, 0, 0, 0, 66, -109, 0, 0, 66, -82, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 0, 0, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 0, 0, 0, 0, 66, -125, 0, 0, 66, -124, 0, 0, 66, -126, 0, 0, 0, 0, 0, 0, 66, -101, 0, 0, 66, -64, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, -101, 0, 0, 66, -64, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -106, 0, 0, 66, -106, 0, 0, 66, -106, 0, 0, 0, 0, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 0, 0, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 0, 0, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 0, 0, 0, 0, 66, -84, 0, 0, 66, -84, 0, 0, 66, -84, 0, 0, 0, 0, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 0, 0, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 0, 0, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 0, 0, 0, 0, 66, -82, 0, 0, 66, -82, 0, 0, 66, -82, 0, 0, 0, 0, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 0, 0, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -122, 0, 0, 66, -122, 0, 0, 66, -122, 0, 0, 0, 0, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 0, 0, 0, 0, 66, -74, 0, 0, 66, -74, 0, 0, 66, -74, 0, 0, 0, 0, 0, 0, 66, -56, 0, 0, 66, -56, 0, 0, 66, -56, 0, 0, 0, 0, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 0, 0, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -122, 0, 0, 66, -122, 0, 0, 66, -122, 0, 0, 0, 0, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 0, 0, 0, 0, 66, -74, 0, 0, 66, -74, 0, 0, 66, -74, 0, 0, 0, 0, 0, 0, 66, -56, 0, 0, 66, -56, 0, 0, 66, -56, 0, 0, 0, 0, 0, 0, 66, -74, 0, 0, 66, -74, 0, 0, 66, -74, 0, 0, 0, 0, 0, 0, 66, -74, 0, 0, 66, -74, 0, 0, 66, -74, 0, 0, 0, 0, 0, 0, 66, -96, 0, 0, 66, -66, 0, 0, 66, -126, 0, 0, 0, 0, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 0, 0, 0, 0, 66, -102, 0, 0, 66, -88, 0, 0, 66, -116, 0, 0, 0, 0, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, -62, 0, 0, 66, -62, 0, 0, 66, -62, 0, 0, 0, 0, 0, 0, 66, 72, 0, 0, 66, 72, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 0, 0, 0, 0, 66, -102, 0, 0, 66, -88, 0, 0, 66, -116, 0, 0, 0, 0, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, -62, 0, 0, 66, -62, 0, 0, 66, -62, 0, 0, 0, 0, 0, 0, 66, 72, 0, 0, 66, 72, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 0, 0, 0, 0, 66, -112, 0, 0, 66, -112, 0, 0, 66, -112, 0, 0, 0, 0, 0, 0, 66, -112, 0, 0, 66, -112, 0, 0, 66, -112, 0, 0, 0, 0, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 0, 0, 0, 0, 66, -104, 0, 0, 66, -104, 0, 0, 66, -104, 0, 0, 0, 0, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 0, 0, 0, 0, 66, -84, 0, 0, 66, -84, 0, 0, 66, -84, 0, 0, 0, 0, 0, 0, 66, -60, 0, 0, 66, -60, 0, 0, 66, -60, 0, 0, 0, 0, 0, 0, 66, -60, 0, 0, 66, -60, 0, 0, 66, -60, 0, 0, 0, 0, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 0, 0, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 0, 0, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 0, 0, 0, 0, 66, -84, 0, 0, 66, -84, 0, 0, 66, -84, 0, 0, 0, 0, 0, 0, 66, -60, 0, 0, 66, -60, 0, 0, 66, -60, 0, 0, 0, 0, 0, 0, 66, -60, 0, 0, 66, -60, 0, 0, 66, -60, 0, 0, 0, 0, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 0, 0, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 0, 0, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 0, 0, 0, 0, 66, -62, 0, 0, 66, -62, 0, 0, 66, -62, 0, 0, 0, 0, 0, 0, 66, -62, 0, 0, 66, -62, 0, 0, 66, -62, 0, 0, 0, 0, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 0, 0, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 0, 0, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 0, 0, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 0, 0, 0, 0, 66, -62, 0, 0, 66, -62, 0, 0, 66, -62, 0, 0, 0, 0, 0, 0, 66, -62, 0, 0, 66, -62, 0, 0, 66, -62, 0, 0, 0, 0, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 0, 0, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 0, 0, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 0, 0, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 0, 0, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 0, 0, 0, 0, 66, 74, 0, 0, 66, 80, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 0, 0, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 0, 0, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 0, 0, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 0, 0, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 0, 0, 0, 0, 66, 74, 0, 0, 66, 80, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -80, 0, 0, 66, -80, 0, 0, 66, -80, 0, 0, 0, 0, 0, 0, 66, 76, 0, 0, 66, 80, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 0, 0, 0, 0, 66, 74, 0, 0, 66, 80, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -80, 0, 0, 66, -80, 0, 0, 66, -80, 0, 0, 0, 0, 0, 0, 66, 76, 0, 0, 66, 80, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -102, 0, 0, 66, -102, 0, 0, 66, -102, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 0, 0, 0, 0, 66, -60, 0, 0, 66, -60, 0, 0, 66, -60, 0, 0, 0, 0, 0, 0, 66, -96, 0, 0, 66, -96, 0, 0, 66, -96, 0, 0, 0, 0, 0, 0, 66, -80, 0, 0, 66, -80, 0, 0, 66, -80, 0, 0, 0, 0, 0, 0, 66, 120, 0, 0, 66, 120, 0, 0, 66, 120, 0, 0, 0, 0, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 0, 0, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 0, 0, 0, 0, 66, -102, 0, 0, 66, -102, 0, 0, 66, -102, 0, 0, 0, 0, 0, 0, 66, 100, 0, 0, 66, 100, 0, 0, 66, 100, 0, 0, 0, 0, 0, 0, 66, 104, 0, 0, 66, 104, 0, 0, 66, 104, 0, 0, 0, 0, 0, 0, 66, -108, 0, 0, 66, -86, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 0, 0, 0, 0, 66, -102, 0, 0, 66, -102, 0, 0, 66, -102, 0, 0, 0, 0, 0, 0, 66, 100, 0, 0, 66, 100, 0, 0, 66, 100, 0, 0, 0, 0, 0, 0, 66, 104, 0, 0, 66, 104, 0, 0, 66, 104, 0, 0, 0, 0, 0, 0, 66, -108, 0, 0, 66, -86, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 0, 0, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 0, 0, 0, 0, 66, -99, 0, 0, 66, -94, 0, 0, 66, -104, 0, 0, 0, 0, 0, 0, 66, -74, 0, 0, 66, -74, 0, 0, 66, -74, 0, 0, 0, 0, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 0, 0, 0, 0, 66, 100, 0, 0, 66, 100, 0, 0, 66, 100, 0, 0, 0, 0, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 0, 0, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 0, 0, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 0, 0, 0, 0, 66, -76, 0, 0, 66, -76, 0, 0, 66, -76, 0, 0, 0, 0, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 0, 0, 0, 0, 66, -84, 0, 0, 66, -84, 0, 0, 66, -84, 0, 0, 0, 0, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 0, 0, 0, 0, 66, -76, 0, 0, 66, -76, 0, 0, 66, -76, 0, 0, 0, 0, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 0, 0, 0, 0, 66, -84, 0, 0, 66, -84, 0, 0, 66, -84, 0, 0, 0, 0, 0, 0, 66, -70, 0, 0, 66, -70, 0, 0, 66, -70, 0, 0, 0, 0, 0, 0, 66, -70, 0, 0, 66, -70, 0, 0, 66, -70, 0, 0, 0, 0, 0, 0, 66, 72, 0, 0, 66, 72, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, 100, 0, 0, 66, 100, 0, 0, 66, 100, 0, 0, 0, 0, 0, 0, 66, -104, 0, 0, 66, -104, 0, 0, 66, -104, 0, 0, 0, 0, 0, 0, 66, 104, 0, 0, 66, 104, 0, 0, 66, 104, 0, 0, 0, 0, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 0, 0, 0, 0, 66, 116, 0, 0, 66, -110, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 0, 0, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 0, 0, 0, 0, 66, -104, 0, 0, 66, -104, 0, 0, 66, -104, 0, 0, 0, 0, 0, 0, 66, 104, 0, 0, 66, 104, 0, 0, 66, 104, 0, 0, 0, 0, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 0, 0, 0, 0, 66, 116, 0, 0, 66, -110, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 0, 0, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 0, 0, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 0, 0, 0, 0, 66, 104, 0, 0, 66, 104, 0, 0, 66, 104, 0, 0, 0, 0, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 0, 0, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 0, 0, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 0, 0, 0, 0, 66, 104, 0, 0, 66, 104, 0, 0, 66, 104, 0, 0, 0, 0, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 0, 0, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, 100, 0, 0, 66, 100, 0, 0, 66, 100, 0, 0, 0, 0, 0, 0, 66, 104, 0, 0, 66, 104, 0, 0, 66, 104, 0, 0, 0, 0, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 0, 0, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, 100, 0, 0, 66, 100, 0, 0, 66, 100, 0, 0, 0, 0, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 0, 0, 0, 0, 66, -116, 0, 0, 66, -74, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, 100, 0, 0, 66, 100, 0, 0, 66, 100, 0, 0, 0, 0, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 0, 0, 0, 0, 66, -116, 0, 0, 66, -74, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 0, 0, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 0, 0, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 0, 0, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, 104, 0, 0, 66, 104, 0, 0, 66, 104, 0, 0, 0, 0, 0, 0, 66, -95, 0, 0, 66, -80, 0, 0, 66, -110, 0, 0, 0, 0, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -76, 0, 0, 66, -76, 0, 0, 66, -76, 0, 0, 0, 0, 0, 0, 66, -98, 0, 0, 66, -98, 0, 0, 66, -98, 0, 0, 0, 0, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 0, 0, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 0, 0, 0, 0, 66, -80, 0, 0, 66, -80, 0, 0, 66, -80, 0, 0, 0, 0, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, -104, 0, 0, 66, -104, 0, 0, 66, -104, 0, 0, 0, 0, 0, 0, 66, -98, 0, 0, 66, -98, 0, 0, 66, -98, 0, 0, 0, 0, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 0, 0, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 0, 0, 0, 0, 66, -80, 0, 0, 66, -80, 0, 0, 66, -80, 0, 0, 0, 0, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, -104, 0, 0, 66, -104, 0, 0, 66, -104, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, 106, 0, 0, 66, 116, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, -80, 0, 0, 66, -80, 0, 0, 66, -80, 0, 0, 0, 0, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, -104, 0, 0, 66, -104, 0, 0, 66, -104, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, 106, 0, 0, 66, 116, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, -96, 0, 0, 66, -96, 0, 0, 66, -96, 0, 0, 0, 0, 0, 0, 66, -96, 0, 0, 66, -96, 0, 0, 66, -96, 0, 0, 0, 0, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -102, 0, 0, 66, -94, 0, 0, 66, -110, 0, 0, 0, 0, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 0, 0, 0, 0, 66, 106, 0, 0, 66, 116, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, -96, 0, 0, 66, -96, 0, 0, 66, -96, 0, 0, 0, 0, 0, 0, 66, -96, 0, 0, 66, -96, 0, 0, 66, -96, 0, 0, 0, 0, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -102, 0, 0, 66, -94, 0, 0, 66, -110, 0, 0, 0, 0, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 0, 0, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 0, 0, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 0, 0, 0, 0, 66, -60, 0, 0, 66, -60, 0, 0, 66, -60, 0, 0, 0, 0, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 0, 0, 0, 0, 66, -120, 0, 0, 66, -120, 0, 0, 66, -120, 0, 0, 0, 0, 0, 0, 66, -82, 0, 0, 66, -82, 0, 0, 66, -82, 0, 0, 0, 0, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 0, 0, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 0, 0, 0, 0, 66, -60, 0, 0, 66, -60, 0, 0, 66, -60, 0, 0, 0, 0, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 0, 0, 0, 0, 66, -120, 0, 0, 66, -120, 0, 0, 66, -120, 0, 0, 0, 0, 0, 0, 66, -82, 0, 0, 66, -82, 0, 0, 66, -82, 0, 0, 0, 0, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 0, 0, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 0, 0, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 0, 0, 0, 0, 66, 110, 0, 0, 66, -124, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 0, 0, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 0, 0, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 0, 0, 0, 0, 66, 110, 0, 0, 66, -124, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 0, 0, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, -116, 0, 0, 66, -88, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 0, 0, 0, 0, 66, -60, 0, 0, 66, -60, 0, 0, 66, -60, 0, 0, 0, 0, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 0, 0, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 0, 0, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 0, 0, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 0, 0, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -120, 0, 0, 66, -120, 0, 0, 66, -120, 0, 0, 0, 0, 0, 0, 66, -98, 0, 0, 66, -98, 0, 0, 66, -98, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 0, 0, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -120, 0, 0, 66, -120, 0, 0, 66, -120, 0, 0, 0, 0, 0, 0, 66, -98, 0, 0, 66, -98, 0, 0, 66, -98, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 0, 0, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 0, 0, 0, 0, 66, -59, 0, 0, 66, -58, 0, 0, 66, -60, 0, 0, 0, 0, 0, 0, 66, -98, 0, 0, 66, -98, 0, 0, 66, -98, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 0, 0, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 0, 0, 0, 0, 66, -59, 0, 0, 66, -58, 0, 0, 66, -60, 0, 0, 0, 0, 0, 0, 66, -96, 0, 0, 66, -96, 0, 0, 66, -96, 0, 0, 0, 0, 0, 0, 66, -96, 0, 0, 66, -96, 0, 0, 66, -96, 0, 0, 0, 0, 0, 0, 66, 100, 0, 0, 66, 100, 0, 0, 66, 100, 0, 0, 0, 0, 0, 0, 66, 72, 0, 0, 66, 72, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 0, 0, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 0, 0, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 0, 0, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, 72, 0, 0, 66, 72, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, 120, 0, 0, 66, 120, 0, 0, 66, 120, 0, 0, 0, 0, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 0, 0, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 0, 0, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 0, 0, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, 72, 0, 0, 66, 72, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, 120, 0, 0, 66, 120, 0, 0, 66, 120, 0, 0, 0, 0, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 0, 0, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 0, 0, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 0, 0, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 0, 0, 0, 0, 66, -95, 0, 0, 66, -94, 0, 0, 66, -96, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, -104, 0, 0, 66, -104, 0, 0, 66, -104, 0, 0, 0, 0, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 0, 0, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 0, 0, 0, 0, 66, -95, 0, 0, 66, -94, 0, 0, 66, -96, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, -104, 0, 0, 66, -104, 0, 0, 66, -104, 0, 0, 0, 0, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 0, 0, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, -76, 0, 0, 66, -76, 0, 0, 66, -76, 0, 0, 0, 0, 0, 0, 66, -76, 0, 0, 66, -76, 0, 0, 66, -76, 0, 0, 0, 0, 0, 0, 66, -104, 0, 0, 66, -104, 0, 0, 66, -104, 0, 0, 0, 0, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, -122, 0, 0, 66, -122, 0, 0, 66, -122, 0, 0, 0, 0, 0, 0, 66, 100, 0, 0, 66, 100, 0, 0, 66, 100, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 0, 0, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 0, 0, 0, 0, 66, -124, 0, 0, 66, -118, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, -96, 0, 0, 66, -96, 0, 0, 66, -96, 0, 0, 0, 0, 0, 0, 66, -98, 0, 0, 66, -98, 0, 0, 66, -98, 0, 0, 0, 0, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, 120, 0, 0, 66, 120, 0, 0, 66, 120, 0, 0, 0, 0, 0, 0, 66, -103, 0, 0, 66, -96, 0, 0, 66, -110, 0, 0, 0, 0, 0, 0, 66, -104, 0, 0, 66, -104, 0, 0, 66, -104, 0, 0, 0, 0, 0, 0, 66, -122, 0, 0, 66, -122, 0, 0, 66, -122, 0, 0, 0, 0, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, 120, 0, 0, 66, 120, 0, 0, 66, 120, 0, 0, 0, 0, 0, 0, 66, -103, 0, 0, 66, -96, 0, 0, 66, -110, 0, 0, 0, 0, 0, 0, 66, -104, 0, 0, 66, -104, 0, 0, 66, -104, 0, 0, 0, 0, 0, 0, 66, -122, 0, 0, 66, -122, 0, 0, 66, -122, 0, 0, 0, 0, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, -96, 0, 0, 66, -74, 0, 0, 66, -118, 0, 0, 0, 0, 0, 0, 66, -76, 0, 0, 66, -76, 0, 0, 66, -76, 0, 0, 0, 0, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 0, 0, 0, 0, 66, 120, 0, 0, 66, 120, 0, 0, 66, 120, 0, 0, 0, 0, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 0, 0, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 0, 0, 0, 0, 66, 120, 0, 0, 66, 120, 0, 0, 66, 120, 0, 0, 0, 0, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 0, 0, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -120, 0, 0, 66, -120, 0, 0, 66, -120, 0, 0, 0, 0, 0, 0, 66, -120, 0, 0, 66, -120, 0, 0, 66, -120, 0, 0, 0, 0, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 0, 0, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 0, 0, 0, 0, 66, -102, 0, 0, 66, -102, 0, 0, 66, -102, 0, 0, 0, 0, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -120, 0, 0, 66, -120, 0, 0, 66, -120, 0, 0, 0, 0, 0, 0, 66, -120, 0, 0, 66, -120, 0, 0, 66, -120, 0, 0, 0, 0, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 0, 0, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 0, 0, 0, 0, 66, -102, 0, 0, 66, -102, 0, 0, 66, -102, 0, 0, 0, 0, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 0, 0, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 0, 0, 0, 0, 66, 104, 0, 0, 66, 104, 0, 0, 66, 104, 0, 0, 0, 0, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 0, 0, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, 72, 0, 0, 66, 72, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 0, 0, 0, 0, 66, -70, 0, 0, 66, -70, 0, 0, 66, -70, 0, 0, 0, 0, 0, 0, 66, -108, 0, 0, 66, -74, 0, 0, 66, 100, 0, 0, 0, 0, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 0, 0, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, 72, 0, 0, 66, 72, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 0, 0, 0, 0, 66, -70, 0, 0, 66, -70, 0, 0, 66, -70, 0, 0, 0, 0, 0, 0, 66, -108, 0, 0, 66, -74, 0, 0, 66, 100, 0, 0, 0, 0, 0, 0, 66, -120, 0, 0, 66, -120, 0, 0, 66, -120, 0, 0, 0, 0, 0, 0, 66, -120, 0, 0, 66, -120, 0, 0, 66, -120, 0, 0, 0, 0, 0, 0, 66, -112, 0, 0, 66, -112, 0, 0, 66, -112, 0, 0, 0, 0, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 0, 0, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 0, 0, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -125, 0, 0, 66, -118, 0, 0, 66, 120, 0, 0, 0, 0, 0, 0, 66, -62, 0, 0, 66, -62, 0, 0, 66, -62, 0, 0, 0, 0, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 0, 0, 0, 0, 66, -102, 0, 0, 66, -102, 0, 0, 66, -102, 0, 0, 0, 0, 0, 0, 66, -64, 0, 0, 66, -58, 0, 0, 66, -70, 0, 0, 0, 0, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 0, 0, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 0, 0, 0, 0, 66, 126, 0, 0, 66, -122, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 0, 0, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 0, 0, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 0, 0, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 0, 0, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 0, 0, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 0, 0, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 0, 0, 0, 0, 66, -62, 0, 0, 66, -62, 0, 0, 66, -62, 0, 0, 0, 0, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 0, 0, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 0, 0, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 0, 0, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 0, 0, 0, 0, 66, -62, 0, 0, 66, -62, 0, 0, 66, -62, 0, 0, 0, 0, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 0, 0, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 0, 0, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 0, 0, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 0, 0, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 0, 0, 0, 0, 66, -62, 0, 0, 66, -62, 0, 0, 66, -62, 0, 0, 0, 0, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 0, 0, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 0, 0, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 0, 0, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 0, 0, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -106, 0, 0, 66, -106, 0, 0, 66, -106, 0, 0, 0, 0, 0, 0, 66, -84, 0, 0, 66, -84, 0, 0, 66, -84, 0, 0, 0, 0, 0, 0, 66, 100, 0, 0, 66, 100, 0, 0, 66, 100, 0, 0, 0, 0, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 0, 0, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 0, 0, 0, 0, 66, -82, 0, 0, 66, -82, 0, 0, 66, -82, 0, 0, 0, 0, 0, 0, 66, -102, 0, 0, 66, -102, 0, 0, 66, -102, 0, 0, 0, 0, 0, 0, 66, -84, 0, 0, 66, -84, 0, 0, 66, -84, 0, 0, 0, 0, 0, 0, 66, 100, 0, 0, 66, 100, 0, 0, 66, 100, 0, 0, 0, 0, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 0, 0, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 0, 0, 0, 0, 66, -82, 0, 0, 66, -82, 0, 0, 66, -82, 0, 0, 0, 0, 0, 0, 66, -102, 0, 0, 66, -102, 0, 0, 66, -102, 0, 0, 0, 0, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 0, 0, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 0, 0, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 0, 0, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 0, 0, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 0, 0, 0, 0, 66, -114, 0, 0, 66, -114, 0, 0, 66, -114, 0, 0, 0, 0, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, 120, 0, 0, 66, 120, 0, 0, 66, 120, 0, 0, 0, 0, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 0, 0, 0, 0, 66, -110, 0, 0, 66, -86, 0, 0, 66, 116, 0, 0, 0, 0, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -74, 0, 0, 66, -74, 0, 0, 66, -74, 0, 0, 0, 0, 0, 0, 66, -102, 0, 0, 66, -102, 0, 0, 66, -102, 0, 0, 0, 0, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 0, 0, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 0, 0, 0, 0, 66, -112, 0, 0, 66, -112, 0, 0, 66, -112, 0, 0, 0, 0, 0, 0, 66, -102, 0, 0, 66, -102, 0, 0, 66, -102, 0, 0, 0, 0, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 0, 0, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 0, 0, 0, 0, 66, -112, 0, 0, 66, -112, 0, 0, 66, -112, 0, 0, 0, 0, 0, 0, 66, -87, 0, 0, 66, -80, 0, 0, 66, -94, 0, 0, 0, 0, 0, 0, 66, -87, 0, 0, 66, -80, 0, 0, 66, -94, 0, 0, 0, 0, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 0, 0, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 0, 0, 0, 0, 66, -62, 0, 0, 66, -62, 0, 0, 66, -62, 0, 0, 0, 0, 0, 0, 66, -70, 0, 0, 66, -70, 0, 0, 66, -70, 0, 0, 0, 0, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 0, 0, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 0, 0, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 0, 0, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -84, 0, 0, 66, -84, 0, 0, 66, -84, 0, 0, 0, 0, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 0, 0, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 0, 0, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -84, 0, 0, 66, -84, 0, 0, 66, -84, 0, 0, 0, 0, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 0, 0, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 0, 0, 0, 0, 66, -104, 0, 0, 66, -104, 0, 0, 66, -104, 0, 0, 0, 0, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 0, 0, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 0, 0, 0, 0, 66, -104, 0, 0, 66, -104, 0, 0, 66, -104, 0, 0, 0, 0, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 0, 0, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 0, 0, 0, 0, 66, -84, 0, 0, 66, -64, 0, 0, 66, -104, 0, 0, 0, 0, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 0, 0, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 0, 0, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 0, 0, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 0, 0, 0, 0, 66, -84, 0, 0, 66, -64, 0, 0, 66, -104, 0, 0, 0, 0, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 0, 0, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 0, 0, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, 110, 0, 0, 66, -122, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, 110, 0, 0, 66, -122, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -84, 0, 0, 66, -64, 0, 0, 66, -104, 0, 0, 0, 0, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 0, 0, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 0, 0, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, 110, 0, 0, 66, -122, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, 110, 0, 0, 66, -122, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 0, 0, 0, 0, 66, -76, 0, 0, 66, -76, 0, 0, 66, -76, 0, 0, 0, 0, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 0, 0, 0, 0, 66, 104, 0, 0, 66, 104, 0, 0, 66, 104, 0, 0, 0, 0, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 0, 0, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 0, 0, 0, 0, 66, -76, 0, 0, 66, -76, 0, 0, 66, -76, 0, 0, 0, 0, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 0, 0, 0, 0, 66, 104, 0, 0, 66, 104, 0, 0, 66, 104, 0, 0, 0, 0, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 0, 0, 0, 0, 66, -91, 0, 0, 66, -64, 0, 0, 66, -118, 0, 0, 0, 0, 0, 0, 66, -91, 0, 0, 66, -64, 0, 0, 66, -118, 0, 0, 0, 0, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -82, 0, 0, 66, -82, 0, 0, 66, -82, 0, 0, 0, 0, 0, 0, 66, -64, 0, 0, 66, -64, 0, 0, 66, -64, 0, 0, 0, 0, 0, 0, 66, 120, 0, 0, 66, 120, 0, 0, 66, 120, 0, 0, 0, 0, 0, 0, 66, -102, 0, 0, 66, -102, 0, 0, 66, -102, 0, 0, 0, 0, 0, 0, 66, -104, 0, 0, 66, -104, 0, 0, 66, -104, 0, 0, 0, 0, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 0, 0, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 0, 0, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 0, 0, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 0, 0, 0, 0, 66, -102, 0, 0, 66, -102, 0, 0, 66, -102, 0, 0, 0, 0, 0, 0, 66, -104, 0, 0, 66, -104, 0, 0, 66, -104, 0, 0, 0, 0, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 0, 0, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 0, 0, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 0, 0, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 0, 0, 0, 0, 66, -102, 0, 0, 66, -102, 0, 0, 66, -102, 0, 0, 0, 0, 0, 0, 66, -102, 0, 0, 66, -102, 0, 0, 66, -102, 0, 0, 0, 0, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 0, 0, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 0, 0, 0, 0, 66, 106, 0, 0, 66, 116, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, -82, 0, 0, 66, -82, 0, 0, 66, -82, 0, 0, 0, 0, 0, 0, 66, -127, 0, 0, 66, -96, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 0, 0, 0, 0, 66, -82, 0, 0, 66, -82, 0, 0, 66, -82, 0, 0, 0, 0, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 0, 0, 0, 0, 66, -98, 0, 0, 66, -98, 0, 0, 66, -98, 0, 0, 0, 0, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 0, 0, 0, 0, 66, -82, 0, 0, 66, -82, 0, 0, 66, -82, 0, 0, 0, 0, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 0, 0, 0, 0, 66, -98, 0, 0, 66, -98, 0, 0, 66, -98, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, -116, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, -116, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 0, 0, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, -102, 0, 0, 66, -102, 0, 0, 66, -102, 0, 0, 0, 0, 0, 0, 66, -122, 0, 0, 66, -122, 0, 0, 66, -122, 0, 0, 0, 0, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 0, 0, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 0, 0, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 0, 0, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 0, 0, 0, 0, 66, -94, 0, 0, 66, -78, 0, 0, 66, -110, 0, 0, 0, 0, 0, 0, 66, -122, 0, 0, 66, -122, 0, 0, 66, -122, 0, 0, 0, 0, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 0, 0, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 0, 0, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 0, 0, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 0, 0, 0, 0, 66, -94, 0, 0, 66, -78, 0, 0, 66, -110, 0, 0, 0, 0, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 0, 0, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, -92, 0, 0, 66, -64, 0, 0, 66, -120, 0, 0, 0, 0, 0, 0, 66, -94, 0, 0, 66, -78, 0, 0, 66, -110, 0, 0, 0, 0, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 0, 0, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, -92, 0, 0, 66, -64, 0, 0, 66, -120, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 0, 0, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, -81, 0, 0, 66, -64, 0, 0, 66, -98, 0, 0, 0, 0, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -73, 0, 0, 66, -60, 0, 0, 66, -86, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, -120, 0, 0, 66, -120, 0, 0, 66, -120, 0, 0, 0, 0, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 0, 0, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -73, 0, 0, 66, -60, 0, 0, 66, -86, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, -120, 0, 0, 66, -120, 0, 0, 66, -120, 0, 0, 0, 0, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 0, 0, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 0, 0, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 0, 0, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 0, 0, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, -84, 0, 0, 66, -84, 0, 0, 66, -84, 0, 0, 0, 0, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, -114, 0, 0, 66, -104, 0, 0, 66, -124, 0, 0, 0, 0, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 0, 0, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 0, 0, 0, 0, 66, -64, 0, 0, 66, -64, 0, 0, 66, -64, 0, 0, 0, 0, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 0, 0, 0, 0, 66, -60, 0, 0, 66, -60, 0, 0, 66, -60, 0, 0, 0, 0, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 0, 0, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -70, 0, 0, 66, -70, 0, 0, 66, -70, 0, 0, 0, 0, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 0, 0, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 0, 0, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 0, 0, 0, 0, 66, 100, 0, 0, 66, 100, 0, 0, 66, 100, 0, 0, 0, 0, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -70, 0, 0, 66, -70, 0, 0, 66, -70, 0, 0, 0, 0, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 0, 0, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 0, 0, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 0, 0, 0, 0, 66, 100, 0, 0, 66, 100, 0, 0, 66, 100, 0, 0, 0, 0, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 0, 0, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 0, 0, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 0, 0, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 0, 0, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 0, 0, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 0, 0, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 0, 0, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 0, 0, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 0, 0, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 0, 0, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 0, 0, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 0, 0, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 0, 0, 0, 0, 66, -120, 0, 0, 66, -120, 0, 0, 66, -120, 0, 0, 0, 0, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 0, 0, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 0, 0, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 0, 0, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 0, 0, 0, 0, 66, -120, 0, 0, 66, -120, 0, 0, 66, -120, 0, 0, 0, 0, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 0, 0, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, -106, 0, 0, 66, -102, 0, 0, 66, -110, 0, 0, 0, 0, 0, 0, 66, -106, 0, 0, 66, -102, 0, 0, 66, -110, 0, 0, 0, 0, 0, 0, 66, 104, 0, 0, 66, 104, 0, 0, 66, 104, 0, 0, 0, 0, 0, 0, 66, -120, 0, 0, 66, -120, 0, 0, 66, -120, 0, 0, 0, 0, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 0, 0, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, -106, 0, 0, 66, -102, 0, 0, 66, -110, 0, 0, 0, 0, 0, 0, 66, -106, 0, 0, 66, -102, 0, 0, 66, -110, 0, 0, 0, 0, 0, 0, 66, 104, 0, 0, 66, 104, 0, 0, 66, 104, 0, 0, 0, 0, 0, 0, 66, -114, 0, 0, 66, -106, 0, 0, 66, -122, 0, 0, 0, 0, 0, 0, 66, -114, 0, 0, 66, -106, 0, 0, 66, -122, 0, 0, 0, 0, 0, 0, 66, -120, 0, 0, 66, -120, 0, 0, 66, -120, 0, 0, 0, 0, 0, 0, 66, -70, 0, 0, 66, -70, 0, 0, 66, -70, 0, 0, 0, 0, 0, 0, 66, 104, 0, 0, 66, 104, 0, 0, 66, 104, 0, 0, 0, 0, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 0, 0, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 0, 0, 0, 0, 66, -103, 0, 0, 66, -94, 0, 0, 66, -112, 0, 0, 0, 0, 0, 0, 66, -120, 0, 0, 66, -120, 0, 0, 66, -120, 0, 0, 0, 0, 0, 0, 66, -70, 0, 0, 66, -70, 0, 0, 66, -70, 0, 0, 0, 0, 0, 0, 66, 104, 0, 0, 66, 104, 0, 0, 66, 104, 0, 0, 0, 0, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 0, 0, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 0, 0, 0, 0, 66, -103, 0, 0, 66, -94, 0, 0, 66, -112, 0, 0, 0, 0, 0, 0, 66, -98, 0, 0, 66, -98, 0, 0, 66, -98, 0, 0, 0, 0, 0, 0, 66, -98, 0, 0, 66, -98, 0, 0, 66, -98, 0, 0, 0, 0, 0, 0, 66, -112, 0, 0, 66, -112, 0, 0, 66, -112, 0, 0, 0, 0, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, 104, 0, 0, 66, 104, 0, 0, 66, 104, 0, 0, 0, 0, 0, 0, 66, -98, 0, 0, 66, -98, 0, 0, 66, -98, 0, 0, 0, 0, 0, 0, 66, -112, 0, 0, 66, -112, 0, 0, 66, -112, 0, 0, 0, 0, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, 104, 0, 0, 66, 104, 0, 0, 66, 104, 0, 0, 0, 0, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 0, 0, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 0, 0, 0, 0, 66, -122, 0, 0, 66, -122, 0, 0, 66, -122, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 0, 0, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 0, 0, 0, 0, 66, -80, 0, 0, 66, -80, 0, 0, 66, -80, 0, 0, 0, 0, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 0, 0, 0, 0, 66, -76, 0, 0, 66, -76, 0, 0, 66, -76, 0, 0, 0, 0, 0, 0, 66, 96, 0, 0, 66, 112, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 0, 0, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 0, 0, 0, 0, 66, -80, 0, 0, 66, -80, 0, 0, 66, -80, 0, 0, 0, 0, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 0, 0, 0, 0, 66, -76, 0, 0, 66, -76, 0, 0, 66, -76, 0, 0, 0, 0, 0, 0, 66, 96, 0, 0, 66, 112, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 0, 0, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 0, 0, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 0, 0, 0, 0, 66, -122, 0, 0, 66, -122, 0, 0, 66, -122, 0, 0, 0, 0, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 0, 0, 0, 0, 66, 72, 0, 0, 66, 72, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 0, 0, 0, 0, 66, -62, 0, 0, 66, -62, 0, 0, 66, -62, 0, 0, 0, 0, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 0, 0, 0, 0, 66, -115, 0, 0, 66, -100, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, 72, 0, 0, 66, 72, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 0, 0, 0, 0, 66, -62, 0, 0, 66, -62, 0, 0, 66, -62, 0, 0, 0, 0, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 0, 0, 0, 0, 66, -115, 0, 0, 66, -100, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, -87, 0, 0, 66, -72, 0, 0, 66, -102, 0, 0, 0, 0, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 0, 0, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 0, 0, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 0, 0, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, -87, 0, 0, 66, -72, 0, 0, 66, -102, 0, 0, 0, 0, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 0, 0, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 0, 0, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 0, 0, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 0, 0, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 0, 0, 0, 0, 66, -88, 0, 0, 66, -58, 0, 0, 66, -118, 0, 0, 0, 0, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 0, 0, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 0, 0, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 0, 0, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 0, 0, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 0, 0, 0, 0, 66, -88, 0, 0, 66, -58, 0, 0, 66, -118, 0, 0, 0, 0, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 0, 0, 0, 0, 66, -78, 0, 0, 66, -64, 0, 0, 66, -92, 0, 0, 0, 0, 0, 0, 66, -70, 0, 0, 66, -70, 0, 0, 66, -70, 0, 0, 0, 0, 0, 0, 66, -80, 0, 0, 66, -80, 0, 0, 66, -80, 0, 0, 0, 0, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 0, 0, 0, 0, 66, -112, 0, 0, 66, -112, 0, 0, 66, -112, 0, 0, 0, 0, 0, 0, 66, 72, 0, 0, 66, 72, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -111, 0, 0, 66, -108, 0, 0, 66, -114, 0, 0, 0, 0, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 0, 0, 0, 0, 66, -80, 0, 0, 66, -80, 0, 0, 66, -80, 0, 0, 0, 0, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 0, 0, 0, 0, 66, -112, 0, 0, 66, -112, 0, 0, 66, -112, 0, 0, 0, 0, 0, 0, 66, 72, 0, 0, 66, 72, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -111, 0, 0, 66, -108, 0, 0, 66, -114, 0, 0, 0, 0, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 0, 0, 0, 0, 66, -112, 0, 0, 66, -112, 0, 0, 66, -112, 0, 0, 0, 0, 0, 0, 66, -112, 0, 0, 66, -112, 0, 0, 66, -112, 0, 0, 0, 0, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 0, 0, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 0, 0, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 0, 0, 0, 0, 66, 120, 0, 0, 66, 120, 0, 0, 66, 120, 0, 0, 0, 0, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 0, 0, 0, 0, 66, -112, 0, 0, 66, -112, 0, 0, 66, -112, 0, 0, 0, 0, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 0, 0, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 0, 0, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 0, 0, 0, 0, 66, 120, 0, 0, 66, 120, 0, 0, 66, 120, 0, 0, 0, 0, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 0, 0, 0, 0, 66, -114, 0, 0, 66, -114, 0, 0, 66, -114, 0, 0, 0, 0, 0, 0, 66, -114, 0, 0, 66, -114, 0, 0, 66, -114, 0, 0, 0, 0, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 0, 0, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 0, 0, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 0, 0, 0, 0, 66, -98, 0, 0, 66, -58, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 0, 0, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 0, 0, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 0, 0, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 0, 0, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 0, 0, 0, 0, 66, -98, 0, 0, 66, -58, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 0, 0, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 0, 0, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 0, 0, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 0, 0, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 0, 0, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 0, 0, 0, 0, 66, -122, 0, 0, 66, -122, 0, 0, 66, -122, 0, 0, 0, 0, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 0, 0, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 0, 0, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 0, 0, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 0, 0, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 0, 0, 0, 0, 66, -122, 0, 0, 66, -122, 0, 0, 66, -122, 0, 0, 0, 0, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 0, 0, 0, 0, 66, -112, 0, 0, 66, -90, 0, 0, 66, 116, 0, 0, 0, 0, 0, 0, 66, -112, 0, 0, 66, -90, 0, 0, 66, 116, 0, 0, 0, 0, 0, 0, 66, 72, 0, 0, 66, 72, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 0, 0, 0, 0, 66, -122, 0, 0, 66, -122, 0, 0, 66, -122, 0, 0, 0, 0, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 0, 0, 0, 0, 66, -112, 0, 0, 66, -90, 0, 0, 66, 116, 0, 0, 0, 0, 0, 0, 66, -112, 0, 0, 66, -90, 0, 0, 66, 116, 0, 0, 0, 0, 0, 0, 66, 72, 0, 0, 66, 72, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -114, 0, 0, 66, -92, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, -114, 0, 0, 66, -92, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, -112, 0, 0, 66, -90, 0, 0, 66, 116, 0, 0, 0, 0, 0, 0, 66, 72, 0, 0, 66, 72, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -114, 0, 0, 66, -92, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, -114, 0, 0, 66, -92, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, -82, 0, 0, 66, -82, 0, 0, 66, -82, 0, 0, 0, 0, 0, 0, 66, -82, 0, 0, 66, -82, 0, 0, 66, -82, 0, 0, 0, 0, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 0, 0, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 0, 0, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 0, 0, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 0, 0, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 0, 0, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 0, 0, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, 116, 0, 0, 66, 120, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, 116, 0, 0, 66, 120, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, -64, 0, 0, 66, -64, 0, 0, 66, -64, 0, 0, 0, 0, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 0, 0, 0, 0, 66, -122, 0, 0, 66, -122, 0, 0, 66, -122, 0, 0, 0, 0, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 0, 0, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 0, 0, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 0, 0, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 0, 0, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 0, 0, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, -112, 0, 0, 66, -112, 0, 0, 66, -112, 0, 0, 0, 0, 0, 0, 66, -114, 0, 0, 66, -114, 0, 0, 66, -114, 0, 0, 0, 0, 0, 0, 66, -112, 0, 0, 66, -112, 0, 0, 66, -112, 0, 0, 0, 0, 0, 0, 66, -76, 0, 0, 66, -76, 0, 0, 66, -76, 0, 0, 0, 0, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 0, 0, 0, 0, 66, -96, 0, 0, 66, -96, 0, 0, 66, -96, 0, 0, 0, 0, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 0, 0, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 0, 0, 0, 0, 66, -96, 0, 0, 66, -96, 0, 0, 66, -96, 0, 0, 0, 0, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 0, 0, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 0, 0, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 0, 0, 0, 0, 66, -68, 0, 0, 66, -64, 0, 0, 66, -72, 0, 0, 0, 0, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 0, 0, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 0, 0, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 0, 0, 0, 0, 66, -68, 0, 0, 66, -64, 0, 0, 66, -72, 0, 0, 0, 0, 0, 0, 66, -84, 0, 0, 66, -84, 0, 0, 66, -84, 0, 0, 0, 0, 0, 0, 66, -84, 0, 0, 66, -84, 0, 0, 66, -84, 0, 0, 0, 0, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 0, 0, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 0, 0, 0, 0, 66, -74, 0, 0, 66, -74, 0, 0, 66, -74, 0, 0, 0, 0, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 0, 0, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 0, 0, 0, 0, 66, 116, 0, 0, 66, -124, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 0, 0, 0, 0, 66, -74, 0, 0, 66, -74, 0, 0, 66, -74, 0, 0, 0, 0, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 0, 0, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 0, 0, 0, 0, 66, 116, 0, 0, 66, -124, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 0, 0, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 0, 0, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 0, 0, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 0, 0, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 0, 0, 0, 0, 66, -84, 0, 0, 66, -84, 0, 0, 66, -84, 0, 0, 0, 0, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 0, 0, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 0, 0, 0, 0, 66, -102, 0, 0, 66, -96, 0, 0, 66, -108, 0, 0, 0, 0, 0, 0, 66, -64, 0, 0, 66, -64, 0, 0, 66, -64, 0, 0, 0, 0, 0, 0, 66, -88, 0, 0, 66, -68, 0, 0, 66, -108, 0, 0, 0, 0, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 0, 0, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 0, 0, 0, 0, 66, -102, 0, 0, 66, -96, 0, 0, 66, -108, 0, 0, 0, 0, 0, 0, 66, -64, 0, 0, 66, -64, 0, 0, 66, -64, 0, 0, 0, 0, 0, 0, 66, -88, 0, 0, 66, -68, 0, 0, 66, -108, 0, 0, 0, 0, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 0, 0, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 0, 0, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 0, 0, 0, 0, 66, 120, 0, 0, 66, 120, 0, 0, 66, 120, 0, 0, 0, 0, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 0, 0, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 0, 0, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 0, 0, 0, 0, 66, -80, 0, 0, 66, -80, 0, 0, 66, -80, 0, 0, 0, 0, 0, 0, 66, -102, 0, 0, 66, -102, 0, 0, 66, -102, 0, 0, 0, 0, 0, 0, 66, 120, 0, 0, 66, 120, 0, 0, 66, 120, 0, 0, 0, 0, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 0, 0, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, -112, 0, 0, 66, -110, 0, 0, 66, -114, 0, 0, 0, 0, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 0, 0, 0, 0, 66, 100, 0, 0, 66, 100, 0, 0, 66, 100, 0, 0, 0, 0, 0, 0, 66, -56, 0, 0, 66, -56, 0, 0, 66, -56, 0, 0, 0, 0, 0, 0, 66, -104, 0, 0, 66, -104, 0, 0, 66, -104, 0, 0, 0, 0, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, 100, 0, 0, 66, 100, 0, 0, 66, 100, 0, 0, 0, 0, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, 100, 0, 0, 66, 100, 0, 0, 66, 100, 0, 0, 0, 0, 0, 0, 66, -56, 0, 0, 66, -56, 0, 0, 66, -56, 0, 0, 0, 0, 0, 0, 66, -104, 0, 0, 66, -104, 0, 0, 66, -104, 0, 0, 0, 0, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, 100, 0, 0, 66, 100, 0, 0, 66, 100, 0, 0, 0, 0, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 0, 0, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 0, 0, 0, 0, 66, -70, 0, 0, 66, -70, 0, 0, 66, -70, 0, 0, 0, 0, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 0, 0, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 0, 0, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -102, 0, 0, 66, -90, 0, 0, 66, -114, 0, 0, 0, 0, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 0, 0, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 0, 0, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -102, 0, 0, 66, -90, 0, 0, 66, -114, 0, 0, 0, 0, 0, 0, 66, -124, 0, 0, 66, -122, 0, 0, 66, -126, 0, 0, 0, 0, 0, 0, 66, -124, 0, 0, 66, -122, 0, 0, 66, -126, 0, 0, 0, 0, 0, 0, 66, 120, 0, 0, 66, 120, 0, 0, 66, 120, 0, 0, 0, 0, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 0, 0, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -102, 0, 0, 66, -90, 0, 0, 66, -114, 0, 0, 0, 0, 0, 0, 66, -124, 0, 0, 66, -122, 0, 0, 66, -126, 0, 0, 0, 0, 0, 0, 66, -124, 0, 0, 66, -122, 0, 0, 66, -126, 0, 0, 0, 0, 0, 0, 66, 120, 0, 0, 66, 120, 0, 0, 66, 120, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, -102, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, 100, 0, 0, 66, 100, 0, 0, 66, 100, 0, 0, 0, 0, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, -102, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, 100, 0, 0, 66, 100, 0, 0, 66, 100, 0, 0, 0, 0, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 0, 0, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 0, 0, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 0, 0, 0, 0, 66, -84, 0, 0, 66, -84, 0, 0, 66, -84, 0, 0, 0, 0, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 0, 0, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 0, 0, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 0, 0, 0, 0, 66, -84, 0, 0, 66, -84, 0, 0, 66, -84, 0, 0, 0, 0, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 0, 0, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 0, 0, 0, 0, 66, -100, 0, 0, 66, -92, 0, 0, 66, -108, 0, 0, 0, 0, 0, 0, 66, -100, 0, 0, 66, -92, 0, 0, 66, -108, 0, 0, 0, 0, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 0, 0, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 0, 0, 0, 0, 66, -100, 0, 0, 66, -92, 0, 0, 66, -108, 0, 0, 0, 0, 0, 0, 66, -100, 0, 0, 66, -92, 0, 0, 66, -108, 0, 0, 0, 0, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 0, 0, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 0, 0, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, -98, 0, 0, 66, -98, 0, 0, 66, -98, 0, 0, 0, 0, 0, 0, 66, -100, 0, 0, 66, -92, 0, 0, 66, -108, 0, 0, 0, 0, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 0, 0, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 0, 0, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, -98, 0, 0, 66, -98, 0, 0, 66, -98, 0, 0, 0, 0, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 0, 0, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 0, 0, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 0, 0, 0, 0, 66, 100, 0, 0, 66, 100, 0, 0, 66, 100, 0, 0, 0, 0, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 0, 0, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, -106, 0, 0, 66, -106, 0, 0, 66, -106, 0, 0, 0, 0, 0, 0, 66, -114, 0, 0, 66, -84, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 0, 0, 0, 0, 66, -60, 0, 0, 66, -60, 0, 0, 66, -60, 0, 0, 0, 0, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 0, 0, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 0, 0, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 0, 0, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 0, 0, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 0, 0, 0, 0, 66, -104, 0, 0, 66, -104, 0, 0, 66, -104, 0, 0, 0, 0, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 0, 0, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 0, 0, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 0, 0, 0, 0, 66, -98, 0, 0, 66, -98, 0, 0, 66, -98, 0, 0, 0, 0, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 0, 0, 0, 0, 66, -62, 0, 0, 66, -62, 0, 0, 66, -62, 0, 0, 0, 0, 0, 0, 66, -124, 0, 0, 66, -108, 0, 0, 66, 104, 0, 0, 0, 0, 0, 0, 66, -64, 0, 0, 66, -64, 0, 0, 66, -64, 0, 0, 0, 0, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 0, 0, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 0, 0, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 0, 0, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 0, 0, 0, 0, 66, -70, 0, 0, 66, -62, 0, 0, 66, -78, 0, 0, 0, 0, 0, 0, 66, -114, 0, 0, 66, -98, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 0, 0, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 0, 0, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 0, 0, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 0, 0, 0, 0, 66, -70, 0, 0, 66, -62, 0, 0, 66, -78, 0, 0, 0, 0, 0, 0, 66, -114, 0, 0, 66, -98, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 0, 0, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 0, 0, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, -106, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 0, 0, 0, 0, 66, -114, 0, 0, 66, -98, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 0, 0, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 0, 0, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, -106, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 0, 0, 0, 0, 66, -122, 0, 0, 66, -122, 0, 0, 66, -122, 0, 0, 0, 0, 0, 0, 66, -122, 0, 0, 66, -122, 0, 0, 66, -122, 0, 0, 0, 0, 0, 0, 66, -115, 0, 0, 66, -80, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 0, 0, 0, 0, 66, -112, 0, 0, 66, -112, 0, 0, 66, -112, 0, 0, 0, 0, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 0, 0, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 0, 0, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 0, 0, 0, 0, 66, -120, 0, 0, 66, -120, 0, 0, 66, -120, 0, 0, 0, 0, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 0, 0, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, 100, 0, 0, 66, 100, 0, 0, 66, 100, 0, 0, 0, 0, 0, 0, 66, -74, 0, 0, 66, -74, 0, 0, 66, -74, 0, 0, 0, 0, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 0, 0, 0, 0, 66, 120, 0, 0, 66, 120, 0, 0, 66, 120, 0, 0, 0, 0, 0, 0, 66, -120, 0, 0, 66, -120, 0, 0, 66, -120, 0, 0, 0, 0, 0, 0, 66, -74, 0, 0, 66, -74, 0, 0, 66, -74, 0, 0, 0, 0, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 66, -78, 0, 0, 0, 0, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 0, 0, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 0, 0, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 0, 0, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 0, 0, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 0, 0, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 0, 0, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 0, 0, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 0, 0, 0, 0, 66, 126, 0, 0, 66, -124, 0, 0, 66, 116, 0, 0, 0, 0, 0, 0, 66, 126, 0, 0, 66, -124, 0, 0, 66, 116, 0, 0, 0, 0, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 0, 0, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, -64, 0, 0, 66, -64, 0, 0, 66, -64, 0, 0, 0, 0, 0, 0, 66, -112, 0, 0, 66, -112, 0, 0, 66, -112, 0, 0, 0, 0, 0, 0, 66, 126, 0, 0, 66, -124, 0, 0, 66, 116, 0, 0, 0, 0, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 0, 0, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, -64, 0, 0, 66, -64, 0, 0, 66, -64, 0, 0, 0, 0, 0, 0, 66, -112, 0, 0, 66, -112, 0, 0, 66, -112, 0, 0, 0, 0, 0, 0, 66, -120, 0, 0, 66, -102, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, -120, 0, 0, 66, -102, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 0, 0, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, -64, 0, 0, 66, -64, 0, 0, 66, -64, 0, 0, 0, 0, 0, 0, 66, -112, 0, 0, 66, -112, 0, 0, 66, -112, 0, 0, 0, 0, 0, 0, 66, -120, 0, 0, 66, -102, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, -120, 0, 0, 66, -102, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 0, 0, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 0, 0, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 0, 0, 0, 0, 66, -111, 0, 0, 66, -96, 0, 0, 66, -126, 0, 0, 0, 0, 0, 0, 66, -120, 0, 0, 66, -102, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 0, 0, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 0, 0, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 0, 0, 0, 0, 66, -111, 0, 0, 66, -96, 0, 0, 66, -126, 0, 0, 0, 0, 0, 0, 66, -122, 0, 0, 66, -122, 0, 0, 66, -122, 0, 0, 0, 0, 0, 0, 66, -122, 0, 0, 66, -122, 0, 0, 66, -122, 0, 0, 0, 0, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, -74, 0, 0, 66, -74, 0, 0, 66, -74, 0, 0, 0, 0, 0, 0, 66, -120, 0, 0, 66, -120, 0, 0, 66, -120, 0, 0, 0, 0, 0, 0, 66, -98, 0, 0, 66, -98, 0, 0, 66, -98, 0, 0, 0, 0, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 0, 0, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, -74, 0, 0, 66, -74, 0, 0, 66, -74, 0, 0, 0, 0, 0, 0, 66, -120, 0, 0, 66, -120, 0, 0, 66, -120, 0, 0, 0, 0, 0, 0, 66, -98, 0, 0, 66, -98, 0, 0, 66, -98, 0, 0, 0, 0, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 0, 0, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, -114, 0, 0, 66, -114, 0, 0, 66, -114, 0, 0, 0, 0, 0, 0, 66, -114, 0, 0, 66, -114, 0, 0, 66, -114, 0, 0, 0, 0, 0, 0, 66, -106, 0, 0, 66, -106, 0, 0, 66, -106, 0, 0, 0, 0, 0, 0, 66, -106, 0, 0, 66, -106, 0, 0, 66, -106, 0, 0, 0, 0, 0, 0, 66, -82, 0, 0, 66, -82, 0, 0, 66, -82, 0, 0, 0, 0, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 0, 0, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 0, 0, 0, 0, 66, -62, 0, 0, 66, -62, 0, 0, 66, -62, 0, 0, 0, 0, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 0, 0, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 0, 0, 0, 0, 66, -100, 0, 0, 66, -62, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, -96, 0, 0, 66, -96, 0, 0, 66, -96, 0, 0, 0, 0, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 66, -108, 0, 0, 0, 0, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 0, 0, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 0, 0, 0, 0, 66, -109, 0, 0, 66, -106, 0, 0, 66, -112, 0, 0, 0, 0, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -82, 0, 0, 66, -82, 0, 0, 66, -82, 0, 0, 0, 0, 0, 0, 66, -86, 0, 0, 66, -76, 0, 0, 66, -96, 0, 0, 0, 0, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 0, 0, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 0, 0, 0, 0, 66, -109, 0, 0, 66, -106, 0, 0, 66, -112, 0, 0, 0, 0, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -82, 0, 0, 66, -82, 0, 0, 66, -82, 0, 0, 0, 0, 0, 0, 66, -86, 0, 0, 66, -76, 0, 0, 66, -96, 0, 0, 0, 0, 0, 0, 66, -62, 0, 0, 66, -62, 0, 0, 66, -62, 0, 0, 0, 0, 0, 0, 66, -62, 0, 0, 66, -62, 0, 0, 66, -62, 0, 0, 0, 0, 0, 0, 66, -117, 0, 0, 66, -108, 0, 0, 66, -126, 0, 0, 0, 0, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 0, 0, 0, 0, 66, -82, 0, 0, 66, -82, 0, 0, 66, -82, 0, 0, 0, 0, 0, 0, 66, -86, 0, 0, 66, -76, 0, 0, 66, -96, 0, 0, 0, 0, 0, 0, 66, -62, 0, 0, 66, -62, 0, 0, 66, -62, 0, 0, 0, 0, 0, 0, 66, -62, 0, 0, 66, -62, 0, 0, 66, -62, 0, 0, 0, 0, 0, 0, 66, -117, 0, 0, 66, -108, 0, 0, 66, -126, 0, 0, 0, 0, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, -116, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, -116, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, -116, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, -99, 0, 0, 66, -90, 0, 0, 66, -108, 0, 0, 0, 0, 0, 0, 66, -99, 0, 0, 66, -90, 0, 0, 66, -108, 0, 0, 0, 0, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 0, 0, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 0, 0, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 0, 0, 0, 0, 66, -76, 0, 0, 66, -76, 0, 0, 66, -76, 0, 0, 0, 0, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, -99, 0, 0, 66, -90, 0, 0, 66, -108, 0, 0, 0, 0, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 0, 0, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 0, 0, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 0, 0, 0, 0, 66, -76, 0, 0, 66, -76, 0, 0, 66, -76, 0, 0, 0, 0, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, -80, 0, 0, 66, -80, 0, 0, 66, -80, 0, 0, 0, 0, 0, 0, 66, -80, 0, 0, 66, -80, 0, 0, 66, -80, 0, 0, 0, 0, 0, 0, 66, -106, 0, 0, 66, -106, 0, 0, 66, -106, 0, 0, 0, 0, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 66, -58, 0, 0, 0, 0, 0, 0, 66, -76, 0, 0, 66, -76, 0, 0, 66, -76, 0, 0, 0, 0, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, -80, 0, 0, 66, -80, 0, 0, 66, -80, 0, 0, 0, 0, 0, 0, 66, -80, 0, 0, 66, -80, 0, 0, 66, -80, 0, 0, 0, 0, 0, 0, 66, -106, 0, 0, 66, -106, 0, 0, 66, -106, 0, 0, 0, 0, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 0, 0, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 0, 0, 0, 0, 66, -70, 0, 0, 66, -70, 0, 0, 66, -70, 0, 0, 0, 0, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 0, 0, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 0, 0, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 0, 0, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 0, 0, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 0, 0, 0, 0, 66, -76, 0, 0, 66, -76, 0, 0, 66, -76, 0, 0, 0, 0, 0, 0, 66, 112, 0, 0, 66, 124, 0, 0, 66, 100, 0, 0, 0, 0, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 0, 0, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 0, 0, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 0, 0, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 0, 0, 0, 0, 66, -76, 0, 0, 66, -76, 0, 0, 66, -76, 0, 0, 0, 0, 0, 0, 66, 112, 0, 0, 66, 124, 0, 0, 66, 100, 0, 0, 0, 0, 0, 0, 66, -114, 0, 0, 66, -114, 0, 0, 66, -114, 0, 0, 0, 0, 0, 0, 66, -114, 0, 0, 66, -114, 0, 0, 66, -114, 0, 0, 0, 0, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 0, 0, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, -64, 0, 0, 66, -64, 0, 0, 66, -64, 0, 0, 0, 0, 0, 0, 66, 112, 0, 0, 66, 124, 0, 0, 66, 100, 0, 0, 0, 0, 0, 0, 66, -114, 0, 0, 66, -114, 0, 0, 66, -114, 0, 0, 0, 0, 0, 0, 66, -114, 0, 0, 66, -114, 0, 0, 66, -114, 0, 0, 0, 0, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 0, 0, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, -64, 0, 0, 66, -64, 0, 0, 66, -64, 0, 0, 0, 0, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 0, 0, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 0, 0, 0, 0, 66, -96, 0, 0, 66, -96, 0, 0, 66, -96, 0, 0, 0, 0, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, -64, 0, 0, 66, -64, 0, 0, 66, -64, 0, 0, 0, 0, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 0, 0, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 0, 0, 0, 0, 66, -96, 0, 0, 66, -96, 0, 0, 66, -96, 0, 0, 0, 0, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, -91, 0, 0, 66, -80, 0, 0, 66, -102, 0, 0, 0, 0, 0, 0, 66, -91, 0, 0, 66, -80, 0, 0, 66, -102, 0, 0, 0, 0, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 0, 0, 0, 0, 66, -113, 0, 0, 66, -78, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, 104, 0, 0, 66, 104, 0, 0, 66, 104, 0, 0, 0, 0, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, -91, 0, 0, 66, -80, 0, 0, 66, -102, 0, 0, 0, 0, 0, 0, 66, -91, 0, 0, 66, -80, 0, 0, 66, -102, 0, 0, 0, 0, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 0, 0, 0, 0, 66, -113, 0, 0, 66, -78, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, 104, 0, 0, 66, 104, 0, 0, 66, 104, 0, 0, 0, 0, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -112, 0, 0, 66, -112, 0, 0, 66, -112, 0, 0, 0, 0, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 0, 0, 0, 0, 66, 72, 0, 0, 66, 72, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 0, 0, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 0, 0, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, -112, 0, 0, 66, -112, 0, 0, 66, -112, 0, 0, 0, 0, 0, 0, 66, -64, 0, 0, 66, -64, 0, 0, 66, -64, 0, 0, 0, 0, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 66, -100, 0, 0, 0, 0, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 0, 0, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 0, 0, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -84, 0, 0, 66, -84, 0, 0, 66, -84, 0, 0, 0, 0, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 0, 0, 0, 0, 66, -90, 0, 0, 66, -70, 0, 0, 66, -110, 0, 0, 0, 0, 0, 0, 66, -82, 0, 0, 66, -82, 0, 0, 66, -82, 0, 0, 0, 0, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 0, 0, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -84, 0, 0, 66, -84, 0, 0, 66, -84, 0, 0, 0, 0, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 0, 0, 0, 0, 66, -90, 0, 0, 66, -70, 0, 0, 66, -110, 0, 0, 0, 0, 0, 0, 66, -82, 0, 0, 66, -82, 0, 0, 66, -82, 0, 0, 0, 0, 0, 0, 66, 100, 0, 0, 66, 100, 0, 0, 66, 100, 0, 0, 0, 0, 0, 0, 66, 100, 0, 0, 66, 100, 0, 0, 66, 100, 0, 0, 0, 0, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 0, 0, 0, 0, 66, -100, 0, 0, 66, -88, 0, 0, 66, -112, 0, 0, 0, 0, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 0, 0, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, 100, 0, 0, 66, 100, 0, 0, 66, 100, 0, 0, 0, 0, 0, 0, 66, 100, 0, 0, 66, 100, 0, 0, 66, 100, 0, 0, 0, 0, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 66, 116, 0, 0, 0, 0, 0, 0, 66, -100, 0, 0, 66, -88, 0, 0, 66, -112, 0, 0, 0, 0, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 0, 0, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, -70, 0, 0, 66, -70, 0, 0, 66, -70, 0, 0, 0, 0, 0, 0, 66, -70, 0, 0, 66, -70, 0, 0, 66, -70, 0, 0, 0, 0, 0, 0, 66, -103, 0, 0, 66, -96, 0, 0, 66, -110, 0, 0, 0, 0, 0, 0, 66, -106, 0, 0, 66, -106, 0, 0, 66, -106, 0, 0, 0, 0, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 0, 0, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, -70, 0, 0, 66, -70, 0, 0, 66, -70, 0, 0, 0, 0, 0, 0, 66, -70, 0, 0, 66, -70, 0, 0, 66, -70, 0, 0, 0, 0, 0, 0, 66, -103, 0, 0, 66, -96, 0, 0, 66, -110, 0, 0, 0, 0, 0, 0, 66, -106, 0, 0, 66, -106, 0, 0, 66, -106, 0, 0, 0, 0, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 0, 0, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 0, 0, 0, 0, 66, -80, 0, 0, 66, -80, 0, 0, 66, -80, 0, 0, 0, 0, 0, 0, 66, -60, 0, 0, 66, -60, 0, 0, 66, -60, 0, 0, 0, 0, 0, 0, 66, -76, 0, 0, 66, -60, 0, 0, 66, -92, 0, 0, 0, 0, 0, 0, 66, -106, 0, 0, 66, -106, 0, 0, 66, -106, 0, 0, 0, 0, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 0, 0, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 66, -116, 0, 0, 0, 0, 0, 0, 66, -80, 0, 0, 66, -80, 0, 0, 66, -80, 0, 0, 0, 0, 0, 0, 66, -60, 0, 0, 66, -60, 0, 0, 66, -60, 0, 0, 0, 0, 0, 0, 66, -76, 0, 0, 66, -60, 0, 0, 66, -92, 0, 0, 0, 0, 0, 0, 66, -97, 0, 0, 66, -88, 0, 0, 66, -106, 0, 0, 0, 0, 0, 0, 66, -97, 0, 0, 66, -88, 0, 0, 66, -106, 0, 0, 0, 0, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -80, 0, 0, 66, -80, 0, 0, 66, -80, 0, 0, 0, 0, 0, 0, 66, -60, 0, 0, 66, -60, 0, 0, 66, -60, 0, 0, 0, 0, 0, 0, 66, -76, 0, 0, 66, -60, 0, 0, 66, -92, 0, 0, 0, 0, 0, 0, 66, -97, 0, 0, 66, -88, 0, 0, 66, -106, 0, 0, 0, 0, 0, 0, 66, -97, 0, 0, 66, -88, 0, 0, 66, -106, 0, 0, 0, 0, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 0, 0, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 0, 0, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -80, 0, 0, 66, -80, 0, 0, 66, -80, 0, 0, 0, 0, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 0, 0, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 0, 0, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 0, 0, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -80, 0, 0, 66, -80, 0, 0, 66, -80, 0, 0, 0, 0, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 0, 0, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 0, 0, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 0, 0, 0, 0, 66, -112, 0, 0, 66, -108, 0, 0, 66, -116, 0, 0, 0, 0, 0, 0, 66, 100, 0, 0, 66, 100, 0, 0, 66, 100, 0, 0, 0, 0, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 66, -118, 0, 0, 0, 0, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 0, 0, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 0, 0, 0, 0, 66, -112, 0, 0, 66, -108, 0, 0, 66, -116, 0, 0, 0, 0, 0, 0, 66, 100, 0, 0, 66, 100, 0, 0, 66, 100, 0, 0, 0, 0, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, -110, 0, 0, 66, -100, 0, 0, 66, -120, 0, 0, 0, 0, 0, 0, 66, -110, 0, 0, 66, -100, 0, 0, 66, -120, 0, 0, 0, 0, 0, 0, 66, 72, 0, 0, 66, 72, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -112, 0, 0, 66, -108, 0, 0, 66, -116, 0, 0, 0, 0, 0, 0, 66, 100, 0, 0, 66, 100, 0, 0, 66, 100, 0, 0, 0, 0, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, -110, 0, 0, 66, -100, 0, 0, 66, -120, 0, 0, 0, 0, 0, 0, 66, -110, 0, 0, 66, -100, 0, 0, 66, -120, 0, 0, 0, 0, 0, 0, 66, 72, 0, 0, 66, 72, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, 72, 0, 0, 66, 72, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 0, 0, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 0, 0, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 0, 0, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 0, 0, 0, 0, 66, -74, 0, 0, 66, -62, 0, 0, 66, -86, 0, 0, 0, 0, 0, 0, 66, 72, 0, 0, 66, 72, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 0, 0, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 0, 0, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 0, 0, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 66, 92, 0, 0, 0, 0, 0, 0, 66, -74, 0, 0, 66, -62, 0, 0, 66, -86, 0, 0, 0, 0, 0, 0, 66, -80, 0, 0, 66, -80, 0, 0, 66, -80, 0, 0, 0, 0, 0, 0, 66, -80, 0, 0, 66, -80, 0, 0, 66, -80, 0, 0, 0, 0, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 0, 0, 0, 0, 66, -82, 0, 0, 66, -82, 0, 0, 66, -82, 0, 0, 0, 0, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 0, 0, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 0, 0, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 0, 0, 0, 0, 66, -80, 0, 0, 66, -80, 0, 0, 66, -80, 0, 0, 0, 0, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 0, 0, 0, 0, 66, -82, 0, 0, 66, -82, 0, 0, 66, -82, 0, 0, 0, 0, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 66, -110, 0, 0, 0, 0, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 0, 0, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 0, 0, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -74, 0, 0, 66, -74, 0, 0, 66, -74, 0, 0, 0, 0, 0, 0, 66, -105, 0, 0, 66, -80, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 0, 0, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 66, -128, 0, 0, 0, 0, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -74, 0, 0, 66, -74, 0, 0, 66, -74, 0, 0, 0, 0, 0, 0, 66, -105, 0, 0, 66, -80, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, -109, 0, 0, 66, -86, 0, 0, 66, 120, 0, 0, 0, 0, 0, 0, 66, -109, 0, 0, 66, -86, 0, 0, 66, 120, 0, 0, 0, 0, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 0, 0, 0, 0, 66, -74, 0, 0, 66, -74, 0, 0, 66, -74, 0, 0, 0, 0, 0, 0, 66, -105, 0, 0, 66, -80, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, -109, 0, 0, 66, -86, 0, 0, 66, 120, 0, 0, 0, 0, 0, 0, 66, -109, 0, 0, 66, -86, 0, 0, 66, 120, 0, 0, 0, 0, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 66, -72, 0, 0, 0, 0, 0, 0, 66, -123, 0, 0, 66, -112, 0, 0, 66, 116, 0, 0, 0, 0, 0, 0, 66, -123, 0, 0, 66, -112, 0, 0, 66, 116, 0, 0, 0, 0, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -122, 0, 0, 66, -122, 0, 0, 66, -122, 0, 0, 0, 0, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 66, -90, 0, 0, 0, 0, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 0, 0, 0, 0, 66, 104, 0, 0, 66, 104, 0, 0, 66, 104, 0, 0, 0, 0, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 0, 0, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 0, 0, 0, 0, 66, -104, 0, 0, 66, -104, 0, 0, 66, -104, 0, 0, 0, 0, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 66, -88, 0, 0, 0, 0, 0, 0, 66, 104, 0, 0, 66, 104, 0, 0, 66, 104, 0, 0, 0, 0, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 66, -94, 0, 0, 0, 0, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 0, 0, 0, 0, 66, -104, 0, 0, 66, -104, 0, 0, 66, -104, 0, 0, 0, 0, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 0, 0, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 66, -66, 0, 0, 0, 0, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 0, 0, 0, 0, 66, -76, 0, 0, 66, -76, 0, 0, 66, -76, 0, 0, 0, 0, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 0, 0, 0, 0, 66, -76, 0, 0, 66, -76, 0, 0, 66, -76, 0, 0, 0, 0, 0, 0, 66, -74, 0, 0, 66, -74, 0, 0, 66, -74, 0, 0, 0, 0, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 0, 0, 0, 0, 66, -64, 0, 0, 66, -64, 0, 0, 66, -64, 0, 0, 0, 0, 0, 0, 66, -120, 0, 0, 66, -120, 0, 0, 66, -120, 0, 0, 0, 0, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 66, -126, 0, 0, 0, 0, 0, 0, 66, -76, 0, 0, 66, -76, 0, 0, 66, -76, 0, 0, 0, 0, 0, 0, 66, -74, 0, 0, 66, -74, 0, 0, 66, -74, 0, 0, 0, 0, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 66, -92, 0, 0, 0, 0, 0, 0, 66, -64, 0, 0, 66, -64, 0, 0, 66, -64, 0, 0, 0, 0, 0, 0, 66, -120, 0, 0, 66, -120, 0, 0, 66, -120, 0, 0, 0, 0, 0, 0, 66, -97, 0, 0, 66, -90, 0, 0, 66, -104, 0, 0, 0, 0, 0, 0, 66, -97, 0, 0, 66, -90, 0, 0, 66, -104, 0, 0, 0, 0, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 0, 0, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 0, 0, 0, 0, 66, -64, 0, 0, 66, -64, 0, 0, 66, -64, 0, 0, 0, 0, 0, 0, 66, -120, 0, 0, 66, -120, 0, 0, 66, -120, 0, 0, 0, 0, 0, 0, 66, -97, 0, 0, 66, -90, 0, 0, 66, -104, 0, 0, 0, 0, 0, 0, 66, -97, 0, 0, 66, -90, 0, 0, 66, -104, 0, 0, 0, 0, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 66, -68, 0, 0, 0, 0, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 66, -86, 0, 0, 0, 0, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -62, 0, 0, 66, -62, 0, 0, 66, -62, 0, 0, 0, 0, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 66, -124, 0, 0, 0, 0, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0, 66, 84, 0, 0 ], "compressed": true, "refCount": [ 1, 14, 1257, 890731498, 374221668, 253604528, 650321227, 793411785, 959695834, 259937023, 679318644, 560624350, 815504289, 437912711, 537835778, 656352711, 768154046, 447744646, 816151886, 237848008, 347168801, 349292853, 643946593, 890679179, 364428614, 687504757, 484396673, 674678697, 476681853, 1110239934, 235302022, 575603917, 566644786, 350555497, 454130325, 492737986, 446444997, 478864503, 558547701, 1011233667, 463355641, 568763853, 364277821, 660081620, 808048492, 659541431, 906453230, 560775240, 339423827, 786043959, 455161553, 772974277, 788075462, 341332677, 702531530, 356746157, 454052692, 793952200, 538535356, 334118729, 454585985, 454064120, 342254895, 680513489, 686521829, 678482664, 432537945, 778498523, 483737874, 666644502, 664463976, 364815644, 885388692, 438493209, 352097009, 476601308, 862366586, 688037103, 372255050, 258559718, 891383955, 553680254, 484635160, 448710446, 348409645, 761313087, 364852355, 598146072, 657273937, 334802373, 578296323, 145926973, 465002236, 787083911, 673562882, 703183826, 764298562, 357319020, 795686981, 884469075, 778023464, 891458028, 273912611, 693964365, 891845519, 363120831, 326551167, 380495310, 1018352344, 454048928, 687441502, 348330462, 915001195, 657968130, 808534764, 371300136, 798293151, 853725099, 250991796, 454124785, 694085102, 656854093, 464425577, 437380865, 787161091, 665457119, 544981452, 673071948, 989228900, 664795999, 981826014, 988842809, 686001116, 470800728, 591365799, 439109097, 679934225, 130357591, 667728580, 762920903, 988255765, 776717853, 692413349, 242183545, 342224473, 251019601, 267538542, 658033846, 574103676, 462696983, 265889949, 546167198, 236321922, 462249978, 1011933754, 483203552, 566188034, 597644660, 846903695, 1064483747, 5 ], "directLocationMap": false, "locationList": [ 0, 9504, 1257, 38020, 114068, 456284, 798472, 874548, 950596, 1026644, 1102692, 1178740, 1254788, 1330836, 1673024, 1749100, 1825148, 1901196, 1977244, 2053292, 2129340, 2205388, 2281436, 2357484, 2433532, 2509580, 2585628, 2927844, 3003892, 3079940, 3155988, 3498204, 3574252, 3650300, 3726348, 3802396, 3878444, 3954492, 4030540, 4106588, 4182636, 4258684, 4600900, 4676948, 4752996, 4829044, 5171232, 5513476, 5589524, 5665572, 6007788, 6083836, 6159884, 6235932, 6311980, 6388028, 6730216, 6806292, 6882340, 6958388, 7034436, 7376624, 7452700, 7528748, 7870964, 8213152, 8555396, 8631444, 8707492, 8783540, 8859588, 8935636, 9011684, 9353872, 9429948, 9505996, 9582044, 9658092, 9734140, 9810188, 9886236, 10228424, 10304500, 10646688, 10722764, 10798812, 11141028, 11217076, 11293124, 11369172, 11445220, 11521268, 11597316, 11673364, 11749412, 11825460, 11901508, 11977556, 12319744, 12395820, 12471868, 12547916, 12623964, 12700012, 12776060, 12852108, 12928156, 13270344, 13346420, 13688636, 13764684, 13840732, 13916780, 13992828, 14068876, 14144924, 14220972, 14563188, 14639236, 14715284, 14791332, 15133548, 15209596, 15285644, 15361692, 15437740, 15513788, 15589836, 15932052, 16274268, 16882624, 16958700, 17300916, 17376964, 17453012, 17529060, 17605108, 17681156, 17757204, 17833252, 17909300, 17985348, 18061396, 18137444, 18213492, 18555708, 19164064, 19240140, 19316188, 19392236, 19734452, 19810500, 19886548, 19962596, 20038644, 20114692, 20190740, 20266788, 20875144, 20951220, 21027268, 21103316, 21179364, 21255412, 21331460, 21673648, 21749724, 21825772, 21901820, 21977868, 22053916, 22129964, 22206012, 22282060, 22358108, 22700296, 22776372, 22852420, 22928468, 23004516, 23612872, 23688948, 23764996, 23841044, 23917092, 24259280, 24335356, 24677544, 24753620, 25095808, 25171884, 25247932, 25323980, 25666196, 25742244, 26084460, 26160508, 26502696, 26578772, 26654820, 26730868, 27073084, 27149132, 27225180, 27567368, 27643444, 27985660, 28061708, 28137756, 28213804, 28289852, 28632068, 28974284, 29316500, 29658716, 30000932, 30076980, 30153028, 30495216, 30571292, 30913480, 30989556, 31065604, 31141652, 31217700, 31293748, 31369796, 31445844, 31521892, 31597940, 31673988, 31750036, 31826084, 32168300, 32510488, 32586564, 33194920, 33270996, 33347044, 33423092, 33499140, 33575188, 33651236, 33727284, 34069472, 34145548, 34221596, 34297644, 34373692, 34715908, 34791956, 35134144, 35210220, 35286268, 35362316, 35704532, 35780580, 35856628, 35932676, 36008724, 36084772, 36160820, 36236868, 36579056, 36655132, 36731180, 36807228, 36883276, 37225492, 37301540, 37377588, 37453636, 37529684, 37605732, 37947948, 38023996, 38366212, 38708428, 39050616, 39126692, 39202740, 39278788, 39354836, 39430884, 39506932, 39582980, 39925168, 40001244, 40077292, 40153340, 40229388, 40305436, 40381484, 40723672, 40799748, 40875796, 40951844, 41027892, 41370108, 41446156, 41788372, 42130560, 42206636, 42548852, 42624900, 42700948, 42776996, 42853044, 42929092, 43005140, 43081188, 43423404, 43765620, 43841668, 44183884, 44259932, 44335980, 44412028, 44754216, 44830292, 44906340, 45248528, 45324604, 45400652, 45476700, 45552748, 45628796, 45704844, 45780892, 46123108, 46465324, 46541372, 46617420, 46693468, 47035656, 47111732, 47187780, 47263828, 47606016, 47682092, 47758140, 47834188, 47910236, 47986284, 48062332, 48138380, 48214428, 48556616, 48632692, 48708740, 48784788, 48860836, 49203024, 49279100, 49621288, 49697364, 49773412, 49849460, 50191648, 50267724, 50343772, 50419820, 50495868, 50571916, 50647964, 50724012, 50800060, 50876108, 50952156, 51028204, 51104252, 51180300, 51522516, 51864704, 51940780, 52016828, 52092876, 52435064, 52511140, 52587188, 52663236, 52739284, 52815332, 52891380, 52967428, 53043476, 53385664, 53461740, 53537788, 53613836, 53689884, 53765932, 54108120, 54184196, 54526384, 54602460, 54678508, 55286864, 55362940, 55438988, 55781176, 55857252, 55933300, 56009348, 56085396, 56161444, 56503660, 56579708, 56655756, 56731804, 56807852, 56883900, 57226116, 57302164, 57378212, 57454260, 57530308, 57872524, 57948572, 58290788, 58366836, 58442884, 58518932, 58594980, 58937168, 59013244, 59089292, 59165340, 59241388, 59317436, 59393484, 59469532, 59545580, 59621628, 59963816, 60039892, 60115940, 60458128, 60534204, 60610252, 60952440, 61294656, 61370732, 61446780, 61522828, 61865044, 61941092, 62017140, 62359356, 62435404, 62511452, 62587500, 62663548, 63005764, 63081812, 63157860, 63233908, 63576096, 63652172, 63728220, 64070408, 64412624, 64488700, 64564748, 64640796, 64716844, 65059032, 65135108, 65211156, 65553344, 65629420, 65705468, 65781516, 65857564, 66199780, 66275828, 66618044, 67226400, 67302476, 67378524, 67720740, 67796788, 67872836, 67948884, 68024932, 68100980, 68177028, 68253076, 68329124, 68405172, 68747360, 69089576, 69165652, 69241700, 69317748, 69393796, 69735984, 69812060, 69888108, 69964156, 70040204, 70116252, 70458468, 70534516, 70610564, 70686612, 70762660, 70838708, 70914756, 70990804, 71066852, 71409068, 71485116, 71561164, 71637212, 71979428, 72321644, 72397692, 72473740, 72815956, 72892004, 72968052, 73576408, 73652484, 73994672, 74070748, 74146796, 74222844, 74298892, 74374940, 74450988, 74527036, 74603084, 74679132, 74755180, 74831228, 74907276, 74983324, 75059372, 75401588, 75477636, 75819852, 75895900, 75971948, 76047996, 76124044, 76200092, 76276140, 76352188, 76428236, 76504284, 76580332, 76656380, 76732428, 77074616, 77150692, 77226740, 77568928, 77911144, 78253360, 78329436, 78405484, 78481532, 78823748, 78899796, 78975844, 79051892, 79127940, 79203988, 79280036, 79356084, 79432132, 79508180, 79850396, 80192584, 80800968, 81143184, 81219260, 81295308, 81371356, 81447404, 81523452, 81865640, 81941716, 82283904, 82359980, 82702196, 82778244, 83120460, 83196508, 83272556, 83348604, 83424652, 83500700, 83576748, 83652796, 83728844, 84071060, 84147108, 84489296, 84565372, 84907588, 84983636, 85325852, 85668068, 85744116, 86086332, 86162380, 86504596, 86846812, 86922860, 86998908, 87341096, 87417172, 87493220, 87835408, 87911484, 88253700, 88595888, 88671964, 88748012, 88824060, 88900108, 89242296, 89318372, 89394420, 89470468, 89546516, 89888732, 90230920, 90306996, 9504 ], "reverseAvailable": false, "internalShinglingEnabled": false, "lastTimeStamp": 1257, "rotationEnabled": false, "dynamicResizingEnabled": true, "currentStoreCapacity": 512, "indexCapacity": 2048 }, "compactSamplerStates": [ { "version": "2.0", "weight": [ -1.5861195, -1.605452, -1.5982624, -1.6388674, -1.6310605, -1.6108241, -1.6641783, -1.6470399, -1.662391, -1.66458, -1.6381367, -1.6604348, -1.722461, -1.6904022, -1.6829594, -1.6586255, -1.8328778, -1.6663431, -1.8191967, -1.7615604, -1.7148815, -1.7484502, -1.6753336, -1.7183716, -1.688128, -1.7450564, -2.1241255, -1.755236, -1.716314, -1.6855574, -1.8352082, -1.6686058, -1.7088614, -1.975995, -2.1331093, -1.7441834, -1.7506566, -2.0483587, -2.2547653, -1.8327026, -1.8121274, -1.7302328, -1.7633137, -1.8724989, -1.7519345, -1.7819105, -1.9474361, -1.8973167, -1.8720074, -1.8968571, -1.8915143, -1.8632329, -2.01883, -2.1812334, -2.350511, -1.8697002, -1.8398154, -1.7831405, -1.7950289, -1.932773, -1.715132, -2.1989625, -1.9009744, -1.7144396, -2.7446961, -1.7951992, -2.4029047, -1.9952371, -2.3514855, -2.1877155, -2.3432517, -1.9697201, -2.670341, -2.2128923, -1.972904, -2.251253, -2.5463715, -2.7085016, -2.3085272, -1.9825817, -2.072967, -1.8706789, -1.8189924, -2.3386497, -2.0664465, -3.33256, -2.0368118, -2.2420359, -2.6768208, -1.9206775, -2.5956569, -3.1106741, -1.9571904, -1.9927236, -2.3674033, -1.93867, -2.7404048, -2.3078642, -2.6232505, -2.0971937, -2.4987488, -2.0778205, -2.7914362, -2.1456559, -2.5070734, -2.059889, -2.2235098, -2.9149077, -2.3681848, -2.396997, -2.5068617, -2.5728097, -1.8709942, -2.1455302, -1.9927701, -2.7714732, -2.5182734, -2.1565442, -1.8815223, -2.0475667, -2.3105578, -2.0638764, -2.2973845, -2.3146381, -2.6567106, -2.4039922, -2.6203403, -3.4856248, -5.081313, -3.220412, -4.812422, -1.9047714, -3.6176436, -2.6161025, -3.0316484, -3.013686, -3.5585165, -2.4007401, -2.6348982, -2.766112, -2.9318974, -5.7781105, -3.107272, -2.4127505, -3.3237684, -3.803411, -4.290522, -2.4230351, -3.0978012, -2.1676643, -1.9878286, -2.5379953, -2.336568, -2.6192954, -6.017296, -2.8725154, -6.3045855, -3.6723707, -2.8172421, -2.1898556, -2.3871565, -2.51744, -2.7863479, -2.5990326, -2.4863505, -2.1796257, -1.8518976, -3.370079, -6.063179, -3.258116, -5.121849, -6.345082, -3.6713245, -2.6670954, -3.3832657, -4.917982, -2.97081, -3.0248885, -2.7550912, -2.8822653, -3.8920598, -2.8241985, -4.593358, -4.472623, -3.2764409, -2.8249595, -2.1388478, -2.8180516, -3.9035788, -4.516092, -2.3858354, -3.4240582, -1.9947791, -5.736862, -3.374941, -3.9094043, -5.1914043, -4.203039, -2.6490705, -2.395437, -2.304084, -2.9620337, -3.2512295, -3.9594069, -2.2474992, -2.946548, -4.6885777, -2.8522136, -2.4729125, -2.7774913, -3.1150968, -3.0363977, -4.197292, -2.7846549, -2.6680098, -4.2414436, -3.8353665, -4.186747, -5.6943493, -3.8587017, -3.2020812, -2.5837743, -3.115129, -5.767825, -3.1498506, -4.139573, -2.4234726, -2.7053547, -4.19672, -3.4625618, -2.1197746, -3.3355079, -3.1506562, -2.8635252, -3.1254945, -2.259082, -3.146692, -1.9144876, -4.487445, -4.18177, -2.8036504, -3.9046266, -3.1428185, -3.6163304, -3.2034893, -2.6041164, -2.3078747, -3.577054, -2.5983744, -3.4380496, -3.7947206, -2.8015137, -2.9079344, -5.612013, -3.2981741, -3.4895682 ], "pointIndex": [ 6, 1256, 256, 1580125493, 1009964779, 456934816, 1616333668, 1152569338, 108808059, 1358432074, 502384566, 1024448265, 1708452424, 1129878003, 1087712861, 1944483281, 1546063584, 68288588, 1273962710, 1220350266, 306704637, 1103944160, 1939752041, 1617814426, 1196814165, 313202232, 821422964, 1232975405, 511497819, 1879840308, 1710721726, 57714776, 426392352, 144334141, 919039593, 1301558173, 233030408, 984855939, 1016643541, 710104877, 1534287009, 1312146233, 1033950820, 1773005522, 1528561472, 976559285, 839263811, 515207941, 88259328, 999862042, 278485947, 337423713, 1396659120, 403778703, 1123720273, 1280314890, 1229704194, 1575998767, 1600038320, 453521515, 866331345, 412877840, 60755345, 14196166, 1493975856, 713593, 487101666, 500744337, 548561977, 552017438, 1948597105, 1060517442, 782972501, 653096203, 31812331, 1929607279, 1627551512, 1074301150, 19053580, 1291784360, 333312049, 1903734870, 966448202, 1883562658, 1350440220, 1448644102, 1489459036, 1700831799, 1250 ], "storeSequenceIndicesEnabled": false, "size": 256, "capacity": 256, "initialAcceptFraction": 0.125, "timeDecay": 1.0e-4, "sequenceIndexOfMostRecentTimeDecayUpdate": 0, "maxSequenceIndex": 1256, "compressed": true, "randomSeed": 3760827122461395656 }, { "version": "2.0", "weight": [ -1.6600187, -1.6628351, -1.6632024, -1.6885065, -1.6844633, -1.673482, -1.6683668, -1.703622, -1.6935254, -1.7039138, -1.7054497, -1.6792103, -1.72292, -1.7178843, -1.7129887, -1.7370491, -1.9077396, -1.7476121, -1.8414545, -1.9110444, -1.801772, -1.7981725, -1.7427167, -1.7117282, -1.8734525, -1.758567, -1.7399035, -1.7192584, -1.7428987, -1.766276, -1.8003932, -1.8911016, -1.8654419, -1.9670025, -1.9240105, -1.7802987, -1.8447324, -1.967483, -1.8591907, -2.2108433, -1.9602256, -1.8811072, -1.8307586, -1.8283223, -1.8461, -1.8134967, -1.9581954, -1.8520461, -2.2066836, -1.8763704, -1.8831326, -1.8191657, -2.065619, -1.7961874, -1.8889962, -1.7972072, -1.7482319, -1.8282884, -1.9215875, -1.7745942, -1.934545, -1.9956965, -1.9398265, -2.018418, -1.9581808, -1.8738496, -2.2210963, -2.4836748, -2.6438246, -2.8173716, -2.0052333, -1.8060782, -1.8316134, -2.104083, -2.064001, -2.0468729, -2.700277, -2.055099, -2.107124, -2.8776038, -4.302666, -2.7787154, -2.3238614, -2.3610747, -2.1134987, -1.8448327, -2.189839, -1.8508947, -2.1103697, -2.0987751, -1.9045995, -2.364662, -1.9768771, -2.3049514, -2.373978, -2.013711, -2.3665648, -3.1223068, -2.4642084, -2.2965417, -2.0021834, -2.0005822, -2.0901864, -2.5504415, -1.8880817, -2.134783, -2.2326784, -1.942063, -2.0569196, -1.966368, -1.9174302, -2.1160188, -2.2602866, -2.4733515, -2.23828, -1.9670134, -1.8519195, -2.0879674, -1.9622679, -2.7823813, -2.1206293, -2.3471045, -1.9580667, -3.0643625, -2.1881764, -2.4692035, -2.1028755, -2.6679616, -2.442942, -2.224716, -2.0679758, -2.283862, -1.9222883, -2.846171, -2.9377835, -2.5189304, -4.815355, -3.8114474, -3.1087315, -3.1940696, -2.9174712, -2.1778202, -2.2337835, -1.843772, -4.1040983, -2.920102, -4.2883368, -2.5598578, -2.9980335, -2.3457928, -3.4544246, -2.3266225, -2.9991736, -4.0963154, -2.8809404, -2.822911, -2.7196505, -3.5385666, -3.0671763, -4.2318783, -3.1986744, -5.5718246, -6.046677, -3.9159167, -3.5294237, -2.4407678, -3.2104867, -3.3342721, -3.589185, -4.893906, -2.4044142, -3.7951546, -2.498565, -3.4903483, -3.1365232, -1.9214913, -2.196149, -2.4012504, -3.4272356, -2.222576, -4.959666, -2.093998, -2.2162402, -2.6007705, -3.4578567, -2.2444172, -3.3098018, -3.1957138, -3.1875644, -2.9233613, -3.6141636, -4.2357774, -2.3627012, -3.0946198, -2.704567, -4.9396143, -3.7426734, -3.4212067, -3.576373, -4.9750557, -2.3576858, -2.2333653, -2.5606627, -3.0442796, -2.2103524, -4.6263657, -2.1121235, -3.3557963, -2.6780543, -2.0564954, -4.5643115, -4.3294086, -3.104085, -3.434541, -2.2409294, -2.0642347, -4.495369, -2.8710287, -3.2579474, -2.7349076, -5.1881814, -2.744094, -2.8721514, -5.458582, -2.5830178, -3.0423794, -2.320381, -3.1947503, -6.776149, -2.886313, -2.7594192, -4.1165075, -2.2551475, -2.4149053, -2.3541772, -2.18199, -2.1128635, -4.0967073, -2.4572492, -3.3653438, -5.049421, -2.8168807, -4.1294785, -3.91239, -2.467887, -3.4557223, -3.03364, -4.037852, -3.395431, -3.4063814, -3.2614224, -3.9141514, -3.2676873, -3.3500817 ], "pointIndex": [ 7, 1251, 254, 1525571388, 1252725678, 734617135, 667315246, 1657761947, 45159910, 1062461257, 366110, 641470608, 1064143194, 646559403, 1483898601, 859588358, 53598049, 855516880, 818783012, 519999467, 1645049211, 992924574, 220907159, 1841205239, 1342706414, 1224164520, 1198234193, 1736488113, 207560065, 345929946, 1488342345, 1395321750, 929518491, 853333241, 578273904, 1912236575, 828120018, 1770853159, 204242299, 1734994724, 751271264, 1516603618, 1916659496, 1225596508, 1873712255, 126275624, 1592779605, 1818674086, 1048352023, 273865496, 918513937, 1335984142, 1503695003, 1575075756, 131181001, 74515481, 1741445112, 638558354, 1206870861, 1359667607, 111902919, 400935972, 1669091394, 682883091, 1510216409, 937889914, 226937294, 628214313, 1082311274, 202884689, 509614016, 1324335895, 315225316, 574261824, 735561627, 1070805347, 1383128251, 1721308942, 729293802, 1235113953, 276931205, 1140715726, 12209130, 1532289813, 1218043062, 1428698071, 1424460215, 1549987 ], "storeSequenceIndicesEnabled": false, "size": 254, "capacity": 256, "initialAcceptFraction": 0.125, "timeDecay": 1.0e-4, "sequenceIndexOfMostRecentTimeDecayUpdate": 0, "maxSequenceIndex": 1256, "compressed": true, "randomSeed": -1114890292068028840 }, { "version": "2.0", "weight": [ -1.7043537, -1.7149372, -1.7166703, -1.7321012, -1.7449932, -1.7227896, -1.7189212, -1.7613436, -1.7871635, -1.7572314, -1.9100767, -1.8015554, -1.7829351, -1.745284, -1.7499497, -1.7995156, -1.8531065, -1.8204864, -1.8014812, -1.7835534, -1.7953764, -1.9277264, -2.0113738, -1.8776013, -1.8830832, -1.8430904, -1.9128852, -1.7552594, -1.7954891, -1.8587546, -1.8159387, -1.8180984, -2.0760508, -1.9116563, -1.8913791, -1.8495423, -2.3682237, -1.85536, -1.8663213, -1.8894315, -1.8001022, -1.9510405, -2.0332441, -2.300753, -1.9995476, -2.3203413, -2.022984, -2.4649758, -1.9842328, -1.9025321, -2.0115871, -1.9769313, -1.9613022, -2.3817139, -1.9380883, -1.9054426, -1.7931068, -1.8823017, -2.0860248, -1.9546908, -1.8849564, -1.8492993, -2.1535194, -1.8650378, -1.9573538, -2.232175, -2.7863712, -2.6460342, -2.3452928, -2.1120064, -2.1006784, -2.188658, -1.8926909, -2.4513972, -2.63265, -1.89713, -1.9279783, -2.0149734, -2.3423433, -1.9609698, -2.8362937, -2.5565622, -2.5604684, -2.0057104, -2.191599, -2.223279, -3.202308, -2.3193972, -2.7031338, -2.5877492, -2.016321, -2.7814374, -2.8090856, -2.025436, -2.1793358, -2.4806178, -4.986853, -2.0887856, -1.992191, -2.2180266, -2.1675045, -2.785531, -2.471143, -2.0163069, -2.1689491, -2.176144, -2.142885, -2.805913, -2.7247162, -1.9667814, -3.225324, -1.9381685, -2.148721, -1.8139349, -2.243579, -2.0078924, -1.9078774, -2.228902, -2.2091773, -2.0057032, -2.161559, -2.1420436, -2.3776362, -1.8866057, -1.9161162, -2.997531, -3.6017506, -1.8844341, -3.650594, -2.0622656, -2.4955025, -6.297177, -2.4560344, -2.827355, -3.3375702, -4.2595506, -3.6476152, -5.298893, -4.6368704, -2.5827596, -4.727267, -2.9171727, -3.3863933, -2.998544, -3.1508188, -2.3191326, -3.1005151, -2.5385091, -2.9375808, -5.3113475, -4.4594173, -2.7024257, -1.9682808, -3.3948848, -5.8313107, -2.652302, -3.31744, -2.7928, -2.4913106, -2.1816418, -3.0713098, -2.9353008, -3.9156651, -3.589956, -3.0757117, -3.907892, -4.369662, -3.1807384, -5.566969, -2.5556684, -3.356561, -4.061002, -2.6578262, -3.358592, -4.061826, -3.035102, -2.3694582, -6.079366, -4.249974, -2.6013722, -2.5957072, -2.3388069, -2.0346706, -3.5047348, -4.197596, -4.9675274, -3.9339316, -4.9094734, -2.1441245, -3.6834774, -2.2312505, -3.477304, -5.026757, -7.4546056, -5.137707, -2.6693206, -2.614613, -3.6004379, -4.7180634, -2.28078, -2.42328, -2.7575917, -2.2931254, -3.3485951, -3.7159684, -3.7249277, -4.1952395, -2.490811, -2.0773237, -2.708938, -2.8349159, -2.1985443, -2.5952754, -3.3955815, -2.7381892, -2.8703403, -3.5668871, -2.8732376, -3.704257, -1.9876751, -5.8961663, -3.6108832, -5.704544, -2.116727, -2.1399906, -3.2782805, -3.2339072, -4.4758325, -2.4205503, -3.610604, -3.8915148, -4.0522075, -2.0418868, -7.400977, -4.301539, -2.3623009, -3.504025, -2.3166306, -3.0060487, -3.201693, -2.291483, -3.7904406, -3.120234, -2.4891293, -2.1493428, -2.5106375, -3.7456133, -2.1408231, -3.118479, -2.2031925, -2.4266295, -3.3329139, -4.2434278, -4.0106225, -6.332322, -2.2949204 ], "pointIndex": [ 1, 1256, 256, 1800496310, 189774369, 1190351877, 196117206, 1209024955, 119934254, 1060414962, 477995845, 1078535456, 1080003549, 269955583, 484283630, 137292677, 1183501254, 440274210, 1267133467, 1592147376, 817636891, 1473156248, 1463437761, 1788508518, 1194396926, 1773629862, 1137494071, 989375137, 1445520569, 726923453, 985493177, 857505566, 1568025519, 459218697, 474222116, 510601635, 943791427, 1120837853, 613003481, 49457990, 1414445346, 927181008, 1087892123, 1239384044, 1588103553, 1031660723, 105739915, 1975683509, 280236125, 1693635831, 25808913, 313240311, 250470390, 337217296, 1350402607, 829898214, 84780018, 1321833974, 140438629, 1625445113, 1235862771, 31884402, 731165007, 1124183235, 306538204, 708956841, 1789299587, 1665028448, 1790693330, 1617910472, 543099424, 1793169650, 584141920, 1896596068, 1551822291, 616405006, 700958677, 1210142631, 122109340, 1978669206, 507042740, 1070449643, 1067804100, 1832375323, 1185628390, 1315264144, 1390927903, 1837634414, 1255 ], "storeSequenceIndicesEnabled": false, "size": 256, "capacity": 256, "initialAcceptFraction": 0.125, "timeDecay": 1.0e-4, "sequenceIndexOfMostRecentTimeDecayUpdate": 0, "maxSequenceIndex": 1256, "compressed": true, "randomSeed": -8998098257901219462 }, { "version": "2.0", "weight": [ -1.4847924, -1.50701, -1.4874974, -1.509434, -1.5804005, -1.517309, -1.4889102, -1.5924674, -1.5380169, -1.5827285, -1.5945977, -1.6033465, -1.522429, -1.5085082, -1.5259198, -1.6608759, -1.7157124, -1.6005316, -1.7098669, -1.6417782, -1.7827258, -1.6653897, -1.761043, -1.6149433, -1.8048114, -1.6053822, -1.5297601, -1.5150692, -1.5335847, -1.5741924, -1.5903218, -1.6950215, -1.6855102, -1.7289294, -1.7847432, -1.7010726, -1.7668756, -1.9151553, -1.9073898, -1.7360523, -1.8851597, -1.8604245, -1.820512, -1.7844313, -1.6933676, -1.9365067, -1.8104782, -1.8791007, -1.6876923, -1.8407286, -1.87232, -1.613756, -1.66301, -1.5603495, -1.7004238, -1.6415001, -1.721441, -2.1622522, -1.5830246, -1.7812307, -1.5904065, -1.61179, -1.7648445, -2.074227, -2.0032582, -1.6958426, -1.7092977, -2.421047, -1.9955932, -2.127096, -2.2460995, -2.0733979, -2.1900704, -2.218347, -1.9587811, -2.30464, -2.3489394, -2.2056513, -2.4812882, -2.078726, -2.0368192, -2.1401744, -1.9548048, -2.2267509, -2.3673909, -1.8815244, -2.0716653, -1.8121344, -1.9581162, -1.7133777, -1.8833144, -2.7113278, -2.1894011, -2.0413165, -2.2483463, -2.0375435, -2.023743, -1.7335436, -1.8081505, -1.9442836, -1.9203551, -2.0609462, -1.9958264, -1.8094562, -1.7540293, -1.7631687, -1.9121307, -1.7658973, -1.6152104, -2.3850179, -1.7996753, -1.9506682, -2.1833467, -1.836597, -2.4442554, -2.2432363, -2.3038113, -1.69391, -2.0176008, -1.9852964, -2.22754, -1.5936773, -2.037487, -2.4741428, -1.724286, -2.2496772, -2.1840785, -2.8905258, -2.5314753, -3.2166378, -3.863982, -1.7463908, -2.2845786, -2.1900523, -1.9322034, -2.7665477, -5.5880685, -5.0508027, -2.4426787, -2.914124, -3.4584386, -2.4449632, -2.3848393, -2.6335444, -4.1916275, -2.6579905, -2.668138, -4.2272997, -3.0954368, -4.5089917, -2.0358038, -7.6616907, -3.7811038, -2.4330842, -2.4255292, -3.343035, -4.25475, -2.5636013, -3.1577828, -5.828969, -2.755335, -2.1080794, -2.4202938, -3.3008184, -3.6514235, -2.5095358, -3.8863716, -2.957376, -3.5885198, -2.5151875, -2.5355968, -2.064986, -2.024324, -3.3344228, -2.124326, -2.6870174, -1.8441193, -3.208695, -2.3718288, -1.7876742, -5.6086903, -2.0368898, -2.1928809, -4.623443, -3.5671632, -2.7656476, -2.826614, -2.6780763, -2.2869632, -2.5077014, -2.7039807, -2.983468, -2.171145, -2.48659, -3.0943327, -1.8994596, -1.8423891, -2.0048766, -2.3960173, -2.6402557, -2.8885286, -2.8480966, -2.2679713, -4.381718, -2.0998023, -2.8364131, -3.0806136, -2.1412249, -1.8483372, -2.3394818, -3.4883568, -2.0058262, -2.246459, -3.0723298, -2.3015406, -2.499738, -2.8829854, -2.6171253, -2.0047848, -2.90026, -6.3821893, -1.9659716, -2.7831266, -2.6806984, -5.0689373, -2.3406537, -2.19754, -2.8538144, -2.9117985, -3.5243957, -2.9115815, -3.5294943, -3.2356849, -3.04845, -2.9486272, -3.6131105, -1.977847, -6.3758364, -2.1673677, -2.0754735, -2.849869, -3.628077, -2.2775931, -2.9878826, -1.9839334, -2.5885856, -2.2625816, -4.0681295, -3.3519099, -2.0539382, -3.1593044, -4.923024, -2.3891122, -4.795825, -4.269026 ], "pointIndex": [ 0, 1255, 255, 710517003, 550006573, 1460889948, 278313358, 1928382954, 1457868774, 375750180, 659759259, 1245010209, 1393816621, 1636103232, 4955704, 320083063, 7681779, 952566350, 47071417, 1922726604, 703184345, 1166656767, 1673490262, 1537542088, 267954450, 123703178, 1580307934, 1819137992, 192979481, 1164935904, 1382586570, 1219881396, 516977693, 1870190553, 1809325884, 584116891, 147195552, 669041452, 837313472, 731650393, 471068713, 1265016102, 1211335961, 1217334750, 1427413919, 1822094254, 769160, 265112274, 969608639, 627954958, 1097449659, 974211871, 1811479358, 1339015972, 1232402352, 30077149, 1551276114, 1814770485, 1115304358, 762235225, 591355174, 627715801, 406647944, 1666268896, 1320446352, 474012195, 4550334, 1336588673, 916815690, 1115793964, 980593224, 637951823, 1489716944, 414502382, 813421999, 1643886547, 1470838323, 1925194630, 1453541655, 975575488, 1013479497, 923605226, 390447053, 942631434, 1204611503, 1686576751, 1845234451, 1981264463 ], "storeSequenceIndicesEnabled": false, "size": 255, "capacity": 256, "initialAcceptFraction": 0.125, "timeDecay": 1.0e-4, "sequenceIndexOfMostRecentTimeDecayUpdate": 0, "maxSequenceIndex": 1256, "compressed": true, "randomSeed": 38561163469837675 }, { "version": "2.0", "weight": [ -1.4610527, -1.48245, -1.4639573, -1.5015463, -1.5454192, -1.4826655, -1.4737648, -1.6106573, -1.525192, -1.5471185, -1.6125231, -1.505095, -1.5421757, -1.5058594, -1.5234768, -1.6741594, -1.9094331, -1.7995727, -1.6336598, -1.8679664, -1.595384, -1.6628966, -1.6441401, -1.7069467, -1.6833416, -1.9401432, -1.588832, -1.5424707, -1.7687211, -1.5431672, -1.5274942, -1.8162181, -1.7659051, -1.9308692, -1.9288825, -1.9051023, -1.9985346, -1.6765146, -1.6832094, -1.8760269, -1.9810698, -1.6409447, -1.6005028, -1.9358605, -2.1724792, -1.6857752, -1.6740047, -1.8685497, -1.9233545, -1.8496706, -1.6932981, -2.1886141, -1.9640974, -1.6953177, -2.0331624, -1.9634979, -1.6556059, -1.8025886, -1.9032472, -1.5521348, -1.7520154, -1.5808368, -1.5562763, -2.6935897, -2.6085107, -2.0786266, -1.9147294, -1.9673487, -2.1261866, -2.8225563, -3.1242068, -2.2550943, -2.5607169, -2.4968712, -2.1055422, -2.3150427, -1.7537509, -1.737771, -2.0998735, -2.077217, -2.2581348, -2.054537, -2.0298986, -1.9485894, -1.792361, -1.7761369, -2.2579038, -2.0488272, -2.5935009, -2.393297, -2.56187, -3.085866, -1.7331612, -1.8431895, -1.9609962, -2.9646697, -2.5008316, -2.0777664, -1.9832842, -1.9663002, -2.3825483, -1.9030224, -1.8568329, -2.2311988, -2.5922384, -2.0080917, -2.460374, -2.4697714, -1.7773494, -2.2537482, -2.8810356, -2.011637, -2.4875133, -2.241009, -2.056611, -1.8162489, -1.9599434, -2.1026204, -1.9309919, -1.6801635, -2.6104155, -1.9660062, -1.8532897, -1.9000486, -2.7101104, -1.6306072, -1.6173607, -3.9097295, -3.8940182, -2.6971962, -3.3223963, -3.4434423, -3.4364245, -2.1258404, -2.3368773, -2.441312, -2.1282659, -3.1267962, -3.5049665, -3.6809883, -3.9945335, -3.6619272, -5.4106927, -2.2863889, -2.4651685, -2.6824324, -2.964626, -3.6960573, -3.0068357, -2.2048318, -4.7914104, -2.3593392, -2.8784318, -6.197217, -3.3857186, -3.8565915, -4.5197845, -2.6455338, -2.2545123, -2.4242928, -3.8621643, -2.764206, -2.6078105, -2.3123567, -2.1793225, -2.3973627, -3.571396, -2.1274083, -3.0041566, -1.8787048, -1.8227599, -4.072172, -2.113721, -3.4936752, -3.411475, -4.599114, -2.5682142, -2.9804878, -4.6184344, -5.995202, -2.5762093, -3.5060537, -4.381844, -3.2079947, -5.117505, -3.109518, -1.779692, -2.0144317, -3.0996954, -4.316557, -2.463515, -3.9305122, -3.3319016, -2.8997607, -3.4705358, -2.4835873, -5.850858, -1.9866576, -3.528817, -3.0366244, -3.3330505, -2.718776, -2.718735, -1.9553635, -3.5689576, -2.9435978, -4.1096764, -2.6101785, -4.1002913, -2.6639524, -2.9546604, -2.4940739, -2.1748304, -4.535578, -4.664909, -2.7323165, -4.75438, -3.2862427, -3.2614667, -2.484071, -3.7774487, -3.1729262, -7.547099, -2.623589, -2.038379, -3.7038631, -2.7044697, -3.5491626, -4.805202, -2.4135547, -2.1463873, -2.3763375, -2.5803976, -2.7008436, -5.6769996, -4.0309668, -3.6546214, -4.3860655, -3.794969, -3.0905387, -3.366902, -3.4968405, -5.5036583, -2.1061406, -2.2766025, -2.2931263, -2.0818744, -3.2892034, -1.9717209, -4.085529, -3.8437142, -3.004554, -1.7959849, -5.085871, -1.8072813 ], "pointIndex": [ 3, 1247, 255, 1199942421, 562999165, 1070673656, 1648005124, 1929122355, 1827691693, 1321528356, 1421296621, 1292041204, 1667219473, 600183277, 274451700, 305722385, 1287568165, 524209408, 1579828185, 1488493102, 1440127259, 1187010258, 1115156372, 1611712180, 1609013166, 435872960, 963643107, 1092400314, 260870723, 941609578, 330439147, 1452373916, 369867335, 1413235891, 453582315, 1807834238, 1883437356, 560520063, 1380675025, 731172719, 822295120, 1176500626, 1030630770, 884990575, 1562333977, 704088563, 35590968, 1814568983, 825249153, 1832027883, 323386335, 842455318, 1335947106, 1529407566, 300958270, 979530004, 319923248, 1589275081, 758569902, 351543768, 144906887, 375687507, 1671274399, 1111674965, 471064683, 451480909, 1673206955, 1014142190, 1607091130, 1352018168, 516567802, 746070329, 1688411892, 1085929213, 630386208, 719834486, 202105144, 751110218, 793271136, 1220769635, 814291763, 213857926, 1774853900, 1546837229, 1143631568, 1537069672, 1597334650, 1918918486 ], "storeSequenceIndicesEnabled": false, "size": 255, "capacity": 256, "initialAcceptFraction": 0.125, "timeDecay": 1.0e-4, "sequenceIndexOfMostRecentTimeDecayUpdate": 0, "maxSequenceIndex": 1256, "compressed": true, "randomSeed": -6370827395103410126 }, { "version": "2.0", "weight": [ -1.5445218, -1.5465407, -1.5504966, -1.547764, -1.560619, -1.5533254, -1.5759339, -1.5785238, -1.6054047, -1.5841495, -1.576058, -1.5569911, -1.5982715, -1.612058, -1.5798635, -1.5861368, -1.6388417, -1.6204617, -1.6824679, -1.6229888, -1.6407508, -1.6453023, -1.5819863, -1.566079, -1.5928731, -1.6855135, -1.783996, -1.7316606, -1.6485487, -1.7861702, -1.6092962, -1.6261423, -2.1053495, -1.6423863, -1.7105014, -1.7465937, -1.6570605, -1.8360097, -1.9010681, -1.6361474, -1.77335, -1.6803484, -2.0501294, -1.7019562, -1.7934632, -2.0073125, -1.768919, -1.6914185, -1.7652011, -1.66249, -1.6217879, -1.8140017, -1.7681481, -1.9364661, -1.8415885, -1.7473153, -1.9307748, -1.6952391, -1.7963362, -2.0055091, -1.8705586, -1.8039247, -1.6238333, -1.8887676, -2.1948328, -2.1852083, -2.309651, -1.8040459, -1.8527874, -1.8589574, -1.801687, -2.8378289, -3.095742, -2.419655, -1.6732262, -1.8548335, -2.3534513, -2.5250976, -2.485404, -1.7551335, -2.627682, -1.804988, -1.9720448, -1.7464341, -2.1275232, -2.0847194, -2.2849941, -1.864146, -1.8242195, -1.986032, -2.1918647, -2.9306834, -3.3716435, -1.7709521, -2.3122852, -2.3475082, -2.1665761, -2.0726194, -2.2897077, -1.8331085, -1.9517444, -1.7562053, -1.8337712, -1.8928871, -2.0578384, -1.8316461, -1.8601738, -2.2226956, -2.4449635, -2.0460827, -1.9298851, -1.9729121, -1.8871083, -1.9636409, -2.0409806, -1.7165915, -2.568095, -2.0460265, -2.384036, -3.0289366, -2.0829391, -3.1761105, -2.3723962, -2.9863064, -1.8120085, -1.9704975, -1.7034762, -1.9443214, -3.274785, -3.090201, -2.448313, -3.8890853, -2.2987845, -2.445577, -3.3676233, -2.4992247, -1.8911582, -7.054657, -3.7401574, -2.9138978, -2.9643297, -3.8779972, -1.8223864, -3.0082738, -2.850572, -3.2850523, -4.746652, -4.583561, -2.705282, -3.0956216, -3.2120516, -4.7790074, -2.0452852, -2.407949, -3.5124986, -3.506919, -2.8316567, -2.4972572, -4.2897453, -3.2318325, -2.0848386, -2.7511337, -2.825714, -2.2840638, -2.1273985, -4.573858, -3.5196013, -2.3099709, -1.9768105, -2.6367333, -3.5040345, -2.2665486, -2.7077358, -2.5872097, -3.828445, -3.6953075, -4.895928, -2.4355423, -2.0899951, -2.0495608, -2.7160594, -3.9311116, -3.3196929, -4.747052, -3.7480927, -4.6403666, -3.5007823, -1.8442141, -2.6454961, -4.8937225, -5.3806396, -4.3192015, -2.6148129, -2.677922, -2.215932, -3.3537917, -2.6788485, -2.9680216, -4.078896, -1.8529885, -2.0642333, -2.340028, -1.9987302, -3.3039026, -2.392308, -2.1998007, -3.9700627, -2.3132365, -1.9336995, -3.8793678, -3.0573602, -3.6135347, -4.379453, -1.9174479, -3.2993047, -3.3862681, -2.5543268, -2.916683, -6.335731, -2.5580328, -2.3565786, -2.3169065, -2.1767182, -2.2160468, -2.853828, -4.616713, -3.1134565, -3.1778045, -2.9624515, -2.313375, -2.166796, -1.996399, -3.6453948, -4.732854, -3.3619401, -2.051775, -2.1180842, -2.8457713, -2.5686061, -3.9750416, -3.261386, -3.2534878, -2.3567991, -3.843067, -3.2058804, -3.351548, -4.033013, -3.2406118, -4.746862, -1.873855, -2.789624, -2.095337, -2.0180707, -5.4625974, -3.1724863, -2.760957 ], "pointIndex": [ 2, 1238, 256, 858419605, 469297476, 1490599725, 1005017321, 1605967623, 1016732321, 374594265, 466246996, 838168704, 252609730, 1175134998, 25339492, 23200487, 1619181267, 805357786, 461366673, 633311396, 1065483570, 787080239, 1444081752, 1298668912, 244844311, 1410626199, 291709064, 1305596026, 763341988, 342862589, 629194162, 1611349848, 414202777, 934582831, 1219546, 168058702, 1328702083, 1554074388, 1766367113, 918632197, 1621630829, 886727885, 1063006415, 1128582551, 231273008, 1488830882, 681790444, 1700116165, 285796646, 1137975848, 405847511, 8924900, 1405645472, 1738960049, 679238652, 64002872, 666276996, 734704128, 371354107, 1484993525, 508819804, 1850027246, 792953121, 1580734430, 438885431, 95284342, 408412746, 1577909765, 861150228, 749262352, 961671547, 1291606525, 1279110026, 684142540, 187173978, 1579637657, 227902840, 1686808732, 1616456420, 872611235, 866293550, 1390806705, 1131570308, 1076710441, 1656938670, 1218981380, 1514339915, 1813021837, 1236 ], "storeSequenceIndicesEnabled": false, "size": 256, "capacity": 256, "initialAcceptFraction": 0.125, "timeDecay": 1.0e-4, "sequenceIndexOfMostRecentTimeDecayUpdate": 0, "maxSequenceIndex": 1256, "compressed": true, "randomSeed": 8772489341801893028 }, { "version": "2.0", "weight": [ -1.0728947, -1.5259328, -1.5271281, -1.5343946, -1.560383, -1.5384734, -1.5312777, -1.5520419, -1.6264254, -1.6279063, -1.5762386, -1.54961, -1.5745214, -1.670223, -1.5665997, -1.6381234, -1.7441238, -1.6393917, -1.6364237, -1.6332041, -1.6408373, -1.6322473, -1.7203869, -1.7163656, -1.7157981, -1.6053427, -1.6213709, -1.6732472, -1.8829713, -1.5831262, -1.5804985, -1.8121722, -1.9040909, -1.855875, -1.7723962, -1.756655, -1.7166331, -1.7561811, -1.7495925, -1.7460877, -1.8043892, -2.0242321, -1.6566799, -1.8006837, -1.7637908, -1.7983268, -1.8492807, -1.938855, -1.8046734, -1.9368708, -1.7219111, -1.647257, -1.8743986, -1.9102929, -1.6376833, -1.8193051, -1.7348002, -1.9335852, -1.8950299, -1.6522033, -1.8217105, -1.8316988, -1.583854, -1.8243084, -1.9072149, -2.0794513, -1.9411082, -2.0080197, -2.3706264, -3.8453596, -1.9341033, -1.7909273, -2.22557, -1.8950368, -1.8222072, -2.0923498, -1.9481359, -1.9054334, -1.8847692, -1.9231081, -1.8395206, -1.816015, -2.1411002, -2.6224537, -2.1703074, -1.8760118, -1.7247542, -2.1039886, -1.941013, -2.1875296, -2.6584635, -2.4773474, -2.0004907, -2.427941, -1.8578634, -1.993672, -1.9411371, -2.4460554, -2.4973977, -2.587589, -2.143168, -1.9661105, -1.8435761, -1.7624182, -1.8321925, -2.2877474, -1.8888198, -1.9872756, -2.3712525, -2.053333, -2.304413, -1.8495423, -1.8473682, -1.7911122, -2.255487, -1.9753639, -2.8610258, -2.6455243, -1.9160482, -2.0074358, -1.7680875, -2.0996945, -2.1236439, -3.1808512, -2.3633845, -2.0920115, -1.5991555, -2.0979178, -3.580935, -3.3564754, -2.1720605, -3.337978, -2.8830314, -2.6280017, -2.653904, -2.2192788, -2.0428448, -4.37789, -3.6127176, -3.9183333, -4.027198, -2.2029734, -2.4479206, -4.0643425, -2.4019227, -2.8332531, -3.725749, -2.8588874, -2.51254, -2.4987812, -3.2159305, -5.0033402, -3.5965152, -2.3439965, -5.258561, -2.116983, -2.1509147, -2.1029966, -2.2929664, -2.0077374, -2.858487, -2.585806, -5.1803718, -2.1305256, -2.8780572, -3.130301, -3.3613229, -3.407688, -2.8195002, -3.5945868, -2.1957138, -2.7049334, -3.6004672, -3.220083, -5.7187304, -2.3223257, -4.639869, -2.3436725, -2.6810954, -3.5382938, -2.8885171, -5.0835733, -3.452059, -2.9016135, -4.5785546, -2.4024642, -2.6227605, -5.620513, -2.71551, -1.8989049, -2.6357558, -2.3210332, -2.2360513, -2.0786529, -2.1857975, -4.588789, -2.746207, -2.5993383, -3.357406, -3.7500455, -4.308708, -6.10445, -2.2139173, -3.3152285, -3.428218, -2.914128, -2.5067766, -3.2157886, -1.8737192, -2.5115092, -1.9986128, -2.4794385, -4.047551, -2.1282003, -2.304178, -2.4129395, -3.613385, -3.106013, -2.9582293, -4.256424, -2.186439, -2.4176476, -2.6717122, -2.3630428, -2.2466805, -2.6661818, -1.8820276, -2.5826948, -2.4682412, -2.6981506, -3.0258257, -2.1245618, -3.3690262, -3.0876715, -4.162996, -4.5142965, -3.7879217, -2.9665167, -2.791171, -3.5369656, -2.3917305, -2.2554045, -2.6315799, -2.3195806, -2.5932949, -2.5324724, -2.643968, -3.478174, -3.8480647, -4.838305, -4.7640142, -5.7706485, -3.7859595, -1.890822, -3.0025935, -6.5981126 ], "pointIndex": [ 0, 1255, 256, 451332295, 476844765, 353449948, 560430769, 524584, 316601115, 394867709, 1089903807, 681991040, 1250248753, 1465322267, 1221666542, 1459131120, 1521923180, 158727042, 493217101, 1954551683, 1608806476, 816219709, 739309430, 1924093989, 586175080, 1083141184, 1514287099, 383171479, 335468273, 353301328, 1087214337, 1155612821, 422631183, 1753804395, 473325151, 699257600, 555443726, 1751772757, 869201381, 787347922, 1146538503, 1656581780, 596168698, 1687312381, 1815453422, 101975884, 95255200, 954426855, 809120055, 1809655805, 119992139, 1700763601, 559408775, 912305271, 932752032, 1105958944, 649154500, 717035920, 98100460, 310978596, 147069943, 1203687429, 1553807374, 1786111910, 1834199016, 1235945729, 482756131, 500599205, 516810663, 936616447, 1778816992, 587427863, 185535326, 1799358676, 1004637632, 200082407, 746739784, 1457045496, 804396910, 840863913, 858856371, 916721559, 1447419325, 1154031319, 1679446170, 1585138145, 1452617747, 1976564591, 153 ], "storeSequenceIndicesEnabled": false, "size": 256, "capacity": 256, "initialAcceptFraction": 0.125, "timeDecay": 1.0e-4, "sequenceIndexOfMostRecentTimeDecayUpdate": 0, "maxSequenceIndex": 1256, "compressed": true, "randomSeed": 5684369017740460239 }, { "version": "2.0", "weight": [ -1.4911071, -1.4948497, -1.4967381, -1.5310053, -1.5021715, -1.4987854, -1.5207069, -1.5417862, -1.6222419, -1.5158104, -1.575677, -1.5464264, -1.5918624, -1.6376232, -1.5584885, -1.5438135, -1.7702165, -1.7226433, -1.669732, -1.6314669, -1.5866266, -1.6306599, -1.5853622, -1.6076901, -1.7002006, -1.7073035, -1.6342174, -1.733735, -1.7246922, -1.5689619, -1.6232954, -2.2763486, -1.5731705, -1.7965978, -1.9153309, -2.4673932, -1.9342862, -1.6788498, -1.8781089, -1.7806269, -1.9041122, -1.6793627, -1.6082995, -1.6951773, -1.6438974, -1.6304628, -1.8834292, -1.7857707, -1.8056086, -1.7213256, -1.8343105, -1.7301867, -1.9566417, -2.0860317, -1.8436301, -1.7512348, -2.2028763, -1.982251, -1.7824874, -1.5767955, -2.0471509, -1.7501755, -1.810705, -2.4892054, -2.5443416, -1.584471, -1.8527033, -2.0867581, -1.9452515, -2.5781212, -2.4684212, -3.2122548, -2.4690588, -1.9902788, -2.1398559, -2.1078768, -3.1068273, -2.477722, -2.173951, -1.9940237, -2.3296304, -2.3379073, -1.9337028, -1.7934093, -1.7880102, -2.239576, -1.7530417, -1.8559335, -1.7293302, -1.6868128, -1.8564905, -1.7350532, -1.7223151, -2.2533605, -2.07792, -1.903341, -1.8106148, -1.9080479, -1.8621694, -1.7881052, -1.7325954, -2.2205815, -2.3311322, -2.471289, -2.7758646, -2.4677973, -2.3256052, -2.9003494, -2.2866623, -2.0297635, -1.9258659, -1.8620938, -2.0275686, -2.7264936, -2.297328, -2.0284185, -2.2965612, -2.2951462, -2.0015132, -2.1415493, -2.186847, -2.1374779, -2.862179, -2.3183577, -1.7961106, -2.3331249, -1.8480538, -2.5384324, -5.1544867, -3.026151, -5.105571, -3.2670376, -3.3749888, -3.138002, -3.2801085, -2.3727238, -2.2907364, -3.2307806, -3.6300344, -2.747922, -2.8748686, -3.0952058, -2.580954, -4.8073583, -3.73439, -2.5728266, -3.479313, -2.0984015, -4.709388, -2.9657722, -2.2065113, -2.3346984, -2.6162956, -3.309454, -3.9598234, -2.563438, -5.2532086, -3.0477846, -2.2498612, -3.195835, -2.1837943, -2.565356, -2.3919415, -4.014871, -2.4170105, -3.0006533, -2.1708453, -2.0211153, -4.1956906, -3.5515172, -4.3578415, -2.9570305, -4.4781837, -2.6243632, -2.7781944, -2.0778558, -2.5789433, -2.71087, -3.7467637, -2.1903725, -2.521412, -2.07979, -1.9037058, -2.5047266, -2.299304, -2.8141892, -2.1038964, -2.707932, -3.5448616, -3.4673579, -2.5393233, -2.2156534, -3.419818, -1.8480599, -2.6456294, -1.9716583, -2.0067434, -2.6639864, -3.4829478, -2.005168, -2.0726898, -3.549752, -2.0862799, -2.6057477, -3.413592, -4.0227575, -2.3710632, -2.8646724, -5.5461245, -4.6805344, -5.1303153, -2.591475, -2.4750278, -3.6639812, -2.8366256, -4.1023946, -2.9231687, -2.5331335, -2.953019, -2.6595, -2.183007, -2.2965136, -2.019997, -4.1200275, -3.0445871, -2.3739119, -3.5416205, -6.0304656, -2.7609074, -3.1862056, -3.6426349, -2.0630581, -2.0421371, -2.590611, -3.177964, -4.961881, -4.281495, -2.7978115, -7.188777, -2.5101128, -2.6189158, -2.3621762, -4.326628, -3.0647418, -2.8780253, -4.0096097, -5.4045615, -4.073947, -2.9886022, -2.6005065, -2.0170605, -4.1553526, -2.8099904, -4.852867, -3.1955338 ], "pointIndex": [ 0, 1256, 255, 1125197114, 82857922, 1461216781, 1048294166, 1233241938, 1072651067, 1396385587, 379592286, 817359583, 1161848244, 1080687724, 910355443, 1066392929, 947891366, 472461480, 509175965, 1695562823, 628293117, 205968688, 1283772976, 1904959238, 1848038017, 1962492536, 926798269, 417231182, 1726165423, 1306473602, 145177136, 1697987296, 465815333, 594818656, 1629364985, 1574606, 950373332, 1814719573, 629547692, 841675527, 1435863509, 798550530, 1121046315, 1580042310, 1723551849, 267455636, 1428579383, 464360136, 1756191336, 303660858, 1753359406, 1561260355, 1049502988, 325953841, 337209313, 356530729, 138208649, 381091212, 413443146, 1974615274, 869727989, 1209973784, 71686395, 1348683888, 739318597, 501851431, 1803830512, 102456874, 1575876331, 1069757925, 1894928579, 1064803339, 1116966482, 1918248381, 619871104, 1534741660, 687015658, 1495284408, 1537003602, 770132244, 745400391, 858751993, 546446138, 1538264577, 1184394218, 1581041753, 1498943238, 1986067271 ], "storeSequenceIndicesEnabled": false, "size": 255, "capacity": 256, "initialAcceptFraction": 0.125, "timeDecay": 1.0e-4, "sequenceIndexOfMostRecentTimeDecayUpdate": 0, "maxSequenceIndex": 1256, "compressed": true, "randomSeed": -5961011759105000572 }, { "version": "2.0", "weight": [ -1.6237711, -1.628153, -1.6416693, -1.6389134, -1.6589046, -1.6476755, -1.696056, -1.696213, -1.6725714, -1.6640321, -1.6763895, -1.6636418, -1.6921222, -1.6966518, -1.7628441, -1.7269291, -1.6983651, -1.6831176, -1.6787539, -1.6936954, -1.7841918, -1.74626, -1.7725044, -1.6873757, -1.7203944, -1.8625002, -1.8564576, -1.73292, -1.8435144, -1.855701, -1.7792147, -1.8557831, -1.8105886, -1.9192698, -1.7947007, -2.216442, -1.8588217, -2.415632, -1.8353658, -1.7428002, -1.8348613, -2.0291662, -1.9624325, -2.0259523, -1.9174504, -1.986738, -2.2747478, -1.8286602, -1.8884032, -1.9634504, -1.7983656, -1.8889049, -1.9644171, -1.9637636, -2.1408167, -1.7981789, -2.1016233, -2.00415, -2.0105994, -2.1065261, -2.141287, -1.9218062, -1.9633807, -1.8852696, -2.7141705, -1.8775206, -2.0123956, -2.3604717, -2.3413675, -2.055255, -2.4611597, -2.3919573, -2.874939, -1.9921714, -1.8891987, -2.7240236, -2.5091233, -1.8974257, -2.3336713, -2.04924, -1.8874867, -2.400239, -2.0225604, -3.2573667, -2.5920815, -2.237946, -2.6125925, -2.4049811, -2.571699, -2.3181803, -3.2518358, -2.529661, -2.347575, -2.3412488, -2.302599, -1.8972478, -2.1023102, -2.2392087, -3.5990577, -2.2514434, -1.9948503, -1.9095303, -1.8573929, -2.6482105, -1.9383067, -2.068555, -2.6944559, -2.0890465, -2.3229322, -2.2482884, -2.4190507, -1.9795253, -2.1934295, -3.05396, -2.646185, -2.3653991, -3.164765, -3.1067479, -2.0248604, -2.127616, -2.3515325, -2.2254272, -2.1740985, -2.2719512, -2.085722, -2.4028237, -2.0253525, -1.9308548, -2.6048572, -4.0182304, -4.4086246, -1.9217116, -3.025395, -3.6621032, -2.9816504, -4.321547, -2.4466884, -3.1595805, -2.6285114, -2.931134, -2.7492023, -3.6441271, -3.034636, -2.4775612, -2.9013302, -4.2080584, -4.958086, -2.3812592, -2.7652755, -3.1284442, -4.9177685, -4.059228, -3.0657902, -3.2866814, -2.5140004, -3.395545, -3.394022, -4.1792674, -5.2798567, -2.3089683, -2.8747897, -3.5250952, -4.1287413, -2.963254, -3.250532, -2.1863542, -2.416417, -3.6281595, -3.6139681, -4.0049005, -3.2939267, -2.3069274, -2.6169567, -3.554352, -3.1421096, -4.0918937, -2.8538375, -2.9486341, -4.11142, -2.662579, -3.101394, -4.9599957, -3.5882397, -2.598755, -5.9695992, -2.760794, -2.4963899, -2.5378249, -5.551288, -2.7500703, -2.7607353, -1.9182537, -3.4631934, -2.3276725, -5.1479826, -2.8500469, -4.8279233, -4.042882, -3.806317, -3.0019336, -3.7066808, -2.7486873, -5.8026333, -4.1605725, -2.3630943, -2.1956322, -4.7438784, -3.8152585, -3.0708437, -2.610038, -3.1883404, -4.153042, -3.6384819, -4.625368, -4.6413755, -5.181517, -2.506795, -2.6399064, -2.368988, -2.6294613, -2.5832407, -5.06332, -3.4438636, -2.2855315, -2.087224, -2.5356748, -3.0395882, -4.248704, -4.914877, -3.9012988, -3.2828252, -3.193225, -5.193056, -5.249597, -3.2919266, -3.3869119, -5.7165804, -2.650207, -2.1123464, -2.431872, -2.584526, -4.189752, -2.4254708, -2.8907857, -2.560145, -3.9329863, -2.6766164, -4.6441774, -2.7055318, -6.3359137, -3.4322157, -2.986393, -4.379887, -5.3462477, -2.6393416, -3.140426 ], "pointIndex": [ 9, 1253, 256, 961539270, 1673099742, 292864876, 93406520, 1605143282, 1130920593, 1312898789, 882579986, 749347743, 1075064541, 838538357, 272853188, 548798662, 355454806, 232841713, 1432004312, 469242221, 442134772, 1150795113, 995911589, 1768180843, 756759527, 261221975, 95213649, 996738658, 1559270182, 1209279388, 358920143, 388999972, 605928230, 1345802258, 517882258, 1419006519, 1559783413, 1301851733, 1008879669, 1786576935, 1060918451, 1374777785, 1772599360, 1137569967, 1585666898, 725303212, 239785903, 310201483, 6508745, 537940759, 1873686440, 379902131, 341355727, 1617006820, 312920987, 1650707723, 954643590, 911482995, 50904291, 1655019542, 1366056569, 1708581567, 438009943, 598454845, 211496435, 1199696213, 1754048226, 1684998472, 928944341, 566199032, 197470124, 878762558, 472550127, 681922101, 30036178, 1808191772, 1002679164, 960291440, 1123215918, 908044003, 943742961, 985172922, 1522888374, 1286150540, 1527864856, 1244078233, 1450403722, 1796263298, 1244 ], "storeSequenceIndicesEnabled": false, "size": 256, "capacity": 256, "initialAcceptFraction": 0.125, "timeDecay": 1.0e-4, "sequenceIndexOfMostRecentTimeDecayUpdate": 0, "maxSequenceIndex": 1256, "compressed": true, "randomSeed": 9095889982550489397 }, { "version": "2.0", "weight": [ -1.5965683, -1.605474, -1.5998874, -1.6115742, -1.6243737, -1.6085265, -1.6020123, -1.634418, -1.6425602, -1.6400524, -1.629464, -1.6297138, -1.6337343, -1.6033086, -1.6097484, -1.6624259, -1.6742873, -1.7130513, -1.7128102, -1.6477957, -1.670843, -1.6317906, -1.6782671, -1.6773082, -1.8203907, -1.7286334, -1.806726, -1.6300648, -1.7287886, -1.6415924, -1.6448572, -1.6650454, -1.7876563, -1.7708933, -1.7046733, -1.9888271, -1.972927, -1.8556824, -1.9030229, -1.9477214, -1.8496878, -1.6738344, -1.8104644, -1.6836578, -1.6649296, -1.7982227, -1.7100314, -1.8672014, -1.687297, -2.4574585, -1.9116623, -1.7777321, -1.7388297, -2.0904682, -2.171662, -2.0474243, -2.047354, -1.8827441, -1.7973624, -1.6882379, -1.7449267, -1.6694207, -1.8786082, -1.685836, -2.4038177, -3.2515216, -1.8661153, -1.903327, -2.5530834, -2.1660123, -2.7789965, -2.1661847, -2.5386386, -2.577987, -2.0202804, -2.6948571, -2.0975728, -2.4518397, -2.322574, -2.0369956, -2.3269794, -1.980619, -1.8654743, -2.132766, -1.7511171, -2.1872008, -1.899768, -1.8329855, -2.0645735, -1.793986, -1.9067699, -2.3587954, -1.9459684, -1.7774417, -1.7305173, -2.106843, -2.2295704, -1.7658864, -1.8917775, -2.6521816, -3.1080632, -2.6481214, -1.9151706, -1.9945921, -1.8536875, -2.0041533, -1.8389709, -2.201991, -2.526123, -2.8499606, -2.2844756, -2.0961516, -2.7727692, -2.337646, -2.2693615, -2.6762223, -1.98051, -1.9966611, -2.4551325, -2.1908934, -1.6984668, -2.9126124, -1.754821, -1.8608118, -1.778809, -2.1995912, -1.8802121, -1.754069, -1.9750528, -3.3643022, -3.0671022, -5.499051, -6.351326, -4.5714335, -2.0859892, -2.5843184, -2.7171652, -3.3848102, -2.7166994, -2.4720547, -2.4142833, -4.8606153, -4.5415883, -3.3840468, -2.6464822, -3.5753329, -3.2476146, -2.6213663, -3.1917949, -2.6942282, -2.42582, -3.2648609, -3.1270168, -2.307064, -4.374364, -3.885179, -3.0397565, -2.5333095, -2.4329717, -2.2332306, -2.294948, -3.1335053, -4.5621243, -3.0722396, -2.3758736, -5.0332875, -2.6144414, -3.4925108, -3.4594991, -2.6730094, -1.995602, -5.004476, -2.4933708, -1.9064989, -3.145163, -2.6776807, -2.5378213, -2.7086794, -3.2757256, -1.8860871, -2.3013015, -2.6716664, -3.6417656, -2.7129445, -3.0108495, -2.7780106, -2.0601518, -2.9248378, -2.9490836, -2.2054753, -3.5714936, -3.9003718, -2.609097, -2.988914, -2.3022199, -3.5478654, -3.9104757, -2.8510497, -2.9600012, -3.0319679, -5.06519, -4.875351, -4.142768, -5.731296, -3.408339, -6.5622587, -2.80811, -3.0746014, -3.469099, -4.501739, -2.066536, -2.7396262, -3.2183354, -2.774808, -2.3921945, -4.8227572, -2.8792684, -3.2473035, -2.8974328, -4.7501125, -3.4837053, -2.9300468, -2.5738401, -2.8842216, -3.1261454, -4.581744, -2.9203901, -2.6495404, -3.342783, -2.4231517, -3.1346366, -3.2866194, -3.8044457, -3.9290097, -2.220442, -3.2857993, -2.317145, -3.182098, -2.5939918, -2.685288, -2.73855, -2.1080241, -2.4743004, -4.901883, -4.4570746, -2.675061, -2.5903609, -2.8296156, -3.7289162, -2.9241652, -3.2727346, -4.1241984, -3.8632848, -2.914715, -2.1849167, -2.0690107 ], "pointIndex": [ 2, 1256, 256, 1503582068, 559482190, 1337102976, 562729286, 1739611809, 967291313, 425541850, 871408859, 1146672822, 1122805082, 395320915, 24473670, 630240406, 400611615, 148617549, 867539900, 810810247, 751919595, 1609394900, 1136416181, 1929048211, 612684984, 1527301945, 1577898435, 305795120, 1880831748, 367138434, 22172056, 1874272017, 1304492081, 505980363, 1231071935, 139656808, 961302118, 822970169, 1666978862, 173863570, 1554254010, 1236234523, 1635648513, 1492888839, 1732013932, 694525718, 872762421, 455204267, 1773693362, 781273967, 1676485434, 63093379, 174927860, 312100965, 330474076, 637861492, 555140684, 1812290006, 1636756093, 1445119631, 1836815181, 456820272, 474696245, 491235964, 502555223, 1940258051, 530706178, 1489639818, 523814770, 586608468, 76358020, 653663382, 1327743328, 1851203310, 1673754727, 1523023867, 857828327, 1941160626, 830782756, 1601969504, 1845615641, 1401517138, 1068653717, 1111281952, 1140141877, 1971318335, 1757514124, 1743241112, 1254 ], "storeSequenceIndicesEnabled": false, "size": 256, "capacity": 256, "initialAcceptFraction": 0.125, "timeDecay": 1.0e-4, "sequenceIndexOfMostRecentTimeDecayUpdate": 0, "maxSequenceIndex": 1256, "compressed": true, "randomSeed": -4568414323862123324 }, { "version": "2.0", "weight": [ -1.6138266, -1.6200708, -1.614556, -1.6233939, -1.6260647, -1.6201645, -1.6304435, -1.669478, -1.6389856, -1.651674, -1.6661147, -1.6698132, -1.6513977, -1.6688465, -1.6691176, -1.7950977, -1.7260531, -1.7063082, -1.6564782, -1.669986, -1.903447, -1.6774566, -1.7375205, -1.9316454, -1.7064815, -1.7414997, -1.6840204, -1.9541612, -1.9007772, -2.018441, -1.7255052, -1.8393124, -2.0276234, -1.8696972, -1.8448665, -1.7897143, -1.7640897, -1.8238368, -1.8092318, -1.8617193, -1.7547783, -2.0482876, -2.110692, -1.7365395, -1.7024146, -2.3914833, -1.850182, -2.068951, -2.242601, -1.7162504, -1.78647, -1.7638264, -2.090236, -1.7976038, -1.7387117, -2.1137908, -2.472179, -2.1319265, -2.2775311, -2.038422, -2.1415591, -2.094432, -1.726505, -2.575303, -1.9282467, -2.8848033, -2.4613793, -1.9956578, -1.9995972, -2.0498257, -1.8999822, -1.968389, -2.1845083, -1.998322, -2.3053951, -2.185676, -1.8633871, -2.577086, -2.3613966, -1.8704422, -2.3792217, -1.9110062, -2.2505798, -2.1216521, -2.0548737, -2.2406547, -2.1248424, -2.1456785, -2.1103835, -2.0191789, -3.127058, -3.0576043, -2.6811328, -1.8934972, -1.8617606, -2.2808363, -2.4195814, -2.9486563, -2.5926979, -1.9886698, -2.084278, -2.182579, -1.8508092, -2.1939347, -2.5398748, -2.717566, -2.4137757, -1.8228891, -3.6212134, -1.7930357, -2.044137, -2.839537, -2.3011444, -2.7147546, -3.0784369, -2.3831677, -3.5555866, -2.469817, -2.3973162, -2.2536638, -2.0598986, -2.2986326, -2.5735557, -2.1581638, -2.221038, -2.3564098, -1.9919771, -5.206828, -3.0944185, -2.483788, -2.118705, -3.271962, -8.166502, -5.0891895, -3.2259262, -5.996233, -7.8219643, -5.435928, -4.096331, -2.0845773, -2.3608477, -2.382382, -2.571299, -2.3727942, -2.1107092, -3.9825644, -5.0206003, -2.0619795, -2.4728963, -2.3282006, -6.0645623, -3.7792861, -2.5139346, -2.4748445, -2.5115914, -3.2220566, -4.2849445, -3.2265825, -3.7718532, -4.087799, -2.0863242, -3.5737815, -2.8400545, -2.1448634, -2.0088718, -2.6729875, -4.4135776, -2.8767314, -2.8736422, -2.6131053, -2.6826117, -2.5429437, -3.638273, -2.4608417, -2.7961802, -2.2718759, -2.3121276, -2.6518314, -2.3440542, -2.045319, -4.7715955, -3.9468198, -3.5987012, -3.7612112, -4.406169, -3.0142753, -2.9591682, -2.205534, -1.9212265, -3.6447978, -2.0212262, -3.6987958, -3.2881184, -2.9900627, -3.8477633, -5.032719, -5.106605, -3.327592, -2.7105112, -2.4769652, -2.9611087, -3.0738149, -2.8768263, -7.121635, -3.7444797, -2.0688655, -2.374881, -2.4311557, -2.7882764, -2.6756434, -11.394501, -2.7900372, -2.7363017, -2.440126, -2.477741, -4.5160103, -2.7817466, -4.2179155, -4.096831, -2.6643949, -6.123933, -2.4551187, -3.8375704, -4.0790167, -2.8787398, -5.083254, -3.9775193, -4.593228, -2.8289692, -3.9375958, -6.2126374, -3.015584, -3.2844162, -3.608685, -4.183773, -3.0704916, -4.6877394, -2.875446, -3.779652, -2.4573023, -2.2609415, -2.8825245, -2.9201965, -2.360224, -3.3201356, -4.1180134, -3.2411907, -2.2871995, -3.1855159, -2.308338, -4.0716915, -3.783447, -2.4058626, -2.3971012 ], "pointIndex": [ 1, 1252, 254, 274547076, 976034967, 315587402, 1649179100, 1843551661, 1376484141, 180538131, 980182133, 861182697, 1233326548, 250222193, 576939298, 331323215, 540501137, 1394344577, 1834460469, 276498685, 1039219316, 1437267118, 1216370238, 1904011025, 1224188161, 268514160, 666171480, 1477003370, 1592529095, 13868853, 1195328452, 424364948, 68286543, 1021973364, 1840717453, 1628669221, 1482849275, 685094737, 742769426, 1260848491, 1258393488, 1697048226, 1027507217, 1381884431, 1786484634, 1487562547, 1617412411, 266446638, 1450798852, 1932821008, 1644546020, 1238420991, 1122575941, 1858877151, 1752517175, 1085366049, 549552616, 772172480, 1700395270, 362405413, 32350723, 80062926, 1507765598, 1832014160, 871120223, 1037491377, 167472094, 504934741, 177951359, 500670106, 971261282, 1275056365, 588879903, 1924589827, 768038482, 687266305, 1938893689, 227921150, 1467022746, 1039928366, 1280589980, 1491414349, 1019670730, 1447688018, 658286145, 1821877343, 1523321737, 1563638 ], "storeSequenceIndicesEnabled": false, "size": 254, "capacity": 256, "initialAcceptFraction": 0.125, "timeDecay": 1.0e-4, "sequenceIndexOfMostRecentTimeDecayUpdate": 0, "maxSequenceIndex": 1256, "compressed": true, "randomSeed": -7769275059528997346 }, { "version": "2.0", "weight": [ -1.467028, -1.4670975, -1.4674501, -1.4778205, -1.4689364, -1.4841985, -1.4681206, -1.4894453, -1.5780511, -1.4848005, -1.5843028, -1.4873016, -1.5212706, -1.477742, -1.4705982, -1.528797, -1.6605811, -1.5975436, -1.6015737, -1.518848, -1.4887893, -1.8078047, -1.6950811, -1.4955248, -1.5334237, -1.5501573, -1.653275, -1.7648107, -1.7915306, -1.4838738, -2.0933008, -1.5549726, -1.5799541, -1.8778653, -2.0852897, -1.598548, -1.6157726, -1.6360085, -1.6091611, -1.5994772, -1.7040111, -1.5370618, -1.5624154, -1.930429, -2.0199976, -1.7245322, -1.7301582, -1.7585945, -1.5455968, -1.7815795, -1.6114988, -1.741401, -1.6412951, -1.7372777, -1.6953312, -1.9503698, -1.8603348, -1.8601714, -1.8995856, -1.7357519, -1.6103076, -2.1440177, -2.3009224, -1.7057087, -1.5696069, -1.8150089, -3.4212294, -2.101055, -2.87118, -2.098325, -2.436333, -1.628527, -2.0695157, -1.7023493, -1.9100912, -1.6787161, -1.6959999, -1.923348, -1.7236828, -1.7092505, -2.1551113, -1.8813591, -2.2988782, -2.1261275, -1.6131617, -1.8154691, -1.8053954, -2.2895265, -2.074795, -2.494754, -3.2932467, -1.8201196, -1.7812427, -1.9736366, -2.131185, -2.472943, -2.473403, -1.7512174, -1.6387186, -2.4311333, -2.6189053, -1.7664279, -2.0674803, -1.8106017, -1.9222755, -1.7646991, -1.8440909, -2.0587785, -2.2700589, -2.2341561, -1.8995575, -2.1170647, -2.1305034, -1.9458102, -2.2541769, -1.8630131, -2.3247356, -2.011005, -2.0010917, -2.0726094, -1.7903583, -1.9421533, -2.0684798, -2.3165772, -2.2252998, -2.8308153, -2.3763773, -2.0261903, -2.3376548, -1.6005598, -5.1900268, -3.3060582, -1.9668535, -4.4343815, -5.726982, -6.5618143, -7.1521225, -3.9599025, -3.087707, -3.7807233, -2.1584404, -3.3265028, -4.7556677, -2.0542948, -1.7263491, -2.553137, -3.8031938, -2.0881627, -3.6006567, -1.9714303, -4.027929, -2.9679847, -2.084463, -2.5373173, -1.7270668, -3.3460476, -2.2720094, -1.9646698, -1.7665315, -2.1895826, -3.1057694, -2.5851593, -2.3558624, -2.7720058, -4.548722, -2.794429, -2.9128704, -2.2261264, -2.5785084, -2.3850858, -3.0014517, -2.3341982, -2.0401964, -3.7656128, -4.918224, -2.3436055, -3.3159294, -2.8349006, -2.212059, -2.8434274, -3.250644, -6.301172, -3.4591837, -2.829273, -5.1736913, -1.8322675, -2.6087058, -2.7446747, -1.9850545, -2.7042725, -2.2928898, -2.8400059, -7.0028443, -3.1880243, -2.7262745, -2.933164, -2.522319, -5.064997, -2.2153957, -2.8580453, -2.6116455, -2.7077794, -2.875213, -1.8732623, -4.516843, -3.31612, -2.9638295, -2.528539, -1.9243155, -3.2457132, -3.8606894, -4.193019, -1.9437845, -2.818514, -2.0880072, -4.4739275, -2.1363142, -3.224624, -4.357141, -2.5012124, -2.285748, -2.908747, -2.3669345, -2.3116171, -2.3229961, -2.6012707, -2.9103174, -2.409648, -2.921963, -2.7194922, -2.717911, -2.218835, -1.9833001, -2.865098, -2.5878224, -2.833754, -3.606414, -2.3370578, -3.9532104, -2.3224201, -3.205591, -2.004258, -2.3421495, -3.8120599, -2.659517, -4.6359572, -3.6126306, -2.8724058, -3.2156265, -3.7808232, -5.067774, -3.3008513, -4.3762145, -3.2654536, -4.3478055, -3.4660358 ], "pointIndex": [ 6, 1249, 256, 795392217, 638392962, 150061942, 1614475866, 1147699865, 1191819344, 279537301, 551298788, 95573517, 1280571584, 800982649, 797086801, 1445793454, 146122949, 60691280, 1321646822, 985916881, 122025031, 1066252937, 1678302431, 1815055294, 1539998588, 1060685771, 430818523, 330705144, 449039476, 662066961, 821265261, 397155296, 207819166, 1853345899, 877469758, 756263593, 1024183649, 835997518, 1899422496, 203404796, 1368794025, 175599895, 1007365797, 1669139218, 1379846804, 1796674342, 1791417225, 7905622, 167346105, 1058947104, 1858394257, 1467292877, 298716694, 1047781028, 1629806720, 327779287, 294734916, 865485941, 956674799, 388742043, 142688661, 625743782, 438297810, 1456649084, 1603635718, 500480003, 512765450, 1883280749, 1915537434, 486385823, 17492566, 1499864378, 1410301699, 649940136, 673716751, 737319243, 928071726, 1896315503, 834726615, 55181900, 896101042, 1209358992, 790024189, 1033022128, 1211074512, 1246998788, 1531517863, 1777879970, 1243 ], "storeSequenceIndicesEnabled": false, "size": 256, "capacity": 256, "initialAcceptFraction": 0.125, "timeDecay": 1.0e-4, "sequenceIndexOfMostRecentTimeDecayUpdate": 0, "maxSequenceIndex": 1256, "compressed": true, "randomSeed": 4541724188348374211 }, { "version": "2.0", "weight": [ -1.5965717, -1.6001675, -1.6039135, -1.6013881, -1.6059641, -1.6264149, -1.6109191, -1.6168767, -1.6837949, -1.6154885, -1.6385336, -1.6628644, -1.71156, -1.6524342, -1.6569929, -1.6551793, -1.6284081, -1.7612597, -1.7535372, -1.6980925, -1.8142519, -1.7219537, -1.6645398, -1.717013, -1.6743274, -1.7404604, -1.7513614, -1.7165102, -1.8172222, -1.6647087, -1.6899586, -1.8019162, -1.9604771, -1.7325345, -1.8862405, -1.763366, -1.7779802, -1.7706667, -1.927861, -2.421426, -2.0788026, -1.919324, -1.9871373, -1.7431914, -1.8885114, -1.6989186, -1.7150781, -1.8874427, -1.8246077, -1.6761974, -1.700487, -1.8789678, -1.83192, -1.9647466, -1.9222289, -1.7642535, -1.7872288, -2.122375, -1.8567419, -2.0587893, -1.8710225, -1.7320795, -2.0157423, -1.8617587, -1.9388741, -2.1291158, -2.3377938, -1.8759451, -1.9586152, -2.4294631, -2.0866654, -2.352787, -2.368293, -2.4037426, -1.8538191, -2.3876994, -3.388962, -2.0128324, -2.1810913, -2.4652147, -2.760965, -2.1185374, -2.4552193, -1.9905087, -2.6480858, -2.1137474, -2.64262, -2.3192794, -1.7611603, -2.0723884, -2.1697767, -1.6992674, -1.7801843, -2.0863554, -1.7544373, -2.4301438, -2.3560226, -1.9150974, -2.0139015, -2.266037, -2.0130007, -2.3793597, -2.4544587, -1.9949479, -1.9759467, -1.9641852, -3.6359153, -2.1987228, -2.1116462, -2.1017444, -2.194392, -2.273187, -1.8679112, -2.1140149, -3.5964894, -2.7098334, -3.1281495, -1.8930235, -2.5202293, -2.903093, -2.2792664, -2.310557, -2.0356898, -2.211646, -1.7527771, -2.7364557, -2.0347674, -1.9049851, -2.9417238, -2.533384, -3.1451507, -3.901787, -2.65957, -3.1533628, -4.368806, -2.3373902, -2.8215654, -3.2734756, -3.0295422, -2.7848854, -2.8667374, -2.545905, -2.3083808, -2.7107656, -3.1513333, -7.0312195, -2.4134543, -4.3557734, -2.4205604, -2.0935204, -2.3436384, -3.6850507, -2.594825, -3.7675693, -4.1618886, -2.4946504, -2.3559964, -5.823009, -3.4856424, -3.8307014, -3.9933295, -3.2719202, -2.831582, -2.1212502, -2.7761233, -4.082748, -2.6616712, -2.6365888, -2.0699306, -5.487333, -3.191381, -3.5252602, -2.469596, -3.3871434, -3.2145245, -3.2415304, -2.7563546, -2.6392884, -4.5272846, -2.825336, -3.0379832, -3.686642, -3.3420174, -2.0666325, -4.6929336, -2.4952083, -2.9958043, -4.134448, -2.3739684, -1.9288124, -2.210782, -2.81132, -3.663362, -2.3939419, -2.3698654, -3.599692, -3.1023452, -3.5171332, -3.2203267, -2.2895916, -3.1158347, -2.0357246, -5.3228574, -3.8063614, -4.1641517, -2.4883325, -3.3343816, -2.5615892, -3.0179958, -3.1521022, -2.9317567, -2.186532, -2.6344547, -5.570923, -4.1481714, -2.3711085, -2.6832128, -2.4854255, -3.639394, -4.0815396, -2.7622623, -5.2310658, -2.480021, -3.1463213, -3.8098817, -3.2311997, -3.0973024, -4.378947, -2.1186829, -8.498683, -3.7873533, -2.9777024, -3.6439102, -3.3209803, -4.437536, -2.9741552, -1.9432625, -2.984181, -2.892447, -3.4080548, -4.1191716, -3.8573587, -3.966833, -4.4431806, -2.609818, -2.5466335, -4.1361165, -3.8374505, -4.8389907, -2.4686964, -3.7323036, -3.4660387, -4.2187986, -2.5719957, -2.15731, -2.0255377 ], "pointIndex": [ 0, 1253, 256, 1163611739, 961304106, 517944468, 562997821, 1727370439, 742897309, 396628742, 511453566, 1096347742, 1721157150, 983949737, 430285, 168060032, 140638341, 1326071702, 472850819, 852727987, 1611448073, 790833056, 1332688549, 1873278899, 549179258, 1330390782, 899569511, 975063105, 1675110494, 51875298, 1269258147, 1692507144, 1619167988, 221196918, 1071487429, 1831608236, 1639183998, 1759677201, 664469218, 1206540885, 1038238500, 1084208527, 1099085665, 1304517068, 1598745802, 1269019311, 42447411, 1505522038, 34865842, 1539704003, 1066873370, 233723665, 292835379, 1204790347, 806415541, 329431560, 89350503, 1736721386, 32635574, 592479413, 392883167, 1806938453, 1388860555, 433930275, 1481100752, 1934702137, 17665771, 1028187503, 1538389950, 1324475678, 1887458445, 1879803483, 1715261712, 184791230, 1878106178, 1137472729, 192408864, 1901791939, 1037148005, 486557147, 919595168, 950974538, 1178624483, 1125249092, 1179853800, 1285762245, 1768686352, 1860189661, 1247 ], "storeSequenceIndicesEnabled": false, "size": 256, "capacity": 256, "initialAcceptFraction": 0.125, "timeDecay": 1.0e-4, "sequenceIndexOfMostRecentTimeDecayUpdate": 0, "maxSequenceIndex": 1256, "compressed": true, "randomSeed": 2974389039810781744 }, { "version": "2.0", "weight": [ -1.6764992, -1.6958274, -1.6906761, -1.6997926, -1.7197431, -1.7105455, -1.699538, -1.7480061, -1.7183363, -1.7617513, -1.7665355, -1.7205622, -1.7229751, -1.7095234, -1.712063, -1.7610425, -2.0025625, -1.7190348, -1.8428125, -1.7734516, -1.8737025, -1.784302, -1.7758138, -1.8650142, -1.9094932, -1.7641912, -1.7876068, -1.770861, -1.9609163, -1.7481569, -1.8737556, -1.7909487, -1.8254586, -2.0344076, -2.0933356, -1.8535492, -1.7756407, -1.9534725, -2.2208147, -1.8998641, -1.8039731, -1.9330158, -1.8930149, -1.8418735, -1.8315548, -1.8492849, -1.7767801, -2.0619454, -1.9183084, -1.9914724, -2.1994247, -1.893529, -1.9167924, -1.8534486, -1.8540635, -1.8360285, -1.8018483, -2.0149078, -2.156264, -1.7783345, -1.8414056, -2.0906248, -2.3711946, -1.8415192, -2.3714786, -2.9022906, -1.9636358, -2.8221817, -2.3486662, -2.4554226, -2.6083274, -2.6525185, -1.9475011, -2.313022, -1.8175609, -2.8928878, -2.000999, -2.89704, -2.7926826, -2.1103365, -1.9930633, -2.6354682, -2.0399613, -2.033366, -2.20878, -2.487807, -2.1843228, -1.8659741, -1.881563, -2.3812628, -1.9711432, -2.1501844, -2.2721488, -1.813301, -1.8368465, -2.1128387, -2.3040423, -2.6563406, -1.9628875, -2.2360194, -2.3045492, -2.2451193, -2.5775018, -2.047439, -2.3106627, -2.1124313, -1.9980546, -2.2577305, -1.9977155, -2.0085564, -2.1718853, -3.9304676, -1.8986434, -1.9047749, -1.9229028, -2.1014469, -2.537519, -2.6529217, -2.31025, -1.9334949, -1.796481, -2.9063954, -2.0648232, -2.3255317, -2.2250478, -2.5736194, -3.5998192, -2.1379678, -2.723008, -2.939169, -3.053105, -3.9497592, -3.1534941, -3.3767736, -2.1855912, -3.4670146, -6.3716393, -4.2738733, -2.434441, -4.7714667, -4.589805, -4.959077, -2.7561874, -4.3232794, -2.740808, -2.8243487, -3.9605234, -3.4604313, -2.7065961, -6.068086, -6.0786867, -3.5492153, -5.709071, -2.1999042, -4.1939697, -3.6098812, -5.782508, -4.0327687, -6.203905, -2.1922278, -2.2782393, -2.4290404, -2.4427545, -3.199056, -5.023345, -2.2551022, -2.9791067, -3.2474163, -2.243982, -3.5441117, -2.7690384, -3.6095276, -3.255176, -2.6776273, -2.6551788, -2.4600167, -2.2966177, -1.9961336, -2.4975839, -2.5526073, -3.0071547, -2.8752391, -7.322864, -3.6169648, -2.8751423, -4.7001524, -6.7427464, -3.6106853, -2.4639018, -4.794964, -3.2962768, -2.7963517, -2.5175323, -3.3550315, -3.2839267, -4.0063868, -2.938738, -3.2653677, -2.0275402, -2.5693622, -3.3391628, -4.112069, -2.4103444, -2.5815146, -2.4570982, -2.9206357, -2.6522524, -2.232228, -2.307984, -5.9732804, -4.825717, -3.8391047, -2.2225866, -3.9098666, -4.889138, -3.6301153, -2.7953954, -2.2403986, -2.09101, -3.7887583, -3.6717098, -2.5485013, -2.2754288, -4.413657, -4.2619123, -3.6700647, -3.6085973, -2.2921927, -3.1419306, -2.2765403, -2.431947, -2.2881124, -2.2225246, -2.843642, -2.7188275, -2.9016843, -3.3257384, -2.4257905, -4.3817286, -2.0652525, -2.0353162, -3.4925709, -2.8533604, -3.0184164, -2.9160662, -3.452129, -3.3308847, -3.1446595, -2.7629244, -4.060753, -3.3641934, -4.5306907, -2.7997391, -5.0139904, -3.9912064, -2.5082939 ], "pointIndex": [ 0, 1255, 256, 1595624174, 420418603, 1336138779, 503927129, 1359566407, 280802615, 150136042, 3692996, 665504981, 949475038, 50286260, 1125686072, 1282042985, 1872162215, 157102042, 454994246, 1587410745, 609665789, 1200082062, 1171214805, 1902230760, 847331506, 1598252240, 1445118495, 1610068947, 1194442377, 1896710392, 359547984, 497749265, 282571950, 531963305, 678620578, 502828948, 1303457028, 733044781, 824345301, 1134757455, 1757924619, 1708658538, 1508296009, 949874839, 1764962526, 22071435, 112983632, 1479820342, 1893770907, 1318621710, 284053641, 552124488, 735926860, 438794502, 1284105615, 326809658, 1917781586, 1860744660, 1153253229, 1497199698, 1969057161, 1974720042, 1486644109, 174979513, 1658510367, 440166081, 1232412144, 1928663421, 500575328, 648431842, 769368113, 1235260006, 573095955, 658807788, 34545359, 208497870, 1805281587, 1692857443, 1679577101, 910172434, 805831328, 1941170410, 1772364771, 1400744872, 957287994, 1070402280, 1306036065, 1678467741, 1255 ], "storeSequenceIndicesEnabled": false, "size": 256, "capacity": 256, "initialAcceptFraction": 0.125, "timeDecay": 1.0e-4, "sequenceIndexOfMostRecentTimeDecayUpdate": 0, "maxSequenceIndex": 1256, "compressed": true, "randomSeed": -7325120448755709923 }, { "version": "2.0", "weight": [ -1.4789896, -1.4813277, -1.4817868, -1.4927266, -1.4817274, -1.494836, -1.4951668, -1.5189464, -1.4971339, -1.4891075, -1.494705, -1.5260731, -1.6166315, -1.5730482, -1.5089144, -1.5422033, -1.5432531, -1.6478055, -1.5075778, -1.4952298, -1.5665935, -1.583639, -1.5436229, -1.6401356, -1.5861496, -1.6939223, -1.6734645, -1.7411418, -1.6076918, -1.6060724, -1.5620602, -1.5942497, -1.6047797, -1.9373966, -1.6813858, -1.6566732, -1.6520962, -1.7416009, -1.5672114, -1.5435431, -1.5410064, -1.6136974, -1.575288, -1.8296115, -1.635954, -1.6432008, -1.5914276, -1.8453808, -1.8873544, -1.9382782, -1.8738217, -1.7060682, -1.8990436, -1.8289719, -1.6985285, -1.7595074, -1.7536279, -1.7418392, -1.8090104, -1.9695964, -1.6294744, -1.6043773, -1.6309644, -1.6044484, -3.3081942, -1.6289575, -1.6165967, -2.5297084, -2.8675802, -2.765154, -1.864613, -1.958626, -2.2022676, -1.6808785, -1.8817226, -1.7862926, -2.30006, -1.9910297, -2.413693, -1.6648751, -1.8299508, -1.547286, -3.0589058, -1.8049306, -1.7710308, -1.7064773, -1.7509496, -1.8867807, -2.0005727, -1.6649243, -2.0950646, -2.0428991, -2.936637, -2.86679, -3.4534729, -2.1623518, -1.9664167, -2.0203717, -1.9363478, -2.8894434, -2.441115, -2.0852993, -2.1043887, -1.7624108, -1.8068472, -2.2669864, -1.9438679, -2.0263252, -2.809571, -3.5156472, -2.0535638, -2.7014992, -1.9866724, -2.115246, -2.4434855, -1.7675318, -2.2506127, -1.8771663, -1.8373984, -1.99535, -2.0801814, -1.7359631, -2.1916656, -1.6493181, -2.2410676, -1.6915656, -2.0914423, -1.6744939, -2.904893, -4.338845, -4.0180583, -1.713513, -2.0375726, -3.845712, -1.8471489, -2.6868517, -5.378029, -5.954161, -2.868096, -3.3108563, -4.0419126, -5.047232, -3.3756578, -2.0724225, -2.0070157, -3.366248, -2.2862413, -7.0287, -2.3656926, -1.8847853, -2.4822066, -2.2740889, -1.8520479, -2.5333264, -3.8444266, -2.0047996, -2.339066, -3.0678396, -6.6533227, -2.544771, -2.0255227, -2.0628326, -2.344547, -3.2596714, -1.5772738, -3.762522, -3.442151, -2.8425343, -2.5368123, -3.4553957, -3.7509146, -1.9215556, -2.4849117, -1.809928, -2.1047919, -2.1177597, -2.006969, -2.1972163, -2.0462108, -1.9388325, -1.9577699, -2.6966898, -2.8698642, -3.760625, -2.2737677, -3.137625, -3.1042125, -2.9655306, -3.3402255, -8.947269, -3.5496058, -2.331477, -7.22113, -2.038032, -2.2908099, -2.40332, -3.0953493, -6.5161424, -2.2471056, -3.0264566, -3.6173818, -2.663741, -3.1969995, -4.6820235, -2.3960974, -3.5762146, -3.4620936, -4.7139273, -3.4655447, -1.925014, -1.8825349, -2.921921, -2.4039183, -2.037784, -3.0472116, -3.1644752, -2.3709059, -5.91918, -3.0437999, -3.6559024, -5.0809813, -3.1907015, -2.965922, -5.205322, -3.1386008, -2.574078, -2.78269, -3.4993951, -2.2372167, -4.0201955, -3.0609505, -2.824737, -1.7775307, -3.563109, -2.7900605, -2.907892, -2.1786776, -2.11636, -3.7923527, -2.48394, -4.18271, -3.610519, -2.114958, -3.14728, -2.2880132, -3.141728, -2.349664, -3.7127583, -3.242941, -2.8023453, -2.5635731, -2.2638948, -2.2723649, -2.7769027, -3.9965684, -1.709681 ], "pointIndex": [ 2, 1247, 256, 927118680, 1728068399, 275525989, 542996925, 1329648133, 746207253, 840245279, 470796809, 736120960, 426255950, 54291877, 546082091, 867037754, 997001643, 1670410354, 157329379, 571876769, 1448766970, 640676627, 312859989, 1820217497, 1073931095, 1711070860, 1409810180, 352270578, 1120091963, 443839731, 1122704792, 393898066, 78365861, 463014431, 1756508935, 609016580, 172879032, 1579063848, 824482771, 1418019519, 1904054526, 983596714, 615713350, 1407659374, 1592542167, 231319847, 5983785, 104215344, 815232617, 1515343063, 1089772401, 274186175, 740797040, 577096301, 1473655022, 1766792412, 1843099405, 1081775419, 1027182103, 377312116, 1860317336, 1114222603, 1314021632, 465250561, 1722105342, 1924589275, 498332310, 1918415625, 1874800468, 1760567206, 1731511184, 596688843, 176007985, 1576630510, 670559844, 1232878898, 1463803296, 1172106116, 854619453, 1599826603, 945325839, 1035374295, 1183946262, 1202664088, 1529404870, 1839767242, 1601917146, 9204005, 1245 ], "storeSequenceIndicesEnabled": false, "size": 256, "capacity": 256, "initialAcceptFraction": 0.125, "timeDecay": 1.0e-4, "sequenceIndexOfMostRecentTimeDecayUpdate": 0, "maxSequenceIndex": 1256, "compressed": true, "randomSeed": 5966322168077801063 }, { "version": "2.0", "weight": [ -1.359602, -1.3747983, -1.3669475, -1.3917516, -1.3749169, -1.3978804, -1.3743601, -1.3946548, -1.4078739, -1.4120302, -1.4068153, -1.5031053, -1.4189385, -1.4294072, -1.3918122, -1.4187685, -1.451527, -1.5439616, -1.572372, -1.5431609, -1.4799433, -1.4809572, -1.5019768, -1.5062917, -1.6155772, -1.4287484, -1.4429781, -1.4321111, -1.4374574, -1.4256124, -1.4440918, -1.6143839, -1.4548193, -2.1818051, -1.521527, -1.7077321, -1.594992, -1.6788688, -2.0228424, -1.5561807, -1.7651178, -1.4828888, -1.6438819, -1.6252949, -1.5230577, -1.905284, -1.8408743, -1.5944843, -1.599917, -1.6622891, -1.6484537, -1.4462303, -1.5112286, -1.6332244, -1.4575502, -1.488177, -1.7010106, -1.6937976, -1.5946316, -1.4753292, -1.438668, -1.6429601, -1.4513603, -2.2772639, -1.7143407, -1.5759331, -1.5740432, -2.8094275, -3.3058069, -2.1396427, -1.5359617, -2.1293366, -2.0036054, -1.7648398, -1.8915709, -1.770045, -1.9245359, -2.1247864, -2.9160671, -1.7070603, -1.9920924, -2.032921, -1.9603047, -1.747028, -1.8338137, -2.3822255, -1.9893866, -1.8081368, -2.1531112, -1.7730501, -2.1450498, -3.132966, -2.2067213, -1.924489, -2.756486, -1.7515236, -1.8227607, -2.4800415, -1.8187356, -2.2551625, -2.1342087, -2.6814182, -2.2624876, -2.3270738, -1.9789789, -2.0078046, -1.5552356, -2.0232923, -1.7029153, -1.4964641, -2.9953322, -1.6763792, -2.9508388, -1.9122832, -2.121463, -1.8967429, -1.9978342, -1.6310147, -1.7970418, -2.0497434, -1.4872304, -1.9258558, -2.6047144, -2.3391123, -1.666762, -1.6153685, -1.4929992, -2.3954306, -2.6757016, -2.0115712, -3.2982168, -1.8071309, -4.732093, -2.86006, -1.6296129, -3.9723382, -3.5085964, -3.8349621, -4.332474, -3.9460185, -2.1973403, -2.2070367, -3.469926, -2.7214763, -2.7626624, -4.706231, -2.5175548, -2.3759713, -5.3709946, -2.9945693, -3.9092703, -2.2447438, -1.8524231, -1.9837755, -3.076053, -4.0829, -4.77054, -4.881027, -4.1488724, -4.4731345, -2.218555, -2.7092788, -2.4048133, -3.8219318, -2.6914885, -2.0651407, -3.2814193, -2.644386, -2.9437237, -1.9948936, -4.206107, -6.2308683, -2.5094018, -2.0590875, -2.1312287, -4.2151265, -2.7633343, -5.1526904, -3.3049357, -2.1771789, -1.9143611, -2.174454, -2.895144, -3.2811656, -3.7764373, -2.2945032, -2.8516362, -2.284171, -2.7553618, -3.522863, -4.0175667, -4.0974483, -2.0300355, -4.1277246, -2.806212, -3.3823714, -3.3424401, -2.6951935, -2.4054852, -3.0757685, -4.821749, -2.8912666, -2.3331127, -3.8103104, -3.4520514, -5.378011, -2.5183861, -3.231196, -2.606206, -2.0731435, -2.005029, -2.679055, -2.581851, -1.9455084, -2.0369332, -4.7684417, -2.5067194, -4.576556, -4.450429, -1.8643699, -2.1515625, -3.862825, -5.5100384, -2.1516352, -2.974032, -4.912022, -3.0503857, -3.2343678, -2.8258865, -2.246921, -5.2116704, -2.021993, -1.9658217, -3.0767105, -2.3124611, -4.3563266, -2.8614416, -2.0766013, -5.007502, -3.0026526, -3.7666762, -3.6385636, -2.8427145, -3.7251058, -3.909793, -3.4142978, -3.6704612, -2.6715941, -3.6530285, -1.9842077, -1.8425122, -4.820701, -1.7397573, -3.8442929 ], "pointIndex": [ 1, 1254, 254, 784888285, 1186575131, 789189176, 1400803504, 1772303693, 308336973, 67293351, 526444841, 1621772241, 1269871206, 899643397, 305167009, 310470336, 1651984956, 165952774, 513691375, 182197367, 1100310439, 978851783, 1191155089, 1861395843, 1034802101, 156803733, 551822515, 317361259, 1519332308, 523016884, 1462094261, 394615233, 1016367154, 1135725509, 3108653, 567819053, 186342505, 1236149782, 1837210046, 1685297421, 1297883652, 862509255, 1489238425, 1111998914, 1221306814, 1889841812, 1290135051, 267762769, 1818043055, 279002659, 25181910, 744215253, 1761708314, 485415160, 241274699, 340750885, 1918191838, 364652689, 755478218, 470482903, 121135392, 402187451, 547412642, 450747522, 1833931018, 493003335, 251741409, 844852725, 18667531, 1218005248, 1711986371, 720129522, 609568344, 1271094102, 1082130952, 680078710, 1337202443, 735316700, 244707662, 1587430410, 1913931677, 1640869653, 990635708, 986766945, 1560781711, 1507851713, 1526411016, 1572475 ], "storeSequenceIndicesEnabled": false, "size": 254, "capacity": 256, "initialAcceptFraction": 0.125, "timeDecay": 1.0e-4, "sequenceIndexOfMostRecentTimeDecayUpdate": 0, "maxSequenceIndex": 1256, "compressed": true, "randomSeed": 5863646346142641006 }, { "version": "2.0", "weight": [ -1.575608, -1.5814409, -1.5781481, -1.6155031, -1.5828708, -1.6040213, -1.5803695, -1.6196128, -1.6891334, -1.5856794, -1.6220452, -1.6704509, -1.6055237, -1.6525494, -1.5969791, -1.6239997, -1.7467704, -1.8449363, -2.0470545, -1.812362, -1.6207516, -1.9919968, -1.6685889, -1.7008271, -1.6975868, -1.6878153, -1.6768947, -1.6593972, -1.7077638, -1.6490749, -1.7063341, -1.7464024, -1.7496744, -1.8403921, -1.794143, -1.863235, -2.5615525, -2.1757193, -2.2156215, -1.9555329, -1.9124904, -1.8627983, -1.6415664, -2.0704143, -2.0065598, -1.7881496, -1.9410346, -1.7241747, -1.9910812, -1.7615238, -2.0226061, -1.7233528, -1.734961, -1.8799304, -2.1976762, -1.8057204, -1.6640658, -1.7348346, -1.7793133, -1.7161245, -1.9093564, -1.7863426, -1.782226, -1.748099, -1.9819493, -1.9970762, -2.3123357, -1.8498224, -2.2264159, -1.8386749, -3.345277, -1.883858, -1.9660522, -2.8395278, -2.9833143, -2.3452234, -2.2418785, -2.795027, -2.6312294, -2.8163066, -1.9591815, -1.9430947, -1.9477563, -1.9072555, -2.464852, -1.7954881, -2.0065253, -2.4018254, -3.7181277, -2.1584997, -2.0945082, -2.143602, -2.129317, -2.2141273, -2.14982, -1.958308, -2.2566347, -2.0064788, -2.3119383, -1.8199244, -1.8838389, -2.1038854, -2.8273778, -2.204648, -1.773783, -2.058429, -1.9341174, -2.0440369, -2.2040834, -2.2547963, -2.5701208, -1.887871, -2.0140364, -2.740925, -2.2461722, -1.9907988, -1.8508942, -2.2053757, -2.3237412, -2.1764266, -1.8121494, -2.2599766, -2.0563395, -2.2131538, -2.101571, -1.8369926, -2.1113522, -1.9830061, -1.8985038, -2.0979133, -5.289009, -2.5313275, -2.0532134, -4.012346, -3.6139667, -2.0709507, -1.9825712, -2.4745681, -2.5805273, -4.426341, -4.355678, -3.5989287, -4.8145404, -2.1951988, -2.3304834, -3.2525547, -4.0202074, -3.2697027, -3.6303856, -4.2800465, -3.1944683, -3.215791, -4.1126847, -2.9608352, -3.155402, -3.1948025, -3.4552639, -3.7967749, -3.6374478, -3.9048827, -3.5179439, -3.2579017, -3.5275407, -2.9210572, -4.9047728, -3.7414958, -2.8654935, -2.240625, -2.3643675, -4.65246, -3.8078144, -1.9313331, -3.3564284, -2.3961694, -3.6561205, -4.623437, -2.4091523, -5.6450777, -5.337534, -2.49797, -2.4037368, -4.982056, -5.2365403, -2.202554, -2.1648428, -2.956364, -3.4817119, -4.1723804, -3.3398435, -3.7754629, -2.468077, -1.9774877, -3.2842422, -5.4654374, -2.7166097, -2.459306, -3.7167258, -3.2403567, -3.3395982, -2.4355524, -2.1046832, -2.7346094, -2.687636, -3.116037, -3.7386253, -4.0494804, -6.3595433, -2.8649182, -2.4392982, -2.4244318, -2.0033848, -3.9102988, -2.9147055, -3.494289, -2.4981205, -4.4003124, -5.03912, -2.496209, -4.6680713, -3.4900355, -2.2696192, -4.592746, -4.233194, -3.0151408, -2.5300114, -3.3627484, -2.2335417, -3.8549244, -3.4596527, -4.547544, -2.9830463, -2.4512615, -6.091157, -2.3038387, -2.8788407, -2.7567303, -4.153861, -3.0705404, -3.3430862, -2.7613983, -4.5446625, -2.7000647, -2.2375746, -2.679622, -5.9046073, -3.7500348, -2.0826974, -3.1326358, -2.3658702, -2.9701922, -2.2291567, -3.1797545, -3.7251885, -4.6901045, -4.6262054, -1.9968588 ], "pointIndex": [ 1, 1251, 256, 1306762992, 565865793, 124121482, 1738965356, 1408181594, 430654305, 1411568429, 1171867843, 1047777375, 1119647973, 266038704, 25368794, 1841871691, 1862650395, 1274069771, 1474173702, 1946760321, 1708540483, 1290361016, 1546358337, 1378278783, 1583166718, 740915715, 1456470874, 313253948, 62598705, 60392692, 229433700, 246820125, 1294601145, 1692135495, 523355825, 798583808, 1317097459, 695367492, 1427432701, 1262025497, 1529849795, 1466036129, 999579821, 1866554081, 1809138432, 910825491, 373589947, 507923371, 1182244497, 1074960353, 1532937894, 1157218619, 1302326523, 320144715, 1668549230, 788611575, 585858314, 362707653, 139653123, 396733880, 1690075672, 466833284, 1858004361, 191645971, 351239354, 502669945, 6692671, 1835161702, 554683535, 592019263, 588578366, 732981881, 689650548, 656897546, 664088272, 713102952, 1081854367, 1528558585, 1324596181, 1648569542, 1612941687, 1351288215, 469215660, 1033732722, 1114450720, 1333201431, 1577051617, 1384545, 1250 ], "storeSequenceIndicesEnabled": false, "size": 256, "capacity": 256, "initialAcceptFraction": 0.125, "timeDecay": 1.0e-4, "sequenceIndexOfMostRecentTimeDecayUpdate": 0, "maxSequenceIndex": 1256, "compressed": true, "randomSeed": -3485342436052657063 }, { "version": "2.0", "weight": [ -1.4646834, -1.4667517, -1.4848248, -1.4955488, -1.4748328, -1.4996586, -1.5102067, -1.5423312, -1.5171639, -1.5108787, -1.5430261, -1.5118963, -1.5083525, -1.5142311, -1.5558296, -1.58652, -1.5521219, -1.5663732, -1.5962416, -1.5707482, -1.5287815, -1.5511978, -1.5490642, -1.8354799, -1.6619667, -1.5551033, -1.5756073, -1.667111, -1.5569456, -1.6726259, -1.564499, -1.6257182, -1.6528468, -1.5773174, -1.6714104, -1.6499722, -1.8766035, -1.6815758, -1.6395549, -1.6178705, -1.6063552, -1.9306438, -1.610218, -1.64699, -1.6621773, -1.8209532, -1.5760742, -1.8630723, -2.0983984, -1.982195, -1.7652756, -1.7825636, -1.6701146, -1.6431956, -1.6910659, -1.7496774, -1.8248948, -1.5788943, -1.7409449, -1.7139764, -1.7687455, -2.3207808, -1.5775722, -2.337894, -1.8376864, -2.0159893, -1.7816584, -2.2645795, -1.8502923, -2.4336076, -1.958431, -1.9566456, -1.6514288, -1.9508808, -2.0869696, -1.8643857, -1.8263228, -1.9006462, -1.9109508, -2.375001, -1.6502724, -2.424987, -1.9207541, -1.9790317, -2.4335063, -1.9445292, -1.767669, -1.7854769, -2.0634897, -2.0707114, -1.7828038, -1.987555, -1.9973936, -1.7249879, -1.617046, -1.9723246, -2.5366223, -2.6620522, -2.2095118, -2.2030852, -3.3440301, -1.9094471, -2.7955794, -1.8991795, -2.0969698, -1.8752227, -1.8043672, -2.1406016, -2.1403084, -2.2700257, -2.9699655, -2.087489, -2.1303475, -1.8860812, -1.9416108, -1.6463115, -2.4058745, -1.9469516, -1.7948481, -1.9236622, -1.968078, -2.482212, -2.043224, -2.6402094, -2.669888, -1.9306325, -1.6355859, -2.4234571, -4.2518926, -2.8369408, -2.070781, -2.1696022, -3.0118892, -2.9100466, -1.9155637, -2.3898082, -3.611016, -2.1233342, -2.417018, -2.6857314, -4.0778794, -2.3300252, -4.301172, -4.639753, -2.4882767, -1.7226529, -4.915581, -2.089176, -2.3308697, -2.1675203, -2.1050093, -5.076467, -2.0216632, -2.3076777, -1.8784783, -4.519786, -2.816605, -6.4273553, -3.5487063, -2.7025511, -2.7042325, -2.0779943, -1.8412688, -2.822589, -3.3284762, -3.7763994, -3.213167, -2.7693353, -1.9806886, -2.5737548, -3.1934195, -2.1217012, -2.1747608, -1.9155222, -2.1172097, -2.39838, -1.9219064, -2.439878, -2.5006132, -5.60645, -2.0933144, -3.2653193, -3.3058648, -3.427139, -3.3744586, -2.867972, -2.6194758, -1.8476988, -3.124068, -2.5218716, -1.6921393, -5.984711, -2.1221485, -2.6376462, -5.501952, -2.9553864, -2.7800412, -4.575756, -2.4023063, -2.88531, -3.1735258, -6.147703, -3.7064834, -2.2638023, -2.342982, -3.5818238, -5.544716, -3.0300126, -5.0124764, -5.1720357, -2.489125, -2.1045215, -2.5063248, -2.5694091, -2.4880934, -4.0698066, -3.3531225, -3.9052632, -3.8701982, -2.6745663, -3.0083475, -4.558422, -3.5705185, -2.1124594, -2.4647415, -3.4744031, -2.2037675, -2.4264262, -5.6101284, -2.4054873, -2.2422447, -4.917252, -1.9251585, -2.590822, -2.6595664, -2.2246978, -2.3974667, -2.8268957, -2.4082587, -1.9532785, -4.3572836, -7.100543, -1.9996116, -2.8446536, -3.6927261, -3.9367738, -2.9279373, -3.4739842, -4.2427716, -4.3492055, -3.573538, -3.8667417, -2.2903125, -4.8911166, -3.1270065 ], "pointIndex": [ 11, 1255, 255, 1125095316, 1225162176, 266281107, 145079851, 1823422636, 1444177912, 1468908580, 746670828, 1326526904, 1552504204, 1641656912, 1809083391, 42269167, 156643563, 500660808, 1613598470, 514128595, 1735397476, 943131624, 810301342, 1890323476, 1737317963, 1744212142, 1664960398, 1836727015, 827400922, 340694445, 1681448655, 997949940, 390304714, 1183284360, 1616489069, 462266295, 508799902, 930032643, 921531117, 1011764571, 718598253, 704388491, 1570811030, 972584919, 1400711983, 713078717, 789564898, 1610032627, 246278113, 1487608946, 1729543265, 130011520, 922436406, 1608818438, 1548858618, 1239620460, 322350255, 1023052825, 14181121, 349967450, 361023885, 369940490, 1467829099, 1132872206, 1336230914, 621519519, 449632149, 1814336297, 1208394719, 1073046822, 498435614, 658340617, 1352005, 1664189276, 1404052473, 1826399365, 616785564, 1837282565, 769356216, 970320150, 1367241621, 1334791867, 1112420348, 847842300, 995865010, 1056532534, 1374257984, 1928407706 ], "storeSequenceIndicesEnabled": false, "size": 255, "capacity": 256, "initialAcceptFraction": 0.125, "timeDecay": 1.0e-4, "sequenceIndexOfMostRecentTimeDecayUpdate": 0, "maxSequenceIndex": 1256, "compressed": true, "randomSeed": -566338866570349155 }, { "version": "2.0", "weight": [ -1.6110169, -1.6257101, -1.6132237, -1.6336024, -1.6341721, -1.6298529, -1.632508, -1.6436764, -1.6744068, -1.6673356, -1.6571995, -1.662185, -1.6644176, -1.7309585, -1.6500595, -1.670506, -1.802056, -1.7575324, -1.80587, -1.7163657, -1.7433038, -1.674397, -1.9227827, -1.8037908, -1.8172027, -1.6667875, -1.7015543, -1.8367963, -1.7550453, -1.6542269, -1.697557, -1.7011623, -1.9053563, -1.8065615, -1.9608865, -1.789415, -2.0639627, -2.0471902, -2.0799065, -1.8248667, -1.9222915, -1.8206872, -1.8429751, -1.7309147, -1.6954039, -2.3076153, -1.9629672, -2.556063, -1.9714468, -2.0777094, -1.9243582, -1.9282019, -1.7226651, -1.7366803, -1.7797271, -1.8666673, -1.8559352, -2.0115576, -2.0343313, -2.3465438, -1.7615066, -1.7925524, -1.7505562, -1.8233827, -1.7639633, -2.5499158, -2.0778117, -2.393876, -2.1003664, -2.4747236, -2.0314233, -2.6079473, -2.0488465, -2.0726097, -2.420869, -2.1173067, -3.612475, -2.2708921, -2.2564926, -2.619866, -2.0709743, -2.1717794, -2.234867, -3.5616586, -1.8582594, -2.2900496, -2.5066276, -1.7869142, -2.2555428, -1.739632, -1.7395467, -2.7097666, -2.593255, -2.9155746, -2.1162503, -2.8907096, -3.022455, -2.0814097, -1.9743068, -2.6041746, -2.7876935, -2.1046832, -2.2939086, -1.9349879, -1.9833627, -2.1678498, -2.122495, -1.9412091, -1.8106226, -1.8935112, -2.7455416, -2.1053557, -2.0693269, -1.9052274, -1.8595452, -3.2098026, -2.1161914, -2.6492712, -2.1443713, -2.5484862, -2.5748754, -1.8049053, -1.8047763, -2.359784, -2.242467, -2.145636, -1.7720666, -1.8494686, -2.4786148, -3.2393236, -2.545857, -2.5782166, -3.0330493, -3.2381384, -2.7825084, -4.427443, -2.4144044, -2.4751902, -2.1578116, -2.694748, -4.1466045, -3.1840563, -2.1466255, -2.6621218, -3.1598535, -2.0791852, -2.5672572, -2.3185058, -2.7774062, -4.564393, -2.682265, -2.536275, -5.773803, -3.7649782, -3.791073, -2.53297, -2.7084506, -3.979404, -2.3734815, -2.8669748, -2.7112288, -2.3446472, -2.3289793, -2.5032165, -3.599362, -2.8568487, -2.863185, -4.8855476, -8.4651, -2.6190147, -3.374161, -3.6828594, -2.9956791, -2.5724895, -3.271289, -2.27042, -3.229629, -2.7546244, -3.3204, -1.8723733, -2.225646, -6.912936, -3.2054763, -4.020286, -8.263332, -3.6173582, -2.6950696, -4.516153, -4.0550213, -4.3354163, -2.9266644, -3.224055, -4.048556, -4.0799303, -3.4536102, -2.6236393, -2.9264743, -4.9663267, -2.129841, -2.8336856, -3.5423813, -3.6727676, -3.2670007, -2.616068, -3.2305954, -3.4472659, -3.2471404, -2.6500194, -2.8602796, -1.9934101, -3.1204846, -2.2264602, -2.9697616, -6.267233, -3.3636794, -7.565011, -3.5965343, -1.9816792, -2.0770934, -1.9365543, -2.0132627, -2.8048935, -4.533492, -2.4005785, -5.5340495, -2.0961595, -2.2101908, -2.0628667, -2.1616464, -2.7200656, -2.3370745, -4.169037, -6.5144353, -2.5519133, -5.150039, -3.290528, -4.880377, -2.9813533, -3.8787777, -6.4337726, -2.9560385, -3.278851, -3.3013442, -3.0591831, -2.538268, -1.9257783, -2.6350656, -2.376288, -4.180156, -2.671247, -6.815842, -3.3597534, -2.939458, -4.6065555, -2.9247332, -1.9990978 ], "pointIndex": [ 6, 1255, 256, 856366176, 1331580477, 121162326, 1861397757, 1784140675, 722625927, 369512698, 999326733, 631722989, 1147316518, 1889250899, 676780164, 948684465, 823038541, 58269054, 495469040, 867805346, 849223592, 821504320, 558589563, 1557329491, 832437078, 29889774, 1526663079, 1698982164, 464463946, 1587517277, 69230377, 1550349704, 884708891, 1714424156, 1320667169, 158292080, 579023462, 611679432, 1030184143, 211940121, 795876162, 1703808486, 1738281610, 1786066150, 1465617222, 232889955, 23590000, 1347610470, 1502168760, 389273338, 548657299, 112569024, 1150635185, 749910194, 10760582, 1374598658, 928145740, 364345111, 534775007, 1345172731, 435641728, 1850689153, 1457779896, 577917354, 458279036, 520015476, 1256635884, 724898515, 1907397043, 548371635, 1238248680, 1598492494, 32791065, 639123069, 634188682, 1881397161, 674880170, 1385660437, 779881167, 1149958022, 864778067, 1885143112, 1006943369, 1209156139, 1638461945, 1223199723, 1902694839, 1917072287, 1249 ], "storeSequenceIndicesEnabled": false, "size": 256, "capacity": 256, "initialAcceptFraction": 0.125, "timeDecay": 1.0e-4, "sequenceIndexOfMostRecentTimeDecayUpdate": 0, "maxSequenceIndex": 1256, "compressed": true, "randomSeed": 4189210767075612828 }, { "version": "2.0", "weight": [ -1.5809543, -1.6052395, -1.5824018, -1.6341741, -1.6220462, -1.6090232, -1.587091, -1.672407, -1.7943244, -1.6540173, -1.6431609, -1.7253053, -1.656684, -1.7000749, -1.5897003, -1.7035328, -1.7050048, -1.7974013, -1.8766737, -1.7098727, -1.8727963, -1.710227, -1.6779032, -1.7963215, -1.7875885, -1.6611732, -1.6593343, -1.8127413, -1.8638108, -1.6368163, -1.5975319, -1.7131653, -1.7733179, -1.754794, -1.7803135, -1.8625493, -1.8076078, -2.101797, -1.9411423, -1.9826176, -1.7513057, -1.915989, -2.0829697, -1.7271876, -2.0167289, -1.9224572, -2.0267813, -1.8872782, -1.9540212, -1.8734661, -1.8287128, -1.8533505, -1.6984493, -1.7122878, -1.767857, -1.833617, -1.8400757, -1.9171269, -1.8674517, -1.67116, -1.650148, -2.213368, -1.6337502, -1.9484588, -2.0833864, -1.794819, -1.8741286, -1.7609497, -1.8035247, -2.120493, -1.8810593, -2.0289762, -2.8589911, -2.7678647, -1.8345987, -2.4043863, -2.262942, -1.956295, -1.9800524, -2.6081913, -2.3866434, -2.3147933, -1.8962301, -2.3161876, -2.0217319, -2.3371081, -2.0991838, -2.1103528, -2.0742226, -2.9598522, -2.7799296, -1.9263036, -2.0695686, -2.340692, -3.773643, -2.1007228, -2.529532, -2.0259535, -2.5129123, -2.2907164, -1.8977658, -1.9150738, -1.8403314, -2.215647, -2.2819843, -1.8791007, -2.59138, -1.7411674, -2.092544, -2.0886123, -2.1413665, -2.1140273, -1.920856, -1.8703722, -2.0212836, -2.1943898, -2.301725, -2.5547743, -2.0424213, -2.4508665, -2.4707499, -1.8075922, -1.8725858, -3.5640264, -2.6105704, -2.165559, -2.1232579, -2.6026196, -3.8884327, -2.1737967, -2.728757, -2.7798426, -2.0043423, -2.439043, -2.4831007, -1.8531009, -2.0460627, -2.9669995, -3.371271, -2.7603664, -5.145329, -3.5285287, -1.9487286, -2.1082284, -2.2038436, -4.115193, -5.2521424, -3.1030037, -3.3301845, -2.8608727, -2.355765, -2.9226215, -5.292759, -2.8541307, -5.8843527, -2.9329383, -4.2045536, -2.4997535, -2.1682842, -3.929541, -2.8143623, -3.2451994, -4.985799, -2.5752323, -5.0215697, -3.2431254, -2.9068696, -2.3326433, -5.0619807, -4.032271, -2.251037, -2.4568508, -2.573857, -3.296703, -3.1517873, -2.388365, -3.1821537, -2.3441288, -3.32923, -3.3475256, -5.413077, -4.935657, -3.4767509, -3.1256387, -2.2770538, -2.696921, -4.8854313, -3.588679, -7.3792324, -3.8347638, -4.33273, -3.9180882, -2.7039533, -2.640478, -3.0467978, -2.8800092, -3.728069, -2.8766658, -3.2154396, -3.0740054, -2.8467777, -3.4180677, -2.7143333, -2.076263, -2.0485897, -5.0210037, -2.7091832, -2.9298787, -2.4252849, -3.3718836, -2.4471207, -3.6353476, -2.2861705, -2.7411432, -5.5288014, -1.7537444, -3.9634967, -2.5614748, -4.5685825, -2.5693524, -2.8589904, -4.052606, -3.0085058, -8.247205, -3.4645865, -2.7214427, -2.5838864, -4.3286037, -2.4010165, -3.414822, -2.885385, -2.4666367, -4.323651, -3.8383358, -3.139137, -3.4275022, -3.237697, -3.1840107, -2.252056, -3.050251, -3.1270928, -2.7886403, -3.3036432, -3.7236898, -4.4391513, -3.3557675, -2.2811415, -4.0825143, -3.5760353, -3.5455575, -2.8113878, -3.084719, -5.0754757, -6.223174, -2.2824337 ], "pointIndex": [ 1, 1255, 255, 1017284302, 1089734496, 10949292, 1652093439, 1596861574, 1262420369, 30885259, 1899089182, 702589526, 226343027, 650443794, 938940964, 204420704, 449388811, 684278980, 484967400, 1865413300, 624197316, 792817202, 1057627947, 1911730982, 49351379, 269342876, 1366723898, 465991636, 317674381, 568846759, 474593987, 25762502, 397721334, 876847266, 945371139, 786347852, 1099848013, 1463711320, 1779232933, 1218049435, 1038543087, 1886678781, 1338489441, 1355967911, 191822678, 73117530, 1172672466, 1929280355, 265143882, 276538306, 286271887, 508121392, 1622063844, 952218103, 130496378, 500479695, 333865593, 467046039, 1913019693, 1509216529, 384146715, 1617139672, 1314713586, 1846961643, 962770663, 1626111478, 456196157, 1804321800, 518594326, 547655169, 361125140, 92283015, 1293741157, 1103822982, 1531462748, 741344085, 721349132, 1695309884, 772484344, 435411073, 1857039100, 915276005, 979134019, 1420299320, 1245253122, 1506772618, 105372024, 1976398838 ], "storeSequenceIndicesEnabled": false, "size": 255, "capacity": 256, "initialAcceptFraction": 0.125, "timeDecay": 1.0e-4, "sequenceIndexOfMostRecentTimeDecayUpdate": 0, "maxSequenceIndex": 1256, "compressed": true, "randomSeed": 5716410955948198572 }, { "version": "2.0", "weight": [ -1.4723679, -1.4748684, -1.4796734, -1.4989817, -1.4847839, -1.5271605, -1.4858755, -1.6206623, -1.5259806, -1.5336944, -1.5135266, -1.5312008, -1.544349, -1.4907415, -1.5200644, -1.8607095, -1.71595, -1.6295044, -1.6614683, -1.5787373, -1.5668296, -1.6186606, -1.7220145, -1.6395398, -1.637389, -1.5587585, -1.6250982, -1.574669, -1.5053121, -1.5367, -1.6281161, -1.9685827, -2.0332274, -1.8441141, -1.8605316, -1.6806389, -2.0616343, -1.7017778, -2.018361, -1.6003023, -1.7140663, -1.5801271, -1.5731896, -1.6345347, -2.0808349, -1.9523935, -1.7433275, -1.9722502, -1.6819129, -1.7351564, -1.6872911, -1.6488663, -1.6682271, -1.6863096, -1.7568988, -1.6824553, -1.9729172, -1.5136033, -1.5075728, -1.9928776, -1.7682136, -1.9389695, -1.6388328, -2.048581, -2.7856648, -2.678215, -2.0568538, -2.279208, -2.3106277, -2.098067, -2.046037, -2.4830816, -2.1151178, -2.151959, -2.2791963, -1.7717863, -2.2011366, -2.4435546, -2.215945, -1.8173331, -1.6686308, -1.7595752, -1.8025055, -1.6080472, -1.6296883, -1.7254086, -3.258416, -2.5550792, -1.8049688, -2.0818071, -3.0147269, -2.116284, -2.5157568, -2.0794017, -1.9321847, -2.090745, -2.0223753, -1.7609588, -1.833841, -3.121823, -2.0643542, -2.269138, -2.14882, -2.6094937, -2.3333528, -2.1854448, -1.7575346, -1.717381, -1.8458064, -1.797531, -1.922467, -2.4076557, -2.198741, -2.005758, -2.3674817, -1.5723048, -2.205375, -1.9498025, -1.6438376, -2.7989624, -2.2850306, -2.0528595, -1.8120686, -2.024037, -1.9523389, -2.3633564, -2.2165782, -5.296845, -2.6003857, -3.3466606, -3.048333, -2.975929, -4.850967, -3.008884, -2.6241615, -3.4881067, -7.5118446, -3.2324533, -2.4897316, -2.1628304, -3.6258216, -3.848587, -3.0612652, -2.6791778, -3.2420094, -2.194795, -2.1248574, -2.9027042, -2.3620207, -2.8662558, -2.6906807, -1.7725453, -2.0574784, -4.02859, -3.6893065, -3.6238759, -2.5562239, -3.8399627, -3.0008607, -4.83231, -2.5115073, -5.7743516, -2.8788157, -2.198657, -2.6013656, -1.9853501, -4.5019355, -2.4918034, -6.2223206, -2.4242911, -1.8496494, -3.8475597, -4.650009, -3.535911, -4.1198554, -2.7007039, -2.8500903, -2.1353986, -3.5506113, -2.997891, -4.204195, -4.4949207, -3.9670541, -2.1987236, -4.757135, -5.226631, -2.7338564, -3.3281708, -4.295948, -2.6056557, -2.1256652, -3.6111758, -2.6671848, -3.766492, -2.9153528, -4.150468, -4.9099946, -2.6949108, -1.8693603, -4.0355754, -4.0624247, -2.5225918, -2.5343404, -2.8199022, -3.2567928, -2.29005, -2.2990692, -3.128523, -3.4083765, -4.047287, -2.9685643, -2.8527641, -2.6012478, -4.909524, -2.082991, -3.2168367, -2.2418272, -1.862048, -2.1094995, -2.2545705, -3.5991924, -2.4222345, -3.9604158, -2.5520163, -3.1371665, -3.4637997, -2.9052608, -2.9302106, -3.5320182, -3.6258898, -2.5361264, -4.311318, -1.7770904, -2.2072034, -2.2768364, -3.1182168, -2.3346496, -2.716515, -2.167842, -2.8909123, -3.067276, -5.121871, -2.5801742, -2.2827775, -2.8184876, -2.1159203, -2.0943155, -2.2802548, -3.1016576, -2.298147, -5.552916, -3.8240209, -3.769819, -4.703353, -4.1772947 ], "pointIndex": [ 2, 1251, 255, 1580393585, 937796393, 369078070, 1088167617, 1820918241, 107317162, 702518978, 180405041, 1542201070, 1152682873, 525044586, 190877682, 1447823620, 389110928, 169082333, 225169030, 76478458, 673272180, 1582572407, 1170513083, 1761994507, 1762524214, 860487169, 1138576973, 989335400, 1211982194, 374589419, 866698654, 1165170093, 83589305, 1044900109, 1061977604, 366177616, 1673983651, 649306908, 82352927, 719766844, 788108580, 909109540, 1536814447, 1113609650, 1595319572, 1819558734, 748175170, 570534497, 291551019, 1665537188, 53056636, 118843013, 1841587709, 509988965, 1681295645, 1837604773, 727677842, 28256415, 1720623001, 554211226, 148756275, 822589756, 419589759, 1527317775, 161592381, 1866867503, 1169484848, 967047195, 539531095, 574220620, 1360574594, 1325502980, 199192459, 1139894476, 1418390616, 686476847, 214632009, 1699060011, 457644879, 830359452, 1326960, 1094603602, 1163385703, 1692138214, 1252348902, 1298375863, 1502677091, 1952872299 ], "storeSequenceIndicesEnabled": false, "size": 255, "capacity": 256, "initialAcceptFraction": 0.125, "timeDecay": 1.0e-4, "sequenceIndexOfMostRecentTimeDecayUpdate": 0, "maxSequenceIndex": 1256, "compressed": true, "randomSeed": -5848974963479365812 }, { "version": "2.0", "weight": [ -1.585127, -1.5865705, -1.5962614, -1.6085825, -1.596154, -1.630115, -1.6023626, -1.6131486, -1.6124258, -1.6522865, -1.6071877, -1.7168533, -1.6414491, -1.6560875, -1.6027256, -1.7860086, -1.6391898, -1.7215892, -1.6661743, -1.7551733, -1.6553258, -1.8516773, -1.7214888, -1.797124, -1.8066955, -1.6430796, -1.6840556, -1.821842, -1.715812, -1.7092791, -1.6264325, -1.8273116, -1.8516202, -1.8577257, -1.8426911, -1.8244375, -1.8282402, -1.7095118, -1.8318115, -1.9583569, -1.9977958, -1.85578, -1.6765971, -2.2481804, -2.2947147, -1.9133995, -1.8031982, -2.179512, -2.439674, -1.8818381, -1.8582158, -1.9036092, -1.7120684, -1.8141488, -1.7251884, -2.0264452, -1.8911572, -1.8964896, -2.2973378, -2.332079, -1.8439084, -1.7138196, -1.7435124, -1.8923931, -2.0120213, -2.3480647, -2.4271514, -2.6368625, -2.3307495, -1.9175985, -2.4014747, -1.911802, -1.8705333, -2.248779, -1.97523, -1.9332904, -2.081916, -2.0845778, -1.8409702, -3.1433861, -2.1671054, -2.2489593, -2.0810833, -1.9405694, -1.9257721, -1.6870952, -1.7625767, -2.321876, -2.5269024, -2.659979, -2.3002388, -2.2201302, -2.3069, -2.1379435, -3.4479458, -2.259122, -2.186968, -2.7688255, -2.7101648, -1.8897277, -2.687137, -2.4541807, -2.3081462, -2.0229635, -2.012898, -1.8474618, -2.2427373, -1.9241083, -2.318026, -2.2848606, -1.7845504, -2.4813504, -2.520892, -2.1248918, -1.9119974, -1.9928011, -3.4082627, -2.4585147, -2.3150163, -2.4207702, -2.5795302, -2.2035196, -2.4063442, -1.8016686, -2.0338738, -2.1928742, -1.7814916, -2.5912824, -3.2466595, -2.373099, -2.3038535, -3.493652, -3.802891, -2.490586, -2.7070038, -2.9038296, -3.8930063, -2.906122, -5.50004, -2.2162237, -1.9646659, -2.7175615, -3.1687071, -2.3840399, -2.0239818, -1.9653404, -6.275639, -4.7269425, -2.6616986, -2.9380362, -3.3301127, -2.207981, -2.511488, -2.1947012, -3.2296078, -2.3584638, -2.737618, -3.1801414, -4.861876, -3.4092803, -5.0118575, -2.5117936, -3.616494, -3.2554538, -3.9249454, -2.7289634, -3.2955859, -5.0465126, -5.5747933, -4.9433146, -2.879198, -2.9027388, -1.7449051, -2.3635547, -2.967493, -4.3145137, -2.5878572, -2.690465, -3.0125632, -3.3281112, -3.3097851, -2.305855, -3.4226742, -3.9484427, -4.643662, -2.438772, -4.3584895, -3.1132748, -5.7082057, -3.675992, -3.7442765, -3.782986, -2.5213556, -4.175735, -2.4869661, -3.764512, -3.3696184, -3.76912, -2.955294, -2.455391, -3.1660938, -3.0430512, -2.9759614, -2.8468833, -2.6680672, -2.6251414, -3.0337079, -2.1241593, -2.333803, -2.6122713, -2.257843, -2.6162577, -2.5634978, -2.5290399, -2.7698011, -4.878759, -2.4674652, -4.0861626, -2.8145604, -2.60121, -3.1464317, -2.9476178, -2.1492608, -3.8819375, -3.5344517, -3.1717658, -6.760232, -2.2543252, -2.871668, -2.0001733, -2.7306046, -2.9972532, -2.0358295, -3.7240984, -3.764603, -4.331714, -3.5213747, -2.6330638, -2.3694458, -2.447882, -2.9419396, -4.247825, -2.8564208, -3.6029963, -2.990521, -3.9543157, -2.5195994, -2.9512708, -1.9221497, -2.3364508, -2.380883, -2.5922043, -2.7262871, -2.2678275 ], "pointIndex": [ 3, 1256, 254, 1198457468, 1360952450, 26435319, 922891573, 1706818842, 291132708, 351232349, 1635555717, 1039896802, 1655975837, 1270526413, 284925168, 119876470, 377448719, 422047276, 689131536, 1610442304, 764310952, 1031548427, 999931524, 1834911269, 608116459, 65495470, 1912444118, 669922830, 1541005390, 1176102810, 1607813297, 447779532, 1448688105, 826406687, 1845115835, 1829745202, 1675928325, 1163469776, 783631286, 1021157742, 838796421, 1029355220, 1576427283, 1479123821, 1553168870, 1255746814, 1802114069, 60950518, 161781672, 281234833, 1533432341, 1634075043, 1005880675, 1354111505, 1399435003, 1882301970, 334464726, 1125525131, 27011306, 658430381, 1673032764, 693793304, 833452546, 424407824, 165459134, 621642345, 1649361131, 216798098, 836256009, 1440847747, 555067145, 14824669, 1565147410, 1091818195, 672786451, 1580259905, 814844409, 5187055, 1264954531, 1034275911, 248635736, 1346824182, 1293371189, 1559256902, 1343891668, 1543671026, 1653822480, 1572339 ], "storeSequenceIndicesEnabled": false, "size": 254, "capacity": 256, "initialAcceptFraction": 0.125, "timeDecay": 1.0e-4, "sequenceIndexOfMostRecentTimeDecayUpdate": 0, "maxSequenceIndex": 1256, "compressed": true, "randomSeed": -7786205468076532075 }, { "version": "2.0", "weight": [ -1.4614998, -1.4620378, -1.4752388, -1.4637798, -1.4655621, -1.4821007, -1.4969317, -1.4724, -1.4756373, -1.4745526, -1.5583972, -1.4842486, -1.5277389, -1.5109748, -1.5362148, -1.5139849, -1.6300763, -1.5247805, -1.5487496, -1.5125206, -1.6450458, -1.7908546, -1.5639207, -1.6074495, -1.5013287, -1.6458435, -1.5291392, -1.5445955, -1.6785212, -1.7640712, -1.5476627, -1.5836003, -1.5833039, -1.6434343, -2.0564253, -1.5250986, -1.5665632, -1.6909691, -1.5759987, -1.7525314, -1.5801365, -1.9565464, -1.7089354, -1.8142347, -1.9809933, -1.5648323, -1.5719103, -1.6796517, -1.616994, -1.9254856, -1.58162, -2.0042083, -1.918308, -1.7683012, -1.667526, -1.5528598, -1.7119304, -1.7606535, -1.7034885, -1.8455615, -2.1602297, -1.7621607, -1.6108712, -1.6713388, -1.9926528, -1.9681088, -1.595653, -2.058484, -1.7006544, -2.3276198, -2.0781496, -2.2205381, -1.5307153, -1.6730161, -1.6707381, -2.025199, -2.0504923, -1.7690312, -1.6877911, -1.9043152, -2.062953, -1.6100355, -1.7021533, -2.6426606, -2.976421, -2.3672402, -1.8924923, -1.9037335, -2.3610914, -2.0577476, -2.0118337, -1.6866783, -2.6741467, -1.6573713, -1.8338802, -3.272017, -1.6896793, -1.8266575, -1.6926943, -2.1101823, -2.249881, -2.7457533, -1.9911, -2.1694999, -2.8206563, -1.9598428, -1.9498309, -1.8770298, -2.8078392, -1.747417, -2.0108464, -1.9295949, -1.7438056, -2.2001588, -2.4090858, -1.9628894, -3.2266276, -2.2227662, -1.9527277, -2.3317513, -3.043289, -2.3646955, -2.2974114, -2.3026936, -2.0654562, -2.101165, -2.0241485, -3.2078626, -2.1115484, -3.375203, -3.4619694, -3.1447875, -3.0205579, -2.9116719, -3.0496647, -5.631469, -2.851554, -1.872976, -3.534869, -2.4107833, -2.4627678, -3.9677198, -2.5221946, -4.2509003, -4.347851, -1.7428657, -2.2097461, -3.1804452, -1.7241619, -2.1284466, -2.7373052, -6.491934, -5.604398, -2.7174814, -2.0809023, -2.070087, -3.1101959, -2.0747929, -1.7276424, -2.1270373, -2.531271, -2.9381006, -2.3071568, -3.4840255, -3.1525218, -2.1313589, -1.7235185, -4.1241984, -4.0011544, -4.690316, -3.1714647, -4.109093, -3.5499568, -3.7116437, -2.3376155, -2.4696362, -2.3397548, -3.4042199, -4.819347, -2.3679986, -4.512915, -2.5042548, -3.8902445, -2.830531, -1.718399, -6.8237643, -2.9122827, -2.0612462, -4.492936, -2.6069682, -2.9106145, -5.3700852, -4.678593, -1.8033797, -2.726209, -2.9032097, -2.6872823, -2.6334465, -2.3258445, -3.0594003, -2.6481984, -3.4110737, -2.656895, -4.843449, -2.7703316, -3.7980182, -2.426165, -4.9782662, -2.9232721, -5.033615, -3.3354278, -2.5321763, -2.607751, -2.2415302, -2.4685838, -3.2702944, -3.4449472, -5.0143695, -3.24149, -2.8240068, -2.4171066, -3.502546, -2.3196597, -5.5846643, -5.161543, -1.9018593, -3.8895326, -3.0670464, -2.640248, -3.7918057, -4.233302, -4.47031, -2.205188, -3.6447008, -4.1468525, -3.8840435, -3.281042, -2.0309126, -2.9352825, -2.4804878, -6.0481863, -3.061815, -7.0423317, -3.2203004, -3.7399385, -5.456574, -2.5922499, -2.6433997, -3.053929, -2.068918, -2.4161696, -2.7882383, -3.3886878, -3.43396, -3.1441133, -3.9203095 ], "pointIndex": [ 0, 1226, 256, 849056237, 1330298459, 142932, 101177453, 916069392, 1286682669, 202402972, 950065220, 823981583, 900478237, 252922177, 317882587, 379601170, 1350790257, 1414449496, 675557575, 514428925, 629544045, 937023410, 993595804, 1643487381, 1162308875, 262947398, 1078715087, 716065612, 308881963, 1458484511, 31188202, 363072657, 395901610, 1628006938, 1133723048, 504229182, 1570891080, 833597151, 758041359, 1774356767, 1606186339, 818151225, 1802949039, 1044115799, 1482425745, 1123123331, 1421308938, 254357493, 112360527, 1735001320, 26132880, 287318462, 1675444151, 299646686, 1391296817, 378142025, 1386032200, 546779461, 343148943, 1475705046, 1842922609, 370456911, 1559704248, 71726850, 86227771, 782278457, 3370593, 1088871044, 369336061, 1304912692, 1540853432, 19260151, 559985974, 810439446, 940631817, 881244164, 713562624, 978060543, 724323672, 1191640444, 1110303134, 827206577, 1679472034, 945460625, 519113940, 1014641438, 1361991718, 1723655006, 1226 ], "storeSequenceIndicesEnabled": false, "size": 256, "capacity": 256, "initialAcceptFraction": 0.125, "timeDecay": 1.0e-4, "sequenceIndexOfMostRecentTimeDecayUpdate": 0, "maxSequenceIndex": 1256, "compressed": true, "randomSeed": -6279845217872163458 }, { "version": "2.0", "weight": [ -1.5291942, -1.5421118, -1.5291986, -1.5688084, -1.5456706, -1.5932994, -1.5844495, -1.6483736, -1.5697545, -1.602868, -1.5526233, -1.5970722, -1.6185194, -1.5882381, -1.6166805, -1.7459667, -1.6640987, -1.5835897, -1.6019938, -2.0524082, -1.6345209, -1.679469, -1.5700582, -1.6075442, -1.6975076, -1.643985, -1.6761684, -1.6274849, -1.6280085, -1.7651222, -1.6474775, -1.7666135, -1.915021, -1.6711018, -1.9053582, -1.6919777, -1.5960433, -1.6567732, -1.7585815, -2.2147882, -2.2913113, -1.6530101, -1.761255, -1.7261058, -1.7055616, -1.597077, -2.0509222, -1.6162806, -1.957403, -1.8172238, -1.7253511, -1.7148412, -1.661545, -1.7858291, -1.7208059, -1.8286492, -1.8421198, -1.7606053, -1.6374458, -1.9475904, -1.8031894, -1.7179695, -1.653238, -2.505366, -1.8491501, -1.93492, -2.1802382, -1.7455585, -2.622658, -1.9209028, -1.9228863, -2.0540936, -1.7093084, -2.35584, -1.6626124, -1.7910569, -1.6780435, -2.0860777, -1.9547757, -2.6014528, -2.4743774, -2.6695936, -3.5200083, -2.4638808, -3.6596913, -1.772456, -2.8461657, -2.3185823, -2.1135888, -1.922694, -1.7556864, -1.7284646, -2.1148572, -2.646042, -2.5979016, -2.307461, -2.490812, -2.1498966, -2.2652745, -1.9508317, -3.3524008, -2.6338513, -1.8379326, -2.0284708, -1.9257252, -1.780004, -2.5826719, -2.2029107, -2.1302207, -1.886495, -1.8473617, -1.9395412, -1.908353, -2.0144832, -2.8429317, -2.0034041, -3.0488722, -2.0849218, -1.97875, -2.5612664, -2.8554602, -1.9041004, -2.3833334, -1.9720411, -2.2629402, -2.0808895, -1.6719692, -2.763051, -2.5273015, -1.9659427, -4.1709867, -3.3429592, -2.7491894, -2.3433127, -3.0188322, -5.337598, -2.0138423, -3.548501, -3.0431871, -3.450968, -2.0977263, -3.5403953, -5.311833, -2.9877274, -2.6960602, -2.1924443, -2.0940046, -3.608719, -3.313874, -1.9078962, -1.7662423, -2.491588, -2.115966, -3.0886564, -3.761888, -3.0473785, -2.3578377, -3.1963868, -2.0134742, -3.3740778, -3.6406064, -3.475895, -2.6934884, -3.090138, -2.8647952, -4.240299, -5.058313, -3.3151815, -2.7376516, -4.3686676, -4.85089, -1.941006, -3.5042632, -2.961024, -3.1213286, -2.3416991, -2.4683144, -3.9237976, -2.263143, -2.2315419, -3.6002877, -4.234399, -2.9994457, -1.8865396, -5.071279, -3.388649, -3.2096522, -3.0233998, -3.828761, -4.304722, -4.7664814, -4.2962723, -3.6441188, -3.5908008, -2.7482326, -2.2110183, -2.3329499, -2.7433815, -2.954774, -2.034433, -4.5096397, -3.4059017, -3.5646608, -3.219465, -2.679943, -2.9957838, -6.4067445, -3.1729321, -2.4494479, -2.172322, -2.711321, -4.449049, -3.6060262, -5.8164296, -2.6889763, -2.3064306, -5.6516323, -4.252806, -2.296698, -2.504121, -2.5867362, -2.494824, -2.026782, -4.488038, -2.5933194, -2.6822002, -2.3643074, -2.945674, -2.6898968, -3.0333946, -3.0024295, -2.045695, -2.069347, -3.964504, -6.586258, -4.176414, -3.3635936, -2.273528, -2.857833, -3.2752182, -3.1722167, -2.9160614, -3.245185, -5.39917, -2.0929382, -2.39346, -3.625814, -4.11937, -2.0917597, -2.3497598, -2.4011214, -3.5981495, -2.1429238, -1.8076006 ], "pointIndex": [ 0, 1247, 254, 1207393395, 1282199790, 1517355764, 876092348, 1851235249, 1031800199, 382474110, 1568060881, 1438044522, 980294924, 1319389343, 300434136, 530712929, 1481478031, 413712687, 473858392, 544332911, 40496455, 750176439, 944546922, 1842198435, 264523950, 1185384991, 232310, 1422329646, 328917204, 1779388631, 674935981, 1746595928, 1637280667, 1198686133, 1793063872, 1330240837, 1433095016, 1837934942, 760884769, 690073014, 785842974, 1094420146, 956486752, 1191038798, 1807988695, 141741757, 1238555458, 355134539, 402731252, 1937625075, 777053484, 948757244, 1053514550, 155850445, 1903432337, 1606054283, 1619661043, 1739808340, 888819597, 1528127005, 1644004700, 971895458, 46555885, 1170026704, 443882870, 556088262, 1784744312, 1547430962, 492864216, 1693527228, 531323225, 547909999, 1213620485, 1055342901, 1667520910, 835400368, 1505096003, 710755318, 734421719, 887583508, 1880797967, 1782520631, 921168046, 1628462655, 1381801248, 1642730788, 1806492239, 1533567 ], "storeSequenceIndicesEnabled": false, "size": 254, "capacity": 256, "initialAcceptFraction": 0.125, "timeDecay": 1.0e-4, "sequenceIndexOfMostRecentTimeDecayUpdate": 0, "maxSequenceIndex": 1256, "compressed": true, "randomSeed": -6736865570805532185 }, { "version": "2.0", "weight": [ -1.6270272, -1.6364937, -1.6316625, -1.6581007, -1.657373, -1.6732012, -1.6403781, -1.666901, -1.716661, -1.7204353, -1.6693875, -1.6810037, -1.6786739, -1.6509911, -1.6405945, -1.6681459, -1.7152675, -1.9488813, -1.7760447, -1.9936274, -1.7521713, -1.7592715, -1.902406, -1.6905272, -1.8479546, -1.751047, -1.7905741, -1.6934325, -1.6789583, -1.6701736, -1.6564382, -1.7715598, -2.0151927, -1.9195334, -1.8028382, -1.9663247, -2.1656272, -2.296082, -1.840917, -2.1362383, -2.0696712, -1.8631237, -1.767524, -1.7651434, -1.8536345, -2.0365477, -2.1101491, -1.7590829, -1.7541672, -1.8802052, -1.9907873, -1.883789, -1.9589584, -1.937726, -1.7951763, -1.9418979, -1.9566839, -2.0244322, -1.9384271, -1.6788492, -1.7451121, -1.7861428, -1.6852266, -2.5215356, -1.9013051, -2.037079, -2.0577483, -3.0182664, -1.9487162, -1.9190514, -1.8165746, -2.0850487, -2.0822523, -2.2335765, -2.4680552, -2.363522, -2.3838506, -2.204269, -4.3974123, -3.3375227, -2.7195897, -2.4727077, -2.1204584, -2.6764693, -2.1020103, -1.989323, -1.9542483, -2.167528, -1.769592, -2.1437624, -2.7654886, -2.1714416, -2.6895342, -2.7113855, -2.3920598, -2.157461, -1.9640378, -1.7977059, -1.7815706, -1.9780982, -2.2057226, -2.116635, -2.3563638, -1.9742705, -2.9931417, -2.392908, -2.28999, -1.9452024, -2.6425848, -2.6401994, -1.9202209, -2.5856595, -2.1273446, -2.2240243, -2.129439, -3.3542998, -2.2884893, -2.4859428, -2.2571838, -1.7519403, -1.9292167, -1.8874947, -2.1244519, -1.9506923, -2.0909913, -2.3313808, -1.7003025, -2.9537804, -3.5986166, -2.7357392, -2.283334, -4.7310257, -2.9838123, -3.3083916, -2.284723, -4.025685, -3.6454818, -2.046851, -3.136488, -4.9756856, -1.9540596, -5.2797184, -4.224498, -3.102977, -3.69534, -2.6488783, -3.182275, -3.6669807, -4.6564136, -3.294526, -2.7974358, -3.3393862, -3.445514, -3.427641, -3.7099073, -2.8673236, -3.67386, -4.8217087, -4.5653443, -3.4503992, -3.6306133, -5.5046973, -4.169761, -2.6254187, -4.3230076, -3.2810805, -2.551275, -3.7663214, -2.8015034, -4.2319894, -2.425944, -2.796178, -2.7693992, -2.4642992, -2.7877843, -4.520319, -3.8294418, -4.1778226, -2.1968145, -2.6842058, -5.268678, -3.4234889, -3.6759183, -2.393645, -4.843274, -2.8643084, -3.3054264, -4.0527077, -3.1848598, -2.6404333, -4.456477, -2.7478602, -2.5648475, -2.6379373, -4.831928, -2.3397806, -1.9601725, -3.099352, -2.1764588, -3.9158375, -2.2227128, -2.9893708, -2.8553996, -2.6301746, -2.118248, -2.6538143, -5.337449, -1.9940683, -2.7780764, -3.9678357, -3.0879936, -3.0710263, -3.4833937, -2.4810443, -4.2350316, -4.8945765, -3.2219045, -2.769202, -3.0021436, -2.9778628, -3.6210992, -2.2141361, -2.673273, -3.2167678, -3.5103796, -8.597359, -3.5799994, -2.4545393, -4.5522933, -2.4809632, -4.8563533, -5.3535905, -4.0583744, -3.7414627, -4.6650076, -2.496172, -5.1984487, -2.5022283, -3.1943207, -2.0961633, -4.3724174, -2.932501, -2.277216, -2.0648792, -2.928093, -2.7486837, -3.541168, -2.4924767, -2.1827936, -2.2467203, -3.017348, -2.658529, -3.090261, -3.782347, -1.7620225 ], "pointIndex": [ 5, 1255, 255, 1956468551, 1616157286, 1609746451, 488452057, 930233117, 1906460260, 1725851027, 786295560, 153864773, 25689970, 1908503004, 281243365, 1314661265, 1468990517, 1176275018, 1622263040, 577357105, 1464775084, 709924167, 889810156, 1877489160, 627129837, 60480977, 1256707707, 522403349, 1632370727, 1704381890, 887374661, 442182691, 1755137153, 535785731, 1750574627, 1588771769, 551572559, 1056180673, 630785850, 1720527106, 699769889, 208720950, 1142427647, 928764231, 1489358879, 1139773552, 1028238333, 1522940943, 100212860, 264566646, 839567687, 308532422, 704930029, 310113401, 1787203725, 357426754, 1167751160, 1145759838, 1240995885, 58971194, 1280434039, 1530888301, 1606015708, 52961117, 968535734, 653293164, 726161111, 926860836, 503605708, 1699615712, 264175794, 985695770, 554952958, 595565852, 629290955, 646856226, 197718828, 751350228, 1545208118, 1702895684, 762738313, 1039790708, 878663156, 1636895505, 1299674101, 1169950849, 1387813939, 1863833561 ], "storeSequenceIndicesEnabled": false, "size": 255, "capacity": 256, "initialAcceptFraction": 0.125, "timeDecay": 1.0e-4, "sequenceIndexOfMostRecentTimeDecayUpdate": 0, "maxSequenceIndex": 1256, "compressed": true, "randomSeed": 6873559043919805206 }, { "version": "2.0", "weight": [ -1.5478095, -1.5580735, -1.5586025, -1.588912, -1.5624557, -1.5931304, -1.5787097, -1.6516792, -1.7199396, -1.5835112, -1.5690824, -1.6260145, -1.6317056, -1.5840569, -1.6037713, -1.7980132, -1.8133217, -1.7965556, -1.7716056, -1.5857275, -1.5960587, -1.7305709, -1.7159228, -1.7437992, -1.6637305, -1.6374578, -1.8194374, -1.6424956, -1.6265041, -1.7596669, -1.6393709, -1.8227845, -1.8477689, -2.161068, -2.0182776, -1.8059037, -2.1590114, -1.9517924, -1.7850544, -1.6919967, -1.6256903, -1.7500316, -1.6069838, -1.7542928, -1.9830415, -1.963632, -1.8992164, -1.7973434, -2.1416883, -1.6798558, -1.7398648, -1.6805445, -1.9159135, -1.8302265, -1.8452566, -1.7396388, -1.724929, -1.8845452, -1.6393856, -1.9198812, -1.799096, -1.7613573, -1.6581032, -1.8339019, -1.9424281, -2.7757666, -2.4357708, -2.515062, -2.4722068, -2.082221, -2.2053227, -2.277163, -1.8077579, -2.7880044, -2.4332013, -2.4218073, -2.0808065, -1.8147348, -2.215576, -1.8046377, -1.7593033, -1.777868, -1.7045307, -2.2772882, -1.9263648, -1.8515847, -1.6312764, -1.9708276, -2.3266296, -2.1762302, -2.0596678, -2.0727565, -2.1242344, -1.955638, -2.0269237, -2.80806, -4.395095, -2.7257683, -2.1824844, -2.2855716, -1.9568323, -1.9669816, -2.5572267, -1.7785479, -2.039832, -2.551597, -2.0521724, -2.0065117, -2.034989, -1.9030262, -2.016063, -2.2545946, -2.2300994, -3.4435954, -1.9981797, -2.0935466, -2.1631384, -2.1183298, -1.6487999, -1.9733895, -2.2379096, -1.8148649, -1.8340958, -2.0860653, -2.1912777, -1.8835979, -1.8014612, -3.1797936, -5.339011, -3.2961295, -2.7358942, -2.8153527, -3.3449876, -3.0131137, -3.142744, -2.559853, -2.584647, -5.9994397, -3.5015721, -3.2383192, -2.6384623, -2.6504884, -2.5027266, -3.348065, -2.329989, -2.7779088, -1.8919544, -3.3424976, -3.620949, -3.2293108, -2.8661213, -2.9987667, -3.2882886, -2.2421741, -2.9003553, -2.4627187, -3.7794378, -2.3688264, -3.7690911, -2.6497767, -3.440573, -2.2225194, -3.4665196, -3.1266437, -3.9963698, -2.394353, -2.536245, -5.682287, -2.7054744, -3.5295506, -3.164668, -2.7427077, -3.303546, -1.8590448, -2.207797, -2.018024, -2.0527718, -3.4058433, -4.380702, -3.5663502, -2.4080958, -2.711812, -4.338985, -2.8664718, -3.122034, -2.5750837, -2.2175708, -4.8892264, -3.1534848, -2.092666, -2.328548, -3.0831187, -3.136449, -7.84776, -6.210704, -2.9239645, -4.766644, -2.2623096, -3.40043, -2.3112707, -2.9403992, -2.5001543, -3.4736223, -5.2151012, -2.6916144, -3.540305, -4.12798, -2.7393646, -2.1685767, -2.746256, -2.8794262, -4.1864066, -4.8762226, -2.3647995, -3.9723904, -2.4144828, -4.3872066, -2.2839453, -2.4254746, -2.037719, -2.6945152, -2.326007, -2.9042437, -4.6150465, -4.993203, -2.8662229, -2.7774584, -3.4765794, -4.0050497, -2.058355, -2.7188106, -2.258685, -3.3639786, -4.753893, -4.302262, -2.3484764, -3.6190546, -2.398666, -5.012479, -2.397243, -4.971586, -3.7006304, -7.620705, -2.0435278, -2.7693655, -4.205434, -2.1007671, -2.8852465, -2.899561, -2.9529257, -3.2352219, -2.7577133, -2.4206066, -3.002688, -1.9380794 ], "pointIndex": [ 4, 1248, 255, 797085272, 917719120, 665845471, 611172034, 1738275277, 1155010306, 863175673, 502781864, 733921225, 1824565080, 798338759, 809817756, 333197546, 386844836, 879126480, 477362820, 1241127680, 629887312, 3698656, 1751740488, 1724705441, 486849765, 765800921, 302530205, 319812420, 1537887528, 1335616466, 715588314, 409087041, 1014476770, 131534629, 155377144, 519665801, 979042494, 556013783, 1262786447, 704272033, 1808017009, 1067124924, 983471314, 1115367593, 1777420339, 1551781689, 792743958, 1872401644, 1369229168, 176736649, 7387787, 1558023078, 191486482, 762348003, 1365673732, 341034796, 171526140, 25179000, 1076981259, 1260361787, 521298593, 866513695, 502099238, 90562059, 434354796, 151897813, 1186792304, 174131077, 1354707555, 1337800387, 964071028, 509614955, 1548920373, 1450283480, 818029985, 811502628, 1472466978, 1404935992, 924462353, 1755394524, 1192694550, 217950647, 1081151410, 1049347660, 649725313, 1372758617, 1480160371, 1929596516 ], "storeSequenceIndicesEnabled": false, "size": 255, "capacity": 256, "initialAcceptFraction": 0.125, "timeDecay": 1.0e-4, "sequenceIndexOfMostRecentTimeDecayUpdate": 0, "maxSequenceIndex": 1256, "compressed": true, "randomSeed": -919230996305300857 }, { "version": "2.0", "weight": [ -1.6287293, -1.6435285, -1.637755, -1.6691914, -1.645258, -1.6442953, -1.6410506, -1.6916354, -1.7190585, -1.761682, -1.6499045, -1.6932083, -1.729453, -1.649677, -1.6591613, -1.6945941, -1.8920058, -1.7502831, -1.7589148, -1.844166, -1.8389727, -2.1142673, -1.722116, -1.7554877, -1.8476304, -1.7322166, -1.7614912, -1.7297312, -1.6993097, -2.0708926, -1.6952051, -1.7018081, -1.7204852, -1.9380832, -1.9250269, -2.1003716, -1.810654, -1.7863406, -1.8420278, -1.923125, -2.0683916, -1.8779187, -2.0993567, -2.2440252, -2.4986584, -2.1349447, -1.8286045, -1.8319627, -2.963366, -2.2319872, -2.125827, -1.977528, -1.797223, -1.8572384, -1.9525493, -2.1618528, -1.7674576, -1.7466911, -1.8013276, -2.0905416, -2.21956, -1.8042545, -1.6955078, -1.9114436, -1.7379467, -2.8870742, -2.0274715, -1.9450583, -3.025044, -1.9799057, -2.2283165, -2.344057, -2.1447797, -1.8842825, -2.1390884, -2.1928966, -2.1094954, -2.474272, -2.218279, -2.701682, -2.0378191, -2.3359075, -2.3428192, -1.9566844, -2.5642297, -2.1202443, -2.4547656, -2.5752928, -2.4486563, -2.5106273, -2.9675372, -2.722326, -2.5456028, -2.1745915, -1.8693612, -1.8518169, -2.08939, -3.7104192, -2.977432, -2.5043721, -2.6941476, -2.5780845, -2.8901272, -2.3614352, -2.4190023, -1.9482347, -2.2259426, -2.6558018, -2.9252875, -2.087803, -2.0049474, -2.4985342, -2.263475, -1.8067365, -1.8575746, -1.8400688, -2.374721, -2.1351123, -2.0048347, -2.1655703, -2.787334, -2.4745865, -2.7357888, -2.3446178, -1.8706708, -2.1889246, -1.7161208, -2.8049548, -1.9561678, -2.6307518, -2.2830336, -3.503847, -3.7583747, -2.5329049, -4.5742164, -3.3736012, -2.9679334, -3.1773055, -3.1729085, -5.4354944, -4.8199077, -2.8325222, -2.62505, -2.6489146, -2.9634616, -2.2020204, -2.314265, -2.578448, -2.7460446, -2.487839, -2.949279, -2.9059079, -3.3980107, -2.5645654, -2.7129917, -4.727363, -2.5351973, -3.9054053, -2.6798823, -2.7133641, -6.961175, -4.145108, -2.8550694, -2.4107604, -4.073314, -2.3849046, -3.8040702, -1.9988089, -2.6826816, -2.958969, -2.8348746, -2.4423566, -3.2900076, -3.5124567, -3.0276008, -2.6424477, -3.222973, -2.7755873, -3.1440806, -3.4846766, -3.0851703, -3.4664392, -3.2701242, -4.641508, -5.2022886, -5.167342, -2.9217503, -2.6460018, -4.8421874, -3.2255902, -3.8385496, -2.7864158, -3.049552, -4.733867, -4.454487, -3.9694974, -4.1708393, -4.4392476, -3.2127802, -3.1510036, -2.6468732, -2.9868522, -4.7008367, -3.4651322, -2.6355107, -4.7546005, -3.0883682, -2.952955, -3.146033, -2.7686331, -2.429948, -2.7047617, -2.456339, -3.1010394, -2.527437, -3.8453908, -3.0544543, -2.9318485, -5.533993, -2.0890853, -2.7984624, -5.6635385, -4.536752, -2.9831543, -2.8688128, -2.588757, -2.9604492, -2.4847069, -2.9993773, -4.0434513, -3.3012896, -2.394382, -2.7405553, -4.2170815, -4.238273, -3.1518064, -4.3944273, -2.0580623, -2.0345478, -4.6425953, -2.7166886, -4.0035863, -3.0050988, -6.148036, -3.6872802, -5.858176, -2.7695863, -3.1716938, -2.6447742, -2.1457007, -2.0553026, -2.922085, -2.994673, -2.9905138, -1.9678352 ], "pointIndex": [ 3, 1253, 255, 1468939989, 348201086, 311481418, 1733845684, 1686180818, 280805918, 1795342310, 1372015301, 1359497846, 1486453725, 1260359975, 1033476187, 361534460, 1355030892, 1272463141, 805838947, 199255874, 972786110, 346438616, 1722030182, 1813644722, 191076355, 981070544, 284836642, 310910058, 989748829, 1799011465, 1134929181, 1911068180, 1831200079, 1413073718, 1628009934, 1675666577, 1909251535, 300972608, 78762105, 704813320, 309117930, 1038878914, 1271574588, 94968480, 1541144338, 1719937349, 1811721669, 471265264, 1530779806, 1218782107, 390946267, 296023026, 473573629, 1716169005, 331840464, 371289284, 644432640, 481715699, 1673291390, 394237884, 1112141393, 1866968764, 444447526, 1055838466, 1298556873, 526621749, 156912001, 163208658, 195519246, 1823671856, 1244638050, 1730451265, 1494404993, 634462173, 1163393280, 808705820, 1525716283, 736456317, 1566828723, 572959739, 1176229499, 1011709746, 1060291886, 1303034817, 1428442655, 1441529443, 1522581783, 1918611098 ], "storeSequenceIndicesEnabled": false, "size": 255, "capacity": 256, "initialAcceptFraction": 0.125, "timeDecay": 1.0e-4, "sequenceIndexOfMostRecentTimeDecayUpdate": 0, "maxSequenceIndex": 1256, "compressed": true, "randomSeed": 1235914033936469780 }, { "version": "2.0", "weight": [ -1.5345111, -1.5345854, -1.5352143, -1.5418011, -1.5640353, -1.5873953, -1.5440509, -1.5723784, -1.5536164, -1.6138204, -1.564567, -1.6089317, -1.6009803, -1.5548254, -1.5872757, -1.7854967, -1.7077621, -1.618875, -1.5881951, -1.7608906, -1.74024, -1.6480869, -1.5943167, -1.6137693, -1.6191088, -1.6046709, -1.637026, -1.5612868, -1.5652598, -1.5936134, -1.656476, -2.0284445, -2.0513895, -1.7272295, -1.8274367, -1.7010891, -1.7508259, -1.6084881, -1.7268528, -1.9210428, -1.8405379, -1.9598054, -1.7992055, -1.6998166, -1.7354546, -1.675926, -1.6926972, -1.8770659, -1.8663892, -1.7692633, -1.6374545, -1.6231381, -1.8434621, -1.7333738, -1.948892, -1.5747668, -1.7588967, -1.6761369, -2.1003804, -1.6753234, -1.6181744, -1.8790652, -1.661982, -2.0956454, -2.200539, -2.0995784, -2.225362, -2.2545896, -1.9625192, -1.8587768, -1.8545741, -1.7148182, -1.8189396, -1.7725823, -1.8485171, -2.118984, -2.387815, -2.064594, -2.0679607, -2.118417, -2.3495748, -2.288614, -2.195366, -2.6614716, -2.2825482, -1.9241642, -3.0691502, -1.7099928, -1.9844245, -1.9936858, -2.0395646, -1.6921089, -1.9774458, -3.1731887, -1.8646569, -1.8896581, -2.0159445, -1.9981244, -2.1396825, -1.8050421, -1.7693808, -1.7676467, -1.754945, -1.6373693, -2.9621675, -2.3039734, -1.8951974, -1.9601555, -1.8143328, -2.4989946, -2.312548, -1.8358022, -2.3151543, -2.063485, -1.8310093, -2.309061, -1.8352809, -2.2402127, -2.1357348, -1.9181471, -2.1218538, -2.4286084, -1.619118, -2.3334422, -2.0407221, -2.2614598, -1.6817223, -2.7123013, -2.9958603, -3.2728026, -2.8368137, -2.5721009, -2.917388, -2.8172667, -5.1267014, -2.5259824, -3.426527, -4.2924347, -4.367054, -3.8996263, -2.4546254, -2.8780682, -3.369605, -1.9061285, -3.7905815, -3.2067957, -2.7068586, -2.0716114, -2.2800162, -2.4191968, -3.452595, -2.120203, -2.369795, -4.5425644, -2.4015663, -2.3730764, -2.5273366, -3.0901675, -2.9005687, -2.5268888, -2.7519774, -2.4042478, -2.5676286, -3.3872604, -2.3477516, -2.5910897, -2.490365, -2.697967, -3.0550823, -3.553559, -2.7715716, -3.4370391, -3.0085537, -3.6120863, -4.689063, -1.7739089, -2.0211194, -2.5067132, -2.825091, -2.0644937, -2.060346, -3.5862482, -2.9754694, -2.7869902, -2.8265479, -2.8258586, -2.4236476, -5.5222154, -4.011036, -5.4852524, -2.257591, -2.3536267, -2.1434913, -3.0729537, -2.503225, -3.1518953, -3.8945484, -3.5541847, -3.574473, -3.5645008, -1.8395015, -2.1069777, -2.280898, -1.9562199, -1.8099992, -2.681795, -4.0627627, -2.3272598, -3.1536226, -3.6603744, -5.376876, -4.4856424, -2.3590813, -2.0735247, -2.5921485, -3.2830138, -2.987672, -5.36235, -2.7352164, -2.5040228, -3.3372958, -3.66952, -2.796431, -1.9083732, -4.185178, -3.1007457, -2.485229, -2.1849375, -2.8226488, -2.0973449, -2.3647096, -3.5712779, -3.2152066, -2.2329075, -2.6364183, -2.7903652, -2.5476396, -2.842387, -2.2279704, -2.3730114, -2.0485094, -3.2631235, -3.3598142, -2.7192006, -2.5139086, -2.722003, -2.3466024, -2.7279682, -3.6686144, -2.3619401, -3.394032, -2.5690548, -3.4673102, -2.3773215 ], "pointIndex": [ 3, 1249, 254, 749619764, 515508889, 953230363, 644120088, 1783281798, 1438421982, 1006494365, 1449632781, 933462234, 1241790507, 263002233, 291621465, 1311156237, 1622877794, 593024514, 160824440, 84490796, 633171281, 823183843, 1353930027, 1936991999, 101048797, 501282098, 1527536864, 55971400, 1902732214, 1733274098, 203359947, 140136544, 1712388138, 1071987294, 471161193, 522293587, 621210748, 1601017186, 1920764524, 1363619146, 1807520155, 461573448, 983873570, 1331965006, 1549976524, 825674653, 525980398, 270665261, 683061037, 1187318760, 855226838, 581585821, 1425257349, 1051440673, 224458911, 361881947, 239661597, 1076350786, 1396027055, 234628851, 1629539413, 401512819, 1390505173, 427967097, 1304488839, 445090758, 969427552, 1095121632, 33234972, 1633348644, 80685532, 1329840547, 1835358407, 590560865, 726010070, 1284999414, 1598481684, 744808929, 757904728, 1398773041, 961639521, 1918522845, 1505982507, 1142351156, 588675351, 1779866454, 1923068132, 1554810 ], "storeSequenceIndicesEnabled": false, "size": 254, "capacity": 256, "initialAcceptFraction": 0.125, "timeDecay": 1.0e-4, "sequenceIndexOfMostRecentTimeDecayUpdate": 0, "maxSequenceIndex": 1256, "compressed": true, "randomSeed": 5961685213686464613 }, { "version": "2.0", "weight": [ -1.5257835, -1.532419, -1.526319, -1.5459954, -1.5403318, -1.5273062, -1.5318718, -1.5854601, -1.600429, -1.5905855, -1.576832, -1.5444384, -1.53936, -1.6083705, -1.5532775, -1.7179025, -1.6046104, -1.6268706, -1.6039013, -1.5928894, -1.8332025, -1.6485378, -1.6818303, -1.5466363, -1.5505174, -1.5745901, -1.5889266, -1.676313, -1.6876225, -1.680915, -1.6252509, -1.8780425, -2.0918608, -1.6844703, -1.7588052, -1.9396161, -1.6796147, -1.7520231, -1.6064339, -1.7949163, -1.6063402, -1.9180142, -1.8818871, -1.6793885, -1.67244, -1.9063159, -1.9686803, -1.6347135, -1.8534031, -1.6582611, -1.7758393, -1.9086692, -1.6868783, -1.6774342, -1.6174681, -1.8093826, -1.827288, -1.8499967, -1.7659829, -1.7565888, -1.8133397, -1.6693784, -1.648273, -2.521096, -2.2045913, -2.2039254, -2.3295937, -2.1437054, -2.4531891, -2.0813184, -1.8641522, -2.979186, -2.1612687, -2.1348293, -2.16697, -1.8916192, -1.9236215, -1.7352973, -2.264334, -1.8202388, -2.2695205, -1.9896787, -1.6497238, -2.0752726, -1.9621438, -2.7148943, -1.9871827, -2.7365506, -2.356889, -1.6996434, -1.7351856, -2.150795, -2.0257459, -2.240612, -2.4337668, -1.8312027, -2.4079015, -1.8643912, -1.9720566, -2.5028517, -1.9584169, -2.0469992, -2.5444942, -2.001135, -3.569225, -2.0345218, -1.8616279, -2.5987465, -2.119698, -2.0288913, -1.7859378, -2.6630232, -1.8724684, -2.778035, -2.3339639, -2.0099356, -2.07525, -1.8595737, -1.7922893, -2.3891761, -2.560148, -2.8437333, -2.0655832, -1.7084434, -2.1388345, -2.6832392, -1.7777342, -2.556761, -3.1471772, -2.4486399, -3.2626753, -2.743352, -2.6989517, -2.662875, -4.866611, -4.188736, -2.7151356, -2.8587973, -2.47859, -3.8088737, -2.5240817, -1.9957222, -3.138415, -3.2717984, -3.1498153, -2.743579, -2.2526274, -2.50212, -3.9200556, -4.119592, -3.521935, -2.277947, -2.908566, -2.2615526, -3.7282572, -3.1510122, -1.7886689, -3.250285, -2.5849755, -1.9076731, -2.898602, -3.594523, -2.5473993, -2.3753328, -2.273242, -5.8790035, -2.177618, -2.3663774, -2.6003609, -2.8216631, -2.1137898, -2.9474978, -3.3929472, -2.0721483, -2.0494266, -4.468507, -3.115191, -4.9723973, -3.4666471, -2.448805, -2.201985, -2.967275, -2.3713338, -3.3682654, -4.0202723, -3.386346, -2.711816, -2.4446042, -4.2688355, -3.407556, -2.7723808, -3.4934607, -2.4770794, -4.2625604, -3.5663607, -2.7192361, -2.441945, -2.3298247, -2.1854405, -2.5347698, -5.375053, -3.7296784, -2.2532272, -2.3139634, -2.177199, -5.497376, -6.019287, -4.070514, -2.4715588, -3.6453009, -7.0692167, -2.936739, -2.3720882, -4.3689184, -2.1131155, -3.1359951, -5.7391376, -2.3628266, -2.1523256, -2.4543364, -2.521942, -2.490915, -3.972962, -6.118891, -3.3457332, -2.1690152, -2.7532642, -3.3654513, -3.868791, -3.8921962, -2.535788, -3.98272, -2.2380013, -2.293273, -3.3237154, -2.5618138, -2.3382132, -3.2277465, -3.8876097, -4.109236, -4.762749, -3.6733208, -2.9050758, -3.2219455, -2.8485487, -2.9965434, -3.7959926, -3.4480162, -2.7039433, -3.3766913, -3.6542602, -3.55788, -4.494692, -4.54066, -2.5475478 ], "pointIndex": [ 1, 1250, 255, 1614311906, 1037541425, 1422066171, 762040836, 1923048011, 150118905, 953173356, 76440872, 194981059, 999426963, 1706086193, 1594445842, 864392687, 351906466, 1636326003, 1659863674, 1654131598, 588612615, 1268906687, 1679779764, 1574393566, 1011133818, 264827597, 1867083960, 299138962, 865870158, 657862061, 1240158043, 1277437500, 1474414712, 158764031, 673816356, 609030105, 173575334, 774861641, 1670772511, 1562991630, 1103180464, 794742985, 971023046, 1177154699, 1549743205, 1225277499, 251542656, 258018327, 263774789, 1283647599, 871791224, 291457405, 295674933, 1157160941, 102459636, 314173493, 1723731252, 342455699, 1839343407, 398751663, 631047258, 1210030052, 1710892087, 1924823826, 903475066, 456327805, 491520307, 506106568, 1158303350, 892079952, 536437045, 1117345195, 564512855, 1395768170, 1925479604, 1765493362, 1627026636, 1751327113, 1188066073, 1917447254, 827535050, 1642368473, 903014297, 1441126861, 1130810732, 1224744483, 1811933289, 1935752407 ], "storeSequenceIndicesEnabled": false, "size": 255, "capacity": 256, "initialAcceptFraction": 0.125, "timeDecay": 1.0e-4, "sequenceIndexOfMostRecentTimeDecayUpdate": 0, "maxSequenceIndex": 1256, "compressed": true, "randomSeed": 3094355644247862573 }, { "version": "2.0", "weight": [ -1.4739364, -1.4854518, -1.4760784, -1.4875935, -1.4953938, -1.4984169, -1.4879522, -1.5093524, -1.4926078, -1.5171238, -1.5125519, -1.5012732, -1.5166982, -1.4958954, -1.5366755, -1.5484987, -1.5611908, -1.5979398, -1.5603845, -1.6203203, -1.5704353, -1.6633575, -1.5579628, -1.55296, -1.795618, -1.6760824, -1.5176575, -1.5144597, -1.5277035, -1.5477281, -1.7140696, -1.6394001, -1.6954261, -2.1438859, -1.8238163, -1.6423, -1.6687416, -1.8934213, -1.6380768, -1.9984225, -1.8914065, -1.9348294, -1.8795712, -1.7462192, -1.8659137, -1.8379618, -1.5810261, -1.7192446, -1.7008163, -1.8184123, -1.8110999, -2.1787684, -2.2982676, -1.5314186, -1.7548642, -2.2257524, -1.5917569, -1.5637295, -1.5673133, -1.6050491, -1.7135774, -2.049922, -2.0660481, -1.7038921, -1.8500408, -1.9410862, -2.1084352, -2.2458594, -2.4118128, -2.025019, -1.9305323, -2.0011356, -2.5528111, -2.0804389, -1.7682977, -2.9587407, -2.0774496, -2.0376956, -1.8831936, -2.3587713, -2.2914603, -2.080167, -2.398474, -2.1165843, -2.2489762, -3.3198617, -2.0660028, -1.7743989, -2.0366867, -1.9493996, -2.1968048, -1.9214082, -1.865101, -1.6677953, -1.7295773, -1.7557685, -1.7215736, -2.1169577, -3.8750894, -1.8312486, -2.2261262, -1.9203904, -2.4061456, -2.5151784, -2.3806129, -2.3084571, -2.506206, -1.9816073, -2.0561907, -1.980592, -2.1949437, -2.2723653, -2.3749077, -1.7950431, -1.8964046, -2.211347, -2.4007275, -1.5689955, -1.6514187, -3.7187233, -1.6301489, -2.086895, -2.1163597, -2.6241238, -3.9407856, -2.7351525, -2.1547961, -2.0345523, -2.2548847, -2.1943324, -4.6028876, -2.1080987, -2.2166712, -2.4134626, -4.2891135, -3.1646965, -3.283529, -3.0363867, -2.654098, -2.5246723, -2.9533222, -2.7589624, -6.8319306, -3.45097, -2.302588, -4.1987743, -3.018338, -3.9248986, -2.2258532, -3.859081, -2.3803658, -4.1095366, -3.1288927, -2.689985, -4.6837077, -3.3727543, -2.7500443, -3.597516, -2.7279165, -2.3633702, -2.3965745, -3.7145114, -3.6214883, -2.0868714, -2.301757, -3.4451625, -4.5945196, -3.219573, -3.4956493, -2.6333444, -3.1672225, -3.5964112, -4.2114186, -3.3155928, -2.5097873, -3.0633156, -1.8225551, -2.144348, -2.2268782, -2.6874378, -2.5341742, -4.0607824, -2.2209594, -2.2272894, -4.5724764, -2.147491, -2.140911, -1.6880952, -6.806554, -2.9362721, -2.1946857, -3.549542, -1.7758566, -1.8011234, -3.9622927, -3.233758, -2.7135792, -4.252686, -4.0482345, -1.9278389, -1.9454994, -2.5433922, -2.2774193, -4.3522453, -2.2904599, -3.0752342, -2.6221926, -5.464108, -4.4305067, -3.8604193, -2.6281645, -2.3101032, -2.92189, -2.6759644, -2.7982519, -2.4083624, -2.7625816, -4.315713, -2.2733822, -5.1711693, -3.2551575, -2.2869558, -2.6063263, -2.4167163, -3.0222101, -6.9500675, -3.7502477, -3.0935733, -2.0001183, -3.9397662, -2.036932, -5.9469604, -3.63629, -3.1122005, -2.8454168, -3.0099926, -1.9705479, -2.064685, -1.900059, -4.272635, -3.928694, -1.9878477, -1.6362039, -2.645227, -2.5863435, -4.9102893, -2.174294, -3.0281172, -3.4842854, -5.2957344, -5.0918097, -3.1096747, -6.0454197, -3.172589, -2.2439806 ], "pointIndex": [ 4, 1256, 255, 1223797928, 1623677654, 1728694488, 1360127196, 1237665187, 300008325, 23900434, 533047755, 1038903454, 1296350950, 416240210, 954777070, 871612658, 159631247, 440691661, 552496932, 410244749, 1009372704, 1600468221, 1374403740, 1918402956, 695135605, 1803858985, 1315684846, 1679339055, 1636784866, 1699017295, 672251182, 369725123, 1413805818, 517289020, 1133930449, 1906422654, 856131894, 865341588, 447977189, 1608462439, 1478336717, 824417366, 1036955096, 1376703219, 1627803349, 1415150729, 1522913492, 1806293611, 1160439800, 78400409, 1722060119, 1655226301, 1957291000, 315667447, 52729117, 1006468, 340123706, 1055091144, 1208275682, 377204605, 1179474234, 1073440127, 2998993, 986081357, 805778975, 23156479, 1704113892, 854499111, 1629578411, 586232179, 1886933506, 1077656819, 645784931, 279521799, 1182801783, 719702406, 1683648103, 771515289, 1543232884, 1777928976, 308431624, 1199169854, 1663530999, 1137583284, 1505515416, 1819345697, 1817788662, 1965613555 ], "storeSequenceIndicesEnabled": false, "size": 255, "capacity": 256, "initialAcceptFraction": 0.125, "timeDecay": 1.0e-4, "sequenceIndexOfMostRecentTimeDecayUpdate": 0, "maxSequenceIndex": 1256, "compressed": true, "randomSeed": 7829655809554688956 } ], "compactRandomCutTreeStates": [ { "version": "2.0", "root": 0, "maxSize": 256, "outputAfter": 32, "storeSequenceIndexesEnabled": false, "centerOfMassEnabled": false, "nodeStoreState": { "version": "2.0", "capacity": 255, "compressed": true, "cutDimension": [ 1, 31, 255, 482049803, 309553323, 126599654, 183052701, 152692025, 810097597, 520795982, 186960441, 354890868, 654637203, 858723802, 771537355, 487196625, 141715079, 715197657, 744288717, 532366533, 700948526, 485148609, 589528758, 874417663, 862655872, 420262554, 126768542, 760361961, 122808912, 768002537, 756806186, 510626389, 378520593, 85155340, 371617678, 122624128, 270573733, 40487961, 543923644, 238230115, 298782203, 141902733, 518077810, 126914412, 523006182, 5565 ], "cutValueData": [ 66, -110, 90, -115, 66, -109, 119, -68, 66, -112, -121, 60, 66, 68, 45, 29, 66, 103, 4, 88, 66, -107, -60, 23, 66, -112, -105, 45, 66, -120, 26, -107, 66, -106, 95, -105, 66, -101, -27, 13, 66, -99, -69, -91, 66, -124, 25, -27, 66, -126, -61, -35, 66, -118, -60, 108, 66, -97, 102, -78, 66, -109, -63, 28, 66, -97, 23, 105, 66, 117, 119, -84, 66, 112, -6, -37, 66, -82, 31, 113, 66, -116, 56, -48, 66, 102, -65, -50, 66, -128, -126, -98, 66, 110, -121, 56, 66, -96, -25, -68, 66, -89, -86, 49, 66, 103, 87, -128, 66, -118, -91, 75, 66, 126, -72, 50, 66, -86, -88, -61, 66, -84, 119, 16, 66, -76, 2, 50, 66, -81, -100, 21, 66, 108, 49, -47, 66, -69, -12, 0, 66, -104, -91, 13, 66, -119, 3, 50, 66, 110, 33, -114, 66, -76, 51, -58, 66, 89, 66, 68, 66, -78, 59, 39, 66, -110, 70, 5, 66, -119, -55, -114, 66, 101, -124, 121, 66, -72, 117, -100, 66, -68, 38, 77, 66, 94, -106, 15, 66, -97, -62, -75, 66, 87, 89, 33, 66, -93, -3, 122, 66, -122, 87, 77, 66, -118, -11, -12, 66, -95, -127, 90, 66, -67, 77, 24, 66, 72, 108, -65, 66, 95, 62, -64, 66, -72, 5, 119, 66, -112, -99, -53, 66, 118, 50, -43, 66, -80, -99, 4, 66, 98, 12, 13, 66, 73, -36, -116, 66, 118, -42, 32, 66, -78, -16, -59, 66, -100, 68, 10, 66, -100, -119, 69, 66, 97, -34, -94, 66, 70, -54, -29, 66, 118, -62, 96, 66, -122, 95, -113, 66, 125, 74, 85, 66, -104, 102, 63, 66, -108, -47, 26, 66, -73, -94, -123, 66, 91, 114, -124, 66, -88, 104, 16, 66, -109, -34, 80, 66, -124, 78, -73, 66, -99, -49, 45, 66, 112, -127, 10, 66, -108, -85, 18, 66, 89, 97, 73, 66, -74, -98, -24, 66, -115, -12, -19, 66, -89, -41, -63, 66, -120, -50, -53, 66, 85, 118, 116, 66, -90, -90, 107, 66, 112, -109, 111, 66, -115, 5, 0, 66, -84, 123, 14, 66, -85, -77, 29, 66, -98, 73, -58, 66, -112, 101, -38, 66, -104, -68, -17, 66, -119, -76, -122, 66, -67, -81, -66, 66, 111, 86, -59, 66, -123, 114, 110, 66, -107, 20, -100, 66, -88, -76, -13, 66, 104, 41, 28, 66, -123, -104, -119, 66, 96, 28, 36, 66, -118, 10, -86, 66, -112, -31, 61, 66, 122, -92, -18, 66, -121, -5, -6, 66, 89, 43, -63, 66, 80, 95, 53, 66, -84, 51, -91, 66, -72, 1, 127, 66, -78, -36, -70, 66, 79, -126, -2, 66, 95, 119, 127, 66, 108, 19, 60, 66, 114, -51, -90, 66, -118, 96, -58, 66, 108, 122, -82, 66, 119, -33, -112, 66, 88, -9, 85, 66, -113, 111, 27, 66, -125, 123, 60, 66, -120, -91, -13, 66, -97, -40, -5, 66, 83, 43, -51, 66, -105, 3, 6, 66, -81, -13, 126, 66, -88, -27, 39, 66, -123, 23, -111, 66, -109, 116, -85, 66, -86, -33, -116, 66, 98, 28, 127, 66, -81, 67, 50, 66, -122, -34, 30, 66, 111, 111, -11, 66, -78, 114, -37, 66, 119, 55, 89, 66, -85, -97, 46, 66, -100, 108, -88, 66, -97, 16, -40, 66, -105, 46, 17, 66, 99, 12, -96, 66, 113, 16, -13, 66, -82, -85, -46, 66, 112, -13, -59, 66, -126, 25, 10, 66, -111, -4, 74, 66, -78, -86, 61, 66, -82, 29, 123, 66, -83, 97, -34, 66, -88, 102, 126, 66, -93, 126, -99, 66, -81, 51, 70, 66, -79, 89, 72, 66, -97, -97, -36, 66, -57, 88, 122, 66, -102, 79, 6, 66, 82, 65, -86, 66, 97, -7, 71, 66, 114, 89, 77, 66, 88, 40, 114, 66, 103, -3, -1, 66, -69, 64, 94, 66, 119, 74, 117, 66, -93, -41, 51, 66, 120, -86, 52, 66, -117, 80, -103, 66, -92, 19, -29, 66, -61, 81, 77, 66, -62, -6, 13, 66, -92, 75, 3, 66, -100, -109, 24, 66, -116, 16, 64, 66, 71, -85, -97, 66, -84, 14, 119, 66, -103, -9, -32, 66, -103, -119, -124, 66, -86, 61, 122, 66, -118, 23, -64, 66, -94, -38, 85, 66, -88, -92, 35, 66, 83, 71, 62, 66, -109, 93, -14, 66, -114, -71, -88, 66, -83, 119, -116, 66, -71, -123, 102, 66, -95, -77, 6, 66, -113, 71, -12, 66, -125, 97, -93, 66, -126, 88, -31, 66, -99, -121, 66, 66, -106, -85, -47, 66, -110, -100, -48, 66, -106, -15, 67, 66, 121, 34, -43, 66, -98, 62, 119, 66, -120, 68, 72, 66, 110, -27, 107, 66, -109, 124, 86, 66, -106, -21, -96, 66, -125, 11, 66, 66, -86, 98, -56, 66, -102, -103, 106, 66, -89, -3, -125, 66, 119, -14, -6, 66, -80, 115, -122, 66, -79, 90, -26, 66, -107, -60, -44, 66, -96, 48, 15, 66, -74, -88, -30, 66, -69, 56, -115, 66, -118, -86, -69, 66, -125, 51, -103, 66, -92, -64, -1, 66, -119, 53, -32, 66, -72, 28, 8, 66, -121, -81, 8, 66, 103, -101, 122, 66, -96, -60, -73, 66, -88, 102, 15, 66, -118, 127, -58, 66, -123, -37, -87, 66, -60, 19, -48, 66, 117, -78, 53, 66, -88, -42, -114, 66, -88, 104, -128, 66, -111, -122, -62, 66, -115, -20, -92, 66, -111, -112, -66, 66, 106, 75, 94, 66, 116, -125, -68, 66, -77, 93, -112, 66, 106, -50, 65, 66, -128, 32, -114, 66, -127, 94, -124, 66, 120, 12, -7, 66, 86, 94, -86, 66, -123, 124, 34, 66, 114, 93, -11, 66, 96, -82, 40, 66, 123, 59, 10, 66, 125, -57, 91, 66, -93, 52, 83, 66, -100, 37, 94, 66, -109, 55, 86, 66, -112, -2, 97, 66, -117, -15, 43, 66, -103, 36, 79, 66, -97, 87, -90, 66, -77, -117, -116, 66, -121, -29, -83, 66, 121, -16, -1, 66, 127, 113, 29, 66, -73, 34, 18 ], "precision": "FLOAT_32", "root": 0, "canonicalAndNotALeaf": true, "size": 255, "leftIndex": [ 0, 1, 255, 1072824191, 486529471, 132093450, 892461317, 153379350, 35233988, 21617329, 152299184, 16 ], "rightIndex": [ 0, 1, 255, 1054997887, 467661783, 83623930, 637379628, 136901326, 58821506, 541822520, 957235200, 515 ], "nodeFreeIndexes": [], "nodeFreeIndexPointer": -1, "leafFreeIndexes": [], "leafFreeIndexPointer": -1, "partialTreeStateEnabled": true }, "boundingBoxCacheFraction": 0.0, "partialTreeState": true, "seed": -4423608042667571926, "id": 0, "dimensions": 32, "staticSeed": 0, "weight": 0.0, "hasAuxiliaryData": false }, { "version": "2.0", "root": 0, "maxSize": 256, "outputAfter": 32, "storeSequenceIndexesEnabled": false, "centerOfMassEnabled": false, "nodeStoreState": { "version": "2.0", "capacity": 255, "compressed": true, "cutDimension": [ 0, 31, 255, 508926833, 376812577, 1073405887, 803272566, 383352682, 796178119, 752602543, 483882278, 39054066, 867271797, 34768183, 627817038, 462470014, 215063649, 469595442, 514132970, 40872030, 36873947, 581342778, 359845187, 64406823, 107591233, 131545002, 93441401, 748471629, 173630950, 840804685, 401046562, 380335662, 37067065, 749545335, 899780331, 50157867, 935015887, 737232222, 192223463, 484480234, 708107174, 882356085, 203460394, 216864482, 182243245, 23 ], "cutValueData": [ 66, -94, -88, -9, 66, 118, -7, -36, 66, 96, 48, -96, 66, -88, 64, 53, 66, 108, -41, -102, 66, -98, 20, -88, 66, 71, -107, -87, 66, 70, 3, -93, 66, -103, 98, -70, 66, 84, -66, 20, 66, -105, -114, -81, 66, -121, -36, 46, 66, -85, 127, 20, 66, -127, -61, 70, 66, -95, 70, 109, 66, 95, 125, 71, 66, -107, 75, 89, 66, -119, 49, -18, 66, 99, -65, 9, 66, -83, -3, 114, 66, -91, 4, -102, 66, 99, 30, -53, 66, -120, -123, -42, 66, -119, 116, 89, 66, -99, -29, -25, 66, -116, -51, 19, 66, -103, -42, 53, 66, 83, -56, -2, 66, 112, -39, 101, 66, -77, -10, 111, 66, -100, -50, -108, 66, 125, -42, -22, 66, -98, -22, 84, 66, -125, 43, 77, 66, -98, 63, 124, 66, -84, 43, -66, 66, 115, 86, -120, 66, -103, -77, -27, 66, -95, 18, -23, 66, 109, -8, -111, 66, -113, 81, 14, 66, -111, -125, -18, 66, 82, 20, 126, 66, 124, -99, -52, 66, -113, -61, 118, 66, -76, 13, 109, 66, 118, 61, 56, 66, 84, 91, -73, 66, -63, -94, -51, 66, -119, 29, -109, 66, 112, -86, 59, 66, -121, 30, 109, 66, -99, 93, -65, 66, -105, -115, 48, 66, -115, 2, -55, 66, -126, -12, 72, 66, 103, -65, 20, 66, -75, -107, -58, 66, -100, 51, -18, 66, -100, 95, 88, 66, 110, -99, 38, 66, 125, -42, -126, 66, -110, 97, -75, 66, -121, -2, 102, 66, -118, -20, 6, 66, -100, 88, 4, 66, -94, -21, 85, 66, 122, 5, 110, 66, -93, -4, 35, 66, 85, 84, -68, 66, -84, -105, 4, 66, -76, -49, -102, 66, -86, -13, -11, 66, 86, 66, 107, 66, -98, 117, 53, 66, 98, 30, 87, 66, -94, 125, 90, 66, 125, 101, -29, 66, -117, -34, 124, 66, -88, 1, -26, 66, 117, 121, -12, 66, -116, 16, -58, 66, -119, -38, 125, 66, -123, 127, -47, 66, 89, 40, -26, 66, 85, 25, -33, 66, 94, 96, 125, 66, 112, 76, 72, 66, 87, -81, 17, 66, -116, -2, -33, 66, -96, 76, -109, 66, 106, -113, 83, 66, -128, 8, -121, 66, -120, -112, -69, 66, -89, -91, 104, 66, 115, -76, -77, 66, 118, 95, -73, 66, 119, 45, -89, 66, -121, 120, -41, 66, 110, 36, -82, 66, -113, -44, -93, 66, -116, -57, 118, 66, -84, -99, 67, 66, -114, 101, 58, 66, -92, -100, 58, 66, -74, -61, 11, 66, -112, 107, -100, 66, -113, -81, 11, 66, -88, 68, -17, 66, -88, -1, -44, 66, -119, 92, -30, 66, -104, 82, 35, 66, -75, -65, -52, 66, -91, 6, -47, 66, -79, -21, 0, 66, 103, -66, 119, 66, -110, -34, -27, 66, -94, 10, -89, 66, 105, 75, -109, 66, -73, -128, 105, 66, -100, -37, -76, 66, 112, -111, 37, 66, 74, 34, 59, 66, -94, -124, 77, 66, -91, -102, 109, 66, 95, -104, -42, 66, -112, -110, 18, 66, -128, 60, 34, 66, -103, -88, -55, 66, 85, -11, 91, 66, -128, -1, 25, 66, -125, -116, -125, 66, -98, 11, -113, 66, -102, 45, -51, 66, -87, 37, -126, 66, -87, -60, -60, 66, -109, -112, -59, 66, -86, -31, 102, 66, -116, -49, 65, 66, -114, 21, 1, 66, -97, -60, -127, 66, 111, -73, 64, 66, -82, 52, -21, 66, -105, -76, -125, 66, -102, 5, -11, 66, -112, 19, 110, 66, -74, 104, 92, 66, -93, 26, -97, 66, 74, 115, 92, 66, -94, -36, -60, 66, -114, 0, 18, 66, -76, -69, 107, 66, -87, -62, -33, 66, -92, 111, 121, 66, 125, -62, -33, 66, 121, -72, -10, 66, 92, -65, 2, 66, -107, -22, -108, 66, -110, -92, -105, 66, 100, -28, 100, 66, -105, 8, -16, 66, 73, -80, 83, 66, 115, -106, -86, 66, 122, -51, 42, 66, -75, -50, -42, 66, 112, 44, 52, 66, -111, 21, 119, 66, -113, 10, 102, 66, -86, -70, 9, 66, 105, 63, 85, 66, -121, -73, 111, 66, -94, -6, -38, 66, -72, -4, 92, 66, -100, 84, 51, 66, -92, -110, -46, 66, -125, -94, 121, 66, -86, 24, -83, 66, -103, 120, 34, 66, 108, 30, 14, 66, 69, -62, -56, 66, 106, -27, 100, 66, -100, 66, 103, 66, -127, 124, 48, 66, -112, 89, 103, 66, 95, 37, -54, 66, 125, -29, -9, 66, 98, -57, -61, 66, 78, -48, -9, 66, -109, 37, -103, 66, -77, 50, -41, 66, -74, -84, 93, 66, -89, 102, 109, 66, 123, -38, 95, 66, -94, 97, 115, 66, -96, -51, 49, 66, 83, 69, 127, 66, -122, 25, -93, 66, 101, -23, -114, 66, -106, 5, -107, 66, 84, 100, 126, 66, -92, -95, 82, 66, 112, 77, -81, 66, -92, -108, -112, 66, 125, -4, -111, 66, -104, 55, 125, 66, -122, -38, -65, 66, -108, 112, -95, 66, 99, -22, -77, 66, -119, -66, -101, 66, -78, -73, 28, 66, -80, -41, -66, 66, -101, -107, 77, 66, -88, 111, 124, 66, 108, 69, -63, 66, -86, 97, 120, 66, -84, 63, 21, 66, -60, 123, 107, 66, -87, -127, -84, 66, -61, 125, -119, 66, -96, -63, -47, 66, 127, 53, 3, 66, -88, 78, 101, 66, 110, -114, -91, 66, 109, 97, -74, 66, 91, 116, 79, 66, 104, 115, -57, 66, 87, 16, -54, 66, -121, -120, 95, 66, 122, -6, 17, 66, -107, 82, -44, 66, 117, -99, -16, 66, 120, 83, -65, 66, -109, -123, 114, 66, -85, -124, 2, 66, -79, -80, 103, 66, -112, -13, 75, 66, -121, -74, -84, 66, -117, 28, 24, 66, -105, 9, -26, 66, -102, 79, 90, 66, -121, -95, 12, 66, -107, -37, -3, 66, -98, 22, -122, 66, -90, 123, -22, 66, -117, -101, -92, 66, -98, 76, -114, 66, -92, 61, -59, 66, -69, 3, 111, 66, 117, -63, -97, 66, -98, 87, 49, 66, -103, 50, -38, 66, -122, 39, 93, 66, -126, 50, 90, 0, 0, 0, 0, 0, 0, 0, 0 ], "precision": "FLOAT_32", "root": 0, "canonicalAndNotALeaf": true, "size": 253, "leftIndex": [ -1, 1, 255, 1104862922, 1160430947, 602631239, 973599817, 1112041301, 769349326, 601860200, 1016410184, 715592624, 1097691496, 1155855487, 581151415, 985085023, 446 ], "rightIndex": [ -1, 1, 255, 1162261466, 1162084076, 645166417, 1140984142, 725231066, 643375763, 602043649, 1159956112, 774043901, 643311625, 710468725, 586090876, 585972841, 364 ], "nodeFreeIndexes": [], "nodeFreeIndexPointer": 1, "leafFreeIndexes": [], "leafFreeIndexPointer": 1, "partialTreeStateEnabled": true }, "boundingBoxCacheFraction": 0.0, "partialTreeState": true, "seed": 5623816131219899495, "id": 0, "dimensions": 32, "staticSeed": 0, "weight": 0.0, "hasAuxiliaryData": false }, { "version": "2.0", "root": 0, "maxSize": 256, "outputAfter": 32, "storeSequenceIndexesEnabled": false, "centerOfMassEnabled": false, "nodeStoreState": { "version": "2.0", "capacity": 255, "compressed": true, "cutDimension": [ 1, 31, 255, 530380726, 858261536, 498543680, 480659814, 272727935, 742689430, 688554251, 656105280, 524438278, 244566623, 525113071, 2223965, 459501897, 806978539, 380482694, 6057741, 857166212, 519700115, 169625971, 156948473, 368423804, 428012101, 372187640, 262130689, 427730813, 745130370, 481473952, 459312062, 498523251, 702664939, 459256921, 865174426, 635585514, 181906227, 118811245, 394423262, 238339688, 538393390, 852456440, 696402172, 358755081, 385617401, 6349 ], "cutValueData": [ 66, 119, -60, -124, 66, -126, 73, 98, 66, 111, 86, -35, 66, -90, 51, -113, 66, -81, -11, -121, 66, 90, 74, 48, 66, 99, -121, -26, 66, -127, -104, 7, 66, 85, -101, -13, 66, 112, 8, -114, 66, -107, -65, 60, 66, 96, -18, -31, 66, 97, 97, -32, 66, 118, 57, 89, 66, -110, 42, 127, 66, -73, 67, 82, 66, 84, 57, 77, 66, -127, -55, -32, 66, 74, -110, 91, 66, -79, 116, -50, 66, -122, 0, -99, 66, -125, -77, 31, 66, -114, 57, 43, 66, -123, 86, 80, 66, -114, 64, 85, 66, 81, 42, 114, 66, -109, -45, -116, 66, -105, -23, 37, 66, -71, -104, -73, 66, 96, 52, -10, 66, -100, 58, 24, 66, -91, 82, 86, 66, 83, 92, -67, 66, -87, -98, -5, 66, -72, -7, -68, 66, -102, -59, 69, 66, -91, 14, 89, 66, -86, -23, 24, 66, 100, -118, 55, 66, -113, 83, 19, 66, -104, 117, -1, 66, -63, -14, -127, 66, -69, -34, 78, 66, -73, 97, -128, 66, -124, -96, 2, 66, -109, 53, -13, 66, -122, -93, 23, 66, -90, -6, 29, 66, 121, -76, -96, 66, -93, 88, -13, 66, -77, -6, -2, 66, -102, 74, 103, 66, -113, -69, 88, 66, 122, -56, -105, 66, -115, -80, 27, 66, 76, 52, -40, 66, 102, 103, -90, 66, 126, -47, -102, 66, 121, 39, 121, 66, -125, 62, -58, 66, -92, 30, 48, 66, 97, -90, 72, 66, -104, -98, 11, 66, 104, 21, 42, 66, -106, -28, -10, 66, -109, 115, 80, 66, 106, -40, -14, 66, -120, -72, 26, 66, -112, -123, 74, 66, -104, 116, -53, 66, -127, -41, -107, 66, 103, 90, 71, 66, -110, 59, 35, 66, -115, 83, -76, 66, -112, 23, 109, 66, -95, 124, -32, 66, 99, 88, -111, 66, -83, 76, 58, 66, -67, 86, -107, 66, 102, 91, -53, 66, 73, -32, 55, 66, -99, -60, -82, 66, -111, 119, 102, 66, -111, 90, 71, 66, 72, -23, -54, 66, -121, -81, 111, 66, -72, 81, 54, 66, -95, 121, -95, 66, -116, -81, 27, 66, -124, 53, -15, 66, -75, -30, -65, 66, -92, -71, 68, 66, -78, 57, 114, 66, -119, -94, -71, 66, -77, 87, -71, 66, -110, -123, 79, 66, 105, -72, -57, 66, -103, -72, 65, 66, -68, -27, -82, 66, 77, 108, 95, 66, 105, 107, 63, 66, -75, 105, 83, 66, -65, 81, 26, 66, -119, -87, -52, 66, -125, 64, -44, 66, 97, -62, -39, 66, -107, -37, -61, 66, 118, -2, -52, 66, 113, 79, 85, 66, -111, 44, -29, 66, -105, 74, 16, 66, -84, 38, 16, 66, 105, 3, 12, 66, -128, 49, -110, 66, 114, -78, -7, 66, -72, 50, -25, 66, -79, 82, -2, 66, -120, 10, -49, 66, -117, -94, -122, 66, 84, 86, -7, 66, 119, 15, 59, 66, -128, -35, 24, 66, -95, 23, 6, 66, -123, -46, -22, 66, -126, 49, 98, 66, -68, 14, -11, 66, 95, 110, -39, 66, 84, -86, -127, 66, -103, 1, -113, 66, 117, -22, -68, 66, -83, -36, -51, 66, -66, -122, -33, 66, -76, 111, 99, 66, -77, 113, 1, 66, -94, 101, 4, 66, -121, -93, -102, 66, -112, -9, -13, 66, -95, -77, -110, 66, -71, 90, -9, 66, 77, -93, 45, 66, -112, -31, 125, 66, -77, -106, -103, 66, -121, 120, 97, 66, -63, 83, 90, 66, -106, 116, -69, 66, 79, 10, -55, 66, -93, 126, -78, 66, -114, -112, -54, 66, 107, 8, 16, 66, -116, -94, 4, 66, -116, 27, -22, 66, -106, -106, -88, 66, 104, 125, -98, 66, -99, 124, 104, 66, -80, -86, 107, 66, -96, 57, 55, 66, -107, 71, -105, 66, -113, -58, 107, 66, 122, -44, -39, 66, -101, -66, 5, 66, -92, 71, 81, 66, 96, -70, -42, 66, -68, 26, 75, 66, -117, 102, 13, 66, -105, 31, 108, 66, -100, 109, -35, 66, -115, 51, 68, 66, -103, -41, 121, 66, 81, 88, -71, 66, -102, 0, 56, 66, -80, -28, -75, 66, -83, -55, -39, 66, -128, 103, -108, 66, -109, 127, -70, 66, -111, 74, 43, 66, -111, 78, -80, 66, -102, 15, -120, 66, 99, -114, -74, 66, -116, -107, -8, 66, -120, -122, -113, 66, 80, 38, -49, 66, -71, 124, 16, 66, -69, 85, -104, 66, -109, -62, -13, 66, -104, 54, 72, 66, -119, -85, -73, 66, -74, 126, 69, 66, 125, 12, 86, 66, -91, -38, 12, 66, -114, -14, -114, 66, -106, 28, 54, 66, -92, -36, 34, 66, 114, -25, 54, 66, -78, 38, 91, 66, -115, -117, 64, 66, -101, 114, 90, 66, -125, -66, -101, 66, -61, 114, -113, 66, -126, -59, -125, 66, -108, 105, -27, 66, -126, -4, 62, 66, -112, 75, -119, 66, -97, 119, -17, 66, -95, -8, 70, 66, 119, 42, 115, 66, 110, -95, 19, 66, -80, 84, -5, 66, -117, -22, 57, 66, -108, -3, 43, 66, -97, 113, 18, 66, -119, 43, -27, 66, -70, 85, 39, 66, -91, 99, 5, 66, -100, -51, 26, 66, -65, -59, 112, 66, -106, -111, -68, 66, 116, -19, -58, 66, -105, 31, -90, 66, -120, 61, 15, 66, 119, 65, -5, 66, -126, 55, -28, 66, -122, -105, 57, 66, -93, -46, -123, 66, -110, -22, -84, 66, -87, 109, 116, 66, -106, -76, -17, 66, 94, -72, 122, 66, 91, 88, -85, 66, -119, -75, -26, 66, -115, 48, 12, 66, -102, 100, 87, 66, -92, -64, -105, 66, 97, 24, -82, 66, -97, -115, 32, 66, -97, 91, -73, 66, -98, -78, 87, 66, 104, -116, 33, 66, 121, -19, -73, 66, -89, -25, 7, 66, -118, 107, 0, 66, -100, -85, 70, 66, -101, 103, 86, 66, -87, -86, 59, 66, -100, 17, -6, 66, -108, 65, -15, 66, -87, -55, -45, 66, -79, 46, 85, 66, -93, 80, -52, 66, -126, -104, 92, 66, 110, 18, 67, 66, -120, 0, -15, 66, -113, -98, 94, 66, -86, 52, -60, 66, -114, 50, -65, 66, -121, -115, 113 ], "precision": "FLOAT_32", "root": 0, "canonicalAndNotALeaf": true, "size": 255, "leftIndex": [ 0, 1, 255, 1033566207, 7846973, 1067573159, 37132719, 212909427, 549106746, 2877018, 179473574, 8193 ], "rightIndex": [ 0, 1, 255, 1071480575, 185058845, 999947994, 310774698, 198563097, 1880176, 34223184, 172131500, 561 ], "nodeFreeIndexes": [], "nodeFreeIndexPointer": -1, "leafFreeIndexes": [], "leafFreeIndexPointer": -1, "partialTreeStateEnabled": true }, "boundingBoxCacheFraction": 0.0, "partialTreeState": true, "seed": 3899095098967794180, "id": 0, "dimensions": 32, "staticSeed": 0, "weight": 0.0, "hasAuxiliaryData": false }, { "version": "2.0", "root": 0, "maxSize": 256, "outputAfter": 32, "storeSequenceIndexesEnabled": false, "centerOfMassEnabled": false, "nodeStoreState": { "version": "2.0", "capacity": 255, "compressed": true, "cutDimension": [ 0, 31, 255, 654261202, 1005930677, 728332218, 216766382, 858449742, 527600474, 330466978, 526456695, 115145981, 781878902, 976599139, 1002015797, 572987187, 980024407, 325359835, 981135163, 918014794, 712759738, 86695769, 263579555, 865767219, 610786366, 379166434, 597656865, 623486427, 207309618, 213166626, 127002862, 225038326, 749726009, 938727258, 82094013, 259106650, 666086890, 670115431, 51767507, 304123445, 632864178, 99801802, 1009329397, 402628166, 202757719, 959 ], "cutValueData": [ 66, 69, 55, 27, 66, -119, 29, -25, 66, -82, -110, -41, 66, -69, -51, 99, 66, -126, -50, 30, 66, -95, -123, 12, 66, -109, -108, 39, 66, -82, -51, 60, 66, -114, 48, 7, 66, -85, -94, -89, 66, 89, 60, -85, 66, -81, -99, -55, 66, -113, -65, 2, 66, -126, -11, 125, 66, -90, -104, -45, 66, 109, 67, 22, 66, -125, -112, -59, 66, -60, -14, -47, 66, -69, -27, 116, 66, 98, -37, 35, 66, 93, 43, -108, 66, 100, 118, -106, 66, 96, 44, 90, 66, -115, 85, -11, 66, -109, -14, 121, 66, -101, -126, -81, 66, -104, -64, 89, 66, -122, 31, -62, 66, -104, 85, -67, 66, -111, 35, 48, 66, -95, -10, 58, 66, -88, -15, 36, 66, -99, 16, 116, 66, -118, -39, -71, 66, 102, 65, -55, 66, 100, 78, -32, 66, -112, -53, 57, 66, 97, -65, -88, 66, -120, -71, -121, 66, -69, -100, 33, 66, -97, 35, 10, 66, 124, 30, 63, 66, -116, -58, -88, 66, -74, -23, 56, 66, -91, 70, -120, 66, 83, 101, 15, 66, 87, -97, 21, 66, -109, -124, -44, 66, -86, 95, -75, 66, -79, 84, -49, 66, -118, -65, 2, 66, -90, 21, 6, 66, -76, -52, 84, 66, -102, -77, 86, 66, 106, -122, 23, 66, -112, 8, -43, 66, -118, 10, 124, 66, -86, 127, 102, 66, -69, -88, 97, 66, -91, -125, -22, 66, 94, -88, -9, 66, -127, 53, -128, 66, 96, 109, -78, 66, -124, 123, 84, 66, -128, 2, -81, 66, 126, 96, 79, 66, -98, 76, -67, 66, -108, 112, -24, 66, -117, -61, 10, 66, -109, 22, -102, 66, -92, 22, -121, 66, -118, 68, -5, 66, -112, -26, 86, 66, 82, 27, -7, 66, -126, 108, 91, 66, -93, -58, 29, 66, -84, 36, -80, 66, -119, -72, 31, 66, -123, 56, 3, 66, 96, -52, -84, 66, -109, -109, -70, 66, -92, 3, 54, 66, -89, 92, 31, 66, -104, 21, -85, 66, -64, -108, -9, 66, -100, 0, 58, 66, 119, 80, -33, 66, 116, -125, 97, 66, -66, -70, -81, 66, 91, 65, -14, 66, -111, -12, 34, 66, 75, -111, 42, 66, -127, -10, 72, 66, 114, -13, 66, 66, -108, 45, -25, 66, -105, -122, -70, 66, -67, 54, 111, 66, -78, 46, 77, 66, -68, 62, -33, 66, -100, 87, -112, 66, -87, -99, -15, 66, -63, -29, -47, 66, -80, -119, -47, 66, -66, -5, -103, 66, 97, 63, 99, 66, -63, -48, 118, 66, 92, -3, 75, 66, -74, 6, -36, 66, -89, 95, -76, 66, -93, 21, -92, 66, -116, -16, -48, 66, -107, 39, -78, 66, -99, 2, 3, 66, -77, -64, -122, 66, -92, -6, 51, 66, -78, -4, 61, 66, -85, -120, 76, 66, -116, 120, -38, 66, -116, -14, 106, 66, -82, 41, 75, 66, 92, 85, -2, 66, -128, 104, -90, 66, -123, -24, 52, 66, -122, 11, -99, 66, -86, 99, 119, 66, -96, 52, 34, 66, -110, 80, 54, 66, 110, 50, -94, 66, -101, 68, 82, 66, -87, 104, 114, 66, 93, -126, 19, 66, -91, 11, 104, 66, 92, -73, -18, 66, -98, -119, 101, 66, 109, -82, 94, 66, -111, 76, -90, 66, -126, -6, 52, 66, -120, -29, -15, 66, -89, 79, -52, 66, -117, -9, -48, 66, -128, -122, 58, 66, -81, 59, -126, 66, -100, 86, -31, 66, -92, 78, 4, 66, -79, -53, -121, 66, -71, 52, -31, 66, 82, -89, -111, 66, -86, -8, -92, 66, -99, 121, 118, 66, -102, -3, -16, 66, -102, 64, -67, 66, -111, -67, 79, 66, -118, 73, -53, 66, -124, -120, -79, 66, -112, 11, 73, 66, -99, -69, 74, 66, -66, -21, 105, 66, -94, -32, 83, 66, -114, 89, -125, 66, -95, 95, 27, 66, -102, 56, -57, 66, -64, -43, -33, 66, -106, -66, 68, 66, -62, 105, 69, 66, -108, 96, -64, 66, -102, 4, 77, 66, -115, -40, -97, 66, -118, -29, 58, 66, -60, 64, -38, 66, 112, -100, -47, 66, -108, -82, -116, 66, -105, -70, 9, 66, -113, 114, -77, 66, -78, 34, -10, 66, -94, 127, 29, 66, -81, -34, 61, 66, -85, 24, -125, 66, -61, -15, 111, 66, -119, -30, -81, 66, 84, -64, 45, 66, -126, 39, -72, 66, -96, -4, 5, 66, -85, 122, -118, 66, -90, 23, 122, 66, -126, -90, -106, 66, 122, -43, -52, 66, 120, -127, -69, 66, -119, 68, -23, 66, -74, 2, -35, 66, -108, -108, 78, 66, -116, -52, -127, 66, -98, -47, 53, 66, 106, 52, 72, 66, -127, -109, 127, 66, -81, -60, 11, 66, -93, 85, 49, 66, -105, -78, -84, 66, -110, -101, -13, 66, -108, -30, 122, 66, -92, 89, -72, 66, -92, 102, -47, 66, -93, 34, -49, 66, -125, 69, 114, 66, -69, -16, -6, 66, -85, 13, 29, 66, -81, -65, -109, 66, -111, -79, -76, 66, -81, 63, -6, 66, 87, -8, -106, 66, -92, 80, 5, 66, -120, -10, -38, 66, -69, -50, -92, 66, -104, -9, 47, 66, 125, 4, 90, 66, -117, 114, 81, 66, -93, 122, 66, 66, -128, 34, 99, 66, -85, -10, -89, 66, -94, 28, -126, 66, -96, -12, 2, 66, -66, 8, -59, 66, -115, -75, -20, 66, -81, -26, -115, 66, 118, 72, -54, 66, 118, -119, -57, 66, 115, -88, -52, 66, -97, -34, 122, 66, 89, -60, -1, 66, -126, -48, -115, 66, 109, -23, 86, 66, -116, 57, -12, 66, -126, -49, 97, 66, 124, -97, 93, 66, -91, 125, -117, 66, -108, -54, -59, 66, -119, 19, 93, 66, -77, -65, 65, 66, -89, -78, 79, 66, -89, 27, -117, 66, -102, -67, 12, 66, 86, -97, 103, 66, -95, -66, -65, 66, -128, 102, 50, 66, -90, -1, 46, 66, 109, -47, -109, 66, -102, -15, 23, 66, 112, 77, 106, 66, -105, -13, 94, 66, -92, -55, -62, 66, -81, 17, -115, 66, -114, -103, -38, 66, -127, -29, -39, 66, 119, 90, 64, 66, -109, 12, -127, 0, 0, 0, 0 ], "precision": "FLOAT_32", "root": 0, "canonicalAndNotALeaf": true, "size": 254, "leftIndex": [ -1, 1, 255, 1162260734, 1033121303, 975725665, 1099472426, 1097956745, 731607295, 645677852, 1011604586, 716650712, 731549203, 710864306, 712422943, 710349719, 1120 ], "rightIndex": [ -1, 1, 255, 1033120547, 1161730016, 601059770, 1160056957, 1157450056, 774221296, 630621112, 970145554, 587515571, 600459695, 1098281905, 581721952, 581130817, 1336 ], "nodeFreeIndexes": [], "nodeFreeIndexPointer": 0, "leafFreeIndexes": [], "leafFreeIndexPointer": 0, "partialTreeStateEnabled": true }, "boundingBoxCacheFraction": 0.0, "partialTreeState": true, "seed": -7971869639547712875, "id": 0, "dimensions": 32, "staticSeed": 0, "weight": 0.0, "hasAuxiliaryData": false }, { "version": "2.0", "root": 0, "maxSize": 256, "outputAfter": 32, "storeSequenceIndexesEnabled": false, "centerOfMassEnabled": false, "nodeStoreState": { "version": "2.0", "capacity": 255, "compressed": true, "cutDimension": [ 0, 31, 255, 978921285, 994007269, 471914914, 452950318, 129979958, 83547427, 480812537, 174955119, 366916790, 379754205, 70045301, 593870679, 324643107, 82025451, 975680853, 112561835, 240470142, 765319901, 1016262463, 1024589503, 605260962, 593682359, 464855001, 368409769, 223430526, 489252134, 620297641, 254379710, 313257399, 463113138, 648330745, 468004651, 103794910, 339715569, 465107301, 443099255, 328904566, 849832795, 582960731, 98542957, 233622623, 81833694, 189 ], "cutValueData": [ 66, -93, -26, 21, 66, -86, 71, 90, 66, -61, -103, 106, 66, 74, 63, -50, 66, -115, 59, 76, 66, -81, 92, -30, 66, -67, 34, -95, 66, 96, -106, 78, 66, -125, 80, 19, 66, 125, -60, 127, 66, 82, -48, 19, 66, 95, -109, -38, 66, -86, 96, -78, 66, 121, 80, -77, 66, 94, -64, -88, 66, -128, 17, -120, 66, -97, -74, 117, 66, 91, -75, 0, 66, 110, 39, -50, 66, -101, -127, 18, 66, -87, 125, -29, 66, -86, 38, 64, 66, -91, -73, -87, 66, -71, -36, 55, 66, 116, -113, -56, 66, 116, -17, 63, 66, 119, 52, -85, 66, -92, -117, -12, 66, -89, -128, -102, 66, 91, 27, 95, 66, -77, 110, 64, 66, -105, 113, -127, 66, -112, -104, 94, 66, -90, 104, -59, 66, -77, 69, 29, 66, 87, 112, -113, 66, -110, 84, -61, 66, -108, -55, -107, 66, -103, 66, -75, 66, -88, 112, -52, 66, -121, 8, -28, 66, 93, -12, -7, 66, -110, 91, 102, 66, -109, 18, -79, 66, -110, -57, 47, 66, -123, 82, 58, 66, 120, -52, 34, 66, -123, -80, -70, 66, 95, 38, -46, 66, 100, -88, -62, 66, 79, 127, -74, 66, -105, 62, -9, 66, 110, 1, 60, 66, 114, 9, 110, 66, -79, -74, -67, 66, 81, -38, 76, 66, 105, 17, -60, 66, 119, -100, 31, 66, -96, 118, 35, 66, -90, 109, -108, 66, -120, -94, 17, 66, 121, 89, -121, 66, -95, -62, 116, 66, -125, -81, 3, 66, -120, -23, -70, 66, -114, -37, 53, 66, -121, 29, 35, 66, -114, 43, 88, 66, -116, 71, 42, 66, -90, -125, 105, 66, 118, 92, 104, 66, 118, -46, -121, 66, 126, -102, 1, 66, 119, 34, -20, 66, -68, 78, 59, 66, 109, -56, 42, 66, -103, -70, -35, 66, 115, 94, 67, 66, -82, 3, 56, 66, -92, -7, 88, 66, -84, 11, 51, 66, -107, 38, 1, 66, -104, -38, -89, 66, 121, 97, -15, 66, 99, -71, -126, 66, 104, 76, -15, 66, -85, -96, 67, 66, -93, -30, 45, 66, -106, 58, -90, 66, 119, 6, -29, 66, -79, -121, -14, 66, -108, 5, -43, 66, -67, -39, 39, 66, -77, -97, -35, 66, -127, 59, 22, 66, -84, -44, 106, 66, -100, -25, -87, 66, -100, -119, 89, 66, -124, 10, 115, 66, -91, -72, 81, 66, -128, -16, 103, 66, 113, -106, 77, 66, -113, 101, 86, 66, 80, 101, 15, 66, 120, 106, -77, 66, 117, 17, 41, 66, 118, -1, -88, 66, 87, -46, 78, 66, 106, -72, 55, 66, 94, 12, 80, 66, 92, 106, -123, 66, -111, -96, 116, 66, -119, -9, 126, 66, 114, 94, 120, 66, -69, -29, -76, 66, -124, -122, -125, 66, -62, 107, -91, 66, 98, -126, -112, 66, -98, 29, 63, 66, -72, 125, 5, 66, -71, -28, 46, 66, 101, -112, -12, 66, -102, -16, -124, 66, 86, 39, 55, 66, -121, 82, 10, 66, -102, 81, -14, 66, -106, 30, -47, 66, -127, -85, -118, 66, -117, -30, 22, 66, -107, -41, 12, 66, 109, -121, 57, 66, -98, -84, -39, 66, -123, 107, 6, 66, -98, 13, -38, 66, -61, 52, -55, 66, -89, 11, 46, 66, -118, 85, 20, 66, 113, -62, 48, 66, -126, 49, 7, 66, 96, -4, 98, 66, 110, -72, -86, 66, -101, -50, 29, 66, -109, 99, 83, 66, -69, 104, 110, 66, -90, 42, 122, 66, -99, 30, -73, 66, 117, -28, 107, 66, -86, -57, 27, 66, 116, -48, 80, 66, -114, 98, -36, 66, -118, 41, -64, 66, -105, -49, -91, 66, -111, -109, 55, 66, -107, -63, 56, 66, -65, -28, 20, 66, 117, 89, 25, 66, -120, -107, 27, 66, -112, -63, -25, 66, -69, -107, -121, 66, -119, -31, 34, 66, -126, -98, 63, 66, -106, 64, -41, 66, -95, -60, 76, 66, 105, -113, -36, 66, -97, -104, 64, 66, -80, -50, 86, 66, -111, -92, -107, 66, -108, -93, 114, 66, -84, 80, -105, 66, 125, -41, -105, 66, 90, -76, -60, 66, -72, 40, 112, 66, -101, 86, 44, 66, -103, 37, -7, 66, 122, -118, -45, 66, -70, 117, 61, 66, 123, -24, 20, 66, 100, -16, -104, 66, -107, 35, -96, 66, -91, 95, 78, 66, -122, 122, 64, 66, -90, -41, 103, 66, -114, -38, 90, 66, -71, 58, -43, 66, -96, 17, -48, 66, -70, 103, 88, 66, -116, 53, -54, 66, -91, 104, -47, 66, -121, 10, -120, 66, 110, -97, -121, 66, -85, 74, 46, 66, 88, 122, 19, 66, -81, -108, -80, 66, -108, -77, -44, 66, 96, 64, 82, 66, -102, -71, -23, 66, -103, 80, 89, 66, -120, 86, -104, 66, -77, 101, -80, 66, -96, -9, 109, 66, -109, -71, -40, 66, -95, 21, 10, 66, -114, 13, 101, 66, -101, 87, 2, 66, 122, -27, 8, 66, 118, 50, -116, 66, -117, 83, -108, 66, -98, 42, 24, 66, -119, -19, 35, 66, -94, 18, 25, 66, -117, 79, 86, 66, -103, 90, -44, 66, 101, 108, 34, 66, -91, 48, 78, 66, -67, -52, -115, 66, -124, -30, -62, 66, -74, 31, 43, 66, -91, 100, 20, 66, -115, 0, 86, 66, -82, -12, -26, 66, -114, 26, 8, 66, 91, 26, 105, 66, 124, 39, 56, 66, 77, -61, -60, 66, -109, 123, -95, 66, -107, 64, -95, 66, -124, -12, -82, 66, 69, 70, -69, 66, -114, 10, -29, 66, -121, 89, 117, 66, -124, 101, 2, 66, -108, -3, 91, 66, 123, 47, -107, 66, -97, -84, -31, 66, -109, 98, 89, 66, -112, -51, 11, 66, 98, -72, -7, 66, -92, -80, 25, 66, -94, 33, 95, 66, -111, 78, 124, 66, 125, -94, -112, 66, -82, -81, -13, 66, 102, 113, -102, 66, -112, 95, -113, 66, -79, 107, -119, 66, -100, 102, 124, 66, -79, -73, -5, 66, -113, 96, 115, 66, 98, 57, -23, 66, -114, -56, -79, 66, -109, 55, 24, 66, -84, 86, -102, 66, -112, -13, 120, 66, -83, -29, 87, 0, 0, 0, 0 ], "precision": "FLOAT_32", "root": 0, "canonicalAndNotALeaf": true, "size": 254, "leftIndex": [ -1, 1, 255, 768463685, 1028309171, 631350899, 1119188465, 755098891, 597318908, 970174987, 600796250, 754973449, 1155678233, 754991735, 710529692, 970211435, 1094 ], "rightIndex": [ -1, 1, 255, 1157477768, 774832199, 631350935, 1032528356, 1143129229, 716893402, 970855216, 973511581, 1097759536, 968617804, 1097692441, 968551981, 1112217467, 1096 ], "nodeFreeIndexes": [], "nodeFreeIndexPointer": 0, "leafFreeIndexes": [], "leafFreeIndexPointer": 0, "partialTreeStateEnabled": true }, "boundingBoxCacheFraction": 0.0, "partialTreeState": true, "seed": -5616425619850912141, "id": 0, "dimensions": 32, "staticSeed": 0, "weight": 0.0, "hasAuxiliaryData": false }, { "version": "2.0", "root": 0, "maxSize": 256, "outputAfter": 32, "storeSequenceIndexesEnabled": false, "centerOfMassEnabled": false, "nodeStoreState": { "version": "2.0", "capacity": 255, "compressed": true, "cutDimension": [ 1, 31, 255, 510656361, 600278606, 253326725, 595140644, 831584705, 585219198, 728696459, 41477397, 870711578, 44988593, 54787746, 14824058, 750086845, 380106249, 599335497, 180759439, 806212701, 310562823, 403506273, 421878371, 653367040, 357206430, 79900404, 380801954, 404657871, 601496835, 847113032, 878399556, 401445895, 154883848, 26336039, 614143973, 269541196, 369730541, 384029582, 488060360, 7562094, 36883374, 234619561, 832217179, 172982005, 531182728, 2082 ], "cutValueData": [ 66, -116, -46, 3, 66, -120, -122, -64, 66, -59, 109, 80, 66, 69, 4, -20, 66, -72, 29, -42, 66, 125, -26, -90, 66, -104, -102, 56, 66, 110, -19, -125, 66, -125, 28, -21, 66, -94, -94, -57, 66, -91, -110, 9, 66, -104, 16, 53, 66, -89, -41, 61, 66, 108, 110, 29, 66, -80, -56, -81, 66, -104, -104, 42, 66, 124, -56, 101, 66, 85, 96, -64, 66, -70, -36, 110, 66, -67, -36, 27, 66, -64, 124, 75, 66, -72, -85, -58, 66, -69, 30, 77, 66, -117, -100, -79, 66, -98, 53, -70, 66, 113, 96, -64, 66, 88, -7, 67, 66, -71, -119, 53, 66, 91, -115, -23, 66, 127, -59, 86, 66, -72, -15, -35, 66, -105, 93, -77, 66, -71, 66, 99, 66, -83, 93, -28, 66, 100, 92, 8, 66, -102, 15, 74, 66, 78, 90, -98, 66, -124, 65, 3, 66, 83, 3, 23, 66, -124, -53, -26, 66, -66, -38, -52, 66, -109, -120, 109, 66, -87, 27, 37, 66, -105, -54, -42, 66, -81, 91, -112, 66, -61, 48, -121, 66, 98, -85, -64, 66, -127, 15, 109, 66, -92, 117, -65, 66, -94, -47, -19, 66, -110, -67, -20, 66, -111, -12, -13, 66, 107, 95, -67, 66, -113, -108, -86, 66, 78, -127, -89, 66, -108, 25, -26, 66, 116, -42, -25, 66, 92, 119, 45, 66, -83, -44, -24, 66, 81, -60, -47, 66, -74, 81, -119, 66, 95, 37, 65, 66, -73, 29, 95, 66, 86, -30, 44, 66, -116, 96, -70, 66, -110, 109, 109, 66, 93, 33, -48, 66, 108, 1, 73, 66, 115, 98, -107, 66, 104, -31, 26, 66, -121, 46, -126, 66, -118, -50, -6, 66, 94, 76, 62, 66, -85, -51, -26, 66, -79, -64, -51, 66, -127, 51, -93, 66, -127, 57, -35, 66, 91, 12, -21, 66, -118, 113, 75, 66, 99, 56, 106, 66, -108, -124, 77, 66, 126, 123, -75, 66, 124, -41, 17, 66, -86, -99, -123, 66, 115, 76, 125, 66, -77, -31, -7, 66, -117, -14, -50, 66, -114, 94, -26, 66, -101, -109, -12, 66, -119, 36, 80, 66, -99, -34, -65, 66, -108, -98, -97, 66, -76, 62, 31, 66, -75, -81, -4, 66, -61, -81, 6, 66, 119, 122, 23, 66, -123, 99, -60, 66, -107, 55, 23, 66, -75, 28, -26, 66, 110, 22, 5, 66, 87, -120, -24, 66, -115, 83, 112, 66, 105, -28, -108, 66, -123, 77, -2, 66, 111, -122, 66, 66, -93, -65, 116, 66, 88, -57, 60, 66, -86, 27, 64, 66, -115, 93, -100, 66, -105, 21, -51, 66, 104, -68, 46, 66, -64, 116, 3, 66, -117, 74, -58, 66, -81, 8, 15, 66, -94, 55, -78, 66, 121, -108, -86, 66, -88, 106, -45, 66, -81, -2, 44, 66, -113, 86, -123, 66, -91, 65, 40, 66, -115, 13, -3, 66, -83, 54, -42, 66, -75, -68, 40, 66, -114, 69, 118, 66, -77, 126, 109, 66, -120, -24, -105, 66, 112, 64, -73, 66, -123, 78, 59, 66, -126, 56, -56, 66, -121, -120, -61, 66, -122, -59, -39, 66, -86, 94, -118, 66, 107, -123, -50, 66, -119, -29, -122, 66, -109, -104, -40, 66, 79, 127, 115, 66, 86, -24, 3, 66, -113, -88, -21, 66, -74, -117, 60, 66, 98, 109, -22, 66, -75, 22, 90, 66, -77, -18, -68, 66, 91, -115, 70, 66, -98, 99, -24, 66, 94, 45, 55, 66, -117, 107, -45, 66, -84, 95, 82, 66, -109, 112, 27, 66, -93, 65, -124, 66, 105, -51, 112, 66, -93, -67, -117, 66, -127, -31, 64, 66, -66, -128, -70, 66, -125, -47, -9, 66, -121, 59, -3, 66, -110, -70, 29, 66, 85, 58, 84, 66, -127, 98, 57, 66, 106, -120, -47, 66, 125, -104, -63, 66, -87, 51, -34, 66, -88, 5, -121, 66, -116, -116, 108, 66, 96, -109, -102, 66, -122, -54, 29, 66, -69, 90, 39, 66, -102, -71, 106, 66, 101, -108, -6, 66, 93, -68, -48, 66, -72, 107, 52, 66, 100, -81, -42, 66, -123, -70, -29, 66, -110, 9, -82, 66, -65, 12, -119, 66, 119, 55, -21, 66, 115, 18, 24, 66, -125, 34, 28, 66, -101, -96, -108, 66, -126, -91, -92, 66, -91, 41, 97, 66, -117, 93, 70, 66, 106, -67, 53, 66, -127, 77, 29, 66, -128, -10, -55, 66, 85, -6, -14, 66, 115, -88, -116, 66, 89, -110, -95, 66, -85, -71, -27, 66, -122, -85, -92, 66, -84, -86, -55, 66, 102, 126, -46, 66, -125, -39, 17, 66, -118, 63, 116, 66, 120, -36, -123, 66, 122, -92, 96, 66, -87, -126, -22, 66, -98, 61, 68, 66, -102, 115, -15, 66, -81, 53, -70, 66, -127, 93, -42, 66, -83, 55, -42, 66, -125, -21, 47, 66, -75, 110, 73, 66, 111, 33, -66, 66, -124, -72, -55, 66, -101, 12, 72, 66, 76, -24, -89, 66, 116, -81, -60, 66, 104, -115, -102, 66, 89, 110, -6, 66, 116, 88, -28, 66, -93, 44, -64, 66, -81, -128, -76, 66, -68, -75, 117, 66, -97, 75, -1, 66, -79, 15, 29, 66, -83, 51, 0, 66, 121, 7, 66, 66, -80, -49, 9, 66, 105, -66, -96, 66, -102, 103, -87, 66, -95, 83, 83, 66, -107, -14, 123, 66, 95, 13, -63, 66, 76, -48, 74, 66, -63, -41, -2, 66, -65, -67, -112, 66, -112, 52, 123, 66, -96, -70, -16, 66, -75, -70, -55, 66, -71, -126, -122, 66, -90, 26, -49, 66, -126, 38, 32, 66, -102, -29, -77, 66, 112, 79, 29, 66, 120, 5, 14, 66, -127, -35, -13, 66, 107, -29, -92, 66, -127, -94, 51, 66, 121, -88, -120, 66, -103, 76, -72, 66, -126, -44, -62, 66, -121, -2, 118, 66, -120, 65, -41, 66, -100, -97, 33, 66, -120, -82, 36, 66, -67, 32, -50, 66, -94, 122, -48, 66, -101, -12, 50, 66, -102, -15, 38, 66, -117, -37, 14, 66, -86, -126, 71, 66, -81, 7, -126, 66, -116, 69, -63, 66, -78, -41, -94 ], "precision": "FLOAT_32", "root": 0, "canonicalAndNotALeaf": true, "size": 255, "leftIndex": [ 0, 1, 255, 790626295, 679477087, 412506246, 950297478, 705039134, 736271007, 176986631, 138021382, 2418 ], "rightIndex": [ 0, 1, 255, 1041231855, 961487323, 419388414, 203088578, 563888667, 712115865, 449557004, 685772805, 289 ], "nodeFreeIndexes": [], "nodeFreeIndexPointer": -1, "leafFreeIndexes": [], "leafFreeIndexPointer": -1, "partialTreeStateEnabled": true }, "boundingBoxCacheFraction": 0.0, "partialTreeState": true, "seed": -7146792820767120252, "id": 0, "dimensions": 32, "staticSeed": 0, "weight": 0.0, "hasAuxiliaryData": false }, { "version": "2.0", "root": 0, "maxSize": 256, "outputAfter": 32, "storeSequenceIndexesEnabled": false, "centerOfMassEnabled": false, "nodeStoreState": { "version": "2.0", "capacity": 255, "compressed": true, "cutDimension": [ 1, 31, 255, 233499737, 158994418, 628395225, 752668636, 285752461, 857045498, 516575438, 605536352, 399910403, 134305809, 406637502, 120699630, 764732399, 9847357, 369440076, 274108631, 115797896, 417072363, 258526687, 67175843, 650792399, 234580157, 267144489, 392867647, 38134234, 523793265, 230238218, 859788879, 761518583, 34225241, 392417407, 377993091, 593385661, 314056312, 746276621, 498382796, 402814384, 857345902, 33761211, 13348931, 32970897, 65301105, 7747 ], "cutValueData": [ 66, -74, 81, 69, 66, -106, 91, 98, 66, -119, 125, 113, 66, -81, -73, 116, 66, -118, 54, -23, 66, 94, -117, 25, 66, -88, 4, 80, 66, 123, 112, 11, 66, 84, -79, -116, 66, -123, 61, -42, 66, -99, 25, -1, 66, -97, -41, -98, 66, -123, -46, 56, 66, -100, -74, -90, 66, -75, -93, 120, 66, -77, -83, -70, 66, 100, 99, 90, 66, -70, 95, 84, 66, 90, 106, -94, 66, 81, 1, 26, 66, -106, -41, 65, 66, 126, -124, 65, 66, 118, -75, -97, 66, -92, -54, 30, 66, -92, -106, 93, 66, 94, -81, 71, 66, 108, -66, 97, 66, -104, 39, -106, 66, -60, -62, -112, 66, -59, -17, -23, 66, -119, -74, 86, 66, -93, -61, -43, 66, 127, -106, -108, 66, -87, 124, 120, 66, -123, 60, -106, 66, -63, 121, 94, 66, -115, 98, 47, 66, -71, 112, 80, 66, -71, 54, -27, 66, -91, -127, 113, 66, -116, 39, -73, 66, 120, 87, -96, 66, -72, -106, -104, 66, -123, -51, 105, 66, 100, -36, 110, 66, 84, -83, 60, 66, -91, -128, 108, 66, -106, -16, 118, 66, -107, -28, -6, 66, -92, 23, -124, 66, -77, 114, -46, 66, -106, 58, 109, 66, 100, -11, -29, 66, -86, 111, 84, 66, -115, -77, -39, 66, -123, 54, 70, 66, -81, 113, 60, 66, -105, -96, 117, 66, -80, -3, -105, 66, -107, 64, 59, 66, -127, 27, -67, 66, -87, 24, -13, 66, 115, -54, -125, 66, -81, 62, 21, 66, -124, -84, 94, 66, -98, -117, -93, 66, -113, -34, 29, 66, -100, -48, -6, 66, -120, -104, 20, 66, -118, -90, 69, 66, 127, 119, 64, 66, -112, 18, 42, 66, -121, 44, 90, 66, 120, 34, -15, 66, -91, 51, -92, 66, -71, -52, 18, 66, -128, -100, 22, 66, -77, -31, 65, 66, -122, -10, 16, 66, -106, 62, 19, 66, 121, 104, 112, 66, -118, 76, -102, 66, -84, -42, 44, 66, -103, 114, 37, 66, -82, -105, -54, 66, -90, -24, 119, 66, -127, 107, -88, 66, -116, 127, -67, 66, -95, 80, 112, 66, -107, 70, 27, 66, 96, 25, 93, 66, -98, -100, 78, 66, -108, 54, -64, 66, -108, 49, 121, 66, -126, -78, -87, 66, 121, -95, 92, 66, -123, -56, -46, 66, -77, -123, -22, 66, -121, -86, 31, 66, 96, 101, 48, 66, -73, 122, 46, 66, 97, 1, 0, 66, -109, -87, -19, 66, -72, 3, -86, 66, -108, -64, 85, 66, 107, -84, 3, 66, -126, -13, -22, 66, -124, 85, 42, 66, 117, -2, 90, 66, -100, -47, -25, 66, -94, -21, 108, 66, -100, 28, 8, 66, -84, -84, -19, 66, -101, -55, 65, 66, -89, -117, 120, 66, -72, 72, -6, 66, -94, -120, 26, 66, 109, 24, 61, 66, -114, 29, 10, 66, 121, 65, -43, 66, -109, 62, 27, 66, -105, -89, -31, 66, 125, 114, 116, 66, -107, 60, -7, 66, -81, 118, -89, 66, -68, 10, -123, 66, 97, -63, 104, 66, -126, 1, 66, 66, 97, 103, 95, 66, -63, -119, -4, 66, -89, -90, -54, 66, -108, -112, -41, 66, -109, 72, 80, 66, -91, -6, 2, 66, -74, -103, 58, 66, -92, 25, 19, 66, 87, -78, 8, 66, 90, -41, -109, 66, -114, -67, -98, 66, -126, 116, -71, 66, -86, 16, 117, 66, -80, -12, -67, 66, -114, -79, -93, 66, -111, 5, -104, 66, -96, 44, 24, 66, -65, -1, -75, 66, 119, 81, -57, 66, -84, 53, 100, 66, -70, -84, 58, 66, 119, 106, 123, 66, 85, -29, -26, 66, -94, 17, 68, 66, -97, -61, -108, 66, -72, 8, 7, 66, -113, -38, 78, 66, -100, -119, 40, 66, -108, -15, -117, 66, -95, -14, -48, 66, 83, -32, -64, 66, 120, 50, -122, 66, -115, 48, -46, 66, -127, -69, 37, 66, -83, -72, -56, 66, -73, 99, -58, 66, -90, -85, 105, 66, -116, -90, -12, 66, 87, -123, -81, 66, -120, -80, 35, 66, -80, -61, 28, 66, 123, 36, -128, 66, -97, -47, 47, 66, 92, -65, 105, 66, -94, -95, -23, 66, -102, -56, 114, 66, -108, -21, 23, 66, -128, 61, 127, 66, -78, 20, 14, 66, -102, -68, -27, 66, 112, -97, -3, 66, -110, 5, -99, 66, -115, 78, -74, 66, -62, -61, 95, 66, -118, 113, -95, 66, -101, -32, 105, 66, 86, -115, 81, 66, -126, 59, 101, 66, 81, 72, -97, 66, -110, -79, -88, 66, -70, -38, 123, 66, -113, 37, 6, 66, -105, 48, -51, 66, -106, 22, 102, 66, -124, -48, -25, 66, -109, -100, 53, 66, -100, 19, 53, 66, -106, 97, -107, 66, -118, 126, -80, 66, -110, -127, -23, 66, -117, 107, -34, 66, -99, 96, -106, 66, 126, 121, -1, 66, -91, -38, -1, 66, -85, 86, -39, 66, -103, 10, -115, 66, 100, -53, -2, 66, -111, -113, -70, 66, -112, 112, -59, 66, -118, -25, 75, 66, -105, 120, -28, 66, 76, -97, 107, 66, -108, -68, -47, 66, -113, -88, 25, 66, 118, 46, -3, 66, -68, 97, -94, 66, 118, 31, 77, 66, 115, 98, 35, 66, -101, -87, 81, 66, -83, -125, 95, 66, -75, 17, -42, 66, 112, 66, -79, 66, 122, -51, -95, 66, -71, 100, 17, 66, 120, 127, -31, 66, -106, 96, 100, 66, -89, 54, 56, 66, -119, 42, -111, 66, -107, 57, 79, 66, 108, 120, -101, 66, 121, -4, 56, 66, -87, -100, -29, 66, -127, 9, -18, 66, -106, -61, 122, 66, -109, -33, 127, 66, -99, 46, -117, 66, -125, -76, 75, 66, 126, 73, -26, 66, -127, -63, 87, 66, -120, -16, -90, 66, 111, 82, 60, 66, -116, 102, -56, 66, 106, 75, -80, 66, -66, 15, 64, 66, 98, 38, 73, 66, 109, 37, -108, 66, -126, 74, -40, 66, 98, 99, 74, 66, -98, -67, -1, 66, -81, 17, -34, 66, -128, 84, -15, 66, -92, -33, -119, 66, 118, -26, 115, 66, -116, -115, -5, 66, -125, -5, -122, 66, -120, 29, 99, 66, -82, 64, -30 ], "precision": "FLOAT_32", "root": 0, "canonicalAndNotALeaf": true, "size": 255, "leftIndex": [ 0, 1, 255, 1048307455, 905133887, 557349561, 356481149, 997778536, 38684738, 359091074, 25198865, 4248 ], "rightIndex": [ 0, 1, 255, 243250943, 98823801, 825786037, 3135615, 808137098, 312601984, 93592132, 545771575, 4124 ], "nodeFreeIndexes": [], "nodeFreeIndexPointer": -1, "leafFreeIndexes": [], "leafFreeIndexPointer": -1, "partialTreeStateEnabled": true }, "boundingBoxCacheFraction": 0.0, "partialTreeState": true, "seed": 6408488327328865688, "id": 0, "dimensions": 32, "staticSeed": 0, "weight": 0.0, "hasAuxiliaryData": false }, { "version": "2.0", "root": 0, "maxSize": 256, "outputAfter": 32, "storeSequenceIndexesEnabled": false, "centerOfMassEnabled": false, "nodeStoreState": { "version": "2.0", "capacity": 255, "compressed": true, "cutDimension": [ 0, 31, 255, 1031133617, 338291887, 1066871715, 201039099, 45476909, 366836685, 896216501, 1029793774, 896185561, 175111619, 590053042, 251432098, 761771375, 111523962, 912841061, 393793337, 1068963422, 182285743, 303728743, 69990621, 919905963, 912324141, 1033631475, 314153517, 977255359, 127203582, 863567834, 747682889, 366464319, 652791394, 498297426, 576788985, 919709037, 256986938, 370448213, 783362081, 268396485, 714987482, 789636803, 585188839, 207440957, 884976566, 1017 ], "cutValueData": [ 66, -77, 15, -76, 66, 125, 86, 92, 66, -108, -92, -20, 66, -72, -78, -29, 66, 108, -83, -35, 66, -112, -84, -28, 66, -80, 61, -97, 66, -115, -38, 101, 66, 76, -107, -108, 66, 105, 108, -4, 66, -120, -31, -65, 66, -68, -59, -115, 66, -91, 44, -66, 66, 90, 4, -56, 66, -97, 104, 122, 66, -117, 19, -91, 66, 101, -5, -102, 66, -117, 5, 33, 66, 125, 76, 81, 66, -89, -128, 11, 66, -106, 35, -56, 66, 116, 123, -10, 66, 115, -79, -79, 66, 78, 72, -32, 66, -116, -49, -37, 66, -93, -30, -68, 66, -118, 127, -107, 66, -127, -121, -15, 66, -99, 87, 89, 66, -118, 4, -104, 66, 84, 71, 42, 66, -90, 13, 3, 66, 96, 110, 93, 66, 111, -117, -120, 66, -118, 4, 75, 66, 114, 127, 114, 66, 91, 81, 4, 66, -119, -20, 5, 66, -109, -102, -6, 66, -88, -85, 19, 66, -89, 112, -27, 66, -83, 75, 12, 66, 80, -47, 16, 66, -125, 5, 114, 66, -114, -96, -35, 66, -99, -86, 7, 66, -85, 99, -67, 66, -91, 126, -21, 66, -76, -57, -45, 66, -121, 19, -13, 66, 99, 21, -61, 66, 94, 27, -62, 66, 82, 48, 105, 66, -121, 42, 120, 66, -116, -38, 48, 66, 90, 95, -19, 66, -116, 84, -98, 66, -71, 102, -76, 66, -118, -127, 86, 66, 101, 89, -48, 66, -124, 19, 106, 66, -128, 69, -104, 66, -74, 12, 7, 66, 101, -95, 30, 66, -121, 59, 11, 66, 124, 95, 91, 66, -127, -53, -56, 66, -67, -58, 65, 66, -93, -1, 24, 66, -78, -128, 106, 66, -78, 109, -100, 66, 125, 11, -68, 66, -126, -114, 63, 66, -102, -99, -98, 66, -112, 85, 72, 66, -86, -78, -127, 66, -70, -18, 47, 66, -105, -91, -31, 66, -81, 97, -37, 66, -91, -125, -106, 66, 124, -75, -26, 66, -107, 92, -120, 66, -102, 19, 127, 66, -85, 112, 15, 66, -111, 37, 45, 66, -96, -21, 77, 66, -122, -23, 90, 66, -107, -23, 28, 66, -111, 65, -49, 66, -103, 21, -9, 66, -87, -65, -48, 66, -101, -76, 41, 66, -80, -54, 125, 66, -96, -61, -24, 66, -102, 99, 45, 66, -95, -102, 29, 66, -95, -4, -33, 66, -123, 52, 123, 66, -94, -18, 52, 66, -78, 59, -37, 66, -86, 9, -125, 66, -91, 41, -77, 66, -115, -103, -62, 66, -84, 43, -4, 66, 86, -125, -127, 66, -105, 93, -74, 66, -112, -30, 71, 66, -122, -24, -95, 66, -90, -4, -112, 66, -120, -77, -104, 66, -103, 89, -39, 66, -75, -113, 113, 66, 98, -50, 29, 66, -123, -117, -103, 66, -100, 96, -5, 66, -114, 99, -25, 66, -96, 76, -34, 66, -84, 19, -11, 66, 102, -102, -1, 66, -91, 78, 102, 66, -113, -89, -87, 66, 98, 39, 114, 66, -100, 36, -86, 66, 97, -53, 18, 66, 109, 18, -75, 66, -116, -20, 45, 66, -113, -51, 52, 66, 113, -81, -105, 66, 127, 41, -39, 66, -87, -124, 74, 66, -117, -68, -18, 66, -116, 36, 65, 66, -116, 98, -58, 66, -83, 126, 29, 66, 101, 81, -77, 66, 119, 69, -7, 66, 100, 72, -99, 66, 88, 44, -4, 66, -97, -93, -36, 66, -117, -111, -71, 66, 111, 79, 100, 66, 96, 39, 1, 66, -90, -115, 23, 66, 121, 19, -64, 66, -114, 63, 53, 66, -110, 52, -78, 66, -119, -17, 109, 66, -110, -59, 88, 66, 120, -42, 90, 66, -110, 76, -26, 66, -65, -97, -50, 66, 88, 50, -100, 66, 101, 18, -107, 66, -113, -56, 125, 66, -96, -17, -123, 66, -88, -109, 51, 66, 106, 38, -101, 66, -101, -72, 98, 66, -83, 65, 16, 66, -100, 63, -40, 66, 90, 114, 122, 66, -96, -32, 67, 66, -105, -14, 11, 66, 116, 19, 8, 66, -112, -77, 36, 66, 127, 123, 31, 66, 96, 75, 106, 66, -115, 71, -15, 66, -70, 47, -38, 66, 114, -125, -1, 66, -125, -24, -117, 66, -117, -53, 89, 66, -97, -39, -97, 66, -91, 125, -9, 66, -87, -57, -10, 66, -112, 87, -113, 66, -113, -41, 25, 66, -96, -69, -1, 66, -97, 31, -118, 66, -88, -56, 54, 66, -114, -101, 112, 66, -98, 72, 25, 66, -98, -18, 28, 66, 106, 39, 73, 66, -113, -76, 17, 66, 103, -90, -79, 66, -124, 17, 34, 66, 68, 75, -15, 66, 122, -92, -122, 66, -67, 98, 30, 66, -91, 69, -19, 66, 102, -49, 42, 66, -75, -116, -124, 66, -125, -90, 19, 66, -100, 97, 79, 66, 109, -67, -59, 66, -108, -46, 9, 66, -96, -40, 83, 66, -105, 81, 123, 66, -110, -94, 96, 66, -127, -109, -94, 66, -113, -110, -65, 66, -121, 127, 49, 66, 111, -24, 55, 66, -76, -98, 50, 66, 112, -4, 29, 66, -74, 110, -127, 66, -115, 59, 14, 66, 116, 56, 3, 66, -95, 36, -59, 66, 81, -73, 48, 66, 90, -12, 125, 66, 97, -48, -17, 66, -62, -111, 76, 66, 84, -115, 91, 66, -89, 112, -19, 66, -102, 87, -114, 66, -123, -25, 121, 66, 89, 120, 86, 66, 125, -35, -113, 66, 110, -123, -105, 66, 118, -38, -18, 66, -73, 61, -63, 66, -76, -45, 39, 66, 125, -103, -114, 66, -113, -74, 124, 66, -111, -34, 58, 66, -69, -36, -61, 66, -83, -89, 67, 66, 118, -89, -8, 66, -91, 26, -34, 66, -89, -13, 103, 66, -120, 61, -56, 66, -65, 89, -57, 66, 115, 88, 31, 66, -112, 94, -69, 66, 102, -77, -64, 66, -114, -91, -106, 66, -69, -5, 21, 66, -98, -79, -83, 66, -66, 85, -5, 66, -107, -90, 69, 66, 93, -68, 58, 66, -94, -118, -42, 66, 122, -56, -58, 66, -71, -100, 94, 66, -70, -117, -34, 66, -86, -120, -83, 66, -114, -115, 65, 66, -122, 39, -37, 66, -118, 127, -43, 66, -104, -36, 18, 66, 122, 62, 88, 66, -105, -38, -123, 0, 0, 0, 0 ], "precision": "FLOAT_32", "root": 0, "canonicalAndNotALeaf": true, "size": 254, "leftIndex": [ -1, 1, 255, 1162254905, 1160646650, 1026664226, 1013988659, 645103511, 975548491, 1026012500, 710883986, 767669444, 724649296, 581197193, 639058531, 731003657, 1174 ], "rightIndex": [ -1, 1, 255, 1018595249, 1162253933, 645619136, 760429858, 595567880, 1011678901, 1012188524, 582970849, 724797059, 630575401, 753554141, 1155154837, 625975168, 1120 ], "nodeFreeIndexes": [], "nodeFreeIndexPointer": 0, "leafFreeIndexes": [], "leafFreeIndexPointer": 0, "partialTreeStateEnabled": true }, "boundingBoxCacheFraction": 0.0, "partialTreeState": true, "seed": 8378244044999309591, "id": 0, "dimensions": 32, "staticSeed": 0, "weight": 0.0, "hasAuxiliaryData": false }, { "version": "2.0", "root": 0, "maxSize": 256, "outputAfter": 32, "storeSequenceIndexesEnabled": false, "centerOfMassEnabled": false, "nodeStoreState": { "version": "2.0", "capacity": 255, "compressed": true, "cutDimension": [ 1, 31, 255, 628773447, 523117802, 370389849, 517791936, 26743225, 857227540, 253775774, 411967183, 614660847, 543272654, 119639168, 600774267, 490466084, 257461899, 865254068, 266169102, 194334916, 758179408, 114518120, 628919913, 605158240, 36659517, 310705840, 846445514, 188402781, 816839279, 249904951, 356210919, 76512078, 427778890, 123316813, 266176825, 509054253, 491918261, 828330153, 276432827, 710019274, 127807641, 147226708, 13057635, 842276530, 295266369, 1939 ], "cutValueData": [ 66, -77, 87, -48, 66, -109, -66, 37, 66, -117, 27, 72, 66, 122, 46, -123, 66, -59, 98, -22, 66, -93, -64, 100, 66, -111, 24, -71, 66, -121, -64, 123, 66, -116, 22, 34, 66, -106, -46, 2, 66, -119, -100, 64, 66, -102, -71, -28, 66, -63, -40, -23, 66, -114, 42, -83, 66, -71, -27, 97, 66, 122, -78, 77, 66, -105, -31, 22, 66, -124, -116, -29, 66, -101, 123, -59, 66, -119, 17, 82, 66, -74, -72, -109, 66, -110, 121, -126, 66, 121, 56, -115, 66, -93, -19, -88, 66, -78, -95, -108, 66, -61, -31, 14, 66, -116, -103, -34, 66, -68, 101, 90, 66, -96, 61, -32, 66, -84, -53, 59, 66, 81, 25, -46, 66, -115, -87, -123, 66, -91, 21, -105, 66, -106, -127, 51, 66, -73, -4, -91, 66, 114, -64, 28, 66, 109, 21, -104, 66, -121, -36, -74, 66, -88, -79, 106, 66, -107, -54, 110, 66, 86, 87, -80, 66, -81, 102, -35, 66, -83, -123, -39, 66, -100, 8, 109, 66, 103, -5, -117, 66, -95, -68, -61, 66, -101, 5, 43, 66, 112, -29, 54, 66, 100, 19, -66, 66, 78, 71, -114, 66, -93, 35, -21, 66, -80, -21, 77, 66, -114, -96, -7, 66, -94, -22, -30, 66, 108, 41, -85, 66, 116, 26, -112, 66, 105, -68, -15, 66, -81, 60, -13, 66, -103, -112, 48, 66, 80, -5, -106, 66, -118, 29, -111, 66, 73, 56, -65, 66, -126, 56, 50, 66, -103, -96, 5, 66, -104, -15, 38, 66, -122, 109, 13, 66, 96, 110, -91, 66, -71, -88, 58, 66, -107, -46, -88, 66, -89, -111, 88, 66, -120, -110, -11, 66, -106, -79, -27, 66, -124, -115, -48, 66, -96, 82, -90, 66, -107, 1, -118, 66, 111, 108, -107, 66, -106, 47, -94, 66, -75, -96, -46, 66, -109, 41, 84, 66, -101, 29, -46, 66, -99, 82, 37, 66, 115, -9, -29, 66, -128, 63, -72, 66, -68, -22, -103, 66, 120, -94, -3, 66, 108, -125, 74, 66, -93, 79, -107, 66, -102, -77, -21, 66, -120, 107, 13, 66, -89, -10, 83, 66, 98, -26, -86, 66, -118, -110, 113, 66, -72, 62, 65, 66, -100, 33, -121, 66, -127, -119, -57, 66, -127, 12, -103, 66, -103, -88, -99, 66, 74, -60, 79, 66, -102, -6, -12, 66, 78, -113, 68, 66, -95, 69, -128, 66, -120, 15, -2, 66, 125, -125, -18, 66, -99, -40, -6, 66, 91, 105, -85, 66, -74, 41, 67, 66, -122, 87, 107, 66, 109, -79, 117, 66, -99, 18, -56, 66, 105, 126, 67, 66, -86, -109, 13, 66, -75, 76, 94, 66, -117, 47, -59, 66, 121, 44, 113, 66, -109, 21, 57, 66, -103, -73, -128, 66, 107, 57, 81, 66, -74, -10, 59, 66, -111, 56, 77, 66, -99, 37, -102, 66, -85, -43, -101, 66, 110, -49, 63, 66, 84, 41, -48, 66, -81, -69, -67, 66, -88, 95, -89, 66, 84, -95, 100, 66, -123, 92, -99, 66, -119, -75, 5, 66, -101, 86, 97, 66, -70, 13, -112, 66, -94, -10, -6, 66, -115, 60, 43, 66, -114, 12, 87, 66, 84, 1, 75, 66, -104, -62, -64, 66, 125, -18, 46, 66, -93, 65, 79, 66, -100, -8, 92, 66, -90, -65, -66, 66, -123, 91, -87, 66, -64, -114, 51, 66, 110, -18, -48, 66, 115, 32, 122, 66, -92, 92, -58, 66, -98, 88, 14, 66, -86, 113, 84, 66, -97, -75, 38, 66, -94, -48, -44, 66, -101, 24, 83, 66, -94, -114, -57, 66, -85, 126, 39, 66, -126, -97, 99, 66, -95, -28, 46, 66, -58, -35, 41, 66, -118, 106, 25, 66, -91, 5, 64, 66, -94, -3, 9, 66, 87, -17, -93, 66, -109, -56, 57, 66, 111, 37, -34, 66, -108, 24, 43, 66, -67, 6, 80, 66, 96, 45, -94, 66, 108, 51, 59, 66, 99, -51, 15, 66, -103, -84, -69, 66, -127, 93, 35, 66, -95, 112, 95, 66, -88, 84, 124, 66, -68, -99, 100, 66, -86, 110, -38, 66, -83, 0, -17, 66, -115, -13, 38, 66, 102, 94, 2, 66, 99, 102, 7, 66, -65, 74, -5, 66, 88, -22, 47, 66, -74, 2, 75, 66, -62, 95, 103, 66, -113, -90, -5, 66, 101, -85, 117, 66, -104, -107, -26, 66, -81, 13, -99, 66, -94, -38, 75, 66, 93, -126, -33, 66, -84, -63, -84, 66, -81, -8, 47, 66, -93, 108, -11, 66, -94, -113, 116, 66, -75, -121, 44, 66, -125, 37, 104, 66, 122, -97, 47, 66, 110, 94, 97, 66, -124, 96, 97, 66, 93, 49, 87, 66, -124, -75, 27, 66, -125, -4, -120, 66, -122, -102, 35, 66, 70, 44, -19, 66, -128, 47, -89, 66, -65, 7, 76, 66, -122, -48, -55, 66, -92, -53, 96, 66, -81, -36, -89, 66, -122, 120, -72, 66, -113, -120, -102, 66, -118, -128, -65, 66, 96, 104, -92, 66, -120, -14, 127, 66, -107, -44, -74, 66, -107, 96, 9, 66, -124, -5, 104, 66, -108, 81, -86, 66, -101, -102, 0, 66, -113, -94, -97, 66, -94, -25, -113, 66, -95, -108, 120, 66, -79, -35, 35, 66, -69, 43, 33, 66, -89, 44, -80, 66, 121, -22, -64, 66, 107, 107, 109, 66, -127, -32, 113, 66, -96, -61, -92, 66, -90, 34, -105, 66, -118, 33, 112, 66, 110, 48, -42, 66, -95, 57, 122, 66, 76, 90, -48, 66, -76, -62, -46, 66, 126, -90, -99, 66, 82, 98, -79, 66, 96, -24, -52, 66, 82, -2, 34, 66, -106, -86, 77, 66, -128, 107, 54, 66, -118, 111, -94, 66, -120, 34, 27, 66, 87, -35, -65, 66, -91, 55, 120, 66, -80, 124, 119, 66, -101, 104, 55, 66, -95, -115, -61, 66, -98, 7, -32, 66, 109, -19, -86, 66, -95, -16, -85, 66, -113, -122, 28, 66, 93, 118, -118, 66, 90, -20, 78, 66, 90, 65, 84, 66, -72, -15, -28, 66, 117, -110, -20, 66, -106, 53, -9, 66, 118, -19, -5, 66, -108, 113, -75 ], "precision": "FLOAT_32", "root": 0, "canonicalAndNotALeaf": true, "size": 255, "leftIndex": [ 0, 1, 255, 935327743, 199668476, 818660543, 976326301, 34955939, 316812057, 612405004, 738726841, 36 ], "rightIndex": [ 0, 1, 255, 904916975, 1072630527, 309256703, 576437929, 538206497, 25306769, 296010768, 364118708, 6444 ], "nodeFreeIndexes": [], "nodeFreeIndexPointer": -1, "leafFreeIndexes": [], "leafFreeIndexPointer": -1, "partialTreeStateEnabled": true }, "boundingBoxCacheFraction": 0.0, "partialTreeState": true, "seed": -4725511223573268555, "id": 0, "dimensions": 32, "staticSeed": 0, "weight": 0.0, "hasAuxiliaryData": false }, { "version": "2.0", "root": 0, "maxSize": 256, "outputAfter": 32, "storeSequenceIndexesEnabled": false, "centerOfMassEnabled": false, "nodeStoreState": { "version": "2.0", "capacity": 255, "compressed": true, "cutDimension": [ 1, 31, 255, 723406712, 463420568, 836352260, 142147135, 391259158, 742252631, 262160029, 528972865, 114759685, 174013496, 769258, 184775505, 47955563, 48818671, 803157143, 854078044, 169185932, 126833083, 169765394, 177023887, 382033702, 534393311, 426718093, 655907919, 603617051, 423890693, 187606437, 396843701, 154402857, 285894412, 853007638, 814257351, 164096517, 115263279, 652047690, 241228250, 634709117, 849127301, 291115295, 59755515, 506144251, 734488252, 13296 ], "cutValueData": [ 66, -71, -54, -8, 66, -83, -29, 30, 66, -75, -45, -2, 66, -124, -110, -108, 66, -66, 4, 6, 66, -66, -103, 7, 66, -115, -105, -115, 66, 125, 117, -9, 66, -65, -57, 123, 66, -114, 113, -18, 66, -103, -11, 54, 66, -65, 86, -110, 66, -115, -50, -22, 66, 97, 17, 26, 66, -75, 53, 49, 66, 124, -111, -58, 66, -107, 127, -60, 66, 127, 48, 42, 66, 107, 101, 127, 66, -106, 123, -91, 66, -90, -70, -109, 66, 75, -62, 99, 66, 115, 87, -100, 66, -121, 115, 100, 66, -92, -128, -56, 66, -122, -64, 38, 66, -85, 121, -28, 66, -112, -35, 117, 66, 114, 55, -93, 66, -106, -97, 16, 66, 122, 81, 7, 66, 99, -94, 5, 66, 91, 77, -124, 66, 104, -80, -112, 66, 104, -114, 84, 66, -115, 74, 25, 66, -61, -57, -118, 66, -117, -90, 89, 66, 113, 23, -73, 66, -88, 121, -125, 66, 84, 54, 24, 66, -110, -36, 78, 66, -94, 18, -106, 66, -96, -99, 9, 66, -108, -41, -126, 66, 114, 16, 89, 66, 103, -5, -128, 66, -78, 38, 16, 66, -128, -119, 18, 66, -101, -61, 13, 66, -87, 28, 89, 66, 88, 114, -81, 66, -120, -60, 50, 66, -94, -66, 47, 66, -94, 47, -58, 66, 95, -8, -90, 66, -104, -11, -55, 66, 121, -11, 51, 66, -109, -92, -126, 66, -105, 79, -27, 66, -61, -69, 115, 66, 71, 22, 56, 66, -75, 48, 93, 66, -99, 36, 30, 66, -78, -78, 114, 66, 117, -26, -78, 66, -117, -60, -123, 66, -98, 105, 7, 66, -83, -96, 33, 66, 108, 21, 23, 66, 95, 49, 104, 66, 109, 69, -79, 66, -108, -40, 123, 66, 115, 51, 114, 66, -128, 8, -101, 66, -99, -52, -5, 66, -121, 94, -115, 66, -91, -53, -71, 66, -105, 47, -25, 66, -88, 46, -116, 66, -124, 67, -30, 66, 106, 116, -87, 66, 88, 96, 34, 66, -121, -117, 122, 66, -102, -101, 6, 66, 80, -127, -93, 66, -82, -94, 22, 66, -61, 116, 0, 66, -101, 88, -56, 66, 116, 11, -104, 66, -87, 96, -32, 66, -124, 1, 47, 66, 107, -11, 87, 66, -97, 15, 20, 66, -101, -45, -128, 66, -96, -11, 4, 66, -122, 81, 99, 66, -122, -21, -97, 66, -71, 52, -77, 66, -88, 108, -95, 66, -109, 57, -7, 66, -110, -16, 97, 66, 126, -86, 70, 66, -77, -80, -18, 66, -114, 112, -120, 66, -92, -120, 96, 66, -122, -122, 67, 66, 127, 64, 86, 66, -90, 91, 76, 66, -125, 7, -109, 66, -73, 30, -110, 66, -63, 2, 105, 66, -86, 80, 71, 66, -102, -19, -57, 66, -98, -39, 28, 66, 125, -1, 34, 66, 104, 15, -42, 66, -103, -76, -117, 66, -92, -103, -32, 66, 92, -108, 81, 66, -110, 17, -88, 66, 104, 73, 5, 66, -90, 13, 57, 66, 105, 3, 35, 66, 124, 49, -13, 66, -101, -81, 106, 66, -111, 99, 58, 66, -120, 20, -62, 66, -107, 83, -114, 66, -88, -30, -98, 66, -104, 120, 109, 66, 102, 9, -9, 66, -87, -125, 80, 66, -92, -117, 20, 66, 108, 36, 123, 66, -67, -44, -3, 66, -95, -30, -106, 66, -111, -87, -126, 66, 94, -99, 45, 66, -91, -116, 127, 66, -114, -8, 127, 66, -102, -83, -46, 66, -101, -93, -57, 66, -97, -17, -64, 66, 110, 112, -44, 66, -98, 113, -103, 66, -105, -76, 18, 66, -63, 108, -97, 66, -102, 38, 73, 66, -87, 108, -53, 66, -103, 52, -128, 66, -92, 32, 111, 66, -103, -98, -45, 66, -115, 14, -3, 66, 123, -109, -82, 66, 71, 104, -36, 66, 110, -57, -59, 66, -103, -63, -99, 66, -83, -60, -82, 66, -92, -76, 88, 66, -94, 57, 113, 66, -122, -85, 106, 66, -68, 30, 95, 66, 126, 37, 88, 66, 125, -47, 29, 66, -116, 89, 96, 66, -88, -111, 68, 66, 121, 119, 124, 66, -92, 85, 27, 66, -97, 77, -75, 66, -115, -107, -34, 66, -106, 59, 74, 66, -118, -80, 80, 66, -127, -95, 70, 66, -127, -26, 86, 66, -70, -114, -15, 66, -93, -11, 11, 66, -99, -30, 0, 66, -101, -80, 25, 66, -96, 8, 57, 66, 86, -100, -126, 66, 116, -76, -48, 66, -100, 35, 19, 66, -124, -23, 64, 66, -98, 68, 46, 66, 115, -126, -92, 66, -79, -110, 44, 66, -120, 102, -26, 66, -89, 69, 44, 66, -65, 38, 72, 66, -125, 75, 34, 66, -104, 53, 36, 66, -111, -53, -78, 66, -95, -11, 114, 66, 118, 20, -102, 66, -101, 3, 72, 66, -97, 114, -79, 66, 84, -120, 125, 66, 80, 29, -116, 66, -125, -68, 0, 66, -125, -3, 82, 66, 112, -83, -85, 66, 114, 53, 81, 66, 111, -100, -118, 66, -99, -61, 0, 66, -127, 85, 50, 66, -125, 65, 75, 66, -106, 45, 8, 66, -118, 120, 104, 66, 111, -83, -26, 66, -120, -79, -11, 66, -107, -11, 29, 66, -104, 78, -43, 66, -85, -101, 92, 66, -89, 93, -19, 66, -104, -6, -25, 66, -111, -113, -67, 66, -102, 120, 0, 66, -116, -2, 102, 66, 110, 39, 83, 66, -121, 84, 28, 66, -105, 52, -72, 66, -123, 50, -10, 66, -120, 83, -67, 66, -93, 3, 110, 66, 97, -43, 62, 66, 118, -74, 42, 66, 111, -113, 63, 66, -79, -32, -49, 66, 94, 1, -47, 66, 88, 23, -53, 66, -112, -127, -13, 66, -105, -5, -89, 66, -83, 19, -62, 66, -64, -74, 85, 66, -118, 54, 45, 66, -86, -88, -11, 66, 69, -86, 104, 66, 114, 20, 52, 66, -85, 15, 63, 66, -71, -83, 8, 66, -84, -110, 102, 66, -116, -125, -77, 66, -91, -35, -6, 66, -110, 2, -83, 66, -116, 78, 39, 66, -102, -31, -19, 66, 95, 99, 121, 66, -88, -104, -67, 66, -103, -80, 90, 66, -124, 23, -71, 66, -106, 102, 86, 66, -99, -84, -102, 66, -109, 93, 9, 66, -83, -47, -94 ], "precision": "FLOAT_32", "root": 0, "canonicalAndNotALeaf": true, "size": 255, "leftIndex": [ 0, 1, 255, 461832191, 418676726, 162175476, 384891898, 675263187, 680187224, 123221008, 604112001, 2049 ], "rightIndex": [ 0, 1, 255, 1000859551, 682065855, 552189678, 373257974, 548345042, 59130747, 350560777, 542249088, 1408 ], "nodeFreeIndexes": [], "nodeFreeIndexPointer": -1, "leafFreeIndexes": [], "leafFreeIndexPointer": -1, "partialTreeStateEnabled": true }, "boundingBoxCacheFraction": 0.0, "partialTreeState": true, "seed": -8285893777058293760, "id": 0, "dimensions": 32, "staticSeed": 0, "weight": 0.0, "hasAuxiliaryData": false }, { "version": "2.0", "root": 0, "maxSize": 256, "outputAfter": 32, "storeSequenceIndexesEnabled": false, "centerOfMassEnabled": false, "nodeStoreState": { "version": "2.0", "capacity": 255, "compressed": true, "cutDimension": [ 0, 31, 255, 81583742, 385386586, 363936474, 878815858, 242833911, 80808377, 346646609, 116776262, 464958554, 106614201, 441779250, 201190265, 652076871, 338423675, 313904821, 391588830, 669161562, 330627649, 596832195, 372463395, 374411119, 452578515, 511408254, 523175133, 716953662, 448388817, 311499591, 1033932471, 65773007, 236796129, 35726673, 120187742, 1006204994, 500991723, 573783925, 712718303, 225549543, 590130523, 257993027, 65874550, 469166766, 246363898, 19 ], "cutValueData": [ 66, -73, 80, 45, 66, 72, 77, 120, 66, -127, 121, 127, 66, -86, 43, -31, 66, 84, 1, 117, 66, 91, -15, -116, 66, -97, -32, 124, 66, 103, -122, 6, 66, 69, -17, 84, 66, -94, -14, -100, 66, -123, -99, -41, 66, 103, -33, 97, 66, -119, 7, 60, 66, -105, -105, 22, 66, 107, -41, -70, 66, -78, -42, -94, 66, -88, -126, 108, 66, 109, 65, -128, 66, -90, 61, 70, 66, -63, 93, -127, 66, -96, -33, -128, 66, -113, 97, -17, 66, -81, 107, 5, 66, -69, 55, 75, 66, -74, -94, 6, 66, -87, 32, -106, 66, 99, 79, -7, 66, -96, -7, 110, 66, 96, 0, -85, 66, 81, 51, 14, 66, 100, -59, 120, 66, 120, -86, 93, 66, -67, -119, -28, 66, -87, 52, -25, 66, -94, 96, 41, 66, 89, -30, -45, 66, -82, -76, 25, 66, 127, -112, -107, 66, -110, 89, 15, 66, -109, -37, 109, 66, -80, -65, 100, 66, -65, -58, -112, 66, -103, -65, -30, 66, -122, 46, -108, 66, -79, 32, -107, 66, -118, -29, -120, 66, -97, 34, -63, 66, 94, 61, 114, 66, -104, -12, 88, 66, 89, -64, 57, 66, -111, -56, 110, 66, 126, 28, 6, 66, -84, -42, 106, 66, -77, -10, 54, 66, -77, -43, -94, 66, -97, 125, 69, 66, -104, -122, -77, 66, 123, 56, 90, 66, 101, 9, -7, 66, -120, 5, -16, 66, 99, -65, 63, 66, 79, -128, 78, 66, -121, 124, -14, 66, -75, 49, -109, 66, -124, -35, -79, 66, 124, -94, -41, 66, -120, 38, -69, 66, -108, -98, 121, 66, 77, -3, 65, 66, -120, -74, 49, 66, 93, 86, -66, 66, -116, -63, 52, 66, -118, -107, 71, 66, 122, -97, 114, 66, -111, -11, -124, 66, -114, -10, -87, 66, -102, 28, 29, 66, -108, -105, -111, 66, 113, 101, -18, 66, -107, 114, 103, 66, -116, -11, 101, 66, -80, -32, -13, 66, -85, -78, -87, 66, -110, -112, 13, 66, 122, -16, 74, 66, 125, -76, 16, 66, -111, 72, -118, 66, -90, -18, -4, 66, -126, -77, -119, 66, 126, 5, -38, 66, -95, -63, 81, 66, -115, 72, -32, 66, -111, -3, -92, 66, -90, 100, 51, 66, -107, 57, 59, 66, 98, 20, -32, 66, 68, -102, -60, 66, -102, -38, 95, 66, -83, -97, 73, 66, 94, -24, 53, 66, -117, -67, 47, 66, -69, 114, -17, 66, -115, 117, -92, 66, -116, 3, -35, 66, 109, -97, -43, 66, -119, -59, -119, 66, 101, -18, 28, 66, -109, -115, 61, 66, -101, -95, -95, 66, -112, 127, 104, 66, -112, -2, -85, 66, -78, -54, -78, 66, -99, -30, -81, 66, -106, -85, 92, 66, -68, -109, 72, 66, -107, 125, 68, 66, -102, -92, -64, 66, -109, 87, -99, 66, -94, -7, -10, 66, -80, 110, -109, 66, 122, -33, 109, 66, -77, 0, -108, 66, -114, 124, 68, 66, -72, -51, 46, 66, 81, -63, -50, 66, 127, -68, 34, 66, -109, -100, 0, 66, 115, 66, -77, 66, -100, 87, -113, 66, -71, -114, -107, 66, -88, -24, 119, 66, -111, 41, 94, 66, -116, 48, 115, 66, -106, 57, -55, 66, 124, 122, -31, 66, -111, -115, 70, 66, 76, -76, -42, 66, -83, 85, 36, 66, -98, 82, 117, 66, -85, 69, -25, 66, 103, -70, -17, 66, 124, -51, 46, 66, -125, -46, -117, 66, 126, -25, 95, 66, -102, 70, 9, 66, -120, -76, 118, 66, -116, -36, 0, 66, -98, 55, 71, 66, -109, 4, -64, 66, 107, 8, 23, 66, -117, -85, 22, 66, -85, -38, -91, 66, -124, -79, 62, 66, -91, -30, -30, 66, -93, 58, 6, 66, -100, 9, 38, 66, 122, 94, -86, 66, -91, 47, -15, 66, -79, -42, 78, 66, -115, -115, 78, 66, 110, -40, -62, 66, -108, -4, 87, 66, -117, -61, 14, 66, 96, 54, 87, 66, -83, -23, -111, 66, 77, 35, -121, 66, -102, -67, 21, 66, -80, -6, -25, 66, -118, -22, 122, 66, -64, -74, 4, 66, -97, -33, -107, 66, -106, -15, -22, 66, -81, -29, 122, 66, 107, -89, -98, 66, -121, -85, -58, 66, -109, 3, -44, 66, -115, -13, -52, 66, -73, -91, -76, 66, -121, -31, 10, 66, 71, 112, 66, 66, -64, 51, 100, 66, -101, 51, -76, 66, -72, -85, 44, 66, 126, 33, -127, 66, 82, 98, -87, 66, 88, -82, 107, 66, -112, -29, -94, 66, -92, 47, -29, 66, 113, 75, -86, 66, -109, 119, -90, 66, 118, 26, -24, 66, 111, 81, -37, 66, -108, -92, 18, 66, -96, 75, 18, 66, 121, 48, 73, 66, -98, 70, -12, 66, 105, -90, 73, 66, -97, -20, -81, 66, -116, -100, 34, 66, -123, 20, 32, 66, -89, 12, -36, 66, -122, -26, 48, 66, -90, 118, 86, 66, 112, 122, 9, 66, -127, -5, -3, 66, 95, -128, 71, 66, 99, 0, -88, 66, -121, 99, -91, 66, 123, 31, 11, 66, -110, 92, 46, 66, 112, -41, -72, 66, 117, 43, 76, 66, -66, 13, -122, 66, -126, 4, 72, 66, -123, 101, 95, 66, 122, -99, -122, 66, -128, -59, -67, 66, 99, -83, 103, 66, -120, 32, -39, 66, -89, -103, -58, 66, -92, 22, 98, 66, -86, 24, -69, 66, -79, -94, 49, 66, -100, 114, -19, 66, -117, -44, -92, 66, -119, 15, -63, 66, -98, 96, -19, 66, 107, -47, 35, 66, 127, 11, 20, 66, -112, 103, -20, 66, -64, -121, 78, 66, 111, -110, -118, 66, -86, -5, -37, 66, 110, -60, 1, 66, -112, -109, -120, 66, -121, -7, -10, 66, -95, -53, -125, 66, 121, 44, 6, 66, -104, -70, 100, 66, -123, -82, -22, 66, 121, 10, -128, 66, -102, -123, -96, 66, 93, -9, -13, 66, -104, 25, 125, 66, -122, -46, -128, 66, -92, 32, 89, 66, -99, 32, -104, 66, -74, 111, 56, 66, -78, -107, 25, 66, 126, -88, -76, 66, -78, 69, -91, 66, -79, 34, -58, 66, 105, -61, 79, 0, 0, 0, 0, 0, 0, 0, 0 ], "precision": "FLOAT_32", "root": 0, "canonicalAndNotALeaf": true, "size": 253, "leftIndex": [ -1, 1, 255, 770049260, 731794148, 1033121272, 583495964, 985223492, 769498052, 767688749, 710470975, 768443963, 1142569354, 581750635, 1118424983, 759694936, 364 ], "rightIndex": [ -1, 1, 255, 774781901, 725409556, 1026146200, 583515404, 1027804378, 585973570, 769322195, 710352553, 755176892, 712405651, 595558466, 982900942, 970683632, 365 ], "nodeFreeIndexes": [], "nodeFreeIndexPointer": 1, "leafFreeIndexes": [], "leafFreeIndexPointer": 1, "partialTreeStateEnabled": true }, "boundingBoxCacheFraction": 0.0, "partialTreeState": true, "seed": 3042871460721369999, "id": 0, "dimensions": 32, "staticSeed": 0, "weight": 0.0, "hasAuxiliaryData": false }, { "version": "2.0", "root": 0, "maxSize": 256, "outputAfter": 32, "storeSequenceIndexesEnabled": false, "centerOfMassEnabled": false, "nodeStoreState": { "version": "2.0", "capacity": 255, "compressed": true, "cutDimension": [ 1, 31, 255, 818563458, 267024833, 592483417, 601842370, 638545174, 358713604, 524252847, 83682238, 485162116, 232785329, 69940461, 649755178, 585897883, 531552002, 166221134, 527594082, 192270582, 306093898, 577226065, 540259506, 700193265, 356647355, 12031430, 728793122, 694852009, 262245903, 843596849, 129431883, 573061619, 423118739, 850836800, 514586036, 834951447, 477313838, 611354023, 586263186, 417820913, 148138274, 199159551, 242168422, 628870152, 257972368, 8336 ], "cutValueData": [ 66, 127, -95, 61, 66, -103, 42, 93, 66, -83, -123, 81, 66, 93, 76, 25, 66, -122, -4, -51, 66, 92, -89, -23, 66, 81, 119, 81, 66, -103, 5, 33, 66, -65, 118, 108, 66, -123, 3, 73, 66, -106, 64, -123, 66, -100, 82, -101, 66, -83, 112, -119, 66, -107, -92, 3, 66, -110, 73, 36, 66, -91, -100, 22, 66, 122, -66, 107, 66, -99, 116, 80, 66, 121, -92, 70, 66, -111, 123, -117, 66, -97, -51, -91, 66, -89, 30, -8, 66, 120, 80, 7, 66, -122, -37, -73, 66, -71, 77, 64, 66, -106, 80, 24, 66, 102, 118, 103, 66, -66, -57, -126, 66, 87, -61, 19, 66, 95, 97, -48, 66, -86, 5, -27, 66, -118, -114, -17, 66, 80, -57, 25, 66, -60, 111, 102, 66, -93, -66, 98, 66, -69, -100, 108, 66, -102, 50, -126, 66, -76, 23, 20, 66, -80, -49, 68, 66, 82, 93, -72, 66, -124, -108, 99, 66, -120, 56, 52, 66, -90, 63, -114, 66, 125, 75, -48, 66, 112, 82, 23, 66, -120, -4, 107, 66, -116, 14, -17, 66, 127, 86, 18, 66, -68, -80, -57, 66, 117, 67, -41, 66, -96, 27, 109, 66, 92, 16, -81, 66, -123, 47, 74, 66, -86, 10, -68, 66, 126, 71, 122, 66, -112, -81, -96, 66, -123, -29, 6, 66, 101, 103, -56, 66, 80, -69, -43, 66, 89, 23, -89, 66, -83, 36, -69, 66, 96, 41, 84, 66, -106, -32, 17, 66, -118, 34, 106, 66, -113, 29, 22, 66, -90, -59, -13, 66, -115, -84, -35, 66, 127, -15, 10, 66, -81, 2, 20, 66, -89, 22, 79, 66, -83, 40, -3, 66, -127, 19, 84, 66, -85, 47, 117, 66, -90, 89, -84, 66, -112, 117, -103, 66, -114, -115, -11, 66, -108, -78, 44, 66, -117, -117, 6, 66, -64, 18, 69, 66, -68, -86, -13, 66, -88, 84, 65, 66, -126, 47, 125, 66, -74, -58, -33, 66, 78, -105, 44, 66, 112, -109, 57, 66, 117, 1, -71, 66, 85, 5, 107, 66, 74, -43, 69, 66, 117, -58, 93, 66, -96, -128, 7, 66, -65, 25, -23, 66, -126, -81, -51, 66, 82, -59, -32, 66, 122, 38, 78, 66, -124, -62, -43, 66, -98, -77, -119, 66, 100, 103, 24, 66, -104, -54, 96, 66, -80, 74, -63, 66, -86, 33, -76, 66, 118, 63, 101, 66, -108, -87, -72, 66, -111, -24, 78, 66, 110, 74, 47, 66, -99, 27, 33, 66, -94, 37, 121, 66, -111, -4, -46, 66, -123, 73, -107, 66, 87, -127, -63, 66, -117, 47, 72, 66, -95, -84, -8, 66, 124, 18, -111, 66, -120, -71, -32, 66, 94, -1, -2, 66, 124, 57, 31, 66, -96, -81, 93, 66, 110, 9, -16, 66, -101, 107, -45, 66, 91, -111, 15, 66, -82, 90, -80, 66, -127, -98, 41, 66, -111, -80, 74, 66, -93, 96, 115, 66, -98, -33, 64, 66, -95, -62, -43, 66, 107, -60, 30, 66, -71, -67, -102, 66, 89, -46, -84, 66, 119, -81, 3, 66, 85, 22, -16, 66, -96, 30, -7, 66, -81, -66, -67, 66, 113, -39, 62, 66, -79, -74, -96, 66, -95, 51, 29, 66, 108, -36, -4, 66, 95, -35, 46, 66, -116, -57, 106, 66, 108, 37, 39, 66, -81, -34, -33, 66, -110, 69, 117, 66, -107, -80, 82, 66, -75, -76, -59, 66, -107, 91, 52, 66, -113, 49, 59, 66, -81, -86, -79, 66, -71, -83, 31, 66, 100, 9, 9, 66, 120, 105, 13, 66, -64, 47, 5, 66, -84, 113, 107, 66, -85, 15, -22, 66, -65, 48, 36, 66, -93, -62, -77, 66, 92, 19, -27, 66, -128, -117, 84, 66, -93, -48, 110, 66, 118, 30, -67, 66, -106, -30, -24, 66, 112, -45, -63, 66, -100, 114, -97, 66, -114, 93, -110, 66, -96, 35, -71, 66, -92, 45, -44, 66, -85, 111, -71, 66, -63, -75, 16, 66, -124, -88, 41, 66, -119, -47, -31, 66, -65, -10, 7, 66, 98, -33, 107, 66, -116, -10, -81, 66, -114, -45, 76, 66, -95, -76, 59, 66, -69, -88, -8, 66, -79, -79, 74, 66, 82, 47, -121, 66, -97, 71, 72, 66, -84, -14, 59, 66, -112, 12, 69, 66, -59, -34, -126, 66, 114, 104, 50, 66, -100, 63, 120, 66, -116, -69, 119, 66, -63, -34, 62, 66, 110, 127, 111, 66, -109, -8, -81, 66, -114, -108, -116, 66, 122, 68, -2, 66, -128, 67, 86, 66, -91, -33, -6, 66, -128, 80, 80, 66, 123, 45, 19, 66, -117, 115, 13, 66, -81, 60, -24, 66, -123, 107, 19, 66, -104, 26, -73, 66, 109, -83, -61, 66, -114, -123, -75, 66, 105, 37, -69, 66, -94, -51, 112, 66, -103, -124, -86, 66, -103, 105, 95, 66, 121, 23, 98, 66, -123, -63, -87, 66, 114, -72, 64, 66, -82, -58, 71, 66, -77, -70, 74, 66, -121, 3, 116, 66, -123, 102, -87, 66, 116, -10, 18, 66, -117, -87, 19, 66, -100, 20, 25, 66, 110, -108, -33, 66, 92, -2, 91, 66, 107, 123, 114, 66, -122, -76, 88, 66, -71, -92, 62, 66, 105, 75, 7, 66, -95, 75, -87, 66, -116, -75, 76, 66, -109, 13, -100, 66, 123, 113, -58, 66, 124, -29, 26, 66, -112, -87, 30, 66, -78, 46, 67, 66, -100, -72, 21, 66, 124, 86, 69, 66, -99, -80, -83, 66, -104, 50, 17, 66, -85, 115, -27, 66, -92, -18, -126, 66, -84, 25, 66, 66, -119, 48, 127, 66, 110, 51, -20, 66, -100, 42, -119, 66, -102, -119, -50, 66, -113, 80, 110, 66, -95, 95, -48, 66, -113, -27, -21, 66, -111, 15, -82, 66, 87, -96, 123, 66, -112, 18, -99, 66, 125, -126, 118, 66, -97, 111, 12, 66, -89, 103, 74, 66, -71, 59, 51, 66, -99, 44, 4, 66, 119, 110, -4, 66, -119, -38, -29, 66, -83, -56, -56, 66, -83, -26, 15, 66, -77, -124, 70, 66, -101, 90, -72, 66, 70, 12, -55, 66, -107, 111, -118 ], "precision": "FLOAT_32", "root": 0, "canonicalAndNotALeaf": true, "size": 255, "leftIndex": [ 0, 1, 255, 263979007, 238943482, 861173295, 782356496, 69879311, 5211467, 664087149, 20185088, 2 ], "rightIndex": [ 0, 1, 255, 534241023, 993588829, 868644511, 78510832, 310362411, 41550898, 800049877, 206995, 280 ], "nodeFreeIndexes": [], "nodeFreeIndexPointer": -1, "leafFreeIndexes": [], "leafFreeIndexPointer": -1, "partialTreeStateEnabled": true }, "boundingBoxCacheFraction": 0.0, "partialTreeState": true, "seed": 3094212984032582080, "id": 0, "dimensions": 32, "staticSeed": 0, "weight": 0.0, "hasAuxiliaryData": false }, { "version": "2.0", "root": 0, "maxSize": 256, "outputAfter": 32, "storeSequenceIndexesEnabled": false, "centerOfMassEnabled": false, "nodeStoreState": { "version": "2.0", "capacity": 255, "compressed": true, "cutDimension": [ 1, 31, 255, 305507652, 699820696, 805367403, 391631488, 572779008, 767723353, 144957048, 392687978, 230679448, 419884415, 861636011, 876161820, 291679656, 55783162, 171001627, 2687080, 460052471, 496706844, 592608466, 84448833, 401075265, 68391469, 527969991, 191298208, 691434969, 590001468, 754500652, 744342113, 839885172, 639197907, 485833829, 638708915, 710264857, 838079986, 412540093, 145864818, 402939544, 130866749, 500538829, 541498500, 66971836, 755679140, 5712 ], "cutValueData": [ 66, 111, -72, 91, 66, -94, -29, -117, 66, 74, 72, -70, 66, 117, -120, -73, 66, 88, 12, 18, 66, -110, 19, -79, 66, 111, 124, 12, 66, -86, -81, 7, 66, 69, 32, 2, 66, 110, 126, 103, 66, -118, -2, -4, 66, 69, 99, -38, 66, 89, -124, 41, 66, -75, 66, 19, 66, -123, -30, 30, 66, -91, 78, 104, 66, -82, -86, -115, 66, -90, 92, 98, 66, -79, 127, 9, 66, -91, -52, -108, 66, 90, 123, -111, 66, 83, -18, -40, 66, -108, -1, -15, 66, -113, 112, -69, 66, -79, -109, -32, 66, -100, -128, -11, 66, 74, -97, 72, 66, -125, -120, -21, 66, -78, -33, 82, 66, -67, -26, -30, 66, -122, 80, 118, 66, -113, 44, 109, 66, -78, -127, -7, 66, -62, -70, -81, 66, 111, -69, -99, 66, -85, 47, 44, 66, -86, -118, 43, 66, 76, -115, -89, 66, 68, 48, 26, 66, 110, 7, -31, 66, -92, 15, -37, 66, -93, -82, 78, 66, 119, -69, 126, 66, -99, -96, 43, 66, 95, -96, -43, 66, -64, 92, 62, 66, -110, -67, 83, 66, 109, -122, 9, 66, -124, -91, -96, 66, -92, 5, 36, 66, -91, 117, -64, 66, 83, 110, -19, 66, -97, 108, -23, 66, -100, -4, -44, 66, -74, -104, -46, 66, 127, -25, -47, 66, -72, -83, -68, 66, -86, 56, 59, 66, -77, 21, 54, 66, 71, 106, 84, 66, -116, 64, -87, 66, -108, -116, 75, 66, -103, -71, 11, 66, -118, -61, 85, 66, 111, -99, 22, 66, 87, 80, -41, 66, -117, 91, 19, 66, -62, -119, 68, 66, -109, -86, -70, 66, 126, 21, 40, 66, 117, 124, 23, 66, -72, -67, -15, 66, -65, -76, 92, 66, -106, -67, -48, 66, -99, 49, 23, 66, 101, -39, -11, 66, 69, -86, 118, 66, -108, -15, 105, 66, -128, -20, -107, 66, 103, -56, 47, 66, 95, 86, 19, 66, -70, 63, -11, 66, -68, 60, -50, 66, -109, -21, 127, 66, -106, 50, 123, 66, 93, 23, 72, 66, -95, -31, -113, 66, -124, 62, -51, 66, -114, 36, -38, 66, -125, 29, -14, 66, 93, -7, 52, 66, -101, 65, -100, 66, -87, 54, 108, 66, -88, -126, 78, 66, -99, -33, 49, 66, -124, -70, 37, 66, -97, 108, -95, 66, -100, -72, -11, 66, -122, -21, 31, 66, -120, -115, -71, 66, -90, 103, -36, 66, -127, 116, 119, 66, -96, 27, -68, 66, -117, -105, 3, 66, -125, -15, -32, 66, -101, -13, 108, 66, 80, 54, -25, 66, -70, 119, 59, 66, -81, -90, -84, 66, -94, -49, 107, 66, -95, -89, 118, 66, 115, -36, -60, 66, -69, 40, -46, 66, -96, -93, -85, 66, -111, 18, 103, 66, -98, 79, 113, 66, 114, 79, -66, 66, -105, 73, -116, 66, -97, -62, 11, 66, -119, 15, 25, 66, -128, 89, 76, 66, 86, 40, -34, 66, -84, -40, 21, 66, -97, 95, 125, 66, -122, -122, -121, 66, 117, -94, -35, 66, -124, 0, 34, 66, -99, -69, 86, 66, -69, 35, -7, 66, 111, -17, -43, 66, -79, -12, -60, 66, -75, 51, 86, 66, 93, 20, 117, 66, -105, -74, -123, 66, 116, -17, 122, 66, -120, 4, -60, 66, 87, 63, -23, 66, -122, 82, -77, 66, -122, -102, -14, 66, -83, -13, -88, 66, -122, 107, 53, 66, -109, -68, 23, 66, -91, -119, 62, 66, -76, -40, 124, 66, -108, -127, -122, 66, -108, -33, 88, 66, -88, 127, 20, 66, -69, -66, -15, 66, -114, 78, 5, 66, -93, 7, 22, 66, -71, -77, -68, 66, -85, 124, -121, 66, -82, 77, -5, 66, -126, -88, -111, 66, 88, -105, 22, 66, -116, -7, 21, 66, -112, -127, -92, 66, -125, -77, 38, 66, -110, 41, -39, 66, -86, -88, 39, 66, 96, 90, 32, 66, -90, 2, -7, 66, 124, 20, 65, 66, -118, -17, 58, 66, -110, 98, -37, 66, -118, 105, -121, 66, -106, -68, -49, 66, 82, -75, -54, 66, -93, -75, 106, 66, -105, -98, 33, 66, 87, -47, 22, 66, -96, -127, 87, 66, -117, -120, -52, 66, 124, -61, 85, 66, -105, 92, -66, 66, -118, 119, 11, 66, -107, 78, 49, 66, -103, 21, -50, 66, 107, -99, -29, 66, -113, 25, -10, 66, -99, -117, 98, 66, 126, -15, 117, 66, -62, 70, -13, 66, -84, 70, -55, 66, -124, 20, -25, 66, -97, 42, -81, 66, -122, -6, 25, 66, 125, 46, -99, 66, 82, 41, -33, 66, 101, 109, 103, 66, 76, 23, -115, 66, -99, -4, -26, 66, 105, -121, -55, 66, -107, 83, 41, 66, -125, 40, -88, 66, -107, -101, 21, 66, -119, -55, -47, 66, -105, 46, 57, 66, -80, 101, -34, 66, 126, -65, -67, 66, -67, 93, 33, 66, 104, 74, 94, 66, -127, 100, -17, 66, -63, -78, 6, 66, -84, 124, 64, 66, -103, -118, 36, 66, -118, -72, -57, 66, -112, 34, 51, 66, -126, -20, 25, 66, 102, -123, 31, 66, -82, 53, 5, 66, -94, 51, -79, 66, 126, 101, -8, 66, -83, -117, 14, 66, -104, -61, -72, 66, -77, -46, -41, 66, -123, 119, -12, 66, -69, -27, -91, 66, -74, 117, -51, 66, -126, -14, 27, 66, 115, -82, 86, 66, -121, 126, 41, 66, -119, 64, 109, 66, -126, -42, -20, 66, -95, -76, 85, 66, -109, 91, 31, 66, -109, -45, -107, 66, -103, -77, -96, 66, 117, -92, -93, 66, -97, 43, -82, 66, -79, -62, 49, 66, -95, -126, -28, 66, -116, 83, -18, 66, -92, -101, -51, 66, -110, 34, 85, 66, -90, -104, 0, 66, -85, -123, -8, 66, -115, 33, -124, 66, 95, 74, 50, 66, -82, 35, 27, 66, -123, -17, 18, 66, -128, 31, -25, 66, -122, -46, 5, 66, -78, 52, 86, 66, 116, 52, 40, 66, -67, 33, 31, 66, -117, 17, -13, 66, -69, -82, -3, 66, 117, -68, 42, 66, -90, 127, 120, 66, -77, 95, 92, 66, 99, -121, 55, 66, -82, 38, 36, 66, 105, 89, 5, 66, -119, 22, 59 ], "precision": "FLOAT_32", "root": 0, "canonicalAndNotALeaf": true, "size": 255, "leftIndex": [ 0, 1, 255, 536700159, 253532396, 468991997, 584964882, 162396161, 597516692, 341248000, 575881263, 39 ], "rightIndex": [ 0, 1, 255, 50298335, 25041377, 534523391, 917365552, 428847705, 748233233, 961896194, 805407828, 20 ], "nodeFreeIndexes": [], "nodeFreeIndexPointer": -1, "leafFreeIndexes": [], "leafFreeIndexPointer": -1, "partialTreeStateEnabled": true }, "boundingBoxCacheFraction": 0.0, "partialTreeState": true, "seed": 8379111172481454749, "id": 0, "dimensions": 32, "staticSeed": 0, "weight": 0.0, "hasAuxiliaryData": false }, { "version": "2.0", "root": 0, "maxSize": 256, "outputAfter": 32, "storeSequenceIndexesEnabled": false, "centerOfMassEnabled": false, "nodeStoreState": { "version": "2.0", "capacity": 255, "compressed": true, "cutDimension": [ 1, 31, 255, 389195638, 312558508, 73024403, 187600000, 191590157, 246298069, 715011560, 137214802, 266620403, 352753290, 628494987, 574451625, 731148569, 509361556, 77737387, 860768503, 597147906, 2497940, 413711482, 27677131, 28837294, 606762722, 424970127, 378199207, 52457400, 827644286, 79953675, 485158991, 55700526, 881841309, 349160806, 137759188, 69520163, 728916894, 538604482, 254972222, 365779964, 186739176, 628734895, 715013232, 367189606, 291204402, 29594 ], "cutValueData": [ 66, -100, -36, -104, 66, -99, 74, -116, 66, -113, 28, 111, 66, 94, -22, 51, 66, -77, 21, -45, 66, -83, 118, -13, 66, -59, 66, -39, 66, -115, -5, 22, 66, -74, -70, -91, 66, -126, 66, 86, 66, -128, -113, -60, 66, 76, -115, 17, 66, -109, 64, -90, 66, 76, 10, 69, 66, 78, 23, 77, 66, 84, 66, -108, 66, -105, 86, 86, 66, 76, -109, -58, 66, 89, 57, -43, 66, -69, 73, -2, 66, -114, -102, 66, 66, -90, -50, 41, 66, 99, -40, -18, 66, -128, 76, 30, 66, -87, 92, 75, 66, -71, 118, 96, 66, -79, -70, -29, 66, 76, 77, -1, 66, -120, -104, -77, 66, -87, -114, 120, 66, 97, -1, -59, 66, -85, 59, 107, 66, 121, 59, -8, 66, -125, -4, 117, 66, -72, -18, 72, 66, -115, -70, -119, 66, -127, 19, -73, 66, 123, -128, 124, 66, -95, -64, -8, 66, 121, 48, 22, 66, -108, -11, 33, 66, -100, 97, -90, 66, -109, -99, -65, 66, 113, -27, -54, 66, 104, 106, 10, 66, -121, 92, -128, 66, 96, 46, 6, 66, -102, 35, 7, 66, -112, -110, 33, 66, 85, -45, -32, 66, 117, -75, -80, 66, -112, -18, 82, 66, -128, -60, 112, 66, -106, 39, 47, 66, -119, -79, -91, 66, 126, -122, 106, 66, -108, 29, 22, 66, 97, 6, 82, 66, -87, 100, 75, 66, 97, 95, 57, 66, -62, -102, 78, 66, -125, -106, -42, 66, -124, -41, -10, 66, -124, 80, 51, 66, 123, 74, -28, 66, -97, 42, 40, 66, -64, 63, 0, 66, -128, -18, -1, 66, -64, -33, -66, 66, -86, -19, 71, 66, -122, -80, -115, 66, -127, 29, -105, 66, -117, -36, 76, 66, -103, -29, 110, 66, -102, -96, 118, 66, 78, 86, -96, 66, -114, 65, -16, 66, 73, 14, -108, 66, -111, -46, 59, 66, 120, 67, -47, 66, -122, 123, 15, 66, -112, -67, 119, 66, -100, -127, 82, 66, -88, -94, -68, 66, 111, -127, 124, 66, -103, 119, 101, 66, -65, -79, -36, 66, -118, 12, 70, 66, -71, -112, -57, 66, -119, -116, -86, 66, -91, -57, -81, 66, 112, -20, 58, 66, 108, 16, -123, 66, 95, -73, 8, 66, -114, -86, -27, 66, 116, -15, -88, 66, -93, 73, -126, 66, 91, -103, 77, 66, -118, -81, -32, 66, -118, -9, 42, 66, 117, -32, 27, 66, 120, -123, 57, 66, 107, -1, 77, 66, -79, -126, -104, 66, -101, -85, 12, 66, -104, -101, -23, 66, -67, -121, -54, 66, -75, -24, -50, 66, 86, 71, -9, 66, -115, 110, -79, 66, -101, -42, 0, 66, -94, 73, -69, 66, -121, 9, -2, 66, 125, 8, 115, 66, 112, 23, -92, 66, -122, 65, 44, 66, -122, -16, 102, 66, -111, 101, -58, 66, -89, -62, 79, 66, 127, 110, -63, 66, -94, 39, 110, 66, -101, -101, 41, 66, -125, -120, 106, 66, -112, -23, -29, 66, -119, 68, -86, 66, 118, -104, -121, 66, 118, -53, -34, 66, 102, -28, -120, 66, -108, 65, 104, 66, 110, 36, -27, 66, -87, 102, 56, 66, -92, 37, 43, 66, -74, 93, 76, 66, -100, 102, 35, 66, 110, -68, -117, 66, -111, -21, -115, 66, -111, -119, 52, 66, -128, -62, 6, 66, 118, 116, -121, 66, -92, 107, 27, 66, -72, -59, -86, 66, -100, -36, 127, 66, -85, -58, 44, 66, 110, 125, -61, 66, -83, 17, 91, 66, 117, 52, -26, 66, 112, -84, 87, 66, -116, -124, 18, 66, 117, 28, -37, 66, 111, 118, 40, 66, -110, -120, -120, 66, -128, 82, 107, 66, -123, -43, -30, 66, -100, 22, -72, 66, -100, -75, -87, 66, -106, 119, 84, 66, -93, -18, 114, 66, -63, -62, 56, 66, -119, 101, -40, 66, -82, -73, 113, 66, -111, 91, 104, 66, 106, -50, 56, 66, -112, 12, 122, 66, 72, 78, 34, 66, -103, 107, 109, 66, 102, 73, 118, 66, -117, 5, -9, 66, -115, 93, -72, 66, -78, 92, -102, 66, 112, -60, -37, 66, -119, -108, 85, 66, 120, -107, 33, 66, 71, 125, -23, 66, -74, -92, 30, 66, -79, -4, -89, 66, -108, 121, 81, 66, -103, 115, 104, 66, -128, -21, 114, 66, 108, -42, -73, 66, -105, 29, -58, 66, 106, -75, -106, 66, -106, -24, 49, 66, 114, -122, -15, 66, -125, -29, -87, 66, -105, 93, 39, 66, -106, -92, 78, 66, 91, 100, 61, 66, -106, -68, -61, 66, -118, -14, 105, 66, -92, -28, -38, 66, 102, -106, 23, 66, -110, -35, 125, 66, -107, 104, -18, 66, -103, -55, -46, 66, -126, 118, -20, 66, -102, -4, 38, 66, 102, -60, -73, 66, -80, -4, -36, 66, -95, -37, 93, 66, -117, 21, -7, 66, -86, 124, 102, 66, -92, 116, -102, 66, -122, 30, -53, 66, -85, 102, -100, 66, -93, -123, 76, 66, -120, 0, 88, 66, -121, 71, -70, 66, -66, -68, -26, 66, -128, 121, 17, 66, -123, -42, 47, 66, -83, -121, 60, 66, -120, -66, 26, 66, -95, -51, 53, 66, -83, -43, 102, 66, -87, -56, 37, 66, -84, 63, -101, 66, -104, 42, -25, 66, -73, 67, 52, 66, -61, -64, 79, 66, 85, -104, 22, 66, 111, -69, 45, 66, -114, -82, -108, 66, -109, 2, -111, 66, -108, -52, 48, 66, -84, 121, -99, 66, -89, -76, -35, 66, 123, -76, 117, 66, -64, 8, 36, 66, -80, -114, -94, 66, -125, -29, -64, 66, -91, -69, 87, 66, -89, -115, 76, 66, -111, 26, 69, 66, -120, 110, 30, 66, -108, 115, 126, 66, -89, -2, 87, 66, -91, -65, -109, 66, -71, -22, 69, 66, -121, 90, -70, 66, -107, -82, -22, 66, -98, -44, -9, 66, -92, -72, -105, 66, -117, 4, -122, 66, 102, -114, -78, 66, -123, -99, -60, 66, 115, -93, -68, 66, -125, 101, -53, 66, -116, 15, -57, 66, -98, 11, -88, 66, 98, -54, -67, 66, -85, -127, 21, 66, -74, 79, -37, 66, -92, 47, -9, 66, -124, -96, -60, 66, 127, 97, -13 ], "precision": "FLOAT_32", "root": 0, "canonicalAndNotALeaf": true, "size": 255, "leftIndex": [ 0, 1, 255, 699400191, 266607598, 524071438, 517151816, 29220877, 271356121, 145756769, 230801804, 65 ], "rightIndex": [ 0, 1, 255, 783286207, 1072594924, 532522526, 32905591, 27803799, 1042288659, 568983905, 415616650, 1543 ], "nodeFreeIndexes": [], "nodeFreeIndexPointer": -1, "leafFreeIndexes": [], "leafFreeIndexPointer": -1, "partialTreeStateEnabled": true }, "boundingBoxCacheFraction": 0.0, "partialTreeState": true, "seed": -5968712885689118287, "id": 0, "dimensions": 32, "staticSeed": 0, "weight": 0.0, "hasAuxiliaryData": false }, { "version": "2.0", "root": 0, "maxSize": 256, "outputAfter": 32, "storeSequenceIndexesEnabled": false, "centerOfMassEnabled": false, "nodeStoreState": { "version": "2.0", "capacity": 255, "compressed": true, "cutDimension": [ 1, 31, 255, 486694461, 64721605, 185461313, 126593884, 174283160, 400548254, 647367783, 845295726, 419418155, 139086039, 748996396, 724910844, 710223360, 140803803, 488739332, 152216485, 586379063, 803528157, 474182790, 466008553, 815466476, 849697412, 688632335, 479168762, 407199663, 364230794, 772460320, 511074611, 736421702, 391288059, 882800883, 843102518, 34716885, 507559525, 595511958, 752623314, 536247220, 706345695, 118300011, 459173939, 577881444, 740575421, 29586 ], "cutValueData": [ 66, -98, -25, -117, 66, -69, 81, 120, 66, 103, 9, 1, 66, 79, 2, 21, 66, -100, -86, -13, 66, -82, 81, -93, 66, -86, 87, 111, 66, -84, 67, -40, 66, -79, 53, 8, 66, -123, 122, -24, 66, 90, -57, 97, 66, -102, 105, 22, 66, 113, 112, 73, 66, -114, 79, 49, 66, 126, -84, 70, 66, -114, -27, 114, 66, -100, 87, 37, 66, -98, -33, 25, 66, -115, 64, 7, 66, -123, 28, 102, 66, 125, -8, -64, 66, 75, -80, 69, 66, 116, -90, 79, 66, 80, -91, -51, 66, -75, -116, 89, 66, 120, 26, 67, 66, -104, 49, 72, 66, 92, 49, 79, 66, -97, -63, 3, 66, -112, 127, 25, 66, -107, -124, -112, 66, -92, -6, -87, 66, -106, -30, -8, 66, 105, 109, 83, 66, -72, -47, 19, 66, -74, 77, 34, 66, -108, 58, 35, 66, 115, 43, 29, 66, -83, 87, 82, 66, -90, 115, 72, 66, -95, -88, 44, 66, 121, 127, 82, 66, -95, -44, -64, 66, -125, 96, 53, 66, -77, 29, 27, 66, -113, 96, 74, 66, -98, 91, 105, 66, 117, -85, 97, 66, -112, -19, 30, 66, -126, -34, -28, 66, 101, 104, -61, 66, -126, -61, -82, 66, -100, 44, 61, 66, 94, 98, -61, 66, -100, -30, 67, 66, -102, 63, 82, 66, 113, -9, -86, 66, -114, -108, 1, 66, 105, 46, -46, 66, 83, -14, 2, 66, -95, 59, 35, 66, -106, -29, -43, 66, 111, -50, 79, 66, 93, 53, 94, 66, -110, -89, 95, 66, -103, -98, 117, 66, 111, 74, -110, 66, -71, -38, 18, 66, 117, -90, 49, 66, -73, 125, 74, 66, 83, -83, 104, 66, 83, -22, 101, 66, 100, -4, 93, 66, 81, 59, 28, 66, 110, 63, -13, 66, -85, 21, 83, 66, -118, 6, -120, 66, -100, 24, -18, 66, -103, 65, -19, 66, -79, 110, -35, 66, -109, 106, -77, 66, -91, 0, -119, 66, -100, -12, -33, 66, -89, -9, -11, 66, 116, 53, 54, 66, 105, -126, -117, 66, -116, -58, -45, 66, -101, -49, -76, 66, -105, 79, -13, 66, -119, -22, 97, 66, -78, -62, -67, 66, -69, 101, 24, 66, 111, -105, 36, 66, -102, -30, -127, 66, 93, 119, -16, 66, -75, -83, 15, 66, -94, 67, -30, 66, -86, -79, 118, 66, -95, 49, -18, 66, -117, 99, 11, 66, -74, -94, 114, 66, -62, 28, 45, 66, 70, 64, -42, 66, 123, -126, 32, 66, -119, -99, -60, 66, 116, 9, -100, 66, -114, -81, -28, 66, -76, 82, -13, 66, -115, 84, -103, 66, -102, 119, -31, 66, -87, -103, -19, 66, 117, 116, -73, 66, 106, -47, -7, 66, -121, -124, 26, 66, 117, 104, -4, 66, -121, 21, 6, 66, -101, -80, 23, 66, 106, -20, 9, 66, -64, 36, -4, 66, -117, -28, 69, 66, -91, 79, 32, 66, 79, 13, 85, 66, -123, 41, -22, 66, 108, 40, 15, 66, 98, -33, 114, 66, -76, -99, -123, 66, 93, 55, 71, 66, 98, 125, -64, 66, -107, 30, 61, 66, 121, -111, -58, 66, -88, -5, 79, 66, -65, -4, 40, 66, 101, -39, 127, 66, -119, -77, -124, 66, -105, -38, 106, 66, -74, 18, -48, 66, -103, 99, 64, 66, -62, -71, 92, 66, -99, 121, 17, 66, 68, 85, -118, 66, -63, -102, -59, 66, -90, -57, 50, 66, -117, 110, -54, 66, -83, 60, 107, 66, 110, -60, 1, 66, -110, 72, -32, 66, 119, 2, -17, 66, -89, -73, 15, 66, -106, -80, -44, 66, 80, 57, 68, 66, 115, 0, 122, 66, -99, 19, 104, 66, -102, -28, 27, 66, 115, 2, 4, 66, 123, 16, -84, 66, -78, 38, -32, 66, -124, -62, -77, 66, -119, -111, -127, 66, 88, -115, 89, 66, -82, -78, -2, 66, 114, 120, 73, 66, -80, -128, -71, 66, -127, 73, -68, 66, -92, 113, 14, 66, -62, -73, 98, 66, -113, 1, 38, 66, -85, 67, 108, 66, -90, 24, -9, 66, -118, 111, 71, 66, 122, -64, -10, 66, -107, 5, -76, 66, 90, -81, 77, 66, -90, 123, 119, 66, -80, -27, -65, 66, -118, 4, 99, 66, -126, -59, -16, 66, 110, -98, -98, 66, -105, -41, 42, 66, -112, -58, 88, 66, -90, -71, 110, 66, 123, -111, -112, 66, 79, -107, -99, 66, -102, -36, -43, 66, -100, -31, 44, 66, 108, 43, -100, 66, -94, 107, 114, 66, -128, -52, -76, 66, -126, 69, 122, 66, -85, -106, -104, 66, 125, -43, 57, 66, -75, 120, -102, 66, -102, -38, -39, 66, 86, -12, -36, 66, 115, 59, -114, 66, -125, -30, -39, 66, -108, 32, 60, 66, -121, -108, 117, 66, -119, -43, 56, 66, -122, -19, -44, 66, -124, -124, -97, 66, -127, -125, 69, 66, 107, -27, -24, 66, -104, 85, 63, 66, -121, -13, 28, 66, -121, -117, 88, 66, -80, 102, 2, 66, -81, 62, 35, 66, -110, -36, 59, 66, -123, -125, 54, 66, 69, 99, 55, 66, 104, -10, 26, 66, -105, 102, 10, 66, -101, 7, -61, 66, -103, 67, 29, 66, -77, -48, 69, 66, -117, 106, -106, 66, -112, -99, -83, 66, -116, 32, -121, 66, -107, 127, -93, 66, -101, 116, 59, 66, -71, -40, 53, 66, -101, 13, 44, 66, -89, 12, -83, 66, -92, -97, 10, 66, 108, -61, -69, 66, -116, -75, -1, 66, -100, 2, -103, 66, -77, -128, -66, 66, -104, 51, -2, 66, -124, 88, 21, 66, -115, 117, 12, 66, -123, -35, -74, 66, 112, -121, 29, 66, 104, 103, 109, 66, -91, -81, -86, 66, -126, 8, -70, 66, -117, 107, -94, 66, 79, 47, -34, 66, -98, -67, -25, 66, -93, 125, -112, 66, -128, 17, -120, 66, -110, 125, 107, 66, -102, -72, 123, 66, -101, -108, -15, 66, -112, -124, 90, 66, -91, 52, 35, 66, -85, 125, 113, 66, 110, -79, -55, 66, -125, -97, 3, 66, -72, -20, 96, 66, 125, -3, -34, 66, -88, 8, 21, 66, -113, -96, -33, 66, 114, 7, -17, 66, -96, 80, 108 ], "precision": "FLOAT_32", "root": 0, "canonicalAndNotALeaf": true, "size": 255, "leftIndex": [ 0, 1, 255, 1037786111, 940570355, 875282198, 629598939, 753208112, 166751039, 69043420, 857944212, 268 ], "rightIndex": [ 0, 1, 255, 989558751, 1007615901, 268566028, 363217617, 544743806, 569421117, 36571843, 41980064, 2520 ], "nodeFreeIndexes": [], "nodeFreeIndexPointer": -1, "leafFreeIndexes": [], "leafFreeIndexPointer": -1, "partialTreeStateEnabled": true }, "boundingBoxCacheFraction": 0.0, "partialTreeState": true, "seed": 6987922936086641544, "id": 0, "dimensions": 32, "staticSeed": 0, "weight": 0.0, "hasAuxiliaryData": false }, { "version": "2.0", "root": 0, "maxSize": 256, "outputAfter": 32, "storeSequenceIndexesEnabled": false, "centerOfMassEnabled": false, "nodeStoreState": { "version": "2.0", "capacity": 255, "compressed": true, "cutDimension": [ 0, 31, 255, 393690042, 880352886, 359590950, 332912875, 609455066, 359897695, 649702387, 206670581, 1058225711, 106532297, 391857894, 779450049, 263108054, 317438891, 1066597970, 582657454, 882284227, 723598553, 523832643, 318551635, 488105939, 220825146, 208485375, 446417327, 536656307, 303147217, 770792693, 874300963, 1038980577, 208129733, 114362154, 848337383, 188442239, 391986131, 234810543, 1060019914, 199746991, 313499211, 221189595, 452579125, 395413097, 64720111, 18 ], "cutValueData": [ 66, -127, 85, -2, 66, -81, 42, 25, 66, 73, -117, 69, 66, 80, 85, -76, 66, -74, -126, 118, 66, -85, 120, -93, 66, -114, 59, -43, 66, -113, 121, -45, 66, -71, -6, 27, 66, -109, 63, -90, 66, -83, 62, 55, 66, -85, 3, 4, 66, -75, 100, -24, 66, -94, 39, 48, 66, -109, 48, -59, 66, 88, 27, -26, 66, -106, -92, -35, 66, 93, -42, 26, 66, -92, 22, 69, 66, -78, 100, 60, 66, -93, -108, -8, 66, -100, 43, -51, 66, -75, -49, 59, 66, -110, 120, -100, 66, -64, -7, 11, 66, -120, 0, -55, 66, 77, -84, -17, 66, -112, -45, 41, 66, -110, -28, 119, 66, 72, -76, 90, 66, -117, 14, -111, 66, -87, 92, 114, 66, -82, 126, -50, 66, -108, -85, 24, 66, -86, -25, 102, 66, 98, 19, -62, 66, 107, -1, -4, 66, -119, -100, 95, 66, 94, 48, 119, 66, 85, 29, -52, 66, 92, -13, -25, 66, 119, -95, 110, 66, -75, -60, 11, 66, 92, 121, -38, 66, 83, 84, -85, 66, -68, -42, 36, 66, -124, 9, -115, 66, -100, 34, -18, 66, -113, -125, 72, 66, -100, -63, -100, 66, 124, 23, 53, 66, -96, -61, -120, 66, -104, 92, 5, 66, 115, 33, 11, 66, -68, 63, 121, 66, -73, 2, -88, 66, -62, 21, 86, 66, 109, -116, 116, 66, -86, 9, 112, 66, -112, 106, -90, 66, -118, -27, -104, 66, -88, 5, 106, 66, -107, 32, -114, 66, -72, 21, -37, 66, -72, -48, 123, 66, 116, -128, 32, 66, -97, 16, 58, 66, -107, -43, -68, 66, -74, -95, -59, 66, -107, -11, -69, 66, -83, -14, -93, 66, 95, -2, 37, 66, 95, -82, 123, 66, -127, 22, -68, 66, -125, 97, 35, 66, -83, -67, -4, 66, -79, -80, 83, 66, 72, -1, 61, 66, 73, 52, -52, 66, -105, -118, 79, 66, -114, -72, -29, 66, 81, -3, 58, 66, -104, -51, 10, 66, -74, -99, 59, 66, -62, -9, -106, 66, -70, 96, 25, 66, 88, -82, -117, 66, -82, 123, -53, 66, 72, 33, -73, 66, -123, -98, -120, 66, -65, 64, 16, 66, -123, 60, -8, 66, -87, -94, 63, 66, -123, 24, -81, 66, -127, -23, 101, 66, 106, -78, -23, 66, -73, 124, 105, 66, 90, 48, 15, 66, 87, -117, -55, 66, -101, 113, -1, 66, -127, -128, -73, 66, -126, -36, -4, 66, -116, 115, -82, 66, -128, -110, 91, 66, -94, -83, 46, 66, 99, -112, 83, 66, -96, 50, 18, 66, 88, 54, 88, 66, -71, 42, -103, 66, -85, -48, 76, 66, -67, 9, 104, 66, -62, -6, 89, 66, -114, 121, 65, 66, -82, -105, 37, 66, -82, 87, 92, 66, 126, -81, 95, 66, 104, -44, -8, 66, -69, -110, -97, 66, -81, -26, -13, 66, -99, -24, 115, 66, -83, -127, 113, 66, 76, 26, 39, 66, 99, -115, -105, 66, -94, 42, -26, 66, -72, -80, -96, 66, 122, -103, 71, 66, 78, -82, 98, 66, 98, 31, -82, 66, -124, -28, -126, 66, 119, -87, 114, 66, 125, -76, -43, 66, -122, -96, 37, 66, -93, -51, 64, 66, -98, -111, 95, 66, 95, -81, -125, 66, -62, -13, -104, 66, -110, -23, 30, 66, -100, 25, -2, 66, -99, -1, -13, 66, -116, 61, -49, 66, -96, 126, 35, 66, -103, 117, 124, 66, 115, -88, -14, 66, -107, 67, -1, 66, -69, 42, 64, 66, -127, -106, 83, 66, -83, -81, 3, 66, -93, -105, -27, 66, -111, 108, 126, 66, -127, -100, 14, 66, 120, 110, 33, 66, -115, 115, -48, 66, -83, 118, -93, 66, -97, 40, -58, 66, -112, -67, -97, 66, -66, 5, -23, 66, -127, 83, 30, 66, 90, 121, -24, 66, -105, 103, 55, 66, -122, 4, -57, 66, -117, 125, 81, 66, -103, 94, -4, 66, -125, -28, 114, 66, -83, 116, -44, 66, -108, 68, -128, 66, -85, -57, -84, 66, -112, 99, -62, 66, -83, -124, -94, 66, 109, 17, -57, 66, 124, 109, -34, 66, 115, -119, -13, 66, -91, 12, 34, 66, -105, -46, 92, 66, -125, 119, -9, 66, -104, -29, 68, 66, -96, 103, 63, 66, 86, 95, 30, 66, -67, 70, 36, 66, 112, 105, 14, 66, 98, -50, -8, 66, -118, 67, 85, 66, -102, -126, 78, 66, -102, 58, 92, 66, 106, 40, -84, 66, -112, -27, 119, 66, -95, -16, -106, 66, 105, 18, -28, 66, -117, -43, -7, 66, 117, -58, -31, 66, -106, -40, -35, 66, -117, -69, -84, 66, 118, -99, 109, 66, -75, -26, 23, 66, -120, 85, -59, 66, -82, 24, -107, 66, -128, -127, 101, 66, -112, -109, 20, 66, 95, 83, 55, 66, -105, 71, 108, 66, 78, 100, 30, 66, -102, -90, 13, 66, -103, -106, -22, 66, -100, -5, 103, 66, -115, 30, 109, 66, -95, 122, -98, 66, 100, -15, -33, 66, -95, -52, 50, 66, -80, -46, -34, 66, -104, 11, 64, 66, 97, -90, -17, 66, -86, -90, 48, 66, -112, -14, 27, 66, 81, 64, -99, 66, 93, 26, -55, 66, -116, -64, -71, 66, 112, 102, -127, 66, 90, 39, 25, 66, -94, -66, -110, 66, 82, 14, 93, 66, -120, -91, 60, 66, -62, -115, -107, 66, -115, -39, 61, 66, -81, -96, 121, 66, -72, 59, -5, 66, -96, 119, 21, 66, -79, 95, 75, 66, -128, 85, 78, 66, -105, -68, -27, 66, -70, 63, 109, 66, -87, 126, 114, 66, -94, 71, 85, 66, 124, 19, 88, 66, -100, 30, 122, 66, 127, 11, -60, 66, -114, 122, 17, 66, 86, 57, 68, 66, 118, 67, -36, 66, -103, -19, 2, 66, 106, -49, 15, 66, -79, 117, -127, 66, 125, -94, 71, 66, 112, -50, 53, 66, -93, 101, -81, 66, -66, 5, 80, 66, -89, -19, -73, 66, -109, 68, -38, 66, -99, -59, -109, 66, -122, -94, -52, 66, 90, -52, -15, 66, -110, 35, 41, 66, 126, -59, 99, 66, -85, -116, 106, 66, -101, 44, -66, 0, 0, 0, 0, 0, 0, 0, 0 ], "precision": "FLOAT_32", "root": 0, "canonicalAndNotALeaf": true, "size": 253, "leftIndex": [ -1, 1, 255, 1118506157, 1156947047, 1160482432, 1028279276, 643515962, 629157604, 982986506, 1114225843, 982900966, 1114352689, 984730679, 601050685, 710291311, 364 ], "rightIndex": [ -1, 1, 255, 1104275348, 1140997225, 1155638959, 1031465003, 1155685120, 711039613, 1141532270, 1114234586, 1140739159, 1112659240, 1026143708, 596092738, 628960423, 391 ], "nodeFreeIndexes": [], "nodeFreeIndexPointer": 1, "leafFreeIndexes": [], "leafFreeIndexPointer": 1, "partialTreeStateEnabled": true }, "boundingBoxCacheFraction": 0.0, "partialTreeState": true, "seed": 7337502249195313879, "id": 0, "dimensions": 32, "staticSeed": 0, "weight": 0.0, "hasAuxiliaryData": false }, { "version": "2.0", "root": 0, "maxSize": 256, "outputAfter": 32, "storeSequenceIndexesEnabled": false, "centerOfMassEnabled": false, "nodeStoreState": { "version": "2.0", "capacity": 255, "compressed": true, "cutDimension": [ 1, 31, 255, 278250383, 164297688, 27510971, 832928501, 367753154, 413299321, 580523608, 124240170, 577698165, 722004443, 540095055, 591233598, 642793830, 459130683, 871739875, 720548358, 181778104, 196388197, 248232339, 405493197, 525456224, 721989530, 147492756, 723832976, 378567684, 689096449, 76587691, 247564083, 593655786, 860086032, 164090683, 348600156, 842797911, 582550765, 706011474, 37720289, 866771283, 373625313, 400683123, 516801133, 719502795, 310574043, 25157 ], "cutValueData": [ 66, -65, -64, 23, 66, -110, -76, 94, 66, -64, -52, 94, 66, 87, -46, 104, 66, -60, 35, -122, 66, 74, -113, -117, 66, 123, -72, 21, 66, -127, 68, -35, 66, 108, 19, -26, 66, -103, -26, 74, 66, 115, -71, 19, 66, -126, -35, 108, 66, 106, 71, 59, 66, -96, -20, -73, 66, -118, 23, -71, 66, -113, 1, 76, 66, 114, 34, 40, 66, 108, -109, -40, 66, -92, -23, -63, 66, -117, -105, -68, 66, -63, 106, -55, 66, -70, -65, -85, 66, 88, 55, -17, 66, -113, -14, 97, 66, -100, -23, -27, 66, 108, -63, 85, 66, -88, 112, 45, 66, 72, -119, 100, 66, -114, -43, -115, 66, -65, 63, 111, 66, 100, 79, -48, 66, -119, 91, 117, 66, -96, 83, 55, 66, -96, 69, -93, 66, 77, 56, -6, 66, -82, 117, 82, 66, 85, -60, 33, 66, 80, -105, -39, 66, 96, -1, 15, 66, 89, -127, 29, 66, -70, 64, -6, 66, -92, 11, 18, 66, -102, 23, 92, 66, 84, -88, 74, 66, -119, 19, -100, 66, -94, 1, -96, 66, -102, -123, 18, 66, -90, 29, 19, 66, -123, 45, -42, 66, -103, 56, -2, 66, 88, -84, -88, 66, 112, 89, 81, 66, -80, -53, -104, 66, -104, 46, -72, 66, -94, 52, 58, 66, -100, 104, -86, 66, -89, -92, 95, 66, -77, -50, -117, 66, -87, 1, -1, 66, -106, 115, 58, 66, 127, 87, -16, 66, -128, -22, 92, 66, -92, 49, -67, 66, -98, 5, 27, 66, 101, -64, -46, 66, 103, 103, -36, 66, -102, -112, 97, 66, 84, 10, 1, 66, -94, -80, -70, 66, 114, 7, -105, 66, 86, -116, -71, 66, -122, 54, -119, 66, -110, 57, -118, 66, -98, -60, -122, 66, -123, 14, -14, 66, 102, 30, 124, 66, -125, -83, 125, 66, 105, 79, 2, 66, -111, 74, 68, 66, 127, -35, -102, 66, -74, -79, -22, 66, -118, 38, 52, 66, 127, -63, 53, 66, -67, 13, 2, 66, -88, -66, 41, 66, -81, -73, -31, 66, -60, 117, 105, 66, -113, -44, 47, 66, -101, -116, -116, 66, -83, -82, 35, 66, -121, 10, -53, 66, -121, -22, -111, 66, -99, 5, 96, 66, -84, -13, -22, 66, -102, 27, 66, 66, -74, 77, 91, 66, -103, -116, -92, 66, 125, 39, -37, 66, -86, -74, 76, 66, -92, 73, -99, 66, -100, -46, -23, 66, -109, -23, -108, 66, -95, -124, -43, 66, 74, 91, -23, 66, -105, -34, 35, 66, 109, 56, -109, 66, 110, -121, -38, 66, -79, 91, 127, 66, -84, 125, 80, 66, -104, -97, -122, 66, -109, 92, -114, 66, 115, -107, 91, 66, -108, -85, 69, 66, -120, 0, -84, 66, 80, 79, 58, 66, 98, -58, -115, 66, -122, 50, -63, 66, -102, 27, 114, 66, -117, -10, 41, 66, 73, 37, 49, 66, 107, -82, 40, 66, -84, -6, 74, 66, 96, 38, -122, 66, -98, 98, 41, 66, 87, -1, -37, 66, -127, 93, 55, 66, -103, -49, 22, 66, 111, 47, -9, 66, 117, -84, 122, 66, 121, -90, 23, 66, -117, -98, 57, 66, 73, -73, 27, 66, -83, 19, 64, 66, -65, 74, -40, 66, -115, -101, -70, 66, -60, -49, 22, 66, -103, 19, -102, 66, 126, 83, 108, 66, 116, 1, -128, 66, -84, 118, -37, 66, -112, 52, 102, 66, -72, 17, 19, 66, -94, -60, -111, 66, 82, -104, -45, 66, 88, 84, 73, 66, -103, 20, 113, 66, -115, -102, -26, 66, -62, 103, 69, 66, -84, 109, 2, 66, -118, -125, 63, 66, -103, -84, 81, 66, -77, 82, 24, 66, -128, 2, 35, 66, -102, -106, -12, 66, -114, 110, 123, 66, -90, 73, 59, 66, 119, -25, 114, 66, 120, 90, -47, 66, -116, 21, 34, 66, -92, -108, -91, 66, -81, -4, -106, 66, -91, -34, 35, 66, -88, 33, -110, 66, -72, -45, -21, 66, -88, 104, 124, 66, -117, 76, -86, 66, 114, -91, -98, 66, -103, -119, -39, 66, -108, 8, -75, 66, -111, 121, -53, 66, -92, -24, 3, 66, 103, 44, -8, 66, -93, -8, 66, 66, -108, -106, -49, 66, -126, -113, -89, 66, -98, -21, 118, 66, 72, 87, -89, 66, -75, -70, -49, 66, 85, -33, 77, 66, -113, 83, 34, 66, -102, -94, 73, 66, -98, -30, 105, 66, -119, -95, -11, 66, -100, -114, -97, 66, 111, -54, 64, 66, -109, -10, 81, 66, 95, 71, 78, 66, -81, 53, -120, 66, -85, -14, -49, 66, 114, 15, -107, 66, -119, -102, 41, 66, -121, 6, -73, 66, -114, 73, 53, 66, -105, -80, 102, 66, 103, 28, -5, 66, -68, 85, 81, 66, -94, -120, -118, 66, -102, -58, -36, 66, -68, -107, -121, 66, -113, 53, -24, 66, 113, 125, 72, 66, -105, -58, -91, 66, -112, -59, 35, 66, 111, 2, -125, 66, -113, 121, -29, 66, -99, 50, 28, 66, 109, -39, 90, 66, -78, -108, 18, 66, 124, 27, 117, 66, -113, 43, 35, 66, -75, -40, 127, 66, -79, -60, -103, 66, 88, -63, 115, 66, -92, 103, -62, 66, -105, -73, -24, 66, -114, -85, 25, 66, -103, 20, 80, 66, 109, 72, -117, 66, -76, -76, -63, 66, -65, 71, 41, 66, 117, 62, -31, 66, -88, -32, 64, 66, -112, -4, -93, 66, -125, -32, 36, 66, 113, 115, -54, 66, 110, -125, -86, 66, -91, -70, -56, 66, -68, 43, 32, 66, -106, -91, -86, 66, -85, -73, -57, 66, -97, 104, 14, 66, 94, 3, -36, 66, -120, 82, -108, 66, 101, -65, -91, 66, -92, -55, 115, 66, -109, -125, 57, 66, -95, 118, 53, 66, -76, -44, 119, 66, -122, -33, 91, 66, -89, -62, 1, 66, -108, -35, -92, 66, -73, -107, 25, 66, -86, 48, 126, 66, -96, -46, 52, 66, -63, 52, -32, 66, 100, 23, 89, 66, 113, 60, -2, 66, -106, -74, 52, 66, -121, 102, -26, 66, 102, -86, -104, 66, -85, 61, 35, 66, 116, -120, 107, 66, -70, 3, -48, 66, -110, -117, -87, 66, -101, 23, -41 ], "precision": "FLOAT_32", "root": 0, "canonicalAndNotALeaf": true, "size": 255, "leftIndex": [ 0, 1, 255, 939386367, 654835694, 91089351, 498687794, 864854050, 729388756, 118344839, 407388214, 0 ], "rightIndex": [ 0, 1, 255, 1003356139, 77053855, 7027618, 798016566, 922894498, 124295892, 128765699, 8439475, 4105 ], "nodeFreeIndexes": [], "nodeFreeIndexPointer": -1, "leafFreeIndexes": [], "leafFreeIndexPointer": -1, "partialTreeStateEnabled": true }, "boundingBoxCacheFraction": 0.0, "partialTreeState": true, "seed": 6898202114516460044, "id": 0, "dimensions": 32, "staticSeed": 0, "weight": 0.0, "hasAuxiliaryData": false }, { "version": "2.0", "root": 0, "maxSize": 256, "outputAfter": 32, "storeSequenceIndexesEnabled": false, "centerOfMassEnabled": false, "nodeStoreState": { "version": "2.0", "capacity": 255, "compressed": true, "cutDimension": [ 0, 31, 255, 863063295, 589674055, 581363007, 173357345, 191095977, 329975383, 728939570, 212657826, 388742617, 248883253, 909700289, 668002619, 372165166, 757951917, 59849802, 708519730, 438754037, 44231546, 371001141, 1068796494, 532002809, 82254437, 1010488899, 894781143, 653732805, 598273714, 68590131, 1067171527, 396748469, 41674871, 328690762, 91043747, 174894957, 73348531, 115422305, 119781307, 732867394, 237194410, 329186301, 100118259, 506676843, 1063453746, 75 ], "cutValueData": [ 66, -99, 99, 45, 66, -123, 70, 69, 66, -86, 107, 31, 66, 72, 99, -112, 66, -120, 92, 60, 66, -83, -97, -16, 66, -102, -114, -5, 66, -101, 114, 122, 66, -64, -106, 1, 66, 104, -25, 74, 66, 86, 122, 105, 66, -100, -124, 15, 66, -79, -123, -53, 66, -101, 78, -70, 66, 116, 58, 79, 66, -74, 113, 120, 66, -90, 26, 25, 66, -106, 127, -125, 66, -86, -32, 60, 66, 95, 9, 44, 66, -63, -57, 106, 66, -94, -93, -71, 66, -126, 85, 23, 66, 121, 112, -112, 66, -111, -31, 79, 66, 110, -41, -33, 66, -103, 65, 127, 66, -91, 93, 101, 66, 109, -127, 51, 66, -124, -43, -15, 66, -84, -49, -88, 66, 110, -113, -95, 66, -112, -105, 76, 66, -121, -112, -18, 66, -105, -128, -90, 66, -107, -92, 110, 66, -124, -48, -68, 66, -91, 0, -31, 66, 80, 73, -54, 66, -114, 96, -7, 66, -120, 103, 85, 66, -120, -117, -117, 66, -85, -57, 93, 66, -113, -106, -96, 66, -61, 65, -15, 66, -69, -82, -68, 66, -108, -77, 38, 66, -113, -127, -22, 66, 108, -67, -105, 66, -117, 15, -19, 66, 117, -15, -30, 66, -86, 61, 114, 66, -76, -39, -71, 66, -98, 41, 31, 66, 124, -81, 87, 66, 120, -56, -8, 66, -85, 7, 113, 66, -79, 102, -82, 66, -96, -26, -73, 66, -102, 69, -118, 66, -112, -48, -95, 66, -94, 17, 84, 66, -89, -118, -42, 66, -107, 100, 97, 66, -113, -2, 62, 66, -124, -13, -109, 66, 120, -22, 114, 66, -117, 56, -72, 66, 79, 7, -106, 66, -79, 4, -71, 66, -95, -102, 18, 66, -94, 58, -47, 66, -124, 83, 22, 66, -106, 114, -48, 66, -99, 37, 22, 66, -69, 127, -85, 66, -103, -89, -105, 66, 98, 77, -56, 66, -114, 85, 36, 66, -80, 62, 14, 66, -102, 39, -18, 66, -121, 76, -34, 66, -128, -18, 85, 66, -97, 69, 28, 66, -125, 40, -47, 66, -122, 10, -38, 66, -124, 112, -119, 66, -99, 53, 3, 66, -122, 75, 99, 66, 82, 126, 88, 66, -96, 32, 65, 66, -67, -54, -55, 66, -101, 52, -78, 66, -97, 1, -77, 66, 94, 54, 29, 66, -105, -36, -34, 66, -109, 111, 110, 66, 97, 3, -17, 66, -109, -68, -100, 66, -108, -93, -80, 66, -116, 22, 58, 66, -67, 70, -112, 66, -124, 105, 60, 66, -106, 99, 90, 66, -119, -10, -63, 66, 73, 91, -114, 66, 85, -67, -116, 66, -85, 118, -23, 66, -109, 114, 108, 66, -91, -66, 99, 66, -112, 53, -87, 66, -93, -100, 31, 66, -122, -31, 122, 66, 113, 84, -117, 66, -99, -24, 41, 66, -72, 84, 105, 66, -96, -128, -28, 66, -122, 81, -69, 66, -109, 58, -14, 66, -110, -15, -48, 66, 96, -125, 40, 66, -112, 73, -72, 66, -105, 97, 119, 66, -123, 34, 48, 66, -105, 32, -118, 66, 121, -16, -73, 66, -98, 21, -22, 66, 116, -96, 33, 66, -102, -118, -4, 66, -127, -79, 48, 66, 122, 52, -41, 66, -83, 59, 122, 66, 109, 57, -96, 66, -104, -31, 24, 66, -87, 107, -48, 66, -76, 38, 16, 66, -119, 32, 94, 66, -73, -121, 66, 66, 125, -46, -62, 66, -103, -6, -127, 66, -69, -33, 30, 66, -112, 47, 69, 66, -118, -37, 12, 66, 94, 92, -15, 66, 115, 59, -126, 66, -127, 87, 47, 66, 105, 50, -50, 66, -114, 51, 30, 66, -100, -46, -87, 66, -118, -66, 121, 66, 110, 93, 27, 66, -74, -43, 52, 66, -97, 125, -67, 66, -110, 87, -75, 66, 103, 51, 57, 66, -77, 84, 45, 66, -110, -106, 80, 66, -106, 84, 30, 66, -84, -15, 26, 66, -126, 105, 90, 66, -89, 6, -119, 66, -63, -128, -95, 66, -62, -83, 115, 66, -102, -118, 23, 66, -121, -116, 29, 66, 127, -32, -112, 66, 115, -92, -115, 66, -62, 65, -83, 66, -98, -117, 30, 66, -107, -39, 78, 66, 107, 12, 64, 66, -71, 44, 119, 66, -93, -122, -123, 66, -64, 68, 78, 66, 87, 23, 80, 66, -115, 52, 24, 66, 93, 97, -6, 66, -117, 98, 109, 66, 121, 58, 88, 66, -65, -111, 110, 66, -95, -57, 20, 66, -90, 119, -30, 66, 76, 46, 64, 66, -92, 11, 107, 66, -69, 87, -10, 66, -72, 122, -112, 66, 97, 40, 8, 66, 78, -47, -55, 66, 100, -87, 13, 66, -113, 69, -109, 66, -74, -95, 21, 66, 120, 76, 60, 66, -100, -85, 18, 66, -117, 67, 56, 66, -113, -51, 88, 66, -76, -76, -42, 66, -72, 16, -51, 66, -89, -22, -74, 66, -74, -45, -11, 66, -99, 79, 115, 66, -112, 118, 0, 66, -97, 100, 7, 66, 112, -39, -107, 66, -125, -10, 92, 66, -70, -32, -37, 66, 127, 93, -10, 66, 109, -38, -110, 66, -122, -3, -18, 66, 104, 50, -22, 66, -61, -9, 118, 66, -114, -9, 32, 66, -125, -77, 48, 66, 123, -26, 47, 66, -101, 79, -59, 66, -73, -84, 5, 66, 87, -100, -28, 66, 125, 116, 4, 66, -103, -5, 122, 66, -87, 42, 74, 66, 93, -43, -73, 66, 92, -29, -101, 66, 97, -20, -100, 66, 109, -35, -102, 66, -102, -56, -27, 66, 115, -82, 119, 66, 85, 117, 62, 66, -120, -2, 36, 66, 86, 119, 12, 66, -128, 67, -66, 66, -112, -56, 19, 66, -97, 39, 46, 66, -116, 11, 101, 66, -102, 106, 64, 66, -102, 41, -11, 66, -88, 15, 52, 66, -90, -20, -57, 66, -125, -67, -48, 66, 111, -19, 97, 66, 102, -91, 53, 66, -93, 21, -24, 66, 123, -37, -58, 66, -77, 121, -108, 66, -104, -109, 84, 66, -113, -120, 91, 66, -96, -61, 122, 66, -85, -5, 105, 66, 100, -104, 5, 66, 85, 84, -89, 66, -80, -125, 33, 66, 92, 55, -120, 66, -69, -108, -42, 66, 80, 17, 114, 66, -95, 40, -89, 66, -72, -21, 54, 0, 0, 0, 0 ], "precision": "FLOAT_32", "root": 0, "canonicalAndNotALeaf": true, "size": 254, "leftIndex": [ -1, 1, 255, 1114429589, 1147905998, 1104097922, 643900796, 772984187, 982901212, 973951262, 1156682156, 597843904, 581218456, 600350090, 581159164, 596033707, 1093 ], "rightIndex": [ -1, 1, 255, 1033119116, 1147674176, 1147826942, 629748716, 755505682, 1112040646, 1012208236, 1028073697, 588217679, 624204673, 1026507451, 753575767, 595718105, 1175 ], "nodeFreeIndexes": [], "nodeFreeIndexPointer": 0, "leafFreeIndexes": [], "leafFreeIndexPointer": 0, "partialTreeStateEnabled": true }, "boundingBoxCacheFraction": 0.0, "partialTreeState": true, "seed": -9202437649290432236, "id": 0, "dimensions": 32, "staticSeed": 0, "weight": 0.0, "hasAuxiliaryData": false }, { "version": "2.0", "root": 0, "maxSize": 256, "outputAfter": 32, "storeSequenceIndexesEnabled": false, "centerOfMassEnabled": false, "nodeStoreState": { "version": "2.0", "capacity": 255, "compressed": true, "cutDimension": [ 1, 31, 255, 535719095, 867105787, 151614999, 707219049, 84183276, 234971147, 149604553, 642161656, 696657209, 852529586, 886947438, 656297559, 492732625, 62060633, 614388041, 56075691, 740370285, 885229957, 706316741, 760457038, 384840541, 849947140, 299208006, 537546950, 355483385, 830564046, 754257754, 133924414, 160215686, 253534916, 486409978, 277181321, 887324940, 396786524, 133542942, 296075823, 377299001, 77452291, 642617502, 704455112, 767255632, 354700450, 13175 ], "cutValueData": [ 66, 70, 121, -124, 66, -98, 70, 107, 66, -88, 117, -54, 66, -120, -83, 12, 66, -124, -32, 87, 66, -74, -30, -51, 66, -78, -9, -19, 66, -119, 47, 85, 66, -114, 11, 24, 66, -95, -42, 30, 66, -120, -38, -8, 66, 106, -54, -102, 66, -107, 31, -38, 66, -115, 63, -107, 66, 113, 7, -63, 66, -71, -89, -99, 66, 101, -119, 48, 66, -71, -6, -118, 66, -119, -83, -42, 66, -87, -29, 107, 66, -98, -27, 0, 66, 91, 41, -22, 66, -93, -4, -99, 66, -124, 70, 59, 66, 69, 95, 112, 66, -114, 15, -18, 66, 94, -62, -56, 66, -113, 76, -93, 66, -124, -95, -114, 66, 127, 32, 4, 66, -79, -31, 11, 66, -90, -64, 78, 66, -81, 17, 35, 66, -71, 25, 15, 66, -118, -63, -10, 66, -105, -100, -96, 66, -71, 124, -62, 66, 86, -111, -3, 66, -98, -47, -91, 66, -89, 13, 8, 66, -109, 121, -28, 66, 109, -105, 114, 66, -67, 107, 93, 66, -122, 13, -39, 66, -93, -69, 27, 66, -75, 17, 124, 66, -93, 18, 58, 66, 101, 72, -72, 66, -71, 75, 53, 66, 124, 66, 77, 66, -116, -3, 114, 66, -111, -16, -122, 66, -125, 4, -15, 66, -92, -83, 15, 66, -69, -95, -110, 66, -99, -113, -42, 66, 93, 1, -125, 66, 118, -59, 93, 66, -102, 32, -4, 66, 127, -49, -123, 66, -81, 92, -80, 66, -74, 20, 12, 66, -116, -88, -23, 66, -93, -61, -92, 66, -93, -87, -1, 66, -91, 13, -97, 66, -85, -51, 125, 66, -72, -4, 102, 66, -90, -128, 121, 66, -128, 79, -73, 66, -126, 21, 109, 66, 97, -45, 85, 66, 124, -25, -72, 66, -127, -23, -118, 66, 72, -87, 94, 66, 119, 53, -73, 66, -115, -41, -28, 66, -87, -76, -93, 66, 76, -50, -86, 66, 87, -81, 77, 66, -94, 94, 105, 66, -100, -43, 61, 66, -121, -22, -21, 66, 123, -46, -111, 66, 101, -93, -85, 66, 127, -99, -48, 66, -128, 22, 101, 66, 113, 92, -91, 66, -126, 115, 58, 66, -126, 24, -82, 66, -70, -127, -126, 66, -72, -59, -96, 66, -81, 29, 77, 66, -67, -128, 50, 66, -123, -99, 49, 66, -96, 98, 115, 66, 94, 119, 117, 66, -98, 40, 22, 66, -99, 3, -30, 66, 100, 13, -20, 66, -79, -123, -26, 66, -119, 52, 112, 66, -97, -1, -122, 66, -93, 115, 25, 66, 102, -88, -68, 66, 81, -65, -10, 66, -113, 73, 93, 66, -125, -29, 35, 66, -74, -12, 101, 66, -123, -9, 96, 66, -123, -1, 90, 66, -84, -116, 67, 66, -91, 28, -41, 66, -77, 58, -55, 66, -116, 56, -101, 66, 119, -80, -124, 66, 118, 15, -43, 66, -74, -65, 45, 66, -119, -85, 13, 66, -113, 30, 22, 66, 82, -5, 110, 66, -87, -28, 0, 66, -93, 119, 3, 66, -86, 98, 127, 66, -80, 35, 110, 66, -128, 62, 111, 66, -86, 47, -102, 66, -116, -67, 49, 66, -101, -72, 97, 66, -113, 29, -103, 66, 83, 75, -122, 66, -115, -67, -102, 66, -69, -2, 124, 66, 100, -40, -98, 66, 116, -13, -113, 66, -115, -106, 86, 66, -108, 23, -14, 66, -121, -82, -30, 66, -127, -64, -2, 66, -78, 8, 54, 66, -106, -65, 36, 66, -72, -101, 48, 66, -113, 18, -60, 66, -116, 35, -47, 66, -106, -98, -92, 66, 99, -57, 94, 66, 120, -71, -43, 66, -84, 47, -53, 66, -98, 117, 25, 66, 114, -7, 66, 66, 87, 92, -8, 66, -110, 110, 107, 66, -82, 70, -68, 66, -75, 14, 77, 66, -95, 14, 7, 66, 108, 66, -40, 66, -87, 120, 100, 66, 82, 91, 95, 66, -121, -101, 62, 66, -109, -65, -127, 66, -76, -128, 122, 66, -122, 42, 107, 66, 81, -125, -25, 66, -65, 24, 114, 66, 94, 88, 85, 66, -120, 77, -118, 66, -111, -62, -5, 66, -79, -98, -98, 66, -107, 11, -47, 66, 126, -4, -94, 66, 110, -46, -80, 66, 104, 34, -89, 66, 117, -78, 45, 66, -63, -15, -94, 66, 93, -103, 35, 66, -92, 98, 45, 66, -83, 88, 52, 66, -105, -9, -127, 66, -121, -111, 51, 66, -104, 65, 80, 66, 112, 100, 5, 66, 102, 100, 107, 66, -107, -45, 112, 66, -123, -48, -73, 66, -102, 16, -115, 66, -106, 54, 84, 66, -72, 0, 16, 66, -101, 35, -117, 66, 125, 59, -103, 66, -65, 78, -91, 66, -63, 117, 123, 66, -68, -67, -15, 66, -113, 121, -69, 66, -70, 106, -74, 66, 86, 89, 21, 66, -102, -64, -45, 66, -114, -47, 102, 66, 126, 48, -118, 66, 89, -3, -17, 66, -89, 18, -75, 66, -103, 2, 65, 66, -114, -76, -114, 66, -92, 112, -51, 66, 122, 25, 124, 66, -94, 79, 91, 66, -102, 125, 100, 66, -64, 82, 98, 66, -120, 50, -43, 66, 123, -121, 122, 66, -113, 58, -91, 66, 92, 57, 29, 66, -100, 109, 120, 66, 120, -127, -13, 66, -126, 35, 94, 66, -89, 13, 85, 66, -95, 47, -96, 66, -114, 89, -12, 66, 76, 73, 28, 66, 100, -118, -119, 66, -106, -50, 112, 66, -87, -35, -6, 66, 71, 35, -125, 66, -81, -107, -51, 66, -123, 110, -113, 66, -115, -12, -18, 66, -82, -38, -68, 66, -109, 35, -83, 66, -106, -70, 66, 66, -122, 34, 105, 66, -118, -86, -106, 66, -126, -124, 123, 66, 123, 63, -39, 66, -62, -91, -8, 66, 80, -40, -26, 66, 80, -39, 78, 66, -109, 121, 77, 66, 118, 123, -20, 66, 120, 94, -78, 66, 120, 75, 2, 66, -86, 96, -9, 66, 96, -83, 16, 66, -109, -122, 37, 66, 72, -112, -110, 66, 111, -51, -39, 66, -124, -77, -37, 66, -81, -27, -29, 66, -128, 32, -68, 66, -89, 84, 78, 66, -90, 62, 48, 66, -96, 25, 106, 66, -122, -67, -26, 66, -117, -53, -113, 66, -84, 42, -103, 66, -112, -75, -97, 66, 112, 11, 22 ], "precision": "FLOAT_32", "root": 0, "canonicalAndNotALeaf": true, "size": 255, "leftIndex": [ 0, 1, 255, 1044373375, 872148407, 22248433, 387200477, 762354131, 402689047, 6856100, 311476328, 5154 ], "rightIndex": [ 0, 1, 255, 1044381565, 309447863, 326926004, 928185553, 772906643, 24468693, 553929732, 186810656, 112 ], "nodeFreeIndexes": [], "nodeFreeIndexPointer": -1, "leafFreeIndexes": [], "leafFreeIndexPointer": -1, "partialTreeStateEnabled": true }, "boundingBoxCacheFraction": 0.0, "partialTreeState": true, "seed": -3274031270900754220, "id": 0, "dimensions": 32, "staticSeed": 0, "weight": 0.0, "hasAuxiliaryData": false }, { "version": "2.0", "root": 0, "maxSize": 256, "outputAfter": 32, "storeSequenceIndexesEnabled": false, "centerOfMassEnabled": false, "nodeStoreState": { "version": "2.0", "capacity": 255, "compressed": true, "cutDimension": [ 0, 31, 255, 578209893, 257924091, 585725913, 352298682, 1059957473, 1068420343, 227716159, 749119150, 514098745, 715069249, 87672902, 330159845, 871206710, 132696553, 975129162, 254793854, 128544595, 909768015, 52383069, 774183261, 185947346, 257414195, 603028837, 1016255798, 911256998, 77956717, 86996186, 580475745, 336965233, 866872495, 731348601, 259210925, 463572070, 858477874, 78428495, 44030675, 733064953, 719022758, 712485181, 254453550, 846256505, 917936994, 581 ], "cutValueData": [ 66, -69, 17, 18, 66, -64, -11, 112, 66, -70, -40, -77, 66, -68, -23, -115, 66, -73, 22, -21, 66, -122, -98, -89, 66, -114, 11, -41, 66, -110, -68, -31, 66, 101, 0, 84, 66, -77, 34, -118, 66, 114, 119, -127, 66, -65, -50, 117, 66, -88, -39, -128, 66, -88, 97, 21, 66, -122, 64, 105, 66, 100, -24, 43, 66, 111, -109, -29, 66, -85, 106, 118, 66, -97, 19, 82, 66, -75, 96, -89, 66, 126, 92, 103, 66, 69, 112, -21, 66, 127, -7, 95, 66, -85, -101, -22, 66, -85, 92, -101, 66, -79, 73, -122, 66, -93, -120, 76, 66, -98, 1, -107, 66, -123, 102, 54, 66, -122, -43, -19, 66, 100, -117, 55, 66, 109, -37, -28, 66, 126, 8, -127, 66, -96, 109, -92, 66, -103, 37, -128, 66, -125, -13, 103, 66, -112, -75, -70, 66, 108, 72, 68, 66, -72, 9, 41, 66, -122, 47, 41, 66, -69, 111, 19, 66, -89, -1, -88, 66, -124, -107, -95, 66, -119, 56, 27, 66, -91, -77, 119, 66, -107, 75, -11, 66, 111, 82, 93, 66, -100, 69, -1, 66, 72, -53, -8, 66, -85, 113, 0, 66, -94, -71, 21, 66, -71, 79, 30, 66, -102, -108, -100, 66, -95, 48, -69, 66, -93, -31, 106, 66, -69, 16, -83, 66, -96, -89, -64, 66, -91, 30, -25, 66, -72, -83, -60, 66, 114, 67, -43, 66, -79, -81, 121, 66, 123, 112, 80, 66, -95, -112, 66, 66, 73, -18, 21, 66, -112, 10, -128, 66, -65, 65, 3, 66, -112, -112, 103, 66, 68, 111, -79, 66, -109, 98, -9, 66, -91, 63, 75, 66, -87, -43, -57, 66, -97, 40, 38, 66, -80, -99, -3, 66, 105, -120, 123, 66, 97, -114, -58, 66, -102, 17, 86, 66, -115, 120, 94, 66, 105, 111, -111, 66, -110, -55, 70, 66, -94, 69, -113, 66, -92, 75, -11, 66, -101, -31, 30, 66, -73, 60, 90, 66, -102, 58, -61, 66, -109, -1, 27, 66, -109, 43, 84, 66, -104, 92, 99, 66, 102, 124, -97, 66, -114, 30, -127, 66, 115, 30, -35, 66, -98, -15, -127, 66, 116, -108, -13, 66, -109, 42, -93, 66, 112, 49, 105, 66, -82, -5, -127, 66, -118, 6, 16, 66, 72, -45, -103, 66, -78, 32, -115, 66, -66, -72, 54, 66, 91, -62, -56, 66, 80, 18, 113, 66, -124, 5, 82, 66, -81, 8, 61, 66, 96, -15, -36, 66, -81, -82, 25, 66, -72, -119, 12, 66, -110, -44, -5, 66, 120, -84, -110, 66, 99, -67, 120, 66, -70, -117, 1, 66, -128, -99, -106, 66, -126, -71, 55, 66, 90, 4, 123, 66, -78, 102, 46, 66, -113, 124, 55, 66, -121, -114, 0, 66, -72, -3, -33, 66, 122, 84, -98, 66, -116, -36, 46, 66, -113, -40, -83, 66, -80, -56, -10, 66, -111, 119, -15, 66, -109, 91, -91, 66, -104, -118, -28, 66, 122, -120, 105, 66, -109, -27, 26, 66, -120, -77, -6, 66, -123, 36, -26, 66, 93, 94, 24, 66, -125, -102, -27, 66, -103, -68, -96, 66, 93, 110, 95, 66, -102, -69, 79, 66, -108, 51, 77, 66, -116, -77, -90, 66, -120, 109, -9, 66, 91, 77, 45, 66, -108, -13, 6, 66, -123, 58, -97, 66, -118, 94, -99, 66, -125, 117, 56, 66, 117, 16, 125, 66, 107, -99, -33, 66, -99, -54, 123, 66, -94, -47, -50, 66, -119, -91, -5, 66, 77, 39, -17, 66, -106, -57, -55, 66, -110, -82, -90, 66, -113, -13, 4, 66, 87, 121, 112, 66, 100, 29, 62, 66, -123, 23, 87, 66, -109, 1, -90, 66, 123, 43, 52, 66, -94, -35, -49, 66, 93, 91, 98, 66, -106, -44, 22, 66, -110, -89, 78, 66, -104, -105, -89, 66, 109, 70, -68, 66, -122, 55, -99, 66, -123, 40, -4, 66, 107, -63, 123, 66, -89, -17, -25, 66, -113, 109, 44, 66, 90, -35, 72, 66, -98, -84, 67, 66, -102, 29, 97, 66, -105, 17, -118, 66, -97, -60, 55, 66, -79, -54, -3, 66, -90, -61, -124, 66, -86, 63, -78, 66, -86, -119, -61, 66, -116, 88, -86, 66, -117, -72, 105, 66, -76, -60, -3, 66, -111, -76, 96, 66, -123, 87, 46, 66, -112, 121, -73, 66, -91, 94, -85, 66, -73, -61, -18, 66, -101, 17, 36, 66, -111, -114, -119, 66, -73, 100, -98, 66, 83, -84, 91, 66, -118, -66, -114, 66, 94, 27, -40, 66, 94, 11, 17, 66, -71, -63, 108, 66, 102, 20, 7, 66, -127, 16, -75, 66, -83, 112, 14, 66, -95, -70, 104, 66, -112, -96, 80, 66, -64, -128, -111, 66, -121, -26, 4, 66, 109, -33, 107, 66, -89, 120, 0, 66, 120, -89, 20, 66, -127, 49, 117, 66, 86, 15, -21, 66, 99, 51, -21, 66, -110, -33, 45, 66, -103, 127, -99, 66, -91, -114, 12, 66, -87, 101, 71, 66, 74, -126, 74, 66, -104, 12, -17, 66, -120, 112, 102, 66, 124, -77, -84, 66, -89, 71, 23, 66, 111, -80, 116, 66, -126, 62, 98, 66, -120, 75, -115, 66, -128, -38, -115, 66, -101, 96, -123, 66, -104, -11, 119, 66, -81, 23, -111, 66, 111, 123, 85, 66, -66, 74, -62, 66, -78, -124, -81, 66, 112, 124, 14, 66, -87, 35, 72, 66, 102, -49, -25, 66, 83, 74, -78, 66, -103, 13, 24, 66, -72, -103, -126, 66, -123, 87, 15, 66, -112, -25, 112, 66, 76, -66, 104, 66, 91, 86, 61, 66, -91, 111, 25, 66, -92, -46, 49, 66, -121, 37, 112, 66, -101, 4, 5, 66, -123, 24, -40, 66, -86, -82, 16, 66, -125, -109, 76, 66, -90, 38, -23, 66, -121, -5, -101, 66, -103, 0, -98, 66, 84, 115, -46, 66, 88, 1, -81, 66, -86, -13, 79, 66, -112, 57, -101, 66, 82, -108, -96, 66, -114, -110, -23, 66, -112, -84, -38, 66, -125, 90, 88, 66, -110, -1, 124, 66, 113, -60, 118, 66, -76, -110, 94, 0, 0, 0, 0 ], "precision": "FLOAT_32", "root": 0, "canonicalAndNotALeaf": true, "size": 254, "leftIndex": [ -1, 1, 255, 1157477768, 587688443, 1147846949, 975665816, 602574268, 1026185486, 973596749, 758185996, 753337331, 715789547, 715232068, 969083423, 754977551, 1093 ], "rightIndex": [ -1, 1, 255, 645700004, 1117021184, 1156704272, 600502082, 726393487, 768264632, 629039186, 717202579, 758888728, 717424600, 581316871, 970172036, 640356988, 1102 ], "nodeFreeIndexes": [], "nodeFreeIndexPointer": 0, "leafFreeIndexes": [], "leafFreeIndexPointer": 0, "partialTreeStateEnabled": true }, "boundingBoxCacheFraction": 0.0, "partialTreeState": true, "seed": -3778355347224434329, "id": 0, "dimensions": 32, "staticSeed": 0, "weight": 0.0, "hasAuxiliaryData": false }, { "version": "2.0", "root": 0, "maxSize": 256, "outputAfter": 32, "storeSequenceIndexesEnabled": false, "centerOfMassEnabled": false, "nodeStoreState": { "version": "2.0", "capacity": 255, "compressed": true, "cutDimension": [ 0, 31, 255, 1020871983, 94566889, 760979307, 762517201, 74089533, 720059238, 1039236787, 882164983, 443010978, 1067685491, 744437879, 44227651, 712934875, 586599657, 478058170, 712497074, 584890827, 1067023138, 212507518, 644517879, 57637087, 922614059, 211124159, 630942554, 212127663, 980757562, 922680098, 251194977, 651341409, 182695597, 992923474, 907738585, 530524267, 524254673, 350455678, 636851930, 978783919, 460889075, 854407546, 1050527682, 441574977, 1063108273, 743 ], "cutValueData": [ 66, -82, 59, -41, 66, -109, 15, 112, 66, -94, 21, -4, 66, -74, 10, -84, 66, -124, -19, 86, 66, 106, 118, -85, 66, 116, 125, -39, 66, -83, -4, 63, 66, 108, 68, -113, 66, -128, -76, -32, 66, 124, 119, 18, 66, 75, -24, -25, 66, -115, -4, 120, 66, -107, -35, 49, 66, 86, 65, 17, 66, -122, 97, 67, 66, 100, -62, 9, 66, 110, 17, 46, 66, 122, -118, 91, 66, -94, 52, 78, 66, -89, 92, -90, 66, -109, -85, -95, 66, -121, -34, -11, 66, -59, -80, -45, 66, -94, -79, -49, 66, -127, -100, -4, 66, -125, 32, 71, 66, -74, -73, 86, 66, -125, 106, -99, 66, -121, -105, -112, 66, -101, 0, -118, 66, 127, 99, -46, 66, 95, -80, -85, 66, -99, -40, 10, 66, 74, 76, 9, 66, 77, -10, -36, 66, 118, -13, -57, 66, -98, 94, -27, 66, -121, -30, 119, 66, -112, 16, -45, 66, -99, 124, -9, 66, 94, -64, 77, 66, -67, -39, 32, 66, -83, -92, -92, 66, -117, 85, 59, 66, -92, 22, -24, 66, -120, 77, 6, 66, -62, 43, 35, 66, 117, -77, 31, 66, 114, 38, -5, 66, 109, -108, -103, 66, -89, -27, 2, 66, -87, 116, -109, 66, 71, 1, 107, 66, -113, 0, -93, 66, 112, -124, 57, 66, -96, -39, -105, 66, -99, 66, 101, 66, -100, -109, -59, 66, -108, 103, 49, 66, -81, -114, -36, 66, -119, 113, -75, 66, -91, -120, -82, 66, -101, 67, -60, 66, -123, -7, -103, 66, -94, -55, -115, 66, 126, -107, -48, 66, -109, 114, 34, 66, 119, 124, -67, 66, -112, -36, 103, 66, -63, 113, -6, 66, -98, 74, 62, 66, -102, -64, 35, 66, 111, -37, -125, 66, 123, 65, 18, 66, 115, 34, -3, 66, -81, -19, 16, 66, -66, 29, -84, 66, -121, -38, -46, 66, -111, -10, 24, 66, -125, -53, -119, 66, -117, 32, -44, 66, -99, 106, 24, 66, 75, -122, 21, 66, -68, -96, 113, 66, 102, 32, -14, 66, -84, -77, 1, 66, 107, 18, -95, 66, -93, -119, -35, 66, -105, -102, -117, 66, -98, 87, 51, 66, -99, 25, 14, 66, -101, 94, -5, 66, -99, 75, 24, 66, -61, 122, -72, 66, -103, 31, 45, 66, 102, 25, -43, 66, -70, -15, 121, 66, -79, 59, 90, 66, -79, 11, -24, 66, -77, 51, 105, 66, 115, -30, 11, 66, -95, 23, 43, 66, -126, -68, -41, 66, 126, -10, -4, 66, -81, -81, 105, 66, -114, -112, -114, 66, 81, 58, -103, 66, -118, 45, -41, 66, 97, -99, 91, 66, -100, -23, -48, 66, -95, 3, -22, 66, -117, -70, 36, 66, -98, 67, 63, 66, -65, 127, 92, 66, -69, -117, -109, 66, -81, 120, -54, 66, 121, 97, -112, 66, 96, -93, 23, 66, -79, -74, 21, 66, -115, -128, -124, 66, 108, 96, -32, 66, 118, 102, 53, 66, 124, 54, -73, 66, -127, -49, -78, 66, -119, 87, -30, 66, -82, 17, -63, 66, -59, -62, 101, 66, -71, -45, 21, 66, -85, -109, -35, 66, -93, 113, -99, 66, -90, 67, -74, 66, -121, -27, -83, 66, -92, 109, 21, 66, -111, -64, 102, 66, -63, 126, -20, 66, -75, -80, 72, 66, -126, -46, -91, 66, -100, 49, -79, 66, -88, 107, 39, 66, -92, -6, -30, 66, 94, -101, -33, 66, -111, -40, 91, 66, 110, -88, 32, 66, -96, 35, -78, 66, -93, 107, -15, 66, -96, 52, -122, 66, 104, 51, -47, 66, 112, 101, -81, 66, -89, 32, 104, 66, -97, 123, -36, 66, -76, 67, -15, 66, -114, -22, 52, 66, 125, 24, 86, 66, -76, -23, 16, 66, -103, 54, -33, 66, -98, -45, -58, 66, -96, 106, 100, 66, -105, 29, 14, 66, -63, -37, 1, 66, 85, -121, -36, 66, -118, 21, -46, 66, -100, -74, 5, 66, -116, 35, -126, 66, 93, 78, -110, 66, 117, 69, -61, 66, 82, -90, -30, 66, -95, 27, -71, 66, -71, -2, -24, 66, 124, -52, -24, 66, -99, 86, 104, 66, 122, 110, 81, 66, -73, -25, -100, 66, -103, 43, -92, 66, -112, -127, 89, 66, 77, 28, -49, 66, 98, -50, 82, 66, -113, -123, -94, 66, 92, -55, -114, 66, 107, -124, 63, 66, -108, 61, 127, 66, 94, 12, 125, 66, 91, -110, -101, 66, -101, -83, 31, 66, -94, 119, 47, 66, -120, 13, -72, 66, -126, -34, -2, 66, -97, 30, 14, 66, 127, -53, -84, 66, 117, -30, -49, 66, -109, -59, -23, 66, 106, -111, -83, 66, -67, 66, -93, 66, -95, -99, -64, 66, -85, -105, -11, 66, 117, 28, 49, 66, -95, 68, 116, 66, 83, 88, -94, 66, -125, 115, 89, 66, -84, 123, 106, 66, 86, -105, 35, 66, -86, 90, -89, 66, 104, -121, 118, 66, -105, 122, 59, 66, -101, 114, 18, 66, -94, -32, 55, 66, -79, 104, 58, 66, 106, 103, -120, 66, 108, 35, -40, 66, 118, 116, 11, 66, 114, -105, 105, 66, -81, 96, 19, 66, -96, 7, -107, 66, 91, -33, -2, 66, 123, 125, 125, 66, -122, 47, 125, 66, 68, -56, 65, 66, -101, 50, -35, 66, -73, -67, -4, 66, -105, -120, 21, 66, -88, 100, 70, 66, -104, -8, -98, 66, 123, 120, -3, 66, -106, 4, 74, 66, -102, -11, -14, 66, 115, 2, -32, 66, -69, 89, -102, 66, -123, -69, 22, 66, 124, 28, 37, 66, 91, 46, 2, 66, 74, 94, 27, 66, -90, 75, -64, 66, 87, -97, -53, 66, -76, -108, 105, 66, -110, -68, -72, 66, -107, -118, 67, 66, -103, -66, 28, 66, -79, 11, 38, 66, -120, -52, 33, 66, 88, 48, -103, 66, -99, 67, 117, 66, -109, -110, -55, 66, -63, 93, -65, 66, -115, 19, -79, 66, 84, -29, 100, 66, -121, -9, 41, 66, -69, 28, -80, 66, -101, -20, -72, 66, 121, -20, -51, 66, -95, -107, -54, 66, -65, 32, 28, 66, -100, -97, 96, 66, 114, -31, -119, 66, 113, 35, 83, 0, 0, 0, 0 ], "precision": "FLOAT_32", "root": 0, "canonicalAndNotALeaf": true, "size": 254, "leftIndex": [ -1, 1, 255, 1112837453, 1117086767, 975718871, 1013967445, 1117440845, 1032503558, 629218502, 1104077698, 724699304, 640674031, 753495493, 588216641, 581721979, 1093 ], "rightIndex": [ -1, 1, 255, 1162259279, 1156767371, 1112830567, 1031461285, 1117082416, 631266250, 581330083, 1102502788, 725178301, 768279937, 753851246, 645613321, 768198073, 1096 ], "nodeFreeIndexes": [], "nodeFreeIndexPointer": 0, "leafFreeIndexes": [], "leafFreeIndexPointer": 0, "partialTreeStateEnabled": true }, "boundingBoxCacheFraction": 0.0, "partialTreeState": true, "seed": -6113428335752356252, "id": 0, "dimensions": 32, "staticSeed": 0, "weight": 0.0, "hasAuxiliaryData": false }, { "version": "2.0", "root": 0, "maxSize": 256, "outputAfter": 32, "storeSequenceIndexesEnabled": false, "centerOfMassEnabled": false, "nodeStoreState": { "version": "2.0", "capacity": 255, "compressed": true, "cutDimension": [ 0, 31, 255, 754238655, 303134165, 935192163, 354379938, 171411282, 919938218, 481872430, 195147813, 187248085, 473528881, 262749606, 483639285, 318319270, 498904418, 523308769, 731084623, 521846193, 362265005, 1017487010, 258991987, 103656913, 643804798, 901504089, 383989611, 883230441, 847214373, 707074923, 115531125, 584362039, 742046455, 107588339, 391829959, 1067542898, 329321707, 1026113227, 634501623, 35719918, 37406818, 937236853, 91827443, 895862653, 90536699, 5 ], "cutValueData": [ 66, -92, -3, 98, 66, -80, 90, -29, 66, 74, -38, 51, 66, 94, 4, -48, 66, -120, 80, 11, 66, -91, -118, -70, 66, 92, -127, 43, 66, -66, -74, 9, 66, 122, -21, 93, 66, -91, 103, 64, 66, -91, -113, -117, 66, 124, -18, 3, 66, 82, -96, -11, 66, 105, 126, -18, 66, 93, 117, -117, 66, -98, 25, -11, 66, -94, 99, -104, 66, -111, -117, 37, 66, -110, -102, 74, 66, -73, -8, 35, 66, -99, 74, 8, 66, 95, 109, -56, 66, 108, -23, -9, 66, 102, 107, 2, 66, -63, 116, 124, 66, 84, 114, -86, 66, -124, -88, -117, 66, -92, -39, -48, 66, -121, 15, -70, 66, -101, -113, 92, 66, -100, -121, -17, 66, -112, -75, 78, 66, 127, 33, 61, 66, 117, -70, 57, 66, 82, -1, 119, 66, -76, -35, 43, 66, 85, 78, 29, 66, -123, 116, -123, 66, -93, 96, 7, 66, -118, -110, 111, 66, 78, -64, 67, 66, -121, -24, -40, 66, -97, 70, 40, 66, -99, 71, 64, 66, -94, 124, -55, 66, 82, -2, 12, 66, -113, -22, 111, 66, -118, 121, -13, 66, 125, 111, 41, 66, 101, 4, 110, 66, -120, -75, 20, 66, -97, 86, 66, 66, 106, 67, -41, 66, -106, -68, -17, 66, -80, 115, -105, 66, -81, 52, 44, 66, -99, -67, -30, 66, -70, -128, -37, 66, 126, -37, 80, 66, -105, 85, 118, 66, -60, -17, 116, 66, -85, -71, -77, 66, -83, -12, 26, 66, -106, 19, 47, 66, 120, -85, 24, 66, -107, 44, 19, 66, -111, -116, 45, 66, -82, -90, -93, 66, -103, 118, 43, 66, -124, -47, -16, 66, 97, -125, -31, 66, -83, 51, -104, 66, -88, 70, 15, 66, 105, 88, -87, 66, -92, 86, -72, 66, 119, 120, -121, 66, -128, -128, 82, 66, -79, 35, -105, 66, -74, 42, -112, 66, -76, -53, 85, 66, 127, -114, -89, 66, 127, 110, 24, 66, -99, 78, 18, 66, -89, -123, -30, 66, -99, 123, -66, 66, -128, 20, 79, 66, 93, 112, 16, 66, -127, 74, 70, 66, -73, 46, 12, 66, -101, 29, -120, 66, 115, 104, 105, 66, 115, 75, -122, 66, -88, 17, -20, 66, -104, -54, 68, 66, -91, 54, 101, 66, -126, 81, -23, 66, 126, -1, 96, 66, 103, -16, 121, 66, -86, 83, -36, 66, 122, 9, 57, 66, -104, 20, 1, 66, -114, -20, 14, 66, 118, -4, -108, 66, -107, 35, -59, 66, 107, 116, -108, 66, 87, -62, 29, 66, 78, -36, 125, 66, 104, -4, -65, 66, -76, 119, -8, 66, -103, 54, -35, 66, -124, 109, -103, 66, -95, -14, 22, 66, -110, 44, 68, 66, -79, -102, 29, 66, -118, -126, 83, 66, -82, 20, 45, 66, -102, -50, -52, 66, -123, -41, -113, 66, -125, 75, -105, 66, -110, -34, -120, 66, -103, 90, -122, 66, -60, 24, -98, 66, -97, -85, -62, 66, 82, -30, -78, 66, -79, 93, -64, 66, 109, 14, 97, 66, -71, 83, 85, 66, 111, 53, 22, 66, -106, -23, 79, 66, -79, -88, -27, 66, -59, 4, 36, 66, -121, 41, -39, 66, 125, 71, -45, 66, 96, 72, -92, 66, 81, -83, 91, 66, -90, -79, 15, 66, -111, 8, -2, 66, -90, -90, -51, 66, -85, -36, -106, 66, 122, 76, 35, 66, -99, -104, -23, 66, 117, 10, 22, 66, 104, -117, 28, 66, 106, 86, -50, 66, -86, -109, -31, 66, -97, 71, -106, 66, -125, 125, -109, 66, -103, -81, -61, 66, -88, 51, 69, 66, -80, 51, -108, 66, 127, 102, 55, 66, -83, -121, 80, 66, -99, 7, -47, 66, -116, 30, 104, 66, 108, 87, 96, 66, -126, -120, -49, 66, -88, 122, 58, 66, -71, -65, 59, 66, -75, -31, -109, 66, -91, -9, 117, 66, -106, 20, -70, 66, 126, -76, 63, 66, -90, -113, -49, 66, -69, -101, 102, 66, 84, 1, -80, 66, -118, 58, 118, 66, -106, -8, -90, 66, -108, 122, 125, 66, -79, 69, -124, 66, -69, 39, 2, 66, -111, -92, 110, 66, -77, 75, 61, 66, 72, -99, -27, 66, -90, -49, -90, 66, 92, -52, -71, 66, -112, 32, -90, 66, -106, -108, -15, 66, -70, -50, -65, 66, 99, -120, 78, 66, -118, -105, -6, 66, -127, -50, 108, 66, 110, -27, -122, 66, -112, -108, -43, 66, 102, -55, 1, 66, -78, 83, -109, 66, 114, 50, -24, 66, -125, 99, 87, 66, -121, -13, -64, 66, -107, 79, 70, 66, -94, 110, -85, 66, -98, -78, -60, 66, 122, 37, 98, 66, -94, 57, -63, 66, 104, -66, -7, 66, -108, 22, -122, 66, 115, -20, -122, 66, 103, -117, -128, 66, 102, -128, 62, 66, -125, -3, 96, 66, -120, -62, 82, 66, 118, 67, -114, 66, -127, 46, 92, 66, -126, 59, 70, 66, -70, -33, -6, 66, -102, -8, -24, 66, -125, 25, 12, 66, -109, 14, 125, 66, -119, -110, -60, 66, -82, 35, -34, 66, -123, 24, -97, 66, -112, 28, -20, 66, -105, -54, -56, 66, -83, -15, -39, 66, 121, -67, -44, 66, -105, 34, 88, 66, -110, -9, 114, 66, -111, -93, -94, 66, 122, 72, 67, 66, -102, 65, -45, 66, -98, -85, -72, 66, -86, -91, -77, 66, -127, 17, -75, 66, 96, -59, 36, 66, -120, 62, 13, 66, -82, 16, -60, 66, -115, -102, 4, 66, -95, -63, -27, 66, -102, 55, -54, 66, -102, 31, -49, 66, -112, -126, 32, 66, -85, 55, 60, 66, 88, 84, 95, 66, -111, -111, 14, 66, -102, -37, 34, 66, -123, 30, 68, 66, -121, 84, 42, 66, -72, -109, -53, 66, -105, 51, 89, 66, -92, 107, -83, 66, 81, 116, 62, 66, 125, -7, 31, 66, 110, 94, 114, 66, -121, 17, -12, 66, -103, 115, -37, 66, -113, 64, -92, 66, -124, -12, -76, 66, -71, 12, 7, 66, -114, 113, -92, 66, -107, -58, 8, 66, -77, -128, 103, 66, 122, -50, 34, 66, -123, 42, 4, 66, -95, 18, -7, 0, 0, 0, 0, 0, 0, 0, 0 ], "precision": "FLOAT_32", "root": 0, "canonicalAndNotALeaf": true, "size": 253, "leftIndex": [ -1, 1, 255, 1161552878, 970915724, 1162082041, 1147201774, 711874240, 1025966572, 1016440232, 1156918381, 774287572, 1098407515, 758651710, 582803878, 712042646, 391 ], "rightIndex": [ -1, 1, 255, 1162084076, 1104838865, 772712942, 1155331957, 1018061585, 773239120, 1159870334, 769517485, 1018586147, 969102601, 715054135, 582786302, 753320561, 364 ], "nodeFreeIndexes": [], "nodeFreeIndexPointer": 1, "leafFreeIndexes": [], "leafFreeIndexPointer": 1, "partialTreeStateEnabled": true }, "boundingBoxCacheFraction": 0.0, "partialTreeState": true, "seed": -1388210874864416000, "id": 0, "dimensions": 32, "staticSeed": 0, "weight": 0.0, "hasAuxiliaryData": false }, { "version": "2.0", "root": 0, "maxSize": 256, "outputAfter": 32, "storeSequenceIndexesEnabled": false, "centerOfMassEnabled": false, "nodeStoreState": { "version": "2.0", "capacity": 255, "compressed": true, "cutDimension": [ 1, 31, 255, 425622219, 144909231, 844096932, 408239312, 581172034, 16895927, 857323289, 614083712, 768110542, 599362554, 494134646, 246430980, 722192539, 574816296, 387821868, 69295080, 870210871, 503884653, 816670625, 853067783, 810444633, 713880196, 755881543, 768770204, 639365931, 612809248, 625484104, 257958187, 520591636, 141167312, 374792846, 755614941, 527588315, 169125597, 491698020, 619845819, 405795430, 851208309, 817350660, 314382308, 383822855, 744296626, 7780 ], "cutValueData": [ 66, -60, -48, 100, 66, -73, 116, -105, 66, -101, -6, -47, 66, -88, -52, 126, 66, 90, 118, -34, 66, 102, -91, -120, 66, 112, 79, 82, 66, -85, -40, -4, 66, 86, 49, -38, 66, 94, 76, 32, 66, -105, -17, 109, 66, -61, 19, 121, 66, 109, -52, 91, 66, -72, -36, 67, 66, -73, -118, -119, 66, 81, 64, -77, 66, -105, 125, 14, 66, -103, -23, -104, 66, -126, 59, -120, 66, -90, -105, -94, 66, 85, 67, -23, 66, 69, -31, -106, 66, -75, 102, 105, 66, -88, 94, -105, 66, -124, 49, 17, 66, -85, 11, -16, 66, 115, -82, 36, 66, -88, 87, 25, 66, 126, 44, -25, 66, -85, 21, -16, 66, -89, -76, -91, 66, -96, -6, -25, 66, -117, 47, 33, 66, 107, 4, -78, 66, -106, -105, -59, 66, -66, 103, 17, 66, -115, 8, -60, 66, -117, 91, -71, 66, 99, 44, -35, 66, -90, -102, 31, 66, -88, 16, 42, 66, -120, -62, -68, 66, -93, 29, -13, 66, -92, -38, 110, 66, 78, 75, -119, 66, -65, -1, 35, 66, -83, 3, 121, 66, -70, 31, 25, 66, -116, 42, 8, 66, -120, 107, -85, 66, -67, -4, -77, 66, -122, 32, 94, 66, -97, -89, 2, 66, 107, 109, 66, 66, -107, 99, 76, 66, 117, 78, -119, 66, 74, 35, 93, 66, -91, -66, 16, 66, -70, -70, 113, 66, 111, -60, 109, 66, -62, 47, 50, 66, 97, 126, -30, 66, -66, 67, 61, 66, -118, -9, -110, 66, -72, -71, 38, 66, 127, 87, 19, 66, -110, -14, 47, 66, -67, -118, -69, 66, -103, 20, -121, 66, -83, -32, 25, 66, -76, 78, 68, 66, -127, -64, 2, 66, -74, -58, 19, 66, -76, -6, 99, 66, -119, -103, 73, 66, -123, -11, -52, 66, -109, -61, 84, 66, -128, 79, -118, 66, -109, -22, 39, 66, 68, 12, -90, 66, 124, 58, -27, 66, -96, 29, 63, 66, -117, 21, -23, 66, -121, -125, -58, 66, -103, 121, -54, 66, -105, 69, 15, 66, -103, -16, 113, 66, -100, -111, -24, 66, 125, 24, 6, 66, -90, 111, 8, 66, -84, 115, -110, 66, 109, -72, -111, 66, -119, -19, -67, 66, -95, 74, -21, 66, -117, 107, -126, 66, 103, 54, -68, 66, 111, -44, -105, 66, -125, 25, -12, 66, -111, 62, -103, 66, -95, 90, 20, 66, -66, -87, 28, 66, -115, 26, -9, 66, -77, -17, 12, 66, -112, -44, -35, 66, -68, 38, -35, 66, -125, 47, -30, 66, -71, -7, -62, 66, -94, 48, 7, 66, -120, -43, 1, 66, -86, -11, 62, 66, -91, -21, 40, 66, 123, 120, 45, 66, -80, 108, 62, 66, 101, 56, 7, 66, -75, -13, 124, 66, -113, 2, 78, 66, -82, 52, -11, 66, -96, 95, -58, 66, -83, -38, 114, 66, -98, 52, 32, 66, -96, 19, -78, 66, -76, 56, -2, 66, -110, 43, 4, 66, 80, 125, -61, 66, 124, -45, -38, 66, -112, 122, -49, 66, -111, 43, -18, 66, -112, -8, -126, 66, 90, -97, 104, 66, -106, 78, 11, 66, -70, 86, -55, 66, -109, 60, -44, 66, -117, -92, 100, 66, -117, 70, -47, 66, -118, -109, 80, 66, 98, -91, -56, 66, -64, 44, -57, 66, -110, 8, -67, 66, -118, 117, -126, 66, -110, -128, 110, 66, -85, 48, 31, 66, -115, -125, -29, 66, 85, -109, -55, 66, -115, -96, -63, 66, -70, 97, -114, 66, -96, 112, -88, 66, -105, 0, 27, 66, -98, 114, 84, 66, 68, 70, 11, 66, -106, -54, -123, 66, -128, 27, -62, 66, -86, 31, -11, 66, -116, 21, 0, 66, -108, -90, -12, 66, -78, -59, 89, 66, -121, 27, 8, 66, -104, -92, 85, 66, -104, -68, 116, 66, -91, 125, -78, 66, -89, 95, -106, 66, 86, 33, 105, 66, 82, -28, 4, 66, -103, -61, -121, 66, 121, 25, 38, 66, 103, 10, -63, 66, -82, 21, 60, 66, -109, -67, -81, 66, -104, 24, 46, 66, -128, -36, -15, 66, -118, -59, -1, 66, -121, -38, 69, 66, 113, -58, -65, 66, -121, -71, 52, 66, -97, -44, 22, 66, -60, -96, 7, 66, -99, 45, 34, 66, -106, -14, 86, 66, -97, 29, -106, 66, -81, 84, 127, 66, -111, -89, -81, 66, -71, -90, 124, 66, -117, -1, -4, 66, -120, -73, 126, 66, -119, 14, -30, 66, 92, 100, -10, 66, -77, -127, -9, 66, -124, 118, -118, 66, 93, -49, -98, 66, -119, -86, -1, 66, 106, -119, -124, 66, -126, 99, 75, 66, -103, -11, 30, 66, -117, 46, -22, 66, -115, 89, -33, 66, -89, -11, 29, 66, -78, 59, 14, 66, -112, -17, 65, 66, -69, -79, -21, 66, -78, -55, 23, 66, -89, 102, -43, 66, -100, -95, -76, 66, -100, 124, -110, 66, -103, 57, -39, 66, -109, -26, -34, 66, -66, 102, -21, 66, 92, 105, 6, 66, -94, -110, 0, 66, -84, -106, -57, 66, -121, 36, -67, 66, -125, -123, 6, 66, -101, -95, -91, 66, -111, 59, 104, 66, -115, 123, -48, 66, -92, -102, 11, 66, 88, -95, 48, 66, 92, 27, 41, 66, -119, -35, -76, 66, -122, -64, 53, 66, -122, -77, -127, 66, -123, 99, 65, 66, -116, 95, -121, 66, 121, -67, 108, 66, -65, 92, 86, 66, -126, -11, 15, 66, -105, -16, 96, 66, 94, 83, -63, 66, -101, 31, 46, 66, -95, 42, -103, 66, -82, -100, -36, 66, 92, 19, -23, 66, -106, -75, -54, 66, -124, -104, 89, 66, 117, 71, 2, 66, -73, 11, 111, 66, -127, -14, 50, 66, 110, -13, 112, 66, -105, -118, -45, 66, -81, 0, -95, 66, -84, -47, -42, 66, -94, 98, 114, 66, -123, 63, -28, 66, 123, -2, 4, 66, -107, 72, 51, 66, 72, 67, -102, 66, -98, -46, -29, 66, -99, 78, 90, 66, -120, 87, 28, 66, 106, -15, 29, 66, -116, -108, -121, 66, 103, -61, -121, 66, -77, -45, -73, 66, 100, -116, -127, 66, -113, 101, 81, 66, 125, 15, 54, 66, -120, -71, 11 ], "precision": "FLOAT_32", "root": 0, "canonicalAndNotALeaf": true, "size": 255, "leftIndex": [ 0, 1, 255, 1071445919, 530489087, 567670760, 668846143, 18740279, 266131074, 557802017, 840968560, 0 ], "rightIndex": [ 0, 1, 255, 360626143, 797186431, 32615112, 384598228, 281864855, 242933764, 619652, 709388776, 6272 ], "nodeFreeIndexes": [], "nodeFreeIndexPointer": -1, "leafFreeIndexes": [], "leafFreeIndexPointer": -1, "partialTreeStateEnabled": true }, "boundingBoxCacheFraction": 0.0, "partialTreeState": true, "seed": -5115030242711725490, "id": 0, "dimensions": 32, "staticSeed": 0, "weight": 0.0, "hasAuxiliaryData": false }, { "version": "2.0", "root": 0, "maxSize": 256, "outputAfter": 32, "storeSequenceIndexesEnabled": false, "centerOfMassEnabled": false, "nodeStoreState": { "version": "2.0", "capacity": 255, "compressed": true, "cutDimension": [ 0, 31, 255, 108505767, 479371230, 476801865, 129435123, 357886958, 879169134, 440351138, 456493873, 398023646, 771081298, 249470198, 645773885, 1039967609, 938438618, 1038667563, 78167277, 230547394, 1016853958, 978511219, 370245062, 395871426, 387233217, 802873034, 1016568690, 1056001443, 590855073, 460443587, 97898103, 513088234, 1069505259, 624010986, 1052219045, 133424678, 663848258, 656512707, 926770483, 212651459, 922220895, 861469929, 320138303, 459621995, 482134238, 23 ], "cutValueData": [ 66, -71, 50, -39, 66, -104, 37, 46, 66, 120, 14, 77, 66, -63, 81, -111, 66, -123, 61, 34, 66, 75, -113, 110, 66, -95, 115, -122, 66, -79, 108, -117, 66, -114, 74, -46, 66, -112, 88, -9, 66, -124, -61, -58, 66, 104, 119, 112, 66, -67, -27, -48, 66, -78, 106, -107, 66, -92, -55, -90, 66, -95, -127, 69, 66, -81, -27, 117, 66, -124, 4, -116, 66, -122, -28, -70, 66, -108, -3, -18, 66, -92, -83, 71, 66, -100, -63, -121, 66, -101, 8, 94, 66, 117, 114, -5, 66, -77, -47, -51, 66, -70, 52, 48, 66, 125, 77, 14, 66, -84, -2, -79, 66, 68, 3, -28, 66, -81, 100, 37, 66, 75, -68, -47, 66, -120, 32, -44, 66, -114, -10, 11, 66, 72, -82, -64, 66, -103, 96, -79, 66, -110, -17, -90, 66, -103, 119, 38, 66, 76, -11, -32, 66, -113, -5, 94, 66, -86, 119, -75, 66, -109, 113, -40, 66, -113, 51, -57, 66, -79, 29, -53, 66, 117, -43, 19, 66, -77, -111, 0, 66, -102, 46, 85, 66, -104, -127, 84, 66, -82, 79, 118, 66, -104, -49, -33, 66, -71, -55, 124, 66, -99, -14, -75, 66, -112, 113, -44, 66, -112, -92, 53, 66, 115, -113, -109, 66, -120, -103, -63, 66, -90, 37, 86, 66, -117, 33, -20, 66, -105, 67, -94, 66, 97, 1, -109, 66, -109, 16, 28, 66, 114, -125, 83, 66, -108, 113, -70, 66, -114, -11, -8, 66, -122, 89, 50, 66, -122, -102, -2, 66, -102, 72, 9, 66, -99, 44, -117, 66, 121, 119, 105, 66, -105, 14, -16, 66, -64, 91, -58, 66, -117, 68, -40, 66, -80, 13, 7, 66, -118, 81, -107, 66, 123, 31, 17, 66, 95, 111, -82, 66, -105, -127, -119, 66, -81, 114, -99, 66, -96, 71, -66, 66, -93, -103, 35, 66, -107, 43, 89, 66, -94, -89, -8, 66, -120, -66, 121, 66, -75, 97, 2, 66, -90, -8, 54, 66, -117, 30, 69, 66, -116, -70, -102, 66, -70, -1, -94, 66, -71, 14, -91, 66, -122, -46, 49, 66, 110, -81, 15, 66, 124, 73, 28, 66, 92, 57, 67, 66, 113, 98, 58, 66, 111, 3, -111, 66, -124, -6, 49, 66, 103, 35, 122, 66, 119, 8, -3, 66, -99, -25, 125, 66, 108, -17, -35, 66, -117, -53, 4, 66, -71, 121, -49, 66, 110, -86, 117, 66, -104, -21, 48, 66, -111, -67, 125, 66, -101, 75, 79, 66, 127, -66, -45, 66, -96, 23, -114, 66, -90, -89, -114, 66, -84, -94, 116, 66, -100, -123, -50, 66, -85, 84, 6, 66, 88, -124, 116, 66, 126, 38, -23, 66, -89, -100, -93, 66, -95, -102, -114, 66, -127, -110, 111, 66, 111, -28, -119, 66, -111, -35, -12, 66, -81, -31, 104, 66, -77, 112, 37, 66, -101, -107, 16, 66, -80, -31, 47, 66, -103, -16, -118, 66, -98, -58, -90, 66, -82, 27, -62, 66, -94, 23, 67, 66, -106, 75, 103, 66, -113, -102, 6, 66, -84, 119, 16, 66, 85, -128, -82, 66, -86, -65, 19, 66, 106, -121, 112, 66, 108, -61, -41, 66, 95, 112, -28, 66, 122, 35, 83, 66, 124, 104, 35, 66, -105, -8, -39, 66, -125, 22, -122, 66, -96, 98, -32, 66, -90, 93, -24, 66, 119, -27, 29, 66, -127, -50, 8, 66, 114, 95, 80, 66, -95, 72, -40, 66, -95, -22, -71, 66, -69, -125, -61, 66, -65, -22, -125, 66, 110, -124, -42, 66, -81, 26, 72, 66, -115, -15, -84, 66, 93, -102, 39, 66, -126, -90, -88, 66, -92, -81, 127, 66, -83, 7, 7, 66, -99, 84, 117, 66, 100, -66, -4, 66, -73, 22, -36, 66, -114, 63, 9, 66, -103, -43, 54, 66, -95, -127, -36, 66, 119, 126, 71, 66, -102, -31, -61, 66, -120, 63, -113, 66, 83, 22, -45, 66, -66, -61, 13, 66, -105, 124, 11, 66, -99, 95, 118, 66, -114, -38, -68, 66, -119, 49, 94, 66, -125, 14, -68, 66, -121, 117, -38, 66, 108, 85, 90, 66, 109, 14, -111, 66, -89, -6, -20, 66, 102, 2, 40, 66, -83, 20, -98, 66, -90, -55, -2, 66, 94, -77, 70, 66, -124, -6, 81, 66, -104, -6, -85, 66, 112, -95, 68, 66, -109, 21, -42, 66, -81, 74, 80, 66, -94, -107, -2, 66, -120, -122, 47, 66, -122, -16, 27, 66, 108, 104, 82, 66, 125, -98, 81, 66, -102, 40, -19, 66, -100, 34, 47, 66, -98, 111, -82, 66, -114, 86, 14, 66, -71, -81, 52, 66, -110, 22, -58, 66, -108, -105, -53, 66, 89, -34, 55, 66, -76, -30, -114, 66, -119, -11, -60, 66, -125, -102, -30, 66, -106, 8, 66, 66, -109, 13, -86, 66, 100, -106, 44, 66, 100, 112, -80, 66, -82, -29, 47, 66, 113, -115, -118, 66, 112, 74, 1, 66, -116, 126, 84, 66, -118, -49, 122, 66, -110, -83, 78, 66, -79, 63, -57, 66, -103, 29, -8, 66, 92, -82, 31, 66, -84, -60, -40, 66, 94, 32, -16, 66, -120, -17, 54, 66, -76, -111, 7, 66, -80, 103, -127, 66, -110, 115, 72, 66, -91, -122, 60, 66, -115, -116, -60, 66, -103, -124, -123, 66, 99, -30, -20, 66, 70, -102, -26, 66, -106, -125, -102, 66, -106, -59, -119, 66, -92, -109, -122, 66, 125, -10, -52, 66, -125, -54, 84, 66, -120, 13, 78, 66, 118, -93, -67, 66, -68, -91, 50, 66, -125, 62, 81, 66, 81, -96, 13, 66, -102, 42, -101, 66, -69, -24, -39, 66, 105, -78, -98, 66, -115, 99, -92, 66, 121, 75, -68, 66, 106, -19, 36, 66, -81, -102, 41, 66, -97, -31, -6, 66, -117, 63, -90, 66, -87, 52, 64, 66, -67, -26, 123, 66, -113, -74, 105, 66, -83, -80, 115, 66, -91, -50, 83, 66, -114, 86, -123, 66, -122, -35, -14, 66, -112, 34, 85, 66, -120, -9, 66, 66, 126, 93, 53, 66, 124, 39, 45, 0, 0, 0, 0, 0, 0, 0, 0 ], "precision": "FLOAT_32", "root": 0, "canonicalAndNotALeaf": true, "size": 253, "leftIndex": [ -1, 1, 255, 1119207941, 640839029, 1155884080, 626391752, 643515029, 753398657, 760423210, 583460159, 970704040, 1016971657, 970736855, 1025956570, 973356061, 395 ], "rightIndex": [ -1, 1, 255, 1119195062, 1031467838, 1157478377, 640189574, 767675527, 638546156, 1160598265, 583263305, 984671869, 758122793, 581748520, 984523163, 581151145, 365 ], "nodeFreeIndexes": [], "nodeFreeIndexPointer": 1, "leafFreeIndexes": [], "leafFreeIndexPointer": 1, "partialTreeStateEnabled": true }, "boundingBoxCacheFraction": 0.0, "partialTreeState": true, "seed": -878626023249091604, "id": 0, "dimensions": 32, "staticSeed": 0, "weight": 0.0, "hasAuxiliaryData": false }, { "version": "2.0", "root": 0, "maxSize": 256, "outputAfter": 32, "storeSequenceIndexesEnabled": false, "centerOfMassEnabled": false, "nodeStoreState": { "version": "2.0", "capacity": 255, "compressed": true, "cutDimension": [ 0, 31, 255, 920336034, 1056012206, 1010822202, 346413815, 173243682, 925326126, 873813705, 652821547, 1042528895, 919783727, 368819802, 635762943, 173315539, 75338801, 1063726397, 346987043, 221824105, 518752847, 773672570, 596716713, 364584403, 647849797, 908967589, 112458541, 85831497, 445881671, 622167083, 913803195, 532380410, 628705195, 747981359, 804882686, 508992891, 801064179, 367967019, 590850150, 376736057, 624530799, 722766457, 393281118, 73266270, 749844714, 627 ], "cutValueData": [ 66, -66, -16, 34, 66, -101, -37, -70, 66, -95, -60, 49, 66, -124, -128, -118, 66, -58, 103, -102, 66, -128, 78, -119, 66, -66, -87, -55, 66, -93, 116, 6, 66, -65, -23, 102, 66, 73, 88, -52, 66, -124, -60, -6, 66, -98, 22, -111, 66, -74, 83, 91, 66, -80, 71, -32, 66, 118, 103, -24, 66, -89, 3, 48, 66, 116, -85, 10, 66, -103, 53, -90, 66, -69, 117, 88, 66, -69, -41, 8, 66, 115, 4, -44, 66, 123, 38, 90, 66, -76, -62, 7, 66, -98, -38, 9, 66, -112, 4, -8, 66, -121, -27, 85, 66, -87, -101, -81, 66, 111, -53, 52, 66, -107, 88, 77, 66, -81, -82, -96, 66, -87, 111, 43, 66, -101, -82, -122, 66, 108, 112, 86, 66, -99, 55, -17, 66, -125, 21, -77, 66, -91, -105, 65, 66, -122, -49, 25, 66, -128, -34, 89, 66, 114, 64, -43, 66, -110, -85, 88, 66, 122, 120, 121, 66, -60, 82, 125, 66, -111, -56, -87, 66, 123, 55, 16, 66, 125, -24, 82, 66, 115, -93, -67, 66, -88, 15, -120, 66, -59, -128, 81, 66, 81, 12, 88, 66, -117, 29, -110, 66, 91, 74, 105, 66, -102, -26, -105, 66, -95, -40, 63, 66, -104, -94, 61, 66, -84, 22, -67, 66, -67, -52, -43, 66, 113, 50, -76, 66, -124, 59, -59, 66, -110, 28, -74, 66, -117, 52, -46, 66, -80, 88, -77, 66, -69, 103, 4, 66, -90, -44, -18, 66, 116, -39, -83, 66, -119, -29, -28, 66, 93, -17, 64, 66, -80, -94, -71, 66, -72, 45, -81, 66, 126, -94, -90, 66, -99, -34, -115, 66, -81, -88, -92, 66, -79, 27, -17, 66, 89, 113, -51, 66, -122, -116, -12, 66, -119, -36, -87, 66, -94, 54, -7, 66, -88, 22, 33, 66, 108, -80, 2, 66, 88, 59, 47, 66, 98, 98, -34, 66, -120, 68, -106, 66, 121, 5, 81, 66, -100, -67, -25, 66, 77, 114, -35, 66, -77, 35, 108, 66, -89, -2, -28, 66, -116, -82, 25, 66, 85, 18, -11, 66, 92, -117, -92, 66, -73, -55, 14, 66, -97, -60, 113, 66, -112, -47, 63, 66, -105, 122, 100, 66, -126, -39, -47, 66, -64, -24, 4, 66, -100, -72, 97, 66, 119, -115, 37, 66, -99, -57, -124, 66, -104, -62, -63, 66, -74, 49, 113, 66, -96, -40, 102, 66, -89, 18, 28, 66, -92, 84, 22, 66, -97, 119, -19, 66, -109, -106, 121, 66, -104, 79, 99, 66, 86, 42, -17, 66, -125, -10, -31, 66, -127, -70, 31, 66, 106, -80, -79, 66, -119, 32, 52, 66, 89, 93, -89, 66, 93, 56, 1, 66, 88, 123, 56, 66, -111, -95, -101, 66, -119, 41, 118, 66, 115, -14, 2, 66, 110, 34, 117, 66, -116, 110, 32, 66, -122, -114, 123, 66, -116, 77, 19, 66, -117, -52, 41, 66, 85, -98, -48, 66, 93, -69, 69, 66, 123, -27, 31, 66, -78, -104, 43, 66, 104, -1, -118, 66, -84, -37, 95, 66, -104, -92, 54, 66, -103, 116, -66, 66, -97, 111, -112, 66, 104, 65, 37, 66, -70, 23, 88, 66, -112, -8, -12, 66, -107, -50, -27, 66, 127, -31, -110, 66, -128, -109, -1, 66, -96, -18, -110, 66, -87, 31, 27, 66, -88, -103, 125, 66, 99, -52, -97, 66, -71, 117, -6, 66, -117, -50, 17, 66, -97, 28, -116, 66, -127, -48, -38, 66, -81, 93, -87, 66, -121, -55, 59, 66, -108, -30, -17, 66, 85, 12, -19, 66, 74, -74, 22, 66, 85, 11, 105, 66, -96, -106, 33, 66, -119, -52, -57, 66, 115, -16, -3, 66, -116, 46, 80, 66, -88, 55, 112, 66, 116, 8, 101, 66, -88, 46, 32, 66, 97, 103, 9, 66, -127, 34, 72, 66, -94, -93, 55, 66, -84, -89, 82, 66, -92, 7, 4, 66, 127, -4, 36, 66, -77, -7, -1, 66, -78, 123, 5, 66, -120, 50, 2, 66, -98, -92, 66, 66, -96, -99, -67, 66, -106, 59, 104, 66, -97, 16, -77, 66, -72, -25, -97, 66, -118, 46, -90, 66, -77, -64, -55, 66, -84, 20, -108, 66, -99, -37, -102, 66, -111, -100, -37, 66, -111, 79, 40, 66, -88, -70, -5, 66, -77, 13, -100, 66, -106, 77, 65, 66, -85, -3, 57, 66, 99, -127, 12, 66, -89, 44, 42, 66, -79, -22, 107, 66, -96, -54, 3, 66, -80, -61, 100, 66, -128, 30, -77, 66, -125, -80, 56, 66, 122, 26, 51, 66, 74, -72, 45, 66, 80, 66, 46, 66, -120, -24, 12, 66, -88, 61, -61, 66, -102, -1, -24, 66, -91, 28, -70, 66, -87, -50, -23, 66, -123, 93, 56, 66, -128, -64, -96, 66, 124, -13, 21, 66, -111, -32, -68, 66, 121, -73, -6, 66, -72, 39, -98, 66, -118, -3, -128, 66, -104, -7, 65, 66, -76, 58, -123, 66, -91, -103, -30, 66, -125, -117, 35, 66, -75, -95, 39, 66, -72, -29, -67, 66, -124, 74, -52, 66, -104, 39, -37, 66, 104, -35, 102, 66, -91, 118, 56, 66, -87, 125, 64, 66, -114, 93, 78, 66, -114, 28, 20, 66, -61, -101, 66, 66, -100, 121, 69, 66, -66, 51, -97, 66, -125, 53, 98, 66, 103, 74, -82, 66, -81, -94, -108, 66, -119, -14, 79, 66, -121, -50, -126, 66, -115, -75, -84, 66, 99, -36, 58, 66, -117, 59, 26, 66, -117, 87, 26, 66, -82, -16, -95, 66, -77, 24, -96, 66, -117, -62, 45, 66, -103, -40, -74, 66, -85, 59, 37, 66, 96, -66, 70, 66, -73, -117, -93, 66, -69, 0, 43, 66, 126, 28, -97, 66, -114, 66, -38, 66, -112, 118, 99, 66, 78, -114, -3, 66, -82, 40, 18, 66, 113, 43, 22, 66, -98, 40, -70, 66, -96, 117, -77, 66, -101, -16, -76, 66, -92, 29, 19, 66, -117, 81, 106, 66, 115, -89, -32, 66, -103, -127, 52, 66, -106, -127, -13, 66, -74, -1, 62, 66, 88, -97, -103, 66, -120, 122, -33, 0, 0, 0, 0 ], "precision": "FLOAT_32", "root": 0, "canonicalAndNotALeaf": true, "size": 254, "leftIndex": [ -1, 1, 255, 1162241783, 987870086, 772537813, 1162057343, 1155094576, 712399181, 1026721133, 1119192844, 975639533, 970736047, 582734047, 643861210, 595482152, 1093 ], "rightIndex": [ -1, 1, 255, 1161486458, 731026618, 975528818, 1114234865, 772629190, 755679911, 629559934, 983689973, 586447357, 1104305696, 581310070, 596013277, 601866733, 1102 ], "nodeFreeIndexes": [], "nodeFreeIndexPointer": 0, "leafFreeIndexes": [], "leafFreeIndexPointer": 0, "partialTreeStateEnabled": true }, "boundingBoxCacheFraction": 0.0, "partialTreeState": true, "seed": -7506740242986070872, "id": 0, "dimensions": 32, "staticSeed": 0, "weight": 0.0, "hasAuxiliaryData": false }, { "version": "2.0", "root": 0, "maxSize": 256, "outputAfter": 32, "storeSequenceIndexesEnabled": false, "centerOfMassEnabled": false, "nodeStoreState": { "version": "2.0", "capacity": 255, "compressed": true, "cutDimension": [ 0, 31, 255, 437434827, 233024426, 769601339, 321501377, 526254065, 69943122, 360514594, 190753338, 1026539113, 758482278, 331312977, 52894174, 229180501, 869629874, 872191853, 710778574, 737776949, 455964503, 639308843, 974457843, 606307926, 903319223, 938782053, 380155693, 104528113, 804996289, 884677314, 204516543, 311766229, 385443951, 441530611, 117006069, 463570654, 899931313, 476007418, 670767710, 72451166, 925853661, 51723313, 500267607, 376482798, 1013050623, 859 ], "cutValueData": [ 66, 85, 7, -128, 66, -65, 41, -73, 66, -122, 112, 47, 66, -74, 36, 64, 66, -84, 77, 15, 66, -65, -71, -6, 66, -99, -112, 65, 66, 113, -44, -1, 66, -110, -99, -125, 66, 85, -42, 37, 66, -127, 37, -41, 66, 97, -115, 83, 66, 112, -50, -82, 66, -82, -84, -5, 66, -123, 117, 107, 66, -62, 69, -82, 66, -81, -71, 10, 66, 124, 63, -84, 66, -118, -39, 57, 66, -119, -109, 89, 66, -97, 86, 99, 66, -95, 58, -14, 66, -118, -91, 72, 66, -115, -61, 41, 66, -117, -32, -7, 66, -80, 121, 12, 66, -87, -109, 16, 66, -82, 40, -12, 66, 119, 85, -120, 66, -128, 82, 17, 66, -117, -101, -117, 66, 79, 32, 91, 66, -76, -128, -109, 66, -86, 123, 32, 66, 119, -11, -102, 66, -95, -113, -128, 66, 73, 87, 21, 66, -125, 46, -18, 66, -73, -102, -32, 66, -76, 70, -79, 66, 114, -88, -101, 66, -69, -50, -65, 66, -80, 124, 14, 66, -118, -31, 67, 66, -72, 5, 87, 66, -128, -1, 75, 66, -97, 115, -12, 66, -96, -20, -12, 66, 108, -65, -9, 66, -125, 42, 68, 66, -125, 69, -113, 66, -99, -10, -3, 66, -111, 24, -1, 66, -84, -29, 7, 66, 112, -68, 96, 66, -124, 49, 121, 66, -103, 29, 7, 66, 97, 106, 9, 66, -83, -33, -92, 66, -101, 121, 98, 66, -93, -37, 37, 66, -73, 65, -128, 66, -90, 20, -98, 66, 98, 11, -11, 66, -88, -84, -59, 66, -105, -22, 23, 66, 79, -10, 46, 66, 122, -122, 20, 66, 113, -4, -53, 66, 86, 70, -37, 66, -86, -44, 16, 66, 126, -123, 111, 66, 89, 12, 111, 66, 120, -119, -70, 66, -97, -58, 29, 66, 125, -26, 115, 66, -97, 114, 106, 66, -82, -29, -8, 66, -102, 10, -26, 66, 75, 69, -119, 66, -120, 43, -106, 66, -106, 79, 58, 66, 109, -79, -119, 66, 114, -70, -79, 66, -75, -66, -120, 66, -118, 37, 13, 66, -69, -8, 118, 66, 123, 55, 28, 66, -99, 82, -55, 66, -115, 110, 22, 66, -114, 120, 107, 66, -123, -104, 90, 66, -128, 122, 63, 66, 107, -116, 45, 66, -122, -75, -8, 66, -104, 100, -34, 66, -113, 28, -78, 66, -91, 56, -39, 66, -116, -4, 122, 66, -90, -22, 104, 66, -109, 54, -49, 66, 98, 81, -43, 66, 115, -33, 45, 66, -66, 77, 1, 66, -76, 33, 91, 66, -91, -86, 113, 66, -68, -60, 99, 66, 98, 44, 76, 66, -68, -47, 55, 66, -99, -107, -80, 66, 78, -117, 66, 66, 83, -85, 68, 66, 122, -56, -100, 66, 114, -28, -80, 66, -84, 116, -113, 66, 119, 27, 89, 66, -101, -2, -76, 66, -73, -34, -43, 66, -127, -6, 109, 66, 107, -12, -50, 66, -71, -94, -50, 66, -82, 88, -18, 66, -107, -51, 110, 66, 85, 98, 120, 66, 92, 49, -115, 66, -82, 77, -39, 66, -82, -6, -94, 66, -109, 69, 7, 66, -121, -104, 27, 66, 93, 27, 99, 66, -67, -101, -53, 66, -128, -70, 30, 66, 122, -53, -86, 66, -82, 83, 81, 66, -128, 112, -114, 66, -109, -47, 10, 66, 93, 65, -117, 66, -79, 4, -70, 66, -91, 93, 91, 66, -126, -31, -109, 66, -84, 43, 104, 66, 102, -13, 98, 66, -91, -123, 62, 66, -125, 57, 43, 66, -67, -25, 82, 66, -77, 16, -16, 66, 87, 10, 33, 66, -98, -76, 91, 66, -86, 120, -122, 66, -128, -124, -96, 66, -120, 69, -125, 66, -81, 121, -41, 66, 109, 99, 40, 66, -99, 87, 98, 66, -114, 67, -15, 66, -125, 108, 63, 66, -117, 108, -30, 66, -110, 53, -121, 66, -97, -34, 59, 66, 122, 12, 86, 66, -86, -63, 53, 66, -125, -76, -96, 66, -121, -124, 62, 66, -61, -11, -86, 66, -87, -43, -62, 66, -113, 72, 64, 66, -80, -48, 55, 66, -106, 122, -31, 66, -106, -37, -57, 66, -125, 33, -11, 66, -117, 100, -49, 66, -65, -65, 20, 66, -79, -3, 70, 66, -94, 11, 2, 66, -89, -77, -93, 66, -104, 45, -43, 66, -119, -70, 33, 66, -87, -69, -111, 66, -115, -41, 36, 66, -127, -100, -88, 66, -88, 109, -3, 66, -120, 0, -61, 66, -80, 118, -67, 66, -86, -121, 15, 66, -86, 61, 91, 66, -115, -118, 90, 66, -99, 45, -91, 66, -74, -103, 81, 66, -115, -128, -112, 66, 115, -10, 89, 66, -96, 100, -52, 66, -120, -36, -92, 66, -66, 6, 50, 66, -106, 45, 102, 66, -88, -97, 55, 66, -107, -69, 73, 66, -84, 68, 100, 66, -85, -13, 73, 66, -105, 104, -29, 66, -97, 71, -59, 66, -102, 100, -91, 66, -104, -15, 86, 66, -94, 33, 37, 66, -66, -24, 7, 66, -99, -119, 95, 66, -121, 81, -62, 66, 107, -88, 68, 66, 125, -78, -122, 66, -88, -21, -48, 66, -75, 38, 91, 66, -67, -109, -104, 66, 88, 61, -68, 66, -114, 55, -49, 66, 98, -50, -62, 66, 125, 21, 12, 66, -100, -5, -110, 66, 71, 110, -51, 66, 109, 39, -48, 66, 73, 11, 74, 66, -118, -42, -58, 66, -125, -43, 47, 66, 106, -5, 77, 66, -76, -98, -73, 66, 126, -18, -31, 66, -112, 55, -15, 66, -105, -36, 26, 66, -76, -126, -8, 66, -93, 9, 124, 66, 88, 18, -10, 66, -98, 56, -84, 66, -114, 94, -7, 66, -82, -124, 60, 66, -75, 104, 2, 66, -72, -69, 61, 66, -94, 51, 89, 66, -107, 51, -70, 66, -98, -51, -19, 66, -114, -45, -96, 66, -105, -105, -2, 66, -92, -97, 55, 66, -104, -5, 0, 66, -99, 119, 106, 66, -92, -104, -80, 66, -107, 31, 88, 66, -114, -82, -108, 66, -79, -12, -87, 66, 117, -31, 2, 66, -93, -119, -67, 66, -123, 37, -32, 66, -92, 1, -46, 66, -82, 102, 67, 66, -71, 31, 17, 66, -76, 125, -81, 66, 126, -44, 28, 0, 0, 0, 0 ], "precision": "FLOAT_32", "root": 0, "canonicalAndNotALeaf": true, "size": 254, "leftIndex": [ -1, 1, 255, 1162261466, 583338509, 1160666783, 715296712, 755531108, 1030736492, 1011775184, 1031438498, 755621260, 1141003547, 985271819, 725152217, 629676571, 1093 ], "rightIndex": [ -1, 1, 255, 760491311, 1119028850, 1145767031, 600972007, 731786966, 1026478403, 581327819, 768259210, 1028092378, 1145549536, 729461849, 581133973, 597842330, 1123 ], "nodeFreeIndexes": [], "nodeFreeIndexPointer": 0, "leafFreeIndexes": [], "leafFreeIndexPointer": 0, "partialTreeStateEnabled": true }, "boundingBoxCacheFraction": 0.0, "partialTreeState": true, "seed": -3745362813213582331, "id": 0, "dimensions": 32, "staticSeed": 0, "weight": 0.0, "hasAuxiliaryData": false }, { "version": "2.0", "root": 0, "maxSize": 256, "outputAfter": 32, "storeSequenceIndexesEnabled": false, "centerOfMassEnabled": false, "nodeStoreState": { "version": "2.0", "capacity": 255, "compressed": true, "cutDimension": [ 0, 31, 255, 1071894349, 262392401, 257511083, 98391255, 91742062, 850185766, 995206250, 984824490, 511667011, 870751138, 335264801, 124823161, 343369397, 442419129, 623434923, 741997686, 708038333, 227662061, 44246255, 402625571, 223692217, 225505141, 80866255, 914056386, 120429287, 1033366499, 190709614, 733935805, 332623726, 1003992757, 1042277686, 1001371058, 68803790, 384415567, 60989145, 774999078, 169796962, 224634973, 641390009, 844876479, 1004906978, 668584821, 847 ], "cutValueData": [ 66, -125, 29, -58, 66, 110, -50, -127, 66, -127, -5, -3, 66, -114, 121, 28, 66, -71, 9, 36, 66, 123, -110, -87, 66, -123, 119, 33, 66, -82, -98, 73, 66, 109, 84, 18, 66, -89, 111, 99, 66, -104, -33, -77, 66, 127, -46, 103, 66, -115, -93, 6, 66, -108, 98, -17, 66, -73, 105, -12, 66, 119, -13, -123, 66, -90, -122, -107, 66, -105, 47, -82, 66, 108, 18, 116, 66, -95, 74, -48, 66, -127, 22, -100, 66, 119, -24, 61, 66, 84, -120, -73, 66, -99, 46, -49, 66, -97, 113, -17, 66, 113, -68, 48, 66, -81, 90, 88, 66, 109, -26, 108, 66, -85, -82, 32, 66, -123, -16, 85, 66, -118, -83, 99, 66, 113, 48, 49, 66, -99, 104, 5, 66, -74, 33, -50, 66, -110, 84, 22, 66, -110, 104, 7, 66, -88, -38, -40, 66, -104, 30, -101, 66, -103, 125, -76, 66, -128, 85, -69, 66, -89, 59, -109, 66, 95, 13, -29, 66, -110, 60, -24, 66, -79, 60, -112, 66, -94, 80, 127, 66, -74, 109, 26, 66, -85, 122, 119, 66, -90, -101, -52, 66, 73, -87, -118, 66, -63, 6, -74, 66, -77, -46, -105, 66, -123, -92, -54, 66, 123, 39, 122, 66, 97, -110, -50, 66, -104, 30, -2, 66, 110, 19, 121, 66, -101, -87, 48, 66, 127, -25, 22, 66, -99, 84, 26, 66, -109, -81, 68, 66, -111, 51, 122, 66, -74, -55, -57, 66, 123, 48, -111, 66, -119, 27, 48, 66, -68, -16, 122, 66, -107, -16, -61, 66, -99, 35, 54, 66, 69, -68, 116, 66, -101, -101, 46, 66, -106, 87, -86, 66, -122, -95, -78, 66, -108, -77, 95, 66, -106, 13, -99, 66, 119, 69, -52, 66, -95, -80, -19, 66, -86, 4, -61, 66, -120, 44, 109, 66, -82, -53, 38, 66, -88, 95, 94, 66, 124, -13, 97, 66, -64, -45, 71, 66, -90, 50, -98, 66, 97, -13, 108, 66, 85, -87, -25, 66, -104, -24, 9, 66, -69, -39, -30, 66, -83, 34, -31, 66, 91, 119, 54, 66, 111, 47, 43, 66, -120, -48, 89, 66, -69, -105, 23, 66, 117, -36, 21, 66, -120, -74, 5, 66, -124, 38, 100, 66, 120, 37, -125, 66, -100, 97, 35, 66, -76, 55, 6, 66, 116, -76, 75, 66, -118, 100, 75, 66, 73, 29, -86, 66, 106, -102, 73, 66, -98, 117, 4, 66, -79, 18, 57, 66, 116, 100, 12, 66, 113, -12, -11, 66, -113, -75, 123, 66, -123, 58, -82, 66, -102, 4, -98, 66, -105, 68, 40, 66, 125, -7, 40, 66, -69, -70, -18, 66, 101, -88, 29, 66, 118, 76, -23, 66, 99, 24, -84, 66, -70, -34, 72, 66, -114, -107, -113, 66, 99, 119, -38, 66, -96, 108, 100, 66, 112, -85, 23, 66, -100, 5, 108, 66, 72, -121, 98, 66, 103, -127, 112, 66, 79, 70, -14, 66, -65, -80, -4, 66, -100, -76, 54, 66, -88, -85, -108, 66, -106, -9, -72, 66, -75, 56, -78, 66, -111, -111, 20, 66, -98, 86, 81, 66, -104, -64, -49, 66, -99, 72, -53, 66, -121, 82, 79, 66, -106, 82, -124, 66, -79, -95, -7, 66, -104, -82, -61, 66, -71, 32, -52, 66, -69, -12, -46, 66, -89, -85, 9, 66, 84, -78, 110, 66, -111, 109, 40, 66, -95, 127, -64, 66, 84, -43, 81, 66, 119, 103, 38, 66, -114, 36, 96, 66, 126, -103, -34, 66, -117, -118, -99, 66, -93, 77, -36, 66, -103, 75, -114, 66, -104, 25, 66, 66, -69, -52, 61, 66, 96, 97, 12, 66, -76, -89, 17, 66, -90, 20, -12, 66, -107, 110, 102, 66, -88, -110, -90, 66, -95, 30, -20, 66, -106, 16, 105, 66, -75, 100, 69, 66, 114, 31, -68, 66, -80, -24, -46, 66, -93, -113, 116, 66, -102, 104, 54, 66, 94, -116, -81, 66, -107, 86, 62, 66, 87, 110, -96, 66, 115, 94, -60, 66, -79, 100, 89, 66, -81, -88, 27, 66, -122, -6, -101, 66, 120, 63, 60, 66, -95, 53, 125, 66, -107, -82, 101, 66, -97, 52, -73, 66, -88, -62, -101, 66, -61, -11, 102, 66, -72, -15, -38, 66, -96, 64, -31, 66, 121, -53, -66, 66, 123, 100, -90, 66, 127, 106, 1, 66, -110, 102, 72, 66, -98, 58, -104, 66, -82, -103, -51, 66, -84, 28, -64, 66, -86, -37, 91, 66, -109, 43, 113, 66, -93, 94, 11, 66, -96, -36, 61, 66, -114, 16, 106, 66, -85, 104, -40, 66, -105, 119, 97, 66, -93, 85, -91, 66, -68, 0, -30, 66, -83, 127, -96, 66, -93, 66, -112, 66, -101, -38, -81, 66, 121, 56, 52, 66, -125, 98, -118, 66, 126, 88, 72, 66, 89, 114, -88, 66, -74, 78, 60, 66, -126, -52, -22, 66, -112, 22, -32, 66, -89, 46, -73, 66, -93, 91, 125, 66, 120, -56, -92, 66, -87, 7, 77, 66, -64, 78, -4, 66, -126, -66, 90, 66, -84, 71, 3, 66, -128, 110, 98, 66, -122, 83, -82, 66, -111, 11, 87, 66, 86, -14, 35, 66, 116, -70, -70, 66, 99, -39, -80, 66, -119, 101, -22, 66, 115, 19, -63, 66, -113, 70, -107, 66, -95, -68, 14, 66, -81, 71, 30, 66, -80, -28, -60, 66, 105, -91, -127, 66, -111, -52, 91, 66, -123, 119, 41, 66, -102, -104, 34, 66, -95, 80, 61, 66, -124, 99, 62, 66, -73, 106, 30, 66, 105, 112, -57, 66, 109, 50, -120, 66, -71, -6, -15, 66, 110, 98, 52, 66, 120, -12, -37, 66, -57, -33, -68, 66, -69, 86, 46, 66, 96, 58, -19, 66, -76, 126, -21, 66, -73, 125, -63, 66, -79, -85, 53, 66, -72, 58, 77, 66, -106, 49, 121, 66, -125, 61, -59, 66, 122, -121, -65, 66, -110, -99, 45, 66, -115, 92, 56, 66, -116, 109, -37, 66, -121, -107, -78, 66, -97, -39, -38, 66, -107, 11, -41, 66, -108, -54, -41, 66, 119, 51, 56, 66, -93, 87, -87, 0, 0, 0, 0 ], "precision": "FLOAT_32", "root": 0, "canonicalAndNotALeaf": true, "size": 254, "leftIndex": [ -1, 1, 255, 1162254905, 1160126198, 1146318205, 768218714, 970323758, 1099876927, 643867019, 600501721, 774110435, 588217703, 1112592472, 638712340, 715239841, 1336 ], "rightIndex": [ -1, 1, 255, 1162259279, 731733019, 1141513144, 774636602, 984674554, 1100001829, 600800612, 595561288, 731085628, 968735182, 638605348, 1026153239, 1016558170, 1123 ], "nodeFreeIndexes": [], "nodeFreeIndexPointer": 0, "leafFreeIndexes": [], "leafFreeIndexPointer": 0, "partialTreeStateEnabled": true }, "boundingBoxCacheFraction": 0.0, "partialTreeState": true, "seed": -5933807794767235558, "id": 0, "dimensions": 32, "staticSeed": 0, "weight": 0.0, "hasAuxiliaryData": false }, { "version": "2.0", "root": 0, "maxSize": 256, "outputAfter": 32, "storeSequenceIndexesEnabled": false, "centerOfMassEnabled": false, "nodeStoreState": { "version": "2.0", "capacity": 255, "compressed": true, "cutDimension": [ 0, 31, 255, 1060563679, 69190726, 718516189, 577461197, 128264663, 240233213, 731333706, 439483711, 892984650, 863421774, 715044269, 915485741, 341097923, 527756130, 917234755, 917813929, 388605485, 1050916429, 99063898, 661487011, 226399306, 530525987, 187151915, 510891610, 171042099, 739313630, 731102061, 1019020399, 402126665, 876427621, 724770639, 514530557, 790624125, 597932745, 61642213, 393570995, 584509945, 856739626, 624420981, 933801047, 756661035, 342556667, 1 ], "cutValueData": [ 66, -114, -102, 21, 66, -83, -108, -29, 66, 73, 111, 122, 66, -59, 25, 14, 66, -86, 1, 97, 66, -82, 30, -59, 66, -112, -48, -84, 66, -117, 120, 31, 66, -114, -27, -77, 66, 86, 59, 35, 66, -127, 26, -100, 66, -80, -11, -113, 66, -110, -17, -13, 66, -94, -8, 40, 66, -73, 5, -66, 66, 104, -44, -19, 66, -112, 3, 107, 66, -125, 120, 27, 66, -66, 112, 66, 66, -99, 106, 10, 66, -82, -112, -124, 66, -115, -88, -31, 66, 93, -65, 94, 66, -66, 85, 1, 66, 76, -82, -120, 66, -118, 124, -23, 66, 113, -57, 87, 66, -69, -76, -126, 66, 118, -105, 35, 66, 74, -35, -21, 66, -63, -95, 127, 66, -92, 84, -76, 66, -103, -110, -94, 66, 82, -23, 28, 66, -101, 118, -60, 66, -106, 96, -9, 66, -115, 92, 95, 66, 100, -29, 18, 66, 71, -3, 24, 66, -77, 76, -68, 66, -117, 60, 49, 66, 107, 73, 105, 66, 86, -2, -94, 66, -100, -102, -7, 66, 82, -33, 52, 66, -78, 123, -106, 66, 118, -20, 27, 66, -95, -84, 108, 66, -112, -23, -40, 66, 121, -98, 53, 66, -98, 106, 37, 66, 118, -104, 19, 66, -91, 101, 76, 66, -73, 127, -64, 66, -88, -24, -81, 66, -108, 67, 4, 66, -79, -16, -46, 66, -83, 30, -84, 66, 108, -41, 95, 66, -78, 38, 55, 66, -120, 49, 125, 66, -97, 53, 48, 66, -122, 62, 26, 66, 125, -49, 38, 66, 122, -24, -83, 66, -98, 1, -3, 66, -119, 74, -95, 66, -65, 88, -49, 66, 75, -117, 77, 66, -95, 98, -14, 66, -108, 0, -39, 66, -118, 87, 73, 66, 118, -71, 93, 66, 69, -51, 21, 66, -95, -47, -69, 66, -103, 108, 20, 66, -92, -120, -67, 66, -112, 121, 110, 66, 96, 120, 64, 66, 116, 121, -87, 66, -100, -27, -107, 66, -75, -72, -40, 66, -122, -30, 59, 66, -106, 100, 22, 66, -113, 116, -82, 66, -110, 69, -14, 66, -80, -11, 40, 66, -100, -35, -111, 66, -75, 52, 91, 66, -106, -60, 37, 66, 105, 49, 52, 66, -117, 16, -36, 66, -59, -100, -14, 66, -125, -115, -30, 66, -121, 111, -52, 66, -115, 90, 57, 66, -98, 72, -72, 66, 119, 98, 32, 66, 110, -105, 22, 66, -96, 98, 123, 66, -102, 116, 14, 66, 118, 100, -105, 66, -122, -26, 42, 66, -117, -74, 84, 66, -124, -32, -126, 66, -65, -95, -28, 66, -99, -71, 73, 66, 114, -124, 100, 66, -113, 69, 16, 66, -110, -70, 24, 66, -127, 89, 38, 66, -114, -2, 19, 66, 118, -39, 28, 66, -108, -18, 60, 66, 91, -68, -115, 66, -107, 48, -123, 66, -102, -111, 40, 66, -94, 112, -89, 66, -77, 21, 44, 66, -128, 115, -37, 66, -122, -45, 64, 66, -102, -56, -36, 66, -123, 20, 79, 66, -103, 76, -90, 66, -81, 75, -2, 66, 97, -115, 106, 66, -104, 80, 114, 66, -107, -86, 76, 66, -81, 112, -42, 66, -89, 80, -60, 66, -77, 63, -50, 66, 70, -106, -67, 66, -113, 12, -43, 66, -87, 16, 110, 66, 115, 60, -15, 66, -120, 78, 8, 66, 88, -121, 32, 66, -99, -58, -35, 66, -123, 62, 110, 66, 120, 71, -84, 66, -87, -45, 90, 66, 100, 14, 122, 66, -113, 121, -39, 66, -98, 93, 80, 66, -118, 70, -48, 66, -100, -73, -31, 66, 97, 1, 125, 66, -94, 31, 15, 66, -67, -98, -16, 66, -111, -15, 126, 66, -80, -52, 103, 66, 97, -86, 81, 66, -74, 22, -49, 66, -127, -28, 39, 66, -121, -92, 55, 66, -72, -2, 27, 66, -91, 96, -36, 66, -78, 50, 88, 66, -79, -34, -97, 66, -125, -49, 123, 66, -107, 20, 19, 66, 127, 34, -116, 66, 112, 85, 73, 66, -103, 36, -110, 66, -110, 57, 62, 66, -122, -92, -71, 66, -79, -75, 121, 66, -75, -73, 60, 66, 87, 60, 105, 66, -100, 46, 25, 66, 109, -117, -44, 66, -115, -105, 82, 66, 122, -112, 2, 66, 84, -111, -7, 66, 91, 14, 55, 66, -95, -108, -77, 66, 111, -89, 49, 66, -91, 34, 11, 66, -77, 57, 55, 66, -120, -31, 76, 66, 123, -27, -70, 66, -123, -38, -34, 66, -125, -12, -115, 66, -123, -14, 9, 66, -76, 75, 15, 66, -124, 50, 73, 66, 87, -83, -62, 66, -110, 55, 100, 66, 125, -84, 36, 66, -110, 48, -73, 66, 101, -33, 49, 66, 105, 28, 19, 66, -107, 100, 19, 66, -121, 55, -109, 66, -86, -115, 84, 66, -104, 67, 24, 66, 118, -3, 67, 66, -91, 73, 121, 66, -123, -13, 91, 66, -128, 77, 6, 66, 102, -51, -37, 66, -123, -98, -113, 66, 117, 68, -76, 66, -109, 19, -46, 66, -91, 80, -47, 66, 95, 42, 30, 66, 86, -35, 90, 66, 125, 93, 71, 66, -76, -51, 20, 66, -65, -36, -69, 66, -114, -1, 58, 66, 86, -24, -87, 66, -128, 100, -78, 66, -128, -104, 62, 66, -99, 76, 85, 66, -118, -89, 32, 66, -91, -44, -121, 66, -67, 20, -61, 66, -98, -92, 111, 66, -116, 115, -74, 66, -123, -97, 38, 66, 126, -99, -115, 66, -128, -77, -27, 66, 120, -73, 94, 66, -107, 80, -22, 66, -66, 34, 93, 66, -127, -78, 83, 66, 103, -4, -125, 66, 93, -15, -110, 66, -94, -43, -74, 66, -125, 89, 97, 66, -124, 26, -3, 66, 80, -64, -107, 66, 102, -108, 43, 66, -96, -115, -63, 66, -75, -85, 103, 66, 115, 39, -124, 66, 91, 89, -42, 66, -91, 50, -66, 66, -122, 43, 60, 66, -63, 88, -69, 66, -106, 108, 77, 66, -90, -63, 120, 66, -113, 116, 0, 66, 113, 66, 60, 66, -125, -55, -37, 66, -105, -128, 112, 66, 113, 52, 45, 66, -115, 114, 72, 66, 125, 29, -110, 66, -91, 61, 17, 66, -109, -127, -117, 66, -100, -111, 30, 0, 0, 0, 0, 0, 0, 0, 0 ], "precision": "FLOAT_32", "root": 0, "canonicalAndNotALeaf": true, "size": 253, "leftIndex": [ -1, 1, 255, 1119194819, 1160645003, 1162241755, 1118427389, 640740667, 969169022, 582754243, 588121196, 987860569, 582961333, 968638810, 624243065, 988276516, 394 ], "rightIndex": [ -1, 1, 255, 1157478227, 1160660555, 759938759, 968738200, 628989106, 990013019, 712070797, 588296401, 983668091, 729658975, 767675542, 1097927590, 597080605, 368 ], "nodeFreeIndexes": [], "nodeFreeIndexPointer": 1, "leafFreeIndexes": [], "leafFreeIndexPointer": 1, "partialTreeStateEnabled": true }, "boundingBoxCacheFraction": 0.0, "partialTreeState": true, "seed": -2736961492578362267, "id": 0, "dimensions": 32, "staticSeed": 0, "weight": 0.0, "hasAuxiliaryData": false }, { "version": "2.0", "root": 0, "maxSize": 256, "outputAfter": 32, "storeSequenceIndexesEnabled": false, "centerOfMassEnabled": false, "nodeStoreState": { "version": "2.0", "capacity": 255, "compressed": true, "cutDimension": [ 0, 31, 255, 1013443169, 921676590, 129582783, 245296757, 341366730, 753698021, 230382562, 353726331, 374681205, 526874929, 871585749, 1026469745, 786607786, 1009817027, 91003690, 979301591, 187745486, 439143994, 180000978, 749375469, 880502454, 359921235, 191974743, 253057958, 916515141, 746270301, 753583687, 984447703, 602649694, 880101359, 574072255, 765684939, 234039721, 586603589, 392416711, 668261841, 494078249, 719006946, 393916235, 110694101, 757009206, 61583357, 311 ], "cutValueData": [ 66, -89, 4, -101, 66, -112, 101, 72, 66, -73, 46, 28, 66, -118, 16, -79, 66, -121, -123, -7, 66, 108, 116, 25, 66, -99, -98, 65, 66, 113, 36, -93, 66, -108, 55, -4, 66, -93, 44, -62, 66, 124, 83, 126, 66, -96, 120, -69, 66, -122, 93, 36, 66, -86, 30, 13, 66, -93, 112, 77, 66, -113, 115, -45, 66, -121, -94, 50, 66, -97, -36, -88, 66, -124, 85, -83, 66, -71, -104, -14, 66, -122, 126, 38, 66, -121, 62, 117, 66, -112, 95, 8, 66, 120, 79, 107, 66, -112, 58, -119, 66, -82, -19, 80, 66, -119, 75, 102, 66, -126, -112, -40, 66, -127, 70, -19, 66, 115, -26, -7, 66, -116, 88, 40, 66, 97, 125, 58, 66, 99, 116, -122, 66, -111, 58, 81, 66, -74, 68, -26, 66, -99, -30, -68, 66, -86, 34, -53, 66, -115, 34, -35, 66, -107, 13, -50, 66, -123, 68, 13, 66, 115, -29, 86, 66, -77, -76, 78, 66, -89, -120, 9, 66, -95, 13, 102, 66, 127, 19, -14, 66, -124, -80, 99, 66, -68, 20, -56, 66, -70, 91, -114, 66, -80, -50, -76, 66, -104, 109, 99, 66, -113, -96, 66, 66, -104, 27, -74, 66, -94, 29, 13, 66, -90, -116, 51, 66, 87, -26, 92, 66, -102, 13, 2, 66, -59, -83, 10, 66, 81, 83, 60, 66, 100, -90, -102, 66, -86, 36, 63, 66, -73, 84, 78, 66, -82, -120, -22, 66, 84, 79, -61, 66, -84, -31, -49, 66, -95, 123, -41, 66, -87, -27, 68, 66, -88, -61, 122, 66, 104, 89, 118, 66, -117, -128, -93, 66, -79, 52, -51, 66, -73, 112, 38, 66, 93, 122, 77, 66, -111, 80, 103, 66, -99, -102, 80, 66, -121, 44, -11, 66, -104, 3, -100, 66, -90, -85, 123, 66, -124, -4, -15, 66, -68, -86, 24, 66, -87, 108, -31, 66, -106, 124, -61, 66, -85, -6, -78, 66, -72, -33, -89, 66, -86, -85, -75, 66, -120, -41, 76, 66, -124, -83, -79, 66, -89, -12, 108, 66, -67, -118, 123, 66, -122, 50, -96, 66, -96, -117, 83, 66, -113, 75, 123, 66, 115, -17, -61, 66, 116, 29, -85, 66, -98, -67, -124, 66, 115, -84, -12, 66, 94, 5, 85, 66, 116, -79, -34, 66, 102, 11, 27, 66, -118, 115, 2, 66, -120, -5, 17, 66, 82, -63, 59, 66, -78, -39, 89, 66, -107, -28, 60, 66, -127, -17, -16, 66, 116, 33, -47, 66, -100, -51, -104, 66, 107, -68, 125, 66, -114, 45, 21, 66, -71, 122, 1, 66, 118, -64, 16, 66, -69, -120, 47, 66, -127, 125, -25, 66, -96, -16, 26, 66, -61, 108, 113, 66, -58, -84, 13, 66, 101, 84, -9, 66, -126, -69, -78, 66, 68, -29, 25, 66, -74, 24, -90, 66, 88, -72, 48, 66, -102, 64, -8, 66, 96, 107, 105, 66, 76, -50, 75, 66, -104, -98, 109, 66, 103, -81, -34, 66, 76, -33, 85, 66, -123, -81, 66, 66, -70, 85, -19, 66, -73, 39, 87, 66, -77, -36, -91, 66, 100, 14, -5, 66, 111, 54, 30, 66, -94, -67, -105, 66, 119, -34, 18, 66, 94, 44, -53, 66, 88, 78, 110, 66, -94, 58, 96, 66, -72, 27, -111, 66, -112, 6, -69, 66, -111, -108, 16, 66, 95, 32, -56, 66, 114, -47, 115, 66, -121, -114, -89, 66, 102, -56, 119, 66, -93, 7, 98, 66, -94, -115, -119, 66, -84, -55, 47, 66, 83, -40, 87, 66, 80, -123, -37, 66, -72, 89, -25, 66, -83, 53, 54, 66, -101, 90, 3, 66, 116, 96, -69, 66, -82, 16, -120, 66, -93, -64, 110, 66, -122, 56, 85, 66, -96, 100, 98, 66, -78, 84, 102, 66, -68, -83, -73, 66, 93, -59, -99, 66, -95, 14, -44, 66, -112, 110, 78, 66, -119, -45, 0, 66, -94, -45, -96, 66, -119, -102, -113, 66, -94, -99, -10, 66, 86, -115, 115, 66, -79, -115, -128, 66, 96, 12, -51, 66, 112, 56, 13, 66, -99, 80, -125, 66, -109, 91, -48, 66, -78, 17, 25, 66, 109, -87, -20, 66, 91, -123, -128, 66, 85, -104, 125, 66, -92, -75, -67, 66, 72, -60, -7, 66, -91, -65, 57, 66, -98, 87, -54, 66, -118, 125, 15, 66, -102, 3, 81, 66, -86, 30, -34, 66, -89, 49, 35, 66, -71, 57, 28, 66, 127, 120, 121, 66, -85, 5, 43, 66, -100, 46, 72, 66, -87, 98, 49, 66, -86, 106, -4, 66, -99, 119, 114, 66, -108, -114, 66, 66, -127, -88, -27, 66, 78, -21, -90, 66, -84, 78, 106, 66, -77, -99, -5, 66, -93, -85, -25, 66, 124, -118, 126, 66, -128, -126, -122, 66, 121, 6, -60, 66, 72, 83, -68, 66, 116, 27, 69, 66, -74, 94, -128, 66, -79, -87, 114, 66, -96, 29, 112, 66, -85, 48, -62, 66, 86, 5, -122, 66, -109, 34, 45, 66, -105, 105, 127, 66, 121, -92, -106, 66, -125, 84, 123, 66, -128, 55, 87, 66, -120, -44, -72, 66, -105, -126, -21, 66, -97, -85, -108, 66, 118, 120, 92, 66, 102, 46, -66, 66, -68, 86, -108, 66, -123, -21, -82, 66, -62, -122, -84, 66, -126, 100, -50, 66, -79, -22, -117, 66, 100, 14, -60, 66, 86, -29, -32, 66, 104, 14, 31, 66, -96, 78, -105, 66, -122, -25, 29, 66, -95, 112, 89, 66, -99, 68, 48, 66, -122, 20, 74, 66, -97, 67, 75, 66, 89, -111, -36, 66, -122, -80, -114, 66, -99, 121, -101, 66, -61, -103, 30, 66, -67, -6, -81, 66, 110, -45, -29, 66, -116, 92, 10, 66, 75, -83, 102, 66, -117, 96, 121, 66, -111, 0, 59, 66, -108, 6, 106, 66, 84, 37, 100, 66, -101, -61, -10, 66, -125, 120, 96, 66, -112, 70, 85, 66, 90, 36, -41, 66, 123, 29, 29, 66, -122, -28, 35, 66, -108, -63, 86, 66, -105, -37, 15, 66, -93, 63, -47, 66, -107, -79, 93, 66, -104, 88, 29, 0, 0, 0, 0 ], "precision": "FLOAT_32", "root": 0, "canonicalAndNotALeaf": true, "size": 254, "leftIndex": [ -1, 1, 255, 1162261466, 1157419448, 1117082416, 725160833, 1097779625, 587573663, 983103602, 710823019, 753384229, 1116832748, 985045928, 595683841, 581153359, 1177 ], "rightIndex": [ -1, 1, 255, 1155707027, 1157417261, 755170369, 1160469332, 715080437, 625955849, 600466756, 970680173, 1145606612, 586117202, 597096914, 600816650, 968570995, 1094 ], "nodeFreeIndexes": [], "nodeFreeIndexPointer": 0, "leafFreeIndexes": [], "leafFreeIndexPointer": 0, "partialTreeStateEnabled": true }, "boundingBoxCacheFraction": 0.0, "partialTreeState": true, "seed": 139913034750054867, "id": 0, "dimensions": 32, "staticSeed": 0, "weight": 0.0, "hasAuxiliaryData": false }, { "version": "2.0", "root": 0, "maxSize": 256, "outputAfter": 32, "storeSequenceIndexesEnabled": false, "centerOfMassEnabled": false, "nodeStoreState": { "version": "2.0", "capacity": 255, "compressed": true, "cutDimension": [ 0, 31, 255, 173344421, 926922319, 125094975, 104849077, 996340926, 128308961, 716421494, 895929981, 330169982, 45303595, 854808011, 120186078, 1042148470, 1052286139, 1072392027, 212793033, 926587978, 936551517, 771080187, 922220089, 711932081, 337168875, 204823778, 626301163, 668526305, 631039174, 222092901, 1017769562, 366822986, 447699281, 221028266, 882048966, 780140150, 707091531, 658438330, 925759037, 840869161, 614251182, 502513462, 327059393, 1073313478, 354489394, 559 ], "cutValueData": [ 66, 99, -36, -127, 66, 81, 109, 108, 66, -106, -119, -66, 66, -124, 62, -90, 66, -66, -72, -62, 66, -128, -50, -52, 66, 110, 65, -25, 66, 85, -21, 76, 66, -110, -88, -65, 66, -97, -33, 99, 66, -102, 9, -78, 66, -106, -11, -93, 66, -75, 36, -85, 66, -125, 26, 30, 66, -90, 65, -17, 66, -101, -101, 23, 66, -115, -45, -97, 66, -121, 71, 96, 66, 127, -74, 124, 66, 101, -92, -36, 66, -110, -116, 122, 66, -67, 127, 57, 66, -85, 47, 35, 66, -124, 27, 37, 66, 102, -70, -73, 66, 72, 86, -98, 66, -102, 26, -128, 66, 83, -112, 22, 66, -126, -93, 45, 66, -104, 59, -104, 66, 104, -84, 113, 66, -110, -38, -81, 66, -104, -117, -40, 66, -123, -61, -128, 66, -108, -59, 66, 66, -99, -21, 125, 66, 84, 59, 85, 66, -78, -21, -47, 66, -109, -36, 93, 66, -112, -45, -19, 66, -73, -90, 106, 66, -99, 90, -63, 66, 126, -81, 57, 66, 110, -19, 39, 66, -98, -20, 40, 66, -84, 33, 13, 66, -123, -22, 30, 66, -108, -48, -20, 66, -68, -106, 41, 66, -114, 10, 118, 66, 125, 60, -101, 66, 97, -43, 25, 66, -125, 28, -33, 66, -87, 88, 51, 66, -127, -79, -38, 66, -86, 48, 6, 66, -98, 20, 59, 66, -64, 49, 72, 66, -104, -91, -93, 66, -89, -5, 74, 66, 86, -13, 18, 66, -121, 58, 99, 66, -94, -31, 105, 66, -79, -68, 49, 66, -92, -14, -81, 66, -97, -28, 65, 66, -123, 103, -66, 66, -102, 116, 23, 66, -71, -120, -66, 66, 69, 30, 78, 66, -93, -50, -124, 66, -98, 5, 7, 66, -70, 78, -24, 66, 113, 67, -46, 66, -89, -23, -32, 66, 121, 69, 16, 66, -117, -108, -42, 66, -64, -53, 12, 66, 117, 10, 53, 66, -82, 102, 47, 66, -96, 18, -45, 66, -108, -32, 54, 66, -126, -80, -31, 66, -93, 1, 90, 66, -103, 76, -107, 66, -106, 25, 119, 66, -125, -71, 95, 66, -62, 53, -29, 66, -98, -17, 0, 66, -119, 55, 97, 66, -116, 89, -124, 66, 77, -106, -67, 66, -114, -61, -23, 66, 79, 54, -48, 66, -82, 15, -123, 66, -104, 61, -74, 66, 98, 1, -22, 66, -93, -64, -33, 66, -102, 45, 47, 66, -119, -117, -12, 66, -76, 82, 26, 66, -78, 16, 110, 66, -94, 25, -6, 66, -96, 63, -32, 66, 109, 23, -105, 66, 83, 76, 31, 66, -69, -47, 55, 66, -110, 26, -90, 66, -104, 11, -54, 66, -80, 117, 123, 66, 118, 46, -112, 66, -124, 53, -21, 66, 96, 33, 50, 66, -91, 42, -27, 66, -90, -41, 59, 66, -107, 16, 85, 66, -74, -80, 111, 66, -108, 42, -88, 66, -64, -107, -82, 66, -89, 12, 28, 66, -69, 81, 90, 66, -109, 76, -102, 66, -75, 62, -59, 66, 110, 47, -59, 66, -76, -99, -86, 66, -101, 20, -98, 66, -114, -92, -73, 66, 105, -93, 6, 66, -106, -41, -84, 66, -68, -107, 98, 66, -65, -33, 15, 66, -67, 78, 16, 66, -96, 114, -12, 66, -84, 27, -115, 66, -115, 3, 115, 66, -105, 104, -1, 66, -87, 74, 30, 66, -87, -47, -33, 66, -124, 117, 113, 66, -99, -88, -32, 66, -119, -113, -95, 66, -93, -88, 25, 66, 120, 69, -40, 66, -125, 121, 8, 66, -91, 120, 18, 66, -93, -50, 108, 66, 124, -11, 52, 66, -97, -37, -115, 66, -101, -107, 109, 66, -122, -49, 114, 66, -75, 98, 50, 66, -105, 40, 18, 66, 106, -31, -115, 66, 81, 98, -52, 66, -128, -42, 123, 66, -79, -126, -16, 66, -96, 98, 51, 66, -123, -105, 7, 66, 86, -80, 30, 66, -95, -9, -97, 66, -82, 105, -101, 66, -125, -113, 46, 66, 108, 76, -61, 66, -97, -22, -21, 66, -62, -114, -113, 66, -117, -19, -6, 66, 104, 27, -116, 66, -113, 43, 64, 66, 116, 107, 15, 66, -94, 108, -110, 66, -59, -50, -107, 66, 84, 13, 86, 66, 80, -114, 5, 66, -107, 28, 101, 66, 96, 120, -27, 66, -94, -26, 23, 66, -68, -122, -93, 66, -83, -93, -117, 66, -86, 9, 61, 66, -82, -73, -20, 66, -73, 52, -29, 66, 119, 92, -3, 66, -124, -73, 29, 66, 105, 91, 88, 66, -69, 19, 88, 66, -93, 66, -43, 66, 104, -11, 29, 66, -78, -110, 115, 66, -85, 26, 104, 66, -86, -96, 84, 66, -115, 105, 116, 66, -61, 68, -22, 66, 102, 9, 123, 66, 86, 86, -73, 66, 121, -36, 85, 66, -101, 126, 51, 66, 127, -26, 16, 66, -83, -95, -123, 66, -91, -49, 80, 66, -101, -104, 7, 66, -109, -58, -37, 66, -99, -74, -58, 66, -86, 41, 75, 66, 93, 47, -33, 66, 126, -126, 96, 66, -78, -120, 57, 66, -111, -106, -81, 66, 113, 53, 87, 66, -83, -15, -87, 66, -121, -15, -11, 66, -122, 46, 66, 66, -120, -48, 72, 66, -107, -53, -23, 66, 115, 77, 24, 66, -112, -47, 105, 66, 125, -23, -56, 66, -103, -23, -92, 66, -106, -59, 126, 66, -92, 78, -12, 66, -106, 112, -96, 66, 117, -41, 33, 66, -128, -9, 4, 66, 87, -65, 70, 66, 71, 46, 7, 66, -92, 59, 105, 66, -98, -66, -104, 66, 75, 12, -77, 66, -124, 78, 23, 66, -90, -109, -54, 66, 106, -31, -12, 66, -97, 122, -79, 66, -99, -125, -77, 66, -110, -34, -123, 66, -87, 32, 49, 66, 120, -71, -77, 66, -126, 124, -18, 66, -95, 79, 104, 66, -103, 50, 88, 66, -119, -33, 18, 66, 114, -13, -120, 66, -104, -69, 105, 66, -81, -121, 58, 66, -91, 50, -88, 66, 116, -102, -103, 66, -107, 50, 69, 66, -94, 42, -57, 66, -110, -67, -27, 66, 98, 1, 122, 66, -115, 5, -4, 66, 111, 16, 83, 66, -96, -86, -95, 66, -107, 111, -81, 66, 107, -111, -55, 66, -68, -95, 55, 0, 0, 0, 0 ], "precision": "FLOAT_32", "root": 0, "canonicalAndNotALeaf": true, "size": 254, "leftIndex": [ -1, 1, 255, 774838787, 974123738, 726990791, 984753580, 1033101512, 768198292, 710333195, 1027541941, 970154305, 629494405, 970230928, 581724166, 582964438, 1201 ], "rightIndex": [ -1, 1, 255, 1032589862, 644106491, 774755684, 1142951710, 1155705935, 1159936414, 1099543865, 581190029, 630616823, 624356896, 582784870, 726805696, 595718023, 1102 ], "nodeFreeIndexes": [], "nodeFreeIndexPointer": 0, "leafFreeIndexes": [], "leafFreeIndexPointer": 0, "partialTreeStateEnabled": true }, "boundingBoxCacheFraction": 0.0, "partialTreeState": true, "seed": -950767441100490523, "id": 0, "dimensions": 32, "staticSeed": 0, "weight": 0.0, "hasAuxiliaryData": false } ], "executionContext": { "parallelExecutionEnabled": false, "threadPoolSize": 0 }, "saveTreeStateEnabled": true, "saveSamplerStateEnabled": true, "saveCoordinatorStateEnabled": true }, "thresholderState": { "randomseed": 0, "inAnomaly": false, "elasticity": 0.01, "attributionEnabled": false, "count": 1225, "minimumScores": 10, "primaryDeviationState": { "discount": 0.0050000000000000044, "weight": 199.41879980792027, "sumSquared": 135.95690716058067, "sum": 163.721886587894, "count": 1225 }, "secondaryDeviationState": { "discount": 0.0050000000000000044, "weight": 199.41879980792027, "sumSquared": 135.61793917480634, "sum": 163.54696035290627, "count": 1225 }, "thresholdDeviationState": { "discount": 0.0025000000000000022, "weight": 374.76476562578705, "sumSquared": 15.531414684382712, "sum": 15.531414684382712, "count": 1225 }, "upperThreshold": 2.0, "lowerThreshold": 1.0, "absoluteThreshold": 1.0, "autoThreshold": false, "initialThreshold": 1.5, "zFactor": 2.5, "upperZfactor": 5.0, "absoluteScoreFraction": 0.5, "horizon": 0.5 }, "preprocessorStates": [ { "version": "2.1", "useImputedFraction": 0.5, "imputationMethod": "PREVIOUS", "forestMode": "STANDARD", "transformMethod": "NONE", "weights": [ 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0 ], "lastShingledPoint": [ 0.0, 79.5, 83.0, 76.0, 0.0, 94.0, 94.0, 94.0, 0.0, 85.0, 85.0, 85.0, 0.0, 53.0, 53.0, 53.0, 0.0, 53.0, 53.0, 53.0, 0.0, 97.0, 97.0, 97.0, 0.0, 66.0, 66.0, 66.0, 0.0, 53.0, 53.0, 53.0 ], "lastShingledInput": [ 0.0, 79.5, 83.0, 76.0, 0.0, 94.0, 94.0, 94.0, 0.0, 85.0, 85.0, 85.0, 0.0, 53.0, 53.0, 53.0, 0.0, 53.0, 53.0, 53.0, 0.0, 97.0, 97.0, 97.0, 0.0, 66.0, 66.0, 66.0, 0.0, 53.0, 53.0, 53.0 ], "timeDecay": 0.0, "startNormalization": 10, "stopNormalization": 2147483647, "shingleSize": 8, "dimensions": 32, "inputLength": 32, "clipFactor": 10.0, "normalizeTime": false, "previousTimeStamps": [0, 0, 0, 0, 0, 0, 0, 0], "valuesSeen": 1257, "internalTimeStamp": 1257, "dataQualityState": { "discount": 1.0e-4, "weight": 629.4992050874407, "sumSquared": 629.4992050874407, "sum": 629.4992050874407, "count": 1257 }, "timeStampDeviationState": { "discount": 1.0e-4, "weight": 629.4992050874407, "sumSquared": 0.0, "sum": 0.0, "count": 1257 } } ], "ignoreSimilarFactor": 0.3, "triggerFactor": 3.5, "lastAnomalyTimeStamp": 1216, "lastAnomalyScore": 1.0341965562255886, "lastAnomalyAttribution": { "high": [ 0.0, 0.02556739560898381, 0.040413161124477896, 0.014998565390821401, 0.0, 0.0, 0.0, 0.0, 0.0, 0.001540388397430486, 0.001540388397430486, 0.001540388397430486, 0.0, 0.0010928893489314821, 0.0010928893489314821, 0.0010928893489314821, 0.0, 3.4845364418932664e-4, 3.4845364418932664e-4, 3.4845364418932664e-4, 0.0, 0.027020193090515413, 0.025163469786736423, 0.03163984692871691, 0.0, 0.020971108223835824, 0.018605444907579965, 0.023485239185523532, 0.0, 0.03325596329975221, 0.027706520161384685, 0.03947519320649786 ], "low": [ 0.0, 0.010918632411441403, 0.006208194892003597, 0.01901386776274787, 0.0, 0.059629428026460686, 0.06324446015591077, 0.051947604761362835, 0.0, 0.05282156107385229, 0.055397573203406596, 0.047853434780376417, 0.0, 0.03752281674104219, 0.03939725735101295, 0.034211600213650495, 0.0, 0.060902128997274485, 0.061830771305554276, 0.05807699919735293, 0.0, 0.008181304113898433, 0.010937794354236228, 0.006927164429921987, 0.0, 0.001092991610111269, 0.0016351195525133246, 9.267826113141719e-4, 0.0, 0.002423995798281548, 0.003423781997100454, 0.002423995798281548 ] }, "lastScore": 0.0, "lastAnomalyPoint": [ 0.0, 73.0, 78.0, 68.0, 0.0, 50.0, 50.0, 50.0, 0.0, 52.0, 52.0, 52.0, 0.0, 52.0, 52.0, 52.0, 0.0, 50.0, 50.0, 50.0, 0.0, 84.0, 84.0, 84.0, 0.0, 95.0, 95.0, 95.0, 0.0, 94.0, 94.0, 94.0 ], "lastExpectedPoint": [ 0.0, 73.0, 78.0, 68.0, 0.0, 50.0, 50.0, 50.0, 0.0, 52.0, 52.0, 52.0, 0.0, 52.0, 52.0, 52.0, 0.0, 73.0, 73.0, 73.0, 0.0, 84.0, 84.0, 84.0, 0.0, 95.0, 95.0, 95.0, 0.0, 94.0, 94.0, 94.0 ], "previousIsPotentialAnomaly": false, "inHighScoreRegion": false, "ignoreSimilar": false, "numberOfAttributors": 5, "randomSeed": 0, "forestMode": "STANDARD", "transformMethod": "NONE", "lastRelativeIndex": 0, "lastReset": 0 } ================================================ FILE: Java/parkservices/src/test/resources/com/amazon/randomcutforest/parkservices/state/state_2.json ================================================ { "version": "2.1", "forestState": { "version": "2.0", "totalUpdates": 505, "timeDecay": 1.0E-4, "numberOfTrees": 30, "sampleSize": 256, "shingleSize": 8, "dimensions": 32, "outputAfter": 32, "compressed": true, "partialTreeState": true, "boundingBoxCacheFraction": 0.0, "storeSequenceIndexesEnabled": false, "compact": true, "internalShinglingEnabled": false, "centerOfMassEnabled": false, "precision": "FLOAT_32", "pointStoreState": { "version": "2.0", "dimensions": 32, "capacity": 7681, "shingleSize": 8, "precision": "FLOAT_32", "startOfFreeSegment": 2048, "pointData": [ 0, 0, 0, 0, 66, -100, -103, -102, 66, -58, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, -126, 64, 0, 66, -66, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -99, 69, -47, 66, -58, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -119, 23, 70, 66, -82, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -123, 85, 85, 66, -62, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -117, -52, -51, 66, -70, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -104, 93, 23, 66, -66, 0, 0, 66, 104, 0, 0, 0, 0, 0, 0, 66, -102, -52, -51, 66, -64, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, -111, 28, 114, 66, -80, 0, 0, 66, -126, 0, 0, 0, 0, 0, 0, 66, -104, 113, -57, 66, -58, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -94, -52, -51, 66, -58, 0, 0, 66, 116, 0, 0, 0, 0, 0, 0, 66, -115, -114, 57, 66, -72, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -103, -103, -102, 66, -66, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -96, 102, 102, 66, -58, 0, 0, 66, 100, 0, 0, 0, 0, 0, 0, 66, -115, 69, -47, 66, -70, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, -111, 0, 0, 66, -62, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -107, -64, 0, 66, -70, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, -111, -52, -51, 66, -68, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -102, 51, 51, 66, -60, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -106, 102, 102, 66, -62, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -116, 113, -57, 66, -74, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -113, 0, 0, 66, -72, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -104, 102, 102, 66, -60, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -111, 0, 0, 66, -68, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -124, -103, -102, 66, -78, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -110, 0, 0, 66, -72, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -97, 69, -47, 66, -58, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, -106, 51, 51, 66, -82, 0, 0, 66, -120, 0, 0, 0, 0, 0, 0, 66, -99, 69, -47, 66, -62, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -108, 102, 102, 66, -62, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -88, 0, 0, 66, -62, 0, 0, 66, -122, 0, 0, 0, 0, 0, 0, 66, -101, -94, -23, 66, -56, 0, 0, 66, 100, 0, 0, 0, 0, 0, 0, 66, -111, 23, 70, 66, -70, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -109, -128, 0, 66, -58, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -111, -103, -102, 66, -64, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, -113, -114, 57, 66, -62, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -114, 113, -57, 66, -70, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -115, 23, 70, 66, -76, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -120, -128, 0, 66, -76, 0, 0, 66, 100, 0, 0, 0, 0, 0, 0, 66, -114, -29, -114, 66, -66, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -101, -128, 0, 66, -66, 0, 0, 66, 120, 0, 0, 0, 0, 0, 0, 66, -106, 113, -57, 66, -68, 0, 0, 66, 100, 0, 0, 0, 0, 0, 0, 66, -127, 102, 102, 66, -78, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -117, -94, -23, 66, -72, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, -102, 102, 102, 66, -64, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -101, -114, 57, 66, -64, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -94, -86, -85, 66, -58, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, -110, 0, 0, 66, -72, 0, 0, 66, 104, 0, 0, 0, 0, 0, 0, 66, -116, 113, -57, 66, -84, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, -117, -57, 28, 66, -82, 0, 0, 66, 92, 0, 0, 0, 0, 0, 0, 66, -113, 28, 114, 66, -64, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -96, 102, 102, 66, -60, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -122, 56, -28, 66, -62, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -104, -117, -93, 66, -70, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 67, -5, -26, 102, 69, -121, -72, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -119, 102, 102, 66, -76, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -103, -52, -51, 66, -60, 0, 0, 66, 100, 0, 0, 0, 0, 0, 0, 66, -93, -103, -102, 66, -62, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -118, -24, -70, 66, -58, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -127, -86, -85, 66, -64, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -97, 23, 70, 66, -62, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -93, 0, 0, 66, -64, 0, 0, 66, -118, 0, 0, 0, 0, 0, 0, 66, -104, -86, -85, 66, -58, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -106, -29, -114, 66, -58, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -99, -94, -23, 66, -60, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -124, -103, -102, 66, -80, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -106, -86, -85, 66, -58, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -105, -114, 57, 66, -60, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, -118, 113, -57, 66, -64, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -106, 46, -116, 66, -66, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -95, 0, 0, 66, -62, 0, 0, 66, 120, 0, 0, 0, 0, 0, 0, 66, -104, 0, 0, 66, -72, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -103, -57, 28, 66, -62, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, -110, 102, 102, 66, -60, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -101, 116, 93, 66, -58, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -78, 0, 0, 66, -58, 0, 0, 66, -126, 0, 0, 0, 0, 0, 0, 66, -104, 113, -57, 66, -70, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -114, -24, -70, 66, -62, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, -93, 64, 0, 66, -60, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -111, 64, 0, 66, -60, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, -91, -52, -51, 66, -62, 0, 0, 66, 116, 0, 0, 0, 0, 0, 0, 66, -115, 69, -47, 66, -58, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -112, -29, -114, 66, -64, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, 120, 102, 102, 66, -104, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -109, -47, 116, 66, -68, 0, 0, 66, 100, 0, 0, 0, 0, 0, 0, 66, -102, -24, -70, 66, -68, 0, 0, 66, 116, 0, 0, 0, 0, 0, 0, 66, -126, 0, 0, 66, -86, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -102, 102, 102, 66, -64, 0, 0, 66, 92, 0, 0, 0, 0, 0, 0, 66, -102, -52, -51, 66, -58, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -108, 93, 23, 66, -66, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -105, -52, -51, 66, -62, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, -114, 46, -116, 66, -68, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -126, -29, -114, 66, -58, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -110, 42, -85, 66, -70, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -120, -86, -85, 66, -80, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -127, 102, 102, 66, -72, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -117, -94, -23, 66, -72, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -109, -52, -51, 66, -68, 0, 0, 66, 92, 0, 0, 0, 0, 0, 0, 66, -102, -52, -51, 66, -58, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, 127, -114, 57, 66, -76, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -123, 23, 70, 66, -70, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -96, -52, -51, 66, -74, 0, 0, 66, 120, 0, 0, 0, 0, 0, 0, 66, -88, 56, -28, 66, -62, 0, 0, 66, -118, 0, 0, 0, 0, 0, 0, 66, -90, 0, 0, 66, -60, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -125, -47, 116, 66, -74, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -114, 56, -28, 66, -58, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -125, 51, 51, 66, -92, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -101, 102, 102, 66, -74, 0, 0, 66, 116, 0, 0, 65, 32, 0, 0, 66, 2, -52, -51, 66, -66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, -106, 51, 51, 66, -72, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -104, 102, 102, 66, -64, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, -128, 113, -57, 66, -102, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -106, -128, 0, 66, -60, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -111, 51, 51, 66, -82, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -108, 42, -85, 66, -56, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -99, -52, -51, 66, -64, 0, 0, 66, 104, 0, 0, 0, 0, 0, 0, 66, -88, -103, -102, 66, -68, 0, 0, 66, -106, 0, 0, 0, 0, 0, 0, 66, -99, 102, 102, 66, -58, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, -112, 0, 0, 66, -74, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, -126, 56, -28, 66, -74, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -114, 0, 0, 66, -60, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -88, 113, -57, 66, -60, 0, 0, 66, -108, 0, 0, 0, 0, 0, 0, 66, -99, 102, 102, 66, -58, 0, 0, 66, 120, 0, 0, 0, 0, 0, 0, 66, -125, 102, 102, 66, -70, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -114, -64, 0, 66, -92, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, -100, 0, 0, 66, -62, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -101, -52, -51, 66, -64, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, -114, 46, -116, 66, -74, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, -106, -24, -70, 66, -66, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -111, -94, -23, 66, -64, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, -103, 51, 51, 66, -62, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -101, -103, -102, 66, -58, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, -96, -103, -102, 66, -64, 0, 0, 66, 100, 0, 0, 0, 0, 0, 0, 66, -96, 113, -57, 66, -62, 0, 0, 66, 104, 0, 0, 0, 0, 0, 0, 66, -108, -103, -102, 66, -68, 0, 0, 66, -126, 0, 0, 0, 0, 0, 0, 66, -92, 0, 0, 66, -58, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -92, 0, 0, 66, -64, 0, 0, 66, -126, 0, 0, 0, 0, 0, 0, 66, -110, -52, -51, 66, -62, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, -88, 51, 51, 66, -64, 0, 0, 66, 120, 0, 0, 0, 0, 0, 0, 66, -122, -103, -102, 66, -68, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -116, -52, -51, 66, -70, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -111, -103, -102, 66, -60, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -117, -86, -85, 66, -60, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -112, 113, -57, 66, -62, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -108, 102, 102, 66, -60, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -118, -117, -93, 66, -82, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -111, 51, 51, 66, -66, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -117, 51, 51, 66, -68, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -118, 0, 0, 66, -64, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -98, -52, -51, 66, -58, 0, 0, 66, 92, 0, 0, 0, 0, 0, 0, 66, -100, -117, -93, 66, -68, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, -97, 23, 70, 66, -58, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, -94, -29, -114, 66, -58, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, -116, -128, 0, 66, -82, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -98, 102, 102, 66, -64, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, -112, 0, 0, 66, -66, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -124, -70, 47, 66, -62, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -104, 102, 102, 66, -58, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, 119, -103, -102, 66, -82, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -113, -43, 85, 66, -60, 0, 0, 66, 92, 0, 0, 0, 0, 0, 0, 66, -112, 46, -116, 66, -76, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -102, 0, 0, 66, -66, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -100, -117, -93, 66, -64, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -99, -103, -102, 66, -58, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, -100, -103, -102, 66, -62, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, 126, 46, -116, 66, -62, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -109, -114, 57, 66, -60, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -109, -52, -51, 66, -84, 0, 0, 66, 104, 0, 0, 0, 0, 0, 0, 66, -102, 56, -28, 66, -58, 0, 0, 66, 92, 0, 0, 0, 0, 0, 0, 66, -121, -52, -51, 66, -58, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -107, -52, -51, 66, -58, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -99, 51, 51, 66, -64, 0, 0, 66, -128, 0, 0, 0, 0, 0, 0, 66, -128, -117, -93, 66, -74, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -113, -94, -23, 66, -58, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -88, 93, 23, 66, -58, 0, 0, 66, 120, 0, 0, 0, 0, 0, 0, 66, -118, -70, 47, 66, -58, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -111, 85, 85, 66, -60, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -95, -114, 57, 66, -60, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -118, 102, 102, 66, -64, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -99, -103, -102, 66, -66, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -110, -24, -70, 66, -60, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -111, 28, 114, 66, -62, 0, 0, 66, 100, 0, 0, 0, 0, 0, 0, 66, -118, 0, 0, 66, -68, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -112, -70, 47, 66, -74, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -117, -103, -102, 66, -84, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -107, 0, 0, 66, -58, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -98, 56, -28, 66, -58, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -106, 46, -116, 66, -62, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -125, 0, 0, 66, -92, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -100, -86, -85, 66, -62, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, -97, 23, 70, 66, -58, 0, 0, 66, 92, 0, 0, 0, 0, 0, 0, 66, -114, 0, 0, 66, -78, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -107, 69, -47, 66, -72, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -106, -24, -70, 66, -58, 0, 0, 66, 100, 0, 0, 0, 0, 0, 0, 66, -106, 0, 0, 66, -62, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, -120, 0, 0, 66, -64, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -108, -117, -93, 66, -58, 0, 0, 66, 84, 0, 0, 65, 96, 0, 0, 65, -110, -86, -85, 66, -78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, -125, 42, -85, 66, -104, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -111, 0, 0, 66, -64, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -94, 0, 0, 66, -64, 0, 0, 66, 120, 0, 0, 0, 0, 0, 0, 66, -94, 93, 23, 66, -58, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, -99, -94, -23, 66, -58, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -112, -103, -102, 66, -60, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -93, -52, -51, 66, -62, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -107, 85, 85, 66, -70, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -98, -29, -114, 66, -60, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -115, 102, 102, 66, -74, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, -110, 0, 0, 66, -58, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -110, 46, -116, 66, -64, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -110, 113, -57, 66, -70, 0, 0, 66, 104, 0, 0, 0, 0, 0, 0, 66, -117, -57, 28, 66, -60, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -102, -70, 47, 66, -60, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, -114, -103, -102, 66, -64, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, -103, -114, 57, 66, -68, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -96, -20, 79, 66, -56, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -107, -52, -51, 66, -60, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -125, -114, 57, 66, -62, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -102, -29, -114, 66, -72, 0, 0, 66, 120, 0, 0, 0, 0, 0, 0, 66, -106, 46, -116, 66, -70, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -111, 102, 102, 66, -60, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -94, 51, 51, 66, -62, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, -93, 69, -47, 66, -60, 0, 0, 66, 100, 0, 0, 0, 0, 0, 0, 66, -112, 46, -116, 66, -58, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -103, -114, 57, 66, -74, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, -124, 102, 102, 66, -64, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -98, -24, -70, 66, -60, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -104, 113, -57, 66, -60, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -107, 51, 51, 66, -66, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -95, 102, 102, 66, -70, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, -111, 51, 51, 66, -72, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -111, 0, 0, 66, -70, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -98, -52, -51, 66, -60, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -117, 102, 102, 66, -64, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -123, 0, 0, 66, -66, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -99, -114, 57, 66, -62, 0, 0, 66, 100, 0, 0, 0, 0, 0, 0, 66, -113, 85, 85, 66, -76, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -106, 113, -57, 66, -64, 0, 0, 66, 100, 0, 0, 0, 0, 0, 0, 66, -97, 51, 51, 66, -66, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -113, -103, -102, 66, -60, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -98, 113, -57, 66, -58, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -120, 0, 0, 66, -92, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -98, 102, 102, 66, -60, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -112, -24, -70, 66, -58, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -100, 56, -28, 66, -64, 0, 0, 66, 104, 0, 0, 0, 0, 0, 0, 66, -114, 0, 0, 66, -66, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -100, -52, -51, 66, -58, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -120, 0, 0, 66, -60, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -102, -52, -51, 66, -60, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -126, 0, 0, 66, -86, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -118, -86, -85, 66, -62, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -88, -103, -102, 66, -68, 0, 0, 66, -124, 0, 0, 0, 0, 0, 0, 66, -122, 0, 0, 66, -76, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -109, -94, -23, 66, -70, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -108, -52, -51, 66, -66, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -116, -86, -85, 66, -86, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -109, -52, -51, 66, -66, 0, 0, 66, 92, 0, 0, 0, 0, 0, 0, 66, -100, 0, 0, 66, -58, 0, 0, 66, 92, 0, 0, 0, 0, 0, 0, 66, -117, 28, 114, 66, -66, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -95, -52, -51, 66, -64, 0, 0, 66, -128, 0, 0, 0, 0, 0, 0, 66, -118, -52, -51, 66, -80, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -125, 0, 0, 66, -96, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -110, 56, -28, 66, -64, 0, 0, 66, 104, 0, 0, 0, 0, 0, 0, 66, -108, 102, 102, 66, -58, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -85, -94, -23, 66, -58, 0, 0, 66, -124, 0, 0, 0, 0, 0, 0, 66, -97, -57, 28, 66, -62, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -118, 93, 23, 66, -60, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -115, -57, 28, 66, -74, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, -96, -52, -51, 66, -58, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -94, -70, 47, 66, -58, 0, 0, 66, 100, 0, 0, 0, 0, 0, 0, 66, -110, 64, 0, 66, -68, 0, 0, 66, 104, 0, 0, 0, 0, 0, 0, 66, -116, -70, 47, 66, -58, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, -106, 0, 0, 66, -58, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, -112, 0, 0, 66, -72, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -105, 0, 0, 66, -68, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, -100, -128, 0, 66, -58, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -126, 51, 51, 66, -64, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -91, 116, 93, 66, -60, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, -96, 113, -57, 66, -58, 0, 0, 66, 116, 0, 0, 0, 0, 0, 0, 66, -108, -70, 47, 66, -68, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -104, 93, 23, 66, -62, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -121, -57, 28, 66, -70, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -107, 42, -85, 66, -70, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -112, 93, 23, 66, -80, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -100, -29, -114, 66, -64, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -114, -70, 47, 66, -76, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -112, -117, -93, 66, -62, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -112, 56, -28, 66, -80, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, 122, 85, 85, 66, -100, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -118, 0, 0, 66, -82, 0, 0, 66, 100, 0, 0, 0, 0, 0, 0, 66, -112, -86, -85, 66, -64, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -103, -52, -51, 66, -68, 0, 0, 66, 116, 0, 0, 0, 0, 0, 0, 66, -99, -103, -102, 66, -66, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -95, -52, -51, 66, -58, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, -95, -47, 116, 66, -60, 0, 0, 66, -128, 0, 0, 0, 0, 0, 0, 66, -100, -24, -70, 66, -64, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -110, -70, 47, 66, -64, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -118, 113, -57, 66, -78, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -105, 42, -85, 66, -60, 0, 0, 66, 104, 0, 0, 65, 32, 0, 0, 66, 26, 0, 0, 66, -70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, -104, -29, -114, 66, -72, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -108, -70, 47, 66, -64, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, -107, 85, 85, 66, -70, 0, 0, 66, 100, 0, 0, 0, 0, 0, 0, 66, -99, 85, 85, 66, -62, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -112, -70, 47, 66, -62, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -111, -114, 57, 66, -66, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -109, 69, -47, 66, -72, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -98, 56, -28, 66, -62, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -103, 102, 102, 66, -64, 0, 0, 66, 104, 0, 0, 0, 0, 0, 0, 66, -114, 0, 0, 66, -58, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -96, 51, 51, 66, -62, 0, 0, 66, -128, 0, 0, 0, 0, 0, 0, 66, -105, 0, 0, 66, -76, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, -111, 85, 85, 66, -60, 0, 0, 66, 92, 0, 0, 0, 0, 0, 0, 66, -111, 102, 102, 66, -62, 0, 0, 66, 92, 0, 0, 0, 0, 0, 0, 66, -105, 28, 114, 66, -58, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, -107, 51, 51, 66, -58, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -110, -24, -70, 66, -58, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -98, -29, -114, 66, -68, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, -106, -70, 47, 66, -68, 0, 0, 66, -122, 0, 0, 0, 0, 0, 0, 66, -109, 102, 102, 66, -58, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -102, 93, 23, 66, -58, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -96, -103, -102, 66, -58, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -101, -57, 28, 66, -66, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -103, 28, 114, 66, -58, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -106, 56, -28, 66, -64, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -107, 64, 0, 66, -78, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, -97, -52, -51, 66, -58, 0, 0, 66, 104, 0, 0, 0, 0, 0, 0, 66, -115, 85, 85, 66, -60, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -121, -103, -102, 66, -68, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -109, 64, 0, 66, -62, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, -112, 0, 0, 66, -70, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -99, 51, 51, 66, -60, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, 122, 56, -28, 66, -96, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -103, -114, 57, 66, -62, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -117, -114, 57, 66, -98, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, -105, -52, -51, 66, -72, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -126, 113, -57, 66, -76, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -108, 42, -85, 66, -68, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -116, -52, -51, 66, -68, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, -114, 51, 51, 66, -62, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -120, -37, 110, 66, -66, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -108, -117, -93, 66, -58, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -107, 69, -47, 66, -64, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -98, 46, -116, 66, -58, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -109, 102, 102, 66, -58, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -97, -57, 28, 66, -58, 0, 0, 66, 116, 0, 0, 0, 0, 0, 0, 66, -100, 51, 51, 66, -72, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -101, 51, 51, 66, -58, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, -112, -52, -51, 66, -78, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, -105, 0, 0, 66, -62, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -99, 51, 51, 66, -58, 0, 0, 66, 116, 0, 0, 0, 0, 0, 0, 66, -118, -86, -85, 66, -90, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -106, -103, -102, 66, -64, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -110, 0, 0, 66, -74, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, -108, 0, 0, 66, -58, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -111, 116, 93, 66, -68, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -96, 113, -57, 66, -62, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -101, -103, -102, 66, -60, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -104, 56, -28, 66, -62, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -85, -103, -102, 66, -58, 0, 0, 66, -126, 0, 0, 0, 0, 0, 0, 66, -105, 51, 51, 66, -66, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, -103, 0, 0, 66, -72, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, -109, 69, -47, 66, -60, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -112, -52, -51, 66, -68, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, -107, -114, 57, 66, -64, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -109, 69, -47, 66, -70, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, -111, 85, 85, 66, -60, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -103, 0, 0, 66, -70, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, -119, -57, 28, 66, -76, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -107, -57, 28, 66, -64, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -104, -52, -51, 66, -62, 0, 0, 66, 92, 0, 0, 0, 0, 0, 0, 66, -108, 0, 0, 66, -58, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -104, -24, -70, 66, -58, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -105, 0, 0, 66, -76, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, 118, -52, -51, 66, -62, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -98, -103, -102, 66, -58, 0, 0, 66, 104, 0, 0, 0, 0, 0, 0, 66, -119, -86, -85, 66, -78, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -96, 0, 0, 66, -66, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, -120, -52, -51, 66, -60, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -105, 69, -47, 66, -60, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -104, -117, -93, 66, -62, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -106, 0, 0, 66, -72, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, -99, -103, -102, 66, -62, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -101, 51, 51, 66, -68, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, -116, -52, -51, 66, -64, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -114, 0, 0, 66, -60, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -114, 93, 23, 66, -62, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -109, -47, 116, 66, -58, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -121, 0, 0, 66, -68, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -113, -52, -51, 66, -64, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, -104, 0, 0, 66, -72, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -105, 69, -47, 66, -68, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -96, 113, -57, 66, -62, 0, 0, 66, 112, 0, 0, 0, 0, 0, 0, 66, -122, -52, -51, 66, -68, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -113, 51, 51, 66, -62, 0, 0, 66, 92, 0, 0, 0, 0, 0, 0, 66, -103, 102, 102, 66, -66, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -114, 102, 102, 66, -94, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, 126, -86, -85, 66, -96, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -79, 23, 70, 66, -58, 0, 0, 66, -128, 0, 0, 0, 0, 0, 0, 66, -122, 46, -116, 66, -84, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, -120, 0, 0, 66, -62, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -105, 102, 102, 66, -60, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -111, -52, -51, 66, -68, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -84, -86, -85, 66, -62, 0, 0, 66, -126, 0, 0, 0, 0, 0, 0, 66, -115, 42, -85, 66, -80, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -125, 102, 102, 66, -90, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -117, -103, -102, 66, -62, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -113, -52, -51, 66, -62, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -124, 113, -57, 66, -70, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -110, 46, -116, 66, -58, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -94, 102, 102, 66, -60, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -98, 0, 0, 66, -66, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -118, -103, -102, 66, -84, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -115, -52, -51, 66, -72, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -120, -64, 0, 66, -60, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -104, -86, -85, 66, -58, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, -124, 56, -28, 66, -86, 0, 0, 66, 92, 0, 0, 0, 0, 0, 0, 66, -118, 0, 0, 66, -76, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -118, -52, -51, 66, -84, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -108, 102, 102, 66, -70, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -105, 116, 93, 66, -68, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -121, 28, 114, 66, -70, 0, 0, 66, 100, 0, 0, 0, 0, 0, 0, 66, -105, -94, -23, 66, -60, 0, 0, 66, 92, 0, 0, 0, 0, 0, 0, 66, -109, -47, 116, 66, -70, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -108, -43, 85, 66, -62, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -115, 116, 93, 66, -58, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -112, 0, 0, 66, -64, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -98, -103, -102, 66, -56, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -103, 0, 0, 66, -58, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -98, 102, 102, 66, -60, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, -115, -64, 0, 66, -58, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -108, 102, 102, 66, -60, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, 125, 51, 51, 66, -86, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -116, -117, -93, 66, -68, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -109, -57, 28, 66, -70, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -124, 56, -28, 66, -78, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -120, 113, -57, 66, -58, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -125, 23, 70, 66, -76, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -123, -57, 28, 66, -80, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -117, 102, 102, 66, -60, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -116, -86, -85, 66, -82, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -108, -117, -93, 66, -58, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -106, 0, 0, 66, -58, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, 117, 85, 85, 66, -92, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -102, -24, -70, 66, -68, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, -121, 116, 93, 66, -92, 0, 0, 66, 100, 0, 0, 0, 0, 0, 0, 66, -122, -70, 47, 66, -74, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -123, 28, 114, 66, -76, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -115, -57, 28, 66, -58, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -116, 93, 23, 66, -62, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -114, -43, 85, 66, -58, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -108, 56, -28, 66, -62, 0, 0, 66, 92, 0, 0, 0, 0, 0, 0, 66, -118, 56, -28, 66, -84, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -106, -86, -85, 66, -72, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -116, -117, -93, 66, -74, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -89, 0, 0, 66, -62, 0, 0, 66, -126, 0, 0, 0, 0, 0, 0, 66, 123, -128, 0, 66, -84, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -109, -52, -51, 66, -58, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -108, 0, 0, 66, -64, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -93, 28, 114, 66, -66, 0, 0, 66, -116, 0, 0, 0, 0, 0, 0, 66, -118, -117, -93, 66, -82, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -102, 42, -85, 66, -58, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, -116, 0, 0, 66, -64, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -122, -52, -51, 66, -60, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -109, 69, -47, 66, -64, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, -92, 0, 0, 66, -58, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -110, 0, 0, 66, -66, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -115, 102, 102, 66, -70, 0, 0, 66, 104, 0, 0, 0, 0, 0, 0, 66, -119, 102, 102, 66, -88, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -110, -52, -51, 66, -76, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -108, 113, -57, 66, -58, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -99, -52, -51, 66, -66, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -98, -117, -93, 66, -58, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -110, 56, -28, 66, -68, 0, 0, 66, 92, 0, 0, 0, 0, 0, 0, 66, -103, 51, 51, 66, -58, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, -117, 85, 85, 66, -90, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -121, -52, -51, 66, -64, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, -110, -103, -102, 66, -66, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -106, 56, -28, 66, -72, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, -107, 51, 51, 66, -64, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -107, 116, 93, 66, -58, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, -110, 46, -116, 66, -64, 0, 0, 66, 80, 0, 0, 0, 0, 0, 0, 66, -102, -117, -93, 66, -56, 0, 0, 66, 100, 0, 0, 0, 0, 0, 0, 66, 124, 0, 0, 66, -70, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -127, 51, 51, 66, -90, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -126, 102, 102, 66, -84, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -98, 0, 0, 66, -68, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, -107, -47, 116, 66, -60, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, -99, 116, 93, 66, -62, 0, 0, 66, 104, 0, 0, 0, 0, 0, 0, 66, -98, -117, -93, 66, -62, 0, 0, 66, 116, 0, 0, 0, 0, 0, 0, 66, -117, 23, 70, 66, -80, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -110, 51, 51, 66, -72, 0, 0, 66, 100, 0, 0, 0, 0, 0, 0, 66, -112, 102, 102, 66, -68, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -115, -103, -102, 66, -64, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, -103, -114, 57, 66, -68, 0, 0, 66, 124, 0, 0, 0, 0, 0, 0, 66, -102, 0, 0, 66, -62, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, -112, -128, 0, 66, -62, 0, 0, 66, 108, 0, 0, 0, 0, 0, 0, 66, -104, -52, -51, 66, -62, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -92, -128, 0, 66, -58, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, -105, 102, 102, 66, -68, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, -113, -57, 28, 66, -64, 0, 0, 66, 96, 0, 0, 0, 0, 0, 0, 66, -122, 102, 102, 66, -78, 0, 0, 66, 68, 0, 0, 0, 0, 0, 0, 66, -118, 0, 0, 66, -64, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -105, 116, 93, 66, -70, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -94, 51, 51, 66, -60, 0, 0, 66, 88, 0, 0, 0, 0, 0, 0, 66, -111, -64, 0, 66, -72, 0, 0, 66, 84, 0, 0, 0, 0, 0, 0, 66, -128, -103, -102, 66, -88, 0, 0, 66, 72, 0, 0, 0, 0, 0, 0, 66, -87, -52, -51, 66, -62, 0, 0, 66, 92, 0, 0, 0, 0, 0, 0, 66, -112, 56, -28, 66, -72, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -116, -70, 47, 66, -88, 0, 0, 66, 76, 0, 0, 0, 0, 0, 0, 66, -85, 85, 85, 66, -64, 0, 0, 66, -126, 0, 0, 0, 0, 0, 0, 66, -105, -64, 0, 66, -62, 0, 0, 66, 84, 0, 0 ], "compressed": true, "refCount": [ 4, 22, 505, 488645087, 627314938, 582700772, 399780962, 393065644, 493329789, 348405217, 399993616, 204415313, 496738328, 681754803, 538579750, 504435967, 497026482, 498871798, 592916307, 452127812, 511204333, 403138722, 491772828, 550815193, 452278665, 733388952, 508324222, 528467679, 449961106, 350404130, 449138598, 466853076, 362626119, 439225686, 248861557, 429062015, 624839501, 362886465, 719423305, 219046244, 263992202, 628055381, 499098559, 482781665, 504168810, 501925309, 630311957, 533598347, 556015254, 602409978, 499090983, 578059376, 345154108, 350733058, 588319029, 452650544, 461820581, 501176100, 452560325, 254595844, 533593920, 407318270, 412155743, 503627008, 454598108, 496752770, 449959602, 538428890, 455440652, 461942735, 452528503, 305537155, 360787231, 536178278, 456428308, 10 ], "directLocationMap": false, "locationList": [ 0, 2016, 505, 8068, 24212, 40356, 56500, 72644, 88788, 104932, 121076, 137220, 153364, 169508, 185652, 201796, 217940, 234084, 250228, 266372, 282516, 298660, 314804, 330948, 347092, 363236, 379380, 395524, 411668, 427812, 443956, 460100, 476244, 492388, 508532, 524676, 540820, 556964, 573108, 589252, 605396, 621540, 637684, 653828, 669972, 686116, 702260, 718404, 734548, 750692, 766836, 782980, 799124, 815268, 831412, 847556, 863700, 879844, 895988, 912132, 928276, 944420, 960564, 976708, 992852, 1008996, 1025140, 1041284, 1057428, 1073572, 1089716, 1105860, 1122004, 1138148, 1154292, 1170436, 1186580, 1202724, 1218868, 1235012, 1251156, 1267300, 1283444, 1299588, 1315732, 1331876, 1348020, 1364164, 1380308, 1396452, 1412596, 1428740, 1444884, 1461028, 1477172, 1493316, 1509460, 1525604, 1541748, 1557892, 1574036, 1590180, 1606324, 1622468, 1638612, 1654756, 1670900, 1687044, 1703188, 1719332, 1735476, 1751620, 1767764, 1783908, 1800052, 1816196, 1832340, 1848484, 1864628, 1880772, 1896916, 1913060, 1929204, 1945348, 1961492, 1977636, 1993780, 2009924, 2026068, 2042212, 2058356, 2074500, 2090644, 2106788, 2122932, 2139076, 2155220, 2171364, 2187508, 2203652, 2219796, 2235940, 2252084, 2268228, 2284372, 2300516, 2316660, 2332804, 2348948, 2365092, 2381236, 2397380, 2413524, 2429668, 2445812, 2461956, 2478100, 2494244, 2510388, 2526532, 2542676, 2558820, 2574964, 2591108, 2607252, 2623396, 2639540, 2655684, 2671828, 2687972, 2704116, 2720260, 2736404, 2752548, 2768692, 2784836, 2800980, 2817124, 2833268, 2849412, 2865556, 2881700, 2897844, 2913988, 2930132, 2946276, 2962420, 2978564, 2994708, 3010852, 3026996, 3043140, 3059284, 3075428, 3091572, 3107716, 3123860, 3140004, 3156148, 3172292, 3188436, 3204580, 3220724, 3236868, 3253012, 3269156, 3285300, 3301444, 3317588, 3333732, 3349876, 3366020, 3382164, 3398308, 3414452, 3430596, 3446740, 3462884, 3479028, 3495172, 3511316, 3527460, 3543604, 3559748, 3575892, 3592036, 3608180, 3624324, 3640468, 3656612, 3672756, 3688900, 3705044, 3721188, 3737332, 3753476, 3769620, 3785764, 3801908, 3818052, 3834196, 3850340, 3866484, 3882628, 3898772, 3914916, 3931060, 3947204, 3963348, 3979492, 3995636, 4011780, 4027924, 4044068, 4060212, 2016 ], "reverseAvailable": false, "internalShinglingEnabled": false, "lastTimeStamp": 505, "rotationEnabled": false, "dynamicResizingEnabled": true, "currentStoreCapacity": 512, "indexCapacity": 512 }, "compactSamplerStates": [ { "version": "2.0", "weight": [ -0.56757265, -0.5781482, -0.5900879, -0.6161663, -0.74962693, -0.6151643, -0.61670864, -0.67350674, -0.62119406, -0.7689292, -0.7968979, -0.63657176, -0.6180514, -0.7882518, -0.663554, -0.94079185, -1.0720736, -0.6319752, -0.6278517, -0.8380472, -0.9604324, -0.8651731, -0.798815, -0.6567839, -0.6820692, -0.9421621, -0.88186073, -0.7905466, -0.8823367, -0.8736085, -0.85339946, -0.9529896, -1.5253699, -1.1973315, -1.3102506, -0.7358565, -0.8139095, -0.7017528, -1.0430143, -1.0908111, -0.89280295, -1.3095568, -0.98362166, -0.8744968, -0.96791035, -1.2037274, -1.0653238, -0.7173222, -0.696716, -0.9508131, -0.7733483, -1.1465819, -1.3489482, -1.1664346, -1.076245, -0.8089149, -1.9500605, -1.164026, -2.239261, -1.3196678, -1.0025091, -1.0488088, -1.221525, -2.491666, -1.0704556, -1.9203418, -1.6465822, -1.5930494, -2.1173043, -1.454771, -2.3791387, -1.2175801, -1.4976561, -0.97529536, -0.9776957, -0.7076328, -1.9713205, -1.994005, -1.4144034, -1.7856992, -1.8549204, -1.3750582, -1.182027, -2.3264935, -3.4964423, -1.971149, -1.2945454, -1.548858, -1.2041738, -1.468671, -1.4650595, -2.2554448, -1.3044451, -1.1853373, -1.730136, -1.241813, -1.1292748, -0.71116483, -0.79887444, -1.2845273, -1.105379, -1.2366987, -0.92921096, -1.1657026, -2.6717122, -1.7439715, -1.9934863, -1.2263087, -1.7673148, -2.3491075, -1.0961275, -0.89520067, -1.0248098, -4.909743, -4.153232, -2.1522255, -1.7650629, -2.4412453, -2.7482073, -3.0675554, -3.1178305, -1.8242788, -1.892877, -3.210243, -1.9061444, -1.2413985, -1.2598059, -4.203074, -2.7223814, -2.2999434, -1.3408724, -7.0299697, -4.8111978, -3.3258471, -2.0125356, -3.1982787, -2.8312833, -2.5334399, -2.3389008, -2.9442873, -1.8930559, -2.3911982, -2.5047672, -4.4145966, -1.2764541, -3.9048793, -3.238948, -1.5198247, -1.2750254, -1.8376037, -3.6638694, -1.5739453, -1.1896442, -2.0554008, -3.439994, -3.6345048, -4.235151, -4.323954, -1.6634188, -3.0570233, -2.0862427, -3.161959, -3.9133036, -2.0392869, -3.2230003, -1.7840478, -1.9822911, -2.66759, -2.8719387, -4.63498, -3.9776332, -2.2720344, -3.0024054, -3.007087, -1.3444325, -5.0787582, -2.1520054, -1.8487936, -1.926888, -2.18643, -4.2005286, -1.6425658, -1.5144346, -5.0267115, -2.5702274, -2.866389, -2.01247, -1.2021661, -3.4260905, -1.7879579, -3.3959882, -4.2575583, -2.2555158, -2.5958145, -3.0608132, -1.8771381, -0.9143291, -1.0414093, -1.7113725, -1.3806139, -1.5017926, -1.4232012, -2.1246378, -1.4538587, -1.328111, -2.9455528, -1.5375834, -2.6173167, -1.3469445, -2.9239001, -3.6207416, -2.3897822, -4.7668986, -2.2512138, -3.4965847, -2.324559, -1.2498051, -2.5054939, -2.3657448, -4.1115704, -2.3869483, -2.610965, -6.1069016, -4.5214825, -2.4539022, -1.4635035 ], "pointIndex": [ 4, 504, 226, 35529227, 112927561, 49466190, 87494404, 14543996, 46779260, 60007490, 107327202, 98951852, 22404378, 16035566, 95163157, 53840153, 109554390, 71544057, 80474669, 91089142, 113143202, 13047000, 38971917, 119024767, 816686, 43233034, 17622851, 2195915, 19686486, 78660725, 110063416, 98516391, 23698955, 75550084, 26028907, 84501483, 88406807, 95864199, 104978001, 115947880, 30120112, 8535367, 33647170, 12618829, 37229842, 6852326, 42331373, 50854248, 43799784, 24507333, 3305776, 74196777, 89702118, 22617836, 26248412, 111735732, 20711699, 57937369, 125458152, 9661186, 67170512, 66812728, 10178588, 23985659, 121632067, 111096052, 1915242, 81124642, 109101203, 116266930, 226297, 89366943, 94814190, 2307544, 100343308, 106639341, 121462560, 119722949, 402 ], "storeSequenceIndicesEnabled": false, "size": 226, "capacity": 256, "initialAcceptFraction": 0.125, "timeDecay": 1.0E-4, "sequenceIndexOfMostRecentTimeDecayUpdate": 0, "maxSequenceIndex": 504, "compressed": true, "randomSeed": 6231208282143323767 }, { "version": "2.0", "weight": [ -0.6413124, -0.6741439, -0.6560893, -0.6797705, -0.74844384, -0.66546565, -0.67169714, -0.7227025, -0.68723875, -0.7745091, -0.76826525, -0.6939699, -0.7236429, -0.77351135, -0.67195445, -0.80146384, -0.82743365, -0.7136329, -0.7724732, -0.9194121, -0.79330975, -0.88315845, -0.81832063, -0.7143264, -0.94557303, -0.785616, -0.8377497, -0.7925366, -1.0203317, -0.9742233, -0.80757946, -0.9707234, -0.90228313, -0.8993705, -1.5087696, -1.0732617, -0.8467861, -0.8320001, -1.2694417, -0.9735975, -1.0536188, -0.8474321, -0.9971086, -0.9269841, -0.92866796, -1.0152696, -0.9399167, -0.84670246, -0.7283, -1.119393, -1.1513233, -0.9878237, -1.0573844, -0.9405707, -0.9608169, -0.93561846, -2.0413952, -1.3069793, -1.4010427, -1.0850079, -1.1713014, -0.8807193, -1.6299798, -1.897046, -1.1469332, -1.4496559, -1.254596, -1.1360562, -1.3226919, -2.6269495, -1.5345647, -1.209115, -1.4497056, -0.9226162, -1.5420644, -1.4579161, -1.810374, -1.7850882, -1.4213358, -2.0186284, -1.1599022, -1.2460217, -1.8482556, -1.623476, -1.0834888, -1.0720153, -1.5517547, -1.0411204, -1.9863597, -1.015509, -1.0393355, -1.1298063, -1.161867, -1.8876396, -1.513813, -1.0615944, -1.0518087, -1.0012404, -0.96941787, -1.4972963, -1.5582548, -1.3225719, -1.9551991, -1.137049, -1.1723896, -1.282302, -1.3758812, -0.9793669, -1.1025751, -1.0587844, -1.3776231, -0.9507962, -3.5233085, -2.147424, -3.5976098, -3.1932046, -1.3534847, -2.8176162, -2.3236613, -2.8634186, -1.4690521, -1.3486727, -1.8834981, -3.77391, -1.4108094, -2.0396273, -1.6383679, -3.9983404, -2.399237, -1.210579, -1.3090019, -1.5072656, -2.0974455, -4.0409245, -2.2359335, -1.7645096, -2.3572674, -1.6028525, -1.357799, -3.522606, -3.2044213, -1.55917, -2.6649456, -1.7507952, -1.51323, -4.9820375, -1.7488083, -1.6731998, -3.0470006, -1.6102738, -3.8390405, -2.1085012, -1.6249218, -2.0381305, -3.8072212, -1.9960753, -5.4924846, -2.476714, -2.6750987, -2.3795562, -2.590261, -1.3741866, -1.1860225, -2.5269265, -1.8842105, -5.061702, -2.7306504, -1.7086381, -2.189826, -2.2177384, -2.156229, -1.7054623, -1.239881, -2.8083131, -4.8517027, -1.7392544, -1.1228195, -3.4175887, -2.3523648, -1.8688406, -1.4306833, -1.4683838, -1.6348096, -1.8269991, -2.3902066, -2.7796946, -4.2938395, -3.7553287, -2.3795054, -1.584336, -2.9925914, -2.4059489, -1.5080501, -2.1570578, -1.4014544, -1.555314, -1.0247319, -2.5908108, -1.0894471, -2.9602163, -2.5347006, -1.7199854, -2.3623478, -2.3948119, -2.9381523, -4.0739775, -3.5914814, -2.88282, -4.8593273, -2.0374897, -3.0119255, -3.012831, -3.3967464, -3.4023802, -2.5469584, -1.0278263, -1.0037334, -4.807614, -1.4685438, -1.847896, -1.6382484, -2.4243822, -1.3925955, -2.429869, -1.9127114 ], "pointIndex": [ 2, 504, 225, 111671647, 118198531, 47366142, 82611799, 15422422, 18950857, 62711760, 5746078, 103679816, 89022947, 43163095, 91680981, 74392388, 35584963, 10637222, 73258702, 93278378, 19939543, 33895632, 119743310, 7157833, 16779238, 87639544, 116476223, 72966754, 106712, 58701826, 4475707, 23909850, 66472368, 68701516, 27495848, 79357249, 91508298, 104685242, 14140464, 79803883, 14234893, 93429684, 15144965, 37198795, 92147146, 100692200, 41931150, 51576948, 20643713, 76949619, 1748312, 32986811, 19136205, 77524577, 28191894, 57981206, 21495427, 89797535, 94962464, 63377850, 75190544, 27960305, 116953797, 89193273, 25578096, 29811451, 72161665, 73395529, 82882943, 125153256, 90067599, 96460508, 108002029, 100994745, 2733205, 112295199, 118907112, 127013007 ], "storeSequenceIndicesEnabled": false, "size": 225, "capacity": 256, "initialAcceptFraction": 0.125, "timeDecay": 1.0E-4, "sequenceIndexOfMostRecentTimeDecayUpdate": 0, "maxSequenceIndex": 504, "compressed": true, "randomSeed": 6910102835766708129 }, { "version": "2.0", "weight": [ -0.6361297, -0.6427886, -0.64978087, -0.70756996, -0.66756016, -0.6652314, -0.67686117, -0.738501, -0.86563295, -0.8297991, -0.7050236, -0.69653434, -0.7010046, -0.8382546, -1.0409559, -0.74255246, -0.9452534, -0.8861673, -1.0988894, -0.86182266, -0.9004108, -0.8393799, -0.7601388, -0.8780445, -0.7044544, -0.74571294, -0.8152079, -1.0929025, -1.0292293, -1.3781352, -1.4376355, -1.3130229, -1.0308373, -0.9641338, -1.1163272, -0.89741856, -1.0924834, -1.4286077, -1.2312396, -1.0095732, -0.90361285, -0.96598524, -0.9863629, -0.87630546, -1.1279582, -1.368041, -0.8136685, -1.3092943, -0.9266263, -0.74128693, -0.8960323, -0.8825871, -0.79810524, -0.9010219, -0.97901225, -1.4633446, -1.5441315, -1.0377563, -1.0494223, -2.1532643, -1.5144418, -1.4966323, -1.640983, -1.9846714, -1.8514707, -1.2629799, -2.4018369, -1.8355949, -1.6449745, -1.356063, -1.2787979, -1.4097439, -1.1225487, -1.9527433, -1.655858, -2.0141113, -2.74355, -1.4586512, -1.5609925, -2.3343732, -1.0382442, -1.4256576, -1.0880938, -1.2506218, -2.26243, -1.0773342, -1.0644708, -0.9891659, -0.9573225, -2.5247407, -1.1891508, -1.4889679, -2.2274039, -1.5068356, -1.1923847, -1.7803392, -1.8480661, -1.2104905, -1.089501, -0.8458398, -0.7424034, -1.1034354, -0.95535153, -1.430842, -1.4128844, -1.2114067, -0.8276177, -0.92598075, -0.91475046, -1.0110403, -3.731133, -2.5332088, -1.8363091, -2.5755098, -1.9488442, -1.2307419, -1.0537357, -1.9857179, -2.2417715, -3.314498, -3.8412423, -2.8418424, -2.4061882, -1.7295107, -2.1518376, -1.7952791, -2.0380082, -4.090556, -2.7759373, -2.0462887, -2.7760093, -3.8271885, -3.2707825, -3.4327483, -2.5401921, -1.8877523, -3.4253228, -1.8831528, -1.8994313, -1.6148615, -5.4198527, -1.314268, -1.3719753, -2.688971, -2.585797, -2.2576668, -1.1549048, -5.106076, -1.954672, -6.7728157, -3.7644725, -3.1551533, -4.8891025, -4.727654, -4.586425, -1.7163793, -3.6443462, -1.732317, -2.1879315, -4.6237965, -2.814348, -1.2486494, -2.1599646, -1.7666686, -1.4898446, -1.3215132, -4.152714, -1.413151, -4.8497276, -2.790615, -3.3900342, -2.3118632, -1.1577141, -1.6863161, -3.1471484, -2.5949144, -1.1936404, -5.16345, -1.0650976, -3.213641, -2.6836355, -3.2522056, -1.2563653, -2.3604238, -2.864063, -2.9894278, -4.0283117, -1.9091228, -2.1098876, -1.6736158, -1.4758114, -1.9855922, -2.9283683, -3.017182, -2.0328176, -3.7195306, -1.5892555, -3.5429056, -2.7333112, -1.3380169, -0.9410527, -2.6401072, -0.9119615, -2.025092, -3.1671853, -1.0942268, -3.079749, -3.9915621, -2.765839, -1.9798393, -1.5078577, -3.4867995, -2.388034, -3.0964606, -2.8108213, -2.1528425, -1.8067331, -1.5127798, -1.1197842 ], "pointIndex": [ 1, 503, 219, 7019155, 86646336, 120179378, 91734547, 17320238, 96151162, 105435557, 36079528, 127178896, 60140693, 42538739, 83950375, 55457344, 12546722, 20888350, 81270008, 112022852, 32868989, 35156862, 98160653, 68597093, 7927708, 46520646, 1883114, 112105826, 124338430, 93506926, 63630244, 37324365, 72408637, 76885895, 80009297, 109326382, 101401805, 115582259, 123203273, 33876601, 4654804, 35893754, 37607557, 38489150, 103329392, 40243586, 17148944, 63002618, 8336288, 67760943, 50594140, 95952481, 52730153, 84864861, 28444654, 59823071, 67866944, 61754053, 10357866, 66015676, 67433952, 91270347, 109234443, 74395631, 81912440, 78081117, 122867865, 106319468, 91502132, 93797791, 102667445, 104529340, 109866779, 116915765, 124217325, 32637650 ], "storeSequenceIndicesEnabled": false, "size": 219, "capacity": 256, "initialAcceptFraction": 0.125, "timeDecay": 1.0E-4, "sequenceIndexOfMostRecentTimeDecayUpdate": 0, "maxSequenceIndex": 504, "compressed": true, "randomSeed": -8153191400930165074 }, { "version": "2.0", "weight": [ -0.48931122, -0.49723798, -0.49012178, -0.623267, -0.6048579, -0.5018685, -0.493251, -0.6810186, -0.62533385, -0.611521, -0.6176875, -0.5930478, -0.57753223, -0.52694714, -0.6676626, -0.7207007, -0.7123615, -0.6789895, -0.745815, -0.80155474, -0.8633884, -0.6581785, -0.6463497, -0.62930876, -0.6465614, -0.64662224, -0.63142097, -0.5293907, -1.0326748, -0.7933024, -1.0779095, -0.77808034, -1.0023601, -0.74175876, -0.9819902, -0.9997212, -0.953454, -0.9269736, -0.77646047, -0.88533807, -1.0808892, -0.911517, -1.1113745, -1.2881032, -0.6981712, -1.048881, -0.82391083, -0.7688017, -0.8863816, -0.67885447, -0.7831837, -0.73852074, -0.75421745, -0.6855453, -0.6836569, -1.1590838, -0.6129658, -1.337165, -1.1796199, -0.91301686, -1.7960355, -1.1085035, -2.0368264, -1.0979167, -1.5597198, -2.3726456, -1.6531286, -0.7789359, -0.9969333, -1.3209299, -1.2398386, -1.0943171, -1.8565011, -1.2082129, -2.0254157, -1.1507211, -1.0858723, -0.9761007, -1.6726984, -1.3714278, -1.1769344, -1.2964422, -1.3787014, -1.0774325, -1.2595168, -1.5023205, -1.7526349, -2.0585146, -1.3601263, -1.2020801, -0.76575804, -2.5528324, -1.1102475, -0.977003, -0.85832506, -1.0666026, -0.96740466, -1.0918508, -2.1194818, -0.7036158, -1.0782622, -1.2990319, -1.7673608, -1.3664817, -1.101482, -0.86120254, -1.0904459, -0.82473683, -1.0382458, -0.7014238, -1.1469412, -1.5819608, -2.0776114, -0.8331923, -0.74183834, -2.0028663, -1.5265291, -2.3708613, -1.6433748, -2.1847932, -2.2085743, -3.0770442, -4.579025, -1.9978226, -2.0566041, -3.6105764, -3.1895306, -1.7005802, -1.2436558, -1.7310462, -3.3567033, -2.6761308, -2.8754559, -2.2890341, -2.090929, -1.3141505, -1.9325581, -4.143366, -1.8410652, -1.6836159, -1.4787452, -1.5515575, -1.5433555, -3.4945877, -2.9452395, -2.9747286, -3.8249507, -4.712332, -2.8805053, -2.1511056, -2.2605977, -1.9543904, -1.7370383, -2.8557973, -2.027881, -1.4113812, -1.6777797, -3.6317258, -2.9565845, -1.5805341, -2.0916042, -1.8768723, -1.4425573, -1.6574762, -5.694653, -2.0396917, -1.9360616, -2.9818797, -1.3613492, -1.7539183, -5.2183347, -5.3925138, -3.69513, -7.285011, -2.0467029, -4.6431193, -3.5842743, -2.338261, -1.6631751, -2.7470868, -1.5942484, -1.2338036, -1.5301003, -3.2176993, -2.6857648, -1.5410172, -2.2258418, -1.2013426, -1.2898548, -4.8211923, -5.0544915, -1.8151265, -1.3625166, -3.4235814, -2.0515249, -1.1709322, -1.9283103, -2.2851682, -2.3307283, -2.4420938, -1.9790992, -1.7172705, -2.305028, -1.4039015, -2.8155386, -3.0897534, -3.5799522, -2.252491, -1.934329, -6.9373517, -2.9747658, -2.2050023, -0.9547009, -2.517102, -1.4843043, -2.2253036, -1.3988092, -2.5037396, -3.1673834, -0.8072798, -1.4884133, -1.7703872, -2.2750254, -1.9589535, -2.5536778, -2.4836578, -3.569326, -1.6090255, -1.1384836, -0.7648988 ], "pointIndex": [ 2, 502, 230, 111339292, 85613591, 58324908, 87013905, 37649672, 8623547, 65372694, 68426884, 115159395, 23409781, 16687454, 114499214, 52593671, 62770336, 22136302, 11966504, 24715439, 102196100, 124284645, 63854009, 37351203, 11321662, 17604151, 59108384, 53958592, 53080528, 30732930, 84649389, 65556598, 70498491, 24491168, 68752529, 31292774, 92071582, 2570990, 13264593, 116182818, 117957071, 33697231, 3043710, 82913134, 19169290, 72793028, 39782858, 42751492, 96796374, 8120527, 41760334, 78600692, 49909194, 51222082, 65924290, 59617474, 21024187, 105381725, 60317624, 63447385, 45559957, 82210418, 11007062, 2150073, 73502844, 114103554, 25757433, 79620234, 124966752, 27534372, 56910093, 90668857, 94056352, 98591664, 101355199, 108140259, 68998662, 121992128, 120269931, 245471 ], "storeSequenceIndicesEnabled": false, "size": 230, "capacity": 256, "initialAcceptFraction": 0.125, "timeDecay": 1.0E-4, "sequenceIndexOfMostRecentTimeDecayUpdate": 0, "maxSequenceIndex": 504, "compressed": true, "randomSeed": 4045460986159022609 }, { "version": "2.0", "weight": [ -0.4681739, -0.48007405, -0.49789903, -0.5071157, -0.5392349, -0.49877673, -0.5173413, -0.55151767, -0.56650174, -0.5500999, -0.5561777, -0.5550377, -0.5654364, -0.55124235, -0.6208702, -0.59977484, -0.7121681, -0.5872569, -0.57015973, -0.60092586, -0.5919172, -0.57651204, -0.599501, -0.84314567, -0.71985126, -0.61190027, -0.607676, -0.61616707, -0.87906057, -0.88150966, -1.2262063, -0.6288519, -0.90566653, -0.74081695, -0.78718567, -0.6843046, -0.5967524, -0.97782314, -0.9634063, -1.1774516, -0.6383265, -1.3105494, -0.61028373, -0.71040356, -0.9213385, -0.8167878, -0.65758455, -0.8537457, -1.0144536, -1.1103842, -0.73576075, -0.65716136, -0.7518719, -0.65931726, -0.6404282, -0.6632596, -1.0990821, -1.1170622, -1.5678968, -1.3625112, -1.085547, -1.5416995, -1.5436345, -0.9560163, -1.1595485, -1.1146106, -0.9999493, -0.9884563, -1.445272, -1.1867231, -0.94520855, -1.1810359, -1.6496556, -1.3205277, -0.87346005, -1.2355236, -1.2484058, -1.0776839, -1.8207626, -2.0081627, -2.1486614, -1.8236513, -1.2014854, -1.3567494, -1.7071117, -1.3450822, -1.1705921, -1.4246175, -1.3039186, -1.0957643, -0.9249299, -1.356931, -0.8482996, -0.675301, -0.84562135, -1.1149482, -1.6455381, -1.2188505, -1.4722234, -1.828188, -1.5412449, -0.8473445, -0.92642033, -0.8599541, -1.0990387, -0.83823735, -1.4376352, -0.8778756, -0.66725403, -1.1006153, -0.7513238, -0.7345586, -0.66469234, -1.3874843, -2.4865832, -2.9973478, -2.306394, -2.673725, -3.3250866, -2.1260333, -2.1913078, -1.8699329, -1.7517766, -1.6185035, -1.6238472, -2.273655, -5.387515, -4.84232, -3.1442783, -3.4106052, -1.8919024, -1.4764744, -1.1394618, -4.4950013, -1.0300931, -4.261308, -1.3040004, -1.6697409, -2.3310206, -1.9800646, -2.5040128, -0.9702708, -1.6211085, -2.4045038, -2.6541598, -1.83864, -3.9018402, -1.9505028, -3.0774148, -1.2140405, -1.0377613, -2.676499, -2.0348115, -2.026429, -1.398141, -1.1595172, -2.031862, -1.9018892, -1.907572, -3.091949, -4.789639, -2.4214916, -2.600685, -3.3066297, -3.311136, -1.543751, -4.41873, -1.721474, -2.1571455, -2.8674223, -1.771004, -3.224615, -1.9476156, -2.4125326, -2.195531, -2.5996487, -1.4842075, -2.531535, -2.6502254, -1.8549097, -2.5735629, -1.4825006, -2.5768104, -2.2504616, -1.3600206, -2.5184896, -1.0576596, -3.8762393, -2.7213616, -0.9605226, -1.5147715, -2.870183, -1.8479155, -3.3377554, -1.9698049, -1.9063296, -1.5209743, -3.7611253, -1.6307871, -2.031272, -4.151252, -1.6233153, -1.9489214, -6.4323297, -1.1256434, -1.313254, -2.584117, -4.35672, -1.3673528, -1.216091, -2.888076, -1.3286314, -0.9383582, -3.279279, -4.4881206, -0.95496076, -1.2240533, -1.0146334, -2.168913, -1.5143352, -1.1024603, -2.4158843, -2.5341992, -1.4697461, -0.8430382, -1.953946, -1.1216923, -3.570344, -1.8596222 ], "pointIndex": [ 0, 503, 229, 97308902, 90546316, 60531530, 25415445, 20053538, 44909203, 59035730, 85880856, 114508858, 32430183, 38734551, 45130336, 24225300, 57518001, 88017364, 81431559, 95179440, 109730194, 30224840, 32023550, 34779612, 37411646, 59797001, 78525232, 93423098, 48613000, 20423406, 125847509, 78012884, 92848752, 90257220, 79655512, 87435428, 93908915, 116022841, 104712945, 111236741, 14469842, 38373353, 7382757, 45236435, 28703822, 117425585, 36904534, 29186408, 17099365, 20913138, 5216832, 125480067, 90774671, 4649981, 29814811, 21945113, 71558967, 54887893, 101510858, 88783696, 64133978, 64525352, 113952641, 115717676, 73090102, 74664864, 79148335, 84019128, 74340922, 86377870, 26855188, 96460424, 3240594, 98755278, 105951844, 110712086, 118850697, 123183109, 127513496, 503 ], "storeSequenceIndicesEnabled": false, "size": 229, "capacity": 256, "initialAcceptFraction": 0.125, "timeDecay": 1.0E-4, "sequenceIndexOfMostRecentTimeDecayUpdate": 0, "maxSequenceIndex": 504, "compressed": true, "randomSeed": -7062140655107411726 }, { "version": "2.0", "weight": [ -0.53298694, -0.5370285, -0.53302014, -0.5869225, -0.5386616, -0.53426373, -0.54588836, -0.6144738, -0.6666626, -0.55950403, -0.7248929, -0.5607794, -0.5471208, -0.57251537, -0.56006366, -0.6167674, -0.61541486, -0.817127, -0.6857935, -0.5771496, -0.6130053, -0.7751004, -0.80550486, -0.64279586, -0.67447525, -0.67872816, -0.5948092, -0.6225593, -0.7412373, -0.63900876, -0.6328384, -0.777648, -0.76546454, -0.74156725, -0.82844687, -0.8392029, -1.044082, -0.7329778, -0.99735993, -0.7560849, -0.7613802, -0.85758793, -0.62227815, -0.7803536, -0.88435996, -0.9483788, -0.8897424, -0.84419423, -0.76181144, -1.5871549, -0.9929117, -0.75543576, -0.7979167, -0.735058, -0.6214327, -0.7944632, -0.7902639, -0.83461565, -1.4979233, -0.7796874, -1.0374615, -0.8105296, -1.8733882, -0.8792849, -0.9162315, -1.1558676, -1.2506269, -1.1495136, -1.5213449, -2.2541447, -1.1921371, -1.3501981, -0.9838202, -1.0595492, -1.3465357, -0.9763687, -1.0712547, -1.4653171, -1.2853703, -2.0836577, -0.9410978, -0.96253556, -0.81756365, -1.3851339, -1.179112, -0.6709964, -0.76329947, -1.1769576, -1.4954052, -0.960525, -1.0389729, -1.2045083, -1.8349122, -1.461973, -1.300356, -0.95158595, -1.0056021, -2.020996, -1.2476102, -2.0049386, -1.8346143, -1.1478754, -1.8596087, -0.98516494, -0.99060625, -0.9482102, -0.8543665, -0.9581024, -0.94102937, -0.6761013, -0.95146936, -1.0973043, -0.88721204, -0.8015781, -1.2003738, -1.0721217, -0.8620344, -1.6259612, -3.8667881, -0.93236417, -0.8828107, -1.493874, -1.5099301, -2.5947087, -3.358613, -4.7279215, -2.1498632, -0.8850714, -0.9867246, -5.2405734, -1.5883927, -1.1818252, -1.1974761, -1.7496891, -4.0008407, -1.476634, -1.3821882, -1.875585, -1.6439567, -5.709731, -3.068541, -2.4429452, -1.776948, -2.922071, -1.7195975, -1.1998038, -1.2773302, -3.1672099, -1.4617462, -1.7898146, -3.2232401, -1.1349226, -1.3632929, -1.8463753, -4.629285, -1.6867559, -1.8657526, -1.5905323, -2.1952798, -3.075461, -2.5903156, -1.5011766, -1.6764424, -2.241862, -1.2524456, -2.0902004, -1.5791374, -1.4672202, -1.4199411, -1.2729433, -1.6486052, -1.5432082, -3.741604, -4.3343306, -3.1124523, -1.3878208, -1.808157, -2.4290116, -2.043054, -1.5419066, -1.6230438, -2.0333831, -1.5723906, -2.873767, -1.4621615, -2.5015512, -3.94249, -1.5258577, -1.8479875, -2.240764, -1.8996323, -1.2670697, -1.111706, -3.5020432, -2.166442, -2.0529845, -3.032947, -1.8734413, -1.9137822, -5.747706, -6.5535336, -1.8551661, -2.2223253, -3.246324, -2.2672668, -3.214827, -1.8734428, -1.175713, -1.2449504, -5.0981402, -1.1101719, -3.6191673, -1.1534905, -2.1083336, -0.95823085, -4.0686164, -1.2263622, -3.3285706, -1.6448618, -1.0919825, -2.5784686, -3.4817815, -1.2479918, -3.134906, -1.1962954, -1.6323433, -2.1114237, -0.8559951 ], "pointIndex": [ 0, 503, 228, 93009322, 32391791, 6112720, 29612775, 49771418, 18883514, 16121665, 86770664, 115266187, 34589577, 59516381, 18350350, 57759317, 39037044, 70805195, 26572791, 94168921, 109425411, 127831981, 15016203, 110821980, 85958860, 41693101, 72741503, 59203443, 116104014, 58329384, 62243579, 64305944, 121055088, 24881265, 111164926, 90454212, 93322042, 126810352, 106388250, 117830318, 126742863, 65345741, 3622619, 116568751, 73871814, 95430527, 114891825, 23449004, 108834772, 83860728, 850823, 61508947, 61397268, 103677019, 83368800, 70259113, 77359180, 66256039, 5203535, 64136609, 3428296, 127212426, 70500267, 8683920, 114219368, 78898989, 42583776, 84243156, 88572891, 1987234, 31681933, 53278978, 98360665, 117555367, 6829606, 109949533, 43916474, 120383937, 14474349 ], "storeSequenceIndicesEnabled": false, "size": 228, "capacity": 256, "initialAcceptFraction": 0.125, "timeDecay": 1.0E-4, "sequenceIndexOfMostRecentTimeDecayUpdate": 0, "maxSequenceIndex": 504, "compressed": true, "randomSeed": 8531256490203702939 }, { "version": "2.0", "weight": [ -0.5294597, -0.5576223, -0.5410471, -0.5649329, -0.58059883, -0.59872955, -0.59176224, -0.6084886, -0.7097818, -0.68805045, -0.585696, -0.6078537, -0.63380736, -0.59650224, -0.6027426, -0.61310583, -0.61372364, -0.7964455, -0.87056744, -0.7759881, -1.0372149, -0.65877354, -0.61011463, -0.72138506, -0.70972306, -0.66512847, -0.6612416, -0.5998607, -0.99996316, -0.9549136, -0.61410373, -0.8476963, -0.71036553, -1.085258, -0.96238244, -0.910108, -1.0033214, -1.1844999, -1.3858411, -0.8568252, -0.7952146, -1.0685524, -1.4095951, -0.66511136, -1.051108, -1.0629483, -0.8007286, -0.73972476, -0.78043693, -1.4360243, -0.74637586, -0.67966276, -0.74322665, -1.1533587, -0.8437019, -0.607716, -0.9872282, -1.437123, -1.2489737, -1.6970297, -1.6194949, -1.318194, -1.1215625, -1.0581961, -0.970132, -0.95887625, -0.8250626, -1.3179755, -1.2062294, -1.3604482, -0.9787357, -1.2869112, -1.631505, -1.0290068, -1.0062145, -1.8089368, -1.9163202, -1.7504554, -2.6891043, -0.92384803, -1.4413592, -1.8508644, -1.0570983, -1.1877431, -1.1719575, -1.9445239, -2.1189156, -1.4971766, -1.1050333, -1.5659459, -1.3083023, -1.3377016, -1.8765005, -1.0915056, -0.85164684, -0.8110967, -1.1261318, -0.7932666, -1.508754, -1.6883552, -1.631404, -1.2834219, -1.4985572, -0.74091995, -0.8910905, -0.76595217, -0.93938935, -1.5934051, -1.5612308, -1.3203666, -1.582214, -0.61047065, -0.9571381, -2.2664058, -4.521733, -1.4690771, -2.5001209, -1.6353573, -1.7051553, -4.229778, -2.168278, -2.514496, -2.2526808, -3.2943108, -2.1315482, -1.8274347, -4.216294, -1.5538868, -1.3124804, -1.8857366, -1.1115198, -3.7827122, -1.3951958, -2.5932121, -1.3097647, -1.6431139, -3.0072067, -2.1572142, -3.3944185, -2.2084262, -1.4533173, -1.2706913, -1.0741483, -1.6193907, -2.244457, -2.4748313, -2.0723145, -1.7034297, -1.3629124, -2.333396, -2.0661693, -3.5874333, -2.2120068, -2.2768779, -3.0420141, -1.7942852, -2.5977976, -3.8865256, -3.352928, -2.1355355, -0.93818676, -2.0091407, -2.7621565, -3.4339957, -2.5531046, -1.8565471, -1.6133701, -1.9098023, -3.2153764, -2.1790311, -2.8811343, -1.9575641, -2.8316908, -3.0212128, -2.1982098, -2.3480704, -1.7099223, -2.6372912, -1.7484987, -2.5965567, -2.7568269, -3.3684866, -1.8365451, -4.9798565, -2.7800128, -2.0807607, -4.2281303, -3.197505, -2.5512059, -4.6846085, -1.9073757, -5.087554, -1.0783356, -1.7837888, -3.4602354, -0.9112789, -1.9554101, -2.2751474, -2.8101778, -4.778091, -4.4575386, -2.9218266, -2.4827263, -2.644842, -1.5498966, -1.7656147, -1.668538, -1.9522663, -2.826835, -2.6780727, -0.95048386, -0.98014146, -2.483194, -3.975097, -1.8736228, -2.7426178, -1.6407981, -2.2753592, -2.0097847, -1.4792215, -1.7406603, -1.9646327, -2.2271302, -3.3145914, -1.0689687 ], "pointIndex": [ 0, 504, 225, 13403184, 111495485, 110075349, 95286179, 9082452, 105107231, 68503793, 92229860, 115741825, 7426527, 45483998, 54101854, 60557798, 69292652, 100886814, 28223841, 102230303, 35674633, 37336130, 3777454, 42419097, 45683484, 50447787, 51025294, 26013912, 101107105, 22461981, 30742553, 77687452, 78700000, 61768436, 35877561, 92404425, 98119292, 111182215, 227696, 3552227, 100345500, 38328637, 107160848, 41221529, 109380134, 52167691, 97181098, 51851055, 21633223, 125705045, 41500469, 53916530, 56440578, 33704439, 36584834, 19904467, 23136818, 86675926, 23851670, 71295809, 74103306, 75498188, 96884548, 6794077, 84836487, 89715102, 71070215, 91733595, 53489144, 29386823, 106303479, 20601240, 110642482, 33376894, 116785738, 2786544, 122652855, 128784580 ], "storeSequenceIndicesEnabled": false, "size": 225, "capacity": 256, "initialAcceptFraction": 0.125, "timeDecay": 1.0E-4, "sequenceIndexOfMostRecentTimeDecayUpdate": 0, "maxSequenceIndex": 504, "compressed": true, "randomSeed": 86567694310489782 }, { "version": "2.0", "weight": [ -0.548254, -0.5607937, -0.57866526, -0.5624324, -0.5818964, -0.6089347, -0.6727932, -0.562878, -0.5639682, -0.6208581, -0.59887177, -0.72257894, -0.620159, -0.68043953, -0.7551201, -0.73569727, -0.6401625, -0.84797335, -0.6484228, -0.6759319, -0.8306258, -0.6635486, -0.64221096, -0.7404873, -0.7288819, -0.62848085, -0.76633126, -0.7984979, -0.9023936, -1.33871, -1.1491896, -0.7609833, -0.9475599, -0.7572917, -1.2838012, -1.1049031, -1.1746876, -0.6899676, -0.88186604, -0.8181633, -0.680215, -0.8640347, -1.1342883, -0.7576444, -0.8179945, -0.6939694, -0.8686436, -0.8221472, -0.84974766, -0.73687667, -1.1154488, -0.7298011, -0.76152563, -1.2177804, -0.9150309, -0.96158725, -0.8462979, -1.1513401, -0.9344139, -1.6353195, -1.3437028, -1.4996282, -1.3432597, -2.301112, -0.8197572, -1.2027588, -1.1205764, -0.87856936, -1.5738864, -2.232956, -3.8641906, -1.4949442, -1.4932362, -1.2822062, -1.7245877, -0.9485146, -1.4527066, -0.93614507, -1.469078, -0.85976386, -1.3209335, -0.7144693, -0.68033046, -0.9082166, -1.9164375, -1.7172593, -1.4276229, -1.3900268, -1.3021207, -2.0078642, -1.8958111, -0.9743969, -1.3751584, -1.2233984, -1.2176247, -0.9189738, -0.91843736, -0.9539633, -0.8822781, -1.2415289, -1.7231786, -1.578393, -1.3576747, -1.1325957, -1.0613661, -1.2737293, -1.2220944, -1.7856517, -1.8723731, -1.3435957, -1.2633096, -1.1389157, -1.1266003, -0.8861719, -0.85776955, -1.6702726, -4.3272867, -1.3503591, -1.742206, -2.5929413, -2.5635533, -1.3737376, -1.3955579, -1.5927967, -4.3128505, -4.2600355, -2.501178, -3.3870676, -3.9008584, -4.1824965, -3.6452065, -1.3949506, -1.9210273, -1.967188, -1.536652, -3.3252275, -2.2511718, -1.9874296, -1.7335365, -2.4373407, -2.9089544, -3.9528072, -4.4839187, -1.9656321, -1.8781765, -3.0906434, -5.065713, -4.014744, -3.8616838, -1.7609141, -2.0917294, -1.860987, -2.1770885, -3.6821332, -3.2795827, -1.9278725, -2.6800344, -5.78242, -1.4867266, -3.017378, -1.3494822, -2.7585256, -1.5266467, -7.224387, -1.0098683, -1.9480876, -1.9703789, -3.3225334, -1.389721, -1.9282464, -2.6578705, -2.8685904, -2.8504508, -6.6986213, -1.6179367, -1.5962142, -1.4038852, -1.6786649, -2.472646, -3.1394675, -2.1794803, -2.0659873, -3.158665, -3.1141348, -2.071478, -4.5385494, -3.6139581, -1.9906989, -3.6913047, -3.636456, -1.5532333, -5.768992, -4.82517, -1.4060777, -2.8837552, -2.9799287, -1.0938119, -1.9560072, -1.0404767, -1.7204325, -2.9698248, -3.0281875, -2.0829344, -2.106153, -1.9701356, -3.1649125, -5.150452, -1.2197741, -2.5101361, -2.1056838, -2.6430736, -2.108021, -4.4657874, -3.626636, -1.2784696, -2.9364944, -1.8963417, -2.7525795, -3.784847, -2.3326762, -4.461001, -1.4812615, -1.3003786, -1.3552235, -1.7875011, -3.5720217, -1.2042733, -1.1229393, -2.3410068, -1.7073672, -1.6788995, -3.0060105 ], "pointIndex": [ 1, 499, 232, 35644102, 95620906, 18805749, 81317621, 34604771, 47007327, 62586261, 93525848, 105772867, 1836297, 36431055, 52379127, 52079831, 61376238, 85044418, 41659805, 90062343, 31183374, 117254947, 107884975, 30201518, 39283927, 70478305, 27333242, 49959075, 52821453, 57541686, 61873590, 66612382, 45591007, 26443451, 49454191, 82171151, 99534729, 96420884, 101045942, 30411828, 59671855, 37696441, 3305404, 35179351, 67193486, 79432577, 115617457, 55276385, 21088404, 113881020, 8555817, 47485812, 75662933, 9315052, 74555298, 57313488, 114520082, 59780069, 10015857, 112869350, 82799122, 116286262, 106461743, 112690456, 55923115, 104375627, 76843016, 80456232, 111216669, 84333327, 88958071, 90820851, 94593823, 98821972, 16298556, 103044415, 104144207, 111522983, 116762199, 123031926, 498 ], "storeSequenceIndicesEnabled": false, "size": 232, "capacity": 256, "initialAcceptFraction": 0.125, "timeDecay": 1.0E-4, "sequenceIndexOfMostRecentTimeDecayUpdate": 0, "maxSequenceIndex": 504, "compressed": true, "randomSeed": 6252646384454912542 }, { "version": "2.0", "weight": [ -0.48593023, -0.49811634, -0.5051228, -0.52852297, -0.4998905, -0.50856495, -0.56792754, -0.58318883, -0.5442299, -0.57571816, -0.5104713, -0.5443268, -0.5515343, -0.60608447, -0.6757374, -0.6830418, -0.6755409, -0.59016246, -0.5454576, -0.7096835, -0.61583054, -0.5266673, -0.51681995, -0.56019515, -0.5993234, -0.6495098, -0.6438212, -0.61164343, -0.65656334, -0.72602475, -0.8520472, -0.8298695, -0.68893903, -0.80443794, -0.8151453, -0.6248744, -0.7932084, -0.5832469, -0.59996295, -0.7268257, -0.8978948, -0.628976, -0.703311, -0.9101348, -0.7230928, -0.7509946, -0.81770027, -1.0394619, -0.5726214, -0.9880306, -0.7951019, -0.8072624, -0.8245114, -0.7996366, -0.64646524, -0.6428294, -0.62054175, -0.7876593, -0.95186293, -1.3845879, -1.0309538, -1.4924188, -0.8735874, -0.9024334, -1.887193, -0.73925686, -0.7173001, -0.89899385, -1.2966541, -2.1132953, -2.0209932, -0.92569464, -0.66766036, -1.3062632, -1.2196876, -1.1793561, -0.70380116, -2.359043, -1.2396822, -1.0203435, -0.9604665, -1.758841, -1.2739277, -0.69405615, -1.3159864, -0.9570915, -1.4841802, -1.0174404, -1.4231768, -0.9732836, -0.95332456, -0.87739766, -1.1183963, -1.3045577, -2.6690967, -1.071694, -1.3986906, -0.6189145, -0.8985403, -1.2814728, -1.7861696, -1.1929153, -0.8898458, -0.86690474, -0.80744475, -1.1774896, -1.108945, -2.056511, -2.0676262, -0.7846663, -0.81444526, -0.6766059, -0.9041935, -0.73590857, -0.6264732, -0.81851256, -2.6052191, -1.8843722, -1.044584, -1.6357023, -1.6401404, -1.5270939, -2.2869985, -1.7568169, -1.7991313, -3.001768, -5.336341, -1.6224685, -1.0219606, -4.603571, -4.1932673, -3.042347, -1.9126862, -0.7629551, -3.189313, -2.7016556, -1.118586, -2.1607187, -2.0055864, -2.7484715, -3.1684074, -3.83769, -2.0820234, -1.0559535, -1.1772017, -1.330181, -1.6856858, -1.6979719, -2.530777, -2.7738214, -2.2110868, -1.4996016, -1.2965591, -4.6498537, -1.8551095, -2.5414307, -3.570963, -1.2399164, -2.8060694, -2.1512334, -1.8322636, -4.8060484, -1.9000674, -2.0965776, -2.3850784, -4.606346, -2.907361, -3.545009, -1.0164293, -2.7142386, -3.3618717, -1.5112023, -0.9955293, -2.7666876, -2.1661737, -1.4990155, -1.3076473, -2.456527, -1.6418482, -2.2069795, -1.9657013, -3.255251, -1.8241007, -1.5874321, -3.0413682, -2.5288503, -1.122015, -3.3506832, -1.7865183, -3.0265481, -3.1617188, -2.043597, -1.6243017, -1.6693872, -1.8202813, -6.2588425, -0.658507, -1.9051749, -1.0312359, -1.6516533, -2.6110055, -2.2804751, -2.2768223, -2.914403, -3.3968577, -1.5329814, -4.7806764, -1.8757861, -2.1339443, -1.2909119, -3.560735, -1.4998031, -1.5749999, -1.4923608, -1.1537538, -4.7296, -2.440965, -4.2241488, -2.3822827, -2.3952546, -1.0642797, -1.7057232, -1.2805316, -1.9372311, -1.3188204, -4.5041175, -2.726005, -0.8250985, -1.1002651, -1.376234, -0.9265303 ], "pointIndex": [ 1, 498, 231, 121903249, 82609045, 53657487, 83469870, 10321709, 50627244, 59885212, 77692286, 98141695, 87402624, 42160830, 8468170, 77416666, 34591308, 12532761, 26185935, 91499350, 75331836, 123483511, 15452988, 8325712, 21363363, 118013789, 86219309, 88635229, 28187500, 91925545, 114866803, 64359771, 1014791, 70322355, 116900125, 101094304, 84425561, 104223812, 97907689, 110328330, 121265951, 35245592, 15199966, 38695244, 37808698, 4744599, 87014766, 41946632, 10751397, 44730152, 21616370, 52919691, 114313344, 12902561, 117409059, 113520849, 57750588, 58573017, 114622407, 72330758, 23440117, 26354919, 68648928, 68002172, 25188338, 71817058, 87196418, 12687349, 25351371, 82891487, 84141569, 88845534, 90204855, 95439583, 117258970, 6922222, 110083821, 115550392, 14129703, 84815374 ], "storeSequenceIndicesEnabled": false, "size": 231, "capacity": 256, "initialAcceptFraction": 0.125, "timeDecay": 1.0E-4, "sequenceIndexOfMostRecentTimeDecayUpdate": 0, "maxSequenceIndex": 504, "compressed": true, "randomSeed": -3921434996928360891 }, { "version": "2.0", "weight": [ -0.59787774, -0.60145414, -0.6037318, -0.60338205, -0.6137846, -0.6112629, -0.62412167, -0.62555826, -0.692133, -0.703087, -0.62788475, -0.6285306, -0.6236274, -0.73515266, -0.738029, -0.7654694, -0.6870156, -0.73044413, -0.7317749, -0.7283749, -0.9046549, -0.63757515, -0.90129393, -0.63576126, -0.65300924, -0.6393257, -0.624173, -1.0669246, -0.8360199, -0.88732535, -0.9085496, -0.8281918, -1.0321151, -0.69639766, -1.056624, -0.7568813, -0.83730763, -1.3531302, -0.79367673, -0.746458, -1.0654767, -0.9303029, -1.0939734, -0.8892214, -0.6607892, -1.0712175, -0.97386837, -1.092996, -0.82881105, -0.70330036, -0.80185133, -0.8514173, -0.69828564, -0.70050687, -0.6848632, -1.1613108, -1.4207476, -0.8566658, -1.1068753, -1.0668347, -1.0640814, -1.2468433, -1.1292615, -1.0954584, -1.9068737, -1.4202605, -2.034829, -0.73155093, -0.86568165, -2.4108014, -1.6762967, -1.0485967, -1.0873181, -0.904395, -1.1199968, -2.1598327, -1.4283174, -1.0384696, -0.84582597, -2.4886782, -0.7779316, -1.0970025, -1.1856172, -1.9569024, -3.981397, -1.3820696, -1.8495582, -1.303945, -1.7128863, -0.851952, -1.3258555, -2.0642643, -1.0822942, -1.0181471, -1.0585626, -1.5800385, -1.1739537, -0.9560621, -1.034065, -0.7476173, -1.2199632, -0.8563682, -1.7596116, -0.9308764, -0.9294558, -0.700496, -0.9780324, -1.3246034, -0.9090146, -1.4302996, -0.76940614, -3.9980063, -2.1296775, -1.9396099, -2.2312093, -1.1239054, -3.0561671, -1.9985267, -1.5552648, -1.8671099, -1.8968765, -1.5244303, -1.5921745, -1.4288629, -1.7421844, -2.1218357, -1.7104133, -2.6510508, -1.3104323, -3.057764, -2.031021, -1.4565883, -2.0348382, -2.2601967, -2.920707, -1.2729836, -3.1982338, -0.99266785, -1.7109475, -2.6560607, -2.4753838, -2.1877108, -2.064123, -1.1081226, -3.0854433, -5.3121643, -1.3218622, -2.3300076, -3.1619358, -1.2176294, -1.3897915, -4.1942477, -2.4851782, -2.5883253, -2.5248022, -1.5893021, -3.42884, -1.4305729, -1.9520689, -3.5295646, -2.5297673, -2.0775554, -1.0084162, -1.5056899, -1.9147689, -1.6083453, -1.1871455, -2.0726132, -2.1473198, -4.442302, -4.670319, -3.5520089, -1.6042694, -3.1528566, -4.5269594, -2.1927118, -1.8097452, -2.7539496, -4.4474444, -1.2035335, -1.1168379, -1.3293927, -2.0163567, -2.2053635, -3.6734867, -2.1019855, -1.3774385, -1.8108878, -1.7328309, -4.0557847, -6.4212666, -2.2095923, -5.359125, -1.4784194, -2.1430738, -3.644639, -1.284663, -3.362314, -1.093306, -2.4446, -1.1570675, -1.4576575, -2.2837992, -4.856039, -1.7351286, -2.236084, -2.0651164, -1.4864243, -1.4940932, -1.6566368, -1.8886653, -0.74667937, -2.0818756, -1.1767255, -1.7952884, -1.5501437, -1.3899502, -1.6304728, -1.4943737, -2.758686, -2.8887265, -2.2842896, -1.0909864 ], "pointIndex": [ 4, 503, 223, 84054172, 109366651, 51339656, 88791098, 4072988, 54556737, 75121037, 86904619, 102956360, 91321010, 118585526, 78577257, 63311712, 67181236, 52778, 82908703, 94184616, 106563399, 78881456, 66679141, 41331958, 7050563, 48465170, 96787920, 37268129, 82110402, 59620455, 119453249, 71640439, 75552290, 77771305, 46659868, 28981394, 62183364, 12446746, 13219385, 115972942, 52801009, 61792140, 572087, 39266840, 2980561, 32084687, 45569065, 39983677, 47592681, 3347835, 123538200, 52604221, 20106550, 54042751, 22117839, 58149627, 116452996, 61076830, 66799983, 69136378, 40642821, 22894287, 123149293, 33336803, 77739806, 81458609, 81692046, 85920934, 87924055, 30059320, 92925472, 95823877, 99698152, 121454403, 59960944, 116220425, 117475741, 499 ], "storeSequenceIndicesEnabled": false, "size": 223, "capacity": 256, "initialAcceptFraction": 0.125, "timeDecay": 1.0E-4, "sequenceIndexOfMostRecentTimeDecayUpdate": 0, "maxSequenceIndex": 504, "compressed": true, "randomSeed": -7058296641388226677 }, { "version": "2.0", "weight": [ -0.54927164, -0.55799776, -0.56177443, -0.5784826, -0.5607427, -0.5943863, -0.56446606, -0.63234544, -0.6444895, -0.6149962, -0.5726348, -0.6144211, -0.5976512, -0.9134983, -0.5969545, -0.6978777, -0.662781, -0.6462334, -0.82320976, -0.62632024, -0.78237295, -0.6009164, -0.71237713, -0.63300943, -0.68879, -0.8736334, -0.6628779, -1.0856007, -0.92329025, -1.0283417, -0.772051, -0.78350765, -0.8919709, -0.7718917, -1.0579466, -0.7923724, -0.69287163, -0.8952094, -0.85189104, -0.65595937, -0.7328316, -1.1698253, -0.95717037, -0.8587923, -0.64600074, -0.73141485, -0.87741977, -1.103363, -0.63726646, -0.8150458, -0.74368244, -0.8759372, -1.081512, -0.71728975, -0.688069, -1.2152156, -1.1525712, -1.2191999, -1.0493709, -1.5191622, -1.5661151, -1.6331143, -1.2799627, -1.7562692, -1.150978, -1.178991, -0.9250156, -0.86997193, -1.4348046, -1.4207041, -1.1504325, -0.81934685, -1.3765908, -1.1598345, -0.76282966, -1.2485176, -0.9627283, -1.0175, -1.3302476, -1.4262129, -0.73058355, -0.7768302, -1.0742236, -1.2367499, -1.4979956, -1.3816236, -1.5363247, -1.4642798, -1.3516219, -0.72886014, -0.84243894, -1.1391242, -0.816415, -1.2249358, -1.1653829, -1.1568464, -1.409465, -0.7573363, -1.8553492, -0.9267509, -1.277529, -0.84015083, -1.4367083, -1.1704016, -1.0822623, -1.9117612, -1.4373354, -1.1935893, -0.72218204, -0.9773071, -2.307135, -1.6119989, -1.4311005, -1.6152966, -3.8505075, -2.5684729, -1.4745631, -2.283275, -1.9480804, -1.5828394, -2.2038364, -1.8381954, -2.7674043, -3.1706169, -1.6801208, -1.4045823, -3.458629, -5.5322, -2.0492415, -1.3397441, -1.2684066, -1.728175, -4.826077, -1.3611041, -1.0132012, -2.3263867, -1.668477, -5.789353, -1.8627526, -3.0538514, -4.4253926, -1.650529, -2.3139496, -2.480115, -3.4141963, -2.1213675, -1.5043126, -1.4033012, -3.1311145, -0.9516954, -2.1204515, -3.598058, -1.4977916, -1.0788697, -1.3113519, -3.0442638, -4.627087, -2.0146139, -1.3869731, -2.342794, -1.5375688, -1.2935922, -4.4602623, -2.0731196, -4.6459804, -3.7177625, -3.0546892, -2.069629, -1.2756584, -3.0119967, -1.6468534, -1.5275029, -2.2072217, -2.840689, -1.5935591, -1.7980634, -2.1122496, -3.8701308, -2.2193303, -3.620466, -1.0340712, -1.5489097, -2.2800333, -1.4681567, -4.295331, -0.97169226, -1.1701701, -1.4693524, -1.9215053, -1.4616832, -2.4838266, -1.2926298, -1.2791344, -1.4447894, -2.3319173, -2.0730073, -2.3841429, -1.9727724, -1.9029855, -3.8191602, -3.4143884, -1.6520147, -3.1560063, -1.1492236, -1.8619269, -2.8565183, -1.4807147, -2.1151505, -2.7476447, -1.7275034, -2.7608826, -1.9752641, -2.1960561, -1.7852536, -1.7566513, -1.6960467, -1.3483127, -1.7708883, -2.5635688, -1.6335524, -1.4366835, -3.7009428, -2.626339, -2.0646389, -2.1659148, -1.484712, -3.0297914, -2.1841908 ], "pointIndex": [ 0, 504, 228, 97198270, 59470988, 65381995, 79952849, 36792402, 51276755, 81752643, 80230109, 118281718, 109930419, 80413679, 71166889, 21318653, 24855703, 67265095, 120795767, 29750424, 113188732, 33589531, 31694451, 112099069, 13232518, 45225703, 49060933, 51105009, 20662083, 57749492, 63758790, 24384450, 110219280, 70322865, 77580408, 53260142, 91836161, 96841947, 6839269, 120096698, 105828287, 108808445, 19274606, 119428017, 44259364, 8363462, 41650447, 68138301, 125558726, 47495101, 4398592, 49768486, 11787755, 53595347, 76192272, 56214662, 31031249, 58698945, 22561727, 61418247, 62348906, 64188278, 66035284, 86677956, 26292697, 28510053, 6018892, 126800998, 83629329, 90448353, 29246911, 99134894, 119796088, 45558469, 108328045, 60162587, 121171674, 124007771, 85941694 ], "storeSequenceIndicesEnabled": false, "size": 228, "capacity": 256, "initialAcceptFraction": 0.125, "timeDecay": 1.0E-4, "sequenceIndexOfMostRecentTimeDecayUpdate": 0, "maxSequenceIndex": 504, "compressed": true, "randomSeed": 1617599988107384674 }, { "version": "2.0", "weight": [ -0.49086484, -0.49165273, -0.49508175, -0.6431985, -0.5937614, -0.50219905, -0.573946, -0.6606333, -0.67695975, -0.66005003, -0.63093185, -0.5548935, -0.5702439, -0.71829444, -0.60590047, -0.7012481, -0.7132402, -0.729588, -0.697213, -0.69351006, -0.72366875, -0.6569782, -0.7441715, -0.58781534, -0.5558926, -0.67732096, -0.5800482, -0.7528965, -0.81201863, -0.7412216, -0.6288245, -1.2486026, -0.75286245, -0.72401667, -0.71564144, -0.76534486, -0.9099728, -1.0183343, -0.70542717, -0.70135754, -0.91260487, -0.8092986, -0.7336066, -0.7567574, -0.7708158, -0.84383863, -0.81836164, -0.68041724, -0.6287525, -0.6440457, -0.7410818, -0.7212312, -0.71242625, -0.67231476, -0.63468635, -0.7622313, -0.8208822, -1.1445706, -0.94941014, -0.8612036, -1.707661, -0.9243854, -1.9626482, -1.5958457, -1.3077794, -1.1861492, -1.1635512, -2.1751227, -0.8469007, -1.4496542, -1.5342058, -0.96538514, -1.3460073, -1.419018, -1.0653356, -1.2852613, -1.2012281, -0.8473538, -0.8943203, -0.8048798, -1.167146, -1.3002725, -1.0605211, -0.92645526, -1.69568, -0.7741866, -1.0942045, -1.6122143, -0.9987477, -1.2992978, -1.3553501, -1.4368896, -1.2315027, -1.1274419, -1.8796052, -0.9360587, -1.1173197, -1.2018306, -1.2060379, -0.7550845, -1.3723761, -0.92328745, -0.9710938, -1.2305354, -1.0390061, -1.0124133, -0.734787, -0.6868354, -1.0925033, -1.7397844, -0.75704724, -0.93412423, -1.0038755, -0.8340533, -1.0903175, -1.6320931, -5.0747957, -1.2733006, -2.6070294, -2.010462, -1.7844871, -3.348369, -2.3121226, -1.5482043, -0.97831064, -2.7482018, -2.2871487, -2.119465, -2.905391, -2.1168177, -3.059811, -1.3497925, -2.189309, -1.8456689, -2.1114528, -2.5084443, -2.2272942, -1.8464441, -2.7921028, -4.0985055, -1.874381, -4.627585, -2.7565491, -1.4172932, -1.0251176, -2.5863686, -2.255447, -5.3265395, -1.7419072, -1.784064, -1.4473236, -2.1382859, -1.6768821, -2.059615, -2.2160065, -0.94110626, -2.160445, -1.3646688, -1.2020136, -1.2484066, -2.6778018, -2.6019099, -2.7626283, -1.5040901, -2.4336689, -1.3975806, -5.2075863, -1.9458374, -1.9337393, -2.611955, -2.93051, -2.350819, -1.2660667, -1.3496511, -1.3058685, -3.110164, -3.809094, -3.3404458, -1.8760198, -1.8080118, -1.6777174, -2.7298841, -1.9431881, -2.405735, -1.4490008, -1.3650403, -1.4648993, -1.7826031, -1.1778947, -1.9751103, -2.531089, -2.5696335, -6.8766155, -3.561331, -1.7344441, -2.2454484, -1.7390339, -1.3827872, -1.3778417, -1.3080233, -1.2370479, -4.110881, -2.2114515, -2.4566734, -1.7254595, -1.7614281, -0.99026966, -2.1424553, -1.7575904, -4.0985904, -1.8833361, -1.3063549, -1.2607809, -0.82764417, -0.8102777, -2.1919854, -1.403665, -1.3009878, -2.792962, -3.3374386, -2.8087707, -2.2060149, -0.84837985, -2.9999259, -1.3997679, -2.5588124, -2.0231915, -1.9132456, -0.84803754, -1.3362615 ], "pointIndex": [ 0, 504, 230, 110086351, 101424723, 52573038, 95008443, 15560022, 19982898, 64057438, 79464555, 107052269, 93002383, 42159278, 49496892, 119779632, 111113351, 26064893, 12176857, 6657738, 108593992, 126506494, 72496706, 42621811, 18129767, 4097229, 1824239, 9341177, 109152575, 22442466, 82928928, 91678956, 79276268, 118732690, 78958311, 6067895, 97094175, 103002712, 107319471, 120864622, 2795147, 34753592, 3642607, 37322672, 25049365, 75391554, 12835239, 106173089, 43755132, 117583954, 46761671, 8965966, 50974275, 95736136, 97367112, 59029487, 86855671, 126257878, 123292235, 65843424, 64392139, 65590301, 72222837, 118300295, 76401247, 77680057, 27451418, 81917883, 28498094, 33457347, 99015206, 98379937, 100477882, 105021239, 106810149, 116519442, 74534426, 122909395, 125209175, 255019 ], "storeSequenceIndicesEnabled": false, "size": 230, "capacity": 256, "initialAcceptFraction": 0.125, "timeDecay": 1.0E-4, "sequenceIndexOfMostRecentTimeDecayUpdate": 0, "maxSequenceIndex": 504, "compressed": true, "randomSeed": -8928687457762026561 }, { "version": "2.0", "weight": [ -0.56832755, -0.5909885, -0.5748976, -0.60423553, -0.60178524, -0.60157627, -0.587748, -0.7172052, -0.6241009, -0.60629946, -0.6160531, -0.63146806, -0.608597, -0.59321743, -0.6879986, -0.783219, -0.8522558, -0.6727227, -0.8268062, -0.62091374, -0.61043733, -0.74049455, -0.7057798, -0.796559, -0.87044466, -0.70782137, -0.7786673, -0.6604127, -0.8732423, -1.4029797, -0.7945969, -0.8747885, -0.8368457, -0.95190823, -0.9993142, -0.8970017, -0.93625695, -0.84799105, -0.8354849, -0.79125404, -0.799949, -0.67009306, -0.7891741, -1.4105603, -0.8896512, -1.0135485, -0.929001, -0.886674, -0.8006716, -1.4901229, -1.2618842, -0.90933096, -0.8073693, -0.8621052, -1.0471725, -0.7722495, -1.3036199, -0.87458843, -1.4554368, -1.5855098, -1.9130875, -0.94120586, -1.0607948, -0.9088619, -1.4801517, -0.99234706, -1.3816286, -1.2490814, -1.1207249, -1.8138934, -1.0425998, -1.4596838, -1.6276789, -1.2308221, -1.0301083, -1.1402522, -1.4639021, -0.9087255, -1.0546715, -0.9879512, -1.1541631, -0.82525426, -1.0790806, -0.9471458, -0.85101986, -1.233984, -2.3894157, -2.9223077, -1.5428509, -1.5711381, -1.0467322, -1.8167585, -1.3438088, -1.2582407, -1.2467229, -1.6579001, -1.990238, -1.5339531, -1.0503933, -1.6122134, -1.8513618, -1.6831448, -1.2689091, -1.0429959, -1.3003299, -0.8789561, -0.94471043, -1.4198842, -2.455136, -1.2004322, -1.2269163, -1.12566, -0.7759718, -1.4541564, -4.4826355, -1.3858997, -1.4449863, -1.9620763, -1.6177365, -1.7349641, -1.9133793, -3.974498, -2.1262734, -1.7611657, -1.681921, -2.7635946, -3.0031888, -5.914061, -1.1342934, -2.911582, -1.8979477, -1.1300302, -2.3564131, -2.2195525, -1.4680218, -1.3823087, -3.8461316, -2.432869, -1.3012831, -3.8942091, -2.4783866, -1.3676889, -1.2583317, -2.443607, -3.2685487, -2.3278441, -4.7823668, -1.8398348, -2.6126237, -2.504085, -1.9899489, -4.835528, -2.721473, -2.3454478, -3.7778504, -1.8538367, -1.1873996, -1.3453918, -1.1090251, -5.224681, -1.4397637, -1.180208, -1.9746033, -1.0095749, -1.1477605, -4.054302, -1.5409443, -1.0316113, -5.2108626, -3.1235392, -1.0136346, -4.280433, -1.3601183, -3.8717458, -2.4440918, -4.286065, -5.50645, -2.420915, -1.6485515, -2.066975, -3.7196562, -2.0036898, -1.4285997, -3.475406, -3.0394547, -2.7931194, -1.4155692, -3.79178, -5.0270667, -2.0082972, -1.690726, -2.5187201, -1.95259, -3.773377, -2.530886, -2.3352246, -2.2920215, -2.7772734, -1.3019248, -2.7455304, -3.8654735, -4.183722, -1.9184648, -2.168456, -2.1282635, -3.9138813, -1.7724588, -1.7226524, -1.1068506, -1.533566, -2.2625072, -1.0837358, -2.4536111, -1.4014043, -1.1351576, -1.6732528, -1.6587623, -3.43352, -3.4383984, -3.6564918, -1.3637918, -2.2445352, -5.1128774, -3.1354551, -2.1848104, -1.7619399, -1.5470188 ], "pointIndex": [ 0, 503, 227, 90623523, 26277715, 80852668, 96154707, 16002266, 21880427, 115108, 28454336, 115537322, 58754191, 101519352, 45299020, 20168772, 63804658, 71557155, 80167543, 935797, 115024005, 32761132, 34830558, 16272046, 19323507, 94634636, 3442190, 49227875, 52614915, 87997601, 47361516, 71328471, 11621999, 21571484, 126664324, 29477886, 91369324, 97478496, 112493209, 118859279, 14477878, 103491542, 100150288, 121802827, 1599154, 37090009, 39107810, 40467407, 17810789, 42202527, 43379152, 74173352, 22488157, 60973194, 77940776, 75755120, 54860923, 72404857, 52348407, 69212122, 65407855, 100722638, 116220869, 24021941, 75225950, 105001139, 68756504, 82152011, 6260319, 93904377, 27998054, 112965178, 106109504, 105443757, 48993265, 116075177, 119873334, 126231308, 253639 ], "storeSequenceIndicesEnabled": false, "size": 227, "capacity": 256, "initialAcceptFraction": 0.125, "timeDecay": 1.0E-4, "sequenceIndexOfMostRecentTimeDecayUpdate": 0, "maxSequenceIndex": 504, "compressed": true, "randomSeed": -1388995391054092274 }, { "version": "2.0", "weight": [ -0.31804442, -0.43489292, -0.42907506, -0.4363616, -0.45597282, -0.46680713, -0.46190825, -0.5677014, -0.4563058, -0.6166242, -0.5039146, -0.6246354, -0.4707326, -0.47779357, -0.49204805, -0.64231163, -0.6764985, -0.46582282, -0.51274574, -0.6255991, -0.6194547, -0.5232377, -0.63157463, -0.6706966, -0.63934845, -0.5277276, -0.48863217, -0.49394917, -0.4862815, -1.0154939, -0.64515084, -0.7793933, -0.6908473, -0.7567321, -0.7171721, -0.46691778, -0.8643776, -0.51696473, -0.84084165, -0.6723087, -1.7153779, -0.62704635, -0.9834292, -0.6648248, -0.6621618, -0.82280827, -0.82331115, -0.679924, -1.0636495, -0.6468792, -0.8472379, -0.5683926, -0.61848426, -0.9037221, -0.49113053, -0.638287, -0.5134129, -0.88270605, -0.5657373, -1.0913377, -1.5473504, -0.8016271, -0.75376856, -1.2727239, -1.094562, -0.7468163, -0.72751355, -0.81397045, -0.93953127, -0.94911826, -1.8311458, -1.4125476, -0.5176985, -0.87438446, -1.5910777, -0.9631172, -0.62825584, -0.92554176, -1.268599, -1.4888319, -1.1603714, -1.9172816, -1.8976915, -0.7566482, -0.62849605, -1.0634012, -1.5461874, -2.2122335, -0.96318877, -0.95302933, -0.94853485, -0.9550196, -1.105756, -0.8768027, -1.3013245, -0.70743793, -1.454751, -1.20427, -1.0981193, -0.9563045, -0.75259453, -1.0261632, -0.9617375, -0.5910247, -0.9938949, -0.99083114, -0.6719092, -0.9257738, -1.8758082, -1.348569, -0.65144736, -0.71926266, -0.78749126, -1.4659787, -0.6161229, -0.9727178, -0.8877861, -1.0888059, -3.7083657, -1.3748552, -2.400187, -2.0805056, -3.7978256, -0.9706547, -1.2985879, -1.1572261, -1.219806, -1.541234, -1.8615499, -1.7287426, -1.1255622, -2.70784, -1.9170482, -1.4877199, -0.9863343, -2.0110765, -4.1267276, -1.8231001, -1.3878483, -2.3702366, -1.6555223, -1.9235884, -1.8364646, -1.6715032, -2.3337338, -1.5348499, -1.0097706, -2.8215172, -3.0130804, -1.6238242, -2.696633, -2.2997658, -4.003807, -1.4826674, -2.679388, -1.0749161, -1.9095988, -1.6551454, -4.2207875, -3.1003954, -1.5809857, -1.9965923, -4.100097, -3.2477396, -3.553958, -2.510146, -2.1376574, -4.343759, -2.1196232, -1.479722, -1.9746994, -1.1078998, -1.1593446, -2.383345, -2.3589444, -3.51402, -2.245927, -3.295619, -1.8285325, -1.9398905, -1.5956552, -3.3970203, -1.0234499, -2.2899134, -3.5824833, -7.324093, -1.2620987, -1.6717616, -1.4615635, -1.7714953, -4.0805354, -1.5767369, -0.87090784, -3.132244, -3.5286536, -1.3311883, -1.6633921, -1.9951661, -1.3551797, -1.4291936, -1.3036424, -1.4725003, -1.4442756, -2.8375487, -3.914979, -1.1315118, -3.6979558, -1.0114822, -0.91020817, -2.0747359, -2.1834383, -4.4955087, -1.40393, -1.6697918, -0.9387991, -1.2710674, -1.8251337, -2.156713, -3.0485265, -1.4951202, -2.7489276, -3.3636158, -1.2925293, -1.7190237, -1.1842874, -1.8158754, -1.7622224, -2.1716104, -2.079569, -3.835428, -1.0511314, -2.020286, -1.0010629, -1.6464177, -2.954303, -3.444575 ], "pointIndex": [ 0, 504, 236, 93894141, 57235403, 51292171, 29464013, 37198160, 20519697, 54427788, 84068462, 106255160, 1774023, 40074331, 4427759, 3079778, 85663388, 63804879, 12519718, 114932833, 98378907, 15180335, 36213183, 37758740, 119174445, 105153785, 46290997, 62143965, 41946504, 52128933, 23058516, 59278899, 2045518, 69088865, 72568272, 81874749, 123341018, 96074422, 31051790, 105784766, 60160276, 127761926, 2368005, 117854012, 38401570, 73269329, 24952653, 63326851, 106430149, 47568139, 19470288, 1875865, 48137184, 47189058, 109022512, 54731519, 11246436, 124472607, 101606598, 56372736, 57755438, 58921712, 105448807, 64277816, 86411819, 26917341, 652065, 115585707, 86867912, 28333852, 115424301, 91242285, 6613002, 96842457, 2992981, 116744267, 32198787, 112944186, 117543238, 123927971, 18612777, 207553 ], "storeSequenceIndicesEnabled": false, "size": 236, "capacity": 256, "initialAcceptFraction": 0.125, "timeDecay": 1.0E-4, "sequenceIndexOfMostRecentTimeDecayUpdate": 0, "maxSequenceIndex": 504, "compressed": true, "randomSeed": -1996687561581955494 }, { "version": "2.0", "weight": [ -0.5846756, -0.58689344, -0.60667974, -0.6030738, -0.5918051, -0.6205509, -0.61719275, -0.6469364, -0.6475224, -0.65886086, -0.618924, -0.7007284, -0.6607422, -0.6618274, -0.82475907, -0.73422694, -0.6774076, -0.75282896, -1.0639298, -0.8307625, -0.88619107, -0.65084374, -0.7746913, -0.8276962, -0.73104393, -0.7153365, -0.6641185, -0.69109845, -0.78577524, -0.8427952, -1.0567325, -1.8381795, -0.73889744, -0.92306626, -0.73201686, -0.80058616, -0.9315472, -1.1340989, -1.1253422, -1.049055, -1.1059141, -1.3064846, -1.0086405, -0.92371744, -0.6526815, -0.7937004, -0.8038962, -1.2402302, -0.8927977, -0.7664857, -0.8206795, -1.4141115, -0.7470262, -0.717384, -0.7282268, -0.7670583, -0.71265644, -1.056092, -0.94361395, -0.95633894, -1.4659557, -1.0672771, -3.3476443, -3.6351054, -1.8766991, -1.0499516, -0.8640289, -1.3418787, -1.6710471, -1.0518789, -1.3284807, -1.0672903, -1.2984877, -1.4317946, -1.2819399, -1.1776006, -2.0117435, -1.1909988, -1.6325643, -1.3755174, -1.8467388, -1.1327515, -1.5188427, -1.3899642, -1.6420921, -1.043407, -1.6026639, -1.138417, -0.97101223, -1.271242, -0.7115588, -1.3566486, -0.9234316, -0.85723275, -0.8918241, -1.5019754, -1.6031859, -1.1208738, -1.133076, -1.1482856, -0.82539636, -0.97691697, -0.90151674, -1.9680749, -1.5732255, -0.97369736, -1.610725, -1.5830237, -1.2785949, -1.0099097, -0.8909851, -0.77351177, -1.0141395, -0.7269804, -1.4642861, -2.7214887, -1.4997181, -14.602708, -1.403811, -1.4172581, -1.310325, -1.5547988, -2.1956336, -3.7234614, -1.7775134, -3.4160905, -4.9316273, -4.792233, -4.167746, -2.1372902, -2.0618155, -1.0708857, -2.642648, -1.2613289, -1.8870069, -1.3915552, -4.009344, -1.8726304, -1.9056902, -2.2972603, -2.2165756, -2.9336991, -2.7637823, -1.2901676, -1.5869136, -1.9698185, -2.1646268, -2.960697, -2.566998, -1.4355865, -2.5717368, -2.0413668, -1.290169, -2.516158, -2.759129, -2.0104089, -3.2819536, -1.6685455, -2.3512256, -2.0406234, -1.4104943, -3.3107772, -5.470009, -3.6898227, -2.2685525, -2.7050624, -3.1616924, -2.3806925, -2.7841287, -1.9129984, -3.2932487, -1.6767087, -1.1507784, -2.3390803, -4.5349946, -3.1582544, -1.7180965, -5.6086135, -2.3687649, -2.3038986, -1.8158605, -3.0817351, -2.2010934, -1.9180917, -1.4120785, -1.3320959, -3.7883961, -1.5549222, -0.9354667, -1.0546124, -1.2253877, -2.1193779, -1.5984664, -4.7134676, -1.7268164, -2.1174202, -1.297949, -1.8061957, -1.2423681, -2.1758392, -1.4506269, -2.4918299, -0.90987223, -2.2017498, -1.0510653, -1.9787481, -2.1033976, -2.4857621, -3.798583, -2.7556937, -2.8681157, -3.3335586, -1.1036271, -2.1468067, -1.7182089, -9.625127, -1.7497753, -1.3092595, -1.6229994, -1.8266094, -1.1855419, -1.1022376, -2.5157192, -1.8676955, -3.8111587, -2.3706863, -1.3407114, -1.2293477 ], "pointIndex": [ 0, 502, 228, 85417915, 87177656, 52405554, 24939584, 81211067, 63171332, 68876814, 88857761, 107085546, 50678915, 43230496, 51144720, 9727721, 73492326, 27971076, 84051766, 100252284, 33351039, 122947737, 10429343, 109197430, 8155808, 46643364, 2120434, 112945328, 84785397, 88789216, 64828394, 23919421, 11277540, 77949708, 26985267, 94800518, 99115340, 102070153, 6282878, 50070055, 37438927, 35424417, 62523043, 68161840, 4127142, 5313773, 43325589, 38238130, 47910376, 66853413, 28640695, 22449973, 65688760, 55518842, 10740481, 58487096, 96556615, 23345688, 5188696, 11772972, 95503364, 115673175, 125130528, 14571204, 79344496, 82642712, 54565943, 98714084, 22037788, 92278340, 97731258, 85795585, 98369318, 103507242, 107488494, 110471801, 116862439, 123458410, 127258485 ], "storeSequenceIndicesEnabled": false, "size": 228, "capacity": 256, "initialAcceptFraction": 0.125, "timeDecay": 1.0E-4, "sequenceIndexOfMostRecentTimeDecayUpdate": 0, "maxSequenceIndex": 504, "compressed": true, "randomSeed": -128508364556705108 }, { "version": "2.0", "weight": [ -0.630898, -0.6477811, -0.63280094, -0.6948641, -0.6490363, -0.6381175, -0.70697945, -0.7485131, -0.7632588, -0.8179374, -0.6676431, -0.6843537, -0.6571992, -0.7652821, -0.7276874, -0.7827385, -0.77456915, -0.7726149, -0.77507704, -0.9687915, -1.0675865, -0.7493418, -0.88513535, -0.6983723, -0.8357457, -0.7440659, -0.69447714, -0.77738136, -1.0133171, -0.87642634, -0.857812, -1.0985663, -1.9370906, -1.2371792, -1.0567256, -1.0878961, -0.80589247, -0.7802553, -0.9365398, -0.9947, -1.1050628, -1.1739084, -1.0834794, -1.295832, -0.79162145, -0.94784623, -0.90933746, -0.8757789, -0.9412581, -0.9697154, -1.4111537, -0.77407503, -0.76541466, -0.7894012, -0.7536822, -0.8625097, -1.4588612, -1.042716, -1.2608161, -1.3634186, -1.0306897, -1.1214379, -0.93017733, -1.5569626, -1.2675877, -2.3300815, -2.037261, -1.3787063, -2.078333, -1.4332216, -2.1206706, -1.2226236, -1.1829647, -0.8473785, -1.4364246, -1.0885451, -1.7373513, -1.0789704, -1.4983333, -1.2914145, -1.1032754, -1.6687708, -2.7030573, -1.1990012, -1.7063648, -2.1159866, -2.342888, -1.6727512, -1.564358, -1.372533, -0.9340407, -0.99187064, -1.2056274, -1.0800625, -1.6576957, -1.3551583, -1.0228239, -1.7431831, -1.286001, -1.1640606, -1.6876549, -1.7610623, -1.6307021, -0.8457055, -0.8424614, -1.2389152, -1.2091107, -1.1098007, -1.0474402, -0.86699677, -1.1676563, -0.87737286, -3.3185194, -1.7179166, -1.6006385, -2.3141143, -3.4334073, -2.3130846, -2.0194337, -1.8243642, -1.720521, -1.9310031, -1.4816298, -2.4737897, -1.7918673, -1.5567455, -2.0214505, -2.3170557, -1.7804987, -2.2804224, -3.51206, -2.5557177, -3.2283506, -2.9984992, -2.7410605, -1.5036118, -2.0997918, -2.5839639, -2.6720161, -1.7679182, -1.5598592, -2.9722614, -2.615845, -2.8201096, -2.10161, -4.986848, -2.4506004, -1.3532511, -1.1694721, -1.619396, -1.6742814, -2.174175, -4.5054655, -2.4169295, -2.1824694, -1.1939554, -3.3943212, -2.303942, -2.0812685, -3.2173884, -2.0529165, -2.0515125, -2.9678133, -1.671063, -1.9606991, -2.8123155, -5.5252957, -2.4556065, -1.4970556, -2.6249, -2.0755422, -3.0332034, -3.7715864, -2.7577121, -3.0361726, -2.2537212, -3.0970392, -1.8873868, -2.558867, -3.7742202, -2.937425, -2.6971843, -1.9580126, -2.1035142, -1.6116444, -1.6787056, -4.688275, -2.2149107, -1.08943, -1.8120431, -1.8196094, -2.3866353, -2.839746, -2.0566387, -1.9034048, -4.365361, -2.675564, -1.5361451, -4.6711106, -3.8471017, -1.9594274, -2.5981467, -3.6338663, -4.5456915, -2.0403075, -2.2516203, -2.0036118, -3.7112646, -0.85280895, -4.2003527, -1.4760265, -2.7323143, -1.7102116, -2.1479855, -1.9858385, -2.095076, -3.0762653, -2.08245, -2.035378, -1.4645298, -2.5723915, -2.4020085, -2.0320628, -3.3489451, -0.9732658 ], "pointIndex": [ 0, 501, 225, 92365140, 12468747, 20753240, 92141865, 95005479, 68640148, 62615683, 103838480, 66742972, 116439537, 104268231, 8858295, 54224740, 65521261, 74614563, 105769197, 104643027, 115637626, 111636229, 1331364, 64087795, 96602030, 98980111, 65777520, 89080983, 58892339, 22644552, 94256497, 69757173, 2334587, 79822833, 50828536, 109548796, 101251341, 30702731, 114884835, 122206416, 86253129, 35635296, 36615887, 29815484, 17668545, 41848385, 33060378, 118682512, 94592436, 9165700, 48507835, 49743418, 114459716, 24705761, 53719230, 57642889, 72129372, 118372695, 23655649, 123107717, 69213579, 75295761, 6699983, 116981543, 26403286, 80827840, 126197891, 88762477, 91658553, 107618253, 103016808, 105082782, 103281533, 110847554, 113373220, 32790595, 121450923, 124577307 ], "storeSequenceIndicesEnabled": false, "size": 225, "capacity": 256, "initialAcceptFraction": 0.125, "timeDecay": 1.0E-4, "sequenceIndexOfMostRecentTimeDecayUpdate": 0, "maxSequenceIndex": 504, "compressed": true, "randomSeed": 7222263662094774283 }, { "version": "2.0", "weight": [ -0.4580384, -0.46075743, -0.46211502, -0.4929041, -0.4730218, -0.4747222, -0.46597216, -0.66657495, -0.56379455, -0.47808835, -0.5287002, -0.50128, -0.5075093, -0.4686614, -0.73368955, -0.708327, -0.673227, -0.57508063, -0.7542673, -0.5368351, -0.47845197, -0.5562689, -0.72655267, -0.5083273, -0.503371, -0.5842113, -0.6419362, -0.5932558, -0.67286736, -0.7619549, -0.8213134, -0.90004736, -0.7194303, -0.87810415, -0.9601538, -0.6465579, -0.9196468, -0.89380914, -0.8300188, -1.2643598, -0.76223713, -0.858839, -0.5496779, -0.59502965, -0.6356277, -0.864928, -0.9490388, -0.8488594, -0.65086263, -0.7511573, -0.6592746, -0.79392016, -0.7518688, -0.646706, -0.7839151, -0.64437765, -1.0888321, -3.038991, -1.1950477, -0.9051793, -1.2800106, -0.8435553, -1.2381986, -1.7287918, -1.0798482, -0.764986, -1.1250908, -1.7044045, -2.1042469, -1.9712648, -1.036632, -2.0903056, -1.3683456, -1.0508043, -1.4783676, -1.0530821, -0.934944, -1.250601, -2.1660426, -1.6160846, -2.042257, -0.9940596, -1.1671561, -1.3778867, -1.1717991, -0.7084441, -0.69722295, -1.2867434, -0.65041363, -1.3847234, -0.75861377, -0.8957585, -1.3514508, -0.9746915, -1.086659, -1.1088036, -1.0807667, -0.77314854, -1.0591305, -0.9778022, -1.0392236, -1.8265591, -0.77029204, -0.8249063, -1.866333, -0.9302765, -1.1593188, -0.84130716, -0.7519833, -1.070171, -1.1213996, -0.8770907, -0.66014594, -1.7014613, -1.1222742, -3.6753109, -3.2820745, -2.1890109, -2.7490132, -2.0823503, -2.1744382, -2.1111338, -1.7354052, -2.6427343, -1.5783647, -2.3191943, -2.2987525, -4.551017, -2.6797552, -1.1783116, -1.1015216, -2.0225565, -1.0180598, -1.4789, -1.1881534, -2.7123027, -2.309295, -2.6841495, -2.2632222, -4.495556, -4.797015, -2.9508445, -2.761931, -2.3967311, -3.2577622, -2.7722323, -4.411268, -1.7627251, -1.7279713, -2.6112216, -4.2717066, -2.8829312, -1.2101817, -3.985402, -2.2695396, -2.272051, -1.633945, -5.034854, -3.8012376, -3.3353143, -2.1721678, -2.0492704, -2.2347207, -2.3234985, -1.1148325, -2.0454772, -2.0794945, -2.824807, -1.6930101, -2.8448656, -1.2729511, -1.3998069, -0.7758805, -1.3747265, -0.7600807, -1.4784952, -2.373021, -4.0120835, -1.2613412, -2.7648678, -4.0832334, -2.46164, -1.9434028, -0.9132536, -1.0332861, -2.0537302, -4.2940426, -1.770343, -0.9790258, -4.511891, -2.8161838, -1.1884514, -1.6424551, -1.822277, -2.8266153, -1.1383984, -0.80848265, -2.7638896, -1.6277307, -1.055982, -2.2933555, -1.3826586, -2.1459916, -2.1754184, -3.1542444, -2.6393998, -3.4686902, -2.8534982, -1.0647641, -3.4518557, -3.361874, -1.1547184, -2.4933126, -2.2956147, -1.3746315, -0.8468485, -1.3102388, -2.1647186, -2.7558634, -1.21418, -3.544629, -2.6128135, -1.7413558, -2.2080815, -1.8403822, -4.518899, -1.2705089, -2.5194619 ], "pointIndex": [ 1, 503, 228, 109434413, 108902718, 45375688, 86832624, 61475015, 46389286, 22559253, 79620416, 99865252, 3332832, 76968655, 45642799, 26412718, 124991254, 75975371, 87432558, 84846355, 101770610, 14411874, 35292438, 117281552, 8002730, 17329378, 18437826, 18993252, 106181391, 54209581, 4957861, 108094925, 23961322, 86705572, 25729239, 115529408, 77332542, 103448472, 119617281, 115078757, 127247486, 46567368, 116666879, 52781221, 37853085, 73956241, 113961039, 41589895, 105665277, 75178451, 1978930, 118698118, 2148348, 81224634, 20280151, 73821485, 21476629, 58807825, 9382088, 57233256, 72226598, 99300621, 111957991, 80990229, 69990459, 71743878, 2732081, 78838502, 27695186, 98383303, 62160363, 119084073, 93542763, 98105998, 99641668, 103936523, 110020651, 116195474, 110564406 ], "storeSequenceIndicesEnabled": false, "size": 228, "capacity": 256, "initialAcceptFraction": 0.125, "timeDecay": 1.0E-4, "sequenceIndexOfMostRecentTimeDecayUpdate": 0, "maxSequenceIndex": 504, "compressed": true, "randomSeed": 7872595278026300545 }, { "version": "2.0", "weight": [ -0.5318544, -0.5526347, -0.5349425, -0.648295, -0.5679767, -0.53884137, -0.61517274, -0.69902545, -0.6633728, -0.57753766, -0.64800483, -0.548599, -0.54938823, -0.6605117, -0.86284494, -0.71828693, -0.81339324, -0.81776756, -0.931348, -0.6920306, -0.6435287, -0.71530217, -0.6555444, -0.98792934, -0.5638099, -0.6063291, -0.71361756, -0.8526455, -0.94601935, -0.9070212, -1.2568408, -1.6926986, -0.94654936, -1.230797, -0.9508877, -1.2342145, -1.5927098, -1.0119296, -1.0349593, -0.77720755, -0.9708845, -0.8177801, -0.7369408, -0.925699, -1.3079426, -0.6662252, -0.6679798, -1.0225967, -1.0462278, -1.093949, -0.61489826, -0.7670343, -0.6418647, -0.8002868, -0.7372775, -0.8960303, -1.1364943, -0.9798754, -1.1735563, -1.3999515, -1.0121135, -1.5662241, -1.4446868, -1.7188863, -1.9484583, -1.6996074, -1.1428131, -1.5619653, -1.2767718, -1.7581125, -2.8999724, -1.5626452, -1.7994468, -2.3420005, -1.8132316, -1.3271576, -1.1727203, -1.6932975, -1.093756, -0.8861891, -1.9243885, -1.7915244, -1.0730273, -1.5481496, -1.1812528, -0.95917827, -1.4939461, -1.3916106, -1.5121248, -1.7567997, -1.620493, -0.7535965, -0.9707958, -1.8692814, -0.7235233, -1.0412691, -1.3920215, -1.1896292, -1.3844485, -1.7028971, -1.2931386, -0.7415553, -1.7628093, -0.8847007, -0.9979066, -0.6709767, -1.7224689, -0.8326914, -0.8062148, -0.87184334, -0.7651507, -0.99336547, -1.0146102, -2.5240374, -1.830741, -1.0107177, -1.7176067, -1.2612122, -1.3724835, -3.8971236, -1.6958439, -1.310176, -1.26883, -3.2852666, -2.4117398, -5.1487803, -1.9918764, -4.3635464, -2.1841486, -3.4227571, -3.6512878, -5.3473387, -3.6426513, -1.1749694, -3.8084428, -1.797575, -3.917274, -1.3197335, -3.105423, -1.9836197, -3.3455346, -3.5547278, -2.9551923, -2.1559243, -3.201745, -3.1743422, -1.8750439, -2.8562143, -4.809888, -2.040142, -2.576594, -2.1615236, -2.6725488, -3.3076863, -1.9927764, -3.0091994, -2.5479405, -1.5206244, -1.3348264, -1.2347344, -1.0797039, -2.975576, -1.9721434, -2.4176564, -2.7389612, -2.7175198, -1.5420492, -1.8847944, -1.6513671, -2.5460448, -2.1374488, -2.0714803, -3.0631979, -2.056451, -2.042578, -1.50944, -1.6670105, -4.353, -1.9820719, -2.9284163, -1.8892688, -4.1990786, -2.1729066, -1.5507696, -2.7340138, -1.0775504, -1.3502195, -2.0504923, -5.231181, -1.5180875, -1.3710163, -1.2219802, -1.7035313, -1.8204783, -2.402197, -1.8848188, -1.4722091, -1.6576673, -1.3964651, -6.033809, -3.7256346, -1.6946881, -2.1770961, -1.2699507, -1.0702896, -2.541309, -5.0751104, -2.4699755, -2.5016696, -1.0325359, -2.0575097, -1.0528655, -0.79915005, -3.4902232, -2.510019, -2.2903266, -1.1804458, -0.82398766, -6.061527, -2.3614256, -0.8843897, -1.9906607, -5.030266, -5.0068526, -1.2827667, -1.1882246, -4.0000052, -2.9999995, -2.5603006, -2.2915864 ], "pointIndex": [ 3, 504, 230, 115347595, 114781716, 88385758, 82551603, 81082979, 43380974, 10194344, 46512063, 110078896, 94415135, 17090150, 1091252, 8607563, 93121216, 66403817, 74732784, 88677344, 108310888, 81147254, 53245757, 37363390, 19078022, 95335853, 69450267, 47217789, 99847234, 96872649, 76836844, 105708382, 64047755, 68216567, 106743551, 79846973, 86907060, 96454124, 104808962, 116530184, 243950, 110187486, 8357889, 69643767, 47947051, 34809077, 25305060, 39642089, 97101121, 41094885, 42168413, 44000776, 19255895, 1606917, 100649211, 61085956, 53954022, 36935615, 4489663, 58836135, 23305165, 64421908, 96644721, 88863796, 45998859, 84197218, 74033379, 77317836, 20708815, 81693082, 85518041, 13072922, 109596508, 98983742, 6003317, 108464322, 115642690, 120441323, 73830126, 252001 ], "storeSequenceIndicesEnabled": false, "size": 230, "capacity": 256, "initialAcceptFraction": 0.125, "timeDecay": 1.0E-4, "sequenceIndexOfMostRecentTimeDecayUpdate": 0, "maxSequenceIndex": 504, "compressed": true, "randomSeed": -7386051442361988795 }, { "version": "2.0", "weight": [ -0.5108797, -0.53291243, -0.5210462, -0.54066086, -0.62747353, -0.5228788, -0.53056675, -0.857135, -0.5431626, -0.6728934, -0.83623904, -0.5277067, -0.54691744, -0.5597804, -0.5415357, -1.0465266, -0.9172645, -0.6498583, -0.5838935, -0.7679667, -0.83578706, -0.86347896, -0.8489478, -0.58355063, -0.5913145, -0.67941654, -0.5532097, -0.57800925, -0.6950984, -1.0079625, -0.93897146, -1.0548553, -1.0986328, -0.990683, -0.95704466, -0.927313, -0.707812, -0.8876795, -0.58693117, -0.87326914, -0.78118306, -1.0092329, -0.90121645, -0.96073735, -1.1489044, -0.85746175, -1.0691592, -0.9054018, -0.94487154, -0.5967019, -0.7073035, -1.0018818, -1.0238538, -0.6573265, -0.65281594, -0.60852957, -0.8033723, -1.239034, -1.9295261, -3.1623762, -1.8403192, -1.3301795, -2.7431705, -1.4577744, -1.1961795, -1.1853992, -2.1535192, -1.0238626, -2.1560311, -1.0290521, -0.9725088, -1.5267935, -1.254052, -0.9736978, -1.2086835, -1.1516668, -1.6799083, -0.89718825, -1.7337049, -1.0380706, -1.2615322, -1.9453869, -0.9431378, -1.3229971, -1.113262, -0.9120092, -0.940582, -1.1862113, -1.2428428, -1.4028096, -1.1804905, -1.2219838, -1.0842413, -1.2987602, -1.3231869, -1.1256894, -1.4694376, -1.778964, -1.2206122, -0.7018415, -0.7977892, -1.0083444, -0.80514693, -1.1089602, -1.1285571, -1.4524838, -1.9886453, -1.9686787, -0.8539721, -1.1108284, -1.7369735, -0.75138754, -1.2929288, -2.8029969, -1.8970212, -2.9346006, -3.1239185, -2.3111954, -4.161659, -4.740618, -3.930361, -3.1946766, -2.6492808, -3.8204699, -1.512944, -3.6797109, -3.3561983, -2.0975733, -2.804475, -1.4382597, -1.8145785, -1.6634225, -4.7425866, -3.160053, -3.949805, -1.6202605, -1.3382463, -5.6329947, -3.1294072, -1.9707998, -1.1553085, -3.8239818, -4.8079767, -2.4293022, -1.5714104, -3.515261, -2.4722693, -1.2639914, -1.5367815, -2.372899, -2.0205681, -3.5453362, -1.3925744, -4.381768, -2.2124214, -2.1457138, -1.6154038, -2.1108005, -8.22557, -4.411373, -1.0580919, -1.2821277, -1.3998395, -2.4272609, -2.3948019, -0.96729654, -1.3134754, -1.676334, -1.6012802, -1.3334838, -1.2328417, -3.944815, -2.678497, -3.3102927, -1.9348183, -2.8151054, -1.7924582, -2.1709836, -2.1577468, -2.7874053, -1.9171277, -1.4504448, -2.6907806, -2.2421236, -1.2558291, -1.3776932, -1.1472483, -1.5318475, -5.8697314, -1.6595546, -2.01325, -1.4753066, -3.3051827, -2.9482744, -1.6691211, -3.6826656, -2.018957, -2.9914162, -2.479594, -2.6773448, -0.7891612, -1.6135672, -1.5358614, -1.0630399, -2.6844327, -2.140832, -1.4059803, -1.8687615, -1.5211347, -1.1563559, -1.8074015, -1.585874, -2.905799, -2.0970418, -2.6970625, -3.638173, -2.7245076, -1.0986912, -1.3670276, -2.4939995, -1.2994958, -3.5241516, -1.7636971, -1.6964252, -1.2399389, -1.4650214 ], "pointIndex": [ 0, 502, 226, 32292610, 109869361, 49676440, 38860639, 62592793, 600790, 23911739, 83647733, 116832183, 95541343, 17576862, 29948653, 57543406, 23404328, 71784850, 83143492, 92528201, 110518113, 14668457, 92928200, 332742, 103153798, 18665463, 121031463, 56018456, 1132292, 61525538, 66163859, 5447769, 89783462, 118557716, 6231473, 87963967, 114288691, 31571420, 6534378, 14235721, 35168244, 21282808, 37519649, 4883690, 102255530, 39341605, 8200693, 50840927, 45610825, 45886354, 48352851, 6983081, 53828108, 24397969, 3149000, 60837572, 59532798, 87757933, 65933620, 66841196, 24895074, 69969079, 109326827, 74783313, 77159216, 61306945, 82896750, 117164763, 110986551, 30674296, 91982112, 96851510, 29073451, 103960445, 13886321, 111283137, 33622972, 34148650, 425 ], "storeSequenceIndicesEnabled": false, "size": 226, "capacity": 256, "initialAcceptFraction": 0.125, "timeDecay": 1.0E-4, "sequenceIndexOfMostRecentTimeDecayUpdate": 0, "maxSequenceIndex": 504, "compressed": true, "randomSeed": 8161128184677511835 }, { "version": "2.0", "weight": [ -0.40340668, -0.529459, -0.5161869, -0.53543, -0.5572265, -0.559943, -0.5261264, -0.65634567, -0.8289195, -0.5882762, -0.6718383, -0.5602667, -0.59636503, -0.52978766, -0.5676633, -0.66157055, -0.67849123, -0.8783929, -0.87770337, -0.63287824, -0.7088296, -0.730397, -0.6751855, -0.67252594, -0.61771494, -0.62258834, -0.8742302, -0.54998684, -0.53258646, -0.5697075, -0.6338611, -0.7282499, -0.71893036, -0.69252646, -0.6978233, -1.083951, -1.0749961, -0.9492825, -1.0267339, -0.8309118, -1.0968392, -1.0346222, -0.71960473, -0.753241, -0.82036847, -0.68786734, -0.95036894, -0.7919302, -0.7842412, -0.78362364, -0.69734085, -0.7361724, -0.63951087, -0.9256614, -1.3222324, -0.557387, -0.5765443, -0.8541396, -1.5424199, -1.239235, -0.6581758, -0.6957259, -0.71216434, -1.2122377, -1.3424256, -0.8595487, -0.93395984, -0.91291904, -0.99467903, -1.0259969, -0.83747417, -1.1415584, -1.844381, -2.6260114, -1.8964473, -1.1886573, -0.95166403, -1.3016888, -2.1763248, -0.8594845, -1.7636291, -1.5953441, -1.2344376, -2.9971352, -1.2809831, -0.7776844, -1.5833745, -1.1377445, -0.81377697, -1.4259038, -1.5685266, -1.2828376, -1.2463381, -1.035027, -1.023178, -0.9225322, -1.334532, -1.2539599, -0.8611026, -1.0418408, -1.2660669, -1.0434586, -0.82252276, -0.9484263, -0.7822511, -0.7963581, -0.94546413, -1.4416524, -1.972239, -1.3854128, -1.7213302, -0.88175184, -0.660204, -1.0088569, -0.6626971, -1.4806819, -3.8850646, -3.4880378, -2.0370426, -1.7129023, -2.4480736, -0.9842973, -1.1321272, -1.3175576, -1.7688314, -0.99098766, -0.8212509, -2.069529, -2.7128298, -2.104214, -1.9494729, -1.5712934, -1.9657266, -2.8847177, -2.0214329, -1.1168336, -1.2752433, -1.5474607, -2.0712857, -1.228839, -2.3795173, -2.8112884, -0.84520334, -1.9762503, -1.7711192, -2.0245588, -2.4114013, -4.225437, -5.1449366, -3.5052965, -3.2005363, -1.7473437, -4.5288105, -1.3647547, -1.6030688, -3.399047, -3.9606524, -2.4988217, -2.2541208, -1.6598576, -2.0318375, -3.440064, -2.4472992, -2.583677, -1.9249152, -2.901985, -2.3829575, -3.055308, -3.5783951, -1.7583847, -1.3392538, -1.5853678, -1.7856835, -4.027946, -2.5141406, -2.4793181, -1.6539936, -1.8417726, -1.4020761, -1.6960694, -1.6217222, -1.7380404, -1.8801169, -2.5759354, -2.688679, -1.4906636, -2.4896166, -2.0299616, -1.1732154, -2.218882, -1.5876522, -2.8258562, -2.2313547, -1.8463587, -3.1047606, -1.3781078, -1.4334736, -2.1798456, -2.3027706, -2.6381938, -2.3633974, -1.6888646, -2.6922355, -3.9937582, -1.8913554, -3.3459861, -1.9445951, -2.7985828, -1.6192544, -2.2790425, -1.6679081, -2.0862288, -1.6981969, -2.1887875, -1.3072184, -1.5203125, -2.3198156, -4.1349745, -3.2535048, -4.6283674, -2.5832548, -3.1003091, -1.7998267, -1.9538168, -0.9321133, -1.3000219, -0.6603427, -1.417374, -4.4221253, -1.0785013, -1.8408641, -2.0598917 ], "pointIndex": [ 1, 504, 232, 93371543, 83193340, 51609995, 89399250, 58411525, 8723328, 20440944, 46893266, 122901962, 7356524, 43010919, 19179752, 70365646, 119511225, 76853214, 84102788, 95436273, 1216784, 124196634, 4094230, 39663861, 41923224, 21344652, 21685201, 43458670, 15386476, 60096538, 103046171, 23183276, 11319123, 45373015, 12355583, 77390034, 94445921, 99768692, 30435166, 117326285, 123597904, 3120255, 36522499, 16413966, 23712342, 50831074, 41869953, 31582697, 18123249, 45993707, 98907237, 50027373, 52003281, 76222963, 97052839, 55995355, 59301019, 41017833, 63884255, 71897870, 24273408, 71362132, 35199141, 46381904, 97006198, 81449733, 2703585, 123730816, 88570270, 28538466, 94720610, 88963368, 73814843, 102316085, 88128342, 110050359, 116313747, 118351755, 65273013, 127514189, 27 ], "storeSequenceIndicesEnabled": false, "size": 232, "capacity": 256, "initialAcceptFraction": 0.125, "timeDecay": 1.0E-4, "sequenceIndexOfMostRecentTimeDecayUpdate": 0, "maxSequenceIndex": 504, "compressed": true, "randomSeed": 5911960361261524437 }, { "version": "2.0", "weight": [ -0.39453644, -0.4091319, -0.40276408, -0.42154148, -0.43336, -0.40930772, -0.49056512, -0.4553714, -0.6343011, -0.43776572, -0.46448955, -0.49443203, -0.49125093, -0.55794704, -0.52942365, -0.5564705, -0.65847504, -0.69913536, -0.75695574, -0.71217597, -0.60467654, -0.49103096, -0.57176715, -0.5623783, -0.5702394, -0.5680598, -0.52803683, -0.5789208, -0.62406635, -0.5716927, -1.0776572, -0.74342746, -0.7486334, -0.69127804, -0.6608637, -0.9031974, -0.72085214, -0.769788, -0.77804446, -0.7316041, -0.95129424, -0.7048584, -0.68752366, -0.6274702, -0.78758854, -0.57621306, -0.980954, -0.7966236, -0.70016164, -0.9555895, -0.79694474, -0.8355656, -0.6856815, -0.567936, -0.8354194, -0.6369338, -0.81904274, -0.7119923, -0.86386496, -0.7636028, -1.0274584, -1.2511095, -1.3548596, -1.2078041, -1.0715795, -1.3628885, -0.895939, -0.79696196, -1.0516008, -0.7873496, -0.7411404, -1.0266874, -1.6383885, -0.7790249, -0.7705543, -1.0220681, -1.0377313, -0.95866215, -1.0646464, -1.2318766, -0.8416069, -1.0857205, -1.3508493, -1.0250691, -0.7554236, -1.2693433, -0.7089957, -1.5169703, -0.68931425, -0.92620236, -0.8353271, -0.82917625, -0.62339437, -0.99650085, -1.5622008, -1.2203263, -1.1878941, -1.4765059, -2.4610686, -1.033241, -1.1396645, -1.6011978, -1.1930758, -0.9267733, -0.9729251, -1.3341185, -1.0385826, -0.6454081, -0.60673964, -1.0060118, -0.9427047, -0.9003368, -0.90673447, -1.2340496, -1.0492711, -3.363109, -2.0330606, -1.0982486, -2.7784495, -1.5517746, -2.2327852, -1.1796428, -2.6232302, -2.162269, -3.54792, -1.6273329, -1.846263, -1.3899765, -4.4950037, -2.3274353, -2.5995972, -3.1184244, -1.998079, -2.848405, -1.6703528, -2.4962456, -1.6481466, -3.440863, -2.6396058, -2.9867055, -2.670095, -1.41553, -1.5924307, -1.4283478, -1.1941426, -2.6631145, -1.681505, -2.669729, -1.8716806, -1.4485921, -3.8915946, -1.7940518, -1.3624225, -2.0018167, -3.7898927, -1.0225416, -1.9008695, -2.9503803, -1.1070347, -1.7413036, -1.7370498, -1.1614032, -1.8687525, -1.8824614, -1.1254486, -1.7149575, -1.7517456, -1.09711, -2.1374192, -1.3370602, -1.3006828, -6.7224092, -1.5339332, -1.0457886, -1.276754, -3.4331303, -1.6579875, -2.1001787, -1.690451, -1.8255048, -1.8420224, -0.90034497, -1.0836391, -2.4854763, -2.548339, -1.9398812, -1.4311638, -6.7015624, -1.0492077, -2.898579, -3.2530568, -2.267042, -2.1777713, -2.7854774, -1.7165158, -2.1922739, -1.6294314, -3.1127849, -3.2658153, -3.1945748, -2.37653, -1.6131859, -1.9520547, -2.718332, -1.8190503, -2.4957001, -3.5247574, -1.804782, -1.4233923, -2.1619806, -1.8960294, -1.3675936, -1.4663973, -1.6324245, -1.3808581, -2.4436696, -1.645096, -0.7788095, -0.6247076, -1.2705113, -1.5623835, -2.6446254, -1.5811759, -1.0504855, -6.6227217, -5.9884167 ], "pointIndex": [ 7, 504, 226, 39212145, 24172071, 63328689, 64391118, 80415529, 79126737, 81548709, 77773432, 113781713, 45052060, 63749217, 111353902, 111742931, 59065567, 113400660, 106333244, 92186730, 112305367, 5020307, 19122326, 13956955, 37768826, 72182442, 44295021, 48397330, 19062050, 105440754, 106754985, 62469862, 67227185, 71449425, 108893739, 84983029, 89703916, 95292207, 57488522, 119775888, 110360335, 105944426, 5519420, 23569782, 103807625, 14868430, 94940360, 38835649, 41730968, 43929060, 43492514, 36987043, 7288799, 60860404, 50942648, 38573793, 115194212, 54955231, 9713218, 10423051, 62160467, 64660088, 67093319, 16165124, 72556718, 97362277, 110787379, 82336653, 84240227, 87221624, 10841983, 107072852, 95670596, 27229074, 104610343, 114059877, 95223577, 122325223, 497 ], "storeSequenceIndicesEnabled": false, "size": 226, "capacity": 256, "initialAcceptFraction": 0.125, "timeDecay": 1.0E-4, "sequenceIndexOfMostRecentTimeDecayUpdate": 0, "maxSequenceIndex": 504, "compressed": true, "randomSeed": 443867406360206419 }, { "version": "2.0", "weight": [ -0.46440938, -0.55194354, -0.5503501, -0.55612004, -0.57011396, -0.5687599, -0.5504094, -0.6050909, -0.5642461, -0.6262973, -0.57370365, -0.63136375, -0.59516186, -0.55939776, -0.59046006, -0.6264104, -1.2096254, -0.60545015, -1.0312783, -0.66549975, -0.7972616, -0.5882695, -0.77537113, -0.6631247, -0.97287655, -0.6211128, -0.6168714, -0.5831981, -0.5755868, -0.9301831, -0.68822616, -0.9176543, -0.89416593, -1.2748886, -1.299621, -0.8893791, -0.6247632, -1.1938516, -1.4159937, -0.79601777, -0.81408983, -0.8329688, -0.8892465, -0.660977, -0.9649444, -0.8232206, -1.1116574, -0.7901643, -1.1673359, -0.9826653, -0.9795712, -0.65056336, -0.6972535, -0.8124611, -0.8433622, -0.6048559, -0.5874916, -0.7510074, -0.9282149, -1.5678449, -1.0508904, -1.1219891, -0.89590734, -1.1569976, -1.2163044, -0.9758314, -1.1721662, -1.6305572, -1.423851, -2.877465, -1.3352257, -0.94389266, -1.0725486, -1.0377557, -0.6702163, -2.1633449, -1.6787019, -1.5197566, -1.464606, -0.84717834, -0.8617492, -1.1352758, -0.8588444, -1.3158804, -0.93582493, -1.3900374, -1.312389, -0.8095709, -1.1310865, -1.4500014, -1.0954881, -1.4290438, -1.9153944, -1.1448199, -1.3486769, -0.848019, -1.28376, -1.5707656, -2.1327546, -1.2360355, -1.8001504, -2.4112065, -1.1716948, -0.7562583, -0.7529761, -0.97947717, -1.4603944, -0.85283864, -0.9359614, -0.87537324, -1.0744178, -0.9669737, -0.65526927, -0.76069856, -0.6492787, -1.1887507, -1.4968824, -1.8659223, -1.6839557, -2.8952484, -2.0116107, -1.9978883, -3.5571594, -3.4723294, -1.6517309, -1.8540668, -2.5876698, -3.1918757, -1.4802592, -3.1979494, -1.2262383, -1.3654613, -1.4973582, -3.4507692, -3.1694086, -1.9254063, -5.152074, -1.553401, -1.8380904, -3.0006897, -3.0137157, -2.1162019, -1.655828, -1.031361, -1.5780444, -1.4910339, -2.0867536, -1.985997, -1.4112707, -1.3098238, -0.8342073, -2.2895734, -2.759206, -2.8878415, -2.9131627, -2.8809798, -2.5492322, -3.8534236, -1.8139232, -1.133239, -3.4292166, -6.1477556, -2.3670046, -3.3983068, -1.2114067, -3.470149, -2.30582, -5.7869906, -2.0662296, -1.5458041, -2.3490396, -3.2671423, -1.6294608, -2.9943771, -2.3128247, -2.9752448, -3.2546005, -1.285794, -1.847425, -2.8550897, -1.7487998, -1.1289887, -1.5940181, -2.1344016, -2.2462327, -2.1513886, -3.020991, -3.056209, -2.1476986, -1.449248, -1.5552889, -1.5682355, -1.3316531, -3.897052, -1.3796781, -2.231988, -1.6785682, -2.6739948, -3.0805538, -3.0601883, -3.3602982, -3.3161924, -2.250506, -2.8370016, -3.9633605, -5.9724317, -1.6216393, -1.413277, -0.8392533, -5.599172, -2.7745616, -2.7916412, -1.7649142, -2.2872913, -1.9738077, -2.6074562, -1.1445656, -1.2890749, -2.647072, -2.0012999, -1.7970166, -2.9343374, -2.818287, -3.303542, -0.97759485, -2.3368385, -2.182434, -3.0812023, -1.9679145, -0.9874132, -0.72272855, -2.6502638, -1.4007757, -1.6466194 ], "pointIndex": [ 0, 504, 234, 69537992, 91445418, 19390374, 28720100, 24477262, 57926693, 19248800, 6294096, 107055478, 1769480, 89281685, 49819340, 14918544, 66508569, 19778600, 85497112, 34258159, 116497451, 124776842, 60003625, 7548891, 59501782, 103625696, 125092715, 52468681, 618331, 61076944, 105684622, 91178763, 11364797, 107376926, 31656572, 83561758, 120265579, 97611816, 14491424, 114217289, 123716365, 128784073, 15728235, 32719135, 183378, 42413085, 89850175, 71310800, 18559145, 60809821, 110463371, 106184965, 51872121, 102370607, 9800332, 57747978, 22822474, 103522097, 9064348, 11101780, 99851390, 117196965, 73336535, 75285846, 27693273, 28463006, 80378635, 80900038, 30152149, 96680559, 90712670, 96075623, 99012189, 102751726, 56593235, 110128911, 112942886, 34690435, 35691352, 35441887, 36498903 ], "storeSequenceIndicesEnabled": false, "size": 234, "capacity": 256, "initialAcceptFraction": 0.125, "timeDecay": 1.0E-4, "sequenceIndexOfMostRecentTimeDecayUpdate": 0, "maxSequenceIndex": 504, "compressed": true, "randomSeed": 2055649794410205326 }, { "version": "2.0", "weight": [ -0.44288203, -0.4733615, -0.45990443, -0.5049441, -0.48364964, -0.46929833, -0.5951013, -0.51562756, -0.50766015, -0.51539856, -0.5068618, -0.5359355, -0.51409596, -0.6012245, -0.672219, -0.5989203, -0.53809875, -0.5351609, -0.53932685, -0.5565911, -0.52460414, -0.774303, -0.566129, -0.54035103, -0.7583755, -0.5659491, -0.5352195, -0.68098015, -0.6640686, -0.7816395, -0.77675265, -0.8260454, -0.6643803, -0.8596022, -0.6064849, -0.6059143, -0.68557113, -0.58883345, -0.6485081, -0.6736849, -0.7512264, -0.5525414, -0.7294364, -0.79328084, -1.1318378, -0.6086408, -0.73085433, -0.620078, -0.6123451, -0.8122214, -1.075476, -0.62589544, -0.6219365, -0.8617798, -0.60795546, -1.1461984, -0.89067245, -0.70753044, -0.97933424, -1.4291743, -1.1285313, -1.6885188, -1.0900038, -1.0275611, -1.0758282, -1.024274, -1.3263488, -2.243545, -0.8787395, -0.97567546, -0.79980785, -0.6283274, -0.71997434, -0.72288865, -0.7504799, -0.92405844, -0.68834955, -0.8254108, -1.2518294, -1.4317335, -0.81669384, -1.2866132, -1.3988098, -0.9238192, -0.82263625, -0.8600533, -1.1017289, -0.929503, -0.8326041, -1.9470408, -1.1576751, -1.2693574, -0.828232, -1.6521869, -1.1554543, -0.7606298, -1.7863603, -1.0608599, -0.7879148, -0.8942874, -1.3608972, -1.4805124, -1.3453927, -1.2434686, -0.62647575, -0.9385256, -0.76255625, -1.2914335, -1.3336471, -0.7012181, -1.076786, -1.3590081, -1.7965043, -1.2802029, -1.2463863, -0.9444799, -0.8902152, -5.1300464, -1.9487566, -2.5945091, -3.9016354, -1.3708203, -1.7007787, -5.8792505, -2.924918, -2.0084155, -1.5516672, -1.9452276, -2.7344933, -2.4761894, -2.3559952, -1.6918682, -4.0521593, -2.8841708, -4.250247, -2.6824002, -2.351825, -7.0725884, -3.8799038, -1.0702031, -1.7500367, -1.7154711, -2.2885256, -1.1017034, -1.0053222, -3.9765737, -0.8603018, -1.6386056, -1.4199564, -1.0428835, -2.1775246, -1.817723, -1.5003532, -4.018854, -4.3493705, -0.86794126, -1.9145643, -1.7242973, -2.7774487, -2.593774, -2.8310463, -1.1839824, -0.99695164, -1.3106467, -2.2921367, -2.6983166, -1.6927524, -2.2582834, -1.862477, -1.604147, -1.1071069, -1.5620903, -1.6573658, -3.5879345, -1.8574893, -5.450627, -2.953317, -1.379029, -3.140232, -2.237678, -2.3773768, -1.4420193, -1.2076032, -1.6367044, -1.5738162, -2.370365, -2.294873, -2.259818, -3.3089173, -2.3828115, -1.4231418, -2.0798078, -3.65892, -2.782997, -2.4264176, -3.1848116, -2.5167139, -2.035897, -0.9078463, -1.9608375, -1.0440569, -2.198517, -3.9061434, -2.4758701, -2.5298085, -2.2807584, -1.8718891, -1.7454989, -1.5738424, -1.5848371, -1.9713155, -1.3583566, -1.9085646, -0.78653663, -0.91740644, -1.4229441, -4.3172007, -2.259679, -1.9394193, -2.3271387, -2.017966, -1.5892746, -1.1223392, -3.2935107, -1.9982659, -2.696077, -4.7974358, -4.0544963, -1.7201512, -4.663512, -2.5073416, -2.0538328, -1.1117074, -1.6175225, -1.0261378 ], "pointIndex": [ 0, 504, 235, 99588220, 76013627, 19457571, 85439945, 34908503, 53846803, 63291537, 28617007, 56293943, 38760239, 45478888, 49224639, 20952121, 10945812, 70524642, 113401068, 89973135, 32545594, 121351398, 30164645, 41959089, 16114615, 34039935, 15397635, 65264377, 56470190, 60045792, 120239339, 65801832, 121529019, 72480908, 107004937, 81560839, 12924994, 92743100, 63497, 107566904, 116513017, 126651450, 37815476, 100255780, 41648880, 41052862, 44501779, 45860742, 23535023, 22280250, 48943274, 49573865, 51773427, 101774133, 20817324, 57752019, 59792965, 82798362, 10579199, 66130504, 112340598, 69028211, 40608197, 103680196, 73078149, 67610248, 28456353, 77633952, 83048960, 84438350, 89740547, 98945000, 93624260, 102291671, 124136951, 100718338, 50707467, 109734397, 118807444, 126147953, 128014075, 504 ], "storeSequenceIndicesEnabled": false, "size": 235, "capacity": 256, "initialAcceptFraction": 0.125, "timeDecay": 1.0E-4, "sequenceIndexOfMostRecentTimeDecayUpdate": 0, "maxSequenceIndex": 504, "compressed": true, "randomSeed": 5184381769321948633 }, { "version": "2.0", "weight": [ -0.5680312, -0.57754153, -0.5803335, -0.58679545, -0.5828035, -0.58446527, -0.59277546, -0.6110242, -0.6347451, -0.650318, -0.5963477, -0.589384, -0.608581, -0.6600299, -0.65432173, -0.618048, -0.89475805, -0.69706285, -0.65788984, -0.7013913, -0.66922814, -0.82567894, -0.7393027, -0.6538014, -0.62519866, -0.68216234, -0.6155415, -0.68521684, -0.68252844, -0.8635453, -0.6732785, -0.95870876, -0.683223, -1.0384604, -1.0183295, -1.1785916, -0.7090885, -0.89864945, -1.1735743, -0.99098986, -1.2033477, -0.8001452, -1.0698832, -1.0053589, -1.1478246, -0.82658064, -0.7682891, -1.2017244, -0.71174425, -0.6443983, -0.67368025, -0.7728953, -0.8445695, -0.74427897, -0.75514364, -0.7461769, -0.74116397, -0.82120323, -1.0424049, -1.4037803, -1.8726203, -0.74156517, -1.0557835, -0.96516573, -1.1816691, -1.1345637, -0.8071123, -1.1318005, -1.5799372, -1.0468409, -1.3268329, -1.1965047, -1.5018703, -1.9639885, -0.9940779, -1.2910422, -1.6323619, -1.2475739, -1.5904983, -2.8499577, -1.687947, -1.3974866, -1.5153632, -1.2589599, -1.3481356, -1.0943612, -1.3469661, -1.0530231, -1.0110728, -2.2912538, -2.0522537, -1.311908, -1.1040617, -1.49376, -0.9379908, -1.2910535, -1.2647202, -1.465746, -1.0292729, -0.903422, -0.9057903, -1.0987015, -0.9196338, -1.5492829, -1.8007623, -0.8688556, -1.5213107, -1.3652006, -0.7674869, -1.199262, -1.0817316, -0.7907398, -0.8617374, -1.2053959, -0.7756612, -0.8560713, -0.8616877, -1.3875729, -1.4480209, -7.3676667, -1.7680417, -1.9234877, -2.000328, -1.7633696, -3.9967668, -1.7751657, -1.7586172, -1.360004, -2.5315728, -1.2654521, -2.6796257, -2.3294647, -2.5737264, -3.0398452, -1.5801363, -1.390896, -1.3436232, -4.408353, -2.7197933, -5.5573773, -1.6548759, -1.8081745, -4.581191, -2.2083158, -1.2077483, -1.9272752, -2.1264136, -2.210442, -2.9746046, -1.8114252, -1.5349617, -5.21763, -3.5900617, -4.7764673, -2.1318388, -1.4026515, -2.02728, -4.707749, -2.9943347, -4.005021, -2.996215, -3.1028323, -2.4414601, -2.6545715, -1.9498566, -2.0314212, -2.6523108, -1.9968216, -1.4356999, -2.427331, -1.6129284, -1.7536944, -1.2429045, -2.0530457, -6.1134977, -3.2139742, -1.5324388, -1.9248765, -2.0524924, -3.6633136, -2.5591948, -3.6681902, -3.4150784, -4.0795193, -3.0952582, -1.2616416, -3.3483067, -3.7493348, -1.9752245, -1.8228238, -2.7378254, -2.3111594, -1.3959323, -3.6355662, -1.5012057, -1.8132061, -1.6209233, -1.9733783, -2.1340463, -1.2205851, -0.9665645, -1.0465889, -1.7400819, -1.2885246, -1.5000305, -1.0893486, -1.8212684, -2.766409, -2.371216, -2.1498919, -2.5711405, -1.5781529, -0.9767635, -2.1542985, -3.195587, -1.8495193, -1.589415, -1.8028818, -0.8964406, -6.5694284, -2.386041, -1.7140924, -2.8135862, -3.413123, -1.8383019, -2.5924628, -1.0788869, -3.4721863, -2.3472803, -1.513369, -2.005564, -0.9147193 ], "pointIndex": [ 3, 504, 232, 38649302, 11990578, 81992637, 93291768, 65762442, 18485813, 61602633, 5179386, 102261781, 36540032, 41990296, 76448885, 54237680, 4518924, 67995138, 119087849, 95016431, 108065424, 18145236, 6621405, 82602739, 13689195, 34020832, 47915466, 60266361, 95866064, 22470217, 68911772, 23959189, 87592514, 123638180, 84840840, 88626199, 33952373, 109338161, 77079998, 113625126, 122206333, 33585290, 66678691, 40366891, 8381952, 86515696, 7458778, 74425191, 16869744, 109422026, 47664082, 73178736, 19053106, 51977784, 53968219, 12275988, 79571602, 103617253, 9721202, 60610567, 43523358, 62506069, 66909823, 68497670, 79771835, 71962373, 26767973, 85851873, 78799049, 28153276, 48373087, 96705395, 82853479, 103905866, 12809656, 108756209, 112969720, 117158318, 121449827, 125021075, 501 ], "storeSequenceIndicesEnabled": false, "size": 232, "capacity": 256, "initialAcceptFraction": 0.125, "timeDecay": 1.0E-4, "sequenceIndexOfMostRecentTimeDecayUpdate": 0, "maxSequenceIndex": 504, "compressed": true, "randomSeed": 9169886588161009142 }, { "version": "2.0", "weight": [ -0.53035605, -0.5324966, -0.55486125, -0.5330728, -0.5471217, -0.58455336, -0.5933521, -0.5599782, -0.6342549, -0.6387794, -0.55667377, -0.6493626, -0.74867827, -0.6670967, -0.6307774, -0.6196332, -0.5918868, -0.65830445, -0.6425075, -0.8268777, -0.6852247, -0.56706643, -0.6376095, -0.70883864, -0.9732487, -0.7535966, -0.76869935, -0.7472471, -0.923651, -0.7573382, -0.93107444, -0.6483894, -0.70469373, -0.6645228, -0.7695643, -0.80381304, -0.66245395, -0.82613385, -0.695198, -0.9515421, -1.010398, -0.7056208, -0.76953393, -0.9928844, -0.59132975, -0.99380237, -0.8515312, -0.82218546, -1.1088846, -1.0138144, -1.0554961, -1.2125427, -0.861188, -0.77022, -0.9146566, -0.8259621, -0.76882243, -1.2034107, -1.0809807, -1.5401542, -0.91514635, -1.3669915, -1.4481707, -1.409995, -0.85730594, -1.5939871, -0.73895526, -0.66953665, -0.77782303, -0.88488233, -1.0499003, -1.2570091, -1.1976534, -0.92151576, -1.182133, -0.833123, -0.9230005, -0.8967325, -1.0337293, -1.2166122, -0.99116784, -1.1490904, -1.1511246, -1.397479, -0.9786536, -1.402299, -0.94586, -1.2771218, -1.0545266, -0.59421927, -1.1618001, -1.8738767, -1.1558522, -1.8159966, -0.89378375, -0.8380161, -1.3560284, -2.3792744, -1.461425, -1.2379498, -1.2818031, -1.9932383, -1.3166027, -1.5687723, -1.9454088, -1.445117, -0.9366784, -0.92885256, -1.3723916, -1.2701558, -1.0020772, -1.0913596, -1.3008364, -1.4996603, -0.7830359, -1.7696719, -1.9255613, -3.2565742, -1.7884704, -6.904876, -2.9134037, -1.9650456, -2.221382, -2.0634215, -1.5779783, -2.0036862, -2.2380946, -2.1677172, -4.0049834, -1.6050944, -3.2902942, -4.6903667, -3.661412, -1.959162, -2.357832, -1.53947, -2.2820132, -2.1057246, -2.0005455, -3.5140362, -4.0113697, -2.8073394, -1.3974141, -3.510641, -1.5597332, -1.6886966, -3.7408767, -2.8858912, -3.572505, -1.8949933, -1.8129742, -4.6692724, -1.0588484, -2.3928235, -2.532507, -1.4463307, -3.0277712, -2.9297788, -1.9894695, -1.958042, -1.8407285, -1.2177694, -1.1468236, -1.2246511, -1.1679093, -1.5983938, -2.6404345, -1.760991, -2.9862454, -2.6671734, -1.3666124, -2.2798762, -4.07843, -1.3272638, -1.1056348, -1.3501083, -2.066305, -3.0409312, -1.3775028, -0.90984005, -0.72415125, -1.6538361, -4.1680713, -1.953995, -5.421199, -1.7286031, -2.956821, -1.9774354, -2.0668619, -1.656342, -1.2232676, -0.9585533, -1.0880358, -3.5506268, -2.2162747, -2.78535, -2.4571283, -2.4578626, -1.8101616, -1.5967966, -1.3759114, -1.5432861, -2.9304342, -2.0907807, -2.9865646, -1.413012, -2.822878, -2.1518707, -1.6998991, -2.7407525, -2.152089, -4.4406257, -2.0288308, -1.1662818, -2.3149743, -1.0508428, -4.1577044, -1.7287313, -5.233291, -2.2002838, -2.4515307, -3.343693, -1.1925954, -3.403616, -1.1421292, -2.327714, -2.8356974, -3.2215524, -1.7986864, -1.0376507, -1.9582424, -3.4708614 ], "pointIndex": [ 1, 504, 232, 95940876, 85658404, 48807258, 5729481, 37837239, 9161211, 22735646, 28106346, 68013783, 38134148, 7907680, 49992278, 54106613, 59102940, 69489239, 77880382, 49446833, 105355591, 118604499, 120370463, 40569547, 16849157, 64352906, 47340019, 82652660, 20898060, 21545586, 22413604, 63804236, 66767259, 116482736, 31396222, 29627447, 101324628, 108731924, 119581943, 33754835, 30549495, 7112415, 44789791, 68914851, 16082884, 41912800, 98721568, 47027405, 41238752, 45725007, 18889598, 114310282, 105856109, 52174821, 9503028, 2075681, 91137023, 81857977, 58803769, 73782073, 61882364, 114571543, 41576065, 91505261, 72539750, 75591724, 77472155, 12287422, 83482431, 35221081, 2994602, 88829860, 95147664, 35610587, 32033118, 110962144, 115815305, 24617835, 122676595, 127514003, 142 ], "storeSequenceIndicesEnabled": false, "size": 232, "capacity": 256, "initialAcceptFraction": 0.125, "timeDecay": 1.0E-4, "sequenceIndexOfMostRecentTimeDecayUpdate": 0, "maxSequenceIndex": 504, "compressed": true, "randomSeed": 7625825163713561172 }, { "version": "2.0", "weight": [ -0.68963563, -0.71228534, -0.69185126, -0.72458655, -0.73350304, -0.70023793, -0.6973863, -0.7521709, -0.74596405, -0.75555176, -0.7994502, -0.70423424, -0.71557814, -0.80184543, -0.7378255, -0.90932745, -0.8513464, -0.945497, -0.75618273, -0.9176568, -0.91030234, -0.870406, -0.8781088, -0.7445866, -0.7060583, -0.8570121, -0.71676576, -0.9451282, -0.98158306, -1.0464047, -1.2191277, -1.2070265, -1.1122887, -0.91584504, -0.9098384, -1.0282311, -1.0526453, -1.0620815, -0.9422277, -0.98331505, -1.0915213, -0.9253102, -0.972425, -1.5254942, -1.0299138, -1.0033057, -0.9877612, -0.8424406, -0.7661645, -0.8719801, -0.74254644, -0.87919515, -1.1128438, -0.82937247, -0.8437849, -1.4884276, -1.8097106, -1.6915003, -1.1752342, -1.2706611, -1.5071601, -1.4045566, -2.038409, -2.151111, -2.0421367, -1.4022131, -1.5389507, -1.3170675, -1.315749, -0.93967783, -1.2088668, -1.3546461, -1.1657493, -1.3647672, -1.3999888, -1.6134369, -1.1775569, -1.5266851, -1.5846884, -1.1892252, -2.184959, -1.4332705, -1.6650143, -1.119504, -1.1874212, -1.0438701, -1.1250359, -1.9323465, -2.3231916, -1.4397689, -1.2220843, -1.2882428, -1.0033833, -1.0603511, -0.98936176, -1.4499718, -0.9140737, -1.0238861, -1.1773385, -0.9237867, -1.4686022, -0.97709936, -0.75256306, -1.2221575, -1.3114357, -1.1347244, -1.7514151, -1.123055, -0.8995096, -0.86474705, -0.85333395, -2.048599, -1.9980121, -2.3663135, -1.9952893, -2.4167542, -1.9417686, -2.6963432, -1.3648587, -3.931102, -2.0329041, -4.328194, -2.0767705, -1.6628162, -5.6688666, -3.5560164, -2.79209, -2.689386, -3.5538812, -3.9373045, -2.5425057, -1.4241658, -2.6849244, -2.719885, -1.6209738, -3.384303, -2.4125133, -2.8833256, -1.3654975, -1.449889, -1.0091305, -2.6887238, -1.2313497, -1.5814414, -4.6353374, -2.5800967, -2.6386955, -4.811471, -2.0467079, -1.5542631, -4.6060424, -1.8895761, -1.7013047, -1.4387131, -1.9494822, -2.21773, -2.4674315, -1.9776376, -2.1961777, -3.6641738, -1.4983013, -3.065605, -2.5193455, -2.4397542, -1.6718928, -1.8533777, -3.6097572, -2.178392, -1.6004324, -1.533436, -1.2607406, -1.5537279, -3.823595, -2.2444324, -1.2052363, -2.4344325, -1.996442, -2.5809674, -2.397142, -1.9402657, -3.9277935, -1.531284, -1.3297614, -1.4778779, -1.8241446, -2.1734576, -1.2779739, -1.3039699, -1.2775682, -3.7285767, -1.7983359, -2.3423522, -3.0988562, -5.8211617, -1.0550694, -5.147151, -1.402445, -1.5902166, -4.214791, -1.2044046, -2.8841598, -1.496543, -1.6186411, -2.2231202, -3.8776445, -1.3348498, -3.221405, -1.6098989, -2.5724285, -5.3377237, -1.8548803, -1.764812, -1.3415471, -5.20307, -2.0851576, -1.914553, -2.0306556, -1.0157343, -1.0076644, -1.2212769, -1.0830055, -1.6060807, -5.5612807 ], "pointIndex": [ 2, 503, 223, 39112803, 104990114, 81937957, 100213345, 38376824, 93871402, 106658479, 78636624, 124971297, 15024299, 17742985, 72679231, 55114284, 61605062, 80242238, 79029880, 97582134, 117911316, 39630890, 63755532, 15610385, 27111429, 44667628, 95898681, 55537610, 105882141, 57752310, 107102110, 71106035, 8477543, 75496573, 110934773, 88507968, 98972924, 112105035, 86434716, 120953345, 21224130, 34552766, 3241555, 15145986, 16709245, 4633963, 3355562, 43882594, 44439062, 46207160, 1501667, 48161858, 32358115, 23484559, 23372477, 56610622, 45983463, 92602974, 60857406, 63897868, 65522801, 68204117, 11338446, 80785638, 110850108, 77107000, 94909029, 86604853, 109040266, 106369672, 97466705, 103041026, 29702452, 114035833, 115899372, 118423772, 123722046, 501 ], "storeSequenceIndicesEnabled": false, "size": 223, "capacity": 256, "initialAcceptFraction": 0.125, "timeDecay": 1.0E-4, "sequenceIndexOfMostRecentTimeDecayUpdate": 0, "maxSequenceIndex": 504, "compressed": true, "randomSeed": -1521360444406908161 }, { "version": "2.0", "weight": [ -0.448413, -0.4563397, -0.45389304, -0.46477798, -0.47320774, -0.47462812, -0.47083667, -0.61239666, -0.5819031, -0.5328883, -0.55435115, -0.5672333, -0.49760112, -0.5436042, -0.59967595, -0.64196426, -0.77108985, -0.5990893, -0.68164337, -0.6658914, -0.6779405, -0.65547, -0.57186633, -0.7292096, -0.6201713, -0.5016417, -0.5391519, -0.5894515, -0.67855585, -0.793728, -0.95858973, -0.75544524, -1.1236985, -0.7778626, -0.87012255, -0.6094903, -0.8075542, -0.6905392, -0.7119214, -0.7561649, -0.7637378, -0.74645245, -0.7054175, -0.7976067, -1.184815, -0.679329, -0.6759231, -0.80786866, -0.802765, -0.73436123, -0.7933314, -0.7040496, -0.5593558, -0.58655614, -0.60826343, -0.6955069, -0.79697454, -2.0321658, -2.3671505, -1.2036948, -0.91650933, -1.2221347, -1.4929575, -0.82133824, -0.99631953, -1.2400419, -2.2688756, -0.8122746, -1.5502583, -0.95800006, -0.9741957, -0.91015464, -1.0454623, -1.6839831, -0.8809304, -1.0153738, -0.81790936, -1.3347377, -0.85336673, -1.419818, -1.2422366, -1.3848045, -1.8259623, -0.8008377, -1.4634923, -1.2378216, -0.83597064, -1.2431781, -1.0476589, -1.1947871, -1.502235, -1.1875122, -1.0802674, -0.7131609, -1.303804, -0.93148845, -0.868008, -0.91230166, -1.2311869, -0.7778201, -0.8125608, -1.0481919, -1.0332779, -2.4180708, -0.90919775, -1.0201457, -0.74089086, -0.7694123, -0.6068406, -1.9599571, -0.64965326, -0.80325395, -0.70115393, -1.4920911, -2.105182, -2.593633, -4.9075894, -2.4500175, -2.6866624, -2.011585, -1.2831956, -1.6990656, -5.3042397, -4.074707, -2.3969848, -1.8422551, -1.7336991, -2.014161, -1.1614549, -2.387507, -2.2531638, -1.5358254, -2.0135787, -2.4276953, -2.544838, -0.8222214, -1.783477, -2.3671846, -2.0942051, -1.530744, -3.109618, -2.4571917, -4.8672504, -1.750401, -1.1609975, -1.5165246, -2.134081, -1.7671065, -2.9051976, -2.3550234, -1.3915247, -1.6891075, -4.364541, -1.8734646, -1.9972665, -1.9541153, -1.9995427, -1.3496068, -0.99282694, -2.723645, -2.133502, -1.6864717, -1.82967, -1.3975633, -2.5430946, -2.8813655, -2.819163, -2.3204596, -1.1076525, -1.9235603, -1.9012809, -1.8713926, -1.4276859, -5.034833, -1.3538642, -1.7771684, -2.354052, -3.5404406, -1.6530912, -2.0195994, -2.6805522, -3.3481433, -2.3543854, -1.8849224, -1.7921944, -1.9087023, -1.5636692, -4.559099, -0.9331611, -2.0087197, -3.0887632, -1.7429163, -1.8492596, -1.4279119, -2.107058, -1.9292601, -1.2173969, -1.7226368, -1.288711, -1.5266242, -1.0676883, -0.82271296, -2.72016, -1.95744, -1.6681421, -1.561834, -1.139806, -2.7807567, -2.852466, -1.5560211, -2.8218806, -2.6191962, -3.2710078, -1.9588827, -0.9443455, -1.0752059, -2.6169057, -1.3419697, -3.6202824, -2.6320822, -2.3424454, -3.1701627, -1.705714, -2.471587, -1.706018, -3.0725029, -0.78821653, -3.9174464, -1.8377808 ], "pointIndex": [ 1, 502, 229, 124615864, 110763474, 66359894, 79907579, 35495826, 45985371, 23556059, 99951616, 111833388, 35827229, 64730104, 89025, 55394228, 87863787, 73136326, 80548010, 90110354, 31092250, 125987025, 27087925, 3716780, 20623733, 43597728, 45811303, 48424553, 4840676, 123094759, 4513018, 24238832, 31302989, 58364321, 27878880, 89627407, 54208096, 96030457, 6524879, 114400195, 49457760, 17319422, 15150999, 23999127, 111962595, 38632545, 64027745, 118741542, 17979860, 56032910, 45211702, 46460679, 20337475, 59822455, 95109119, 109122258, 21832209, 68020971, 10293097, 86314633, 90878049, 87951177, 114630977, 75148188, 77180011, 78900649, 5601924, 93405592, 83673586, 10641235, 91171577, 91661234, 6995240, 30253916, 119912134, 109594041, 113369225, 120188293, 33002468, 501 ], "storeSequenceIndicesEnabled": false, "size": 229, "capacity": 256, "initialAcceptFraction": 0.125, "timeDecay": 1.0E-4, "sequenceIndexOfMostRecentTimeDecayUpdate": 0, "maxSequenceIndex": 504, "compressed": true, "randomSeed": 4365738981533818552 }, { "version": "2.0", "weight": [ -0.5989758, -0.6030343, -0.6106647, -0.617829, -0.6120543, -0.6209751, -0.6540577, -0.7291006, -0.6260681, -0.6240438, -0.63892895, -0.6271658, -0.6558473, -0.67823005, -0.6712329, -0.7736877, -0.8370473, -0.8698825, -0.63718224, -0.66500527, -0.76872224, -0.7976186, -0.64789164, -0.75742877, -0.7079197, -0.66363484, -0.7033005, -0.6999278, -0.7570301, -0.8842918, -0.86259925, -1.0528697, -0.9030894, -1.0192664, -0.87634534, -0.97609395, -0.870785, -1.2165607, -0.8950667, -0.9456082, -0.81416637, -0.90334135, -0.9257617, -0.95053643, -0.8269434, -0.68671584, -0.9238147, -0.91530436, -1.2250437, -0.8648471, -0.9400571, -0.77502626, -0.69389594, -1.1458131, -0.9694328, -0.7568269, -1.0375473, -0.8990032, -1.1046243, -1.6111062, -1.2231795, -1.7332932, -1.2406415, -1.0933986, -1.4834079, -1.3647826, -1.162224, -1.0776985, -1.0275012, -1.0436147, -1.2653149, -1.7329624, -1.0180838, -1.0981978, -0.9358566, -1.3720297, -1.4376353, -1.0709182, -1.0828278, -0.9824067, -1.8678888, -1.6504165, -1.0274376, -1.0305225, -1.1328106, -1.4048452, -1.0147716, -1.2578955, -1.1658182, -1.8569355, -1.256529, -0.8613851, -0.73715734, -1.231118, -1.3888869, -1.298621, -1.3348144, -1.2907434, -1.3547943, -0.91213906, -2.81691, -1.2689966, -1.3123076, -0.8410366, -0.818469, -0.95411783, -0.85013014, -1.292814, -1.3674784, -1.4650946, -1.6974814, -0.7731692, -1.556783, -1.9376053, -2.6791103, -2.8065603, -3.4199686, -2.632667, -3.097106, -2.398917, -2.5683875, -1.318025, -3.004227, -2.803569, -1.7933978, -2.2934864, -2.2485514, -1.731055, -1.157685, -1.9098945, -2.593425, -1.854552, -3.8862267, -1.2046897, -1.6525576, -1.6870998, -1.3142855, -3.2718213, -2.055217, -1.2397898, -1.3642328, -3.6667328, -2.4019687, -3.7105029, -2.5529263, -3.6775377, -3.4969838, -2.5784345, -3.47127, -2.0122714, -1.2789313, -1.7605172, -2.4059713, -2.830982, -1.5596879, -1.1299579, -2.445495, -2.1350765, -2.6100347, -1.7369318, -4.3140836, -2.028551, -1.9430747, -2.796395, -5.855211, -5.55672, -2.097489, -2.3304756, -2.0556016, -2.3982108, -1.8669431, -2.6178248, -2.3411436, -1.0704573, -1.0604006, -2.2578304, -2.3912299, -1.3100142, -1.2620088, -1.9373451, -2.2696261, -1.309974, -1.3542323, -2.646746, -0.89304143, -2.8895712, -1.4734464, -4.183573, -1.3531339, -1.6352302, -3.697477, -2.8222086, -3.847648, -1.4322337, -2.2488072, -1.5600172, -1.3510327, -2.5411255, -1.7665361, -1.1097009, -1.1876982, -6.4440703, -3.827908, -1.6914281, -2.3275604, -4.6303954, -2.2944593, -1.0078675, -0.9225348, -1.9457649, -2.338592, -2.6975172, -3.4240358, -2.4394717, -0.8670702, -3.9153588, -1.4039124, -1.5496547, -4.910925, -1.6267688, -2.5536485, -2.1050537, -2.210298, -1.024319, -1.2126342, -1.8602599 ], "pointIndex": [ 1, 504, 226, 98429960, 112656297, 97879958, 97194275, 7373483, 50394127, 81304428, 11835750, 121966368, 35984071, 50958101, 84195903, 24589368, 64319713, 100139347, 87559209, 107136641, 117838144, 32701006, 35765779, 25433494, 25147855, 46773108, 18929866, 66570036, 57057252, 60835908, 22833967, 70319399, 38498169, 93120334, 86293692, 21093512, 22041922, 106002956, 64746981, 122673071, 40642181, 37877243, 7182531, 36374056, 82994547, 90761342, 102959872, 45036745, 46067631, 48358483, 18563435, 29229391, 19184263, 113583996, 56503154, 59226275, 123570234, 22119290, 64825232, 127647664, 69875154, 98054970, 58565901, 74327999, 76273637, 104065828, 1185237, 88841019, 92894678, 16534084, 105157004, 44909320, 122969354, 112214521, 30448094, 33692792, 49009014, 125650218, 79 ], "storeSequenceIndicesEnabled": false, "size": 226, "capacity": 256, "initialAcceptFraction": 0.125, "timeDecay": 1.0E-4, "sequenceIndexOfMostRecentTimeDecayUpdate": 0, "maxSequenceIndex": 504, "compressed": true, "randomSeed": -3752382720585822890 }, { "version": "2.0", "weight": [ -0.35257456, -0.63316864, -0.6249559, -0.644586, -0.70678765, -0.64916795, -0.6261788, -0.7028251, -0.68006915, -0.71244913, -0.77226007, -0.6599282, -0.72423315, -0.64820457, -0.86892164, -0.80033886, -0.9883338, -0.7176925, -0.8587724, -0.7907359, -0.7907442, -0.8138974, -0.8363504, -0.8191511, -0.7210162, -0.8011215, -0.7275551, -0.6740003, -0.76122135, -0.9360815, -1.143798, -1.069601, -0.89091927, -1.4255719, -1.0564026, -0.7504338, -0.74547905, -0.8932367, -0.9149731, -0.89604896, -0.89056855, -1.0763606, -1.2780377, -0.814832, -0.87155193, -1.1978128, -0.9658152, -0.91909224, -1.1020787, -0.9806116, -0.80837256, -1.121417, -0.959307, -0.82256985, -0.78294426, -0.8547436, -0.6911423, -0.9919269, -0.9217603, -1.1567005, -1.0467317, -1.1764008, -2.3090951, -1.9561859, -1.4364341, -0.9376694, -1.1808302, -1.6580477, -1.5421588, -1.2061565, -1.3012215, -1.1677957, -1.6640215, -0.9539052, -0.9304223, -1.4524605, -1.1548522, -3.087163, -0.9651231, -1.1932969, -1.7018605, -1.1340724, -1.1854857, -1.1199478, -1.6968377, -1.7598923, -1.5454631, -0.83821553, -1.3094827, -0.9318102, -1.0099014, -1.4364564, -1.6273265, -1.3257332, -1.6213363, -1.0319413, -1.9782693, -1.5172966, -1.8712493, -1.3883024, -1.1409416, -1.5943706, -1.3920141, -1.2470638, -1.3488907, -1.2877753, -2.3829832, -1.0140915, -0.86199796, -1.969369, -1.2389947, -1.1190457, -1.0083293, -1.5217599, -2.4827971, -3.2721095, -1.832073, -1.0300539, -1.3891287, -4.1304526, -2.2308176, -1.1684897, -1.3797816, -1.6611247, -3.9026396, -2.3507211, -2.3537116, -4.3257017, -3.9033318, -3.0079002, -2.1621022, -3.0395641, -1.1423059, -2.8617375, -3.5767941, -2.289676, -4.3020816, -2.492416, -1.7381042, -1.8634133, -2.2264454, -2.779647, -3.4513872, -1.451247, -1.6320184, -5.162463, -2.647772, -1.6107192, -1.6144214, -1.3170866, -2.3347747, -1.5668651, -1.5948402, -2.1280186, -2.3939443, -4.045837, -3.275819, -1.6477028, -1.5976466, -2.7628117, -2.4815483, -2.3328712, -3.8712041, -2.2842953, -1.4850677, -2.7312644, -2.5408404, -2.7129276, -2.680968, -1.9831715, -2.7402458, -1.7652198, -2.2835853, -1.6363691, -2.0129876, -2.5755525, -2.2679524, -2.9405003, -1.3456973, -1.4536569, -1.5227104, -6.832543, -1.6134499, -2.1005044, -1.5718675, -2.4156106, -1.9933846, -1.3972045, -1.3527149, -1.6452624, -1.8692507, -5.578517, -2.2867987, -2.0242627, -2.273815, -1.6365331, -1.7262317, -4.741056, -5.9371395, -1.6308647, -3.7583308, -3.0203693, -1.697553, -3.1482482, -1.7286578, -1.5627481, -2.9239838, -5.917072, -1.7130485, -1.6678938, -1.4424074, -1.5029242, -1.4068965, -2.7383819, -3.7690282, -1.0258008, -4.613188, -1.9295435, -2.5107205, -4.164117, -2.1205091, -2.5135174, -1.7840471, -2.2793093, -1.6349511, -1.6482064, -1.0658326, -2.3246038, -2.2873054 ], "pointIndex": [ 0, 503, 229, 47003035, 91960546, 53637672, 28600765, 38427429, 40526672, 26033828, 115488365, 112303677, 49858696, 42759117, 49676271, 21699959, 64819169, 74063572, 88056669, 97891273, 108932556, 12206832, 37949326, 61758732, 43266547, 46161538, 49251921, 20045725, 16366498, 61588018, 31034449, 69264521, 74375881, 51199646, 86387221, 29430627, 95950547, 104463550, 109041831, 115801990, 72897011, 32290592, 16076766, 66841640, 40804401, 41674410, 17596219, 10670356, 18382075, 26510078, 48722314, 51585602, 53045444, 2025613, 21195801, 56912908, 61279871, 125705476, 23011045, 66571601, 75174384, 71934978, 11471, 62130061, 98582289, 100499662, 86025852, 88381278, 39302271, 57339052, 95444371, 101036885, 103842701, 106390806, 38130557, 112724572, 120471251, 124260657, 35299134, 503 ], "storeSequenceIndicesEnabled": false, "size": 229, "capacity": 256, "initialAcceptFraction": 0.125, "timeDecay": 1.0E-4, "sequenceIndexOfMostRecentTimeDecayUpdate": 0, "maxSequenceIndex": 504, "compressed": true, "randomSeed": 3134929515649909125 }, { "version": "2.0", "weight": [ -0.5317006, -0.5549443, -0.55005306, -0.58047175, -0.5792419, -0.5618388, -0.55156845, -0.59663844, -0.6457649, -0.61152357, -0.6713033, -0.85364294, -0.6575595, -0.6192772, -0.7174029, -0.68995684, -0.6509831, -0.6804296, -0.8823458, -0.6229239, -0.63748795, -0.6725953, -0.77007604, -0.86289036, -0.87573314, -0.9368412, -0.6730294, -0.72140056, -0.70452213, -0.85281587, -0.778473, -0.80166095, -0.8534091, -0.97973895, -0.72902834, -1.0171428, -0.7279368, -0.8837121, -0.9821047, -0.81776035, -0.71419483, -0.87666404, -0.6967305, -0.686794, -0.83897287, -1.0782491, -0.79766566, -1.0869834, -0.9266605, -0.96625125, -1.3254075, -0.990544, -0.95162743, -0.68006086, -0.94362134, -0.91446745, -0.76033175, -0.82099503, -1.98926, -0.9402286, -1.1041036, -1.4840512, -1.3193669, -1.1383134, -1.0716103, -1.353175, -1.2287694, -1.0996752, -1.3116969, -0.8533949, -0.78780127, -1.2678065, -1.3051043, -0.892428, -1.0663462, -1.2590696, -1.0059689, -1.5622548, -1.3429893, -0.9912661, -0.91426957, -0.89937264, -0.81522775, -0.8956658, -0.9297555, -1.1325147, -2.0525374, -1.4441347, -0.8413736, -1.7260334, -0.84645754, -1.1753869, -1.0894531, -1.2714784, -1.0054822, -1.9432375, -1.4703784, -1.0627242, -1.0848396, -1.6313579, -1.2841729, -2.3314505, -1.6599146, -1.5145736, -1.1292386, -1.1420798, -1.1882722, -0.7650141, -0.8330598, -1.0279738, -1.5063119, -1.0402813, -1.673066, -0.855341, -0.8344414, -0.8772748, -3.3096359, -2.1580143, -3.2406547, -1.2543756, -1.3132578, -1.7253371, -1.2502601, -1.4913716, -1.6956722, -1.6008805, -3.4310803, -4.0316906, -1.3139403, -1.2990541, -2.7985826, -3.0076113, -2.204242, -2.1400445, -1.8365418, -1.5423521, -2.2629874, -1.9485801, -2.8632088, -1.4487959, -1.7835891, -1.3249984, -0.8726291, -6.6406846, -2.2428896, -3.2130282, -1.9984459, -2.1642005, -2.2802176, -2.3029919, -1.7716421, -1.2956859, -2.674018, -1.4789615, -1.2592919, -1.651695, -2.7735283, -2.754395, -5.219823, -1.8212689, -1.5849502, -1.5373638, -2.1230855, -2.006167, -1.95454, -1.5437725, -3.7523682, -1.6756934, -1.1302894, -2.3797457, -1.5028995, -1.2654449, -3.4029913, -2.4615457, -2.1503222, -2.4433656, -3.428305, -2.0373065, -1.5127231, -1.9826941, -3.430179, -2.1248314, -1.0785834, -1.3342285, -3.162054, -1.7133318, -2.4264777, -2.7424254, -2.205474, -2.1188297, -1.0416778, -3.8446963, -3.152632, -1.5539855, -2.4188478, -1.0664158, -5.486928, -1.2196403, -1.6307973, -2.1837428, -4.4910727, -1.627812, -1.5182625, -2.5001745, -2.4735217, -4.885121, -2.1104615, -1.761913, -1.5156634, -3.1595268, -2.6720266, -2.3196728, -3.2704804, -3.718801, -1.2293067, -1.98525, -1.442857, -2.399521, -1.6830201, -1.3301995, -1.9729538, -5.5065384, -2.9774437, -3.094193, -1.7231919, -2.0231786, -1.9183023, -1.1119088, -1.0021992, -1.0839311, -1.6686866, -2.8646417 ], "pointIndex": [ 1, 502, 232, 30125521, 104207869, 11501672, 117074017, 7291457, 63508587, 23048853, 117747004, 110069385, 49195970, 41410132, 1528660, 90821874, 10375556, 24571484, 119895067, 37777908, 102803209, 122503004, 84265154, 16301591, 74151424, 83856748, 24283422, 107239937, 52268400, 4644238, 60393661, 23482961, 65935747, 70951942, 73063505, 80420200, 28404641, 118557453, 30463815, 125460264, 121125580, 34340303, 86574979, 37513098, 24156390, 48742358, 77536476, 42673052, 118237420, 113489827, 46483872, 40120324, 21519222, 51163760, 22531470, 53478866, 55841307, 57247299, 60599982, 71139165, 113963557, 64030350, 111083161, 2400827, 10908098, 71356663, 105361320, 90624850, 124964176, 72753707, 92804731, 113839913, 97210899, 66840182, 103525693, 111846083, 108929408, 116239059, 69030844, 125742944, 27 ], "storeSequenceIndicesEnabled": false, "size": 232, "capacity": 256, "initialAcceptFraction": 0.125, "timeDecay": 1.0E-4, "sequenceIndexOfMostRecentTimeDecayUpdate": 0, "maxSequenceIndex": 504, "compressed": true, "randomSeed": -6734892575936596101 } ], "compactRandomCutTreeStates": [ { "version": "2.0", "root": 0, "maxSize": 256, "outputAfter": 32, "storeSequenceIndexesEnabled": false, "centerOfMassEnabled": false, "nodeStoreState": { "version": "2.0", "capacity": 255, "compressed": true, "cutDimension": [ 0, 31, 255, 1035009826, 250599463, 603060643, 754644337, 891416226, 782146283, 378713454, 1056620465, 177986421, 928036085, 1071848943, 501577126, 898733163, 254781898, 53861341, 509206381, 333917169, 959170671, 437304017, 659733574, 389488302, 1021681109, 82354001, 762926541, 711943918, 735524973, 1005665057, 320935793, 1029885382, 573999574, 483525999, 72393826, 1050637815, 175233779, 1013619019, 69921914, 199951919, 23503, 0, 0, 0, 0, 0 ], "cutValueData": [ 69, 52, -120, 38, 66, -105, 91, -66, 66, -119, -123, -128, 66, -112, -25, 76, 64, -49, 79, 79, 66, -93, 20, -11, 66, 90, 87, -118, 66, -83, 119, 41, 66, -82, -112, -109, 66, 68, -88, -34, 66, -61, -42, 101, 66, 113, 3, -70, 66, 127, 51, -88, 66, -104, -22, -59, 66, -82, -85, -15, 66, 123, -105, 34, 66, 115, 52, 98, 66, -116, -128, -82, 66, -95, 49, -125, 65, -73, 19, -122, 66, -113, -121, 34, 66, -110, 8, 1, 66, 101, 25, -6, 66, -88, 7, -59, 66, -77, 2, 27, 66, -109, -34, 54, 66, 95, -7, 71, 66, -119, 30, 41, 66, -74, -53, -123, 66, -63, 102, -15, 66, 84, 105, 70, 65, 4, -25, -22, 66, -65, -5, -112, 66, -116, -47, -119, 66, -108, 9, -92, 66, 91, -44, 88, 66, -65, -21, 19, 66, 67, 38, 75, 66, -114, -113, 20, 65, -38, 72, 72, 66, -109, 3, -88, 66, 86, -27, -95, 66, -111, -60, -113, 66, 122, -1, -112, 66, 96, -8, 33, 66, -109, -88, -122, 66, 97, -14, 89, 66, 115, 44, 65, 66, -122, -114, -71, 66, 76, -51, 3, 66, -78, -88, -93, 66, 90, 31, -105, 66, -104, -74, 37, 66, -115, -96, 73, 66, -113, 111, 24, 66, -126, -58, 61, 66, 117, -80, 27, 65, -38, 125, 52, 66, -99, 117, 47, 66, 81, 49, -33, 66, 93, -100, 75, 66, 110, 62, -54, 66, 82, -51, 91, 66, -71, -93, -22, 66, -64, 51, 0, 66, 75, 78, -62, 66, -73, 64, 84, 66, -95, -53, -83, 66, -92, 53, 63, 66, -65, -15, 103, 66, -76, -88, -113, 66, -76, -128, -28, 66, 114, 113, 117, 66, 74, 68, 88, 66, -111, -73, -124, 66, 72, -3, -80, 66, -98, -117, 86, 66, -64, 80, 60, 66, -95, 50, 121, 66, -61, -75, -94, 66, -78, -20, 96, 66, 83, -82, -84, 66, -70, 12, -59, 66, 81, -3, 56, 66, -112, 22, 94, 66, -64, 100, -27, 66, -83, -17, -68, 66, 116, 1, 44, 65, -97, 93, -34, 66, -113, -63, -95, 66, -116, 71, -23, 66, 105, -119, -108, 66, 78, -52, 122, 66, 75, 89, 69, 66, -106, 88, 54, 66, 88, 81, 82, 65, -15, 9, -44, 65, -2, -118, -32, 66, -62, 71, -79, 66, -64, 84, 99, 66, -62, -72, -101, 66, -115, 118, 69, 66, 78, 93, -70, 66, 80, 69, 60, 66, -76, 49, 22, 66, 84, -25, 48, 66, -63, 104, -70, 64, -15, 116, -28, 66, -117, 21, 34, 66, -60, -12, -7, 66, -59, -122, 96, 66, -119, 111, 81, 66, 51, 106, -48, 66, -113, -1, 19, 66, -74, -13, -8, 66, -63, 7, -32, 66, 104, 85, 83, 66, -110, -25, 12, 66, -126, 4, 25, 66, 86, 121, 109, 66, -92, 47, -114, 66, -112, -55, 4, 66, 127, 59, -65, 66, -62, 18, 80, 66, 76, -59, 108, 66, 71, -104, 95, 66, -95, -67, 97, 66, -93, -126, -59, 66, 70, -2, -29, 66, 105, -76, 11, 66, -68, -1, 108, 66, -72, 62, 11, 66, -103, -56, -72, 66, -80, 67, -43, 66, 99, -36, 44, 66, -118, 120, -3, 66, -85, -97, 39, 66, -79, 120, -98, 66, -99, 8, 16, 66, -71, -124, -94, 66, -106, 19, -75, 66, -71, 24, -39, 66, 79, 43, 22, 66, -61, -84, 109, 66, -88, -46, -86, 66, 72, 31, 61, 66, -117, 23, -121, 66, -78, -66, 1, 66, -78, -65, 16, 66, -128, -87, 127, 66, -117, -128, 6, 66, 71, 36, 67, 66, -62, -42, -51, 66, -71, -104, 105, 66, -112, 106, -34, 66, -113, 63, -111, 66, -120, -69, 32, 66, -124, -64, 122, 66, -60, -43, -95, 66, -65, -117, -34, 66, 120, -80, 62, 66, -101, 37, 105, 66, -103, 77, -81, 66, 79, -72, -70, 66, -113, 111, -111, 66, -66, -128, -1, 66, -60, -67, 59, 66, -90, 126, -15, 66, -62, -91, 109, 66, -76, -125, 80, 66, 73, -106, 113, 66, -96, -79, 106, 66, -73, -29, -110, 66, -63, -61, 63, 66, -61, 7, -61, 66, -66, 94, -105, 66, -65, 118, -110, 66, -112, 43, -74, 66, 84, 84, -96, 66, -101, -54, -110, 66, 88, 70, -55, 66, 71, -112, 54, 66, -103, -71, -87, 64, -34, -46, 44, 66, -114, -1, 115, 66, -69, 42, 85, 66, -77, -11, -128, 66, 78, 20, -12, 66, -97, 18, -41, 66, -98, 24, 63, 66, -99, -108, 59, 66, -69, -109, 39, 66, 123, 20, 44, 66, 71, 107, -23, 66, -102, -54, -55, 66, -59, -1, 59, 66, -106, 117, 62, 66, 89, -75, 55, 66, 118, -44, 66, 66, 82, -77, 110, 66, -64, 46, -10, 66, 103, -84, -54, 66, 89, 67, -103, 66, -92, -70, -61, 66, 80, -87, -57, 66, -66, -49, -88, 66, -78, -121, -13, 66, -108, -9, 88, 66, -64, -81, -11, 66, -67, 26, 6, 66, -67, 34, -62, 66, 77, -43, 122, 66, -128, 8, 28, 66, -113, 1, 70, 66, -70, 67, 48, 66, -61, 66, 125, 66, 85, -105, -82, 66, -90, 65, 44, 66, -108, -28, 87, 66, -66, 55, -74, 66, -58, 39, 107, 66, -102, 79, -124, 66, 86, -119, -25, 66, -69, 37, -54, 66, -71, 5, 91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], "precision": "FLOAT_32", "root": 0, "canonicalAndNotALeaf": true, "size": 225, "leftIndex": [ -1, 1, 255, 1162254824, 712052113, 754938941, 595716196, 726452833, 1028151670, 729943241, 644983369, 983697169, 1017110264, 725394985, 23845990, 0, 0 ], "rightIndex": [ -1, 1, 255, 731785498, 1098282959, 1013783822, 1145606648, 582793942, 625851574, 731233652, 644972300, 1098282118, 597311243, 1099823740, 21523369, 0, 0 ], "nodeFreeIndexes": [], "nodeFreeIndexPointer": 29, "leafFreeIndexes": [], "leafFreeIndexPointer": 29, "partialTreeStateEnabled": true }, "boundingBoxCacheFraction": 0.0, "partialTreeState": true, "seed": -4554398593646845892, "id": 0, "dimensions": 32, "staticSeed": 0, "weight": 0.0, "hasAuxiliaryData": false }, { "version": "2.0", "root": 0, "maxSize": 256, "outputAfter": 32, "storeSequenceIndexesEnabled": false, "centerOfMassEnabled": false, "nodeStoreState": { "version": "2.0", "capacity": 255, "compressed": true, "cutDimension": [ 0, 31, 255, 120031194, 258812407, 464848054, 333552074, 753138641, 900978230, 595176269, 364882913, 899482826, 514410871, 376147622, 200264779, 497241677, 992958069, 536472545, 719968494, 378748489, 448611453, 757247405, 504404769, 249024510, 902268867, 849593554, 304122367, 188320945, 305055057, 309976559, 913659554, 634459733, 454921387, 737840465, 708523681, 637470893, 623547595, 458720634, 644593638, 709922266, 1022, 0, 0, 0, 0, 0 ], "cutValueData": [ 69, 18, 9, -30, 68, -53, 97, 81, 66, -128, -75, -115, 66, 105, -14, 88, 69, 4, 108, -55, 66, 9, -56, 46, 66, 49, 97, -113, 66, 94, -27, 115, 66, -73, 111, 53, 66, -99, 115, -29, 66, -102, 89, 120, 66, 118, -22, 15, 66, -60, -63, -58, 66, -124, -30, 42, 66, 126, -62, 106, 66, -87, -3, -127, 66, 114, -96, -70, 66, -122, -12, -71, 66, -75, 100, 6, 66, -100, -88, -63, 66, -76, 117, 5, 66, 77, 83, 64, 66, -68, -78, 4, 66, -126, -56, 79, 66, -93, 45, -50, 66, -71, 75, 29, 66, -80, 23, -71, 66, 17, -39, -54, 66, -61, -19, -116, 66, -67, 39, -45, 66, -73, -51, 36, 66, -112, -57, -127, 66, -119, 100, 81, 66, 76, 23, -49, 66, 70, -100, 27, 66, -79, -17, 38, 66, -115, -45, -83, 66, -87, 72, 45, 66, -61, 104, -89, 66, 122, 0, -93, 66, 74, 36, -66, 66, -114, 57, 21, 66, -96, 112, 62, 66, 95, 120, -104, 66, -72, -53, -112, 66, 95, 22, -127, 66, 96, 102, -77, 66, -78, -76, 80, 66, -61, 72, 48, 66, -79, 28, 37, 66, -102, -112, 52, 66, -68, -10, -114, 66, -109, -12, 70, 66, -83, -12, -13, 66, 70, -9, -42, 66, 126, -66, 52, 66, -84, -79, 49, 66, -76, 20, 60, 66, -77, 114, 51, 65, -51, -43, -90, 66, -70, 41, 51, 66, -93, 67, -16, 66, 115, -11, -17, 66, 78, -46, -34, 66, -88, -69, -103, 66, 68, 75, -82, 66, 101, 104, -73, 66, -63, 113, 0, 66, 119, 125, -29, 65, -43, -85, 46, 66, -59, 116, 66, 66, -99, 41, -87, 66, -120, -36, -119, 66, -82, 58, 99, 66, 96, 83, 97, 66, -81, -71, 17, 66, -83, 99, 65, 66, -64, -78, 9, 66, -94, 11, -80, 66, 73, 44, -111, 66, -109, 58, 52, 66, -66, -62, -119, 66, -81, 101, 5, 66, -97, -12, -43, 66, -107, 20, -13, 66, 82, -102, 22, 66, -68, -53, 102, 66, 94, 39, 28, 66, 107, -47, 31, 66, 72, -93, 89, 66, -72, 91, -62, 66, 103, -74, 53, 66, -75, 86, -126, 66, 113, -103, -50, 66, -58, 64, -36, 66, -114, -58, 77, 66, -87, -15, -119, 66, -60, -79, 50, 66, 71, 38, -15, 66, -69, -26, 65, 66, -107, -54, 69, 66, 81, 66, 23, 66, -113, -114, 24, 66, 72, -5, 3, 66, -96, 114, -63, 66, -60, -121, -41, 66, 69, -109, -21, 66, -118, 50, -94, 66, -102, -120, -56, 66, -104, -10, -95, 66, -110, 106, -125, 66, -100, 68, 44, 66, -65, 42, 16, 66, -74, 11, -76, 66, -108, -11, -128, 66, -106, 42, -48, 66, -83, -49, -4, 66, -97, -120, 3, 66, -93, -52, 57, 66, 80, 35, 1, 66, -70, -94, -71, 66, 83, -104, -20, 66, 88, -112, -57, 66, 75, -113, 56, 66, -112, 47, 20, 66, -125, 45, -116, 66, 77, 37, -9, 66, -82, 55, 32, 66, -125, 94, 86, 66, 80, -31, -76, 63, -89, 29, -121, 66, -66, -81, -71, 66, -68, 36, 30, 66, -60, -25, 25, 66, -102, -120, 111, 66, 70, 79, 85, 66, -68, 95, -68, 66, -99, 28, 115, 66, 83, -78, 106, 66, 122, 13, -37, 66, -62, -7, 109, 66, -89, -79, 126, 66, -80, -109, -31, 66, -101, -90, 13, 66, -96, -117, 87, 66, -112, 125, 100, 66, 83, 127, 100, 66, 71, 94, 94, 66, 99, -55, 43, 66, -113, -21, 50, 66, -128, 125, 67, 66, -82, 56, 86, 66, -105, 35, -38, 66, -103, -34, 93, 66, -70, 30, 76, 66, -101, -104, 47, 66, 69, -122, -20, 66, 112, 85, -50, 66, 90, -15, -41, 66, 94, -91, 124, 66, -128, 14, -107, 66, -105, -24, -7, 66, -60, -115, -6, 66, -114, -14, -44, 66, -111, 92, -47, 66, -81, 28, 97, 66, 95, -71, 55, 66, 76, 88, 100, 66, -116, -126, -79, 66, -86, 79, -113, 66, -101, -6, -51, 66, -69, 72, 28, 66, -100, 122, -2, 66, -78, 33, -42, 66, 88, 9, 11, 66, -108, -51, 48, 66, 107, 121, -18, 66, 85, 5, -18, 66, -103, -98, 65, 66, -112, 81, -63, 66, -105, 93, -78, 66, -63, 58, -70, 66, 87, -20, 59, 66, -98, -110, 48, 66, 75, 53, 20, 66, -102, 18, -113, 66, -108, 92, 91, 66, -105, -117, -11, 66, -106, -126, -105, 66, -82, -125, 98, 66, 101, -103, -123, 66, -108, -95, 121, 66, -98, 27, -125, 66, -105, -39, -79, 66, -59, -24, -38, 66, -70, -37, -125, 66, 100, 49, 57, 66, -71, -54, -53, 66, -127, 111, -72, 66, -60, -7, 127, 66, -108, -89, 80, 66, -105, 27, -65, 66, -62, -4, -89, 66, -70, -98, -64, 66, -73, -30, 50, 66, 109, -98, 100, 66, -113, 17, 68, 66, 73, -120, 26, 66, -100, 18, 25, 66, -97, 5, -35, 66, -62, -4, -102, 66, 91, -111, -117, 66, -115, 74, 36, 66, 79, 27, 65, 66, -73, -125, -122, 66, 79, -61, 99, 66, -66, 72, -89, 66, -60, -119, 95, 66, 75, 72, 104, 66, -125, 18, -8, 66, -98, -116, -82, 66, -112, 102, -6, 66, -66, -36, -66, 66, 68, -6, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], "precision": "FLOAT_32", "root": 0, "canonicalAndNotALeaf": true, "size": 224, "leftIndex": [ -1, 1, 255, 1028080268, 1117081687, 975190958, 716904877, 774831176, 639322549, 638555764, 595666588, 969288592, 1012189408, 989809142, 7201519, 0, 0 ], "rightIndex": [ -1, 1, 255, 1027607764, 1161729044, 1032527560, 1098284182, 645160292, 1012395092, 716716960, 726772144, 1114345717, 625838153, 588041896, 8827861, 0, 0 ], "nodeFreeIndexes": [], "nodeFreeIndexPointer": 30, "leafFreeIndexes": [], "leafFreeIndexPointer": 30, "partialTreeStateEnabled": true }, "boundingBoxCacheFraction": 0.0, "partialTreeState": true, "seed": 2247190326101601255, "id": 0, "dimensions": 32, "staticSeed": 0, "weight": 0.0, "hasAuxiliaryData": false }, { "version": "2.0", "root": 0, "maxSize": 256, "outputAfter": 32, "storeSequenceIndexesEnabled": false, "centerOfMassEnabled": false, "nodeStoreState": { "version": "2.0", "capacity": 255, "compressed": true, "cutDimension": [ 0, 31, 255, 668518854, 401940207, 640755434, 937474889, 261731785, 975152181, 514923243, 334452697, 653561195, 708155091, 525945414, 573290346, 782200699, 933399350, 438040617, 1066984925, 1071890361, 1029289941, 173397579, 192211567, 94032977, 313317207, 359728693, 866854081, 447974187, 842047015, 191737714, 644083570, 1002012399, 899747637, 730906451, 189980403, 258315510, 738027979, 93416667, 376759465, 1010, 0, 0, 0, 0, 0, 0 ], "cutValueData": [ 68, -76, 97, 71, 68, -52, -40, 92, 69, 15, -33, 86, 66, -100, -128, -32, 66, -95, 46, -85, 66, 74, 27, -34, 66, 101, 90, 120, 66, 116, 110, 119, 66, 102, 118, -25, 66, -90, 4, -87, 65, 67, 8, -51, 66, 106, -59, -118, 66, -64, 50, 94, 66, 81, 125, 68, 66, -104, 64, 114, 66, -84, 6, -74, 64, 1, 43, 23, 66, 114, 4, 4, 66, -103, 47, 84, 66, -66, 38, -63, 66, -68, -32, 80, 66, 54, -121, 124, 66, -66, 109, 82, 66, 78, -125, 46, 66, -96, -74, 62, 66, -72, -57, -45, 66, -109, 116, -83, 66, 54, 93, -27, 66, -108, -115, -89, 66, 110, 105, 12, 66, -104, 124, 102, 66, -97, 97, -116, 66, -108, 104, -18, 66, -128, 15, -103, 66, -121, 93, 38, 66, 122, -34, -61, 66, 77, 77, 107, 66, 87, -114, -7, 66, -96, 24, 28, 66, -82, -17, 66, 66, 100, -79, -24, 66, 83, -93, 34, 66, -113, 27, -37, 66, -61, 67, 0, 66, -103, 62, 17, 66, -61, -37, 90, 66, -69, 109, 73, 66, -103, -12, -24, 66, 23, 44, 32, 66, 79, -79, 26, 66, 97, 114, 7, 66, -95, -128, -39, 66, 95, -75, -94, 66, 119, -16, -38, 66, -127, -13, 18, 66, -64, -80, -2, 66, -106, 118, -65, 66, 119, 4, 9, 66, -123, -34, 97, 66, -119, 40, 103, 66, -74, 74, -98, 66, -76, 127, 86, 66, -69, 44, 9, 66, -75, 85, 59, 66, -98, -29, -1, 66, 110, 46, 17, 66, -64, 11, 27, 66, 106, 59, -41, 66, -108, 86, -11, 66, 80, 80, 17, 66, -75, 120, 48, 66, -111, -72, 52, 66, 79, 12, -109, 66, 108, 118, 30, 66, 85, -13, -12, 66, -64, 77, -58, 66, -118, -38, -84, 66, 71, 33, -27, 66, -72, -30, -87, 66, -89, 79, -39, 66, -81, -69, -47, 66, -120, -127, -89, 66, -83, -100, -52, 66, 95, -115, -36, 66, -101, 84, -122, 66, -108, 67, 100, 66, -92, -68, 51, 66, 103, -3, 110, 66, -127, -67, 104, 66, -123, -100, -69, 66, -123, 123, -84, 66, -83, 4, 28, 66, -107, 44, -71, 66, -116, -60, 5, 66, -113, 119, 87, 66, 102, 91, -9, 66, -95, 8, -96, 66, -114, 46, 2, 66, 113, 56, -125, 66, 88, 3, 49, 66, -76, -35, 16, 66, 91, -41, -19, 66, -118, 17, -41, 66, -67, 43, -68, 66, -112, -128, -13, 66, 75, -62, 4, 66, -109, -3, -74, 66, -92, -8, -123, 66, -126, 7, -79, 66, -83, -9, -85, 66, -103, 22, 105, 66, 103, -26, 22, 66, -117, 117, 118, 66, -97, -41, -127, 66, 75, -70, -74, 66, 86, -31, 97, 66, -67, -84, 85, 66, -107, -105, 94, 66, 92, -48, 28, 66, -121, 9, -78, 66, -126, 91, 63, 66, -65, -122, -68, 66, -115, -95, -73, 66, -113, 48, -93, 66, -100, -78, 101, 66, -68, 116, -46, 66, 77, -41, -58, 66, -81, -51, 44, 66, -125, -31, -81, 66, -91, 84, -99, 66, -77, -108, -34, 66, -110, 19, 81, 66, -98, -123, 104, 66, -111, 119, 44, 66, -108, -87, 3, 66, -66, 124, -116, 66, 80, 48, 28, 66, -67, 88, 0, 66, -105, 100, 46, 66, -68, 119, 57, 66, -105, -113, -67, 66, -62, 109, 50, 66, -85, 61, 87, 66, -118, 78, -76, 66, 70, -110, 23, 66, -103, 105, 20, 66, -62, -114, 28, 66, 102, -20, 127, 66, 102, -120, -124, 66, -107, 109, -120, 66, 80, 4, 39, 66, -115, -110, -59, 66, 100, 5, -3, 66, -94, -123, -72, 66, 74, 31, 50, 66, -121, -35, 117, 66, -67, 118, -112, 66, 79, -119, -56, 66, 96, 64, -117, 66, 74, 124, 44, 66, -64, -35, -81, 66, -100, -16, 71, 66, -60, 8, -82, 66, 76, -33, 50, 66, 119, -75, -64, 66, 100, 96, 38, 66, -84, 46, 32, 66, 81, -34, 57, 66, 91, -20, 65, 66, 80, 28, 107, 66, 91, -107, -87, 66, -67, 104, 15, 66, 80, -28, 70, 66, -106, 2, -63, 66, -97, 45, 108, 66, -112, 123, -47, 66, -127, 122, -64, 66, -67, 28, 94, 66, -68, 109, 127, 66, -57, 103, -33, 66, 71, 69, 1, 66, -66, 30, -77, 66, 73, 122, 92, 66, -107, -105, 34, 66, -99, -3, 27, 66, -119, -83, 34, 66, 94, 63, -47, 66, 119, -68, -2, 66, 78, 0, 7, 66, -110, -6, 76, 66, -108, -12, 12, 66, -104, 127, -16, 66, -77, 0, -37, 66, 127, 31, 32, 66, -110, 56, 16, 66, 94, -43, 87, 66, -64, 24, -51, 66, 71, 32, -44, 66, 91, 118, 0, 66, -84, 105, 33, 66, -61, 121, -74, 66, -65, 60, -122, 66, 89, 117, -79, 66, -113, 7, 10, 66, 125, -97, 89, 66, -69, -107, 92, 66, 86, 14, 121, 66, -63, 104, 96, 66, -117, -123, -7, 66, -75, -117, 33, 66, -103, 78, 64, 66, -93, -80, 118, 66, -105, 55, 30, 66, -98, 48, 105, 66, 90, -44, -13, 66, 82, -67, 47, 66, -60, -9, -36, 66, 90, -53, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], "precision": "FLOAT_32", "root": 0, "canonicalAndNotALeaf": true, "size": 218, "leftIndex": [ -1, 1, 255, 731715524, 990054538, 1026741703, 987921818, 1160427698, 1027744577, 1155172667, 753501596, 754980010, 970705661, 585921265, 12283, 0, 0 ], "rightIndex": [ -1, 1, 255, 770055808, 1032510794, 1098485999, 987942229, 772988480, 643495504, 628963700, 710528990, 758159636, 973894064, 982928569, 10088, 0, 0 ], "nodeFreeIndexes": [], "nodeFreeIndexPointer": 36, "leafFreeIndexes": [], "leafFreeIndexPointer": 36, "partialTreeStateEnabled": true }, "boundingBoxCacheFraction": 0.0, "partialTreeState": true, "seed": 5668109095303649572, "id": 0, "dimensions": 32, "staticSeed": 0, "weight": 0.0, "hasAuxiliaryData": false }, { "version": "2.0", "root": 0, "maxSize": 256, "outputAfter": 32, "storeSequenceIndexesEnabled": false, "centerOfMassEnabled": false, "nodeStoreState": { "version": "2.0", "capacity": 255, "compressed": true, "cutDimension": [ 0, 31, 255, 905644061, 475760115, 343269078, 498908753, 380147165, 664402858, 221587067, 304048502, 922151586, 249281837, 790437806, 317134067, 853531946, 78737139, 116205674, 863303737, 488729431, 997545537, 728103473, 773499333, 481474850, 213716571, 455575535, 215173479, 1005317039, 904377537, 573929313, 534994493, 1029109043, 321695009, 1021381295, 584251965, 82291706, 182418734, 500729415, 174446697, 635208918, 524079082, 15, 0, 0, 0, 0 ], "cutValueData": [ 67, 25, -29, -114, 61, -7, 21, -38, 67, -16, 62, 59, 68, 25, 115, -42, 66, 102, -95, 45, 69, 80, 95, 44, 66, -127, 71, 31, 66, -114, -40, 61, 66, -98, 88, -49, 64, -68, -115, 10, 66, -125, 36, -113, 66, -63, -85, 49, 66, -79, -87, 46, 66, -60, -26, -8, 66, 75, -56, -113, 66, 74, -7, -3, 65, -105, -86, 43, 66, -59, 114, 121, 66, -125, 27, 16, 66, -94, 40, -112, 66, 93, 110, -71, 66, -118, -127, -85, 66, 68, -37, 108, 66, -100, -82, -94, 66, -89, 112, -29, 66, -69, 51, -115, 66, -114, -12, -1, 66, -109, -18, 50, 66, -70, -18, 39, 66, 82, 51, 87, 66, -79, -31, 46, 66, 77, -105, -96, 66, -71, -20, 21, 66, 78, 102, -113, 66, -110, -44, 17, 66, 73, 50, -85, 66, 82, -104, 0, 66, 106, -118, -7, 66, -114, -109, 121, 66, -57, -9, 57, 65, -93, -63, -66, 66, -59, -70, -89, 66, -74, -120, 2, 66, 106, 7, -88, 66, -59, 94, -105, 66, -60, -83, -49, 66, -103, 0, -60, 66, -113, 126, 120, 66, -74, 14, 8, 66, 125, 104, -117, 66, -62, 120, 80, 66, -122, -34, 112, 66, 71, -3, 117, 66, 83, 104, 57, 66, -98, 31, 23, 66, -94, -91, 104, 66, 84, -87, 47, 66, 69, 117, -14, 66, -94, -117, -86, 66, 76, 94, -43, 66, -65, -13, -78, 66, -102, -53, 43, 66, 75, 92, -121, 66, -80, 69, -70, 66, -108, -125, -44, 66, 91, -9, -39, 66, 74, -4, 46, 66, 93, 121, 55, 66, -106, -56, -94, 66, -60, 83, 69, 66, -66, 34, 109, 66, -110, -60, 95, 66, -66, -80, 49, 66, -109, 45, 107, 66, 79, 66, -59, 66, 116, 108, 68, 66, -99, 100, -72, 66, -98, -28, 53, 66, 100, 18, -48, 66, 76, -26, 55, 66, 83, 40, -58, 66, -62, 3, -62, 66, 76, -27, -44, 66, -59, 113, -105, 66, -74, 117, 92, 66, -124, -53, 37, 66, -79, -98, -71, 66, -66, 32, -113, 66, -72, 105, 112, 66, 82, -81, 79, 66, -121, 101, -20, 66, -120, -69, 108, 66, -61, 70, 72, 66, -117, -40, -101, 66, 68, -41, 63, 66, -110, 79, 8, 66, 82, 82, 125, 66, -69, 78, -71, 66, -68, 101, 98, 66, -63, -77, -88, 66, -64, 97, -108, 66, -74, 107, -60, 66, -111, -34, -26, 66, -66, -84, 41, 66, -92, 8, -25, 66, -69, -4, 74, 66, 106, -41, -101, 66, -119, -126, 1, 66, -96, -63, -74, 66, -127, -112, 84, 66, -75, -23, 91, 66, 79, -23, 28, 66, -68, 30, 0, 66, -104, -123, -83, 66, -99, -119, -127, 66, -83, 63, -67, 66, -71, -61, -76, 66, -105, -73, -124, 66, -115, -17, 81, 66, -119, -109, -17, 66, -69, 3, -46, 66, -107, -9, 126, 66, -63, 40, 39, 66, -126, 88, -121, 66, 68, -49, -34, 66, -59, -78, 43, 64, -113, -25, -1, 66, -75, 97, 113, 66, 122, -51, -96, 66, -70, -83, -120, 66, 72, -18, -77, 66, -70, -66, -34, 66, 94, -72, 94, 66, 78, 29, -114, 66, -107, 21, -29, 66, 77, -6, -127, 66, -64, -41, 83, 66, -105, 102, -45, 66, 99, 33, -34, 66, 98, -117, 117, 66, -62, 27, 20, 66, -65, -69, -73, 66, -100, -33, 60, 66, -68, 64, -41, 66, 85, -59, 84, 66, -114, -53, -76, 66, -83, 37, -25, 66, 102, -59, 46, 66, -88, -126, -38, 66, 123, -23, -103, 66, -121, 41, -57, 66, -73, -15, -111, 66, -109, -93, 56, 66, 71, -24, 92, 66, -61, 89, -51, 66, -84, 97, -5, 66, -99, 85, 86, 66, 74, -122, 86, 66, -113, 71, 56, 66, -65, 94, 25, 66, 105, -90, 81, 66, -114, 34, -85, 66, -111, 25, -36, 66, -103, -124, 126, 66, 78, 21, 77, 66, -64, -113, -73, 66, -83, -73, -85, 66, 97, 72, 67, 66, 109, -69, 42, 66, -109, 102, 44, 66, -108, 10, 28, 66, -112, -46, 36, 66, -101, -71, 8, 66, -88, 63, -16, 66, -95, -93, -25, 66, -104, 110, -37, 66, 88, 43, 66, 66, -104, 69, -122, 66, -75, -62, 28, 66, -117, 67, 47, 66, 73, 12, -32, 66, -99, 104, 6, 66, -71, 127, -57, 66, -68, 13, 96, 66, -74, 9, -9, 66, -61, 17, 101, 66, -108, -37, 10, 66, -119, 109, -5, 66, -64, -62, 12, 66, -125, 125, 126, 66, -113, 50, -18, 66, -121, -88, 115, 66, -71, 60, 64, 66, 71, 103, 54, 66, -90, 107, 50, 66, 79, 87, 28, 66, -60, -7, 3, 66, -83, 115, 7, 66, -60, -121, 83, 66, -114, -48, -14, 66, 81, -124, -18, 66, -73, -109, -128, 66, -103, 109, 34, 66, -103, -110, -88, 66, -128, 58, -33, 66, -79, -56, -9, 66, -105, -66, 19, 66, -103, 26, -50, 66, -101, -108, -10, 66, -64, -85, 89, 66, -104, -3, -85, 66, 97, 16, 16, 66, -61, -39, -22, 66, 70, -53, 17, 66, -76, -65, 42, 66, -108, -117, 59, 66, -67, -11, -32, 66, -68, 40, -117, 66, -115, 38, 121, 66, -113, -114, 83, 66, -110, 4, -45, 66, -69, -100, 78, 66, -61, 122, 45, 66, 83, -110, 32, 66, 98, -95, 92, 66, -118, 79, 58, 66, 87, -22, 110, 66, 74, -98, 48, 66, 79, 30, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], "precision": "FLOAT_32", "root": 0, "canonicalAndNotALeaf": true, "size": 229, "leftIndex": [ -1, 1, 255, 645503984, 754932688, 1112574895, 772528310, 727004726, 1103212466, 1142518334, 968737928, 1114349854, 726301852, 715612291, 600441944, 1, 0 ], "rightIndex": [ -1, 1, 255, 1031346634, 769874273, 968790667, 643571855, 1100062132, 730120472, 1028158001, 1017983984, 731079067, 984501022, 581840062, 624776773, 1, 0 ], "nodeFreeIndexes": [], "nodeFreeIndexPointer": 25, "leafFreeIndexes": [], "leafFreeIndexPointer": 25, "partialTreeStateEnabled": true }, "boundingBoxCacheFraction": 0.0, "partialTreeState": true, "seed": -2564745619268294314, "id": 0, "dimensions": 32, "staticSeed": 0, "weight": 0.0, "hasAuxiliaryData": false }, { "version": "2.0", "root": 0, "maxSize": 256, "outputAfter": 32, "storeSequenceIndexesEnabled": false, "centerOfMassEnabled": false, "nodeStoreState": { "version": "2.0", "capacity": 255, "compressed": true, "cutDimension": [ 0, 31, 255, 192256842, 175568857, 367496865, 1055719231, 378742481, 202427477, 773694774, 623950843, 231783221, 632383305, 620189034, 196558758, 349878587, 1056540149, 70600491, 312944081, 580429739, 907859757, 459868150, 82024246, 760411894, 746158818, 663805373, 73718511, 879564727, 705772005, 1005532225, 89722041, 723745745, 799472890, 1054250306, 841709619, 444237647, 571555557, 1001506038, 108188741, 849344946, 606686422, 0, 0, 0, 0, 0 ], "cutValueData": [ 68, -25, 64, -27, 68, 17, 100, 117, 69, 50, 88, 30, 66, 121, 124, -116, 66, 8, 25, 55, 66, -125, 97, 53, 66, -92, -48, 0, 66, -69, 31, -50, 66, -101, 16, -76, 66, 58, 28, 51, 66, 91, 64, -38, 66, -97, 7, 40, 66, -102, 63, -116, 66, -111, -101, 7, 62, 20, 67, 110, 66, 126, 125, 100, 66, -79, 50, -45, 66, -66, -62, 82, 66, 109, 50, 43, 66, -118, -11, -50, 65, -96, -74, -16, 66, -88, 96, -101, 66, -74, 36, -94, 66, 3, 32, -4, 66, -106, 123, -106, 66, -59, 102, -92, 66, -110, -98, 34, 66, -82, -55, -120, 66, -93, 80, -37, 65, -121, 83, 19, 66, -123, -108, 59, 66, -70, 108, 119, 66, 72, 77, -13, 66, -86, -66, 13, 66, -128, 85, 8, 66, -68, -126, 25, 66, -66, 89, 1, 66, -119, 11, -49, 66, -96, 15, 10, 66, 78, -68, -32, 66, -120, -60, 53, 66, 73, 116, -104, 66, 116, 52, 45, 66, 109, 111, 1, 66, -72, 60, -31, 66, -111, -84, -99, 66, 125, -72, -98, 66, -66, 16, -105, 66, -104, 127, -47, 66, -95, -38, -5, 66, -84, 88, 41, 66, -108, -40, -66, 66, -116, 78, -24, 66, -92, 97, 11, 66, -104, 96, 116, 66, -63, -121, -24, 66, -117, -32, -74, 66, -67, 91, 107, 66, 101, -91, -59, 66, -61, 71, 118, 66, -86, -89, 11, 66, 92, -3, -64, 66, -114, 102, 74, 66, -64, 32, 19, 66, 79, -56, 25, 66, -59, -114, 77, 66, -97, -122, 71, 66, -119, -112, 51, 66, -128, 37, 17, 66, -68, 41, 84, 65, 90, 91, -107, 66, -95, -39, -79, 66, 106, 64, -61, 66, -119, -106, 25, 66, -64, -5, -44, 66, -121, -116, -77, 66, -85, -117, -3, 66, -103, -56, 4, 66, -102, -24, 37, 66, 84, 119, 54, 66, -113, 104, -78, 66, 113, -102, -116, 66, 68, 4, 104, 66, -122, -2, -49, 66, 98, -60, -88, 66, -122, 14, 19, 66, -113, -111, 77, 66, -73, -15, -59, 66, 86, -74, 18, 66, -77, -90, -41, 66, -119, -5, 21, 66, -59, 50, 50, 66, -103, 60, 21, 66, -66, 121, 18, 66, -70, 21, 24, 66, -128, -112, -127, 66, 86, 48, -89, 66, -109, -64, -96, 66, -116, 28, 68, 66, -100, 127, 0, 66, -112, -63, -67, 66, -110, -65, 76, 66, -112, -72, 43, 66, 9, 65, 65, 66, -93, -8, -34, 66, -106, -20, 23, 66, -100, 31, -114, 66, 90, 120, 93, 66, -62, -18, 50, 66, 96, -5, -29, 66, -94, 97, 2, 66, -74, -101, 88, 66, -70, 28, 14, 66, -106, 14, 33, 66, -67, 75, 127, 66, -98, 90, -38, 66, -119, 32, -96, 66, 85, 99, -60, 66, -64, -46, 72, 66, -64, -28, -6, 66, -81, 54, 94, 66, 86, 126, 97, 66, -106, -94, -6, 66, -111, 2, -114, 66, -95, 9, -27, 66, -68, 23, 62, 66, -60, -56, -77, 66, 82, -115, -79, 66, -62, 26, -36, 66, -59, 101, 70, 65, 95, 54, 62, 66, -60, 7, 13, 66, -100, -94, 22, 66, -110, -103, 34, 66, 75, 77, 4, 66, -99, -126, -41, 66, -110, -111, 101, 66, 100, -23, 85, 66, 95, 73, 26, 66, 104, -86, 92, 66, -74, -45, 29, 66, -125, -56, 106, 66, -64, 112, -125, 66, -62, 115, -101, 66, 89, 86, 40, 66, -103, 97, 57, 66, -109, 77, -23, 66, -74, -14, -104, 66, -85, 21, 82, 66, -81, 127, 5, 66, -121, 60, 26, 66, 103, -36, -53, 66, -61, -76, -45, 66, -67, 112, -87, 66, -102, 86, 103, 66, -110, 16, 69, 66, -104, -9, 122, 66, -68, 115, 63, 66, -86, 69, 88, 66, -78, 21, 100, 66, -73, 123, -29, 66, -101, 60, -90, 66, -112, -47, -54, 66, -102, -124, 2, 66, 92, -55, 46, 66, -70, 88, 93, 66, -115, -23, -56, 66, -63, -75, -103, 66, -100, -62, -24, 66, -62, 86, -116, 66, -69, -30, -74, 66, -57, -123, 21, 66, -61, -26, 45, 66, -108, -83, 58, 66, -67, 117, -66, 66, 90, -35, -125, 66, 112, -123, -45, 66, -92, -97, 84, 66, -80, 24, 116, 66, 74, 116, 75, 66, -69, -86, -105, 66, -74, 41, 49, 66, -119, -39, -23, 66, -127, -39, 106, 66, -115, -74, 103, 66, 126, 113, -89, 66, 85, -46, -119, 66, -101, 5, -44, 66, -59, 84, 124, 66, -77, 116, -68, 66, -62, 42, -69, 66, -120, -42, -64, 66, -126, -57, -15, 66, -94, 72, 4, 66, -123, -62, -81, 66, -100, 76, 93, 66, 87, 46, -8, 66, -117, -97, -43, 66, -101, -44, 21, 66, 117, -2, 43, 66, 113, 95, 36, 66, -62, -69, 10, 66, -105, 107, -51, 66, -105, -39, 89, 66, -66, 33, 74, 66, 94, -93, -20, 66, -99, -44, -10, 66, 79, 2, -27, 66, 72, -21, 1, 66, -109, -5, 98, 66, -109, 25, 40, 66, -72, 117, -104, 66, -106, 122, -18, 66, -111, -114, 5, 66, 102, 55, -127, 66, 81, 22, -99, 66, -77, 108, 51, 66, -103, 32, -74, 66, -65, 66, -116, 66, 87, 29, -99, 66, -118, -73, -109, 66, -104, 72, -27, 66, -59, -30, 118, 66, -66, 105, 95, 66, 85, -90, -14, 66, -83, 10, -3, 66, -61, -28, 68, 66, -65, 109, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], "precision": "FLOAT_32", "root": 0, "canonicalAndNotALeaf": true, "size": 228, "leftIndex": [ -1, 1, 255, 983695022, 758358652, 1097956376, 644027516, 730002335, 758809528, 581218456, 968814673, 1016468675, 1145541514, 581196598, 726234781, 0, 0 ], "rightIndex": [ -1, 1, 255, 1147319869, 772687915, 1157235496, 1162025270, 731174326, 1160646694, 581219185, 1147144588, 987751169, 754111534, 581316658, 582922615, 0, 0 ], "nodeFreeIndexes": [], "nodeFreeIndexPointer": 26, "leafFreeIndexes": [], "leafFreeIndexPointer": 26, "partialTreeStateEnabled": true }, "boundingBoxCacheFraction": 0.0, "partialTreeState": true, "seed": -6258575445422044724, "id": 0, "dimensions": 32, "staticSeed": 0, "weight": 0.0, "hasAuxiliaryData": false }, { "version": "2.0", "root": 0, "maxSize": 256, "outputAfter": 32, "storeSequenceIndexesEnabled": false, "centerOfMassEnabled": false, "nodeStoreState": { "version": "2.0", "capacity": 255, "compressed": true, "cutDimension": [ 0, 31, 255, 196447062, 858087215, 488471342, 591964861, 866245582, 880327665, 454684506, 1005898102, 488539182, 880387785, 115723387, 363034074, 337086034, 465001035, 128511614, 204907702, 190798375, 212814947, 447661509, 903664767, 798058290, 1008183138, 783631675, 624912210, 395759066, 70870983, 346394591, 50118327, 43067743, 1005576053, 500361595, 364677745, 386971634, 1038415566, 389105102, 439010385, 267610930, 18056933, 0, 0, 0, 0, 0 ], "cutValueData": [ 69, 7, 84, -42, 68, 115, -35, -55, 69, 49, 51, -54, 66, 52, 88, -72, 66, 99, -100, -76, 66, -94, -88, 119, 65, -52, 9, -59, 66, -108, 11, -92, 66, -113, 28, -74, 66, -67, 58, 107, 66, -71, 52, 74, 66, -118, -22, 69, 66, -71, 95, 7, 66, 19, 30, -73, 66, -62, 48, -76, 66, -85, -14, -76, 65, -56, -34, 3, 66, -85, 47, -59, 66, -128, 46, 55, 66, -110, 109, -40, 66, -81, -43, 52, 66, -85, -32, -123, 64, -20, -16, 76, 66, -115, 122, 26, 66, -61, 35, 23, 66, -67, -54, 113, 66, -68, 54, 123, 66, 35, 41, -68, 66, -65, 11, 117, 66, -124, -79, -46, 66, -89, -14, 65, 66, 115, -74, -23, 66, -71, 83, 26, 66, 122, -53, -85, 66, 90, 49, -60, 66, -77, 127, 4, 66, -84, -123, 122, 66, -65, 31, -122, 66, 5, -52, -7, 63, -88, 64, -50, 66, -85, -105, -56, 66, -126, -10, 36, 66, -88, 97, -14, 66, 105, 20, -17, 66, -63, 97, -9, 66, -107, -108, 6, 66, 102, -15, 51, 66, -104, 117, -26, 66, -68, -57, -14, 66, -92, 6, 73, 66, -109, -61, 64, 66, -95, -25, -55, 66, -101, 82, 122, 66, -78, 31, -34, 66, -117, -49, -47, 66, -74, -85, -50, 66, -108, 45, -117, 66, 75, 47, 87, 66, 102, 80, -94, 66, -90, -111, 1, 66, -124, 76, -106, 66, 91, -120, 28, 66, 79, 39, -7, 66, 91, -22, -7, 66, -59, 121, 87, 66, 115, 43, -80, 66, -69, -38, 118, 66, -61, -128, -112, 66, -88, -18, 17, 66, -72, 66, -66, 66, -70, -117, 33, 66, -68, 43, 8, 66, -85, -48, 7, 66, -76, 43, 37, 66, -117, -4, -119, 66, 86, 84, 125, 66, -98, 97, 59, 66, -72, 102, -36, 66, 103, 99, -56, 66, -63, 79, -98, 66, -73, 100, 2, 66, -59, -16, -60, 66, 73, 34, 15, 66, -100, -94, -30, 66, -73, -29, 75, 66, 73, -83, -37, 66, 76, -34, 32, 66, -108, 120, 107, 66, -72, 62, -105, 66, -124, 19, -82, 66, -74, -4, 2, 66, -113, -5, -103, 66, -87, -112, -74, 66, 127, -45, 42, 66, 101, 92, 63, 66, -88, 70, -128, 66, 77, 91, -93, 66, -98, -110, -6, 66, -75, 37, -69, 66, -73, 100, 98, 66, -96, -15, -90, 66, -103, -61, -37, 66, 95, 34, 54, 66, 96, -79, -21, 66, 98, 4, 99, 66, -64, -24, -21, 66, -76, 74, -60, 66, -76, -112, 40, 66, -96, -48, 99, 66, -66, -93, -30, 66, -103, -29, -94, 66, -104, 67, -36, 66, -66, 118, 117, 66, -84, 124, 95, 66, 79, -51, 102, 66, 122, -84, -56, 66, -92, -67, 63, 66, -107, -25, -77, 66, -127, 90, -90, 66, -73, 43, 73, 66, -78, -47, -81, 66, -109, -75, 13, 66, -94, 0, -76, 66, -66, -2, -106, 66, -110, -71, -69, 66, 70, 60, -99, 66, -64, 67, -28, 66, 92, -17, -111, 66, -106, 31, -96, 66, 103, 47, 66, 66, -111, 20, 77, 66, -67, 77, 16, 66, 84, -41, 86, 66, -101, 32, 54, 66, -111, 103, -8, 66, -62, 23, -103, 66, 110, -108, 126, 66, -128, 77, 125, 66, -82, -76, 117, 66, -63, 38, -94, 66, -109, 81, -33, 66, -68, -37, 29, 66, 118, -45, 102, 66, -63, -114, -83, 66, -67, 92, 48, 66, -74, -86, -106, 66, -125, 8, -49, 66, -119, 57, 34, 66, -99, -88, -56, 66, 103, -71, -124, 66, 70, -15, 29, 66, -64, -106, -25, 66, -100, -6, -79, 66, -68, 80, 17, 66, 109, -85, -3, 66, -65, 30, 14, 66, 75, 42, 25, 66, -89, -109, 91, 66, 70, -77, 99, 66, 79, 51, -14, 66, -66, 70, -30, 66, -69, 74, 48, 66, 76, -50, 53, 66, -102, 121, -20, 66, 99, 103, -12, 66, -90, 66, -1, 66, -123, 13, 119, 66, -94, 110, 102, 66, -123, -125, 125, 66, -84, 18, -108, 66, -96, 116, -15, 66, -88, -5, 85, 66, -107, 18, 37, 66, -124, -72, 14, 66, -117, -36, -64, 66, 123, -68, 65, 66, 114, 96, -108, 66, 112, 35, -112, 66, -63, -98, -30, 66, -112, -103, -34, 66, 79, -28, 96, 66, 73, -76, 49, 66, -62, -54, 52, 66, -106, 109, -29, 66, -101, -61, -47, 66, -78, 97, -128, 66, -119, -84, -110, 66, 82, -102, -25, 66, -82, -1, 72, 66, -109, -80, 106, 66, 77, 14, -41, 66, -64, -75, -108, 66, -62, 63, -45, 66, 97, -109, 102, 66, 123, -95, -37, 66, -120, -114, -105, 66, -114, -110, 102, 66, 85, -23, 23, 66, -62, 34, 7, 66, -69, -122, -82, 66, -127, 21, -1, 66, -116, -80, -109, 66, -60, 32, 118, 66, -67, 70, 44, 66, -66, -115, 4, 66, -59, 41, 80, 66, -115, -116, -108, 66, -65, -10, -49, 66, 111, 64, 99, 66, 118, 121, -62, 66, -120, 76, -126, 66, -65, 32, -30, 66, -106, -8, 26, 66, -111, 29, 43, 66, -74, -12, 10, 66, -113, 11, -118, 66, -61, 40, 28, 66, -102, -106, 83, 66, -62, 109, 38, 66, -80, -36, 81, 66, 90, -66, -50, 66, 86, 101, 44, 66, -111, 125, 105, 66, 84, 108, -86, 66, -126, 74, -105, 66, 81, -109, -9, 66, -105, 65, -47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], "precision": "FLOAT_32", "root": 0, "canonicalAndNotALeaf": true, "size": 227, "leftIndex": [ -1, 1, 255, 600468470, 1033035683, 753521989, 974069864, 985034669, 1162077727, 983616262, 1013448983, 753378865, 1013785996, 726931733, 198512897, 0, 0 ], "rightIndex": [ -1, 1, 255, 774289759, 774584818, 624434183, 715231364, 1117383866, 712636127, 1104797758, 1103183918, 1098232306, 1146114728, 769447103, 209712766, 0, 0 ], "nodeFreeIndexes": [], "nodeFreeIndexPointer": 27, "leafFreeIndexes": [], "leafFreeIndexPointer": 27, "partialTreeStateEnabled": true }, "boundingBoxCacheFraction": 0.0, "partialTreeState": true, "seed": -7118534165006407185, "id": 0, "dimensions": 32, "staticSeed": 0, "weight": 0.0, "hasAuxiliaryData": false }, { "version": "2.0", "root": 0, "maxSize": 256, "outputAfter": 32, "storeSequenceIndexesEnabled": false, "centerOfMassEnabled": false, "nodeStoreState": { "version": "2.0", "capacity": 255, "compressed": true, "cutDimension": [ 0, 31, 255, 907630914, 43452073, 52886071, 483960655, 463058385, 133350823, 888458967, 853219053, 1000381230, 643782055, 368746353, 752585267, 576031587, 756983211, 1028849529, 179697501, 1031214894, 919921769, 783399599, 863552871, 711703893, 267228721, 52370723, 610856437, 606020794, 786210742, 357788135, 996140795, 354089839, 57068493, 739572467, 388188502, 261918058, 219784354, 72454101, 190183473, 857675045, 829, 0, 0, 0, 0, 0 ], "cutValueData": [ 69, 32, -53, 67, 69, 65, -110, -22, 69, 37, -95, 45, 69, 35, 6, -57, 65, -25, 65, -90, 65, -84, 101, 7, 66, -125, -125, 29, 66, -100, -38, 104, 66, -93, 10, -37, 66, -79, 73, 29, 66, 84, 44, 26, 66, -122, -68, 18, 66, 98, 126, 23, 66, -95, -116, -88, 66, -82, -9, 45, 66, 59, 12, 125, 66, -66, -9, 119, 66, -89, -36, 112, 66, 77, 42, -75, 66, -61, 123, -109, 66, -115, -78, -16, 66, -116, 51, 43, 66, 126, -50, -78, 66, -67, -2, 82, 66, -116, 21, -60, 66, -64, 12, 118, 66, -107, -57, 29, 66, 106, -13, -127, 66, -114, -67, 90, 66, -107, 81, 38, 66, 68, 115, -6, 66, 126, -108, -114, 66, -88, -51, -117, 66, -113, -110, -57, 66, 89, 105, 4, 66, 80, 125, -126, 66, 85, 89, 103, 66, -82, 13, -28, 66, 75, -9, 89, 66, -109, 33, -43, 66, 75, -51, 87, 66, -71, -98, 88, 66, -114, 93, -11, 66, 70, 115, 121, 66, -107, 83, 16, 66, -94, -44, -40, 66, -99, -28, 92, 66, -110, -60, 109, 66, -78, 55, -71, 66, -110, -47, -52, 66, -63, 22, 48, 66, -101, -4, 90, 66, -59, -128, -91, 66, -86, 66, 65, 66, 6, 121, -109, 66, -116, -83, 32, 66, -119, 25, -98, 66, -76, -24, 71, 66, -110, -8, 30, 66, 108, 106, -23, 66, -102, 51, -75, 66, 125, -19, 13, 66, 119, 21, -67, 66, -105, -30, 1, 66, -128, 9, -101, 66, -65, 122, -37, 66, 115, -124, 69, 66, -110, 121, -6, 66, -75, 61, 111, 66, 69, -30, 35, 66, -112, 108, -103, 66, -68, 7, -85, 66, 79, -14, -38, 66, -128, 93, -48, 66, -62, -109, 70, 66, 81, -28, 64, 66, -86, 96, -102, 66, -98, -66, -65, 66, 101, 55, -120, 66, -125, 78, -125, 66, -114, -31, 90, 66, -121, -37, -59, 66, -117, -100, 58, 66, -62, 5, 13, 66, -128, 23, 114, 66, 71, -108, -98, 66, 76, -106, 2, 66, -110, -70, 105, 66, -105, -36, 125, 66, -71, -122, 5, 66, -111, 110, 91, 66, -68, -84, 26, 66, -120, -47, 20, 66, 70, -20, 101, 66, 124, -123, 88, 66, 119, -53, -126, 66, -59, -24, 122, 66, -92, 18, -11, 66, -118, 74, -11, 66, -89, 50, 103, 66, 70, -94, -104, 66, -67, -67, -120, 66, -99, -58, 39, 66, 101, 86, -33, 66, -111, 20, -109, 66, -119, 38, 16, 66, -120, -111, -85, 66, 71, -11, 3, 66, 80, -123, 124, 66, -98, -123, -27, 66, -76, 68, -76, 66, 72, 93, 118, 66, 97, -102, -18, 66, 105, 24, -34, 66, 107, -27, -55, 66, 122, -89, -50, 66, 89, 29, -45, 66, -104, -107, -70, 66, 123, 123, 103, 66, -115, -29, -127, 66, -110, 40, -46, 66, -71, -52, -100, 66, 77, -104, -4, 66, 68, 90, -68, 66, -61, 61, -73, 66, -118, 30, 27, 66, -104, -26, -96, 66, -122, -89, -84, 66, -104, 72, 104, 66, 88, 97, -12, 66, -92, 47, 39, 66, 95, 114, 47, 66, 91, -22, -23, 66, -113, -29, 28, 66, 103, -44, 106, 66, -65, 52, -31, 66, -114, 117, -54, 66, -105, -84, 57, 66, -93, -38, -50, 66, 85, -100, 122, 66, 107, 62, 116, 66, -109, 29, -89, 66, -59, 69, -39, 66, -64, 29, -10, 66, -70, -75, 22, 66, -123, 58, 2, 66, -98, 7, 55, 66, -71, 70, -108, 66, -105, 88, 92, 66, -88, 113, -126, 66, -64, -108, -108, 66, -101, -119, -62, 66, 91, 84, 0, 66, -110, 67, 40, 66, -107, 105, -102, 66, 83, 16, -96, 66, 125, 52, 55, 66, 109, -96, -83, 66, -66, -82, 56, 66, -67, -48, 112, 66, -118, 101, -1, 66, -59, -14, -56, 66, 84, -85, 73, 66, 95, 33, -27, 66, -94, 65, -12, 66, 77, 116, -45, 66, -114, 62, 105, 66, -106, 65, -60, 66, 101, 27, 36, 66, 83, -94, -15, 66, -65, -28, -71, 66, -115, 70, 108, 66, 122, 102, 74, 66, -74, 12, 11, 66, -101, -125, 67, 66, -81, -76, -49, 66, -62, -26, -32, 66, -99, 69, -63, 66, -75, 73, 77, 66, -113, 30, -100, 66, 71, 89, -31, 66, 97, 52, 53, 66, -68, -18, -114, 66, -106, 44, -107, 66, -112, -71, 93, 66, -59, -17, -75, 66, -62, -46, 101, 66, -69, 14, 96, 66, -77, -127, 82, 66, -77, -117, 18, 66, -68, -59, 53, 66, 69, 121, -12, 66, -60, -2, -71, 66, 104, -102, -85, 66, 70, -38, 37, 66, -92, -55, 69, 66, -112, -38, 2, 66, 83, 59, -122, 66, -66, -23, 121, 66, -113, -27, -35, 66, -108, -33, -119, 66, 86, -49, 22, 66, -113, -47, 112, 66, -65, -11, 74, 66, -119, -51, -82, 66, -61, -79, -50, 66, 84, -98, -103, 66, 79, 27, -33, 66, -109, -15, 126, 66, -68, -72, -5, 66, -104, 95, 100, 66, -110, -74, -75, 66, -62, 54, 74, 66, 83, -80, 45, 66, -103, -31, 89, 66, -108, -60, 27, 66, -111, -82, -128, 66, -115, 101, 24, 66, -104, 56, -108, 66, -71, -126, 105, 66, -106, 35, -68, 66, -108, 14, 38, 66, -107, -111, 68, 66, -98, 17, -116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], "precision": "FLOAT_32", "root": 0, "canonicalAndNotALeaf": true, "size": 224, "leftIndex": [ -1, 1, 255, 1033042247, 774818287, 643847449, 1156860994, 645640709, 759900490, 1118662559, 581140570, 639257174, 602040974, 583492814, 7371529, 0, 0 ], "rightIndex": [ -1, 1, 255, 1160608054, 968787773, 754052569, 1018686262, 629206123, 774660554, 970351891, 710457638, 600439768, 726417854, 583436672, 8775581, 0, 0 ], "nodeFreeIndexes": [], "nodeFreeIndexPointer": 30, "leafFreeIndexes": [], "leafFreeIndexPointer": 30, "partialTreeStateEnabled": true }, "boundingBoxCacheFraction": 0.0, "partialTreeState": true, "seed": -383864129972597491, "id": 0, "dimensions": 32, "staticSeed": 0, "weight": 0.0, "hasAuxiliaryData": false }, { "version": "2.0", "root": 0, "maxSize": 256, "outputAfter": 32, "storeSequenceIndexesEnabled": false, "centerOfMassEnabled": false, "nodeStoreState": { "version": "2.0", "capacity": 255, "compressed": true, "cutDimension": [ 0, 31, 255, 657791446, 899217370, 582649659, 1021403074, 578610617, 492013155, 363629919, 636173671, 517688865, 913290846, 451351891, 509017666, 65459558, 213757125, 463693029, 1071109586, 123065565, 208727925, 788362713, 752153770, 309124941, 1070811597, 619885657, 854383865, 513408289, 496286787, 60538338, 572868917, 489369269, 43364083, 884256585, 510639963, 783796679, 761377953, 641164927, 607741022, 1005700346, 589597670, 18217, 0, 0, 0, 0 ], "cutValueData": [ 68, -119, 111, -123, 69, 30, 5, 62, 68, 1, -122, -50, 66, -64, 92, 1, 66, -119, -56, 24, 66, -118, -44, 32, 68, -77, -109, 119, 66, -96, -43, -92, 66, -111, -106, -11, 66, -113, -110, -89, 66, -83, 101, -43, 66, -88, -41, 115, 66, 80, -94, -96, 66, 124, 109, -52, 66, -106, -20, -50, 66, 31, 78, 120, 66, 14, -24, -46, 66, -96, 59, 67, 66, -77, -126, 87, 66, -70, -105, 126, 66, -114, -62, 10, 66, -69, 98, -68, 66, -86, -33, -119, 66, -64, -110, -4, 66, -116, -71, 114, 66, -118, 1, 30, 66, -117, -68, -67, 66, -100, 87, -71, 66, 7, -10, -122, 66, -110, -82, -26, 66, 81, 104, 36, 65, 28, -36, 46, 66, -109, 78, 33, 66, 88, -30, 6, 66, -110, 85, -126, 66, -72, -85, -13, 66, 87, 104, -21, 66, -76, 13, -119, 66, 83, 7, 47, 66, -119, 112, -32, 66, -71, 110, 122, 66, -71, 38, -35, 66, 103, 104, 17, 65, -30, 52, 20, 66, 71, -45, 78, 66, -71, -4, 36, 66, -85, -76, -109, 66, -77, 2, 25, 66, -110, 126, 4, 66, -123, -127, -3, 66, 69, 78, 115, 66, -67, 47, 110, 66, -122, -87, 60, 66, 76, -96, 4, 66, -74, -66, -72, 66, -77, 66, 45, 66, -101, 32, 60, 66, 91, 126, -82, 66, -62, -70, 27, 66, 73, 11, 36, 66, 86, -103, -123, 66, -67, -121, -57, 66, -101, 24, 102, 66, -91, -19, -123, 66, -61, -4, 116, 66, -100, 1, -41, 66, -69, 93, -44, 66, -72, -27, 82, 66, -125, -115, -36, 66, -98, 112, 118, 66, -125, 39, 52, 66, 4, 25, 108, 66, -92, -72, -6, 66, 109, -43, 33, 66, -118, 16, -68, 66, -103, -95, -77, 66, -69, -112, 88, 66, -110, 55, 16, 66, -86, -52, 108, 66, -68, -110, -95, 66, 94, 126, -49, 66, 73, 122, -83, 66, 106, 7, -5, 66, -65, 115, -12, 66, -102, -87, 124, 66, 89, 110, -49, 66, -103, -15, -107, 66, -63, 54, 42, 66, -64, 0, 5, 66, -106, -11, 7, 66, -69, -54, -34, 66, -65, -88, 36, 66, -102, -51, -32, 66, -122, -89, 5, 66, 26, 109, -118, 66, 79, -38, -83, 66, -116, 82, -62, 66, -65, 5, 26, 66, -98, 113, -60, 66, 109, -37, -32, 66, -109, -46, 50, 66, 81, 119, -24, 66, -121, 26, 123, 66, 82, -111, -48, 66, 80, 59, 118, 66, -122, 2, 12, 66, 73, 112, 67, 66, -65, -8, 127, 66, -109, 111, -65, 66, -84, 8, 68, 66, -104, 120, -71, 66, -66, -25, -61, 66, 87, -64, 99, 66, 78, 39, -53, 66, -71, 50, -13, 66, -122, 20, 97, 66, -109, 123, 59, 66, -110, -66, -49, 66, -107, 116, -36, 66, -70, -99, 116, 66, -111, -57, -71, 66, -79, -21, 8, 66, 79, -44, 44, 66, -127, -39, -80, 66, -75, 66, 61, 66, -95, 70, 5, 66, -114, -109, 70, 66, -67, -42, 104, 66, -71, -103, -121, 66, -68, -97, -71, 66, -127, -85, -122, 66, 79, 5, -123, 66, -123, 108, 110, 66, -61, 75, 79, 66, -109, 112, -23, 66, -120, -98, 59, 66, 68, 14, 26, 66, -69, -26, -16, 66, -111, 14, -38, 66, 107, 16, -31, 66, 76, -105, -110, 66, -113, -8, -50, 66, -68, 127, 74, 66, -101, 79, -2, 66, -113, 7, 106, 66, -103, 117, 88, 66, 76, -26, 108, 66, 82, 121, -79, 66, -101, 72, -117, 66, 102, -122, -119, 66, 101, 116, 26, 66, -65, -65, 60, 66, 81, 3, -121, 66, -107, -28, -111, 66, -111, 121, 1, 66, -63, -96, -110, 66, -82, -67, 25, 66, 74, -47, 117, 66, 91, 105, 37, 66, 93, -104, -85, 66, -116, -120, -83, 66, -85, 22, 56, 66, -97, -15, 74, 66, -116, 85, 71, 66, -66, -62, -85, 66, -76, 84, -58, 66, -72, -82, -47, 66, -114, 125, -80, 66, -106, -124, 114, 66, -102, 59, 105, 66, 93, -74, 53, 66, -70, -24, -115, 66, -61, -121, 73, 66, -90, 112, -4, 66, 90, -73, -68, 66, 85, 54, 45, 66, 90, 100, 70, 66, 110, -88, -47, 66, -111, 59, 100, 66, -110, -128, -2, 66, -115, 67, -1, 66, -63, -13, -84, 66, 77, 81, -121, 66, -111, 123, 98, 66, 94, -47, -31, 66, -70, 101, 14, 66, 69, -104, -11, 66, -72, -17, -58, 66, 81, -54, -83, 66, 107, -65, -103, 66, -67, 111, 31, 66, 97, -77, 125, 66, 93, -79, 25, 66, -65, -56, 91, 66, -72, 125, -122, 66, 69, -25, 122, 66, 78, 59, 55, 66, 117, 82, 79, 66, -105, 12, -81, 66, -102, 30, -94, 66, -113, 111, -65, 66, 84, -29, 111, 66, -61, 115, 108, 66, -80, -100, 28, 66, 73, -123, 85, 66, 77, -21, 46, 66, -119, 55, -22, 66, -90, 127, -97, 66, 95, 72, -31, 66, 77, -38, 65, 66, -67, 104, -117, 66, -59, 116, 46, 66, -107, 5, 98, 66, -85, 49, -24, 66, 85, 72, 39, 66, -66, -5, 107, 66, -81, -50, 53, 66, 89, 41, -31, 66, -104, -40, -83, 66, 91, 119, 5, 66, 81, 87, -10, 66, -105, 57, 74, 66, -65, -24, -58, 66, 71, -2, 43, 66, -63, 119, -1, 66, -100, -14, 112, 66, -62, 124, -124, 66, -100, 58, -5, 66, -106, -97, -35, 66, -89, 26, 87, 66, -101, -2, -32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], "precision": "FLOAT_32", "root": 0, "canonicalAndNotALeaf": true, "size": 231, "leftIndex": [ -1, 1, 255, 1098311399, 1161709991, 1162061360, 1141278415, 631172210, 625792513, 774832136, 1030808822, 596092733, 595486228, 595657519, 710979521, 13, 0 ], "rightIndex": [ -1, 1, 255, 1155824059, 1162261382, 1162261358, 1119034435, 1018684795, 975716890, 1162023080, 969281689, 731535917, 639084055, 581150528, 586624567, 13, 0 ], "nodeFreeIndexes": [], "nodeFreeIndexPointer": 23, "leafFreeIndexes": [], "leafFreeIndexPointer": 23, "partialTreeStateEnabled": true }, "boundingBoxCacheFraction": 0.0, "partialTreeState": true, "seed": -3659552152257293168, "id": 0, "dimensions": 32, "staticSeed": 0, "weight": 0.0, "hasAuxiliaryData": false }, { "version": "2.0", "root": 0, "maxSize": 256, "outputAfter": 32, "storeSequenceIndexesEnabled": false, "centerOfMassEnabled": false, "nodeStoreState": { "version": "2.0", "capacity": 255, "compressed": true, "cutDimension": [ 0, 31, 255, 756914650, 655449419, 241077338, 773286393, 317564493, 922970742, 310240305, 661821857, 1047602866, 976735609, 729737213, 635283406, 717067626, 102160233, 59971026, 664525046, 991674161, 854027370, 499060198, 375451518, 871718259, 1046831037, 209254327, 585823959, 1052567975, 638646123, 874210494, 790981751, 909854517, 56866030, 636464493, 996341883, 922606834, 123508551, 91168441, 240574077, 1029876730, 458612681, 209, 0, 0, 0, 0 ], "cutValueData": [ 68, -91, 73, -35, 68, 121, 36, 102, 69, 84, -10, -91, 65, -21, -26, -18, 66, -122, -37, -37, 67, 117, -38, 69, 66, 83, -20, 55, 69, 6, -119, -126, 65, 93, -84, 13, 66, -64, 13, -124, 66, -116, 111, 29, 66, 106, -79, 4, 66, -78, 27, -61, 66, -73, 62, 66, 66, 124, -106, 74, 66, -120, 121, -28, 66, -120, 19, -35, 66, 93, -71, -102, 66, 127, 122, -106, 66, 95, 76, -1, 66, -64, -38, 52, 66, -81, -115, -11, 66, -111, -13, 73, 66, 127, -108, 114, 66, -113, 122, 81, 66, -84, -109, 105, 66, -117, -71, 77, 66, 69, -106, -87, 66, -69, -29, -22, 66, -116, 28, -119, 66, -62, 57, -34, 66, 127, -21, -41, 66, -87, 44, 56, 66, -79, -104, -44, 64, 2, 60, 80, 66, 71, -103, 39, 66, -100, 22, 31, 66, 124, 126, -115, 66, -119, 39, -78, 66, -118, -71, -128, 66, 103, -48, 42, 66, -103, 46, 4, 66, -103, 116, -29, 65, -1, 50, -106, 66, -81, 27, -126, 66, -118, -16, -126, 66, 73, -28, -126, 66, -111, -48, -107, 66, -96, -64, 124, 66, -121, -15, 7, 66, -80, 41, 18, 66, -76, 91, -20, 66, 78, 51, 76, 66, 75, 112, 8, 66, -111, -116, -111, 66, 100, -100, 70, 66, 104, 108, 47, 66, 9, 102, -76, 66, 73, 97, 91, 66, -109, 41, 21, 66, -104, 42, 108, 66, 76, -32, 54, 66, 123, -123, 2, 66, -112, 115, 22, 66, 120, -86, -81, 66, -109, -58, 47, 66, -68, -58, 81, 66, -77, -125, 32, 66, -114, 70, 12, 66, 114, 17, -72, 66, -110, 17, 71, 66, -89, -32, -107, 66, -59, -10, -23, 66, 9, -120, -89, 66, -120, -81, -57, 66, 68, -49, -115, 66, 97, -97, -55, 66, -118, 12, -125, 66, -109, 49, -97, 66, 75, -84, -41, 66, -109, -21, -97, 66, -97, -82, 63, 66, -104, 0, -107, 66, 92, 24, -53, 66, -60, -19, 104, 66, -57, -51, -28, 66, 123, 91, -13, 66, -61, 111, 64, 66, -99, 37, -21, 66, -99, 79, -43, 66, -70, -96, -90, 66, 69, 50, 71, 66, -67, 84, -112, 66, 87, -1, -1, 66, -106, 123, 117, 66, 78, -98, -8, 66, -123, 122, -35, 66, -114, -27, -127, 66, 68, 50, -80, 66, 102, -61, -115, 66, -97, 8, 109, 66, -112, 44, -10, 66, -65, 56, 76, 66, 111, 25, -34, 66, 124, 76, -46, 66, -77, -73, 42, 66, -70, 38, 39, 66, -99, 69, 9, 66, -64, -92, -96, 66, 96, 59, -25, 66, 99, -102, 33, 66, -83, 35, -34, 66, 121, 39, -76, 66, -64, -70, -41, 66, -73, -85, -26, 66, 80, 17, -6, 66, 78, 57, -49, 66, -102, 112, 119, 66, -70, 102, 93, 66, 110, -67, 43, 66, 89, 89, 50, 66, 79, -83, 91, 66, 78, 8, 47, 66, -63, 38, -49, 66, 94, 2, -105, 66, -117, -122, -111, 66, -107, -17, -29, 66, -99, 70, 19, 66, 74, -45, -26, 66, -59, 16, -81, 66, -60, -17, -96, 66, -109, 107, 92, 66, 98, 78, 62, 66, -101, 98, -57, 66, -115, 39, -53, 66, -114, -82, 91, 66, 102, 57, -65, 66, -93, -111, 30, 66, 76, -45, -50, 66, -74, -8, 3, 66, -99, 13, -86, 66, -108, 112, 8, 66, -64, -11, -109, 66, -100, 15, -23, 66, 101, 108, 114, 66, -119, 13, -90, 66, -62, 16, -42, 66, -115, -24, 7, 66, 81, 111, 67, 66, 68, 19, 12, 66, 107, 37, -39, 66, 91, 88, -80, 66, -108, 64, -89, 66, -111, 114, 40, 66, -115, -28, -26, 66, 70, -79, 60, 66, -67, -53, -78, 66, -120, -30, -44, 66, -104, 45, -89, 66, -65, -27, 11, 66, -108, -97, -88, 66, -81, -74, -36, 66, -116, 2, -104, 66, 70, -28, 120, 66, 80, -24, 40, 66, -69, 116, 11, 66, -69, 53, -57, 66, 74, -66, -114, 66, -100, 117, -121, 66, -104, 34, 107, 66, -122, 88, 2, 66, -87, -125, -38, 66, 73, 43, -5, 66, 90, 91, -26, 66, -75, 74, -82, 66, 75, -105, 110, 66, -106, 53, 64, 66, 119, -103, -16, 66, -61, -20, -41, 66, -116, -35, 7, 66, -111, -89, -52, 66, 97, 103, 94, 66, 121, -99, -53, 66, 21, -89, -128, 66, -60, -14, -33, 66, -59, 124, 86, 66, 86, -16, 53, 66, 69, 74, -59, 66, -83, 82, 8, 66, -101, -100, 79, 66, -78, -91, -120, 66, -95, -94, -104, 66, -57, 51, -50, 66, 91, -13, -90, 66, 78, 29, 71, 66, 81, 23, -72, 66, 54, -109, -94, 66, 83, 127, 18, 66, 94, -40, 1, 66, -60, 85, 55, 66, -109, 72, -76, 66, -96, 32, 67, 66, -105, 22, -9, 66, 93, 27, 48, 66, -119, -116, -53, 66, -108, 45, 112, 66, 107, -58, 124, 66, -70, -70, 46, 66, -65, -69, -74, 66, -67, 45, 100, 66, 126, 64, 1, 66, 70, 46, -98, 66, 102, 98, -81, 66, -102, -40, -128, 66, -118, 6, -100, 66, 72, 22, -127, 66, -75, 54, 25, 66, 87, -14, 89, 66, -70, 94, -54, 66, -108, -53, -67, 66, -62, -13, -107, 66, -64, 9, -46, 66, -109, 78, -53, 66, -77, 56, -5, 66, 76, -42, -85, 66, 91, 62, 1, 66, -112, 10, 14, 66, -106, 34, 26, 66, -106, -102, 127, 66, -61, 52, 102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], "precision": "FLOAT_32", "root": 0, "canonicalAndNotALeaf": true, "size": 230, "leftIndex": [ -1, 1, 255, 717437978, 1119213980, 1118444668, 989286208, 970882574, 988223299, 726931786, 1117026662, 710338696, 602037004, 712655080, 969089990, 4, 0 ], "rightIndex": [ -1, 1, 255, 1162258294, 975725585, 1104078506, 1104332129, 597802270, 988276139, 602574268, 1117551892, 975479669, 626329463, 1011657829, 968552234, 4, 0 ], "nodeFreeIndexes": [], "nodeFreeIndexPointer": 24, "leafFreeIndexes": [], "leafFreeIndexPointer": 24, "partialTreeStateEnabled": true }, "boundingBoxCacheFraction": 0.0, "partialTreeState": true, "seed": -1557102390726603767, "id": 0, "dimensions": 32, "staticSeed": 0, "weight": 0.0, "hasAuxiliaryData": false }, { "version": "2.0", "root": 0, "maxSize": 256, "outputAfter": 32, "storeSequenceIndexesEnabled": false, "centerOfMassEnabled": false, "nodeStoreState": { "version": "2.0", "capacity": 255, "compressed": true, "cutDimension": [ 0, 31, 255, 334547014, 454423597, 590996778, 207284134, 1064297783, 340994793, 911955070, 337419323, 183057998, 757176701, 531099199, 1004924066, 459475923, 849672573, 1023248702, 634775925, 924285275, 497880063, 41503966, 317367421, 886170957, 202459491, 933685293, 720539343, 187430363, 179875177, 324372037, 237219754, 91203445, 190356075, 349218209, 196730430, 247066034, 259757171, 615832889, 1020566075, 868218209, 0, 0, 0, 0, 0, 0 ], "cutValueData": [ 69, 106, 119, 16, 67, -41, 2, -41, 69, 30, -127, 72, 66, -86, -67, -82, 66, 96, 80, 3, 66, -112, -16, -50, 66, -116, -81, 95, 66, 73, -35, 108, 66, -120, -70, 31, 66, 70, 83, 102, 66, 125, 3, 124, 65, -98, 71, -4, 66, -72, 111, 75, 66, -99, -123, -22, 65, -51, 113, -47, 66, 87, 8, -67, 66, 77, -107, -119, 66, -122, -66, -30, 66, -64, -80, -100, 66, -122, 126, 77, 66, 75, 86, 8, 66, -93, 118, -125, 66, -96, -95, 85, 66, -77, -115, -64, 65, -101, -72, 91, 66, -126, 50, 83, 66, -110, -106, -110, 66, 32, -121, -85, 66, -71, 51, -51, 66, 124, -46, 65, 66, -113, -5, 16, 66, 116, 0, 120, 66, -68, -100, -114, 66, -72, 16, 83, 66, -108, 3, 120, 66, -77, -58, 124, 66, -77, -56, 23, 66, 87, -17, -19, 66, -124, 110, -78, 66, -61, -53, 104, 66, -115, 82, 120, 66, 96, 84, -118, 66, 97, -19, 57, 66, -126, -100, 73, 66, 71, 17, -50, 66, -111, 117, -25, 66, -105, -116, -25, 66, -78, 55, 13, 66, -71, -24, 21, 66, -76, 111, -91, 66, 87, -68, 124, 66, -60, -114, -55, 66, -69, -90, 104, 66, -88, 54, 109, 66, -117, -81, -5, 66, 78, -104, 13, 66, -78, -37, -81, 66, 109, 59, -105, 66, -75, 77, 61, 66, -73, -16, -2, 66, 119, 31, -51, 66, -115, 97, 106, 66, 122, 83, -28, 66, 84, 126, 43, 66, -93, -9, 28, 66, 59, -82, -85, 66, -83, 92, 74, 66, -89, -54, 126, 66, 79, -118, 47, 66, 102, -114, 87, 66, -78, 58, 79, 66, -111, -102, 113, 66, 111, -24, 100, 66, -75, -123, -113, 66, -74, -105, -86, 66, -70, -7, -20, 66, -77, 63, 19, 66, -127, 123, 11, 66, -103, -81, 1, 66, 117, -37, -107, 66, -61, 110, -109, 66, -112, -20, -123, 66, -92, 117, 45, 66, -117, -18, 87, 66, -69, -98, 73, 66, -117, -78, 16, 66, -59, -123, -84, 66, 75, 114, 35, 66, -125, -73, -75, 66, -80, -28, 111, 66, -100, -97, -22, 66, -110, 115, 103, 66, -59, 91, 27, 66, 81, 73, -100, 66, -120, 6, -53, 66, -69, -114, 103, 66, 98, -100, 15, 66, -68, 75, 80, 66, -61, 97, 8, 66, -75, -20, 54, 66, -120, 38, -95, 66, 77, -115, 20, 66, 72, 121, -115, 66, 78, -18, -7, 66, -66, -24, -34, 66, -79, 85, -91, 66, -67, 34, -47, 66, -71, -97, 7, 66, -86, 15, -126, 66, -67, -111, 43, 66, -124, 82, -6, 66, -80, 72, 120, 66, 78, 61, -11, 66, -113, 9, 73, 66, -107, -105, 0, 66, 74, -107, 65, 66, -100, -5, -63, 66, -111, 1, -65, 66, -102, 71, -19, 66, -127, 109, 80, 66, -103, 55, 110, 66, -90, -48, 35, 66, -104, -36, 46, 66, 93, -28, 53, 66, -103, 54, -61, 66, -62, 71, 31, 66, 102, 111, 46, 66, 70, -87, -36, 66, -60, 89, -90, 66, -57, -19, -12, 66, -99, 25, -52, 66, -73, -61, -71, 66, -127, -128, -114, 66, -110, 105, 84, 66, -65, 29, -31, 66, -100, 55, 14, 66, -86, -38, -7, 66, 81, 71, -122, 66, 73, 92, -56, 66, -89, -5, -38, 65, -96, -96, -50, 66, -90, 29, -59, 66, 74, -85, -47, 66, -109, 3, -13, 66, 76, 99, 47, 66, -61, 17, 111, 66, -96, -65, -69, 66, 83, 118, 0, 66, -66, 83, 30, 66, -106, -48, -54, 66, -116, 83, 43, 66, 103, -5, 33, 65, -11, -15, -113, 66, -121, 117, -19, 66, 82, -62, -13, 66, -117, -124, 60, 66, -106, -99, -47, 66, -59, -62, 32, 66, -113, 102, 89, 66, 114, 53, -126, 66, -97, -64, -22, 66, 85, 84, 50, 66, -61, 70, -6, 66, -113, 6, -53, 66, 96, -101, -23, 66, 85, 103, 19, 66, -68, -25, 67, 66, 85, -47, 74, 66, -114, 124, 95, 66, 89, -23, -27, 66, -111, -90, 20, 66, 85, -104, 2, 66, -77, 90, 99, 66, -79, -107, -7, 66, 98, 124, 111, 66, 86, 56, -10, 66, -72, -104, 57, 66, -111, -65, -43, 66, -113, 35, -104, 66, -99, 102, -102, 66, -118, 71, -40, 66, -109, -45, 18, 66, -103, -112, 71, 66, -119, 58, 60, 66, -100, 55, -33, 66, -64, -52, -19, 66, -67, -48, 121, 66, -114, -113, 112, 66, 83, 64, -8, 66, 119, 12, 64, 66, 122, 25, 32, 66, -91, 33, -72, 66, -68, -24, 37, 66, -95, -76, 122, 66, 80, 110, 60, 66, 73, 92, -48, 66, 77, -11, 106, 66, 86, 93, -57, 66, 112, 69, 16, 66, 81, 122, 28, 66, -117, -57, -67, 66, 69, -124, -37, 66, 82, 28, -55, 66, 91, -74, 99, 66, -111, 15, -113, 66, -104, 43, 115, 66, 82, 2, 74, 66, -117, -66, -97, 66, 110, 1, 39, 66, -78, -119, -32, 66, 88, -13, 34, 66, -106, 12, 105, 66, -60, 99, -51, 66, -112, -78, -118, 66, -104, 107, 124, 66, -74, 59, 45, 66, -98, 28, 12, 66, 92, 99, -38, 66, -122, -31, 8, 66, 68, 63, 53, 66, 103, 119, 94, 66, -108, 54, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], "precision": "FLOAT_32", "root": 0, "canonicalAndNotALeaf": true, "size": 222, "leftIndex": [ -1, 1, 255, 985046669, 1142949442, 1119015724, 1157213840, 773164723, 987705700, 597867872, 581689228, 1157399005, 1119154712, 973334957, 803749, 0, 0 ], "rightIndex": [ -1, 1, 255, 1033114486, 1142420885, 1102739963, 1142361671, 758300587, 975665623, 712458250, 581862005, 1117610944, 1104097918, 585916618, 798136, 0, 0 ], "nodeFreeIndexes": [], "nodeFreeIndexPointer": 32, "leafFreeIndexes": [], "leafFreeIndexPointer": 32, "partialTreeStateEnabled": true }, "boundingBoxCacheFraction": 0.0, "partialTreeState": true, "seed": -6409199319416524683, "id": 0, "dimensions": 32, "staticSeed": 0, "weight": 0.0, "hasAuxiliaryData": false }, { "version": "2.0", "root": 0, "maxSize": 256, "outputAfter": 32, "storeSequenceIndexesEnabled": false, "centerOfMassEnabled": false, "nodeStoreState": { "version": "2.0", "capacity": 255, "compressed": true, "cutDimension": [ 0, 31, 255, 1021646933, 647268721, 716742249, 116602150, 460414571, 41242661, 103863414, 800447167, 883388197, 932936781, 451910127, 1061072235, 169843189, 116108163, 987602797, 191433166, 880127831, 194078438, 1001698749, 258674287, 317697218, 576575781, 228028153, 437316001, 480413485, 249747785, 64201949, 523103735, 633141329, 204699517, 733193805, 208571447, 499115686, 974299113, 489373154, 1033721647, 257926714, 27354329, 0, 0, 0, 0, 0 ], "cutValueData": [ 67, -82, -91, 100, 68, 90, 28, 55, 67, 120, 94, -14, 67, -43, -13, -27, 67, -116, -125, -100, 66, -83, -122, -36, 66, -122, -92, 41, 65, -124, -104, -92, 66, -69, 22, -26, 66, -114, 10, -72, 65, -21, -30, -124, 66, -115, 37, 3, 66, -99, -87, 114, 66, 69, -63, -99, 66, 99, 119, -122, 66, -95, 10, -75, 66, 99, 36, 11, 66, 126, -8, 25, 66, -69, -58, 91, 66, -110, -31, 41, 66, -106, -126, 51, 66, -68, 59, 119, 66, -128, 26, -61, 66, 96, 53, -93, 66, 97, -86, 88, 66, 93, 69, -124, 66, 120, -105, 34, 66, -70, 111, -87, 66, 111, 100, -122, 66, -99, -4, 47, 66, -123, 122, -38, 66, -100, -57, 28, 65, 84, -116, -116, 66, -95, -28, -96, 65, 10, -28, -35, 66, -107, -30, 13, 66, -73, -69, 117, 66, 87, -87, -60, 66, -117, -77, 109, 66, -108, 81, -43, 65, 32, 72, -117, 66, 76, -57, -107, 66, 116, 6, -7, 66, -105, 15, -4, 66, -62, -99, 124, 66, 71, -43, -43, 66, 79, -81, -22, 65, -84, -40, 38, 66, -110, -74, -88, 66, -93, -49, -26, 66, 115, -72, 11, 66, -95, -5, -128, 66, -63, 79, -41, 66, -84, -58, 96, 66, -121, 33, -78, 66, -81, 125, 18, 66, 79, 68, 57, 66, -69, 24, -91, 66, -115, 61, 111, 66, -126, 77, 17, 66, 81, 124, 76, 66, 104, -99, 87, 66, -68, -56, 89, 66, 118, -74, 52, 66, -72, -32, 4, 66, -98, 115, -77, 66, 98, -40, 127, 66, -113, -3, -97, 66, -128, -66, -89, 66, -107, 31, -113, 66, 123, 56, -43, 66, 104, 35, 38, 66, -109, 92, -126, 66, 88, -76, 69, 66, -80, 16, -93, 66, 83, 40, 123, 66, -108, -104, 30, 66, 119, -14, 25, 66, 90, 112, 11, 64, -109, 94, 88, 66, -63, -62, 29, 66, 84, 9, -87, 66, -89, 99, 120, 66, 117, 100, 21, 66, -111, -81, -67, 66, 88, 12, 1, 66, 110, 2, 88, 66, 115, -103, 13, 66, 123, 50, -6, 66, -118, 68, 21, 66, -67, 31, 6, 66, -62, 34, 123, 66, -66, -85, 10, 66, -78, -60, 55, 66, -70, 70, 90, 66, -113, -32, 111, 66, 92, 67, -113, 66, -73, -7, -107, 66, 115, -76, 113, 66, 73, 109, 37, 66, 95, 37, 78, 66, -74, -71, 90, 66, -61, -68, 100, 66, 68, 94, -88, 66, -102, -110, -88, 66, -74, 49, -110, 66, -121, 125, 93, 66, -109, -2, 60, 66, -96, -21, -107, 66, -101, -28, -39, 66, -105, -82, 3, 66, -120, 127, 118, 66, 74, 89, 28, 66, -106, -80, -96, 66, 97, -101, -23, 66, 78, 115, -108, 66, 80, -20, -102, 66, -83, -122, 120, 66, -87, -110, 97, 66, 101, -121, -54, 66, -78, -108, -95, 66, -94, -98, 11, 66, 69, -88, -107, 63, -69, -59, 4, 66, -83, -16, 72, 66, -115, -52, -11, 66, -89, 105, -13, 66, -95, 116, 71, 66, -67, -91, -65, 66, 84, 54, -77, 66, -103, -106, -90, 66, -84, 101, 6, 66, -102, 42, 4, 66, 101, -56, 71, 66, 78, 41, 38, 66, -81, -88, 36, 66, -110, -51, 112, 66, -72, -87, -86, 66, -112, -86, -107, 66, -89, 93, -14, 66, -71, -47, -27, 66, -99, 98, -38, 66, -103, -100, -70, 66, -102, -84, -11, 66, -88, -6, -12, 66, -88, 83, 80, 66, -103, -90, -27, 66, -101, -121, -49, 66, -65, 117, -74, 66, -75, 107, 11, 66, -108, 124, -16, 66, -72, -43, 88, 66, -65, 119, -34, 66, -112, 8, 55, 66, -73, 59, 100, 66, 74, 53, 69, 66, -103, 31, 112, 66, -64, 12, 38, 66, -121, -112, -33, 66, 83, -99, -80, 66, -99, -110, 63, 66, -99, -77, 92, 66, 81, 54, -46, 66, 87, -7, -84, 66, 77, -88, 62, 66, 103, -127, -3, 66, -64, -106, 16, 66, 69, 42, 68, 66, -98, 105, -98, 66, -60, 83, -96, 66, -59, -125, 106, 66, -100, -18, -48, 66, 79, 117, -19, 66, -64, 36, -5, 66, -111, -28, 87, 66, 86, 126, 6, 66, -92, 70, 119, 66, -70, 61, -73, 66, 77, 42, 48, 66, -64, -67, 126, 66, -105, -46, -41, 66, -71, 2, 44, 66, -96, -38, 10, 66, 92, 13, -5, 66, 79, -62, -109, 66, -114, 113, -104, 66, 78, 101, 37, 66, -128, -32, 97, 66, 93, -47, -108, 66, -98, -102, 12, 66, -73, 24, -42, 66, -79, -36, 124, 66, -67, -88, 80, 66, -114, -104, -38, 66, -101, 19, 46, 66, 125, 4, -81, 66, 75, 46, 90, 66, -68, -41, -94, 66, -106, -109, -115, 66, 79, -87, -21, 66, 84, -111, -73, 66, -97, 106, 120, 66, -108, 27, -80, 66, -123, -62, 67, 66, -61, 69, -42, 66, 109, -32, 40, 66, 93, -39, -122, 66, -61, -122, -65, 66, -62, -32, -47, 66, -64, -17, 72, 66, 92, -124, 26, 66, -119, -118, 116, 66, -111, -8, 28, 66, -59, 68, 115, 66, -114, 72, -69, 66, -69, 55, 127, 66, -73, 27, -40, 66, -115, -59, -3, 66, -98, 96, 52, 66, 70, -107, 1, 66, -114, -73, -104, 66, 71, -21, 54, 66, -110, 46, -119, 66, -60, -125, 13, 66, -118, 108, -42, 66, -67, 59, -69, 66, -63, -110, -63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], "precision": "FLOAT_32", "root": 0, "canonicalAndNotALeaf": true, "size": 227, "leftIndex": [ -1, 1, 255, 1162176173, 1099306471, 974102908, 1161730016, 581376037, 602456443, 731705777, 730120136, 588297802, 1112579032, 629513977, 237465553, 0, 0 ], "rightIndex": [ -1, 1, 255, 1162018588, 1117027489, 989520461, 1027747025, 588108236, 1112815571, 581396173, 772451791, 988473614, 1025956354, 588049028, 194419561, 0, 0 ], "nodeFreeIndexes": [], "nodeFreeIndexPointer": 27, "leafFreeIndexes": [], "leafFreeIndexPointer": 27, "partialTreeStateEnabled": true }, "boundingBoxCacheFraction": 0.0, "partialTreeState": true, "seed": -6381589943519458827, "id": 0, "dimensions": 32, "staticSeed": 0, "weight": 0.0, "hasAuxiliaryData": false }, { "version": "2.0", "root": 0, "maxSize": 256, "outputAfter": 32, "storeSequenceIndexesEnabled": false, "centerOfMassEnabled": false, "nodeStoreState": { "version": "2.0", "capacity": 255, "compressed": true, "cutDimension": [ 0, 31, 255, 352281810, 446095089, 1012246111, 849907043, 782611623, 763426931, 992660639, 215657078, 217409703, 623679705, 241085029, 364113786, 363982511, 92009673, 56743473, 790423497, 653489239, 863761909, 36568358, 209016702, 385558117, 329419439, 107947858, 472772570, 656668410, 358792059, 1014472255, 321861093, 379960866, 305114406, 706424673, 190769787, 441896547, 120269177, 334486061, 855607679, 259879998, 639696419, 14, 0, 0, 0, 0 ], "cutValueData": [ 68, -27, -117, -90, 69, 97, -12, 50, 67, -57, -21, 87, 68, -102, 77, 4, 65, 25, -115, 120, 67, 8, 11, -116, 66, -116, 94, 116, 66, 121, 76, -37, 66, -117, 19, 78, 66, -126, 98, -52, 66, -117, -81, -40, 66, -111, -85, 88, 66, -126, -29, -69, 66, -88, -7, -57, 66, -98, 11, 74, 65, -37, -93, -4, 66, 96, 42, -108, 66, -81, -79, -108, 65, -18, 31, 48, 66, -126, 101, -124, 64, -26, 20, 106, 66, -120, -85, 42, 66, -66, -20, -61, 66, -89, 97, -40, 66, 76, 40, 52, 66, -104, 105, 71, 66, -103, -12, -36, 66, -126, -59, 39, 66, -60, -91, 106, 66, 121, -62, 119, 66, 82, 22, 9, 66, 80, 9, 127, 66, -67, -96, 28, 66, -95, -80, -43, 64, -17, 81, 57, 66, -62, -59, -11, 66, 82, -47, -96, 65, 17, 1, 108, 66, 101, -97, -41, 66, -98, 120, -45, 66, -74, -71, 36, 66, -117, 100, -84, 66, -71, -104, 44, 66, 3, 5, 89, 66, -74, 108, -89, 66, -103, 117, 20, 66, -108, 70, -21, 66, -66, 80, -44, 66, 68, 25, -51, 66, -110, -115, -23, 66, -64, 68, 94, 66, -66, -120, -121, 66, 109, -85, 125, 66, -68, -28, 75, 66, -88, -9, -106, 66, -60, -127, 58, 66, -62, -62, -80, 66, -97, -106, 4, 66, -62, 98, -73, 66, -79, 115, -97, 66, -101, 122, -20, 66, 112, -1, -33, 66, -73, 24, -74, 66, -96, 125, 81, 66, -109, -28, -41, 66, 86, -55, -66, 66, -76, 40, -39, 66, 111, 41, 50, 66, 104, 14, 91, 66, 98, 62, 49, 66, 124, 45, -39, 66, -70, 15, 4, 66, 77, 41, -110, 66, -93, -6, 20, 66, 99, -34, 1, 66, 100, 3, -51, 66, 77, -116, 56, 66, -75, 30, 45, 66, -126, -62, 35, 66, -80, -60, 8, 66, -124, -109, -7, 66, 86, 112, -118, 66, 78, 33, -33, 66, -68, -124, -95, 66, -88, 26, 26, 66, -104, 77, 38, 66, -116, 23, 46, 66, 78, 26, 36, 66, -73, -34, -20, 66, -126, 44, -102, 66, -86, 93, -39, 66, -60, 93, -47, 66, -116, -41, -55, 66, -102, -118, 108, 66, -97, -105, 117, 66, 74, -79, -27, 63, -63, -29, -25, 66, -81, -80, -2, 66, -111, -21, 86, 66, -68, 115, -45, 66, 73, 63, 7, 66, 115, 84, -107, 66, -127, 105, -86, 66, 92, -90, -57, 66, -114, -34, -122, 66, 88, -110, 1, 64, -56, 29, 42, 66, -104, 1, -41, 66, -97, -78, -4, 66, -119, -30, -98, 66, 78, 105, 69, 66, 110, -20, -121, 66, -60, -35, -72, 66, -112, -1, 15, 66, -57, 70, -128, 66, 114, 63, 97, 66, -111, -117, 99, 66, -83, -24, -41, 66, 92, 109, 19, 66, -66, 30, -66, 66, -107, 3, 0, 66, 77, -54, -44, 66, -116, 100, -15, 66, -71, -105, -61, 66, 87, 115, 98, 66, 74, 24, 27, 66, 73, 111, -59, 66, -115, -90, -58, 66, -87, -36, 51, 66, -117, -92, 61, 66, -94, -94, -110, 66, -104, 114, 66, 66, -72, -55, 53, 66, -64, -123, -45, 66, -107, -119, -63, 66, -79, -51, 85, 66, -91, -4, 22, 66, 116, -98, 105, 66, -74, -25, -95, 66, -78, -99, 119, 66, 69, 100, -23, 66, 123, 55, -96, 66, -76, -64, 59, 66, -62, -82, -67, 66, -70, -12, 18, 66, 97, -99, -87, 66, -101, 101, -49, 66, 103, 0, 18, 66, -65, -41, -114, 66, 76, -41, 20, 66, 96, 54, 67, 66, 87, 125, 118, 66, -69, 34, 90, 66, -120, 0, 4, 66, -75, -32, -116, 66, -66, 5, -37, 66, 100, 52, -67, 66, -96, 32, -104, 66, 97, 81, -87, 66, 96, -79, 93, 66, 127, 91, 80, 66, -81, 39, -43, 66, -99, 27, -50, 66, 95, -44, 55, 66, -111, -70, -28, 66, -76, 41, -38, 66, -70, 33, 58, 66, -108, -107, -34, 66, -61, 75, -39, 66, -101, 116, -67, 66, 102, -77, 50, 66, 82, -24, -56, 66, -65, -45, 117, 66, 112, 118, -25, 66, -74, -41, -73, 66, -96, 9, 127, 66, 96, -84, 115, 66, 89, -7, -127, 66, -70, 75, 6, 66, -107, -42, -108, 66, -97, -29, -59, 66, 87, -123, 51, 66, 73, 31, 71, 66, -64, -65, -34, 66, -113, -104, 10, 66, -126, 99, -85, 66, 74, -79, 114, 66, 90, -55, 20, 66, -70, 3, 17, 66, -92, 13, -101, 66, -101, -90, 116, 66, -100, -117, -94, 66, 104, -104, 58, 66, 84, -62, 79, 66, 99, -55, -37, 66, -97, 88, -66, 66, -125, 59, 26, 66, -96, 118, 28, 66, -122, 84, -93, 66, 78, -47, 113, 66, -65, 92, 64, 66, -74, 40, 102, 66, -66, -65, -22, 66, 87, 115, -52, 66, -120, -5, -102, 66, -107, 20, -90, 66, -86, 113, -26, 66, 121, -99, 124, 66, -64, 23, 14, 66, -108, 30, -44, 66, 113, 31, 11, 66, 79, -112, -29, 66, -80, -91, 22, 66, 109, -92, -51, 66, 93, 0, -90, 66, -121, -111, -25, 66, -62, 118, 21, 66, -113, 34, 116, 66, -107, -99, 45, 66, -83, 79, 101, 66, 101, -114, 36, 66, 86, 89, -54, 66, 76, -61, 83, 66, -93, 57, -6, 66, 83, 47, -113, 66, -109, -89, -8, 66, -79, -45, -118, 66, 86, 62, 120, 66, -70, -108, -128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], "precision": "FLOAT_32", "root": 0, "canonicalAndNotALeaf": true, "size": 229, "leftIndex": [ -1, 1, 255, 586632050, 1161551879, 774283210, 1013980649, 758107400, 1140803963, 724700843, 1147909361, 753917911, 1156707913, 1116904261, 982900129, 1, 0 ], "rightIndex": [ -1, 1, 255, 1160660299, 759776164, 643546618, 581690938, 631086548, 1104609203, 772475854, 1018765715, 624737357, 717188386, 643920232, 726273913, 1, 0 ], "nodeFreeIndexes": [], "nodeFreeIndexPointer": 25, "leafFreeIndexes": [], "leafFreeIndexPointer": 25, "partialTreeStateEnabled": true }, "boundingBoxCacheFraction": 0.0, "partialTreeState": true, "seed": 4315119003239682117, "id": 0, "dimensions": 32, "staticSeed": 0, "weight": 0.0, "hasAuxiliaryData": false }, { "version": "2.0", "root": 0, "maxSize": 256, "outputAfter": 32, "storeSequenceIndexesEnabled": false, "centerOfMassEnabled": false, "nodeStoreState": { "version": "2.0", "capacity": 255, "compressed": true, "cutDimension": [ 0, 31, 255, 919976138, 598153421, 911850099, 1058089295, 472597809, 48325977, 184355545, 1025637586, 1067899175, 804300141, 588347067, 780007033, 226026913, 867506907, 535546303, 486001593, 367601249, 200992302, 995732201, 731609342, 903854405, 460159671, 611882022, 876015154, 720693681, 220133731, 603434450, 207341437, 989431535, 907646381, 1052191299, 381257029, 346068294, 134122171, 759129197, 321561653, 917574851, 784835, 0, 0, 0, 0, 0 ], "cutValueData": [ 68, 83, 89, 37, 69, 82, -50, 5, 66, -57, -42, -67, 66, 75, -14, -61, 66, -104, -98, -94, 66, 64, 58, 67, 66, -100, -40, -101, 66, -61, -57, -43, 66, -69, -108, 33, 66, -85, -128, -59, 66, -76, -57, 123, 66, -122, 122, -6, 66, 93, -81, -41, 66, 105, 23, 65, 66, -91, -54, 123, 64, -112, -84, 114, 66, -109, -75, -26, 66, 113, 24, 113, 66, 85, -108, 77, 66, -75, 27, -12, 66, -82, 45, -1, 66, -67, 56, -46, 66, -120, 72, -118, 66, 106, 92, -8, 65, -65, -14, 123, 66, -104, -75, 120, 66, -105, -101, 27, 66, -69, 69, -21, 66, -64, -32, -73, 66, -78, -77, 35, 66, -109, -80, 75, 66, -58, -26, -96, 66, -113, -67, 69, 66, -80, 86, -5, 66, -65, -66, -49, 66, -119, 21, 23, 66, -121, 58, 32, 66, -83, -60, 5, 66, -75, 117, -42, 66, -88, 33, 94, 66, 122, 25, 28, 66, -109, 7, -86, 66, -77, 10, -91, 66, -74, -22, -67, 66, 90, -72, -37, 66, 95, -105, 57, 66, -62, -121, 26, 66, -67, 104, -82, 66, 109, -112, -127, 66, -110, -77, -43, 66, -66, -33, -102, 66, -122, 59, 22, 66, -65, -78, 52, 66, 72, -91, -104, 66, 49, -65, 49, 66, 87, -127, -112, 66, -110, -101, 0, 66, -117, -29, -39, 66, 71, 57, 33, 66, 113, -19, -50, 66, 90, -90, -44, 66, -103, 86, 63, 66, -116, 123, 30, 66, -72, 116, -1, 66, -107, -77, 108, 66, -104, 54, -4, 66, -128, 27, -101, 66, 75, -43, 61, 66, -110, -79, -93, 66, 106, -66, 114, 66, 88, -25, -58, 66, 70, -89, 24, 66, -120, -124, -97, 66, -110, 98, -1, 66, -106, -16, 9, 66, -112, -44, 10, 66, 114, 38, -21, 66, -96, 125, 67, 66, 107, 71, 92, 66, -81, -26, 55, 66, -60, 20, 9, 66, -60, 49, -105, 66, 97, 39, 16, 66, -114, 50, 105, 66, 68, -36, -20, 66, -124, -56, 39, 66, -69, -59, -14, 66, 115, 92, -17, 66, -66, -104, 118, 66, 69, -63, 26, 66, -93, 85, -52, 66, -105, 94, 8, 66, -67, -89, 5, 66, 101, -109, 55, 66, 108, -81, 18, 66, -59, 72, -86, 66, -92, -66, 102, 66, 90, 43, -55, 66, -102, -121, -50, 66, -61, 115, -36, 66, -62, 34, -112, 66, -71, -32, -61, 66, -65, -20, 24, 66, -104, -102, -123, 66, -99, -90, -43, 66, -94, 34, 56, 66, 105, -38, -79, 66, -101, 21, -96, 66, -113, 63, 121, 66, 78, 115, 36, 66, -68, -119, -77, 66, 81, -69, -40, 66, -119, 42, 127, 66, -123, -60, 123, 66, -76, -35, -55, 66, 104, 16, 1, 66, -77, 9, -31, 66, -68, -51, 122, 66, -96, 43, 89, 66, -120, 73, -2, 66, -117, 28, 81, 66, -78, 35, 108, 66, -63, 100, 56, 66, 71, 24, 112, 66, -107, -35, 10, 66, -67, 61, 77, 65, -21, -95, -6, 66, -109, -66, 55, 66, -71, 36, -32, 66, -63, 60, 50, 66, -70, 102, 17, 66, -104, 104, 57, 66, -73, 28, 62, 66, 47, -8, -81, 66, -100, -95, 98, 66, -95, 81, 93, 66, 92, 13, 71, 66, -66, -54, 122, 66, -63, 77, 50, 66, -99, -82, -97, 66, 92, 74, -122, 66, -109, -118, -27, 66, 76, 115, 67, 66, -71, -36, 21, 66, -111, 71, -8, 66, -112, 28, -97, 66, -63, -60, 41, 66, -119, -55, -26, 66, 89, 77, 77, 66, -109, -16, 8, 66, 77, 13, 41, 66, 100, -82, -88, 66, -62, -94, -42, 66, -111, -120, 108, 66, -116, -87, -74, 66, -85, -71, 114, 66, -65, -107, 5, 66, -65, 55, -72, 66, 93, 46, -12, 66, 82, 82, 55, 66, 81, -112, 8, 66, -90, 97, -110, 66, -106, 124, -113, 66, 80, 99, -46, 66, -106, 71, -109, 66, 99, -91, -57, 66, -98, -77, -87, 66, -61, -33, -29, 66, 84, -59, -104, 66, 91, -116, 25, 66, -111, -48, -125, 66, 86, -124, -119, 65, 88, -3, 18, 66, 126, -53, -55, 66, -122, 76, 40, 66, -108, -4, -37, 66, -91, -95, -35, 66, 115, -121, 49, 66, -92, -55, 102, 66, 96, 69, 82, 66, 96, -1, 98, 66, -88, -72, 76, 66, -67, 30, -29, 66, -64, -70, 80, 66, -118, -105, 7, 66, 80, -97, 111, 66, -100, -56, -21, 66, -71, 41, -91, 66, -114, 44, -88, 66, 103, -116, 31, 66, 69, 62, -4, 66, 86, -94, -120, 66, -66, 124, -51, 66, -66, -93, -86, 66, -116, -101, -78, 66, -103, 33, 102, 66, -79, -114, -114, 66, -74, -52, -69, 66, 85, 16, -30, 66, -89, 22, 36, 66, -68, -27, 19, 66, -111, -31, -102, 66, 86, -99, -21, 66, 72, 123, -8, 66, -100, 77, -26, 66, 99, 97, -105, 66, -113, -38, -9, 66, -64, -46, -26, 66, 70, 7, 83, 66, -82, -56, -22, 66, -117, 53, 89, 66, -117, -17, 80, 66, -79, 61, 77, 66, -84, -79, 98, 66, -95, -50, 63, 66, -120, 62, 72, 66, 76, 98, 43, 66, -80, 43, 43, 66, -108, -42, 47, 66, -62, 69, -86, 66, 85, 103, 74, 66, 90, -95, 88, 66, 102, 57, 45, 66, -62, 124, -80, 66, -66, -57, -54, 66, 89, -1, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], "precision": "FLOAT_32", "root": 0, "canonicalAndNotALeaf": true, "size": 226, "leftIndex": [ -1, 1, 255, 1119035087, 586452526, 731768003, 1112101646, 983611634, 730190915, 712121219, 583259686, 755627417, 712477904, 1102533682, 65339941, 0, 0 ], "rightIndex": [ -1, 1, 255, 1162084315, 774289529, 1117434518, 1155167963, 581684128, 729935063, 602647289, 624965108, 983615629, 586682179, 581307889, 64592683, 0, 0 ], "nodeFreeIndexes": [], "nodeFreeIndexPointer": 28, "leafFreeIndexes": [], "leafFreeIndexPointer": 28, "partialTreeStateEnabled": true }, "boundingBoxCacheFraction": 0.0, "partialTreeState": true, "seed": 6333024226119915415, "id": 0, "dimensions": 32, "staticSeed": 0, "weight": 0.0, "hasAuxiliaryData": false }, { "version": "2.0", "root": 0, "maxSize": 256, "outputAfter": 32, "storeSequenceIndexesEnabled": false, "centerOfMassEnabled": false, "nodeStoreState": { "version": "2.0", "capacity": 255, "compressed": true, "cutDimension": [ 0, 31, 255, 725305810, 707364282, 574150990, 392820601, 524205869, 100595622, 601299947, 363825915, 521203237, 716237767, 503184678, 116342333, 975918205, 443637058, 780005205, 529975137, 124696053, 327093930, 460105249, 325913157, 591047777, 473073847, 213079766, 1033567925, 66516678, 259783970, 401528123, 737008446, 439068133, 514641389, 757262194, 857007535, 513349057, 1016106223, 371975618, 765893559, 799241414, 989324881, 1050789593, 23, 0, 0, 0 ], "cutValueData": [ 66, -69, 50, -36, 68, -15, -80, -76, 68, 69, -46, 2, 68, -115, 115, 3, 66, 88, 47, -2, 66, -107, -60, 59, 66, -67, 123, 105, 66, -104, -96, -74, 66, -107, -88, 10, 66, 108, -38, 41, 66, -67, 102, -49, 66, -116, -64, 111, 66, -64, -72, -109, 66, -79, -46, 72, 66, -68, -64, 28, 66, -105, 69, 69, 66, 71, 87, 84, 66, -111, 9, 36, 66, -122, 126, 90, 66, 81, -107, -9, 66, -98, 28, 51, 66, 78, 105, -19, 66, -60, 43, 32, 66, 119, -80, -59, 66, -97, -37, -48, 66, -112, 39, 78, 66, 124, 90, -61, 66, -93, -110, 5, 66, 78, 31, 77, 66, 96, -14, -70, 66, -81, -13, -74, 66, -99, -28, -40, 66, -106, 81, -6, 66, -95, 27, 104, 66, 89, -123, -2, 66, -59, -50, 68, 66, 95, 30, -110, 66, 104, 40, -12, 66, -63, 62, 54, 66, -83, 50, -54, 66, -122, 25, 60, 66, -109, -50, -117, 66, 96, -22, -102, 66, 104, -115, 90, 66, -74, 63, -60, 66, 79, 26, 39, 66, -70, -62, -58, 66, -80, -33, 22, 66, -109, 67, 68, 66, -122, 60, 22, 66, 84, 49, -17, 66, -116, -84, -52, 66, 57, -22, 119, 66, 46, 11, 18, 66, 68, 26, -122, 66, -70, -16, -100, 66, -62, -117, 66, 66, -114, -111, -128, 66, 77, -18, 11, 66, -125, 78, 101, 66, -64, 68, 100, 66, -118, 57, -17, 66, 84, 29, -32, 66, 101, -90, 2, 65, 43, 10, -122, 66, -79, 63, -112, 66, -92, 91, 84, 66, -121, -114, -24, 66, 89, 55, -15, 66, -76, 110, -54, 66, -63, 32, -43, 66, 76, 38, -97, 66, -97, 119, 86, 66, 83, -121, 50, 66, -97, -13, -126, 66, -68, 126, -78, 66, -66, 101, -86, 66, -100, 45, 83, 66, -84, -57, 95, 66, -74, 100, -97, 66, 89, -109, 77, 66, -77, -85, -125, 66, -112, 121, -42, 66, -115, 54, 111, 66, -124, 95, -96, 66, -61, -106, -75, 66, 110, -5, 119, 66, -123, -9, -118, 66, 118, 78, 73, 66, 70, 51, 101, 66, -102, -35, -93, 66, 91, 72, -91, 66, -98, -60, -107, 66, -114, 114, -28, 66, -105, -13, 26, 66, 83, -62, -75, 66, -122, -91, 54, 66, 72, -60, -75, 66, -105, -91, -116, 66, -120, 97, 2, 66, -78, -27, -65, 66, 83, -8, 66, 66, -70, 101, 19, 66, -109, 66, -113, 66, 74, -24, -60, 66, -65, 20, -109, 66, 108, 12, -38, 66, -110, -39, 49, 66, -111, 118, -25, 66, -99, -96, -79, 66, -120, -105, 62, 66, -107, 33, -35, 66, -61, -76, 29, 66, -113, -2, 17, 66, -115, -122, -75, 66, -74, 122, 18, 66, -67, -113, -102, 66, -59, -92, 15, 66, -63, -28, 31, 66, -101, 107, 12, 66, -97, -84, -77, 66, 109, 46, -4, 66, 87, -119, -33, 66, -114, -96, 91, 66, 71, -73, -79, 66, -115, 110, 36, 66, 88, 33, 118, 66, -103, 35, -28, 66, -62, 57, 64, 66, -111, -72, 7, 66, 91, -62, -95, 66, -70, -70, -60, 66, -62, -25, -127, 66, -57, -7, 74, 66, -112, 26, -80, 66, -82, -77, 76, 66, 127, -56, -31, 66, -59, 9, -13, 66, -114, -18, 47, 66, -128, -27, -53, 66, 97, 67, 112, 66, -103, -43, 60, 66, -108, 16, 48, 66, -72, -44, 96, 66, -76, -9, -9, 66, -63, -1, -28, 66, -117, 45, 103, 66, -91, 37, 54, 66, 77, 102, -80, 66, -105, 91, 25, 66, -80, -73, -104, 66, -106, 53, 42, 66, 85, -116, -103, 66, 77, 125, -116, 66, 78, -122, -86, 66, 97, 106, 58, 66, 105, -87, 10, 66, -113, 67, -41, 66, -128, 99, 46, 66, -111, -1, 62, 66, -86, 5, 25, 66, 83, -79, 24, 66, -65, -11, -106, 66, -111, -95, 51, 66, -65, -62, -89, 66, 90, -49, 119, 66, -75, 90, 20, 66, -113, 67, 73, 66, -107, -113, 31, 66, 85, 60, -127, 66, -114, -90, -111, 66, 97, -9, 0, 66, -63, 12, 120, 66, -118, 114, -27, 66, -111, 101, 12, 66, 74, -10, 62, 66, 82, -28, 109, 66, -84, -115, -127, 66, -61, -115, 65, 66, 87, 34, -103, 66, -92, 39, -59, 66, 83, -115, -99, 66, -126, -111, 88, 66, -112, -75, -30, 66, -64, 100, -57, 66, -73, 18, 15, 66, -127, -72, -101, 66, -115, 124, 63, 66, -102, -121, 40, 66, -101, 92, -82, 66, -101, -90, -14, 66, -124, 4, 17, 66, -112, -43, 114, 66, -68, -34, 24, 66, -100, -44, -106, 66, -62, -66, -104, 66, -105, -66, 106, 66, 84, 113, -79, 66, 69, 17, 66, 66, 69, -125, 37, 66, 86, -91, 40, 66, -105, -40, 75, 66, -98, -126, 113, 66, -67, 119, -123, 66, -60, -2, 123, 66, -70, 33, -23, 66, -114, 89, 121, 66, -121, -124, -106, 66, -70, -26, -121, 66, 107, 105, -51, 66, 92, -114, 33, 66, -107, -32, 24, 66, -63, -107, -37, 66, -116, -80, 95, 66, -79, -90, -58, 66, -70, 106, -32, 66, -63, -102, 70, 66, -66, 56, -36, 66, -101, -9, -97, 66, -79, 37, 76, 66, -92, 91, 21, 66, 88, 7, 107, 66, -120, -43, -74, 66, -62, -118, -39, 66, -128, -13, 80, 66, 83, 120, -24, 66, 99, -90, 101, 66, -123, 27, 114, 66, -117, -70, 126, 66, -96, -69, -9, 66, -95, 48, 105, 66, 93, 120, -57, 66, -93, 104, 44, 66, 73, 15, 53, 66, 81, -113, -13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], "precision": "FLOAT_32", "root": 0, "canonicalAndNotALeaf": true, "size": 235, "leftIndex": [ -1, 1, 255, 1031526980, 1160647460, 624953951, 1147293544, 985265089, 629206132, 717259129, 631289606, 597605485, 1155152623, 586091902, 586526062, 1093, 0 ], "rightIndex": [ -1, 1, 255, 1162261427, 1157469749, 629166770, 1104313957, 601859371, 1140806993, 729488185, 712397668, 640915378, 1017098248, 586149910, 602647168, 1174, 0 ], "nodeFreeIndexes": [], "nodeFreeIndexPointer": 19, "leafFreeIndexes": [], "leafFreeIndexPointer": 19, "partialTreeStateEnabled": true }, "boundingBoxCacheFraction": 0.0, "partialTreeState": true, "seed": 7119250912786373213, "id": 0, "dimensions": 32, "staticSeed": 0, "weight": 0.0, "hasAuxiliaryData": false }, { "version": "2.0", "root": 0, "maxSize": 256, "outputAfter": 32, "storeSequenceIndexesEnabled": false, "centerOfMassEnabled": false, "nodeStoreState": { "version": "2.0", "capacity": 255, "compressed": true, "cutDimension": [ 0, 31, 255, 371250761, 54467019, 526247358, 733308751, 274331871, 123272041, 90887897, 799383353, 212970423, 765642462, 607554857, 599727953, 1042733287, 900966834, 1067826743, 47425093, 366059497, 212403539, 865144499, 475104463, 317101918, 571837785, 477616993, 762113089, 880712445, 588639557, 249354317, 37284826, 873768693, 764752943, 662042155, 492263526, 45852887, 595420995, 934720617, 121212257, 778082150, 33389169, 0, 0, 0, 0, 0 ], "cutValueData": [ 67, -6, -78, -67, 69, 34, 72, 124, 66, -127, 86, -4, 66, -110, 98, 63, 68, -17, 28, -118, 66, 74, -114, 11, 66, 111, 93, -34, 69, 124, 120, 100, 66, -74, -124, -41, 66, -67, -41, 56, 66, 107, 98, 33, 66, 107, -11, 121, 66, -69, -1, -72, 66, -115, 110, -108, 66, 45, -80, 34, 66, 77, -105, 97, 66, -122, 28, -3, 66, 84, 75, 104, 66, 91, 126, -22, 66, -61, -112, -26, 66, -109, -39, 76, 66, -70, -11, 82, 66, 72, -14, 8, 66, -89, 45, -106, 66, 72, 3, -108, 66, -73, -109, -85, 66, -66, 125, -111, 66, 124, 99, 57, 66, 6, -126, 114, 65, 22, 20, -49, 66, -97, -20, -91, 66, 113, -83, 15, 66, -96, -76, -70, 66, -90, 42, 54, 66, -117, -94, -65, 66, 108, 69, 9, 66, -127, 114, 111, 66, -63, -35, -21, 66, -121, 22, 101, 66, -104, 94, 88, 66, -86, 126, 90, 66, -73, 20, -21, 66, -104, -29, -42, 66, -110, -18, -128, 66, 70, 45, -78, 66, 126, -16, -29, 66, -60, -109, 52, 66, 70, 114, 19, 66, 127, 64, -27, 66, -108, -115, -29, 66, -83, 61, 114, 66, 4, -28, -1, 66, 70, -114, -16, 66, -68, -101, 116, 66, -70, 31, -122, 66, -65, 31, 15, 66, -107, -124, -40, 66, -106, -49, -122, 66, -76, 16, -90, 66, -60, 99, -92, 66, -118, -58, -112, 66, -118, -118, -46, 66, 84, 119, 111, 66, -98, 19, -84, 66, -126, 106, 75, 66, -70, -59, 31, 66, -123, -77, 101, 66, -62, 62, -128, 66, 72, 66, 109, 66, -64, 82, 43, 66, 75, 18, 21, 66, -108, 42, -46, 66, 99, -57, 99, 66, 127, -64, 60, 66, -67, 109, 81, 66, -126, -114, 123, 66, -67, -33, 8, 66, 121, 45, -54, 66, -78, 51, 5, 66, -102, 5, -85, 66, -65, -34, -89, 66, 75, 100, -17, 66, 68, 51, -59, 66, -66, 117, 98, 66, 93, -43, -50, 66, -107, -127, -54, 66, 111, -56, -9, 66, 121, -11, 42, 66, -69, -11, 104, 66, 68, 58, -4, 66, -108, 28, 56, 66, -60, -39, -21, 66, -115, -123, 63, 66, -122, -73, -91, 66, -113, -4, -92, 66, -104, -44, -82, 66, -106, -14, 3, 66, 103, 2, -62, 66, 99, -33, -120, 66, 113, 22, -92, 66, -112, 3, 39, 66, -65, -67, -21, 66, 86, -25, 42, 66, -66, 19, 6, 66, -116, 27, -92, 66, -87, -118, -82, 66, -60, 35, -15, 66, -90, -62, -108, 66, 98, 98, 47, 66, -111, 0, 76, 66, 82, 86, 21, 66, -85, 80, -63, 66, -114, -35, -124, 66, -110, 49, -84, 66, 102, -52, -121, 66, -65, -1, 121, 66, -120, 87, 81, 66, 80, -36, -51, 66, -93, -114, -59, 66, -65, 126, -33, 66, -73, -49, -20, 66, -84, -97, -52, 66, -115, -67, -18, 66, 121, 83, -74, 66, -70, -43, 13, 66, -93, -45, -72, 66, -101, 98, -98, 66, -73, -24, -42, 66, 115, 77, -94, 66, 75, -127, 12, 66, -104, 117, -77, 66, -106, -24, 112, 66, -118, 13, 126, 66, 83, 80, 115, 66, -68, 90, -69, 65, -43, -122, 94, 66, 110, 96, 23, 66, -63, 47, -64, 66, -121, -3, 34, 66, -81, 44, 100, 66, 72, 46, -73, 66, -93, -53, 55, 66, -79, -100, -48, 66, -76, 86, 105, 66, 122, -84, -49, 66, 119, -119, 122, 66, -83, -83, -10, 66, -120, 15, -42, 66, 121, 56, -59, 66, -61, 65, 13, 66, -99, -65, 64, 66, -82, -38, 60, 66, 125, -43, -105, 66, 92, 6, -93, 66, -125, 88, 5, 66, -118, -119, 6, 66, -103, -109, 32, 66, -66, -111, -62, 66, -83, 120, 13, 66, -103, -60, -63, 66, -109, 100, 72, 66, 86, 74, 81, 66, -87, -104, -89, 66, -84, -61, -41, 66, -67, -70, -111, 66, -121, -106, -98, 66, 100, -73, 107, 66, -121, 5, 66, 66, -103, 40, -42, 66, 71, -98, 43, 66, -98, 122, 82, 66, -103, -96, 112, 66, -120, 119, -51, 66, -61, -94, -31, 66, 69, 61, 84, 66, -99, 90, -2, 66, -108, 90, -85, 66, -87, -52, -56, 66, -119, -40, -127, 66, -65, 11, -108, 66, 71, 70, -106, 66, -117, -110, 17, 66, -105, 3, 117, 66, 84, -83, -128, 66, 72, -52, -81, 66, 93, -68, -109, 66, -66, 66, 75, 66, 85, -105, 37, 66, -80, 73, -8, 66, -71, -117, 61, 66, -107, -115, -103, 66, -77, -92, 23, 66, 87, -90, 61, 66, -79, -68, -4, 66, -71, -58, -122, 66, -127, 38, 6, 66, 110, -118, -128, 66, -121, -118, 35, 66, 101, 12, -94, 66, -74, 102, -68, 66, -107, 85, -70, 66, -63, -64, 102, 66, 70, 91, -42, 66, -116, -50, 74, 66, -103, 39, -30, 66, 87, 105, -23, 66, -115, -100, 51, 66, -116, -55, -45, 66, 89, 100, 61, 66, 76, -58, 25, 66, -109, 80, 100, 66, 76, -73, 8, 66, 111, -52, -41, 66, 83, 0, -41, 66, 82, 52, 32, 66, 106, 24, 17, 66, -67, -88, -96, 66, 75, 65, -53, 66, -116, -16, 50, 66, -109, -63, 1, 66, -63, -14, 124, 66, 80, -113, 1, 66, -113, 2, 99, 66, 76, 18, 84, 66, -66, -46, -40, 66, -63, 70, -4, 66, 100, 50, -44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], "precision": "FLOAT_32", "root": 0, "canonicalAndNotALeaf": true, "size": 227, "leftIndex": [ -1, 1, 255, 1031500007, 758875145, 1155325478, 715844138, 1112243794, 596273638, 1142353088, 729940802, 1011620069, 1016981216, 1097935118, 212845067, 0, 0 ], "rightIndex": [ -1, 1, 255, 1031497735, 1142890465, 1147827020, 1104681797, 983510630, 586707592, 1112651468, 987879955, 640359319, 1012138873, 753580870, 208304176, 0, 0 ], "nodeFreeIndexes": [], "nodeFreeIndexPointer": 27, "leafFreeIndexes": [], "leafFreeIndexPointer": 27, "partialTreeStateEnabled": true }, "boundingBoxCacheFraction": 0.0, "partialTreeState": true, "seed": -5390658293349841947, "id": 0, "dimensions": 32, "staticSeed": 0, "weight": 0.0, "hasAuxiliaryData": false }, { "version": "2.0", "root": 0, "maxSize": 256, "outputAfter": 32, "storeSequenceIndexesEnabled": false, "centerOfMassEnabled": false, "nodeStoreState": { "version": "2.0", "capacity": 255, "compressed": true, "cutDimension": [ 0, 31, 255, 790717654, 588904867, 474147898, 228253029, 120528719, 338146909, 531166966, 60143701, 882735958, 787914407, 1012267954, 525558851, 367957971, 622143046, 761484757, 904996546, 371112575, 128625089, 571927037, 77573037, 1054648271, 796185802, 333035051, 102548827, 733134645, 599582421, 460564471, 534890677, 530100033, 535661734, 198900787, 619286362, 213686742, 584439022, 534562089, 708441634, 311475017, 99, 0, 0, 0, 0, 0 ], "cutValueData": [ 69, 67, -93, -27, 69, 47, 80, -19, 66, -86, 71, 56, 66, -92, 98, -46, 66, -72, 5, 40, 66, 85, 121, 30, 66, 55, 116, -7, 66, -98, -102, -121, 66, -73, -67, -52, 66, -114, 48, -72, 66, -120, -113, -62, 66, 28, -59, -58, 66, -64, -121, -55, 66, -120, -28, 72, 66, 45, 113, 49, 66, 69, -76, 59, 65, 94, -96, -120, 66, -62, 85, 100, 66, -110, 76, 0, 66, 81, 3, 20, 66, 122, -99, -100, 66, 69, 104, 74, 66, -102, 16, 30, 66, -84, 120, -87, 66, 56, -26, 88, 66, -77, 68, 54, 66, 78, -28, 33, 66, -72, 20, -59, 66, -70, 96, 121, 66, 71, -72, -94, 66, -111, 46, 37, 66, -88, 34, -63, 66, -98, 125, 126, 66, 85, 56, 37, 66, -69, 45, -44, 66, -64, -40, 63, 66, -68, 4, 51, 66, 111, -71, 62, 66, -108, -8, 20, 66, -120, 55, 126, 66, -80, 116, 39, 66, 79, -58, 84, 66, -110, -120, -14, 66, -69, 54, -119, 66, -67, 9, -123, 66, 89, -48, 65, 66, -123, -102, -39, 66, -93, 105, -89, 66, -87, 118, 47, 66, -80, -91, -99, 66, -71, -105, -92, 66, -84, 113, 15, 66, -97, -12, 104, 66, -63, -51, 123, 66, 89, -121, 52, 66, -117, 23, -43, 66, 117, -9, -120, 66, -114, -120, 96, 66, -126, 113, -40, 66, 100, -76, 32, 66, -74, 100, 8, 66, -104, 26, 120, 66, -81, 18, 36, 66, 101, -122, 87, 66, -99, -66, -83, 66, -73, 58, -56, 66, 79, -12, -5, 66, -68, 18, 117, 66, -118, -5, -72, 66, -64, 38, 120, 66, -107, 51, 57, 66, 75, 92, -118, 66, 74, 27, -62, 66, -74, -71, 25, 66, -97, 111, -18, 66, -116, -119, -84, 66, -62, -58, 31, 66, -79, 6, 96, 66, -77, -112, 37, 66, -79, 18, -74, 66, -107, 8, 54, 66, -69, -64, 106, 66, -100, 31, 45, 66, -62, -43, -100, 66, -116, -53, 0, 66, -64, 52, 75, 66, -113, -81, 63, 66, -70, -85, -71, 66, -59, -62, -11, 66, -59, -120, 43, 66, -64, 2, -55, 66, -77, 76, 76, 66, -112, -27, 56, 66, -67, -49, 108, 66, 77, -32, 75, 66, -64, 61, 112, 66, 84, -109, -96, 66, 98, 1, -32, 66, -87, -25, 50, 66, -121, -80, -102, 66, -105, -43, 104, 66, 94, -70, 113, 66, -122, 92, -117, 66, -75, -96, 109, 66, -72, 104, -93, 66, -114, -60, 102, 66, -60, -53, -107, 66, 105, 125, 97, 66, -89, 115, -65, 66, 91, -58, 96, 66, -60, 92, 107, 66, -115, 29, -64, 66, -108, 8, 59, 66, -112, -108, -31, 66, -102, 42, -38, 66, -102, 126, -9, 66, -70, -25, 65, 66, 86, -86, 42, 66, -108, 116, 38, 66, -76, -18, -26, 66, 99, 30, -68, 66, -78, -115, 69, 66, -109, -68, -93, 66, -118, -120, -87, 66, -127, -68, 55, 66, 74, 71, 108, 66, -93, -91, -42, 66, -76, -3, -70, 66, -110, 1, 1, 66, -114, -34, 52, 66, 85, -85, -101, 66, 79, 65, -100, 66, 94, -37, 88, 66, -99, 92, -69, 66, -94, 83, 67, 66, 99, -113, -27, 66, -105, -113, 46, 66, -108, 120, -100, 66, 82, -29, -63, 66, -68, 64, 40, 66, -97, -52, -122, 66, -113, 23, -110, 66, -116, -100, 22, 66, 76, 93, 23, 66, -116, 13, 6, 66, 124, 80, 124, 66, 99, -81, 78, 66, -118, -127, -114, 66, 116, -94, 74, 66, -124, 95, -56, 66, -120, 46, 10, 66, -68, 95, -113, 66, -101, 6, -14, 66, -116, -48, 27, 66, 93, 115, 124, 66, -113, 112, -44, 66, 110, 37, 61, 66, 71, 67, -46, 66, -121, 79, -53, 66, 114, 66, -83, 66, 71, 41, 52, 66, -115, -28, 72, 66, -98, 121, -36, 66, -102, -105, -30, 66, -65, 77, -113, 66, 72, 105, -100, 66, -68, -11, 56, 66, 88, 55, 123, 66, -124, -98, 112, 66, -69, -5, 21, 66, 79, -84, -43, 66, -106, 74, -97, 66, -102, -5, -1, 66, 93, 107, 88, 66, -65, 78, 25, 66, -119, -121, 112, 66, 96, 94, 105, 66, 90, -13, -119, 66, -62, 86, -8, 66, 94, 85, -100, 66, 80, 41, -75, 66, -114, 90, -23, 66, 90, 27, -41, 66, -97, -48, -42, 66, -115, 49, -77, 66, -94, 49, -43, 66, -67, -17, -30, 66, -75, -101, -111, 66, 89, 91, -40, 66, 70, -49, -65, 66, -76, 23, -115, 66, -65, -118, -90, 66, -75, 16, 68, 66, -78, -81, -119, 66, -68, 70, 25, 66, -100, -88, 63, 66, 73, 124, -73, 66, -72, 48, -99, 66, -71, 68, -27, 66, 74, 88, -80, 66, -108, -17, 86, 66, 114, 90, 8, 66, -97, -40, 87, 66, -116, 88, -81, 66, -110, 120, 34, 66, -116, 14, 11, 66, -96, 18, -10, 66, -100, -68, 116, 66, -122, -128, 110, 66, 78, -56, -13, 66, -78, 74, 56, 66, -101, -59, -46, 66, -115, 120, 84, 66, 76, 84, -19, 66, 77, -110, -49, 66, -102, 55, 89, 66, -111, -86, 10, 66, -72, 19, -25, 66, -76, 55, 51, 66, -108, -22, 115, 66, -101, -50, 75, 66, -105, -57, 70, 66, 81, 70, -53, 66, 75, 42, 100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], "precision": "FLOAT_32", "root": 0, "canonicalAndNotALeaf": true, "size": 224, "leftIndex": [ -1, 1, 255, 1112237405, 1157475338, 970168472, 730019626, 1028095307, 716905132, 1118616631, 597253418, 1116904262, 716670170, 624177455, 7174807, 0, 0 ], "rightIndex": [ -1, 1, 255, 1117066864, 1157299163, 583500320, 1018060645, 769821569, 758697997, 602646439, 772646333, 1098289409, 1104127810, 582728054, 7371553, 0, 0 ], "nodeFreeIndexes": [], "nodeFreeIndexPointer": 30, "leafFreeIndexes": [], "leafFreeIndexPointer": 30, "partialTreeStateEnabled": true }, "boundingBoxCacheFraction": 0.0, "partialTreeState": true, "seed": -721376606247191852, "id": 0, "dimensions": 32, "staticSeed": 0, "weight": 0.0, "hasAuxiliaryData": false }, { "version": "2.0", "root": 0, "maxSize": 256, "outputAfter": 32, "storeSequenceIndexesEnabled": false, "centerOfMassEnabled": false, "nodeStoreState": { "version": "2.0", "capacity": 255, "compressed": true, "cutDimension": [ 0, 31, 255, 993471586, 768789051, 802720882, 240230183, 724497905, 876430671, 1034626670, 130002661, 791844159, 380193277, 468146233, 706381885, 58403877, 396199281, 446029754, 531492421, 195618473, 757852245, 229068193, 920984815, 708438567, 506430822, 258858533, 895073403, 53792599, 804555757, 465537135, 582404898, 707302726, 515423065, 375700174, 880518827, 1059512290, 875783977, 1055211223, 313476475, 868188026, 1288133, 0, 0, 0, 0, 0 ], "cutValueData": [ 67, -63, 5, -26, 65, 35, -92, -54, 65, -101, -102, -126, 66, -100, 110, 38, 65, -37, 42, -108, 66, -118, 83, 97, 65, 44, -85, -22, 66, -122, 123, -28, 66, -91, -111, 0, 66, -112, -44, -23, 66, 37, -20, -119, 66, -66, -54, -75, 66, -102, 86, -14, 66, 71, -79, -58, 66, 79, -107, 117, 66, 117, -81, 54, 66, -109, -70, 4, 66, 100, -8, -98, 66, 11, -7, -122, 66, -90, 61, -51, 66, 100, 39, 16, 66, 76, -29, -76, 66, -105, 57, 80, 66, 124, 41, 43, 66, -110, 50, 96, 66, 16, -30, 117, 66, -106, 32, -98, 66, -117, -60, 11, 66, -63, 7, 23, 66, 62, -20, 87, 66, 113, -112, 85, 66, -72, -39, 118, 66, -107, -95, 47, 66, -67, 91, 117, 66, 93, 66, 17, 66, -79, 3, 100, 66, -74, 54, -63, 66, 124, -7, -87, 66, -124, -73, -68, 66, -59, -108, -73, 66, -64, 39, 3, 66, -93, -122, -86, 66, -99, -63, -58, 66, 93, -36, 102, 66, 104, 16, -56, 66, 114, -32, 16, 66, 109, 24, -27, 66, -125, 125, -104, 66, 93, -120, -13, 66, -113, -21, -57, 66, -124, -21, -107, 66, -122, 20, 111, 66, -119, 10, 10, 66, 72, 90, -7, 66, -119, -88, 36, 66, 68, 115, -8, 66, -70, -68, -81, 66, -70, -127, 78, 66, -61, -101, -79, 66, 76, 127, -78, 66, -108, 104, -40, 66, -106, 13, 107, 66, -67, -63, 115, 66, -77, -78, -122, 66, -88, 45, -71, 66, -99, -32, -126, 66, -111, -67, -37, 66, -109, 17, -46, 66, -79, 109, 103, 66, -95, -13, 6, 66, -103, -106, 8, 66, -89, -55, 71, 66, -126, -94, -56, 66, -110, 20, 124, 66, 75, -29, -92, 66, -73, 80, 69, 66, 84, -108, -125, 66, -115, 116, -56, 66, -98, -84, -17, 66, 111, -15, 120, 66, -115, 119, -20, 66, 108, 119, -90, 66, -111, -4, 1, 66, 73, -104, -33, 66, -80, -85, -115, 66, -103, -121, 88, 66, 108, -46, 53, 66, 118, 55, -70, 66, -125, 123, 32, 66, -81, 106, 82, 66, -101, 55, -120, 66, -79, 107, 78, 66, 74, 78, -89, 66, 71, -12, -53, 66, -73, 21, -24, 66, 74, 42, -106, 66, -118, -40, 110, 66, -107, 2, -105, 66, -114, -118, -9, 66, -106, 13, 52, 66, -65, 116, -69, 66, -106, 26, 23, 66, -102, -112, -2, 66, -62, 106, 104, 66, -87, -30, -3, 66, 70, 32, 5, 66, -62, -33, -118, 66, -70, -70, 50, 66, -106, 67, -24, 66, -110, 85, -73, 66, 95, -95, 48, 66, -77, 96, 35, 66, -70, 86, 53, 66, -59, -121, -104, 66, 80, -91, 5, 66, 77, -125, -127, 66, 101, -121, 55, 66, -81, 102, -91, 66, -66, -6, -81, 66, 109, 72, -45, 66, 78, 71, 58, 66, -115, 68, -4, 66, -67, 77, 54, 66, 118, 77, -49, 66, 126, -52, -43, 66, -93, -47, -110, 66, -62, -6, -102, 66, 75, -91, -92, 66, -99, 68, -126, 66, 115, 51, -23, 66, -66, 99, 0, 66, 96, -118, 117, 66, -115, -15, 12, 66, -115, -18, -64, 66, 88, -89, -71, 66, 81, -50, 4, 66, -65, 111, -67, 66, 100, 15, -22, 66, 98, 124, 92, 66, 110, -115, 53, 66, 105, 11, 61, 66, 96, -115, 29, 66, -107, 38, 45, 66, -88, 17, -126, 66, -119, 69, -66, 66, -64, 6, 60, 66, 101, 119, -101, 66, -106, 25, -65, 66, 80, -127, -40, 66, -109, 87, 44, 66, -110, 84, -43, 66, 104, -33, 122, 66, -63, -59, 71, 66, -110, -5, 39, 66, 89, 127, -80, 66, 89, -91, -96, 66, 83, 105, 28, 66, 120, -38, 50, 66, -81, -39, -21, 66, -123, 73, -109, 66, 105, -69, 75, 66, -105, 49, -107, 66, -72, -108, -104, 66, -105, -6, 50, 66, -67, -114, -106, 66, -109, -46, -1, 66, 93, 80, -14, 66, -125, -103, 6, 66, -66, -84, -24, 66, -73, -73, -94, 66, -114, 32, -98, 66, -120, 123, 72, 66, -63, -10, 63, 66, -97, -95, 90, 66, -112, -99, -49, 66, -61, 117, 0, 66, -64, -94, 27, 66, -112, 46, -97, 66, 86, 19, -23, 66, 93, 110, -79, 66, -62, 26, -127, 66, -68, -107, -30, 66, -78, 65, -30, 66, -104, -107, 87, 66, -79, 77, 34, 66, 84, 102, 58, 66, 119, -69, 84, 66, -111, -88, 0, 66, -116, -115, 48, 66, 77, -110, 2, 66, 89, 109, -105, 66, -71, 110, 109, 66, -81, 60, -76, 66, 73, -85, -32, 66, 111, 71, -108, 66, -79, -82, -83, 66, -59, -45, -72, 66, 73, -117, 25, 66, -102, 10, -7, 66, -109, 30, -103, 66, -105, 96, -110, 66, -72, -48, 53, 66, 86, -76, 74, 66, -73, 31, 5, 66, 87, -68, 83, 66, -65, -13, 98, 66, 120, -74, 6, 66, -70, 117, 45, 66, -63, -56, -125, 66, 119, 28, 92, 66, 88, 67, 98, 66, 90, -59, -77, 66, -107, -106, 77, 66, -102, -64, -45, 66, -62, -108, 79, 66, -101, 13, 116, 66, -62, 19, -89, 66, 97, -112, 27, 66, 82, -54, 86, 66, -75, -17, -29, 66, 115, 117, -95, 66, -104, 109, -93, 66, -110, -25, -14, 66, -64, 33, -4, 66, -102, -9, 48, 66, -128, -10, 28, 66, -109, -23, 93, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], "precision": "FLOAT_32", "root": 0, "canonicalAndNotALeaf": true, "size": 227, "leftIndex": [ -1, 1, 255, 758363846, 1033114000, 602653985, 1147673933, 975107957, 624945118, 1030986049, 1032580345, 1018529530, 1030985788, 1027542172, 238358821, 0, 0 ], "rightIndex": [ -1, 1, 255, 1160487538, 1033121209, 1114411118, 1147831316, 1026543992, 629748499, 970154401, 595538690, 1142595601, 1017155110, 726748519, 195313423, 0, 0 ], "nodeFreeIndexes": [], "nodeFreeIndexPointer": 27, "leafFreeIndexes": [], "leafFreeIndexPointer": 27, "partialTreeStateEnabled": true }, "boundingBoxCacheFraction": 0.0, "partialTreeState": true, "seed": 3064446777312786653, "id": 0, "dimensions": 32, "staticSeed": 0, "weight": 0.0, "hasAuxiliaryData": false }, { "version": "2.0", "root": 0, "maxSize": 256, "outputAfter": 32, "storeSequenceIndexesEnabled": false, "centerOfMassEnabled": false, "nodeStoreState": { "version": "2.0", "capacity": 255, "compressed": true, "cutDimension": [ 0, 31, 255, 525536174, 127760097, 320911086, 171375735, 917425314, 226089954, 637343330, 1016292691, 1017764653, 627886389, 334409029, 1071285746, 465505389, 236438983, 1038801102, 35575509, 64149302, 396273830, 264093143, 324760629, 572319814, 118798133, 265658314, 34915875, 381288249, 207036323, 43732163, 96458681, 321687411, 481089206, 196128550, 459990567, 1038163145, 215293857, 996015725, 866553421, 872072570, 509917042, 10, 0, 0, 0, 0 ], "cutValueData": [ 68, -66, 32, -18, 67, 121, 65, 77, 68, 1, 39, -22, 69, 117, -56, -3, 66, -82, 115, 20, 66, 86, 57, -3, 66, -105, 119, -57, 65, -75, 123, 49, 66, -88, 11, -54, 66, -92, -123, -72, 66, -113, 32, 20, 66, 51, -88, 3, 66, -89, 77, 32, 66, -128, -88, -74, 66, 124, 124, 125, 65, -51, -13, 69, 66, -84, -78, 60, 66, -88, 42, 104, 66, -118, 51, 105, 66, 76, -6, 16, 66, 89, 33, 65, 66, -110, -91, -56, 66, 90, -26, -123, 66, -101, -55, -16, 66, -65, 51, -58, 66, -88, 108, -2, 66, 110, 26, 85, 66, -111, -25, -96, 66, -96, -6, 33, 66, -119, 111, 126, 66, -84, -47, 4, 66, 94, 99, 80, 66, -82, 35, -84, 65, -128, -5, 122, 66, 84, -2, -84, 66, -94, 33, 20, 66, -79, -85, 35, 65, 109, 105, -27, 66, -116, -43, 17, 66, -71, -9, 46, 66, 81, -116, 21, 66, -90, -93, 124, 66, 85, -84, 34, 66, -74, 53, 0, 66, -102, 66, 78, 66, -97, 99, 3, 66, -121, 123, 97, 66, -71, 18, -25, 66, -115, -71, -55, 66, -113, 124, 26, 66, -64, -41, 21, 66, 79, 86, 46, 66, -91, 99, 74, 66, -82, 101, -27, 66, -126, -50, 3, 66, -117, -52, -111, 66, -64, -19, 100, 66, -108, 74, -14, 66, -71, 7, -62, 66, -74, 75, -66, 66, -94, 5, 93, 66, -90, -119, 37, 66, -128, -28, 3, 66, -101, -124, 7, 66, -73, 101, -6, 66, -90, 105, 22, 66, -69, 100, 86, 66, 93, 30, -97, 66, -85, 101, -44, 66, -117, -83, -115, 66, -116, -98, -63, 66, 112, 49, 15, 66, -102, -98, -117, 66, 95, -107, 60, 66, 95, -53, -79, 66, -67, 69, 47, 66, 113, 103, -111, 66, -103, 42, 96, 66, 115, 48, 63, 66, -64, -109, -58, 66, -117, -36, -121, 66, 101, -120, 63, 66, -100, 89, -24, 66, 97, -37, -62, 66, -87, -31, -126, 66, -81, 32, -110, 66, -61, 82, 61, 66, -101, -108, -114, 66, -60, 110, -93, 66, -84, -69, 94, 66, -94, -38, -95, 66, -60, -61, 123, 66, -106, 120, -128, 66, -116, 110, 27, 66, -99, 113, 65, 66, -91, 106, 71, 66, -72, -38, -19, 66, -96, -89, 52, 66, -122, 116, -2, 66, -100, 94, 44, 66, -108, 60, -50, 66, -97, 9, -128, 66, -72, 40, 26, 66, -107, -8, -19, 66, -78, 2, -71, 66, -124, 95, 1, 66, -126, 79, -16, 66, 94, -105, 40, 66, 72, -114, -106, 66, -69, 17, 127, 66, 81, 56, -77, 66, 80, 119, -48, 66, -127, -86, -89, 66, 89, 60, -27, 66, -104, 106, 65, 66, -106, 21, -115, 66, -97, -25, -105, 66, -84, -5, -108, 66, -94, 44, -91, 66, -113, 70, 106, 66, -83, -119, 39, 66, -74, 54, 42, 66, -78, -10, 127, 66, -107, -81, 110, 66, -127, 113, -95, 66, -116, 3, -47, 66, -113, 17, 58, 66, -123, 75, 13, 66, -123, 61, 126, 66, -117, -46, 69, 66, -105, -51, 42, 66, 89, 3, 68, 66, -75, 84, -47, 66, -64, 72, 51, 66, 83, -91, 73, 66, 87, 99, -47, 66, -109, 122, 33, 66, 99, -103, -56, 66, 72, 124, 57, 66, -106, 58, -29, 66, -125, -57, 75, 66, -98, -67, 117, 66, -107, -127, 5, 66, -111, -17, 86, 66, -111, 18, 104, 66, -102, -63, -123, 66, 111, -5, -33, 66, 69, 90, 37, 66, 75, -34, 41, 66, 73, -14, -69, 66, 79, 50, -11, 66, -122, -38, 9, 66, 93, -124, -57, 66, -61, 116, -110, 66, -117, -70, -79, 66, -59, 10, 36, 66, 68, -74, 38, 66, -69, 46, -54, 66, 107, 36, 78, 66, -74, 13, -14, 66, -101, 56, 5, 66, -110, 34, -41, 66, -107, -41, -128, 66, -102, -77, -105, 66, -119, 76, 125, 66, 122, 49, 94, 66, 82, 92, 94, 66, -64, 82, -9, 66, 79, 98, 89, 66, 91, 13, -114, 66, 82, -113, -7, 66, -89, 55, -97, 66, -76, 11, 27, 66, -118, -2, -4, 66, -84, 53, -89, 66, -110, -74, -127, 66, -108, -38, -14, 66, -118, 88, -99, 66, -80, -1, -106, 66, -76, -99, 29, 66, -74, -79, 65, 66, -95, 105, -83, 66, 68, -88, -98, 66, -122, 25, 17, 66, 84, -50, 63, 66, -109, 51, -8, 66, 78, 84, 9, 66, -103, 127, 114, 66, -112, 75, -94, 66, -109, -9, 22, 66, -62, 25, 65, 66, -104, -8, -54, 66, -101, -126, 7, 66, -92, 8, -79, 66, 87, 9, 96, 66, -65, -14, -40, 66, -75, 74, -5, 66, -79, -121, 117, 66, -121, 115, -43, 66, -110, -122, -27, 66, 77, -59, -87, 66, -63, -19, 102, 66, -121, -67, 3, 66, -64, 59, -91, 66, -119, -6, -65, 66, 87, -45, -115, 66, 102, -23, 60, 66, 81, -81, -5, 66, -118, -114, -26, 66, -95, 38, -22, 66, -111, -49, -90, 66, -65, -45, 100, 66, 94, -52, -115, 66, -106, 38, -127, 66, -65, -89, 26, 66, -109, -8, 122, 66, -59, 107, -43, 66, 93, 17, 50, 66, -105, 77, 43, 66, -114, -119, -61, 66, 101, -35, -74, 66, -116, -71, -42, 66, -60, -20, -53, 66, 91, 49, 81, 66, -99, 45, -100, 66, -112, -21, 83, 66, -59, -111, -36, 66, 113, 73, -21, 66, -69, 97, -9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], "precision": "FLOAT_32", "root": 0, "canonicalAndNotALeaf": true, "size": 229, "leftIndex": [ -1, 1, 255, 759940217, 597851188, 710862452, 1147299142, 1018214702, 1141329659, 638607614, 626310868, 724876739, 629196647, 753337382, 754052459, 1, 0 ], "rightIndex": [ -1, 1, 255, 759953299, 1118623282, 770038325, 1013253622, 1142418806, 1013979832, 645521126, 1032858751, 600324118, 725328427, 1097770954, 581668981, 1, 0 ], "nodeFreeIndexes": [], "nodeFreeIndexPointer": 25, "leafFreeIndexes": [], "leafFreeIndexPointer": 25, "partialTreeStateEnabled": true }, "boundingBoxCacheFraction": 0.0, "partialTreeState": true, "seed": 3783375162460323258, "id": 0, "dimensions": 32, "staticSeed": 0, "weight": 0.0, "hasAuxiliaryData": false }, { "version": "2.0", "root": 0, "maxSize": 256, "outputAfter": 32, "storeSequenceIndexesEnabled": false, "centerOfMassEnabled": false, "nodeStoreState": { "version": "2.0", "capacity": 255, "compressed": true, "cutDimension": [ 0, 31, 255, 242072258, 191800929, 203791159, 454404915, 505204563, 656883261, 519542867, 195778297, 775481585, 735769639, 476420433, 761706846, 922314183, 630279338, 737627169, 446614269, 603625393, 664086629, 1008561203, 184010425, 857847133, 357600482, 400676778, 55664323, 1034286397, 237479118, 215256139, 311630131, 1045764134, 259042911, 68938075, 170233683, 1065034913, 124249926, 578258254, 1031211085, 267216079, 2239, 0, 0, 0, 0, 0 ], "cutValueData": [ 68, 24, -67, 33, 69, 83, 124, 99, 69, 119, -25, -72, 66, 78, 49, -116, 69, -124, 22, -128, 66, 27, 123, 82, 66, 28, 93, -95, 66, 23, 59, -80, 66, 57, 65, 9, 66, -126, -52, 43, 66, -99, 44, 95, 66, -105, 49, -75, 66, 125, -88, -53, 66, -95, 82, 36, 66, -88, -11, 90, 66, 113, -60, -93, 66, -94, -57, 123, 66, -76, -65, 103, 66, -128, -45, -101, 66, 89, -56, 19, 66, -65, -103, -28, 66, 125, 83, -20, 66, -107, 23, 22, 66, 122, 40, 38, 66, 83, -67, -43, 66, -90, -113, 13, 66, 95, -68, 36, 66, -85, 55, 94, 66, -109, 8, -121, 66, 80, -109, 13, 66, -104, -21, -120, 66, -114, -90, -98, 66, 109, -8, -62, 66, -67, -114, -60, 66, -77, 14, -53, 66, 91, 95, -18, 66, 113, 29, -117, 66, -63, -77, 62, 66, -68, 98, -82, 66, 82, -6, 48, 66, -114, 26, 126, 66, 121, 46, 49, 66, -99, 103, 46, 66, 119, -34, 33, 66, -107, -59, -123, 66, -63, 58, 57, 66, -59, 10, -118, 66, -106, -12, -84, 66, -116, 29, -97, 64, -19, 90, 39, 66, -80, 81, -23, 66, -119, 16, 50, 66, -118, 66, -114, 66, 104, -24, 107, 66, 85, 105, -41, 66, -125, 120, 55, 66, -106, 12, 126, 66, -112, 94, -30, 66, -115, -21, 62, 66, -108, 82, -90, 66, -128, 95, -128, 66, -72, 90, -4, 66, -74, -72, 78, 66, 83, 124, -105, 66, -82, -117, 59, 66, -60, 0, 23, 66, -71, -117, -66, 66, -67, -46, -26, 66, -72, -84, 114, 66, -103, 109, 103, 66, -63, -99, 32, 66, -62, 82, -49, 66, 64, -14, 127, 66, -70, -68, 69, 66, -128, -54, 54, 66, -78, -122, -14, 66, 88, -36, -48, 66, -127, -104, -108, 66, -81, 66, -46, 66, 124, -97, 116, 66, 82, 8, -45, 66, -66, 18, -67, 66, -106, -68, -94, 66, -73, 115, -22, 66, -115, -116, -29, 66, -120, -44, -4, 66, -128, -65, -110, 66, -79, -99, -36, 66, 76, 93, -45, 66, -121, -1, -20, 66, -108, 85, -118, 66, 117, -86, -49, 66, -73, 60, -25, 66, -123, 94, -123, 66, -106, 115, -28, 66, -107, -118, -39, 66, -108, 107, -89, 66, -123, 112, 119, 66, -124, -44, -80, 66, -105, -105, -120, 66, 126, -28, 101, 66, -119, 106, 126, 66, -102, 59, -89, 66, 102, 67, 61, 66, -59, -59, -120, 66, -70, 75, -26, 66, -127, 29, -82, 66, -126, 36, -30, 66, 86, 96, 41, 66, -107, 11, 18, 66, 70, 99, 92, 66, -65, 8, 51, 66, -109, 75, 86, 66, -78, -121, 103, 66, -96, 108, -43, 66, -117, 45, 26, 66, -120, -126, 99, 66, 103, -7, -40, 66, 78, -34, -63, 66, -122, -128, 33, 66, -110, -120, 74, 66, -65, -88, 108, 66, -108, -125, 126, 66, -128, 126, -96, 66, -81, -101, -95, 66, -126, -9, -48, 66, -65, 56, -104, 66, 105, 7, -55, 66, 108, 3, -85, 66, -107, 43, -85, 66, -110, 67, 35, 66, -76, 126, -119, 66, -66, 84, -115, 66, -118, 111, -55, 66, 36, -11, -11, 66, 90, -16, -14, 66, -66, 50, -39, 66, 96, 2, 42, 66, 107, 92, -39, 66, -66, -60, -19, 66, 70, 79, 16, 66, -65, -98, 39, 66, -110, 63, 50, 66, -114, 94, -58, 66, -101, -6, -45, 66, -106, -125, 112, 66, -120, -58, 45, 66, 84, -101, -90, 66, -63, 76, -48, 66, -79, -40, -31, 66, -67, -116, 58, 66, -67, -100, -93, 66, -121, -53, -17, 66, 75, -55, -106, 66, -61, 19, -128, 66, 78, -38, -97, 66, 103, -99, 45, 66, -66, 84, -26, 66, -124, 36, -8, 66, -110, -76, 35, 66, -105, 113, 97, 66, -61, -36, 56, 66, 117, -116, 121, 66, -116, -48, 93, 66, -68, 58, 81, 66, -81, 103, -54, 66, -112, 68, 25, 66, -106, -37, 107, 66, -78, -32, -54, 66, -118, -58, 28, 66, -66, 74, 112, 66, -69, 9, 22, 66, -100, -43, -66, 66, 106, -12, 112, 66, 87, 46, -25, 66, -80, -48, -103, 66, 73, 125, 12, 66, -109, 112, 77, 66, 73, 77, -75, 66, 115, 99, -56, 66, 110, -108, -106, 66, -90, 101, 110, 66, -68, -10, -70, 66, 70, 25, -94, 66, -115, -22, -3, 66, -76, -60, -42, 66, 109, -101, -52, 66, -101, -42, -117, 66, 99, -47, 33, 66, 84, -121, 116, 66, -63, -50, -57, 66, -112, -90, -11, 66, -119, 23, -98, 66, -107, 35, 117, 66, -112, 55, -78, 66, -70, 99, 126, 66, 108, -93, 28, 66, 92, -15, -21, 66, -64, 14, -112, 66, -72, -35, 48, 66, -112, -39, 39, 66, 74, 18, -45, 66, -70, -124, -50, 66, 89, 33, -10, 66, -61, -2, -26, 66, -80, 107, 6, 66, -127, 73, -119, 66, 112, -18, 11, 66, 86, -13, 80, 66, -109, -52, 30, 66, -116, 36, -82, 66, -72, -97, 4, 66, -71, 15, 55, 66, -63, 32, -108, 66, 77, -29, 16, 66, -61, -15, -114, 66, 85, 58, -110, 66, -72, 89, -96, 66, -110, -62, -5, 66, -60, 92, -26, 66, -62, 45, -14, 66, 93, 68, -20, 66, 78, 31, 88, 66, -104, 33, -84, 66, -83, -99, 116, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], "precision": "FLOAT_32", "root": 0, "canonicalAndNotALeaf": true, "size": 225, "leftIndex": [ -1, 1, 255, 602397242, 985291288, 1117381055, 631286267, 1159871039, 769877906, 710290934, 586643026, 767911738, 984495190, 970343104, 21583228, 0, 0 ], "rightIndex": [ -1, 1, 255, 760295146, 983690483, 711067073, 640852154, 1141474031, 729666032, 1011663907, 716671138, 1143049792, 587764751, 1025973418, 23295112, 0, 0 ], "nodeFreeIndexes": [], "nodeFreeIndexPointer": 29, "leafFreeIndexes": [], "leafFreeIndexPointer": 29, "partialTreeStateEnabled": true }, "boundingBoxCacheFraction": 0.0, "partialTreeState": true, "seed": -3471042119123364184, "id": 0, "dimensions": 32, "staticSeed": 0, "weight": 0.0, "hasAuxiliaryData": false }, { "version": "2.0", "root": 0, "maxSize": 256, "outputAfter": 32, "storeSequenceIndexesEnabled": false, "centerOfMassEnabled": false, "nodeStoreState": { "version": "2.0", "capacity": 255, "compressed": true, "cutDimension": [ 0, 31, 255, 741444190, 938385206, 316895023, 44092536, 450799169, 377427443, 638928997, 452949597, 512919603, 337998883, 903566707, 622771047, 756776681, 731166579, 481097137, 606252761, 756853481, 368532603, 661968943, 203769137, 744733669, 382914295, 524069309, 483703645, 890564083, 69856686, 724561007, 592623267, 1012898549, 94819938, 113187541, 497646006, 195005658, 1063779809, 1010747097, 1000913278, 316377073, 1052735469, 26727, 0, 0, 0, 0 ], "cutValueData": [ 69, 17, -116, 45, 68, -43, -11, 48, 68, -60, -8, 49, 66, 68, -98, 42, 65, -6, -13, -69, 69, 113, -21, 124, 66, -61, -83, 26, 66, -102, 51, 39, 66, 121, 83, 116, 66, 80, -102, -53, 66, -64, 77, 90, 66, -127, -103, -65, 66, 107, -113, 15, 66, -117, 80, 76, 66, 124, 101, 78, 66, -79, -110, -8, 69, 104, 110, -126, 66, -96, 27, 8, 64, -68, -60, 119, 66, 92, -34, 79, 66, 97, -88, 56, 66, -118, -39, -12, 66, -64, 75, 12, 66, -110, -80, 90, 66, -99, 74, -85, 66, -63, 124, -114, 66, -108, -63, 79, 66, -94, -44, -28, 66, -116, 115, 99, 66, -88, 18, -68, 66, 115, -123, 20, 66, 113, -17, 95, 66, -124, -42, 81, 66, -84, 110, 72, 66, 106, 12, 65, 66, 93, 115, -80, 66, -106, -18, 0, 66, 93, -31, -75, 66, -76, 115, -16, 66, -87, 114, -80, 66, -112, -12, 60, 66, 90, -114, 117, 66, -100, 0, 74, 66, -72, 127, 75, 66, -102, 30, -8, 66, -77, 52, -74, 66, 78, 45, 82, 66, -116, 59, 26, 66, 110, 113, -88, 66, -107, -44, -65, 66, -62, -121, 22, 66, -104, 110, 99, 66, -100, -17, 57, 65, 55, -102, -8, 66, 89, 113, 116, 66, -104, 40, -46, 66, -110, 90, 18, 66, -72, 109, -36, 66, -95, -34, 10, 66, -67, -14, -110, 66, 78, -105, -42, 66, 86, -48, 79, 66, -99, 69, -16, 66, -76, 98, 105, 66, -98, 76, -41, 66, -59, 24, -96, 66, 78, -40, -50, 66, 116, 7, -62, 66, -61, 122, -126, 66, -91, 113, 3, 66, -107, -15, 94, 66, -60, 31, 0, 66, -104, -18, -65, 66, 114, 116, 66, 66, 82, 76, 45, 66, -63, 108, 108, 66, -105, -6, 17, 66, -61, 92, 104, 66, 115, 34, -77, 66, 87, 55, -126, 66, -108, -49, 89, 66, -124, 113, 96, 66, -103, 72, 15, 66, -104, -53, 105, 66, -115, -56, -79, 66, -122, -120, 80, 66, -122, -21, 53, 66, -99, -51, -97, 66, -59, -16, -126, 66, -69, -49, 39, 65, -50, 112, -107, 66, -93, -9, -33, 66, 93, 105, -103, 66, -102, -16, -64, 66, -84, 118, -65, 66, -69, 115, 24, 66, -100, 106, 19, 66, 118, 35, -124, 66, -74, 98, -50, 66, -104, -50, 46, 66, -94, 24, 92, 66, -60, -118, -28, 66, 84, 107, -56, 66, -128, 118, 101, 66, 113, 68, -128, 66, -75, -113, -104, 66, 74, 8, 109, 66, -72, -113, 26, 66, 106, -62, -99, 66, -116, -24, -120, 66, -68, -5, -100, 66, -87, -80, 77, 66, 118, 6, 26, 66, 81, -55, -128, 66, -103, -88, 41, 66, -113, 44, 36, 66, -112, -19, 11, 66, -61, 19, 72, 66, -70, 33, 15, 66, -73, 110, -103, 66, -105, -65, 55, 66, 98, 44, 26, 66, -72, 21, -93, 66, 73, 79, 31, 66, -67, -43, 92, 66, -71, 12, -102, 66, 91, -127, 125, 66, 111, 1, 104, 66, 127, 58, 94, 66, -109, 50, 79, 66, -122, -41, 97, 66, 90, -59, -64, 66, -84, 70, 78, 66, -112, 112, -61, 66, -71, 90, -95, 66, -120, 85, 111, 66, 99, 59, 126, 66, 80, -93, 76, 66, -108, 6, 64, 66, -63, -35, 53, 66, -85, -41, 31, 66, 52, 84, -100, 66, -107, -83, 20, 66, -72, 112, -41, 66, 87, 36, 10, 66, 75, -115, 80, 66, 93, 6, 125, 66, -113, 84, -61, 66, -121, 52, 41, 66, -63, 85, -74, 66, -75, -54, 123, 66, -120, -72, -40, 66, 92, 44, 6, 66, -128, -54, 23, 66, -74, -108, -105, 66, -69, -43, 25, 66, 73, 49, -98, 66, 85, -34, -27, 66, 81, -55, 48, 66, 127, 82, 29, 66, -80, 64, 63, 66, -101, 49, -6, 66, -128, 51, 58, 66, -97, 28, 63, 66, -109, -100, -80, 66, 57, -25, 5, 66, -110, 54, 105, 66, -100, -50, 23, 66, -123, -76, -20, 66, 109, 84, 113, 66, -69, 17, 74, 66, 116, -122, -127, 66, -122, -48, -115, 66, -74, 88, 34, 66, -72, 38, 78, 66, 83, -82, -81, 66, -105, 2, -10, 66, -111, -24, -42, 66, -64, 37, -8, 66, -65, 40, 78, 66, -122, -61, 126, 66, -65, 84, -40, 66, -82, 78, 39, 66, -59, 29, -11, 66, 100, 96, 127, 66, 99, -37, 91, 66, -65, -42, 91, 66, -108, -79, 27, 66, -60, 44, -106, 66, -70, 17, 27, 66, -83, 9, 80, 66, -70, -42, -54, 66, -98, -86, 64, 66, -69, -46, -31, 66, 76, 89, -114, 66, 74, -39, -127, 66, -99, 70, -54, 66, -96, 83, 102, 66, -109, 15, 116, 66, 84, 47, 111, 66, 69, 105, -26, 66, 85, -67, 100, 66, -72, 116, -81, 66, 74, 126, 43, 66, -103, -18, 57, 66, -64, 2, 77, 66, -108, 47, 94, 66, -107, -123, -49, 66, 101, 11, -7, 66, -67, 126, -126, 66, -61, -46, -40, 66, 89, -92, -109, 66, -75, 27, 79, 66, -103, -24, 98, 66, -70, 120, -71, 66, -116, 125, -77, 66, -109, -78, -107, 66, 114, 100, 33, 66, -106, 72, 112, 66, 104, -87, 60, 66, -110, 44, -123, 66, -105, -39, -66, 66, -110, 86, 104, 66, 100, 53, 93, 66, -125, -18, -65, 66, -78, -113, -84, 66, 91, 29, -115, 66, 84, 54, -3, 66, 88, 98, -19, 66, 82, -28, -89, 66, -73, 52, 69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], "precision": "FLOAT_32", "root": 0, "canonicalAndNotALeaf": true, "size": 231, "leftIndex": [ -1, 1, 255, 1162241054, 1114254304, 1104602657, 727010285, 626549009, 1140765443, 989461384, 625774706, 1103245001, 753917179, 1013378243, 710454697, 16, 0 ], "rightIndex": [ -1, 1, 255, 602653108, 989300059, 1118977784, 582930724, 600526102, 1098282644, 624243316, 639138976, 1104607445, 1013454742, 626323955, 581150426, 13, 0 ], "nodeFreeIndexes": [], "nodeFreeIndexPointer": 23, "leafFreeIndexes": [], "leafFreeIndexPointer": 23, "partialTreeStateEnabled": true }, "boundingBoxCacheFraction": 0.0, "partialTreeState": true, "seed": -8641322014209361855, "id": 0, "dimensions": 32, "staticSeed": 0, "weight": 0.0, "hasAuxiliaryData": false }, { "version": "2.0", "root": 0, "maxSize": 256, "outputAfter": 32, "storeSequenceIndexesEnabled": false, "centerOfMassEnabled": false, "nodeStoreState": { "version": "2.0", "capacity": 255, "compressed": true, "cutDimension": [ 0, 31, 255, 132573906, 535248293, 870950241, 975039569, 173225913, 349495291, 117793841, 623462321, 984259509, 460237761, 490000187, 450074085, 976857025, 662434898, 493005906, 306087154, 330993590, 750497519, 1042614487, 662472669, 309630133, 311799482, 1050507890, 647199571, 590923353, 1055718205, 363952701, 354200681, 715860198, 522750030, 728614695, 529617982, 728286510, 603296801, 317525931, 188020851, 748530730, 31043, 0, 0, 0, 0, 0 ], "cutValueData": [ 68, 44, 95, -90, 69, 88, 110, 111, 68, -73, -20, 78, 67, -20, 40, -108, 69, 2, 27, 30, 64, -91, -48, 101, 66, 29, 91, 118, 66, -128, -34, -19, 65, -86, -37, 22, 66, -97, 121, -34, 66, -59, 54, 74, 66, -121, 60, 83, 66, -107, 22, 125, 66, -117, -114, -51, 66, -100, 104, 80, 66, 86, 95, -55, 66, -81, 85, 107, 65, -51, 114, 80, 66, -111, -29, 29, 66, -66, -17, -10, 66, 99, 106, -29, 66, 9, 68, -32, 66, -107, -59, -48, 66, -104, 117, 1, 66, -86, 117, -83, 66, -121, -74, 16, 66, -89, 116, 37, 66, -76, -81, 33, 66, -107, -48, -1, 66, -116, 68, -125, 66, 123, 102, -58, 66, -123, 111, 16, 66, 90, 119, 84, 66, -100, 47, 125, 66, -114, -119, 1, 66, -65, 116, -60, 66, -122, -3, -41, 66, -93, -48, 95, 66, -103, 100, -25, 66, -82, -94, -26, 64, -87, -103, 42, 66, 106, 71, -105, 66, -127, 125, 89, 66, -89, -99, -61, 66, -119, 1, -45, 66, -74, 6, 113, 66, -63, 58, 112, 66, -80, -73, 25, 66, -112, 124, -61, 66, 63, -31, -53, 66, -68, -106, 83, 66, -108, -88, 45, 66, -67, -37, -91, 66, 122, -108, 61, 66, -108, -44, -14, 66, -66, 125, -111, 66, -63, -87, 107, 66, -103, -15, 99, 66, -82, 38, 78, 66, -99, -1, -69, 66, 80, 22, -64, 66, -107, 71, -101, 66, 109, -54, -97, 66, -110, 60, 13, 66, 76, 39, -81, 66, -61, -40, -80, 66, -122, -80, 4, 66, 98, -32, 7, 66, -111, 5, -79, 66, 113, -104, 96, 66, -110, 67, -86, 66, -104, -76, 77, 66, -109, -70, -32, 66, -61, -37, 25, 66, -106, 35, -18, 66, 82, 99, 93, 66, 92, -105, -102, 66, -111, 10, 121, 66, -61, 80, 99, 66, -72, -113, -67, 66, -105, -26, -78, 66, 74, 29, 112, 66, 72, -113, -34, 66, 91, 34, -25, 66, -72, -1, 96, 66, -62, -127, 3, 66, 76, 40, -52, 66, -108, 61, -65, 66, -70, -111, -92, 66, -64, -9, -39, 66, -66, -123, -1, 66, 108, 57, -22, 66, -119, -102, -122, 66, -97, 110, -123, 66, 70, -128, -106, 66, -121, 80, 23, 66, -82, 43, 81, 66, -113, -87, -47, 66, 82, -57, 41, 66, -115, 89, -90, 66, 85, -35, -120, 66, -117, 50, 11, 66, 102, -48, -6, 66, 91, 76, -55, 66, 93, 23, -32, 66, 83, 114, -123, 66, 127, 92, 121, 66, -81, -14, -64, 66, 68, 99, -41, 66, -64, 108, 92, 66, -73, 13, -75, 66, -85, 108, 123, 66, -67, -55, -11, 66, 100, 123, -98, 66, 126, 73, 68, 66, -65, -19, -64, 66, -95, -124, 122, 66, -123, 56, 114, 66, 70, -114, -127, 66, 69, 19, 82, 66, -108, 94, 1, 66, -110, -73, -33, 66, -106, -71, -13, 66, -116, 110, 74, 66, 80, 115, -66, 66, -109, 16, 81, 66, -60, -27, -67, 66, -109, 64, -112, 66, 101, -54, -109, 66, 125, 39, -39, 66, -102, -118, 49, 66, -95, 120, 120, 66, -61, 4, 8, 66, 84, 118, 95, 66, -76, -34, -58, 66, -80, -50, -57, 66, -106, 40, -23, 66, 91, -72, 102, 66, 88, -95, 117, 66, -87, 115, 65, 66, -84, 114, 49, 66, -64, -40, -84, 66, -114, -109, -4, 66, 68, 62, -47, 66, -120, 94, 53, 66, -62, 53, -101, 66, -123, -2, 117, 66, -91, -2, 28, 66, 89, 45, 71, 66, -106, -28, 122, 66, -120, 33, 58, 66, -100, -58, -22, 66, -61, 8, -3, 66, -104, -42, -78, 66, -59, 61, 104, 66, -128, 42, -100, 66, -110, 100, 69, 66, -122, -111, -47, 66, -89, 88, -69, 66, -64, -63, 59, 66, 77, -39, 115, 66, -78, -7, 93, 66, -106, 89, -58, 66, 78, 46, 61, 66, 87, -4, -28, 66, -107, 4, 20, 66, -111, -53, -37, 66, -59, -9, -58, 66, -72, 81, 31, 66, 91, 103, -118, 66, -70, -108, -81, 66, -71, 111, 48, 66, -81, 35, -121, 66, -122, -85, 19, 66, -61, 121, 49, 66, -88, -13, 16, 66, -89, -110, 83, 66, -113, 24, 108, 66, -81, -28, 90, 66, 77, -102, -29, 66, 72, 90, -44, 66, -120, -94, 119, 66, -118, -80, -63, 66, 77, -72, -40, 66, -65, 41, -66, 66, -101, -16, 58, 66, -67, 23, -81, 66, -120, -103, -32, 66, -118, -87, 33, 66, -63, -101, -58, 66, -112, 74, -128, 66, 106, -66, 0, 66, -64, 47, 62, 66, -105, -117, -119, 66, -105, 79, -106, 66, -104, -124, 120, 66, -62, -9, -86, 66, -115, 125, 86, 66, -116, 62, 117, 66, -115, -103, -73, 66, -113, 121, 118, 66, 38, 36, 118, 66, 71, -32, -24, 66, -100, -53, -83, 66, 93, 41, 21, 66, -115, -26, -78, 66, 116, 31, 93, 66, -64, -46, -61, 66, -68, 25, 54, 66, -99, -105, -45, 66, 87, -44, 26, 66, -125, -3, -76, 66, -73, -16, 101, 66, -106, 46, 2, 66, 91, -53, -108, 66, -108, 13, 35, 66, -67, 89, 32, 66, -123, -124, -5, 66, 76, -59, -39, 66, 78, 61, 119, 66, -123, -44, -23, 66, -68, -88, 109, 66, 86, 51, 64, 66, -75, -87, -62, 66, -69, -22, -29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], "precision": "FLOAT_32", "root": 0, "canonicalAndNotALeaf": true, "size": 225, "leftIndex": [ -1, 1, 255, 583495001, 1162202407, 602398130, 1160646646, 602119403, 975106741, 1160467126, 982978898, 596269241, 588040204, 625791545, 21605011, 0, 0 ], "rightIndex": [ -1, 1, 255, 755649931, 767932000, 597674267, 1025946878, 601943065, 755470705, 1141291529, 582990422, 595745080, 711927458, 597271643, 22253821, 0, 0 ], "nodeFreeIndexes": [], "nodeFreeIndexPointer": 29, "leafFreeIndexes": [], "leafFreeIndexPointer": 29, "partialTreeStateEnabled": true }, "boundingBoxCacheFraction": 0.0, "partialTreeState": true, "seed": 3689043991782272360, "id": 0, "dimensions": 32, "staticSeed": 0, "weight": 0.0, "hasAuxiliaryData": false }, { "version": "2.0", "root": 0, "maxSize": 256, "outputAfter": 32, "storeSequenceIndexesEnabled": false, "centerOfMassEnabled": false, "nodeStoreState": { "version": "2.0", "capacity": 255, "compressed": true, "cutDimension": [ 0, 31, 255, 262758222, 1005436393, 917574752, 1066177649, 514159657, 59980517, 332782026, 358988389, 228128063, 735937598, 322887361, 83008051, 1045599270, 648394923, 656314069, 606527421, 129042914, 733469031, 189992371, 191841351, 184476717, 795006183, 1059144738, 56047987, 232466402, 1013951987, 366041271, 232328641, 659909335, 904439593, 880277601, 268277061, 456726518, 1071208101, 878024191, 521440453, 443865535, 383727041, 11001765, 0, 0, 0, 0 ], "cutValueData": [ 68, 54, -78, 126, 69, 25, 9, 53, 66, 6, 106, 52, 66, -63, -7, 70, 66, -76, 44, 98, 65, 50, -39, 17, 66, -82, -27, -120, 66, 31, 81, -124, 66, -113, -106, 82, 66, 116, -126, 3, 66, -99, -122, -120, 66, -108, -49, 82, 64, -99, 65, -83, 66, 79, 118, 96, 66, -98, -49, -103, 66, -68, -82, 10, 66, 109, 70, 106, 66, 91, 24, 31, 66, -115, -43, 17, 66, 74, -78, -18, 66, -97, -33, -39, 66, -95, -81, 106, 65, 19, 122, -54, 66, 72, 81, 100, 66, -105, 19, 80, 66, -119, 68, 89, 66, -83, -84, 77, 66, -68, -88, -93, 66, -74, 37, -9, 66, -125, 25, -116, 66, -83, 25, -23, 66, 91, 88, 4, 66, -66, 122, -106, 66, -60, 48, 121, 66, -119, -1, -104, 66, -112, -10, -101, 66, -76, 78, 5, 66, -70, 92, -124, 66, -63, -75, -101, 66, 85, 1, 41, 66, -101, 97, 93, 66, 36, 119, 116, 66, -100, 112, -59, 66, 96, 52, -114, 66, -71, 3, 15, 66, 80, 124, 80, 66, -78, 122, 32, 66, -71, -28, -10, 66, 76, 52, -15, 66, -109, 92, -120, 66, -109, 28, -30, 66, 83, -9, -10, 66, -110, 83, -31, 66, -84, 109, 20, 66, -83, 74, -40, 66, -111, 75, -41, 66, -98, 81, -15, 66, 72, 4, 3, 66, -110, 0, 97, 66, -90, -45, -110, 66, -119, 57, 16, 66, -65, -23, -96, 66, 89, -29, -122, 66, -102, 58, 20, 66, 95, -60, 114, 66, -98, 61, 35, 66, 101, -28, -14, 66, -97, 45, -52, 66, -80, -19, 51, 66, -91, -58, 25, 66, 94, -113, 81, 66, -67, -15, 123, 66, -67, 69, -78, 66, -91, -70, -64, 66, -121, -114, -66, 66, -103, 48, 4, 66, -119, -89, -26, 66, 104, -59, 45, 66, 81, 2, 96, 66, 124, -110, -74, 66, -78, 36, 7, 66, 79, -12, 127, 66, -61, 109, 78, 66, 91, 45, -1, 66, -107, 82, -70, 66, -68, -49, 126, 66, 113, 126, 47, 66, -100, -112, -29, 66, -111, 50, -68, 66, 121, -99, -64, 66, -99, -80, 13, 66, -117, 11, -62, 66, 80, 43, -33, 66, -111, 70, 15, 66, -77, -57, -11, 66, -85, -31, -59, 66, -78, 96, 67, 66, 104, 48, 70, 66, -100, -122, 34, 66, -90, 83, -41, 66, 88, -35, -13, 66, 71, 84, -34, 66, 69, -76, 103, 66, 75, 89, 35, 66, -60, -119, -96, 66, 99, 95, -8, 66, 105, 5, -58, 66, -104, -120, -110, 66, 83, 20, 99, 66, -99, 79, 14, 66, 68, 45, 24, 66, -79, 30, -116, 66, -105, 80, -20, 66, -111, 39, 61, 66, 92, -77, 45, 66, -85, -95, 124, 66, -110, -119, -96, 66, -62, 79, -82, 66, -75, 54, -64, 66, -115, 94, -124, 66, -111, 26, -118, 66, -122, 16, -41, 66, -99, 4, -64, 66, -118, -36, 27, 66, 92, 26, 41, 66, -103, 94, -15, 66, 84, -99, -107, 66, 78, -34, -34, 66, -104, -38, -95, 66, -105, -99, 124, 66, -63, 117, 61, 66, 114, 40, 116, 66, -59, 62, -111, 66, -123, -67, -7, 66, -127, 45, -55, 66, -62, 107, -119, 66, -67, -13, -106, 66, 107, -86, -93, 66, 91, 6, -96, 66, 97, 32, -77, 66, -94, -33, -29, 66, -69, 108, 45, 66, -103, -47, 107, 66, -103, 67, 40, 66, -79, -77, -94, 66, 101, -40, 67, 66, -103, -7, 126, 66, -97, 56, -83, 66, -123, 101, -123, 66, -82, 5, -69, 66, 72, 20, -119, 66, 71, 2, 125, 66, 81, -87, -22, 66, 92, 114, 116, 66, -82, 64, 92, 66, -65, 30, 61, 66, 101, -49, 123, 66, -121, -67, -60, 66, -73, -127, -106, 66, -61, -71, 4, 66, -107, 73, -45, 66, -83, -65, -57, 66, -111, -13, -75, 66, -81, 100, 2, 66, 113, 119, 4, 66, -75, 103, -68, 66, -106, -106, -81, 66, -83, 119, -83, 66, 100, -51, 44, 66, -83, 107, -69, 66, -68, -33, -12, 66, -59, 77, -35, 66, -106, 76, 3, 66, -128, -28, -125, 66, -109, 107, 34, 66, -120, 68, 74, 66, -95, -5, 73, 66, -114, 6, 48, 66, -62, -49, 77, 66, -64, 61, -42, 66, -119, -109, 46, 66, 74, 8, -25, 66, -65, 29, 114, 66, 109, -21, -50, 66, 81, 102, 43, 66, -70, 100, -86, 66, -123, 74, -103, 66, -82, 41, -37, 66, 40, 26, 50, 66, 86, -95, 15, 66, 97, -49, 51, 66, 79, -107, -126, 66, -78, -79, -42, 66, 94, 86, 45, 66, -124, -41, 3, 66, -74, -27, 81, 66, 118, -120, 64, 66, -105, 40, -23, 66, -101, -35, 51, 66, -96, -123, 43, 66, -113, 101, 57, 66, -87, -121, 86, 66, -102, 81, -112, 66, 109, -127, -38, 66, 105, 12, 34, 66, 68, 124, 78, 66, -89, -117, 25, 66, 69, 73, 93, 66, -94, 33, 35, 66, -64, -71, -88, 66, -107, -113, -29, 66, -64, -40, 83, 66, 76, 87, -21, 66, -113, -22, -25, 66, -115, -108, -128, 66, 72, -55, 4, 66, 72, 88, 53, 66, -117, -93, -7, 66, -61, 59, -78, 66, -115, -89, -7, 66, 107, 107, 39, 66, -111, 88, -66, 66, -113, -10, -60, 66, -63, -65, -8, 66, -123, -14, -10, 66, -69, 75, 47, 66, -104, 110, -37, 66, 83, 67, 2, 66, -94, -6, -30, 66, -98, 96, 97, 66, 77, -65, 63, 66, 78, -99, -46, 66, -59, 123, 109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], "precision": "FLOAT_32", "root": 0, "canonicalAndNotALeaf": true, "size": 233, "leftIndex": [ -1, 1, 255, 774779471, 1100060917, 715317128, 588284744, 1104308044, 1146317395, 1160407984, 710802688, 638526365, 626546704, 1147656587, 582908873, 134, 0 ], "rightIndex": [ -1, 1, 255, 1032562858, 1141355825, 760491007, 712130692, 1032561403, 1018588352, 1031283211, 772981298, 767687206, 772535596, 581196676, 625831187, 121, 0 ], "nodeFreeIndexes": [], "nodeFreeIndexPointer": 21, "leafFreeIndexes": [], "leafFreeIndexPointer": 21, "partialTreeStateEnabled": true }, "boundingBoxCacheFraction": 0.0, "partialTreeState": true, "seed": 6539383793818569112, "id": 0, "dimensions": 32, "staticSeed": 0, "weight": 0.0, "hasAuxiliaryData": false }, { "version": "2.0", "root": 0, "maxSize": 256, "outputAfter": 32, "storeSequenceIndexesEnabled": false, "centerOfMassEnabled": false, "nodeStoreState": { "version": "2.0", "capacity": 255, "compressed": true, "cutDimension": [ 0, 31, 255, 379423442, 938577079, 199174183, 982996923, 632628559, 446142685, 259345726, 527763286, 766426417, 601459806, 355648947, 463720061, 186049849, 342617578, 634497351, 725542733, 204310701, 1051670899, 175413837, 241794773, 633304679, 886225718, 794341030, 766171102, 879540979, 579929779, 261576805, 1054049447, 527619513, 515292593, 865857201, 231853267, 592661842, 1060551363, 754435422, 657585651, 303761315, 108189046, 39628461, 0, 0, 0, 0 ], "cutValueData": [ 69, -121, 126, -2, 68, 47, 59, 68, 66, -76, 126, 56, 65, -118, -97, 70, 67, 78, -110, -115, 66, 52, 97, 51, 66, 23, -5, -2, 66, -113, -48, -119, 66, 112, 48, -47, 65, -124, 3, 20, 66, 93, -14, 92, 66, 78, -47, 1, 66, 55, -40, -100, 66, 75, 45, -4, 66, -68, 114, 48, 66, -67, -125, 90, 66, -97, -5, -62, 66, 13, -84, 100, 66, 114, 20, -6, 66, -115, 80, -10, 66, -123, 84, -62, 66, -75, -47, -113, 66, -103, -78, -105, 66, -114, 89, 124, 66, 88, -109, -103, 66, -88, 99, -56, 65, -79, 42, 27, 66, -76, 126, 23, 66, 78, 87, -75, 66, -71, 34, 31, 66, -116, -37, 27, 66, -59, 83, 53, 66, -69, -53, 85, 66, 120, 50, 3, 66, -128, 96, 52, 66, -99, 113, -98, 66, -77, -38, -38, 66, -112, -21, 109, 66, 89, 11, -84, 66, -67, 10, 34, 66, 102, -35, -8, 66, 76, 121, 120, 66, -62, 122, -15, 66, -62, 10, -45, 66, -119, 84, 88, 66, -73, -36, 38, 66, 89, 39, -88, 66, 70, 69, 29, 66, -126, 34, -60, 66, -91, 45, -128, 66, 107, 8, -55, 66, -107, -76, 12, 66, -75, 103, 50, 66, -68, 45, -102, 66, -96, 50, -102, 66, -104, 76, -84, 66, 72, 23, -89, 66, -118, -21, -16, 66, -122, -110, 65, 66, -113, -27, 70, 66, 75, 28, -65, 66, -118, 21, 110, 66, -116, -119, 52, 66, -128, -114, -67, 66, 78, -21, 83, 66, -77, -29, -69, 66, -121, 60, 19, 66, 100, -87, 61, 66, 96, 104, 28, 66, 104, 37, -15, 66, -90, 123, 2, 66, -109, 8, 45, 66, -91, -47, -73, 66, -107, 89, 35, 66, -103, 68, 2, 66, -105, 86, 121, 66, -118, -7, -47, 66, -108, -122, -32, 66, -69, 11, 122, 66, -114, 32, -30, 66, 80, -93, -91, 66, 72, -14, 125, 66, -99, 107, 107, 66, -76, 37, -73, 66, 91, 68, -91, 66, -82, 64, -33, 66, -94, -32, -85, 66, 94, 2, -122, 65, -51, -57, -55, 66, -68, -44, 40, 66, -100, 51, 119, 66, -70, 46, 12, 66, -101, -60, -6, 66, -100, -71, -81, 65, -112, -92, 98, 66, -107, -23, -82, 66, -106, 45, -59, 66, -109, 16, -31, 66, -64, -119, -89, 66, 104, -99, 62, 66, -66, -40, -71, 66, -60, 18, -104, 63, -67, -118, 36, 66, 101, -68, 10, 66, -65, 34, -23, 66, -76, 98, 86, 66, -86, -99, 107, 66, 70, 23, -81, 66, -107, 120, -26, 66, -65, 105, 15, 66, -64, -103, -9, 66, -120, -121, -14, 66, 82, -46, 52, 66, -97, 24, 55, 66, -94, -87, 40, 66, -100, -27, -100, 66, 97, -125, 44, 66, -70, -127, 32, 66, -59, -113, 118, 66, -127, -52, -83, 66, 90, 106, 70, 66, -117, 41, -39, 66, -128, -21, 93, 66, -66, -60, -92, 66, 71, -34, 65, 66, -62, 110, -29, 66, -78, 28, 110, 66, -100, -119, 9, 66, -66, 119, 68, 66, -120, 72, -85, 66, -114, -126, 6, 66, -65, 114, -100, 66, -63, 98, -103, 66, -125, 51, -114, 66, 109, 79, 50, 66, -110, 80, 39, 66, -120, 100, -94, 66, 116, 59, 114, 66, -73, 11, -42, 66, -93, -121, 94, 66, -108, 92, 77, 66, -99, 64, 63, 66, -86, -52, -90, 66, -63, 45, 34, 66, 100, 53, -63, 66, 74, -73, 84, 66, -73, -32, -11, 66, -128, 95, -3, 66, -91, -28, 81, 66, -59, -52, -34, 66, 86, -121, -62, 66, -121, -35, -106, 66, -111, 78, 60, 66, -59, 126, -128, 66, -107, -91, 49, 66, -108, 78, -72, 66, -106, 105, 24, 66, 113, 8, 22, 66, -78, -31, -91, 66, -73, -6, -126, 66, -119, -124, -109, 66, 104, 82, -81, 66, 107, -74, -104, 66, -119, -99, 25, 66, -109, -85, 48, 66, 117, -21, 36, 66, -119, 44, -108, 66, 88, -97, 31, 66, -115, -75, 109, 66, -106, -13, 116, 66, -116, 0, -48, 66, -109, -60, 79, 66, 94, 104, 100, 66, 97, -26, 25, 66, -103, 62, 79, 66, -102, -66, 68, 66, -127, -12, 85, 66, -99, 33, 126, 66, 80, -104, 58, 66, 72, -38, 122, 66, -113, 58, -91, 66, -103, -23, -31, 66, 91, 90, 105, 66, 77, -15, 53, 66, -106, -82, 92, 66, -115, 64, 102, 66, 77, -19, -79, 66, -63, -7, -53, 66, 83, -95, 97, 66, -126, -43, 80, 66, -106, 48, 103, 66, -60, -93, 42, 66, -74, 31, -6, 66, -67, 83, -41, 66, 88, -26, -30, 66, -99, -45, 21, 66, -115, 66, -80, 66, -124, -107, -100, 66, 105, -53, 121, 66, -62, -97, 58, 66, -59, -101, -3, 66, -115, 46, -22, 66, 90, 112, 46, 66, 68, 23, -1, 66, -78, 29, -72, 66, -61, -17, -63, 66, -87, -9, 65, 66, 109, 125, -62, 66, 93, -101, 83, 66, -68, -101, -21, 66, 71, -128, -116, 66, 80, -122, 115, 66, -112, 103, -65, 66, 90, 122, -36, 66, -125, -5, 70, 66, 82, -77, 34, 66, -120, 75, -69, 66, -92, 77, 125, 66, -107, 2, 100, 66, -66, 116, 93, 66, -94, 97, -79, 66, -97, 27, -66, 66, -61, 60, -59, 66, 88, -58, -1, 66, -106, 17, -88, 66, -116, -89, -46, 66, 82, -21, -71, 66, 81, -97, 116, 66, -108, 2, -89, 66, -116, 31, -11, 66, 104, -36, 39, 66, -118, 87, 113, 66, -110, 20, -25, 66, -116, 68, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], "precision": "FLOAT_32", "root": 0, "canonicalAndNotALeaf": true, "size": 234, "leftIndex": [ -1, 1, 255, 1160640629, 772987820, 969321077, 1013900867, 640140485, 1140824237, 1161729995, 753376669, 1099489100, 1157272180, 581216848, 600348886, 365, 0 ], "rightIndex": [ -1, 1, 255, 990067936, 731616341, 1013274026, 755154808, 645672113, 1147381025, 774818054, 1116902020, 1160585132, 769261171, 600291391, 624767948, 392, 0 ], "nodeFreeIndexes": [], "nodeFreeIndexPointer": 20, "leafFreeIndexes": [], "leafFreeIndexPointer": 20, "partialTreeStateEnabled": true }, "boundingBoxCacheFraction": 0.0, "partialTreeState": true, "seed": -7479358087348062431, "id": 0, "dimensions": 32, "staticSeed": 0, "weight": 0.0, "hasAuxiliaryData": false }, { "version": "2.0", "root": 0, "maxSize": 256, "outputAfter": 32, "storeSequenceIndexesEnabled": false, "centerOfMassEnabled": false, "nodeStoreState": { "version": "2.0", "capacity": 255, "compressed": true, "cutDimension": [ 0, 31, 255, 888224293, 76652475, 182159171, 637983398, 773400121, 976854783, 1067228629, 892939501, 526060583, 599221425, 49191529, 853784681, 787926090, 750427586, 191829673, 504980517, 752175741, 228897834, 745219377, 366664030, 921802310, 233686191, 321347507, 606661993, 499103098, 535136857, 802225269, 451631786, 1012501174, 98741855, 232303321, 515874173, 733280861, 265989738, 1043498569, 191170399, 870250978, 753610413, 2599, 0, 0, 0, 0 ], "cutValueData": [ 67, -85, 37, 63, 67, -35, 121, 126, 68, -32, -78, 127, 69, 72, 32, 1, 66, -125, -126, -16, 66, -66, 11, -35, 66, 101, 8, -127, 66, 83, 19, 83, 66, 66, 126, -69, 66, 82, 88, -104, 66, -102, 60, 99, 66, -84, -1, 66, 66, 82, 121, 108, 66, -73, 11, -64, 66, -122, 124, 114, 65, 78, 12, -39, 66, -120, -123, 51, 66, -110, 104, -57, 66, -81, -4, -97, 66, -107, -119, -75, 66, -74, 66, -59, 66, 49, -105, 45, 62, 120, -8, 98, 65, -75, -13, 86, 66, -92, 68, -71, 66, -97, 63, -127, 66, -110, 44, -119, 66, -66, -68, 103, 66, -94, 69, 35, 66, 111, 38, 102, 66, -111, -26, 100, 66, 81, -65, 78, 66, 69, -14, 41, 66, 47, -83, -67, 66, 86, -86, -93, 66, -91, -126, -123, 66, -128, -90, 48, 66, -83, 98, 48, 66, 84, -68, 88, 66, -92, 52, 79, 66, -108, -14, 52, 66, 114, -122, -109, 66, -83, 7, 41, 66, 84, -68, 30, 66, 103, 52, 75, 66, -101, 37, -31, 66, 81, 64, -18, 66, -78, -120, 15, 66, 73, 97, 119, 66, -105, -124, 77, 64, -33, -117, -44, 66, -71, -73, 95, 66, -121, -72, 36, 66, 92, 121, 54, 66, -108, -30, 7, 66, -93, 33, 11, 66, -115, -44, 100, 66, -67, 36, -106, 66, 99, -79, 56, 66, -122, 87, 92, 66, -119, 5, -13, 66, 72, 14, 12, 66, -74, 58, 84, 66, -125, -51, -6, 66, -68, -104, 39, 66, -122, -60, -111, 66, -94, 102, 72, 66, 95, -41, -37, 66, -69, 120, -57, 66, 106, -61, -44, 66, -74, 56, 62, 66, -122, 120, 119, 66, -74, -39, -80, 66, -86, -75, -83, 66, 110, 76, -121, 66, -109, 25, 98, 65, 15, -3, 43, 66, 97, -25, 113, 66, -64, -55, -112, 66, -78, -122, -23, 66, 80, -56, -93, 66, -109, 20, 40, 66, 87, 14, -9, 66, -64, -13, 16, 66, -111, -126, -16, 66, -103, 21, -54, 66, -125, -84, -77, 66, -71, -69, 65, 66, -67, 60, -128, 66, -103, 78, 121, 66, -110, 113, 17, 66, -117, -35, -10, 66, -98, 62, -54, 66, -62, 126, 31, 66, -98, 118, -27, 66, 76, 37, -8, 66, -107, -44, -45, 66, 101, -63, 122, 66, -59, -58, 29, 66, -74, 6, 52, 66, -121, -71, -70, 66, -64, -50, -6, 66, -62, -67, -39, 66, -105, -123, -119, 66, -100, -105, -16, 66, -115, 126, -47, 66, -89, 39, 5, 66, -90, -10, -54, 66, -111, 33, 68, 66, -102, -4, -58, 66, -98, -48, -30, 66, -71, -96, -71, 66, -75, -30, -69, 66, -62, 25, 52, 66, -70, 78, -102, 66, -96, 80, -46, 66, -69, -1, 34, 66, -115, -115, 40, 66, -97, -109, -87, 66, -66, -33, -85, 66, -67, 45, 19, 66, -72, -6, 46, 66, -113, -6, 38, 66, 96, -31, -41, 66, 118, 32, 53, 66, 92, 52, 48, 66, 85, -113, 96, 66, -117, -65, 13, 66, -94, 3, -86, 66, 93, -45, 86, 66, -72, 124, 45, 66, -67, -92, 57, 66, 81, -91, 57, 66, -109, -69, 112, 66, 78, -45, -87, 66, -65, 22, -61, 66, -74, -77, -43, 66, -104, 93, 60, 66, -97, -93, -113, 66, 90, 47, 44, 66, -121, 126, -85, 66, -106, 74, -115, 66, -85, -20, 60, 66, -64, -126, -91, 66, -62, 20, 3, 66, 73, -17, 122, 66, -114, -113, -29, 66, 91, 39, -52, 66, 75, 77, 47, 66, -60, 69, 34, 66, 111, 85, -41, 66, -60, -44, -18, 66, -80, -88, -94, 66, 77, -4, -35, 66, -79, -93, -81, 66, 108, 85, -43, 66, -95, -62, 107, 66, 77, -8, 42, 66, 87, 92, 88, 66, -106, -38, 43, 66, -114, -20, 10, 66, 69, 100, -128, 66, -61, 38, -102, 66, -108, 63, -72, 66, -63, 53, 87, 66, -72, 93, -125, 66, -67, 99, 2, 66, -112, -80, 29, 66, -63, -87, -45, 66, -111, 102, -78, 66, -68, 18, -98, 66, -128, 64, 91, 66, -93, -74, 48, 66, -89, 107, 45, 66, 86, -97, 121, 66, -68, 92, -67, 66, 77, -120, -70, 66, -107, -32, 27, 66, -80, -125, -51, 66, -61, 119, 106, 66, -107, 98, 19, 66, -60, -3, -116, 66, -73, 3, 62, 66, -110, -91, -87, 66, -98, 43, -74, 66, -62, -17, 79, 66, -119, 63, -28, 66, 101, 104, -81, 66, 84, -30, 64, 66, 74, -32, -75, 66, 97, -14, 37, 66, 93, 97, -1, 66, -103, -58, 109, 66, -67, -76, -103, 66, -66, 84, -46, 66, -117, -75, 72, 66, 98, 58, -56, 66, -111, 73, -120, 66, -88, -49, 70, 66, 106, 30, 95, 66, 125, -8, -54, 66, -110, 69, -68, 66, -102, -54, 92, 66, 74, -46, -91, 66, -110, -121, -71, 66, -67, -98, -72, 66, -103, -15, 92, 66, -102, 33, -34, 66, 79, 126, 88, 66, 87, -20, -60, 66, 89, 12, -12, 66, -73, 72, 46, 66, -108, 97, 66, 66, -68, 0, 110, 66, -72, -21, 18, 66, -96, -18, -50, 66, -66, 124, 88, 66, 72, -13, -118, 66, -63, 27, -106, 66, -101, 64, -115, 66, -115, 65, 14, 66, -106, -57, 55, 66, -117, -60, -61, 66, -87, -79, -57, 66, 106, -122, 122, 66, -71, 46, 51, 66, -93, -35, 117, 66, -59, 26, -58, 66, 90, 2, 43, 66, -116, -58, 102, 66, -64, -19, 76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], "precision": "FLOAT_32", "root": 0, "canonicalAndNotALeaf": true, "size": 231, "leftIndex": [ -1, 1, 255, 773178857, 1012386262, 1145699305, 630754096, 645638578, 1147351603, 1016645539, 973599872, 1104069010, 626487287, 767747537, 581688418, 13, 0 ], "rightIndex": [ -1, 1, 255, 1160588371, 1160658367, 1016915542, 645169343, 639322541, 760462628, 1018181065, 1104274363, 602565614, 624947605, 970342468, 725151335, 13, 0 ], "nodeFreeIndexes": [], "nodeFreeIndexPointer": 23, "leafFreeIndexes": [], "leafFreeIndexPointer": 23, "partialTreeStateEnabled": true }, "boundingBoxCacheFraction": 0.0, "partialTreeState": true, "seed": -1946928779114242913, "id": 0, "dimensions": 32, "staticSeed": 0, "weight": 0.0, "hasAuxiliaryData": false }, { "version": "2.0", "root": 0, "maxSize": 256, "outputAfter": 32, "storeSequenceIndexesEnabled": false, "centerOfMassEnabled": false, "nodeStoreState": { "version": "2.0", "capacity": 255, "compressed": true, "cutDimension": [ 0, 31, 255, 382683842, 35568365, 743685422, 909763832, 743648325, 313485543, 129614911, 903543093, 529629177, 111118042, 259431401, 110860469, 1063904305, 757033013, 795981997, 460770546, 215414982, 731319789, 190227902, 641649747, 475746101, 70375666, 179386167, 466999759, 1059399863, 593955141, 223647674, 1023085263, 743499999, 178998983, 658101574, 40729343, 1035685738, 452953662, 588859707, 911337771, 304384234, 800819963, 6227, 0, 0, 0, 0 ], "cutValueData": [ 69, 116, 53, -110, 69, 62, -16, 117, 69, 123, 61, -95, 69, 28, 62, -26, 65, 19, 16, -32, 66, 70, 98, -29, 65, -55, -30, -36, 66, 76, -76, -69, 66, -99, -116, 30, 66, -100, -69, -78, 66, 49, -51, -98, 66, -128, 65, 98, 66, -64, -76, -98, 66, 79, 65, -77, 66, 113, -102, -105, 65, -31, -92, -103, 66, 75, 108, -73, 66, -64, 52, -12, 64, -54, 33, -10, 66, 87, -10, -8, 66, -105, 14, 20, 66, 115, 15, 106, 66, 91, -3, -87, 66, 97, -20, 119, 66, -107, -126, -61, 66, -86, 28, 3, 66, 72, -77, -98, 66, -90, -70, 64, 66, -102, -67, 95, 66, -62, -104, -68, 66, 81, -88, 92, 66, 85, 70, 122, 66, -59, 6, 17, 66, -75, 115, -111, 66, -69, -90, -23, 66, -90, -3, 59, 66, 83, -52, 38, 66, -121, -82, 90, 66, -102, -8, 40, 66, 113, 44, -123, 66, 102, -66, -45, 66, 79, 37, -116, 66, -108, 21, 14, 66, -111, 87, 47, 66, -61, 22, -118, 66, -99, 93, -127, 66, -109, -112, 9, 66, -69, 16, -83, 66, -127, 122, -48, 66, 81, -78, 112, 66, -118, -13, -59, 66, -76, 42, -73, 66, -111, -52, -42, 66, 100, 106, 39, 66, -79, -105, -79, 66, -57, 106, -92, 66, -104, 81, -117, 66, 78, -25, -88, 66, -103, 117, -113, 66, -118, -90, 122, 66, -125, 47, 87, 66, 111, -93, 51, 66, -92, -124, 57, 66, -111, 6, -104, 66, -114, 89, -53, 66, 102, 95, -119, 66, -109, -85, 54, 66, -107, 54, 16, 66, -76, -51, 74, 66, 99, -91, -11, 66, -123, -70, -29, 66, 74, 80, 60, 66, 15, -14, -9, 66, -92, 119, -28, 66, -117, 9, -56, 66, 89, 94, -83, 66, -70, 90, -95, 66, -126, -114, -15, 66, -85, 36, -55, 66, -97, -21, 15, 66, -63, -111, 125, 66, -61, 13, 7, 66, -120, -32, 36, 66, -71, 68, 126, 66, 124, -88, -112, 66, -105, 99, -75, 66, -63, 80, 102, 66, -121, -69, -82, 66, 83, -8, 32, 66, 97, -23, 60, 66, -68, 127, -29, 66, 86, 81, -58, 66, 115, -54, -34, 66, -112, -11, -70, 66, 86, -20, -71, 66, -123, -106, 88, 66, -78, -96, -20, 66, -72, 112, 65, 66, -90, -60, -119, 66, -106, -83, 10, 66, -123, -69, 4, 66, -63, -89, 46, 66, -107, 36, 57, 66, 77, 96, -46, 66, 127, 81, -88, 66, -80, 96, -107, 66, -121, 51, 112, 66, -105, 5, -7, 66, -79, -10, 37, 66, -124, -68, -104, 66, -104, 38, -66, 66, -119, -16, 6, 66, -98, 29, 79, 66, 119, -116, 82, 66, 88, -16, 57, 66, -67, -102, 85, 66, 86, -6, -41, 66, -107, 54, -91, 66, 84, 124, -82, 66, 119, 115, -79, 66, -120, -78, -18, 66, -110, 1, 117, 66, 87, -27, -5, 66, -70, 117, -91, 66, -108, -88, -114, 66, -61, 100, -94, 66, -65, 75, 66, 66, 121, -19, -78, 66, -65, 85, -105, 66, 77, -21, 33, 66, 68, -95, -75, 66, -77, 66, 60, 66, 105, 111, -84, 66, -102, -10, -11, 66, -110, -26, 45, 66, -84, 33, -44, 66, 110, 33, -32, 66, -119, -46, -2, 66, 84, 94, -56, 66, -69, -96, -126, 66, -66, -106, -35, 66, 89, -109, 107, 66, -94, -26, 62, 66, -117, -106, -82, 66, 82, 91, 14, 66, -102, 16, -6, 66, -60, -81, -109, 66, -73, 35, 92, 66, -74, 62, -54, 66, 110, 117, -5, 66, -107, 86, -80, 66, -60, 11, -112, 66, -61, -78, 120, 66, -65, 78, -43, 66, -73, -25, -102, 66, -126, -81, -73, 66, -66, -123, -73, 66, -123, 104, -76, 66, -121, -94, -89, 66, -124, 74, -99, 66, -116, -2, -76, 66, -68, -2, -89, 66, 75, -120, -116, 66, -65, -100, -43, 66, -61, 102, 86, 66, -78, 68, -98, 66, 72, 37, 30, 66, -74, -15, -123, 66, 116, 7, -82, 66, -80, -101, 6, 66, -78, -91, -25, 66, -114, 117, -71, 66, -94, -109, -32, 66, -76, 125, 55, 66, -127, 55, -106, 66, -85, 75, 32, 66, 74, 127, -34, 66, -86, 67, -16, 66, -61, -43, -27, 66, -114, 35, -85, 66, -74, 70, -101, 66, -73, -13, -87, 66, -108, 3, -65, 66, 74, -60, 53, 66, 104, -108, -13, 66, 103, -39, 10, 66, 110, 58, 50, 66, 88, 108, 110, 66, -64, 119, 93, 66, -87, 104, 76, 66, -81, 5, 94, 66, -116, 92, 13, 66, -67, -25, -1, 66, 90, 19, -18, 66, 77, 39, 18, 66, -83, -33, 24, 66, 84, -41, -115, 66, -90, -78, -30, 66, -62, 74, -31, 66, -106, -120, 90, 66, -94, -45, -96, 66, 124, 22, -8, 66, 93, 65, 13, 66, -120, 57, -103, 66, 88, 96, -37, 66, -100, -23, 71, 66, -70, 96, 75, 66, -71, 83, -109, 66, -120, -36, -41, 66, -108, 103, 19, 66, 88, 14, -63, 66, -119, -114, 57, 66, -64, 112, 41, 66, 88, 53, 119, 66, -116, -86, 12, 66, 84, -53, -9, 66, -65, 44, 40, 66, 74, -61, 71, 66, -65, 50, 107, 66, -109, 82, 114, 66, -68, 45, -110, 66, -111, -61, -33, 66, 83, -31, 124, 66, 77, 75, 122, 66, -59, 38, -13, 66, 82, 10, 127, 66, 102, -47, -61, 66, 69, 27, 66, 66, -124, -31, 17, 66, -69, -21, 40, 66, -68, -75, -10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], "precision": "FLOAT_32", "root": 0, "canonicalAndNotALeaf": true, "size": 231, "leftIndex": [ -1, 1, 255, 1103205176, 1018712510, 1160588330, 1140797273, 759950828, 597274046, 1142932018, 1099482568, 626303302, 1157212808, 638762557, 631089349, 13, 0 ], "rightIndex": [ -1, 1, 255, 770037556, 989995012, 1027784929, 1159935863, 1116909284, 989477531, 1155822910, 600459560, 602053855, 985046548, 581842249, 755445598, 13, 0 ], "nodeFreeIndexes": [], "nodeFreeIndexPointer": 23, "leafFreeIndexes": [], "leafFreeIndexPointer": 23, "partialTreeStateEnabled": true }, "boundingBoxCacheFraction": 0.0, "partialTreeState": true, "seed": -506526637525828854, "id": 0, "dimensions": 32, "staticSeed": 0, "weight": 0.0, "hasAuxiliaryData": false }, { "version": "2.0", "root": 0, "maxSize": 256, "outputAfter": 32, "storeSequenceIndexesEnabled": false, "centerOfMassEnabled": false, "nodeStoreState": { "version": "2.0", "capacity": 255, "compressed": true, "cutDimension": [ 0, 31, 255, 576280926, 927163981, 605657545, 36542934, 979282387, 513316351, 75349067, 527426881, 594341451, 215076597, 44371942, 610711145, 722929218, 727435191, 250609621, 39364477, 670951999, 497525985, 791842027, 383748555, 74503847, 131771513, 195497686, 871192506, 471404001, 481101102, 43350835, 897546731, 241166303, 746235349, 753518170, 748063309, 110970575, 997932150, 387185630, 862779169, 181844805, 0, 0, 0, 0, 0, 0 ], "cutValueData": [ 68, -39, -78, -59, 69, 39, -89, 22, 68, -109, 100, 125, 69, 104, -38, -124, 66, 60, 39, -25, 66, -97, -128, 45, 66, 58, -104, 27, 66, -77, -26, 49, 66, -101, -12, -99, 68, -122, 92, 68, 64, -25, -86, -18, 64, 104, 47, -36, 66, 4, 119, -91, 66, -59, -105, 57, 66, -58, -17, -11, 66, 1, 63, -61, 66, 26, 120, -45, 66, -84, -44, -89, 66, -63, -77, 74, 66, -92, 41, -97, 66, -67, 16, -104, 66, 122, 93, -5, 66, -76, 64, 113, 66, 4, 28, 71, 66, 98, 65, 8, 66, -96, 55, 104, 66, -71, 100, -87, 66, -112, 17, -11, 66, -100, -101, 109, 66, 126, -119, 76, 66, 76, -81, -1, 66, 78, 110, -35, 66, -107, -117, 74, 66, -125, -106, -79, 66, -104, 14, -44, 66, 110, -99, -47, 66, 96, -89, -11, 66, -62, 54, -66, 66, 73, 0, -93, 66, 83, 106, -57, 66, 91, 42, -85, 66, -74, -9, 127, 66, -97, -81, 29, 66, -82, -106, 15, 66, -101, -22, 74, 66, 93, 9, -54, 66, -62, 120, 114, 66, 117, -108, -128, 66, -123, 99, -56, 66, -62, 47, -86, 66, -108, -124, -121, 66, -106, -80, 78, 66, -60, 88, -56, 66, -108, -73, -30, 66, -100, 54, -37, 66, 99, -107, -76, 66, 108, -109, -21, 66, 113, -128, 80, 66, -110, 101, 14, 66, -67, -108, 124, 66, -78, -11, -88, 66, 125, 85, -95, 66, 84, 36, 87, 66, -72, 111, -79, 66, -71, -91, 21, 66, -99, -86, -2, 66, -97, -13, -110, 66, 73, 28, -78, 66, -88, 101, 34, 66, -117, 40, 39, 66, -65, -115, 106, 66, -81, -13, 65, 66, -60, 125, -118, 66, -79, 57, 71, 66, -107, 41, 111, 66, -65, 18, -60, 66, -106, 95, 102, 66, -100, 119, 25, 66, 81, -41, -45, 66, -120, -44, -2, 66, -122, -94, 87, 66, 101, 86, 1, 66, -103, 72, -66, 66, -98, 100, -64, 66, -95, -14, 41, 66, -65, 100, 4, 66, 87, 60, 100, 66, 107, -99, -128, 66, -91, 55, -38, 66, 98, -48, -33, 66, -117, -98, 104, 66, 108, 55, 121, 66, -118, -73, -13, 66, -111, 95, 19, 66, -120, -65, -88, 66, -108, -91, 110, 66, 104, -61, 11, 66, -90, -68, 71, 66, -61, -66, 21, 66, 84, 27, -48, 66, 113, -5, -29, 66, 68, 45, 1, 66, -103, 37, -34, 66, 70, 42, -63, 66, -117, -59, -38, 66, 79, 88, -94, 66, -62, 119, -44, 66, -73, 8, 9, 66, 80, 69, 36, 66, 127, 15, 34, 66, 100, -6, -73, 66, -123, -93, -19, 66, 79, -26, -57, 66, 108, 54, -105, 66, 101, -65, -22, 66, -64, -4, 34, 66, -64, -105, -101, 66, 123, 114, 46, 66, -122, -50, -125, 66, 76, 34, -116, 66, 77, -71, -2, 66, -104, 104, -79, 66, -96, 101, -120, 66, -119, 112, -16, 66, 115, -96, 56, 66, -70, 68, 90, 66, -98, -95, -20, 66, 78, 13, -120, 66, 81, 72, 74, 66, -106, -5, 45, 66, -111, -95, -10, 66, 98, 15, -72, 66, -71, -121, 92, 66, -65, -58, 63, 66, 104, 15, 67, 66, -72, -112, 47, 66, -89, -1, -36, 66, -113, 99, -19, 66, -69, 103, -2, 66, -125, 42, 118, 66, -117, 93, -128, 66, -62, -21, -67, 66, -62, -74, -93, 66, -94, 78, 82, 66, -105, 108, -122, 66, 106, -77, 40, 66, 72, -102, 47, 66, -73, -36, 87, 66, -117, -16, 86, 66, -61, 90, -1, 66, -64, 103, 49, 66, -116, -105, 77, 66, -122, -58, 78, 66, -70, 16, 44, 66, -73, 18, -53, 66, -67, 68, -27, 66, 86, 14, 29, 66, -107, -96, 8, 66, -73, -23, 52, 66, -64, 85, 88, 66, -113, 26, -126, 66, -111, 21, 88, 66, 88, -126, 8, 66, 100, -40, -103, 66, -69, 62, -13, 66, -72, 79, 95, 66, 103, -56, -51, 66, -80, -58, -34, 66, 97, -54, 46, 66, -61, -1, 73, 66, -109, 121, 27, 66, 95, -74, -20, 66, -117, -66, 27, 66, 69, -35, -49, 66, -110, -86, 89, 66, -77, 17, -21, 66, -121, -7, 120, 66, -118, 40, -84, 66, 94, 104, 43, 66, -72, -66, 52, 66, -63, -67, 50, 66, -67, -5, -30, 66, -118, 108, -119, 66, 104, 100, 21, 66, -72, 17, -91, 66, -77, -107, 110, 66, -94, 72, 101, 66, -66, 123, -10, 66, -67, 11, -111, 66, -112, 13, 18, 66, -117, 75, 73, 66, -72, -94, -118, 66, 85, 39, -124, 66, -62, -41, 12, 66, -122, 101, 83, 66, -65, -51, -89, 66, -100, -38, -27, 66, 125, 33, 47, 66, -66, 10, -126, 66, 84, 31, 88, 66, -125, 127, -101, 66, -63, 16, 85, 66, 74, -101, -63, 66, -109, -126, 91, 66, -64, -109, -111, 66, -77, -98, -25, 66, -64, 3, -5, 66, 87, 23, 107, 66, -99, -51, 101, 66, 87, 17, 123, 66, -124, -75, -78, 66, -123, -72, -34, 66, -107, 66, -13, 66, -86, -121, -5, 66, -62, -114, -2, 66, -114, -5, 83, 66, -103, 77, 124, 66, -58, 22, 116, 66, -66, -103, 32, 66, -97, -50, 81, 66, -118, -94, -84, 66, -121, 95, -72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], "precision": "FLOAT_32", "root": 0, "canonicalAndNotALeaf": true, "size": 222, "leftIndex": [ -1, 1, 255, 1018055060, 1146258376, 1143063005, 773243645, 624258709, 985054328, 774052592, 1155856840, 629206420, 626507348, 624794434, 819031, 0, 0 ], "rightIndex": [ -1, 1, 255, 1033033540, 717445259, 1156704290, 1162081312, 1146137927, 1013745580, 1140760097, 1018568642, 968619758, 586117183, 581682838, 994003, 0, 0 ], "nodeFreeIndexes": [], "nodeFreeIndexPointer": 32, "leafFreeIndexes": [], "leafFreeIndexPointer": 32, "partialTreeStateEnabled": true }, "boundingBoxCacheFraction": 0.0, "partialTreeState": true, "seed": -26643182478891948, "id": 0, "dimensions": 32, "staticSeed": 0, "weight": 0.0, "hasAuxiliaryData": false }, { "version": "2.0", "root": 0, "maxSize": 256, "outputAfter": 32, "storeSequenceIndexesEnabled": false, "centerOfMassEnabled": false, "nodeStoreState": { "version": "2.0", "capacity": 255, "compressed": true, "cutDimension": [ 0, 31, 255, 52102590, 803441321, 845014002, 402434489, 452533423, 857576527, 1038034607, 905684145, 488373930, 214396250, 355904417, 530702145, 1046798206, 332791595, 504888034, 777824675, 892833502, 861728509, 660034926, 70744530, 501807487, 761722539, 519539025, 182281293, 353970593, 187506475, 578410162, 1050517306, 729400670, 325250227, 714712277, 1039845225, 590912757, 313752750, 848418633, 775234665, 907772981, 651257981, 0, 0, 0, 0, 0 ], "cutValueData": [ 68, -18, 62, -6, 67, -19, -107, 114, 66, 60, -76, 113, 66, -78, -82, -78, 66, 2, 57, -79, 65, -30, -89, -101, 65, -108, 87, 79, 66, -128, -29, -89, 66, -74, 5, -111, 65, 118, -110, 62, 66, -85, -128, -33, 65, -121, 120, 29, 66, -75, 118, 68, 66, 114, -108, -46, 63, -27, -25, 62, 66, 106, -111, 30, 66, -112, 101, -86, 66, -105, -30, 127, 66, -113, -55, -35, 66, -93, -101, 49, 66, -71, 94, -56, 66, 124, -21, 106, 66, 115, 63, -121, 66, 115, 75, 81, 66, 121, 4, 45, 66, -113, 107, -73, 66, 91, 36, -32, 66, -81, 14, -6, 66, 86, 29, -93, 66, -113, -90, 67, 66, 99, -20, 31, 66, -58, -74, -105, 66, -122, 23, 44, 66, 88, -99, 4, 66, -125, -68, 14, 66, -107, -60, -32, 66, 109, 120, 22, 66, -99, -67, -5, 66, -113, -21, 113, 66, -60, 122, -107, 66, -112, -37, 8, 66, -65, -102, 42, 66, -96, 48, 54, 66, -126, 4, 66, 66, -102, 80, 61, 66, 108, 56, -34, 66, 69, -17, -117, 66, -67, -38, -21, 66, -67, -68, -29, 66, -112, 51, 70, 66, -120, -81, -38, 66, 97, -115, -57, 66, -113, -71, -47, 66, -69, 74, -76, 66, -94, -87, -124, 66, -75, -64, 75, 65, -73, 112, 16, 66, -60, 56, 40, 63, -18, 63, 74, 66, -80, -73, -40, 66, -115, -75, 25, 66, -117, 63, -94, 66, -78, 22, -32, 66, -90, 66, 67, 66, 108, -60, 2, 66, -67, -102, -117, 66, -113, 14, 112, 66, -76, 94, -118, 66, 125, 22, 74, 66, 96, -28, 70, 66, -72, 0, -113, 66, 94, 95, 31, 66, -63, 107, -9, 66, 79, -45, -52, 66, 73, 4, 121, 66, -103, 84, -107, 66, -74, -46, 39, 66, 75, 48, 27, 66, 73, -48, 19, 66, -124, -82, 70, 66, 102, 81, -41, 66, 104, 93, 39, 66, -116, 6, -18, 66, -117, 52, -9, 66, -89, -81, 36, 66, 95, 43, -49, 66, -75, 124, 6, 66, 107, -62, 84, 66, -115, -109, 1, 66, 91, 16, 97, 66, -124, 82, -26, 66, -121, -15, -122, 66, -71, 47, 89, 66, -107, 61, -127, 66, -121, -81, 17, 66, 107, 59, -105, 66, -77, -62, -112, 66, -65, -40, 14, 66, 86, 83, -46, 66, 80, -35, 40, 66, 37, -87, 61, 66, -77, -121, 31, 66, -98, -7, 15, 66, -128, 47, -44, 66, 78, 9, 32, 66, -98, -121, -37, 66, -89, -121, -75, 66, -99, -52, 121, 66, -62, 10, 124, 66, -128, -64, -24, 66, -108, 12, 101, 66, -72, -92, 54, 66, -116, 18, -12, 66, 86, 23, 3, 66, -71, 67, -92, 66, -75, 124, -82, 66, -64, -110, -69, 66, -64, -66, -83, 66, 91, 44, 24, 66, -92, 105, -114, 66, 125, -127, -55, 66, 91, 24, -62, 66, -73, -24, -125, 66, -100, -55, 41, 66, -71, 73, 107, 66, -61, 77, -24, 66, 86, 63, -67, 66, -103, 37, 16, 66, -118, -109, 44, 66, -105, -9, -33, 66, -79, 48, -19, 66, -74, 97, 9, 66, -96, 73, -69, 66, -59, 65, 120, 66, -88, 103, -36, 66, 88, -30, -115, 66, 82, -114, 29, 66, 104, -37, -89, 66, -99, -41, 1, 66, -77, -16, -48, 66, -99, 24, -117, 66, -59, -32, -9, 66, -117, 62, 83, 66, -99, 43, -54, 66, -111, 115, -37, 66, -117, -9, 110, 66, -65, 108, 89, 66, -78, -6, -42, 66, -98, 127, -31, 66, -72, -72, 33, 66, -117, -76, 114, 66, -116, 46, -18, 66, 103, 17, -113, 66, -83, -97, -106, 66, -62, 35, 48, 66, -99, 20, 27, 66, -61, -45, -81, 66, -117, -15, -119, 66, -105, 15, 124, 66, 108, -67, -88, 66, 89, -125, -4, 66, -107, -25, 4, 66, -64, -38, -115, 66, -100, -20, -48, 66, 88, 6, 77, 66, 86, -22, 0, 66, -96, -108, -89, 66, 94, 100, -55, 66, -66, 14, 28, 66, -89, 60, 37, 66, -118, -84, 34, 66, 96, 73, 76, 66, 80, 64, -114, 66, -115, -104, 19, 66, 75, 30, 98, 66, -105, 91, -106, 66, 74, 31, -11, 66, -118, -3, -11, 66, -82, -72, -72, 66, -113, 35, -83, 66, -116, -113, -91, 66, -73, 84, 5, 66, -109, -94, -104, 66, 119, -19, 39, 66, -117, 17, 108, 66, -98, 117, -86, 66, -102, 56, -113, 66, 96, 90, 98, 66, -111, 53, -126, 66, -104, -64, 57, 66, 86, 77, -121, 66, -65, -98, 51, 66, -113, -58, -58, 66, 77, -104, 29, 66, 72, 50, -46, 66, -125, -36, 15, 66, 91, -31, 126, 66, -98, 106, 81, 66, -83, -115, 86, 66, -116, -24, 22, 66, 94, 110, 41, 66, -70, 65, -104, 66, 94, 113, -94, 66, -107, -51, 68, 66, -100, 122, -57, 66, -71, -16, 105, 66, -119, -100, -19, 66, 106, -14, 55, 66, -113, -97, 89, 66, -117, 19, -2, 66, -122, -27, 107, 66, 114, -11, -3, 66, -112, 10, -126, 66, -76, -26, 80, 66, 90, -77, -89, 66, 87, 10, 57, 66, -115, 45, 62, 66, -108, -120, -57, 66, -110, -27, -117, 66, 110, -96, 44, 66, -125, 3, 101, 66, 87, -89, -119, 66, -112, 20, 102, 66, -128, -5, 103, 66, -61, 6, -60, 66, -72, -111, -22, 66, -98, -92, -3, 66, 73, -98, -6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], "precision": "FLOAT_32", "root": 0, "canonicalAndNotALeaf": true, "size": 228, "leftIndex": [ -1, 1, 255, 1160410184, 1017177992, 583521974, 969262118, 716729444, 600505403, 1100016922, 753852334, 643567427, 1160578652, 588239222, 597076159, 0, 0 ], "rightIndex": [ -1, 1, 255, 1155824878, 630820141, 581396444, 581216390, 1025975534, 1013272006, 726472544, 626323669, 768460445, 711865301, 582921926, 587687386, 0, 0 ], "nodeFreeIndexes": [], "nodeFreeIndexPointer": 26, "leafFreeIndexes": [], "leafFreeIndexPointer": 26, "partialTreeStateEnabled": true }, "boundingBoxCacheFraction": 0.0, "partialTreeState": true, "seed": 2636386493963874353, "id": 0, "dimensions": 32, "staticSeed": 0, "weight": 0.0, "hasAuxiliaryData": false }, { "version": "2.0", "root": 0, "maxSize": 256, "outputAfter": 32, "storeSequenceIndexesEnabled": false, "centerOfMassEnabled": false, "nodeStoreState": { "version": "2.0", "capacity": 255, "compressed": true, "cutDimension": [ 0, 31, 255, 788174302, 798717110, 366505670, 119613373, 66512334, 853456866, 502119545, 842074535, 914171442, 870410549, 714861873, 489239669, 991668698, 578117463, 74496707, 237819874, 232737587, 1067103550, 599611629, 250213437, 1021368235, 228956670, 595533297, 263410797, 594373949, 402575103, 858203485, 45956269, 194420585, 1010017503, 221618018, 619120463, 706196786, 111868117, 191735609, 903846469, 380274103, 18166, 0, 0, 0, 0, 0 ], "cutValueData": [ 69, 112, -66, 86, 69, 92, 39, 28, 66, 79, -121, 62, 66, -104, 40, -80, 66, 78, 91, -59, 66, 90, -80, 91, 66, -91, -67, 83, 66, -118, 32, 118, 66, -96, -65, -83, 66, -95, 71, -113, 65, -63, -16, 19, 66, 68, 117, 14, 66, -78, -93, -10, 66, -74, -66, -10, 66, 127, -8, -88, 65, 85, -90, 7, 66, 24, -54, -111, 66, -61, -27, -40, 66, -125, 86, 60, 66, -112, 117, 34, 66, -109, 62, -126, 66, -76, -26, 98, 66, -75, 4, 118, 64, -51, 72, -93, 66, -82, -56, 61, 66, -83, 106, 96, 66, -110, 120, -39, 66, -117, 14, -128, 66, 89, -25, -42, 66, -122, 67, 5, 66, -84, 3, -1, 66, 111, 12, -109, 66, -98, -50, 113, 66, -102, 90, 7, 66, -125, 57, 21, 66, 123, -32, 39, 66, -110, 5, 73, 66, 117, 96, 3, 65, -108, 59, -116, 66, 87, -77, 31, 66, -82, 31, 115, 66, -59, -9, -47, 66, 123, -21, 105, 66, -119, 1, -92, 66, -69, -31, -89, 66, -85, -49, -113, 66, 82, -50, -90, 66, -98, -102, -119, 66, -68, -79, 17, 66, -97, 60, -79, 66, -88, -113, 42, 66, -90, -10, -63, 66, 121, 122, -90, 66, 73, 34, 45, 66, -110, 27, 7, 66, -107, -103, -16, 66, -78, 41, 43, 66, -71, -93, -120, 66, -63, -45, -108, 66, -99, -50, 40, 66, -102, 116, 19, 66, -118, 42, 15, 66, 15, 26, -98, 66, 83, -13, 16, 66, -99, 127, -43, 66, -104, 24, 45, 66, -103, -18, -54, 66, 86, 48, -103, 66, -111, -55, -72, 66, -70, -50, -49, 66, -63, -68, 6, 66, -61, 120, 81, 66, -79, 65, 95, 66, -60, 65, 57, 66, -61, -63, -39, 66, 21, -123, -121, 66, -113, 45, 54, 66, -121, -121, 118, 66, 108, -49, -84, 66, -71, 98, -25, 66, 84, -69, -71, 66, -98, 13, -97, 66, 71, 9, 58, 66, -115, -62, -38, 66, 69, 67, 27, 66, -74, 24, 56, 66, -66, 100, 111, 66, -97, -95, -79, 66, 92, -125, -63, 66, -66, -109, 109, 66, -63, -14, 113, 66, 100, 40, 44, 66, -122, -8, -35, 66, -97, -8, 98, 66, -67, -88, 76, 66, -127, 86, -27, 66, 84, 18, 125, 66, -104, 29, 92, 66, -62, -128, -82, 66, -84, 36, -25, 66, -113, 2, 35, 66, -63, -8, 28, 66, -72, -82, 50, 66, -127, 14, -87, 66, -110, 101, -14, 66, -102, 15, 67, 66, -99, -74, -63, 66, 23, -38, -128, 66, -113, 120, -72, 66, 98, 39, -27, 66, -79, 51, 36, 66, -69, 0, 34, 66, 87, -41, 106, 66, -98, -59, -97, 66, -101, -107, -9, 66, -108, -107, -64, 66, -103, 61, -11, 66, 98, -36, -120, 66, -73, 120, -54, 66, 89, -22, -66, 66, 69, -38, 97, 66, -120, -40, -103, 66, -90, -34, 70, 66, -96, 107, -47, 66, -67, -70, 95, 66, -89, -86, -69, 66, -78, 17, -7, 66, 84, -87, 35, 66, -80, -40, 113, 66, 118, -36, 110, 66, -94, -7, 71, 66, -68, 91, -125, 66, -116, -92, -84, 66, 124, -15, -98, 66, 69, 57, -39, 66, -74, 51, -87, 66, 69, 92, -110, 66, -113, 16, 100, 66, -116, 64, -112, 66, 81, 14, 49, 66, -95, -83, 18, 66, -77, -25, 102, 66, 87, 122, 114, 66, 81, 94, 0, 66, -123, -8, -58, 66, -124, 26, -12, 66, 87, -66, 40, 66, -59, -119, 45, 66, -68, 54, -66, 66, -126, -17, 102, 66, 72, 86, 94, 66, 114, -102, -11, 66, 80, -10, -112, 66, -96, 13, -104, 66, 86, -58, 27, 66, 79, 21, 57, 66, -113, -3, -124, 66, -80, 105, 3, 66, -117, 120, 13, 66, -77, -64, -11, 66, -65, -48, 99, 66, -102, 75, -1, 66, -102, 83, 91, 66, -99, 37, -94, 66, 98, 90, -87, 66, -83, 64, 126, 66, 77, -57, -109, 66, -102, -99, 23, 66, -106, 112, -96, 66, 122, 86, 97, 66, 103, 14, 53, 66, -106, 37, 72, 66, -107, 97, -32, 66, -111, 80, 41, 66, 91, 84, 123, 66, -79, -84, -35, 66, -112, -17, -96, 66, 86, 27, -63, 66, 74, -24, 82, 66, -72, -7, -6, 66, -63, -23, 57, 66, 82, -20, 74, 66, -117, 10, -74, 66, 88, -103, 3, 66, 97, 15, -55, 66, -68, -86, 92, 66, 93, 94, -105, 66, -64, -63, -7, 66, -124, -20, 104, 66, -69, -119, -81, 66, -65, 19, -20, 66, -68, 44, -47, 66, -61, 65, -2, 66, -101, 25, 59, 66, -107, -76, 100, 66, 106, -5, 53, 66, -120, 51, 11, 66, -99, 105, -68, 66, -107, 93, -23, 66, -65, 110, -18, 66, -60, 110, -53, 66, -128, -87, 59, 66, -95, 58, 72, 66, 94, -115, -30, 66, -110, -77, -62, 66, -90, 110, -89, 66, -111, 15, -127, 66, 80, 28, -31, 66, -74, 32, 118, 66, -93, -44, 76, 66, -112, 118, 15, 66, -98, 55, -75, 66, -59, -89, 42, 66, 84, -22, -89, 66, -112, -70, 64, 66, -60, -52, 39, 66, 86, 77, 30, 66, -118, -113, 17, 66, -111, -87, -118, 66, -117, -117, 115, 66, -79, 5, -109, 66, 85, -35, 103, 66, -64, -74, 33, 66, 69, 57, 47, 66, -119, 17, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], "precision": "FLOAT_32", "root": 0, "canonicalAndNotALeaf": true, "size": 225, "leftIndex": [ -1, 1, 255, 1112601230, 1098481256, 715612390, 755116096, 774811544, 755091314, 1099883041, 1104134558, 710979488, 639137542, 970204702, 21543125, 0, 0 ], "rightIndex": [ -1, 1, 255, 1100082838, 1026743281, 974929489, 1157397494, 1162075454, 770030701, 1147892029, 1143048553, 712423184, 1155684874, 974042806, 26391631, 0, 0 ], "nodeFreeIndexes": [], "nodeFreeIndexPointer": 29, "leafFreeIndexes": [], "leafFreeIndexPointer": 29, "partialTreeStateEnabled": true }, "boundingBoxCacheFraction": 0.0, "partialTreeState": true, "seed": 1481498699720728495, "id": 0, "dimensions": 32, "staticSeed": 0, "weight": 0.0, "hasAuxiliaryData": false }, { "version": "2.0", "root": 0, "maxSize": 256, "outputAfter": 32, "storeSequenceIndexesEnabled": false, "centerOfMassEnabled": false, "nodeStoreState": { "version": "2.0", "capacity": 255, "compressed": true, "cutDimension": [ 0, 31, 255, 395504574, 585025198, 900579529, 660706858, 129354621, 584653689, 227894714, 496541255, 500241443, 884430901, 196410546, 367394527, 311609830, 737270875, 454334127, 510170670, 178633154, 179615919, 312450938, 93929382, 259980462, 535254690, 572598979, 718329150, 887737550, 371910753, 1033713388, 710371046, 34957989, 909313710, 621919469, 590414885, 859822039, 440044767, 595507497, 102226114, 343784573, 878258135, 0, 0, 0, 0, 0 ], "cutValueData": [ 68, -101, -40, -100, 66, -125, 79, 10, 66, -76, -29, 32, 67, -47, -38, 35, 66, 86, 105, -128, 66, 84, 58, -22, 67, 1, -59, 123, 66, -114, -96, 55, 66, 35, -14, -91, 66, 113, 95, -115, 65, -47, -126, 69, 66, -122, -60, 121, 66, -119, -120, -18, 66, -82, 106, -94, 65, 12, 27, -61, 66, 77, 104, -38, 66, -72, 94, -13, 69, 100, -74, -54, 66, -73, 117, -43, 66, -110, -8, 43, 66, -112, -109, -66, 66, 102, 122, -124, 66, -65, 44, -100, 66, 78, 96, 114, 66, -86, 126, 115, 66, 109, 82, 90, 66, -77, 33, 75, 65, 17, 115, -86, 63, -35, -47, 2, 66, 114, 126, 36, 66, -105, -6, 12, 65, 37, 34, -15, 66, -80, 87, -18, 66, -73, 118, -59, 66, -109, -3, 72, 66, -115, -53, -32, 66, -60, -67, -94, 66, -110, -4, -39, 66, -93, -8, -29, 66, -89, 23, -40, 66, -101, 30, 47, 66, -94, -20, -80, 66, -126, 88, -88, 66, -76, 57, 58, 63, -35, -21, 122, 66, -100, -123, -115, 66, -79, 84, 66, 66, -82, 3, 58, 65, -33, 65, 92, 66, -96, 81, 82, 66, -104, -32, -96, 66, -84, -24, 57, 66, -102, -102, 8, 66, -83, 19, 25, 66, -95, 15, -124, 66, -108, 3, -38, 66, -78, -12, -6, 66, -66, 115, 79, 66, 94, -107, -50, 66, -74, -74, 48, 66, -64, -115, -111, 66, -97, -46, 115, 66, 83, 17, 64, 66, -120, -51, -76, 66, 82, 111, -41, 66, -99, -24, -56, 66, 82, 2, -23, 66, -64, -39, -78, 66, 85, -10, -48, 66, 109, 13, -112, 66, -75, 29, -106, 66, -76, 31, -103, 66, -68, 121, 104, 66, 75, 68, -34, 66, -66, 45, 111, 66, -118, 77, -64, 66, -102, -101, -95, 66, -108, 96, -35, 66, 90, -6, 108, 66, -91, 73, 0, 66, 101, 12, -79, 66, 76, 30, 36, 66, 92, 6, -27, 66, -99, -33, 100, 66, -128, 23, 86, 66, -111, 126, 115, 66, -127, 70, -89, 66, 62, 109, -26, 66, -113, 53, 109, 66, -125, -72, -12, 66, -71, 61, -93, 66, -106, 35, -13, 66, -117, -5, -16, 66, -97, -43, -121, 66, -88, 62, -91, 66, 99, 6, 53, 66, -71, -99, 98, 66, -70, -60, 41, 66, -67, 81, 104, 66, 90, -43, 105, 66, -63, 118, -76, 66, -95, 126, 33, 66, 89, -122, 109, 66, -96, -29, 117, 66, -63, 3, -49, 66, -100, -88, 79, 66, 74, 108, 50, 66, -110, -46, 19, 66, -90, -42, -74, 66, 114, 36, 6, 66, 91, 31, 43, 66, 85, 31, 121, 66, -105, -44, 34, 66, -107, 82, 23, 66, -64, -58, 81, 66, -121, -10, 38, 66, 99, -105, 31, 66, -83, 0, -128, 66, -104, -78, -86, 66, -70, 73, 47, 66, -68, 2, -68, 66, -113, -121, -79, 66, 89, 85, 108, 66, -119, 84, -82, 66, 79, -44, -38, 66, 79, -20, 114, 66, -72, -50, 116, 66, -125, 96, -25, 66, -126, -21, -6, 66, -59, -128, -90, 66, -77, 118, 3, 66, 82, 75, 123, 66, 97, -61, -86, 66, -79, 93, -87, 66, -64, 11, 30, 66, -66, -94, 3, 66, -60, -113, -40, 66, -107, -100, 37, 66, -76, -45, 82, 66, -107, 9, 73, 66, -94, -123, 125, 66, -112, 101, 28, 66, -106, -119, 121, 66, -85, -112, 8, 66, -60, 67, 16, 66, -74, -100, 51, 66, 69, 110, -88, 66, 95, 9, -59, 66, -60, -56, -31, 66, -82, -15, 49, 66, -104, -94, -50, 66, 83, 52, -102, 66, -66, -24, 10, 66, -117, -79, -91, 66, -67, -59, 119, 66, 109, -67, 110, 63, -127, 53, -107, 66, 72, -18, 51, 66, -120, -61, 51, 66, -69, -74, 47, 66, -118, 35, -77, 66, -67, 22, 30, 66, -67, 86, 1, 66, 76, -110, -54, 66, -113, -98, -65, 66, -69, -57, -116, 66, -113, 31, 60, 66, -105, 29, 38, 66, 127, 101, 125, 66, -103, -121, -41, 66, -92, -124, 60, 66, -78, 86, 120, 66, -116, -114, -56, 66, -106, 53, -53, 66, -62, 65, 69, 66, -121, -58, 109, 66, -125, 58, -55, 66, -66, -70, -58, 66, 70, 32, 53, 66, 84, -109, 79, 66, -117, 2, 115, 66, 117, -85, -128, 66, 80, 55, 122, 66, 103, 73, -127, 66, -115, -98, 38, 66, -63, -88, -65, 66, -102, 16, 123, 66, -117, 17, -42, 66, -110, -46, 21, 66, -70, -40, 94, 66, 103, 60, -38, 66, -117, -79, 62, 66, 93, -119, -43, 66, -66, -45, 110, 66, -107, -66, -69, 66, 84, 81, 106, 66, 115, 63, 63, 66, -99, 15, -97, 66, 101, -105, 12, 66, -79, 68, 117, 66, 83, -121, 24, 66, -106, -103, -7, 66, 104, 77, -76, 66, -112, -98, -70, 66, -117, -8, 42, 66, -104, 6, 120, 66, -70, -97, 38, 66, -99, 63, 28, 66, -127, -21, -30, 66, -110, 102, 21, 66, -85, 110, 56, 66, -62, 123, -3, 66, -59, 111, -119, 66, 108, -99, 115, 66, -104, -106, -117, 66, 99, 104, 101, 66, -107, -109, -39, 66, 69, -7, -47, 66, 118, -96, 26, 66, 100, -53, -68, 66, 84, 100, -107, 66, -64, 92, -87, 66, 104, -40, 62, 66, -64, -101, 16, 66, -99, -23, -91, 66, -60, -61, -57, 66, -100, -80, 67, 66, -76, -94, 92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], "precision": "FLOAT_32", "root": 0, "canonicalAndNotALeaf": true, "size": 228, "leftIndex": [ -1, 1, 255, 729935225, 774110515, 644020442, 602647442, 724628632, 1160470031, 1102654741, 975699148, 711885020, 597139601, 624895870, 597251228, 0, 0 ], "rightIndex": [ -1, 1, 255, 643928587, 774602257, 774832121, 1032937514, 1155686359, 984562334, 730133567, 1013920862, 1141526167, 581151478, 624197408, 625949042, 0, 0 ], "nodeFreeIndexes": [], "nodeFreeIndexPointer": 26, "leafFreeIndexes": [], "leafFreeIndexPointer": 26, "partialTreeStateEnabled": true }, "boundingBoxCacheFraction": 0.0, "partialTreeState": true, "seed": -326098280807737610, "id": 0, "dimensions": 32, "staticSeed": 0, "weight": 0.0, "hasAuxiliaryData": false }, { "version": "2.0", "root": 0, "maxSize": 256, "outputAfter": 32, "storeSequenceIndexesEnabled": false, "centerOfMassEnabled": false, "nodeStoreState": { "version": "2.0", "capacity": 255, "compressed": true, "cutDimension": [ 0, 31, 255, 53270838, 647031374, 119730107, 769242474, 81208803, 74292330, 215862725, 487953482, 727395159, 863477410, 347707217, 999504309, 794159870, 345620406, 117119418, 536214317, 240760993, 619092426, 204531182, 743941457, 207144049, 716884917, 358578133, 995748417, 498445609, 792270938, 994048331, 1041956798, 572573245, 764632115, 769913909, 1065293034, 799648081, 913108409, 380348583, 330397483, 664271558, 399767081, 21817, 0, 0, 0, 0 ], "cutValueData": [ 69, 76, 38, 14, 66, 51, -35, -57, 66, -83, 36, -80, 67, -66, 102, -98, 68, -80, -128, -68, 66, -120, 121, 76, 66, -86, 17, 97, 66, -82, 19, 82, 66, -58, -82, 121, 66, -117, -8, -73, 66, -92, -97, -115, 66, 101, -74, 1, 66, 94, 96, 112, 66, -118, 77, 65, 66, 31, 83, 127, 66, -117, 48, 73, 66, -63, 126, -93, 65, 90, 114, 75, 66, -78, -41, 113, 66, 114, -72, -73, 66, -92, -103, -122, 66, 110, -10, 30, 66, -101, 40, 47, 66, -78, -108, 115, 66, 82, 49, -33, 66, 99, -41, 14, 66, -96, -68, -111, 66, -59, -39, 116, 66, 117, 83, 96, 66, -98, -12, -57, 66, -99, 26, 6, 66, 100, 78, 40, 66, 81, 91, -42, 66, 86, 26, 110, 66, -79, 29, 90, 66, -80, 37, -74, 66, -99, -112, -68, 66, -88, 87, 19, 66, 13, 16, 19, 66, 68, 6, 91, 66, -111, -115, -98, 66, -59, -39, 10, 66, -80, -96, -95, 66, -60, 101, 77, 66, -108, 35, 98, 66, 119, 23, -16, 66, 119, -16, 97, 66, -62, -118, 86, 66, 23, -110, 74, 66, -66, 43, -44, 66, -88, 99, 34, 66, -67, 122, 18, 66, -105, 87, -55, 66, -117, -59, -113, 66, -71, 94, -54, 66, -119, -9, -67, 66, 102, 91, 14, 66, 46, 83, -125, 66, 105, -77, 92, 66, -108, -65, -101, 66, -88, 28, 71, 66, -68, 114, 56, 66, -117, -73, -119, 66, 72, -85, 9, 66, 108, 10, -10, 66, -79, -110, 68, 66, -115, -119, -74, 66, -117, -90, 6, 66, -66, -48, -29, 66, -84, 67, -51, 66, -122, 91, -46, 66, -91, 34, 119, 66, -77, 87, -54, 66, 69, -47, 5, 66, -71, -52, -48, 66, 95, -71, 67, 66, -99, 94, -51, 66, 98, 37, -74, 66, -70, 35, 90, 66, -115, -109, -31, 66, 105, -92, 31, 66, -128, 7, -117, 66, -121, -37, 93, 66, -67, 64, -126, 66, -72, -122, 124, 66, -121, 105, 19, 66, -60, 24, -55, 66, -81, 20, 42, 66, 81, 90, -111, 66, 91, -54, 8, 66, -112, -87, -38, 66, -93, -46, -82, 66, -62, 16, -34, 66, 110, -55, 75, 66, 83, 89, -110, 66, 90, -101, 36, 66, -105, 54, -83, 66, -86, -85, -56, 66, -80, -70, -99, 66, 97, 77, -75, 66, -99, 25, 42, 66, 81, 91, 34, 66, -78, 71, -116, 66, -70, -58, -3, 66, -59, -21, -111, 66, -101, 121, 11, 66, -63, 101, -114, 66, -63, 77, 87, 66, -75, -1, 124, 66, 69, -122, 77, 66, -112, 20, -5, 66, -106, 17, -36, 66, 108, -115, -124, 66, -72, -24, -86, 66, -101, 116, -35, 66, -63, 44, 14, 66, -113, 36, -117, 66, 104, 52, -44, 66, -106, -118, -121, 66, -67, -45, -24, 66, -110, 27, 60, 66, 98, 91, -81, 66, -116, 36, 10, 66, -114, -111, 34, 66, -104, -75, 29, 66, -60, 44, -44, 66, 125, -49, -80, 66, -122, -120, -80, 66, -60, 46, 0, 66, -127, 88, -74, 66, 84, 1, -119, 66, -114, -97, 6, 66, -107, 17, 27, 66, -68, 79, 43, 66, -112, -112, -78, 66, -64, 27, -47, 66, -127, -128, 7, 66, -82, -81, 49, 66, -103, -52, -35, 66, -70, -95, 115, 66, -67, -102, -44, 66, 80, 56, -87, 66, -123, -76, -14, 66, -109, 17, -83, 66, -103, -22, -49, 66, -107, -81, 76, 66, 91, -15, -109, 66, 93, -50, 106, 66, 71, 87, -83, 66, -65, -115, -104, 66, -80, 97, 61, 66, -60, 102, 38, 66, -69, -81, 10, 66, -58, -51, 79, 66, 70, 40, -22, 66, 96, -88, -72, 66, 95, -52, 105, 66, -63, 109, 15, 66, -71, 37, -27, 66, 82, 47, 61, 66, 84, 58, 44, 66, -110, 64, 101, 66, -71, -42, 5, 66, -110, -5, 40, 66, 115, -89, 90, 66, -109, -113, 56, 66, -103, 43, 94, 66, 94, -115, 45, 66, -119, -41, 88, 66, -104, -19, 82, 66, -98, -50, -62, 66, -101, 34, -28, 66, -63, -114, 113, 66, -117, 66, 2, 66, 75, 18, 68, 66, -114, -104, -9, 66, 90, -97, -90, 66, -59, 25, 48, 66, -110, 12, -48, 66, -63, 93, -8, 66, -103, -124, 105, 66, -102, -107, -87, 66, -104, -104, -32, 66, 112, -53, -120, 66, -73, -8, -127, 66, -87, 114, 21, 66, -61, 4, -78, 66, -128, 78, -95, 66, -102, 91, 127, 66, -63, 105, -15, 66, 73, 113, 124, 66, 84, 55, -107, 66, -112, 101, -48, 66, -85, 23, -73, 66, -61, 108, 15, 66, 94, 93, -107, 66, -74, 19, -116, 66, -124, -111, -61, 66, -96, 92, -103, 66, -95, 76, 21, 66, 104, 37, 18, 66, -109, -7, -43, 66, -63, 48, 43, 66, 85, 104, -23, 66, 68, -38, 104, 66, -97, -118, 125, 66, -74, 82, 82, 66, 85, -1, 111, 66, -66, -91, -98, 66, 79, -30, -42, 66, 81, 100, 59, 66, -113, 25, -47, 66, -108, -70, 33, 66, -70, 27, -58, 66, 68, -68, 5, 66, -103, -31, 59, 66, -74, -48, -27, 66, -87, -6, 12, 66, -64, 1, -54, 66, 72, 86, -5, 66, -110, 115, 57, 66, 95, -9, 87, 66, -106, -58, -30, 66, -114, -43, -9, 66, -124, -117, -61, 66, 80, -121, 46, 66, -105, -104, -9, 66, 69, -48, -109, 66, -116, -62, -126, 66, -101, 15, -70, 66, -100, 2, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], "precision": "FLOAT_32", "root": 0, "canonicalAndNotALeaf": true, "size": 231, "leftIndex": [ -1, 1, 255, 626568200, 629499437, 753339841, 1030788898, 726831224, 596099411, 586113809, 975114418, 987685622, 1142571545, 587744221, 711000005, 13, 0 ], "rightIndex": [ -1, 1, 255, 1161723346, 987939094, 768285566, 769871048, 588302266, 983461084, 597634816, 985094540, 640298897, 1118597027, 1030729828, 1098223177, 13, 0 ], "nodeFreeIndexes": [], "nodeFreeIndexPointer": 23, "leafFreeIndexes": [], "leafFreeIndexPointer": 23, "partialTreeStateEnabled": true }, "boundingBoxCacheFraction": 0.0, "partialTreeState": true, "seed": 1885563308252954837, "id": 0, "dimensions": 32, "staticSeed": 0, "weight": 0.0, "hasAuxiliaryData": false } ], "executionContext": { "parallelExecutionEnabled": false, "threadPoolSize": 0 }, "saveTreeStateEnabled": true, "saveSamplerStateEnabled": true, "saveCoordinatorStateEnabled": true }, "thresholderState": { "randomseed": 0, "inAnomaly": false, "elasticity": 0.01, "attributionEnabled": false, "count": 473, "minimumScores": 10, "primaryDeviationState": { "discount": 0.0050000000000000044, "weight": 174.80182844592096, "sumSquared": 36.305151251956836, "sum": 76.92421447463836, "count": 473 }, "secondaryDeviationState": { "discount": 0.0050000000000000044, "weight": 174.80182844592096, "sumSquared": 36.305151251956836, "sum": 76.92421447463836, "count": 473 }, "thresholdDeviationState": { "discount": 0.0025000000000000022, "weight": 234.23102014508095, "sumSquared": 0.3718330270802468, "sum": 0.3718330270802468, "count": 473 }, "upperThreshold": 2.0, "lowerThreshold": 1.0, "absoluteThreshold": 1.0, "autoThreshold": false, "initialThreshold": 1.5, "zFactor": 2.5, "upperZfactor": 5.0, "absoluteScoreFraction": 0.5, "horizon": 0.5 }, "preprocessorStates": [ { "version": "2.1", "useImputedFraction": 0.5, "imputationMethod": "PREVIOUS", "forestMode": "STANDARD", "transformMethod": "NONE", "weights": [ 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0 ], "lastShingledPoint": [ 0.0, 81.1, 98.0, 54.0, 0.0, 72.875, 92.0, 53.0, 0.0, 64.3, 84.0, 50.0, 0.0, 84.9, 97.0, 55.0, 0.0, 72.11111111111111, 92.0, 51.0, 0.0, 70.36363636363636, 84.0, 51.0, 0.0, 85.66666666666667, 96.0, 65.0, 0.0, 75.875, 97.0, 53.0 ], "lastShingledInput": [ 0.0, 81.1, 98.0, 54.0, 0.0, 72.875, 92.0, 53.0, 0.0, 64.3, 84.0, 50.0, 0.0, 84.9, 97.0, 55.0, 0.0, 72.11111111111111, 92.0, 51.0, 0.0, 70.36363636363636, 84.0, 51.0, 0.0, 85.66666666666667, 96.0, 65.0, 0.0, 75.875, 97.0, 53.0 ], "timeDecay": 0.0, "startNormalization": 10, "stopNormalization": 2147483647, "shingleSize": 8, "dimensions": 32, "inputLength": 32, "clipFactor": 10.0, "normalizeTime": false, "previousTimeStamps": [ 0, 0, 0, 0, 0, 0, 0, 0 ], "valuesSeen": 505, "internalTimeStamp": 505, "dataQualityState": { "discount": 1.0E-4, "weight": 253.49802371541492, "sumSquared": 253.49802371541492, "sum": 253.49802371541492, "count": 505 }, "timeStampDeviationState": { "discount": 1.0E-4, "weight": 253.49802371541492, "sumSquared": 0.0, "sum": 0.0, "count": 505 } } ], "ignoreSimilarFactor": 0.3, "triggerFactor": 3.5, "lastAnomalyTimeStamp": 47, "lastAnomalyScore": 5.335765316974856, "lastAnomalyAttribution": { "high": [ 0.0, 1.4117562111336642E-10, 1.418729485350228E-15, 1.0083921478610583E-8, 0.0, 4.917565799521917E-10, 0.0, 1.1332577277142232E-9, 0.0, 1.546364093339942E-15, 1.339953959003808E-14, 8.314645805260075E-9, 0.0, 1.2662953969342049E-11, 2.6668325044282365E-10, 1.2347552503991264E-13, 0.0, 4.1285628236595896E-7, 2.47339143039254E-9, 6.004034811065243E-10, 0.0, 1.007864651346114E-15, 1.4166121775317541E-8, 0.0, 0.0, 8.499118339727005E-9, 8.797576634943594E-10, 0.0, 0.0, 0.4803347475667489, 4.854252775821479, 0.0 ], "low": [ 0.0, 3.818998412901733E-9, 7.882017408917721E-9, 1.0616258029073952E-11, 0.0, 9.378450942272161E-9, 0.0011529511744925037, 8.055723799453522E-9, 0.0, 1.0999779464398417E-7, 1.8676992635241835E-6, 4.329378325769762E-9, 0.0, 2.4004210236996577E-6, 1.359497861942361E-9, 1.898837754447581E-9, 0.0, 1.2579229088962973E-9, 2.1450535608803446E-9, 2.574875299812547E-7, 0.0, 1.2736401329305464E-5, 8.056112720413422E-10, 2.1851422542224092E-8, 0.0, 4.0497722314210486E-10, 3.371667769598239E-6, 1.6874340609136803E-6, 0.0, 0.0, 0.0, 1.895641896778137E-6 ] }, "lastScore": 0.0, "lastAnomalyPoint": [ 0.0, 73.0, 92.0, 58.0, 0.0, 70.22222222222223, 86.0, 54.0, 0.0, 69.88888888888889, 87.0, 55.0, 0.0, 71.55555555555556, 96.0, 50.0, 0.0, 80.2, 98.0, 53.0, 0.0, 67.11111111111111, 97.0, 49.0, 0.0, 76.27272727272727, 93.0, 49.0, 0.0, 503.8, 4343.0, 49.0 ], "previousIsPotentialAnomaly": false, "inHighScoreRegion": false, "ignoreSimilar": false, "numberOfAttributors": 5, "randomSeed": 0, "forestMode": "STANDARD", "transformMethod": "NONE", "lastRelativeIndex": 0, "lastReset": 0 } ================================================ FILE: Java/pom.xml ================================================ 4.0.0 software.amazon.randomcutforest randomcutforest-parent 4.4.0 pom software.amazon.randomcutforest:randomcutforest OpenSearch Random Cut Forest https://github.com/aws/random-cut-forest-by-aws The Apache License, Version 2.0 http://www.apache.org/licenses/LICENSE-2.0.txt amazonwebservices Amazon Web Services https://aws.amazon.com developer 1.8 1.8 UTF-8 core parkservices benchmark examples serialization testutils org.junit.jupiter junit-jupiter-engine 5.10.1 org.junit.jupiter junit-jupiter-params 5.10.1 org.hamcrest hamcrest 2.2 org.mockito mockito-core 5.7.0 org.mockito mockito-junit-jupiter 5.7.0 org.powermock powermock-api-easymock 2.0.7 maven-surefire-plugin 2.22.2 maven-failsafe-plugin 2.22.2 org.apache.maven.plugins maven-site-plugin 3.7.1 org.jacoco jacoco-maven-plugin 0.8.8 prepare-agent report test report com.diffplug.spotless spotless-maven-plugin 1.31.0 ${maven.multiModuleProjectDirectory}/license-header ${maven.multiModuleProjectDirectory}/spotless-eclipse.xml java,javax,org,com compile apply org.apache.maven.plugins maven-deploy-plugin 3.0.0-M1 default-deploy deploy deploy org.apache.maven.plugins maven-source-plugin 2.2.1 attach-sources jar-no-fork org.apache.maven.plugins maven-javadoc-plugin 3.2.0 attach-javadocs jar org.sonatype.plugins nexus-staging-maven-plugin 1.6.13 true ossrh https://aws.oss.sonatype.org/ false org.codehaus.mojo findbugs-maven-plugin 3.0.5 findbugs-filters.xml ossrh-snapshot https://aws.oss.sonatype.org/content/repositories/snapshots ossrh https://oss.sonatype.org/service/local/staging/deploy/maven2/ scm:git:git://github.com/aws/random-cut-forest-by-aws.git scm:git:ssh://github.com/aws/random-cut-forest-by-aws.git https://github.com/aws/random-cut-forest-by-aws/tree/main gpg-sign org.apache.maven.plugins maven-gpg-plugin 3.1.0 sign-artifacts verify sign --pinentry-mode loopback ================================================ FILE: Java/serialization/pom.xml ================================================ 4.0.0 software.amazon.randomcutforest randomcutforest-parent 4.4.0 randomcutforest-serialization jar software.amazon.randomcutforest randomcutforest-core ${project.version} org.projectlombok lombok 1.18.30 provided com.fasterxml.jackson.core jackson-core 2.16.0 com.fasterxml.jackson.core jackson-databind 2.16.0 org.junit.jupiter junit-jupiter-engine test org.junit.jupiter junit-jupiter-params test ================================================ FILE: Java/serialization/src/main/java/com/amazon/randomcutforest/serialize/json/v1/V1JsonToV3StateConverter.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.serialize.json.v1; import static com.amazon.randomcutforest.CommonUtils.checkArgument; import static com.amazon.randomcutforest.CommonUtils.toFloatArray; import java.io.IOException; import java.io.Reader; import java.net.URL; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; import java.util.Optional; import com.amazon.randomcutforest.config.Precision; import com.amazon.randomcutforest.state.ExecutionContext; import com.amazon.randomcutforest.state.RandomCutForestState; import com.amazon.randomcutforest.state.sampler.CompactSamplerState; import com.amazon.randomcutforest.state.store.PointStoreMapper; import com.amazon.randomcutforest.state.store.PointStoreState; import com.amazon.randomcutforest.store.IPointStore; import com.amazon.randomcutforest.store.PointStore; import com.amazon.randomcutforest.tree.ITree; import com.amazon.randomcutforest.tree.RandomCutTree; import com.fasterxml.jackson.databind.ObjectMapper; public class V1JsonToV3StateConverter { private final ObjectMapper mapper = new ObjectMapper(); public RandomCutForestState convert(String json, Precision precision) throws IOException { checkArgument(precision == Precision.FLOAT_32, "float 64 is deprecated in v3"); V1SerializedRandomCutForest forest = mapper.readValue(json, V1SerializedRandomCutForest.class); return convert(forest, precision); } public Optional convert(ArrayList jsons, int numberOfTrees, Precision precision) throws IOException { ArrayList forests = new ArrayList<>(jsons.size()); int sum = 0; for (int i = 0; i < jsons.size(); i++) { V1SerializedRandomCutForest forest = mapper.readValue(jsons.get(i), V1SerializedRandomCutForest.class); forests.add(forest); sum += forest.getNumberOfTrees(); } if (sum < numberOfTrees) { return Optional.empty(); } return Optional.ofNullable(convert(forests, numberOfTrees, precision)); } public RandomCutForestState convert(Reader reader, Precision precision) throws IOException { checkArgument(precision == Precision.FLOAT_32, "float 64 is deprecated in v3"); V1SerializedRandomCutForest forest = mapper.readValue(reader, V1SerializedRandomCutForest.class); return convert(forest, precision); } public RandomCutForestState convert(URL url, Precision precision) throws IOException { checkArgument(precision == Precision.FLOAT_32, "float 64 is deprecated in v3"); V1SerializedRandomCutForest forest = mapper.readValue(url, V1SerializedRandomCutForest.class); return convert(forest, precision); } public RandomCutForestState convert(V1SerializedRandomCutForest serializedForest, Precision precision) { return convert(Collections.singletonList(serializedForest), serializedForest.getNumberOfTrees(), precision); } static class SamplerConverter { private final IPointStore pointStore; private final List compactSamplerStates; private final Precision precision; private final ITree globalTree; private final int maxNumberOfTrees; public SamplerConverter(int dimensions, int capacity, Precision precision, int maxNumberOfTrees) { pointStore = PointStore.builder().dimensions(dimensions).capacity(capacity).shingleSize(1) .initialSize(capacity).build(); globalTree = new RandomCutTree.Builder().pointStoreView(pointStore).capacity(pointStore.getCapacity() + 1) .storeSequenceIndexesEnabled(false).centerOfMassEnabled(false).boundingBoxCacheFraction(1.0) .build(); compactSamplerStates = new ArrayList<>(); this.maxNumberOfTrees = maxNumberOfTrees; this.precision = precision; } public PointStoreState getPointStoreState(Precision precision) { return new PointStoreMapper().toState((PointStore) pointStore); } public void addSampler(V1SerializedRandomCutForest.Sampler sampler) { if (compactSamplerStates.size() < maxNumberOfTrees) { V1SerializedRandomCutForest.WeightedSamples[] samples = sampler.getWeightedSamples(); int[] pointIndex = new int[samples.length]; float[] weight = new float[samples.length]; long[] sequenceIndex = new long[samples.length]; for (int i = 0; i < samples.length; i++) { V1SerializedRandomCutForest.WeightedSamples sample = samples[i]; float[] point = toFloatArray(sample.getPoint()); Integer index = pointStore.add(point, sample.getSequenceIndex()); pointIndex[i] = globalTree.addPoint(index, 0L); if (pointIndex[i] != index) { pointStore.incrementRefCount(pointIndex[i]); pointStore.decrementRefCount(index); } weight[i] = (float) sample.getWeight(); sequenceIndex[i] = sample.getSequenceIndex(); } CompactSamplerState samplerState = new CompactSamplerState(); samplerState.setSize(samples.length); samplerState.setCapacity(sampler.getSampleSize()); samplerState.setTimeDecay(sampler.getLambda()); samplerState.setPointIndex(pointIndex); samplerState.setWeight(weight); samplerState.setSequenceIndex(sequenceIndex); samplerState.setSequenceIndexOfMostRecentTimeDecayUpdate(0L); samplerState.setMaxSequenceIndex(sampler.getEntriesSeen()); samplerState.setInitialAcceptFraction(1.0); compactSamplerStates.add(samplerState); } } } /** * the function merges a collection of RCF-1.0 models with same model parameters * and fixes the number of trees in the new model (which has to be less or equal * than the sum of the old models) The conversion uses the execution context of * the first forest and can be adjusted subsequently by setters * * @param serializedForests A non-empty list of forests (together having more * trees than numberOfTrees) * @param numberOfTrees the new number of trees * @param precision the precision of the new forest * @return a merged RCF with the first numberOfTrees trees */ public RandomCutForestState convert(List serializedForests, int numberOfTrees, Precision precision) { checkArgument(serializedForests.size() > 0, "incorrect usage of convert"); checkArgument(numberOfTrees > 0, "incorrect parameter"); int sum = 0; for (int i = 0; i < serializedForests.size(); i++) { sum += serializedForests.get(i).getNumberOfTrees(); } checkArgument(sum >= numberOfTrees, "incorrect parameters"); RandomCutForestState state = new RandomCutForestState(); state.setNumberOfTrees(numberOfTrees); state.setDimensions(serializedForests.get(0).getDimensions()); state.setTimeDecay(serializedForests.get(0).getLambda()); state.setSampleSize(serializedForests.get(0).getSampleSize()); state.setShingleSize(1); state.setCenterOfMassEnabled(serializedForests.get(0).isCenterOfMassEnabled()); state.setOutputAfter(serializedForests.get(0).getOutputAfter()); state.setStoreSequenceIndexesEnabled(serializedForests.get(0).isStoreSequenceIndexesEnabled()); state.setTotalUpdates(serializedForests.get(0).getExecutor().getExecutor().getTotalUpdates()); state.setCompact(true); state.setInternalShinglingEnabled(false); state.setBoundingBoxCacheFraction(1.0); state.setSaveSamplerStateEnabled(true); state.setSaveTreeStateEnabled(false); state.setSaveCoordinatorStateEnabled(true); state.setPrecision(precision.name()); state.setCompressed(false); state.setPartialTreeState(false); ExecutionContext executionContext = new ExecutionContext(); executionContext.setParallelExecutionEnabled(serializedForests.get(0).isParallelExecutionEnabled()); executionContext.setThreadPoolSize(serializedForests.get(0).getThreadPoolSize()); state.setExecutionContext(executionContext); SamplerConverter samplerConverter = new SamplerConverter(state.getDimensions(), state.getNumberOfTrees() * state.getSampleSize() + 1, precision, numberOfTrees); serializedForests.stream().flatMap(f -> Arrays.stream(f.getExecutor().getExecutor().getTreeUpdaters())) .limit(numberOfTrees).map(V1SerializedRandomCutForest.TreeUpdater::getSampler) .forEach(samplerConverter::addSampler); state.setPointStoreState(samplerConverter.getPointStoreState(precision)); state.setCompactSamplerStates(samplerConverter.compactSamplerStates); return state; } } ================================================ FILE: Java/serialization/src/main/java/com/amazon/randomcutforest/serialize/json/v1/V1SerializedRandomCutForest.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.serialize.json.v1; /** * Serialized RCF for internal use only. */ public class V1SerializedRandomCutForest { public Random getRng() { return rng; } public void setRng(Random rng) { this.rng = rng; } public int getDimensions() { return dimensions; } public void setDimensions(int dimensions) { this.dimensions = dimensions; } public int getSampleSize() { return sampleSize; } public void setSampleSize(int sampleSize) { this.sampleSize = sampleSize; } public int getOutputAfter() { return outputAfter; } public void setOutputAfter(int outputAfter) { this.outputAfter = outputAfter; } public int getNumberOfTrees() { return numberOfTrees; } public void setNumberOfTrees(int numberOfTrees) { this.numberOfTrees = numberOfTrees; } public double getLambda() { return lambda; } public void setLambda(double lambda) { this.lambda = lambda; } public boolean isStoreSequenceIndexesEnabled() { return storeSequenceIndexesEnabled; } public void setStoreSequenceIndexesEnabled(boolean storeSequenceIndexesEnabled) { this.storeSequenceIndexesEnabled = storeSequenceIndexesEnabled; } public boolean isCenterOfMassEnabled() { return centerOfMassEnabled; } public void setCenterOfMassEnabled(boolean centerOfMassEnabled) { this.centerOfMassEnabled = centerOfMassEnabled; } public boolean isParallelExecutionEnabled() { return parallelExecutionEnabled; } public void setParallelExecutionEnabled(boolean parallelExecutionEnabled) { this.parallelExecutionEnabled = parallelExecutionEnabled; } public int getThreadPoolSize() { return threadPoolSize; } public void setThreadPoolSize(int threadPoolSize) { this.threadPoolSize = threadPoolSize; } public Executor getExecutor() { return executor; } public void setExecutor(Executor executor) { this.executor = executor; } private static class Random { } private static class Tree { private boolean storeSequenceIndexesEnabled; private boolean centerOfMassEnabled; private Random random; public boolean isStoreSequenceIndexesEnabled() { return storeSequenceIndexesEnabled; } public void setStoreSequenceIndexesEnabled(boolean storeSequenceIndexesEnabled) { this.storeSequenceIndexesEnabled = storeSequenceIndexesEnabled; } public boolean isCenterOfMassEnabled() { return centerOfMassEnabled; } public void setCenterOfMassEnabled(boolean centerOfMassEnabled) { this.centerOfMassEnabled = centerOfMassEnabled; } public Random getRandom() { return random; } public void setRandom(Random random) { this.random = random; } } static class WeightedSamples { private double[] point; private double weight; private long sequenceIndex; public double[] getPoint() { return point; } public void setPoint(double[] point) { this.point = point; } public double getWeight() { return weight; } public void setWeight(double weight) { this.weight = weight; } public long getSequenceIndex() { return sequenceIndex; } public void setSequenceIndex(long sequenceIndex) { this.sequenceIndex = sequenceIndex; } } static class Sampler { private WeightedSamples[] weightedSamples; private int sampleSize; private double lambda; private Random random; private long entriesSeen; public WeightedSamples[] getWeightedSamples() { return weightedSamples; } public void setWeightedSamples(WeightedSamples[] weightedSamples) { this.weightedSamples = weightedSamples; } public int getSampleSize() { return sampleSize; } public void setSampleSize(int sampleSize) { this.sampleSize = sampleSize; } public double getLambda() { return lambda; } public void setLambda(double lambda) { this.lambda = lambda; } public Random getRandom() { return random; } public void setRandom(Random random) { this.random = random; } public long getEntriesSeen() { return entriesSeen; } public void setEntriesSeen(long entriesSeen) { this.entriesSeen = entriesSeen; } } static class TreeUpdater { public Sampler getSampler() { return sampler; } public void setSampler(Sampler sampler) { this.sampler = sampler; } public Tree getTree() { return tree; } public void setTree(Tree tree) { this.tree = tree; } private Sampler sampler; private Tree tree; } static class Exec { private TreeUpdater[] treeUpdaters; private long totalUpdates; private int threadPoolSize; public TreeUpdater[] getTreeUpdaters() { return treeUpdaters; } public void setTreeUpdaters(TreeUpdater[] treeUpdaters) { this.treeUpdaters = treeUpdaters; } public long getTotalUpdates() { return totalUpdates; } public void setTotalUpdates(long totalUpdates) { this.totalUpdates = totalUpdates; } public int getThreadPoolSize() { return threadPoolSize; } public void setThreadPoolSize(int threadPoolSize) { this.threadPoolSize = threadPoolSize; } } static class Executor { private String executor_type; private Exec executor; public String getExecutor_type() { return executor_type; } public void setExecutor_type(String executor_type) { this.executor_type = executor_type; } public Exec getExecutor() { return executor; } public void setExecutor(Exec executor) { this.executor = executor; } } private Random rng; private int dimensions; private int sampleSize; private int outputAfter; private int numberOfTrees; private double lambda; private boolean storeSequenceIndexesEnabled; private boolean centerOfMassEnabled; private boolean parallelExecutionEnabled; private int threadPoolSize; private Executor executor; } ================================================ FILE: Java/serialization/src/main/java/com/amazon/randomcutforest/serialize/json/v2/V2StateToV3ForestConverter.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.serialize.json.v2; import static com.amazon.randomcutforest.CommonUtils.checkArgument; import static com.amazon.randomcutforest.CommonUtils.checkNotNull; import static com.amazon.randomcutforest.CommonUtils.toFloatArray; import static com.amazon.randomcutforest.state.Version.V2_0; import static com.amazon.randomcutforest.state.Version.V2_1; import java.util.List; import java.util.Random; import com.amazon.randomcutforest.ComponentList; import com.amazon.randomcutforest.RandomCutForest; import com.amazon.randomcutforest.config.Precision; import com.amazon.randomcutforest.executor.PointStoreCoordinator; import com.amazon.randomcutforest.executor.SamplerPlusTree; import com.amazon.randomcutforest.sampler.CompactSampler; import com.amazon.randomcutforest.sampler.Weighted; import com.amazon.randomcutforest.state.RandomCutForestMapper; import com.amazon.randomcutforest.state.RandomCutForestState; import com.amazon.randomcutforest.state.Version; import com.amazon.randomcutforest.state.sampler.CompactSamplerMapper; import com.amazon.randomcutforest.state.sampler.CompactSamplerState; import com.amazon.randomcutforest.state.store.PointStoreState; import com.amazon.randomcutforest.state.tree.CompactRandomCutTreeContext; import com.amazon.randomcutforest.store.PointStore; import com.amazon.randomcutforest.tree.RandomCutTree; import com.amazon.randomcutforest.util.ArrayPacking; public class V2StateToV3ForestConverter { public RandomCutForest convert(RandomCutForestState v2State) { String version = v2State.getVersion(); checkArgument(version.equals(V2_0) || version.equals(V2_1), "incorrect convertor"); if (Precision.valueOf(v2State.getPrecision()) == Precision.FLOAT_32) { RandomCutForestMapper mapper = new RandomCutForestMapper(); mapper.setCompressionEnabled(v2State.isCompressed()); return mapper.toModel(v2State); } else { return convertFrom64(v2State); } } public PointStore convertFromDouble(PointStoreState state) { checkNotNull(state.getRefCount(), "refCount must not be null"); checkNotNull(state.getPointData(), "pointData must not be null"); checkArgument(Precision.valueOf(state.getPrecision()) == Precision.FLOAT_64, "precision must be " + Precision.FLOAT_64); int indexCapacity = state.getIndexCapacity(); int dimensions = state.getDimensions(); float[] store = toFloatArray( ArrayPacking.unpackDoubles(state.getPointData(), state.getCurrentStoreCapacity() * dimensions)); int startOfFreeSegment = state.getStartOfFreeSegment(); int[] refCount = ArrayPacking.unpackInts(state.getRefCount(), indexCapacity, state.isCompressed()); int[] locationList = new int[indexCapacity]; int[] tempList = ArrayPacking.unpackInts(state.getLocationList(), state.isCompressed()); System.arraycopy(tempList, 0, locationList, 0, tempList.length); if (!state.getVersion().equals(Version.V3_0)) { transformArray(locationList, dimensions / state.getShingleSize()); } return PointStore.builder().internalRotationEnabled(state.isRotationEnabled()) .internalShinglingEnabled(state.isInternalShinglingEnabled()) .dynamicResizingEnabled(state.isDynamicResizingEnabled()) .directLocationEnabled(state.isDirectLocationMap()).indexCapacity(indexCapacity) .currentStoreCapacity(state.getCurrentStoreCapacity()).capacity(state.getCapacity()) .shingleSize(state.getShingleSize()).dimensions(state.getDimensions()).locationList(locationList) .nextTimeStamp(state.getLastTimeStamp()).startOfFreeSegment(startOfFreeSegment).refCount(refCount) .knownShingle(state.getInternalShingle()).store(store).build(); } void transformArray(int[] location, int baseDimension) { checkArgument(baseDimension > 0, "incorrect invocation"); for (int i = 0; i < location.length; i++) { if (location[i] > 0) { location[i] = location[i] / baseDimension; } } } RandomCutForest convertFrom64(RandomCutForestState state) { boolean parallel = false; int threadPoolSize = 1; if (state.getExecutionContext() != null) { parallel = state.getExecutionContext().isParallelExecutionEnabled(); threadPoolSize = state.getExecutionContext().getThreadPoolSize(); } RandomCutForest.Builder builder = RandomCutForest.builder().numberOfTrees(state.getNumberOfTrees()) .dimensions(state.getDimensions()).timeDecay(state.getTimeDecay()).sampleSize(state.getSampleSize()) .centerOfMassEnabled(state.isCenterOfMassEnabled()).outputAfter(state.getOutputAfter()) .parallelExecutionEnabled(parallel).threadPoolSize(threadPoolSize) .storeSequenceIndexesEnabled(state.isStoreSequenceIndexesEnabled()).shingleSize(state.getShingleSize()) .boundingBoxCacheFraction(state.getBoundingBoxCacheFraction()).compact(state.isCompact()) .internalShinglingEnabled(state.isInternalShinglingEnabled()); Random random = builder.getRandom(); PointStore pointStore = convertFromDouble(state.getPointStoreState()); ComponentList components = new ComponentList<>(); PointStoreCoordinator coordinator = new PointStoreCoordinator<>(pointStore); coordinator.setTotalUpdates(state.getTotalUpdates()); CompactRandomCutTreeContext context = new CompactRandomCutTreeContext(); context.setPointStore(pointStore); context.setMaxSize(state.getSampleSize()); checkArgument(state.isSaveSamplerStateEnabled(), " conversion cannot proceed without samplers"); List samplerStates = state.getCompactSamplerStates(); CompactSamplerMapper samplerMapper = new CompactSamplerMapper(); for (int i = 0; i < state.getNumberOfTrees(); i++) { CompactSampler compactData = samplerMapper.toModel(samplerStates.get(i)); RandomCutTree tree = RandomCutTree.builder().capacity(state.getSampleSize()).pointStoreView(pointStore) .storeSequenceIndexesEnabled(state.isStoreSequenceIndexesEnabled()) .outputAfter(state.getOutputAfter()).centerOfMassEnabled(state.isCenterOfMassEnabled()) .randomSeed(random.nextLong()).build(); CompactSampler sampler = CompactSampler.builder().capacity(state.getSampleSize()) .timeDecay(state.getTimeDecay()).randomSeed(random.nextLong()).build(); sampler.setMaxSequenceIndex(compactData.getMaxSequenceIndex()); sampler.setMostRecentTimeDecayUpdate(compactData.getMostRecentTimeDecayUpdate()); for (Weighted sample : compactData.getWeightedSample()) { Integer reference = sample.getValue(); Integer newReference = tree.addPoint(reference, sample.getSequenceIndex()); if (newReference.intValue() != reference.intValue()) { pointStore.incrementRefCount(newReference); pointStore.decrementRefCount(reference); } sampler.addPoint(newReference, sample.getWeight(), sample.getSequenceIndex()); } components.add(new SamplerPlusTree<>(sampler, tree)); } RandomCutForest forest = new RandomCutForest(builder, coordinator, components, random); if (!state.isCurrentlySampling()) { forest.pauseSampling(); } return forest; } } ================================================ FILE: Java/serialization/src/test/java/com/amazon/randomcutforest/serialize/json/v1/V1JsonResource.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.serialize.json.v1; import lombok.Getter; @Getter public enum V1JsonResource { FOREST_1("forest_1.json", 1, 25, 128), FOREST_2("forest_2.json", 4, 40, 256); private final String resource; private final int dimensions; private final int numberOfTrees; private final int sampleSize; V1JsonResource(String resource, int dimensions, int numberOfTrees, int sampleSize) { this.resource = resource; this.dimensions = dimensions; this.numberOfTrees = numberOfTrees; this.sampleSize = sampleSize; } } ================================================ FILE: Java/serialization/src/test/java/com/amazon/randomcutforest/serialize/json/v1/V1JsonToV3StateConverterTest.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.serialize.json.v1; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertTrue; import static org.junit.jupiter.api.Assertions.fail; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.Random; import java.util.stream.Stream; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; import org.junit.jupiter.params.provider.MethodSource; import com.amazon.randomcutforest.RandomCutForest; import com.amazon.randomcutforest.config.Precision; import com.amazon.randomcutforest.state.RandomCutForestMapper; import com.amazon.randomcutforest.state.RandomCutForestState; import com.fasterxml.jackson.databind.ObjectMapper; public class V1JsonToV3StateConverterTest { private V1JsonToV3StateConverter converter; @BeforeEach public void setUp() { converter = new V1JsonToV3StateConverter(); } @ParameterizedTest @MethodSource("args") public void testConvert(V1JsonResource jsonResource, Precision precision) { String resource = jsonResource.getResource(); try (InputStream is = V1JsonToV3StateConverterTest.class.getResourceAsStream(jsonResource.getResource()); BufferedReader rr = new BufferedReader(new InputStreamReader(is, StandardCharsets.UTF_8));) { StringBuilder b = new StringBuilder(); String line; while ((line = rr.readLine()) != null) { b.append(line); } String json = b.toString(); RandomCutForestState state = converter.convert(json, precision); assertEquals(jsonResource.getDimensions(), state.getDimensions()); assertEquals(jsonResource.getNumberOfTrees(), state.getNumberOfTrees()); assertEquals(jsonResource.getSampleSize(), state.getSampleSize()); RandomCutForest forest = new RandomCutForestMapper().toModel(state, 0); assertEquals(jsonResource.getDimensions(), forest.getDimensions()); assertEquals(jsonResource.getNumberOfTrees(), forest.getNumberOfTrees()); assertEquals(jsonResource.getSampleSize(), forest.getSampleSize()); // perform a simple validation of the deserialized forest by update and scoring // with a few points Random random = new Random(0); for (int i = 0; i < 100; i++) { double[] point = getPoint(jsonResource.getDimensions(), random); double score = forest.getAnomalyScore(point); assertTrue(score > 0); forest.update(point); } String newString = new ObjectMapper().writeValueAsString(new RandomCutForestMapper().toState(forest)); System.out.println(" Old size " + json.length() + ", new Size " + newString.length() + ", improvement factor " + json.length() / newString.length()); } catch (IOException e) { fail("Unable to load JSON resource"); } } @ParameterizedTest @MethodSource("args") public void testMerge(V1JsonResource jsonResource, Precision precision) { String resource = jsonResource.getResource(); try (InputStream is = V1JsonToV3StateConverterTest.class.getResourceAsStream(jsonResource.getResource()); BufferedReader rr = new BufferedReader(new InputStreamReader(is, StandardCharsets.UTF_8));) { StringBuilder b = new StringBuilder(); String line; while ((line = rr.readLine()) != null) { b.append(line); } String json = b.toString(); int number = new Random().nextInt(5) + 1; int testNumberOfTrees = Math.min(100, 1 + new Random().nextInt(number * jsonResource.getNumberOfTrees() - 1)); ArrayList models = new ArrayList<>(); for (int i = 0; i < number; i++) { models.add(json); } RandomCutForestState state = converter.convert(models, testNumberOfTrees, precision).get(); assertEquals(jsonResource.getDimensions(), state.getDimensions()); assertEquals(testNumberOfTrees, state.getNumberOfTrees()); assertEquals(jsonResource.getSampleSize(), state.getSampleSize()); RandomCutForest forest = new RandomCutForestMapper().toModel(state, 0); assertEquals(jsonResource.getDimensions(), forest.getDimensions()); assertEquals(testNumberOfTrees, forest.getNumberOfTrees()); assertEquals(jsonResource.getSampleSize(), forest.getSampleSize()); // perform a simple validation of the deserialized forest by update and scoring // with a few points Random random = new Random(0); for (int i = 0; i < 100; i++) { double[] point = getPoint(jsonResource.getDimensions(), random); double score = forest.getAnomalyScore(point); assertTrue(score > 0); forest.update(point); } int expectedSize = (int) Math .floor(1.0 * testNumberOfTrees * json.length() / (number * jsonResource.getNumberOfTrees())); String newString = new ObjectMapper().writeValueAsString(new RandomCutForestMapper().toState(forest)); System.out.println(" Copied " + number + " times, old number of trees " + jsonResource.getNumberOfTrees() + ", new trees " + testNumberOfTrees + ", Expected Old size " + expectedSize + ", new Size " + newString.length()); } catch (IOException e) { fail("Unable to load JSON resource"); } } private double[] getPoint(int dimensions, Random random) { double[] point = new double[dimensions]; for (int i = 0; i < point.length; i++) { point[i] = random.nextDouble(); } return point; } static Stream args() { return jsonParams().flatMap( classParameter -> precision().map(testParameter -> Arguments.of(classParameter, testParameter))); } static Stream precision() { return Stream.of(Precision.FLOAT_32); } static Stream jsonParams() { return Stream.of(V1JsonResource.FOREST_1, V1JsonResource.FOREST_2); } } ================================================ FILE: Java/serialization/src/test/resources/com/amazon/randomcutforest/serialize/json/v1/forest_1.json ================================================ {"rng":{},"dimensions":1,"sampleSize":128,"outputAfter":32,"numberOfTrees":25,"lambda":7.8125E-4,"storeSequenceIndexesEnabled":false,"centerOfMassEnabled":false,"parallelExecutionEnabled":false,"threadPoolSize":0,"executor":{"executor_type":"SequentialForestTraversalExecutor","executor":{"treeUpdaters":[{"sampler":{"weightedSamples":[{"point":[0.730967787376657],"weight":-0.6688810574953065,"sequenceIndex":56},{"point":[0.730967787376657],"weight":-0.6694446327136416,"sequenceIndex":239},{"point":[0.730967787376657],"weight":-0.7099435869862155,"sequenceIndex":158},{"point":[0.730967787376657],"weight":-0.6773930450002961,"sequenceIndex":216},{"point":[0.730967787376657],"weight":-0.7370178483016269,"sequenceIndex":95},{"point":[0.730967787376657],"weight":-0.7238772617635025,"sequenceIndex":12},{"point":[0.730967787376657],"weight":-0.8175803370004122,"sequenceIndex":118},{"point":[0.730967787376657],"weight":-0.7758355111900491,"sequenceIndex":219},{"point":[0.730967787376657],"weight":-0.844745847625517,"sequenceIndex":73},{"point":[0.730967787376657],"weight":-0.7969586787740108,"sequenceIndex":129},{"point":[0.730967787376657],"weight":-0.8391000844693494,"sequenceIndex":47},{"point":[0.730967787376657],"weight":-1.0895485530999558,"sequenceIndex":164},{"point":[0.730967787376657],"weight":-0.8314768328093453,"sequenceIndex":229},{"point":[0.730967787376657],"weight":-0.838073853403588,"sequenceIndex":227},{"point":[0.730967787376657],"weight":-0.8551831713845987,"sequenceIndex":213},{"point":[0.730967787376657],"weight":-0.8058383270521662,"sequenceIndex":205},{"point":[0.730967787376657],"weight":-1.1311393708193649,"sequenceIndex":206},{"point":[0.730967787376657],"weight":-1.051359534840302,"sequenceIndex":74},{"point":[0.730967787376657],"weight":-1.3602646883333933,"sequenceIndex":191},{"point":[0.730967787376657],"weight":-0.8120967944743611,"sequenceIndex":81},{"point":[0.730967787376657],"weight":-0.8412152503792993,"sequenceIndex":202},{"point":[0.730967787376657],"weight":-1.1937884573691986,"sequenceIndex":165},{"point":[0.730967787376657],"weight":-0.9576425135569512,"sequenceIndex":232},{"point":[0.730967787376657],"weight":-1.1745351394411094,"sequenceIndex":97},{"point":[0.730967787376657],"weight":-1.2719590656044537,"sequenceIndex":226},{"point":[0.730967787376657],"weight":-0.9663214704708991,"sequenceIndex":104},{"point":[0.730967787376657],"weight":-1.0767487950245458,"sequenceIndex":179},{"point":[0.730967787376657],"weight":-0.8862884033039824,"sequenceIndex":171},{"point":[0.730967787376657],"weight":-0.9402075771773278,"sequenceIndex":210},{"point":[0.730967787376657],"weight":-1.1171274952744488,"sequenceIndex":122},{"point":[0.730967787376657],"weight":-0.9760712216922116,"sequenceIndex":126},{"point":[0.730967787376657],"weight":-1.209212861519442,"sequenceIndex":241},{"point":[0.730967787376657],"weight":-0.9894347876931673,"sequenceIndex":33},{"point":[0.730967787376657],"weight":-1.2286851681923492,"sequenceIndex":176},{"point":[0.730967787376657],"weight":-1.8929615161994924,"sequenceIndex":138},{"point":[0.730967787376657],"weight":-1.463831142380754,"sequenceIndex":2},{"point":[0.730967787376657],"weight":-1.2704648701797001,"sequenceIndex":131},{"point":[0.730967787376657],"weight":-1.4393749275345746,"sequenceIndex":38},{"point":[0.730967787376657],"weight":-1.4060006577653574,"sequenceIndex":193},{"point":[0.730967787376657],"weight":-0.8148845029074638,"sequenceIndex":174},{"point":[0.730967787376657],"weight":-1.360125646960061,"sequenceIndex":83},{"point":[0.730967787376657],"weight":-1.0423688595531402,"sequenceIndex":220},{"point":[0.730967787376657],"weight":-2.553495220744535,"sequenceIndex":87},{"point":[0.730967787376657],"weight":-1.4910857979989445,"sequenceIndex":89},{"point":[0.730967787376657],"weight":-1.3317600115556942,"sequenceIndex":140},{"point":[0.730967787376657],"weight":-0.959177855457047,"sequenceIndex":46},{"point":[0.730967787376657],"weight":-2.7665000110087017,"sequenceIndex":200},{"point":[0.730967787376657],"weight":-1.2862562017089456,"sequenceIndex":6},{"point":[0.730967787376657],"weight":-1.4123571398870165,"sequenceIndex":49},{"point":[0.730967787376657],"weight":-1.6402049971323254,"sequenceIndex":101},{"point":[0.730967787376657],"weight":-1.3664624302145258,"sequenceIndex":214},{"point":[0.730967787376657],"weight":-1.015903796762246,"sequenceIndex":170},{"point":[0.730967787376657],"weight":-1.054501582696978,"sequenceIndex":53},{"point":[0.730967787376657],"weight":-1.1562451840794954,"sequenceIndex":109},{"point":[0.730967787376657],"weight":-1.0944423940504946,"sequenceIndex":223},{"point":[0.730967787376657],"weight":-0.9242013521567816,"sequenceIndex":28},{"point":[0.730967787376657],"weight":-1.4809513774064462,"sequenceIndex":115},{"point":[0.730967787376657],"weight":-1.0448237468808645,"sequenceIndex":182},{"point":[0.730967787376657],"weight":-1.1281627461045587,"sequenceIndex":59},{"point":[0.730967787376657],"weight":-1.2371952431519164,"sequenceIndex":157},{"point":[0.730967787376657],"weight":-1.335000218061075,"sequenceIndex":217},{"point":[0.730967787376657],"weight":-1.0033032793915928,"sequenceIndex":62},{"point":[0.730967787376657],"weight":-1.4320823771973759,"sequenceIndex":63},{"point":[0.730967787376657],"weight":-1.2684611705814648,"sequenceIndex":252},{"point":[0.730967787376657],"weight":-1.442832305582126,"sequenceIndex":201},{"point":[0.730967787376657],"weight":-3.265475832121588,"sequenceIndex":208},{"point":[0.730967787376657],"weight":-1.69980080710007,"sequenceIndex":166},{"point":[0.730967787376657],"weight":-1.8327848104692763,"sequenceIndex":68},{"point":[0.730967787376657],"weight":-1.4585940595367028,"sequenceIndex":16},{"point":[0.730967787376657],"weight":-2.4744002140273547,"sequenceIndex":218},{"point":[0.730967787376657],"weight":-1.949166867023715,"sequenceIndex":71},{"point":[0.730967787376657],"weight":-2.0296441767906503,"sequenceIndex":187},{"point":[0.730967787376657],"weight":-1.867753988264947,"sequenceIndex":180},{"point":[0.730967787376657],"weight":-2.6221320839127484,"sequenceIndex":235},{"point":[0.730967787376657],"weight":-1.4363740719383313,"sequenceIndex":75},{"point":[0.730967787376657],"weight":-1.5903510227982356,"sequenceIndex":151},{"point":[0.730967787376657],"weight":-1.8760016255517504,"sequenceIndex":77},{"point":[0.730967787376657],"weight":-1.857390233550908,"sequenceIndex":212},{"point":[0.730967787376657],"weight":-2.4774735223520823,"sequenceIndex":152},{"point":[0.730967787376657],"weight":-4.585151612810165,"sequenceIndex":80},{"point":[0.730967787376657],"weight":-1.6774559748537292,"sequenceIndex":40},{"point":[0.730967787376657],"weight":-1.5417237717712085,"sequenceIndex":134},{"point":[0.730967787376657],"weight":-2.1625413968401896,"sequenceIndex":161},{"point":[0.730967787376657],"weight":-2.4643965193289397,"sequenceIndex":21},{"point":[0.730967787376657],"weight":-2.0104729576220635,"sequenceIndex":144},{"point":[0.730967787376657],"weight":-7.162157053775397,"sequenceIndex":86},{"point":[0.730967787376657],"weight":-3.29441413539427,"sequenceIndex":209},{"point":[0.730967787376657],"weight":-2.7176687256007863,"sequenceIndex":88},{"point":[0.730967787376657],"weight":-1.5224061214648075,"sequenceIndex":11},{"point":[0.730967787376657],"weight":-2.7629376079269425,"sequenceIndex":90},{"point":[0.730967787376657],"weight":-2.268919552260495,"sequenceIndex":45},{"point":[0.730967787376657],"weight":-1.0809978342615045,"sequenceIndex":92},{"point":[0.730967787376657],"weight":-1.638796168124627,"sequenceIndex":185},{"point":[0.730967787376657],"weight":-5.359628619182979,"sequenceIndex":94},{"point":[0.730967787376657],"weight":-4.089934341675898,"sequenceIndex":243},{"point":[0.730967787376657],"weight":-1.3542128410657468,"sequenceIndex":96},{"point":[0.730967787376657],"weight":-1.2992143969963252,"sequenceIndex":240},{"point":[0.730967787376657],"weight":-2.2723652738369524,"sequenceIndex":98},{"point":[0.730967787376657],"weight":-1.617107747050164,"sequenceIndex":149},{"point":[0.730967787376657],"weight":-3.8103984532377875,"sequenceIndex":25},{"point":[0.730967787376657],"weight":-1.6904584135996799,"sequenceIndex":246},{"point":[0.730967787376657],"weight":-3.667653827928123,"sequenceIndex":50},{"point":[0.730967787376657],"weight":-4.236443260134257,"sequenceIndex":103},{"point":[0.730967787376657],"weight":-1.3895151777205472,"sequenceIndex":13},{"point":[0.730967787376657],"weight":-1.7617310145560734,"sequenceIndex":105},{"point":[0.730967787376657],"weight":-8.878206083060684,"sequenceIndex":154},{"point":[0.730967787376657],"weight":-1.7803986028498844,"sequenceIndex":107},{"point":[0.730967787376657],"weight":-1.5771117256819902,"sequenceIndex":54},{"point":[0.730967787376657],"weight":-2.6827966301130877,"sequenceIndex":156},{"point":[0.730967787376657],"weight":-1.483437571521761,"sequenceIndex":110},{"point":[0.730967787376657],"weight":-1.441508147436031,"sequenceIndex":27},{"point":[0.730967787376657],"weight":-0.9955171996152521,"sequenceIndex":141},{"point":[0.730967787376657],"weight":-1.584238767343765,"sequenceIndex":113},{"point":[0.730967787376657],"weight":-2.554670097909892,"sequenceIndex":114},{"point":[0.730967787376657],"weight":-2.742779405966055,"sequenceIndex":211},{"point":[0.730967787376657],"weight":-1.386770714515293,"sequenceIndex":250},{"point":[0.730967787376657],"weight":-1.9209347694994323,"sequenceIndex":117},{"point":[0.730967787376657],"weight":-1.4889444303609287,"sequenceIndex":248},{"point":[0.730967787376657],"weight":-1.2515132464104808,"sequenceIndex":119},{"point":[0.730967787376657],"weight":-1.659274647098906,"sequenceIndex":30},{"point":[0.730967787376657],"weight":-1.453380181643202,"sequenceIndex":221},{"point":[0.730967787376657],"weight":-4.451051624349917,"sequenceIndex":222},{"point":[0.730967787376657],"weight":-5.336198647833298,"sequenceIndex":123},{"point":[0.730967787376657],"weight":-1.551768518633028,"sequenceIndex":31},{"point":[0.730967787376657],"weight":-2.775494119010644,"sequenceIndex":8},{"point":[0.730967787376657],"weight":-2.4583243143275446,"sequenceIndex":150},{"point":[0.730967787376657],"weight":-1.620742108354329,"sequenceIndex":127},{"point":[0.730967787376657],"weight":-1.4785060894456088,"sequenceIndex":253}],"sampleSize":128,"lambda":7.8125E-4,"random":{},"entriesSeen":256},"tree":{"storeSequenceIndexesEnabled":false,"centerOfMassEnabled":false,"random":{}}},{"sampler":{"weightedSamples":[{"point":[0.730967787376657],"weight":-0.4598864382520127,"sequenceIndex":185},{"point":[0.730967787376657],"weight":-0.4746032720716633,"sequenceIndex":148},{"point":[0.730967787376657],"weight":-0.5568547624146211,"sequenceIndex":175},{"point":[0.730967787376657],"weight":-0.48560546738000987,"sequenceIndex":245},{"point":[0.730967787376657],"weight":-0.4979307010904822,"sequenceIndex":93},{"point":[0.730967787376657],"weight":-0.571389126958656,"sequenceIndex":26},{"point":[0.730967787376657],"weight":-0.5982928453295104,"sequenceIndex":172},{"point":[0.730967787376657],"weight":-0.5037392277089343,"sequenceIndex":225},{"point":[0.730967787376657],"weight":-0.4916107245299145,"sequenceIndex":37},{"point":[0.730967787376657],"weight":-0.6025756908956976,"sequenceIndex":180},{"point":[0.730967787376657],"weight":-0.8688532821468505,"sequenceIndex":88},{"point":[0.730967787376657],"weight":-0.5982668644912492,"sequenceIndex":103},{"point":[0.730967787376657],"weight":-0.6021041505718532,"sequenceIndex":161},{"point":[0.730967787376657],"weight":-0.7274571266664908,"sequenceIndex":58},{"point":[0.730967787376657],"weight":-0.6654429106276508,"sequenceIndex":120},{"point":[0.730967787376657],"weight":-0.5144903797659188,"sequenceIndex":241},{"point":[0.730967787376657],"weight":-1.093625882714599,"sequenceIndex":129},{"point":[0.730967787376657],"weight":-0.7239899086841673,"sequenceIndex":72},{"point":[0.730967787376657],"weight":-0.6170644758508531,"sequenceIndex":162},{"point":[0.730967787376657],"weight":-0.6744938724043,"sequenceIndex":200},{"point":[0.730967787376657],"weight":-0.7239772226477125,"sequenceIndex":42},{"point":[0.730967787376657],"weight":-1.0584791515996916,"sequenceIndex":220},{"point":[0.730967787376657],"weight":-0.9006528634835586,"sequenceIndex":23},{"point":[0.730967787376657],"weight":-0.814429688490947,"sequenceIndex":198},{"point":[0.730967787376657],"weight":-0.953352184022313,"sequenceIndex":153},{"point":[0.730967787376657],"weight":-0.8808235064808103,"sequenceIndex":235},{"point":[0.730967787376657],"weight":-0.8523667128680026,"sequenceIndex":219},{"point":[0.730967787376657],"weight":-0.792749361777971,"sequenceIndex":29},{"point":[0.730967787376657],"weight":-1.1274846114403103,"sequenceIndex":28},{"point":[0.730967787376657],"weight":-0.6670483594005042,"sequenceIndex":123},{"point":[0.730967787376657],"weight":-0.7740001739265925,"sequenceIndex":125},{"point":[0.730967787376657],"weight":-0.7114960804632913,"sequenceIndex":230},{"point":[0.730967787376657],"weight":-0.6601594370552187,"sequenceIndex":32},{"point":[0.730967787376657],"weight":-1.2914616029551815,"sequenceIndex":35},{"point":[0.730967787376657],"weight":-1.4653700887304537,"sequenceIndex":34},{"point":[0.730967787376657],"weight":-1.2142005254090709,"sequenceIndex":36},{"point":[0.730967787376657],"weight":-0.8351680104085134,"sequenceIndex":4},{"point":[0.730967787376657],"weight":-1.0483239813002518,"sequenceIndex":77},{"point":[0.730967787376657],"weight":-1.2882353912604798,"sequenceIndex":38},{"point":[0.730967787376657],"weight":-1.0759929280317087,"sequenceIndex":5},{"point":[0.730967787376657],"weight":-1.1465263840906157,"sequenceIndex":64},{"point":[0.730967787376657],"weight":-1.278209444828219,"sequenceIndex":170},{"point":[0.730967787376657],"weight":-0.7303815806755529,"sequenceIndex":87},{"point":[0.730967787376657],"weight":-1.6552212049721997,"sequenceIndex":208},{"point":[0.730967787376657],"weight":-1.2668374429513252,"sequenceIndex":90},{"point":[0.730967787376657],"weight":-1.2620229695828002,"sequenceIndex":92},{"point":[0.730967787376657],"weight":-1.542923035506623,"sequenceIndex":181},{"point":[0.730967787376657],"weight":-1.2465968112684012,"sequenceIndex":242},{"point":[0.730967787376657],"weight":-1.6052008692640545,"sequenceIndex":3},{"point":[0.730967787376657],"weight":-1.085060587670115,"sequenceIndex":174},{"point":[0.730967787376657],"weight":-1.135171891489322,"sequenceIndex":243},{"point":[0.730967787376657],"weight":-0.9505362519768855,"sequenceIndex":189},{"point":[0.730967787376657],"weight":-0.9568516710936271,"sequenceIndex":107},{"point":[0.730967787376657],"weight":-1.3600525447711713,"sequenceIndex":27},{"point":[0.730967787376657],"weight":-1.2338868096793152,"sequenceIndex":252},{"point":[0.730967787376657],"weight":-1.1172934897253752,"sequenceIndex":112},{"point":[0.730967787376657],"weight":-1.1068152932635398,"sequenceIndex":204},{"point":[0.730967787376657],"weight":-1.1658852696544753,"sequenceIndex":149},{"point":[0.730967787376657],"weight":-1.2286731265834137,"sequenceIndex":166},{"point":[0.730967787376657],"weight":-1.626867953631204,"sequenceIndex":246},{"point":[0.730967787376657],"weight":-1.1089353888069637,"sequenceIndex":254},{"point":[0.730967787376657],"weight":-0.7954485984612603,"sequenceIndex":124},{"point":[0.730967787376657],"weight":-1.1450423587614187,"sequenceIndex":126},{"point":[0.730967787376657],"weight":-0.7642190744334827,"sequenceIndex":255},{"point":[0.730967787376657],"weight":-1.1790546685763579,"sequenceIndex":65},{"point":[0.730967787376657],"weight":-1.4154730224575665,"sequenceIndex":17},{"point":[0.730967787376657],"weight":-2.3198558360766177,"sequenceIndex":67},{"point":[0.730967787376657],"weight":-1.7002952368913662,"sequenceIndex":16},{"point":[0.730967787376657],"weight":-2.03422769978397,"sequenceIndex":134},{"point":[0.730967787376657],"weight":-3.5109412885021487,"sequenceIndex":240},{"point":[0.730967787376657],"weight":-2.3499528115804007,"sequenceIndex":71},{"point":[0.730967787376657],"weight":-2.701728455054479,"sequenceIndex":249},{"point":[0.730967787376657],"weight":-2.0533128197558863,"sequenceIndex":73},{"point":[0.730967787376657],"weight":-1.4318488215284482,"sequenceIndex":211},{"point":[0.730967787376657],"weight":-1.3566248768796831,"sequenceIndex":179},{"point":[0.730967787376657],"weight":-2.3376175044670946,"sequenceIndex":19},{"point":[0.730967787376657],"weight":-1.0887648161840557,"sequenceIndex":76},{"point":[0.730967787376657],"weight":-1.3806606118790359,"sequenceIndex":78},{"point":[0.730967787376657],"weight":-1.3384414363851929,"sequenceIndex":207},{"point":[0.730967787376657],"weight":-1.66358687965076,"sequenceIndex":238},{"point":[0.730967787376657],"weight":-1.6498622383501975,"sequenceIndex":192},{"point":[0.730967787376657],"weight":-6.112443209875558,"sequenceIndex":41},{"point":[0.730967787376657],"weight":-1.2493020347490515,"sequenceIndex":83},{"point":[0.730967787376657],"weight":-2.5702200826612907,"sequenceIndex":228},{"point":[0.730967787376657],"weight":-3.4318407938500037,"sequenceIndex":130},{"point":[0.730967787376657],"weight":-1.2198167281526948,"sequenceIndex":43},{"point":[0.730967787376657],"weight":-3.127545398871097,"sequenceIndex":171},{"point":[0.730967787376657],"weight":-2.0962101547732455,"sequenceIndex":247},{"point":[0.730967787376657],"weight":-2.526849458527857,"sequenceIndex":89},{"point":[0.730967787376657],"weight":-3.316003078229306,"sequenceIndex":203},{"point":[0.730967787376657],"weight":-1.401006170880422,"sequenceIndex":163},{"point":[0.730967787376657],"weight":-3.365956527402797,"sequenceIndex":46},{"point":[0.730967787376657],"weight":-1.280074096406072,"sequenceIndex":221},{"point":[0.730967787376657],"weight":-3.2062141689217705,"sequenceIndex":202},{"point":[0.730967787376657],"weight":-1.6844984194742731,"sequenceIndex":223},{"point":[0.730967787376657],"weight":-1.9994953694982531,"sequenceIndex":96},{"point":[0.730967787376657],"weight":-1.7754375214295273,"sequenceIndex":24},{"point":[0.730967787376657],"weight":-2.4297442724783673,"sequenceIndex":98},{"point":[0.730967787376657],"weight":-2.2324726399801267,"sequenceIndex":99},{"point":[0.730967787376657],"weight":-1.7987657263500112,"sequenceIndex":25},{"point":[0.730967787376657],"weight":-2.3790035619962784,"sequenceIndex":101},{"point":[0.730967787376657],"weight":-1.2441072953716394,"sequenceIndex":209},{"point":[0.730967787376657],"weight":-4.861967892186293,"sequenceIndex":182},{"point":[0.730967787376657],"weight":-1.142098169150573,"sequenceIndex":6},{"point":[0.730967787376657],"weight":-0.9986063006489297,"sequenceIndex":105},{"point":[0.730967787376657],"weight":-3.33003565897416,"sequenceIndex":159},{"point":[0.730967787376657],"weight":-2.782357199798995,"sequenceIndex":224},{"point":[0.730967787376657],"weight":-1.6763419918437137,"sequenceIndex":197},{"point":[0.730967787376657],"weight":-1.9226755516731338,"sequenceIndex":1},{"point":[0.730967787376657],"weight":-3.2753040522574786,"sequenceIndex":55},{"point":[0.730967787376657],"weight":-2.132090423734058,"sequenceIndex":110},{"point":[0.730967787376657],"weight":-1.503527931557662,"sequenceIndex":7},{"point":[0.730967787376657],"weight":-2.1226760979531423,"sequenceIndex":113},{"point":[0.730967787376657],"weight":-1.605485597130487,"sequenceIndex":114},{"point":[0.730967787376657],"weight":-1.1318387705853517,"sequenceIndex":56},{"point":[0.730967787376657],"weight":-2.0423216433553315,"sequenceIndex":233},{"point":[0.730967787376657],"weight":-1.415514231413752,"sequenceIndex":236},{"point":[0.730967787376657],"weight":-1.5690274895599907,"sequenceIndex":59},{"point":[0.730967787376657],"weight":-1.5668008666488293,"sequenceIndex":184},{"point":[0.730967787376657],"weight":-1.7361418360041414,"sequenceIndex":15},{"point":[0.730967787376657],"weight":-2.253770974860661,"sequenceIndex":196},{"point":[0.730967787376657],"weight":-1.5680683447181383,"sequenceIndex":61},{"point":[0.730967787376657],"weight":-1.4438566715805006,"sequenceIndex":229},{"point":[0.730967787376657],"weight":-0.9148500224695411,"sequenceIndex":226},{"point":[0.730967787376657],"weight":-5.3950381164925885,"sequenceIndex":158},{"point":[0.730967787376657],"weight":-2.524935451607215,"sequenceIndex":190},{"point":[0.730967787376657],"weight":-2.39216803050598,"sequenceIndex":127},{"point":[0.730967787376657],"weight":-1.4255377424738875,"sequenceIndex":256}],"sampleSize":128,"lambda":7.8125E-4,"random":{},"entriesSeen":256},"tree":{"storeSequenceIndexesEnabled":false,"centerOfMassEnabled":false,"random":{}}},{"sampler":{"weightedSamples":[{"point":[0.730967787376657],"weight":-0.6084608564073564,"sequenceIndex":145},{"point":[0.730967787376657],"weight":-0.6179686183086871,"sequenceIndex":92},{"point":[0.730967787376657],"weight":-0.6412342794373282,"sequenceIndex":178},{"point":[0.730967787376657],"weight":-0.635888511053123,"sequenceIndex":224},{"point":[0.730967787376657],"weight":-0.646954029837056,"sequenceIndex":131},{"point":[0.730967787376657],"weight":-0.6416011662222623,"sequenceIndex":100},{"point":[0.730967787376657],"weight":-0.6697495230795004,"sequenceIndex":154},{"point":[0.730967787376657],"weight":-0.6855986388859618,"sequenceIndex":199},{"point":[0.730967787376657],"weight":-0.6733299678230226,"sequenceIndex":147},{"point":[0.730967787376657],"weight":-0.8456116832752445,"sequenceIndex":40},{"point":[0.730967787376657],"weight":-0.6595573455051265,"sequenceIndex":93},{"point":[0.730967787376657],"weight":-0.7818963687299432,"sequenceIndex":233},{"point":[0.730967787376657],"weight":-0.7242726094971086,"sequenceIndex":214},{"point":[0.730967787376657],"weight":-0.7676564302803074,"sequenceIndex":58},{"point":[0.730967787376657],"weight":-0.7196063435599683,"sequenceIndex":127},{"point":[0.730967787376657],"weight":-0.7023381441964808,"sequenceIndex":229},{"point":[0.730967787376657],"weight":-0.6990463810153638,"sequenceIndex":35},{"point":[0.730967787376657],"weight":-0.9706658888231493,"sequenceIndex":65},{"point":[0.730967787376657],"weight":-0.7854523327189776,"sequenceIndex":185},{"point":[0.730967787376657],"weight":-1.5379117443444936,"sequenceIndex":228},{"point":[0.730967787376657],"weight":-0.9743642328162164,"sequenceIndex":87},{"point":[0.730967787376657],"weight":-1.1601247027043582,"sequenceIndex":91},{"point":[0.730967787376657],"weight":-0.694358444060882,"sequenceIndex":23},{"point":[0.730967787376657],"weight":-0.7865991569435075,"sequenceIndex":1},{"point":[0.730967787376657],"weight":-0.7866625900573727,"sequenceIndex":25},{"point":[0.730967787376657],"weight":-0.9458278984561896,"sequenceIndex":198},{"point":[0.730967787376657],"weight":-0.7574742830477769,"sequenceIndex":162},{"point":[0.730967787376657],"weight":-0.8105420344688304,"sequenceIndex":150},{"point":[0.730967787376657],"weight":-0.817381975133741,"sequenceIndex":164},{"point":[0.730967787376657],"weight":-0.7572429564939562,"sequenceIndex":60},{"point":[0.730967787376657],"weight":-0.7647576679538656,"sequenceIndex":63},{"point":[0.730967787376657],"weight":-0.7891532248024621,"sequenceIndex":242},{"point":[0.730967787376657],"weight":-1.1038836285849694,"sequenceIndex":32},{"point":[0.730967787376657],"weight":-0.9326280818754813,"sequenceIndex":17},{"point":[0.730967787376657],"weight":-1.2039088515760283,"sequenceIndex":201},{"point":[0.730967787376657],"weight":-1.0668944246316745,"sequenceIndex":8},{"point":[0.730967787376657],"weight":-1.140992643871671,"sequenceIndex":160},{"point":[0.730967787376657],"weight":-1.3319042184082273,"sequenceIndex":77},{"point":[0.730967787376657],"weight":-1.1557869954803173,"sequenceIndex":219},{"point":[0.730967787376657],"weight":-1.5601516471849939,"sequenceIndex":252},{"point":[0.730967787376657],"weight":-2.5176857322565125,"sequenceIndex":181},{"point":[0.730967787376657],"weight":-1.7588384800849302,"sequenceIndex":139},{"point":[0.730967787376657],"weight":-1.2457054171595865,"sequenceIndex":218},{"point":[0.730967787376657],"weight":-1.8694609769692652,"sequenceIndex":137},{"point":[0.730967787376657],"weight":-1.4024438896156235,"sequenceIndex":204},{"point":[0.730967787376657],"weight":-2.4211286312094744,"sequenceIndex":46},{"point":[0.730967787376657],"weight":-1.4926669550949925,"sequenceIndex":95},{"point":[0.730967787376657],"weight":-0.9183594711474482,"sequenceIndex":97},{"point":[0.730967787376657],"weight":-0.8092435156432933,"sequenceIndex":99},{"point":[0.730967787376657],"weight":-0.9931770822810341,"sequenceIndex":159},{"point":[0.730967787376657],"weight":-1.6539763765965285,"sequenceIndex":136},{"point":[0.730967787376657],"weight":-1.378508991917559,"sequenceIndex":26},{"point":[0.730967787376657],"weight":-1.129119434008446,"sequenceIndex":193},{"point":[0.730967787376657],"weight":-1.4271272502438137,"sequenceIndex":191},{"point":[0.730967787376657],"weight":-1.2323981656525358,"sequenceIndex":54},{"point":[0.730967787376657],"weight":-2.702389463535556,"sequenceIndex":222},{"point":[0.730967787376657],"weight":-0.8795665575812794,"sequenceIndex":206},{"point":[0.730967787376657],"weight":-1.0688479544579668,"sequenceIndex":230},{"point":[0.730967787376657],"weight":-1.4430782407610507,"sequenceIndex":119},{"point":[0.730967787376657],"weight":-0.9119605992033363,"sequenceIndex":14},{"point":[0.730967787376657],"weight":-1.3175207369465065,"sequenceIndex":149},{"point":[0.730967787376657],"weight":-0.800880316424639,"sequenceIndex":31},{"point":[0.730967787376657],"weight":-1.5095687157884452,"sequenceIndex":126},{"point":[0.730967787376657],"weight":-1.1803576801785824,"sequenceIndex":255},{"point":[0.730967787376657],"weight":-0.9780629061340059,"sequenceIndex":33},{"point":[0.730967787376657],"weight":-1.6784573941614913,"sequenceIndex":189},{"point":[0.730967787376657],"weight":-1.3256525461806938,"sequenceIndex":175},{"point":[0.730967787376657],"weight":-1.4628360648939904,"sequenceIndex":68},{"point":[0.730967787376657],"weight":-2.1190202578998063,"sequenceIndex":69},{"point":[0.730967787376657],"weight":-1.4280977787832962,"sequenceIndex":70},{"point":[0.730967787376657],"weight":-1.5428524532235766,"sequenceIndex":71},{"point":[0.730967787376657],"weight":-1.0832389308864134,"sequenceIndex":18},{"point":[0.730967787376657],"weight":-2.376231466267528,"sequenceIndex":239},{"point":[0.730967787376657],"weight":-1.8864929966469879,"sequenceIndex":37},{"point":[0.730967787376657],"weight":-3.5046449211056574,"sequenceIndex":75},{"point":[0.730967787376657],"weight":-5.895974654000236,"sequenceIndex":19},{"point":[0.730967787376657],"weight":-2.3692190830657784,"sequenceIndex":134},{"point":[0.730967787376657],"weight":-1.1952344559561106,"sequenceIndex":211},{"point":[0.730967787376657],"weight":-1.7174184183310466,"sequenceIndex":234},{"point":[0.730967787376657],"weight":-1.7261063391497298,"sequenceIndex":5},{"point":[0.730967787376657],"weight":-2.056947789122293,"sequenceIndex":156},{"point":[0.730967787376657],"weight":-3.2322832484212647,"sequenceIndex":41},{"point":[0.730967787376657],"weight":-5.9196991187933214,"sequenceIndex":186},{"point":[0.730967787376657],"weight":-2.5343098709618053,"sequenceIndex":21},{"point":[0.730967787376657],"weight":-2.1536939993176802,"sequenceIndex":212},{"point":[0.730967787376657],"weight":-1.4648540252681124,"sequenceIndex":171},{"point":[0.730967787376657],"weight":-2.1121301265390477,"sequenceIndex":184},{"point":[0.730967787376657],"weight":-2.4348211400195194,"sequenceIndex":202},{"point":[0.730967787376657],"weight":-3.043173548463852,"sequenceIndex":89},{"point":[0.730967787376657],"weight":-3.757930176685792,"sequenceIndex":192},{"point":[0.730967787376657],"weight":-4.660672824063548,"sequenceIndex":196},{"point":[0.730967787376657],"weight":-2.9863390963181904,"sequenceIndex":225},{"point":[0.730967787376657],"weight":-2.4942747747696696,"sequenceIndex":128},{"point":[0.730967787376657],"weight":-1.7766578361808776,"sequenceIndex":94},{"point":[0.730967787376657],"weight":-1.8388571356055712,"sequenceIndex":248},{"point":[0.730967787376657],"weight":-2.024296425696412,"sequenceIndex":96},{"point":[0.730967787376657],"weight":-3.405456865268623,"sequenceIndex":182},{"point":[0.730967787376657],"weight":-2.356732126757701,"sequenceIndex":98},{"point":[0.730967787376657],"weight":-1.939247795667226,"sequenceIndex":161},{"point":[0.730967787376657],"weight":-1.0643617463864807,"sequenceIndex":174},{"point":[0.730967787376657],"weight":-2.5255353988162614,"sequenceIndex":240},{"point":[0.730967787376657],"weight":-3.2995612688154523,"sequenceIndex":51},{"point":[0.730967787376657],"weight":-1.9278419776710214,"sequenceIndex":168},{"point":[0.730967787376657],"weight":-2.1650765215580074,"sequenceIndex":213},{"point":[0.730967787376657],"weight":-2.2002362606268107,"sequenceIndex":170},{"point":[0.730967787376657],"weight":-1.8034377732195606,"sequenceIndex":106},{"point":[0.730967787376657],"weight":-2.8111155100070078,"sequenceIndex":146},{"point":[0.730967787376657],"weight":-2.7909265348446497,"sequenceIndex":27},{"point":[0.730967787376657],"weight":-3.8185769626082946,"sequenceIndex":140},{"point":[0.730967787376657],"weight":-2.128898640956419,"sequenceIndex":143},{"point":[0.730967787376657],"weight":-2.8075041544933805,"sequenceIndex":111},{"point":[0.730967787376657],"weight":-4.016094814570343,"sequenceIndex":7},{"point":[0.730967787376657],"weight":-3.5401417393213697,"sequenceIndex":138},{"point":[0.730967787376657],"weight":-1.3187550923256954,"sequenceIndex":114},{"point":[0.730967787376657],"weight":-3.060741528289331,"sequenceIndex":132},{"point":[0.730967787376657],"weight":-2.7060399492993503,"sequenceIndex":28},{"point":[0.730967787376657],"weight":-3.3454514931582486,"sequenceIndex":180},{"point":[0.730967787376657],"weight":-1.8253012356546707,"sequenceIndex":2},{"point":[0.730967787376657],"weight":-2.269223257968656,"sequenceIndex":223},{"point":[0.730967787376657],"weight":-3.320729280665398,"sequenceIndex":120},{"point":[0.730967787376657],"weight":-2.155007855756757,"sequenceIndex":194},{"point":[0.730967787376657],"weight":-1.6029215465375557,"sequenceIndex":61},{"point":[0.730967787376657],"weight":-2.3240446044198246,"sequenceIndex":157},{"point":[0.730967787376657],"weight":-1.596989580267768,"sequenceIndex":231},{"point":[0.730967787376657],"weight":-1.5610183134862492,"sequenceIndex":125},{"point":[0.730967787376657],"weight":-2.369977703447609,"sequenceIndex":244},{"point":[0.730967787376657],"weight":-2.3334217379134725,"sequenceIndex":232},{"point":[0.730967787376657],"weight":-1.3458564027345714,"sequenceIndex":254}],"sampleSize":128,"lambda":7.8125E-4,"random":{},"entriesSeen":256},"tree":{"storeSequenceIndexesEnabled":false,"centerOfMassEnabled":false,"random":{}}},{"sampler":{"weightedSamples":[{"point":[0.730967787376657],"weight":-0.4918387193284984,"sequenceIndex":69},{"point":[0.730967787376657],"weight":-0.49850744587000817,"sequenceIndex":70},{"point":[0.730967787376657],"weight":-0.5154944626176663,"sequenceIndex":181},{"point":[0.730967787376657],"weight":-0.49873352412810024,"sequenceIndex":220},{"point":[0.730967787376657],"weight":-0.53799056414208,"sequenceIndex":94},{"point":[0.730967787376657],"weight":-0.5495557111649064,"sequenceIndex":135},{"point":[0.730967787376657],"weight":-0.5634921840243842,"sequenceIndex":129},{"point":[0.730967787376657],"weight":-0.5054095662365382,"sequenceIndex":228},{"point":[0.730967787376657],"weight":-0.5902884831826791,"sequenceIndex":39},{"point":[0.730967787376657],"weight":-0.5809033703495999,"sequenceIndex":4},{"point":[0.730967787376657],"weight":-0.5831180216438226,"sequenceIndex":46},{"point":[0.730967787376657],"weight":-0.6138948387469644,"sequenceIndex":199},{"point":[0.730967787376657],"weight":-0.5640759855606138,"sequenceIndex":168},{"point":[0.730967787376657],"weight":-0.8160691992091744,"sequenceIndex":145},{"point":[0.730967787376657],"weight":-0.5908022073665468,"sequenceIndex":63},{"point":[0.730967787376657],"weight":-0.5938396236616338,"sequenceIndex":238},{"point":[0.730967787376657],"weight":-0.6146011583642937,"sequenceIndex":236},{"point":[0.730967787376657],"weight":-0.6401658501607816,"sequenceIndex":37},{"point":[0.730967787376657],"weight":-0.66962407039031,"sequenceIndex":33},{"point":[0.730967787376657],"weight":-0.6478147688363068,"sequenceIndex":41},{"point":[0.730967787376657],"weight":-0.6407755755079727,"sequenceIndex":179},{"point":[0.730967787376657],"weight":-0.7132000384695297,"sequenceIndex":45},{"point":[0.730967787376657],"weight":-0.6039685053846763,"sequenceIndex":22},{"point":[0.730967787376657],"weight":-0.6723401772961782,"sequenceIndex":218},{"point":[0.730967787376657],"weight":-0.6139356405224405,"sequenceIndex":142},{"point":[0.730967787376657],"weight":-0.7826294529478222,"sequenceIndex":204},{"point":[0.730967787376657],"weight":-0.5916551143926003,"sequenceIndex":111},{"point":[0.730967787376657],"weight":-0.8745061449519493,"sequenceIndex":112},{"point":[0.730967787376657],"weight":-0.9868601746266324,"sequenceIndex":2},{"point":[0.730967787376657],"weight":-0.698853218218544,"sequenceIndex":183},{"point":[0.730967787376657],"weight":-0.6982399850797093,"sequenceIndex":124},{"point":[0.730967787376657],"weight":-0.8268240997228921,"sequenceIndex":248},{"point":[0.730967787376657],"weight":-1.5796616544917688,"sequenceIndex":67},{"point":[0.730967787376657],"weight":-1.4228690566171962,"sequenceIndex":226},{"point":[0.730967787376657],"weight":-1.1087400045869216,"sequenceIndex":155},{"point":[0.730967787376657],"weight":-1.9767938814497483,"sequenceIndex":163},{"point":[0.730967787376657],"weight":-1.1193063440217477,"sequenceIndex":146},{"point":[0.730967787376657],"weight":-0.9897982409063251,"sequenceIndex":77},{"point":[0.730967787376657],"weight":-0.958447158263374,"sequenceIndex":154},{"point":[0.730967787376657],"weight":-0.73859717224796,"sequenceIndex":144},{"point":[0.730967787376657],"weight":-0.718687793327568,"sequenceIndex":83},{"point":[0.730967787376657],"weight":-1.742240750871137,"sequenceIndex":207},{"point":[0.730967787376657],"weight":-1.2357994186688368,"sequenceIndex":153},{"point":[0.730967787376657],"weight":-1.9351889517328797,"sequenceIndex":89},{"point":[0.730967787376657],"weight":-1.2217801299397852,"sequenceIndex":11},{"point":[0.730967787376657],"weight":-1.5224376471600216,"sequenceIndex":189},{"point":[0.730967787376657],"weight":-0.6280606249060455,"sequenceIndex":190},{"point":[0.730967787376657],"weight":-0.7536476875086657,"sequenceIndex":216},{"point":[0.730967787376657],"weight":-1.0926854258877494,"sequenceIndex":157},{"point":[0.730967787376657],"weight":-0.8005880962274846,"sequenceIndex":133},{"point":[0.730967787376657],"weight":-0.9348661530025668,"sequenceIndex":103},{"point":[0.730967787376657],"weight":-1.8327145404416971,"sequenceIndex":26},{"point":[0.730967787376657],"weight":-0.8879228616596568,"sequenceIndex":106},{"point":[0.730967787376657],"weight":-0.7115016313802975,"sequenceIndex":7},{"point":[0.730967787376657],"weight":-1.315008994998176,"sequenceIndex":194},{"point":[0.730967787376657],"weight":-1.0687142081802856,"sequenceIndex":28},{"point":[0.730967787376657],"weight":-2.5947198358624446,"sequenceIndex":229},{"point":[0.730967787376657],"weight":-1.4823989972195553,"sequenceIndex":197},{"point":[0.730967787376657],"weight":-1.479267574102055,"sequenceIndex":131},{"point":[0.730967787376657],"weight":-0.8611259174729374,"sequenceIndex":158},{"point":[0.730967787376657],"weight":-1.772199802352788,"sequenceIndex":148},{"point":[0.730967787376657],"weight":-1.4907428324504157,"sequenceIndex":251},{"point":[0.730967787376657],"weight":-1.2616856134082106,"sequenceIndex":127},{"point":[0.730967787376657],"weight":-2.393785932159696,"sequenceIndex":252},{"point":[0.730967787376657],"weight":-2.556750207006987,"sequenceIndex":223},{"point":[0.730967787376657],"weight":-1.5909605635193538,"sequenceIndex":16},{"point":[0.730967787376657],"weight":-2.3552623877056025,"sequenceIndex":208},{"point":[0.730967787376657],"weight":-5.595833755752905,"sequenceIndex":17},{"point":[0.730967787376657],"weight":-2.6644763323398806,"sequenceIndex":224},{"point":[0.730967787376657],"weight":-2.5345437499108585,"sequenceIndex":34},{"point":[0.730967787376657],"weight":-1.434447023380137,"sequenceIndex":240},{"point":[0.730967787376657],"weight":-4.894453553442508,"sequenceIndex":36},{"point":[0.730967787376657],"weight":-2.754746721553871,"sequenceIndex":72},{"point":[0.730967787376657],"weight":-1.2036069256692608,"sequenceIndex":1},{"point":[0.730967787376657],"weight":-1.1656849998316028,"sequenceIndex":141},{"point":[0.730967787376657],"weight":-2.565523521924805,"sequenceIndex":38},{"point":[0.730967787376657],"weight":-1.6808968333399366,"sequenceIndex":76},{"point":[0.730967787376657],"weight":-1.3794031958965502,"sequenceIndex":196},{"point":[0.730967787376657],"weight":-4.530107001642157,"sequenceIndex":134},{"point":[0.730967787376657],"weight":-2.5756982124452668,"sequenceIndex":80},{"point":[0.730967787376657],"weight":-0.9459409024531418,"sequenceIndex":20},{"point":[0.730967787376657],"weight":-1.955933643545851,"sequenceIndex":82},{"point":[0.730967787376657],"weight":-1.5831007597354272,"sequenceIndex":206},{"point":[0.730967787376657],"weight":-2.30241030492723,"sequenceIndex":188},{"point":[0.730967787376657],"weight":-1.9601341837524529,"sequenceIndex":138},{"point":[0.730967787376657],"weight":-2.266709045821773,"sequenceIndex":86},{"point":[0.730967787376657],"weight":-1.9815998129211139,"sequenceIndex":241},{"point":[0.730967787376657],"weight":-3.182156809235952,"sequenceIndex":44},{"point":[0.730967787376657],"weight":-3.7486824411011614,"sequenceIndex":167},{"point":[0.730967787376657],"weight":-2.0135310600568976,"sequenceIndex":8},{"point":[0.730967787376657],"weight":-2.35554023277745,"sequenceIndex":91},{"point":[0.730967787376657],"weight":-1.604772288549963,"sequenceIndex":23},{"point":[0.730967787376657],"weight":-3.7400619943798,"sequenceIndex":200},{"point":[0.730967787376657],"weight":-3.909693848884693,"sequenceIndex":242},{"point":[0.730967787376657],"weight":-1.2917655913023134,"sequenceIndex":160},{"point":[0.730967787376657],"weight":-1.252965876301647,"sequenceIndex":6},{"point":[0.730967787376657],"weight":-3.4590619300691205,"sequenceIndex":152},{"point":[0.730967787376657],"weight":-1.8943557759120602,"sequenceIndex":49},{"point":[0.730967787376657],"weight":-1.3354821041698166,"sequenceIndex":98},{"point":[0.730967787376657],"weight":-1.0023730112591953,"sequenceIndex":25},{"point":[0.730967787376657],"weight":-1.6669905817529977,"sequenceIndex":233},{"point":[0.730967787376657],"weight":-3.8654549690155227,"sequenceIndex":203},{"point":[0.730967787376657],"weight":-0.9528853441363206,"sequenceIndex":237},{"point":[0.730967787376657],"weight":-8.395085903344876,"sequenceIndex":221},{"point":[0.730967787376657],"weight":-2.241579517541763,"sequenceIndex":210},{"point":[0.730967787376657],"weight":-1.6951147751150895,"sequenceIndex":53},{"point":[0.730967787376657],"weight":-1.9991442770182315,"sequenceIndex":107},{"point":[0.730967787376657],"weight":-2.9014560671213854,"sequenceIndex":108},{"point":[0.730967787376657],"weight":-0.913151746578685,"sequenceIndex":109},{"point":[0.730967787376657],"weight":-1.9393068470934942,"sequenceIndex":128},{"point":[0.730967787376657],"weight":-2.6990890489206807,"sequenceIndex":178},{"point":[0.730967787376657],"weight":-4.383309354129223,"sequenceIndex":56},{"point":[0.730967787376657],"weight":-1.9405281504834977,"sequenceIndex":235},{"point":[0.730967787376657],"weight":-7.711357221889984,"sequenceIndex":57},{"point":[0.730967787376657],"weight":-3.214089016171303,"sequenceIndex":171},{"point":[0.730967787376657],"weight":-2.159653859710726,"sequenceIndex":225},{"point":[0.730967787376657],"weight":-1.6344256408241522,"sequenceIndex":164},{"point":[0.730967787376657],"weight":-2.933132517382972,"sequenceIndex":59},{"point":[0.730967787376657],"weight":-1.8566719139966223,"sequenceIndex":176},{"point":[0.730967787376657],"weight":-1.807848110330068,"sequenceIndex":214},{"point":[0.730967787376657],"weight":-1.517376977078577,"sequenceIndex":213},{"point":[0.730967787376657],"weight":-1.9333113242257403,"sequenceIndex":222},{"point":[0.730967787376657],"weight":-2.1257369900901955,"sequenceIndex":123},{"point":[0.730967787376657],"weight":-4.1085461653375335,"sequenceIndex":62},{"point":[0.730967787376657],"weight":-4.3349239459342614,"sequenceIndex":174},{"point":[0.730967787376657],"weight":-1.7007341769299478,"sequenceIndex":231},{"point":[0.730967787376657],"weight":-3.1191140632825016,"sequenceIndex":250},{"point":[0.730967787376657],"weight":-3.5663470711835585,"sequenceIndex":254}],"sampleSize":128,"lambda":7.8125E-4,"random":{},"entriesSeen":256},"tree":{"storeSequenceIndexesEnabled":false,"centerOfMassEnabled":false,"random":{}}},{"sampler":{"weightedSamples":[{"point":[0.730967787376657],"weight":-0.3942427248938064,"sequenceIndex":41},{"point":[0.730967787376657],"weight":-0.4042725160332574,"sequenceIndex":236},{"point":[0.730967787376657],"weight":-0.4031332489384645,"sequenceIndex":48},{"point":[0.730967787376657],"weight":-0.4248673737471514,"sequenceIndex":150},{"point":[0.730967787376657],"weight":-0.49724345653606794,"sequenceIndex":47},{"point":[0.730967787376657],"weight":-0.4117999317655414,"sequenceIndex":54},{"point":[0.730967787376657],"weight":-0.5515701402617614,"sequenceIndex":169},{"point":[0.730967787376657],"weight":-0.4458177817342104,"sequenceIndex":34},{"point":[0.730967787376657],"weight":-0.5823579383232954,"sequenceIndex":142},{"point":[0.730967787376657],"weight":-0.5389107500411541,"sequenceIndex":21},{"point":[0.730967787376657],"weight":-0.5234519983749363,"sequenceIndex":44},{"point":[0.730967787376657],"weight":-0.4151448053525711,"sequenceIndex":176},{"point":[0.730967787376657],"weight":-0.5180006085049377,"sequenceIndex":104},{"point":[0.730967787376657],"weight":-0.693230875418893,"sequenceIndex":56},{"point":[0.730967787376657],"weight":-0.7728328013408399,"sequenceIndex":31},{"point":[0.730967787376657],"weight":-0.49165456784642136,"sequenceIndex":234},{"point":[0.730967787376657],"weight":-0.4864262087994201,"sequenceIndex":155},{"point":[0.730967787376657],"weight":-0.6146121289590856,"sequenceIndex":4},{"point":[0.730967787376657],"weight":-1.023549216901151,"sequenceIndex":77},{"point":[0.730967787376657],"weight":-0.9452051543542427,"sequenceIndex":209},{"point":[0.730967787376657],"weight":-0.5562081896891584,"sequenceIndex":42},{"point":[0.730967787376657],"weight":-0.7585134594089914,"sequenceIndex":89},{"point":[0.730967787376657],"weight":-0.8723029890414317,"sequenceIndex":178},{"point":[0.730967787376657],"weight":-0.45717589131167574,"sequenceIndex":96},{"point":[0.730967787376657],"weight":-0.4306874275137363,"sequenceIndex":51},{"point":[0.730967787376657],"weight":-0.6448811390127112,"sequenceIndex":105},{"point":[0.730967787376657],"weight":-0.8614681491332961,"sequenceIndex":109},{"point":[0.730967787376657],"weight":-0.7262033433729348,"sequenceIndex":135},{"point":[0.730967787376657],"weight":-1.046289713440814,"sequenceIndex":164},{"point":[0.730967787376657],"weight":-1.0315060444934334,"sequenceIndex":231},{"point":[0.730967787376657],"weight":-1.241184501886098,"sequenceIndex":197},{"point":[0.730967787376657],"weight":-0.6147017733342368,"sequenceIndex":211},{"point":[0.730967787376657],"weight":-0.9335729949908398,"sequenceIndex":149},{"point":[0.730967787376657],"weight":-1.4929513073022094,"sequenceIndex":153},{"point":[0.730967787376657],"weight":-0.8504298479694588,"sequenceIndex":182},{"point":[0.730967787376657],"weight":-0.6409484564986658,"sequenceIndex":72},{"point":[0.730967787376657],"weight":-0.8683435171945882,"sequenceIndex":183},{"point":[0.730967787376657],"weight":-1.3252962110315236,"sequenceIndex":217},{"point":[0.730967787376657],"weight":-1.1060749431786654,"sequenceIndex":145},{"point":[0.730967787376657],"weight":-1.1909012954178932,"sequenceIndex":146},{"point":[0.730967787376657],"weight":-1.2335539644463676,"sequenceIndex":82},{"point":[0.730967787376657],"weight":-0.8232400445706083,"sequenceIndex":232},{"point":[0.730967787376657],"weight":-0.8257457947621415,"sequenceIndex":86},{"point":[0.730967787376657],"weight":-0.9745964511171992,"sequenceIndex":243},{"point":[0.730967787376657],"weight":-1.1027673672654497,"sequenceIndex":90},{"point":[0.730967787376657],"weight":-1.3367209756020972,"sequenceIndex":93},{"point":[0.730967787376657],"weight":-1.174392224476621,"sequenceIndex":225},{"point":[0.730967787376657],"weight":-0.656078267803931,"sequenceIndex":25},{"point":[0.730967787376657],"weight":-1.01856811964963,"sequenceIndex":49},{"point":[0.730967787376657],"weight":-1.0468995189392591,"sequenceIndex":24},{"point":[0.730967787376657],"weight":-0.9051109527322432,"sequenceIndex":103},{"point":[0.730967787376657],"weight":-0.8978783104900538,"sequenceIndex":191},{"point":[0.730967787376657],"weight":-0.9596981022017028,"sequenceIndex":53},{"point":[0.730967787376657],"weight":-1.133590472669345,"sequenceIndex":179},{"point":[0.730967787376657],"weight":-1.763553441398202,"sequenceIndex":148},{"point":[0.730967787376657],"weight":-0.8592812086592356,"sequenceIndex":14},{"point":[0.730967787376657],"weight":-1.184731946675002,"sequenceIndex":57},{"point":[0.730967787376657],"weight":-1.4699083793895873,"sequenceIndex":117},{"point":[0.730967787376657],"weight":-1.1794116209750456,"sequenceIndex":119},{"point":[0.730967787376657],"weight":-1.0322396989139246,"sequenceIndex":120},{"point":[0.730967787376657],"weight":-1.059174573112066,"sequenceIndex":161},{"point":[0.730967787376657],"weight":-1.286550489542196,"sequenceIndex":124},{"point":[0.730967787376657],"weight":-1.4091090826463857,"sequenceIndex":239},{"point":[0.730967787376657],"weight":-0.787229759982829,"sequenceIndex":255},{"point":[0.730967787376657],"weight":-2.184311055324552,"sequenceIndex":65},{"point":[0.730967787376657],"weight":-2.78360259751831,"sequenceIndex":66},{"point":[0.730967787376657],"weight":-1.4447277286364808,"sequenceIndex":16},{"point":[0.730967787376657],"weight":-3.0803113082381857,"sequenceIndex":17},{"point":[0.730967787376657],"weight":-7.4858338480328985,"sequenceIndex":190},{"point":[0.730967787376657],"weight":-1.1924639194540714,"sequenceIndex":35},{"point":[0.730967787376657],"weight":-3.5312811638752457,"sequenceIndex":216},{"point":[0.730967787376657],"weight":-4.61851614247996,"sequenceIndex":18},{"point":[0.730967787376657],"weight":-1.5490751026019975,"sequenceIndex":73},{"point":[0.730967787376657],"weight":-1.8710750969672574,"sequenceIndex":198},{"point":[0.730967787376657],"weight":-3.7651146174928902,"sequenceIndex":129},{"point":[0.730967787376657],"weight":-2.869141583177973,"sequenceIndex":19},{"point":[0.730967787376657],"weight":-1.8398028957671668,"sequenceIndex":181},{"point":[0.730967787376657],"weight":-1.7107495591686424,"sequenceIndex":78},{"point":[0.730967787376657],"weight":-2.009435924951885,"sequenceIndex":186},{"point":[0.730967787376657],"weight":-1.3206774832842743,"sequenceIndex":185},{"point":[0.730967787376657],"weight":-1.23625749360816,"sequenceIndex":195},{"point":[0.730967787376657],"weight":-8.221135044513039,"sequenceIndex":235},{"point":[0.730967787376657],"weight":-2.3824955053212986,"sequenceIndex":83},{"point":[0.730967787376657],"weight":-1.2618462216439241,"sequenceIndex":84},{"point":[0.730967787376657],"weight":-3.0208050942190816,"sequenceIndex":85},{"point":[0.730967787376657],"weight":-2.8302012159619,"sequenceIndex":43},{"point":[0.730967787376657],"weight":-1.2380307074299786,"sequenceIndex":221},{"point":[0.730967787376657],"weight":-1.262383014229145,"sequenceIndex":22},{"point":[0.730967787376657],"weight":-2.5160268265881522,"sequenceIndex":140},{"point":[0.730967787376657],"weight":-1.1461067387936843,"sequenceIndex":194},{"point":[0.730967787376657],"weight":-2.371784224359063,"sequenceIndex":91},{"point":[0.730967787376657],"weight":-1.7720465554855762,"sequenceIndex":92},{"point":[0.730967787376657],"weight":-4.235063989170059,"sequenceIndex":147},{"point":[0.730967787376657],"weight":-3.452916642684486,"sequenceIndex":203},{"point":[0.730967787376657],"weight":-1.8658547344858387,"sequenceIndex":95},{"point":[0.730967787376657],"weight":-1.6862344813661352,"sequenceIndex":6},{"point":[0.730967787376657],"weight":-1.609419878622262,"sequenceIndex":212},{"point":[0.730967787376657],"weight":-2.025849253186489,"sequenceIndex":152},{"point":[0.730967787376657],"weight":-1.8861538644343543,"sequenceIndex":99},{"point":[0.730967787376657],"weight":-3.6822400539999793,"sequenceIndex":222},{"point":[0.730967787376657],"weight":-2.5736759452572406,"sequenceIndex":101},{"point":[0.730967787376657],"weight":-1.559464439092824,"sequenceIndex":136},{"point":[0.730967787376657],"weight":-1.2305979076148819,"sequenceIndex":224},{"point":[0.730967787376657],"weight":-1.5809875507005888,"sequenceIndex":13},{"point":[0.730967787376657],"weight":-1.422821607786243,"sequenceIndex":244},{"point":[0.730967787376657],"weight":-2.1598997646648823,"sequenceIndex":166},{"point":[0.730967787376657],"weight":-3.7874958678888277,"sequenceIndex":165},{"point":[0.730967787376657],"weight":-2.932436387446123,"sequenceIndex":27},{"point":[0.730967787376657],"weight":-1.2078530247588337,"sequenceIndex":210},{"point":[0.730967787376657],"weight":-1.916378889825776,"sequenceIndex":55},{"point":[0.730967787376657],"weight":-2.16860727925941,"sequenceIndex":111},{"point":[0.730967787376657],"weight":-1.5327423121650618,"sequenceIndex":240},{"point":[0.730967787376657],"weight":-1.5883825185981868,"sequenceIndex":220},{"point":[0.730967787376657],"weight":-1.7174053170964834,"sequenceIndex":206},{"point":[0.730967787376657],"weight":-1.5645415863275716,"sequenceIndex":170},{"point":[0.730967787376657],"weight":-1.9324304225902686,"sequenceIndex":29},{"point":[0.730967787376657],"weight":-3.093401044899174,"sequenceIndex":139},{"point":[0.730967787376657],"weight":-2.732499474212359,"sequenceIndex":118},{"point":[0.730967787376657],"weight":-3.2895553950687093,"sequenceIndex":226},{"point":[0.730967787376657],"weight":-1.4819404632848447,"sequenceIndex":223},{"point":[0.730967787376657],"weight":-2.4061570181549423,"sequenceIndex":8},{"point":[0.730967787376657],"weight":-1.4156953884466694,"sequenceIndex":61},{"point":[0.730967787376657],"weight":-1.900019174582312,"sequenceIndex":123},{"point":[0.730967787376657],"weight":-3.1764660858300706,"sequenceIndex":62},{"point":[0.730967787376657],"weight":-2.051904936803954,"sequenceIndex":156},{"point":[0.730967787376657],"weight":-3.0294094644491,"sequenceIndex":205},{"point":[0.730967787376657],"weight":-2.7586771610933547,"sequenceIndex":215},{"point":[0.730967787376657],"weight":-0.8196283889377628,"sequenceIndex":253}],"sampleSize":128,"lambda":7.8125E-4,"random":{},"entriesSeen":256},"tree":{"storeSequenceIndexesEnabled":false,"centerOfMassEnabled":false,"random":{}}},{"sampler":{"weightedSamples":[{"point":[0.730967787376657],"weight":-0.3745367531639623,"sequenceIndex":53},{"point":[0.730967787376657],"weight":-0.37877978048338945,"sequenceIndex":40},{"point":[0.730967787376657],"weight":-0.3866575265633535,"sequenceIndex":164},{"point":[0.730967787376657],"weight":-0.38074600699032013,"sequenceIndex":138},{"point":[0.730967787376657],"weight":-0.3895194537143277,"sequenceIndex":2},{"point":[0.730967787376657],"weight":-0.410013443232726,"sequenceIndex":97},{"point":[0.730967787376657],"weight":-0.42562278036230344,"sequenceIndex":14},{"point":[0.730967787376657],"weight":-0.48882920075452674,"sequenceIndex":218},{"point":[0.730967787376657],"weight":-0.6004133546638947,"sequenceIndex":215},{"point":[0.730967787376657],"weight":-0.4085594000826217,"sequenceIndex":208},{"point":[0.730967787376657],"weight":-0.5199605786938322,"sequenceIndex":192},{"point":[0.730967787376657],"weight":-0.43502887228350084,"sequenceIndex":98},{"point":[0.730967787376657],"weight":-0.8203405997387597,"sequenceIndex":163},{"point":[0.730967787376657],"weight":-0.4314203402514819,"sequenceIndex":112},{"point":[0.730967787376657],"weight":-0.4638653741264149,"sequenceIndex":121},{"point":[0.730967787376657],"weight":-0.5465998651769503,"sequenceIndex":239},{"point":[0.730967787376657],"weight":-1.0472446394027142,"sequenceIndex":147},{"point":[0.730967787376657],"weight":-0.6470191534135813,"sequenceIndex":72},{"point":[0.730967787376657],"weight":-1.2673135743122983,"sequenceIndex":171},{"point":[0.730967787376657],"weight":-0.6726014098392259,"sequenceIndex":41},{"point":[0.730967787376657],"weight":-0.4335958898935595,"sequenceIndex":43},{"point":[0.730967787376657],"weight":-0.6735191209332574,"sequenceIndex":184},{"point":[0.730967787376657],"weight":-0.5336055367778775,"sequenceIndex":219},{"point":[0.730967787376657],"weight":-0.7237510415496837,"sequenceIndex":96},{"point":[0.730967787376657],"weight":-0.4943594731410316,"sequenceIndex":24},{"point":[0.730967787376657],"weight":-0.8651535807853445,"sequenceIndex":165},{"point":[0.730967787376657],"weight":-0.9062460455059667,"sequenceIndex":157},{"point":[0.730967787376657],"weight":-0.9474510905870214,"sequenceIndex":135},{"point":[0.730967787376657],"weight":-0.4699322890232057,"sequenceIndex":117},{"point":[0.730967787376657],"weight":-0.6424683303072316,"sequenceIndex":220},{"point":[0.730967787376657],"weight":-0.8910027646512361,"sequenceIndex":31},{"point":[0.730967787376657],"weight":-0.8781700438023343,"sequenceIndex":246},{"point":[0.730967787376657],"weight":-2.8692977804274182,"sequenceIndex":131},{"point":[0.730967787376657],"weight":-1.2136261992782689,"sequenceIndex":68},{"point":[0.730967787376657],"weight":-2.1267850730439237,"sequenceIndex":146},{"point":[0.730967787376657],"weight":-1.1868469116367208,"sequenceIndex":73},{"point":[0.730967787376657],"weight":-1.1530702998878244,"sequenceIndex":145},{"point":[0.730967787376657],"weight":-1.8801301069372478,"sequenceIndex":38},{"point":[0.730967787376657],"weight":-1.2919932138493835,"sequenceIndex":243},{"point":[0.730967787376657],"weight":-1.2412227640854396,"sequenceIndex":178},{"point":[0.730967787376657],"weight":-2.5345474304374633,"sequenceIndex":244},{"point":[0.730967787376657],"weight":-0.501822027671344,"sequenceIndex":4},{"point":[0.730967787376657],"weight":-0.9487670281929158,"sequenceIndex":87},{"point":[0.730967787376657],"weight":-0.7680157053767822,"sequenceIndex":150},{"point":[0.730967787376657],"weight":-0.8498176978085695,"sequenceIndex":91},{"point":[0.730967787376657],"weight":-0.6260014036404236,"sequenceIndex":129},{"point":[0.730967787376657],"weight":-1.0367944283556563,"sequenceIndex":207},{"point":[0.730967787376657],"weight":-1.454500440368106,"sequenceIndex":152},{"point":[0.730967787376657],"weight":-1.0061750906199864,"sequenceIndex":49},{"point":[0.730967787376657],"weight":-0.6452497103602544,"sequenceIndex":101},{"point":[0.730967787376657],"weight":-0.73012721888952,"sequenceIndex":183},{"point":[0.730967787376657],"weight":-1.3263358405590195,"sequenceIndex":105},{"point":[0.730967787376657],"weight":-1.400695527403614,"sequenceIndex":106},{"point":[0.730967787376657],"weight":-0.9138764966253813,"sequenceIndex":137},{"point":[0.730967787376657],"weight":-1.722458255359197,"sequenceIndex":148},{"point":[0.730967787376657],"weight":-1.361150941093798,"sequenceIndex":56},{"point":[0.730967787376657],"weight":-1.0660561860120379,"sequenceIndex":211},{"point":[0.730967787376657],"weight":-0.7220116811799626,"sequenceIndex":58},{"point":[0.730967787376657],"weight":-1.428248134564843,"sequenceIndex":59},{"point":[0.730967787376657],"weight":-2.055165014235044,"sequenceIndex":60},{"point":[0.730967787376657],"weight":-1.0320686126003955,"sequenceIndex":139},{"point":[0.730967787376657],"weight":-1.3100290860868042,"sequenceIndex":124},{"point":[0.730967787376657],"weight":-1.1887029824643782,"sequenceIndex":63},{"point":[0.730967787376657],"weight":-1.2263810708800624,"sequenceIndex":245},{"point":[0.730967787376657],"weight":-1.9625081481376203,"sequenceIndex":180},{"point":[0.730967787376657],"weight":-5.334687569624574,"sequenceIndex":66},{"point":[0.730967787376657],"weight":-3.2699779285523998,"sequenceIndex":33},{"point":[0.730967787376657],"weight":-2.830816837621441,"sequenceIndex":17},{"point":[0.730967787376657],"weight":-1.323305273171099,"sequenceIndex":229},{"point":[0.730967787376657],"weight":-5.661370528075809,"sequenceIndex":167},{"point":[0.730967787376657],"weight":-5.111014563752955,"sequenceIndex":71},{"point":[0.730967787376657],"weight":-1.979195585599677,"sequenceIndex":9},{"point":[0.730967787376657],"weight":-3.236502864208798,"sequenceIndex":182},{"point":[0.730967787376657],"weight":-3.7074041277911505,"sequenceIndex":74},{"point":[0.730967787376657],"weight":-2.6342869152543087,"sequenceIndex":37},{"point":[0.730967787376657],"weight":-5.772923028687533,"sequenceIndex":76},{"point":[0.730967787376657],"weight":-2.0532623897277236,"sequenceIndex":141},{"point":[0.730967787376657],"weight":-1.9429028472685381,"sequenceIndex":78},{"point":[0.730967787376657],"weight":-2.160977549784784,"sequenceIndex":156},{"point":[0.730967787376657],"weight":-2.41317423440498,"sequenceIndex":20},{"point":[0.730967787376657],"weight":-1.5380935359527954,"sequenceIndex":217},{"point":[0.730967787376657],"weight":-2.5932486493498828,"sequenceIndex":196},{"point":[0.730967787376657],"weight":-2.651336940861381,"sequenceIndex":144},{"point":[0.730967787376657],"weight":-2.087569891662539,"sequenceIndex":133},{"point":[0.730967787376657],"weight":-6.83310242504874,"sequenceIndex":85},{"point":[0.730967787376657],"weight":-1.8992992050471766,"sequenceIndex":86},{"point":[0.730967787376657],"weight":-1.7376934942541404,"sequenceIndex":179},{"point":[0.730967787376657],"weight":-1.7967052404358608,"sequenceIndex":88},{"point":[0.730967787376657],"weight":-0.872316811115721,"sequenceIndex":22},{"point":[0.730967787376657],"weight":-1.4768499302144764,"sequenceIndex":214},{"point":[0.730967787376657],"weight":-1.7644095289774624,"sequenceIndex":232},{"point":[0.730967787376657],"weight":-1.2665872657297679,"sequenceIndex":213},{"point":[0.730967787376657],"weight":-1.9350074408696945,"sequenceIndex":248},{"point":[0.730967787376657],"weight":-1.8527898647382832,"sequenceIndex":187},{"point":[0.730967787376657],"weight":-1.411576500866859,"sequenceIndex":186},{"point":[0.730967787376657],"weight":-1.7018314340724687,"sequenceIndex":3},{"point":[0.730967787376657],"weight":-1.538824911782397,"sequenceIndex":230},{"point":[0.730967787376657],"weight":-2.413471762211262,"sequenceIndex":200},{"point":[0.730967787376657],"weight":-3.215480858041949,"sequenceIndex":99},{"point":[0.730967787376657],"weight":-1.0082653509063784,"sequenceIndex":50},{"point":[0.730967787376657],"weight":-1.037641324613221,"sequenceIndex":176},{"point":[0.730967787376657],"weight":-1.5010261890900773,"sequenceIndex":102},{"point":[0.730967787376657],"weight":-1.5516026242389274,"sequenceIndex":198},{"point":[0.730967787376657],"weight":-2.976061467939254,"sequenceIndex":52},{"point":[0.730967787376657],"weight":-2.945755418570011,"sequenceIndex":199},{"point":[0.730967787376657],"weight":-1.440502505926924,"sequenceIndex":12},{"point":[0.730967787376657],"weight":-1.919890073556987,"sequenceIndex":107},{"point":[0.730967787376657],"weight":-2.0594164628269587,"sequenceIndex":170},{"point":[0.730967787376657],"weight":-1.349990348099767,"sequenceIndex":174},{"point":[0.730967787376657],"weight":-2.8020733996952494,"sequenceIndex":110},{"point":[0.730967787376657],"weight":-2.9971363182863247,"sequenceIndex":241},{"point":[0.730967787376657],"weight":-2.2218181439455975,"sequenceIndex":7},{"point":[0.730967787376657],"weight":-2.9411722734755057,"sequenceIndex":205},{"point":[0.730967787376657],"weight":-1.5820831542489464,"sequenceIndex":57},{"point":[0.730967787376657],"weight":-1.4376031523923962,"sequenceIndex":1},{"point":[0.730967787376657],"weight":-2.0697523473026997,"sequenceIndex":29},{"point":[0.730967787376657],"weight":-0.8060669121521558,"sequenceIndex":116},{"point":[0.730967787376657],"weight":-3.7008991108145652,"sequenceIndex":118},{"point":[0.730967787376657],"weight":-3.3615471392694625,"sequenceIndex":119},{"point":[0.730967787376657],"weight":-3.2199804034812924,"sequenceIndex":240},{"point":[0.730967787376657],"weight":-2.063867918830157,"sequenceIndex":158},{"point":[0.730967787376657],"weight":-3.026136287885627,"sequenceIndex":250},{"point":[0.730967787376657],"weight":-1.076649947944664,"sequenceIndex":123},{"point":[0.730967787376657],"weight":-2.4408831774205084,"sequenceIndex":62},{"point":[0.730967787376657],"weight":-2.2488804459499314,"sequenceIndex":203},{"point":[0.730967787376657],"weight":-2.428435705379277,"sequenceIndex":185},{"point":[0.730967787376657],"weight":-1.9007481380406148,"sequenceIndex":130},{"point":[0.730967787376657],"weight":-1.6914540893997076,"sequenceIndex":253}],"sampleSize":128,"lambda":7.8125E-4,"random":{},"entriesSeen":256},"tree":{"storeSequenceIndexesEnabled":false,"centerOfMassEnabled":false,"random":{}}},{"sampler":{"weightedSamples":[{"point":[0.730967787376657],"weight":-0.41838550379824685,"sequenceIndex":109},{"point":[0.730967787376657],"weight":-0.4225232620532363,"sequenceIndex":93},{"point":[0.730967787376657],"weight":-0.5458623673305161,"sequenceIndex":120},{"point":[0.730967787376657],"weight":-0.440290019709832,"sequenceIndex":247},{"point":[0.730967787376657],"weight":-0.4462554509114506,"sequenceIndex":163},{"point":[0.730967787376657],"weight":-0.5575096128224734,"sequenceIndex":167},{"point":[0.730967787376657],"weight":-0.589353352142135,"sequenceIndex":29},{"point":[0.730967787376657],"weight":-0.4644901179168558,"sequenceIndex":213},{"point":[0.730967787376657],"weight":-0.5358813573532822,"sequenceIndex":179},{"point":[0.730967787376657],"weight":-0.6822493095503841,"sequenceIndex":87},{"point":[0.730967787376657],"weight":-0.6456115541618354,"sequenceIndex":243},{"point":[0.730967787376657],"weight":-0.6797706048633014,"sequenceIndex":134},{"point":[0.730967787376657],"weight":-0.5713944950198999,"sequenceIndex":246},{"point":[0.730967787376657],"weight":-0.6066453472743127,"sequenceIndex":118},{"point":[0.730967787376657],"weight":-0.6153336133132159,"sequenceIndex":121},{"point":[0.730967787376657],"weight":-0.4742214380701076,"sequenceIndex":33},{"point":[0.730967787376657],"weight":-0.5485109446972981,"sequenceIndex":17},{"point":[0.730967787376657],"weight":-0.6822214206327576,"sequenceIndex":245},{"point":[0.730967787376657],"weight":-0.8258739991579688,"sequenceIndex":78},{"point":[0.730967787376657],"weight":-1.0849538120813116,"sequenceIndex":81},{"point":[0.730967787376657],"weight":-1.2933332938752884,"sequenceIndex":137},{"point":[0.730967787376657],"weight":-0.7691352751090798,"sequenceIndex":143},{"point":[0.730967787376657],"weight":-0.7961299301584364,"sequenceIndex":94},{"point":[0.730967787376657],"weight":-0.7448673905112919,"sequenceIndex":98},{"point":[0.730967787376657],"weight":-0.7523717769030436,"sequenceIndex":233},{"point":[0.730967787376657],"weight":-0.8056383290753033,"sequenceIndex":53},{"point":[0.730967787376657],"weight":-0.7724538107220646,"sequenceIndex":205},{"point":[0.730967787376657],"weight":-0.7364803138593382,"sequenceIndex":180},{"point":[0.730967787376657],"weight":-0.8566346235362479,"sequenceIndex":171},{"point":[0.730967787376657],"weight":-0.7615456530180789,"sequenceIndex":166},{"point":[0.730967787376657],"weight":-0.7473313060228517,"sequenceIndex":125},{"point":[0.730967787376657],"weight":-0.5111926579397474,"sequenceIndex":235},{"point":[0.730967787376657],"weight":-1.0980227007281955,"sequenceIndex":67},{"point":[0.730967787376657],"weight":-0.7808676618557331,"sequenceIndex":178},{"point":[0.730967787376657],"weight":-0.8741755328977605,"sequenceIndex":70},{"point":[0.730967787376657],"weight":-0.9015939099493882,"sequenceIndex":18},{"point":[0.730967787376657],"weight":-0.8711946236770283,"sequenceIndex":177},{"point":[0.730967787376657],"weight":-0.9164816478096371,"sequenceIndex":165},{"point":[0.730967787376657],"weight":-1.1894903956480227,"sequenceIndex":142},{"point":[0.730967787376657],"weight":-1.1188615479311899,"sequenceIndex":80},{"point":[0.730967787376657],"weight":-1.3776166054386196,"sequenceIndex":41},{"point":[0.730967787376657],"weight":-2.437189822979597,"sequenceIndex":203},{"point":[0.730967787376657],"weight":-1.5095437350519867,"sequenceIndex":222},{"point":[0.730967787376657],"weight":-0.9859140329343965,"sequenceIndex":88},{"point":[0.730967787376657],"weight":-1.7216809161890398,"sequenceIndex":181},{"point":[0.730967787376657],"weight":-0.9199489753062121,"sequenceIndex":92},{"point":[0.730967787376657],"weight":-0.9799334669119212,"sequenceIndex":23},{"point":[0.730967787376657],"weight":-1.4774969123746513,"sequenceIndex":6},{"point":[0.730967787376657],"weight":-1.4176731533464741,"sequenceIndex":99},{"point":[0.730967787376657],"weight":-0.7690440085045831,"sequenceIndex":101},{"point":[0.730967787376657],"weight":-0.8661113313587943,"sequenceIndex":102},{"point":[0.730967787376657],"weight":-1.4126156756883166,"sequenceIndex":26},{"point":[0.730967787376657],"weight":-1.6977487109362226,"sequenceIndex":139},{"point":[0.730967787376657],"weight":-0.7923269153389717,"sequenceIndex":145},{"point":[0.730967787376657],"weight":-0.8109493583420584,"sequenceIndex":55},{"point":[0.730967787376657],"weight":-1.8875672778228212,"sequenceIndex":113},{"point":[0.730967787376657],"weight":-0.8206980215368391,"sequenceIndex":185},{"point":[0.730967787376657],"weight":-1.1713228551585004,"sequenceIndex":138},{"point":[0.730967787376657],"weight":-0.909746276632225,"sequenceIndex":133},{"point":[0.730967787376657],"weight":-0.762364924343923,"sequenceIndex":224},{"point":[0.730967787376657],"weight":-1.8996920612968247,"sequenceIndex":61},{"point":[0.730967787376657],"weight":-1.3774224772822559,"sequenceIndex":229},{"point":[0.730967787376657],"weight":-0.9761422751775989,"sequenceIndex":31},{"point":[0.730967787376657],"weight":-0.9018400800821313,"sequenceIndex":256},{"point":[0.730967787376657],"weight":-2.0804881505691815,"sequenceIndex":65},{"point":[0.730967787376657],"weight":-1.1263528067939719,"sequenceIndex":66},{"point":[0.730967787376657],"weight":-4.751211145233858,"sequenceIndex":190},{"point":[0.730967787376657],"weight":-1.6504039687820673,"sequenceIndex":34},{"point":[0.730967787376657],"weight":-2.7115755487110413,"sequenceIndex":206},{"point":[0.730967787376657],"weight":-1.6163036794499503,"sequenceIndex":35},{"point":[0.730967787376657],"weight":-1.039650743568114,"sequenceIndex":71},{"point":[0.730967787376657],"weight":-1.323212101353041,"sequenceIndex":242},{"point":[0.730967787376657],"weight":-3.4488018562640885,"sequenceIndex":197},{"point":[0.730967787376657],"weight":-1.250333720351577,"sequenceIndex":164},{"point":[0.730967787376657],"weight":-1.0915392706309925,"sequenceIndex":183},{"point":[0.730967787376657],"weight":-2.6642871842345945,"sequenceIndex":214},{"point":[0.730967787376657],"weight":-3.457727730100165,"sequenceIndex":151},{"point":[0.730967787376657],"weight":-2.540460221084745,"sequenceIndex":39},{"point":[0.730967787376657],"weight":-2.0914951671752235,"sequenceIndex":226},{"point":[0.730967787376657],"weight":-1.128008697752501,"sequenceIndex":20},{"point":[0.730967787376657],"weight":-4.6277304684209035,"sequenceIndex":194},{"point":[0.730967787376657],"weight":-3.6925348359430905,"sequenceIndex":82},{"point":[0.730967787376657],"weight":-2.5453653501986655,"sequenceIndex":83},{"point":[0.730967787376657],"weight":-3.0921252637212833,"sequenceIndex":84},{"point":[0.730967787376657],"weight":-3.119365481312482,"sequenceIndex":154},{"point":[0.730967787376657],"weight":-1.5312566771856495,"sequenceIndex":250},{"point":[0.730967787376657],"weight":-1.748947023581692,"sequenceIndex":217},{"point":[0.730967787376657],"weight":-1.567081790181768,"sequenceIndex":44},{"point":[0.730967787376657],"weight":-1.2935113522053503,"sequenceIndex":11},{"point":[0.730967787376657],"weight":-2.2852729745244216,"sequenceIndex":45},{"point":[0.730967787376657],"weight":-2.2952316566320627,"sequenceIndex":140},{"point":[0.730967787376657],"weight":-1.10977352280912,"sequenceIndex":46},{"point":[0.730967787376657],"weight":-1.126356411622563,"sequenceIndex":209},{"point":[0.730967787376657],"weight":-4.386698711374045,"sequenceIndex":234},{"point":[0.730967787376657],"weight":-1.4592965294341962,"sequenceIndex":173},{"point":[0.730967787376657],"weight":-2.625818019837613,"sequenceIndex":218},{"point":[0.730967787376657],"weight":-1.7614236294532615,"sequenceIndex":187},{"point":[0.730967787376657],"weight":-3.8385350974891326,"sequenceIndex":141},{"point":[0.730967787376657],"weight":-2.0754303658889754,"sequenceIndex":248},{"point":[0.730967787376657],"weight":-2.6399716150219596,"sequenceIndex":219},{"point":[0.730967787376657],"weight":-5.205584774989032,"sequenceIndex":238},{"point":[0.730967787376657],"weight":-1.3557736024558686,"sequenceIndex":225},{"point":[0.730967787376657],"weight":-0.9972368006278618,"sequenceIndex":32},{"point":[0.730967787376657],"weight":-1.5529374171545067,"sequenceIndex":104},{"point":[0.730967787376657],"weight":-2.45452974178186,"sequenceIndex":175},{"point":[0.730967787376657],"weight":-2.551090937076561,"sequenceIndex":188},{"point":[0.730967787376657],"weight":-2.226810831502148,"sequenceIndex":195},{"point":[0.730967787376657],"weight":-0.8035396406463245,"sequenceIndex":54},{"point":[0.730967787376657],"weight":-1.4049810345189315,"sequenceIndex":147},{"point":[0.730967787376657],"weight":-1.3961530439972936,"sequenceIndex":110},{"point":[0.730967787376657],"weight":-4.19398002120294,"sequenceIndex":64},{"point":[0.730967787376657],"weight":-2.970030755361144,"sequenceIndex":112},{"point":[0.730967787376657],"weight":-1.972174506262721,"sequenceIndex":216},{"point":[0.730967787376657],"weight":-1.1140159354403636,"sequenceIndex":57},{"point":[0.730967787376657],"weight":-2.2543674663474516,"sequenceIndex":220},{"point":[0.730967787376657],"weight":-2.139112676550789,"sequenceIndex":58},{"point":[0.730967787376657],"weight":-3.360206480167664,"sequenceIndex":254},{"point":[0.730967787376657],"weight":-2.294739589415878,"sequenceIndex":59},{"point":[0.730967787376657],"weight":-1.8122597064115298,"sequenceIndex":232},{"point":[0.730967787376657],"weight":-2.453545247725982,"sequenceIndex":162},{"point":[0.730967787376657],"weight":-1.6839120204394413,"sequenceIndex":240},{"point":[0.730967787376657],"weight":-1.9686542979337376,"sequenceIndex":122},{"point":[0.730967787376657],"weight":-2.1007321854747265,"sequenceIndex":123},{"point":[0.730967787376657],"weight":-3.899233852145424,"sequenceIndex":62},{"point":[0.730967787376657],"weight":-1.553860120416265,"sequenceIndex":130},{"point":[0.730967787376657],"weight":-4.082598151203524,"sequenceIndex":126},{"point":[0.730967787376657],"weight":-3.9153261401703294,"sequenceIndex":199},{"point":[0.730967787376657],"weight":-0.9988351944691639,"sequenceIndex":252}],"sampleSize":128,"lambda":7.8125E-4,"random":{},"entriesSeen":256},"tree":{"storeSequenceIndexesEnabled":false,"centerOfMassEnabled":false,"random":{}}},{"sampler":{"weightedSamples":[{"point":[0.730967787376657],"weight":-0.5656921098533466,"sequenceIndex":95},{"point":[0.730967787376657],"weight":-0.5736699983755305,"sequenceIndex":23},{"point":[0.730967787376657],"weight":-0.5970976317951886,"sequenceIndex":14},{"point":[0.730967787376657],"weight":-0.6010938496959839,"sequenceIndex":252},{"point":[0.730967787376657],"weight":-0.6003176245756465,"sequenceIndex":84},{"point":[0.730967787376657],"weight":-0.5977588993197622,"sequenceIndex":111},{"point":[0.730967787376657],"weight":-0.6117451860416946,"sequenceIndex":143},{"point":[0.730967787376657],"weight":-0.614074628470778,"sequenceIndex":201},{"point":[0.730967787376657],"weight":-0.6776383832139771,"sequenceIndex":188},{"point":[0.730967787376657],"weight":-0.7741493267767349,"sequenceIndex":20},{"point":[0.730967787376657],"weight":-0.717082382980193,"sequenceIndex":137},{"point":[0.730967787376657],"weight":-0.7442769417015882,"sequenceIndex":97},{"point":[0.730967787376657],"weight":-0.6131957600806823,"sequenceIndex":108},{"point":[0.730967787376657],"weight":-0.6168054605165058,"sequenceIndex":65},{"point":[0.730967787376657],"weight":-0.683662465632388,"sequenceIndex":213},{"point":[0.730967787376657],"weight":-0.6268568658866474,"sequenceIndex":219},{"point":[0.730967787376657],"weight":-0.7050786130782036,"sequenceIndex":146},{"point":[0.730967787376657],"weight":-1.0156829898970225,"sequenceIndex":72},{"point":[0.730967787376657],"weight":-0.9899039765665348,"sequenceIndex":39},{"point":[0.730967787376657],"weight":-1.1718958274261029,"sequenceIndex":142},{"point":[0.730967787376657],"weight":-0.9954565850603413,"sequenceIndex":10},{"point":[0.730967787376657],"weight":-0.8108783216932964,"sequenceIndex":45},{"point":[0.730967787376657],"weight":-0.747320920643402,"sequenceIndex":232},{"point":[0.730967787376657],"weight":-0.9740092420594945,"sequenceIndex":48},{"point":[0.730967787376657],"weight":-0.7884782678004076,"sequenceIndex":49},{"point":[0.730967787376657],"weight":-0.6662114687420471,"sequenceIndex":206},{"point":[0.730967787376657],"weight":-0.648795252227527,"sequenceIndex":54},{"point":[0.730967787376657],"weight":-0.7053812017730513,"sequenceIndex":114},{"point":[0.730967787376657],"weight":-0.9606626553083641,"sequenceIndex":151},{"point":[0.730967787376657],"weight":-0.6965978924925147,"sequenceIndex":192},{"point":[0.730967787376657],"weight":-0.7653520712504159,"sequenceIndex":199},{"point":[0.730967787376657],"weight":-0.6676278568725179,"sequenceIndex":228},{"point":[0.730967787376657],"weight":-1.0538063914547726,"sequenceIndex":66},{"point":[0.730967787376657],"weight":-1.2752424317162336,"sequenceIndex":16},{"point":[0.730967787376657],"weight":-0.9681127313608838,"sequenceIndex":205},{"point":[0.730967787376657],"weight":-1.1007444286198425,"sequenceIndex":190},{"point":[0.730967787376657],"weight":-1.311171673937453,"sequenceIndex":158},{"point":[0.730967787376657],"weight":-1.7128361123385918,"sequenceIndex":77},{"point":[0.730967787376657],"weight":-0.9944290728440663,"sequenceIndex":79},{"point":[0.730967787376657],"weight":-1.6704869950278378,"sequenceIndex":4},{"point":[0.730967787376657],"weight":-1.4142881148540378,"sequenceIndex":41},{"point":[0.730967787376657],"weight":-1.0677593340615175,"sequenceIndex":181},{"point":[0.730967787376657],"weight":-1.0516177413909489,"sequenceIndex":157},{"point":[0.730967787376657],"weight":-1.4586809190319239,"sequenceIndex":88},{"point":[0.730967787376657],"weight":-0.9692829469039261,"sequenceIndex":90},{"point":[0.730967787376657],"weight":-0.9152665347281144,"sequenceIndex":231},{"point":[0.730967787376657],"weight":-0.7541353290169365,"sequenceIndex":94},{"point":[0.730967787376657],"weight":-1.2758284324803708,"sequenceIndex":96},{"point":[0.730967787376657],"weight":-1.261252560651491,"sequenceIndex":7},{"point":[0.730967787376657],"weight":-1.369012586977198,"sequenceIndex":25},{"point":[0.730967787376657],"weight":-0.9732950576062757,"sequenceIndex":50},{"point":[0.730967787376657],"weight":-1.407921660789241,"sequenceIndex":221},{"point":[0.730967787376657],"weight":-1.111398745686547,"sequenceIndex":197},{"point":[0.730967787376657],"weight":-0.868095734459801,"sequenceIndex":210},{"point":[0.730967787376657],"weight":-0.762498054762816,"sequenceIndex":217},{"point":[0.730967787376657],"weight":-1.743391016284396,"sequenceIndex":168},{"point":[0.730967787376657],"weight":-0.8723312680071155,"sequenceIndex":29},{"point":[0.730967787376657],"weight":-1.5453949410634549,"sequenceIndex":208},{"point":[0.730967787376657],"weight":-1.0960827762337249,"sequenceIndex":140},{"point":[0.730967787376657],"weight":-0.7932313689653547,"sequenceIndex":12},{"point":[0.730967787376657],"weight":-2.728198692810048,"sequenceIndex":148},{"point":[0.730967787376657],"weight":-0.944600870835263,"sequenceIndex":125},{"point":[0.730967787376657],"weight":-1.2675144136438241,"sequenceIndex":235},{"point":[0.730967787376657],"weight":-0.8166852891892733,"sequenceIndex":256},{"point":[0.730967787376657],"weight":-2.1057046246564664,"sequenceIndex":193},{"point":[0.730967787376657],"weight":-1.2366165771793083,"sequenceIndex":9},{"point":[0.730967787376657],"weight":-2.159905045029235,"sequenceIndex":162},{"point":[0.730967787376657],"weight":-3.4582820898218376,"sequenceIndex":68},{"point":[0.730967787376657],"weight":-2.7066297040799774,"sequenceIndex":241},{"point":[0.730967787376657],"weight":-2.510198905444525,"sequenceIndex":174},{"point":[0.730967787376657],"weight":-2.085492644615235,"sequenceIndex":248},{"point":[0.730967787376657],"weight":-1.3278226051344535,"sequenceIndex":5},{"point":[0.730967787376657],"weight":-3.431186109495991,"sequenceIndex":189},{"point":[0.730967787376657],"weight":-2.294806384368148,"sequenceIndex":37},{"point":[0.730967787376657],"weight":-1.4108034492867334,"sequenceIndex":150},{"point":[0.730967787376657],"weight":-1.738410320657588,"sequenceIndex":38},{"point":[0.730967787376657],"weight":-3.6235510086228957,"sequenceIndex":133},{"point":[0.730967787376657],"weight":-3.9479206115030645,"sequenceIndex":78},{"point":[0.730967787376657],"weight":-2.838746697049354,"sequenceIndex":166},{"point":[0.730967787376657],"weight":-3.5923656097297587,"sequenceIndex":255},{"point":[0.730967787376657],"weight":-1.7255886124586144,"sequenceIndex":81},{"point":[0.730967787376657],"weight":-2.2237588809154496,"sequenceIndex":82},{"point":[0.730967787376657],"weight":-1.6100069173512694,"sequenceIndex":141},{"point":[0.730967787376657],"weight":-3.335961409697231,"sequenceIndex":214},{"point":[0.730967787376657],"weight":-3.8093345812025374,"sequenceIndex":85},{"point":[0.730967787376657],"weight":-2.015589152207231,"sequenceIndex":165},{"point":[0.730967787376657],"weight":-1.785834643373611,"sequenceIndex":136},{"point":[0.730967787376657],"weight":-1.7438229724127239,"sequenceIndex":11},{"point":[0.730967787376657],"weight":-1.8997131536718688,"sequenceIndex":191},{"point":[0.730967787376657],"weight":-1.9844982030856861,"sequenceIndex":249},{"point":[0.730967787376657],"weight":-1.015368032184167,"sequenceIndex":226},{"point":[0.730967787376657],"weight":-1.9182195211664574,"sequenceIndex":1},{"point":[0.730967787376657],"weight":-1.1118783411071498,"sequenceIndex":93},{"point":[0.730967787376657],"weight":-0.8612409267913705,"sequenceIndex":47},{"point":[0.730967787376657],"weight":-3.3866127129616466,"sequenceIndex":209},{"point":[0.730967787376657],"weight":-2.3337278109293855,"sequenceIndex":3},{"point":[0.730967787376657],"weight":-2.1435544229354435,"sequenceIndex":238},{"point":[0.730967787376657],"weight":-1.8958543700298525,"sequenceIndex":233},{"point":[0.730967787376657],"weight":-2.3112096359465477,"sequenceIndex":99},{"point":[0.730967787376657],"weight":-2.218899018691928,"sequenceIndex":225},{"point":[0.730967787376657],"weight":-2.460314815261322,"sequenceIndex":176},{"point":[0.730967787376657],"weight":-3.728663638871481,"sequenceIndex":102},{"point":[0.730967787376657],"weight":-3.2846501228847433,"sequenceIndex":178},{"point":[0.730967787376657],"weight":-1.6735591633291222,"sequenceIndex":13},{"point":[0.730967787376657],"weight":-2.772359937312368,"sequenceIndex":154},{"point":[0.730967787376657],"weight":-1.4038215846287816,"sequenceIndex":26},{"point":[0.730967787376657],"weight":-1.4447132720433036,"sequenceIndex":128},{"point":[0.730967787376657],"weight":-1.541051405595043,"sequenceIndex":27},{"point":[0.730967787376657],"weight":-1.7021425475987217,"sequenceIndex":239},{"point":[0.730967787376657],"weight":-3.547958594316238,"sequenceIndex":242},{"point":[0.730967787376657],"weight":-1.3179385483114288,"sequenceIndex":195},{"point":[0.730967787376657],"weight":-1.9429931647354697,"sequenceIndex":28},{"point":[0.730967787376657],"weight":-1.9092781057791215,"sequenceIndex":112},{"point":[0.730967787376657],"weight":-3.258028768235679,"sequenceIndex":229},{"point":[0.730967787376657],"weight":-1.5615861125262778,"sequenceIndex":115},{"point":[0.730967787376657],"weight":-1.9042528580634817,"sequenceIndex":6},{"point":[0.730967787376657],"weight":-1.7106004424867165,"sequenceIndex":179},{"point":[0.730967787376657],"weight":-1.5632290914349152,"sequenceIndex":183},{"point":[0.730967787376657],"weight":-1.3777318053235523,"sequenceIndex":171},{"point":[0.730967787376657],"weight":-6.436342737377894,"sequenceIndex":120},{"point":[0.730967787376657],"weight":-1.8151493634535198,"sequenceIndex":60},{"point":[0.730967787376657],"weight":-5.766785847524656,"sequenceIndex":61},{"point":[0.730967787376657],"weight":-2.9801206798449047,"sequenceIndex":122},{"point":[0.730967787376657],"weight":-2.853870235886857,"sequenceIndex":152},{"point":[0.730967787376657],"weight":-1.3288896711915825,"sequenceIndex":240},{"point":[0.730967787376657],"weight":-1.3614859829238684,"sequenceIndex":187},{"point":[0.730967787376657],"weight":-2.330823242851595,"sequenceIndex":127},{"point":[0.730967787376657],"weight":-1.1981023495301846,"sequenceIndex":244}],"sampleSize":128,"lambda":7.8125E-4,"random":{},"entriesSeen":256},"tree":{"storeSequenceIndexesEnabled":false,"centerOfMassEnabled":false,"random":{}}},{"sampler":{"weightedSamples":[{"point":[0.730967787376657],"weight":-0.3979004303302931,"sequenceIndex":92},{"point":[0.730967787376657],"weight":-0.42110051135299487,"sequenceIndex":8},{"point":[0.730967787376657],"weight":-0.432072079229562,"sequenceIndex":196},{"point":[0.730967787376657],"weight":-0.4772164450459,"sequenceIndex":69},{"point":[0.730967787376657],"weight":-0.4595473506779807,"sequenceIndex":182},{"point":[0.730967787376657],"weight":-0.4713679959507915,"sequenceIndex":184},{"point":[0.730967787376657],"weight":-0.4713136366225582,"sequenceIndex":56},{"point":[0.730967787376657],"weight":-0.5965745082303615,"sequenceIndex":234},{"point":[0.730967787376657],"weight":-0.4949040894807297,"sequenceIndex":72},{"point":[0.730967787376657],"weight":-0.5974382735660391,"sequenceIndex":147},{"point":[0.730967787376657],"weight":-0.5158330156858522,"sequenceIndex":138},{"point":[0.730967787376657],"weight":-0.5117370261595496,"sequenceIndex":6},{"point":[0.730967787376657],"weight":-0.7745822131216803,"sequenceIndex":227},{"point":[0.730967787376657],"weight":-0.5818824508971533,"sequenceIndex":134},{"point":[0.730967787376657],"weight":-0.574881270932269,"sequenceIndex":199},{"point":[0.730967787376657],"weight":-0.6855161098007567,"sequenceIndex":245},{"point":[0.730967787376657],"weight":-0.7708399594578343,"sequenceIndex":157},{"point":[0.730967787376657],"weight":-0.6741984388592762,"sequenceIndex":75},{"point":[0.730967787376657],"weight":-0.49977630350812285,"sequenceIndex":19},{"point":[0.730967787376657],"weight":-0.9944713377835025,"sequenceIndex":195},{"point":[0.730967787376657],"weight":-0.6394381220170593,"sequenceIndex":168},{"point":[0.730967787376657],"weight":-0.6252239722903458,"sequenceIndex":91},{"point":[0.730967787376657],"weight":-0.8192053210808831,"sequenceIndex":94},{"point":[0.730967787376657],"weight":-0.603450072468302,"sequenceIndex":154},{"point":[0.730967787376657],"weight":-0.582192735673142,"sequenceIndex":193},{"point":[0.730967787376657],"weight":-0.8848868048688218,"sequenceIndex":26},{"point":[0.730967787376657],"weight":-0.8724754940558181,"sequenceIndex":111},{"point":[0.730967787376657],"weight":-0.7556672665090586,"sequenceIndex":112},{"point":[0.730967787376657],"weight":-0.6186955426832307,"sequenceIndex":153},{"point":[0.730967787376657],"weight":-0.8320592669628364,"sequenceIndex":120},{"point":[0.730967787376657],"weight":-0.6965719294292367,"sequenceIndex":63},{"point":[0.730967787376657],"weight":-0.6962189510277936,"sequenceIndex":204},{"point":[0.730967787376657],"weight":-0.9834786253975808,"sequenceIndex":162},{"point":[0.730967787376657],"weight":-1.6001190046293554,"sequenceIndex":34},{"point":[0.730967787376657],"weight":-1.1047104308695939,"sequenceIndex":218},{"point":[0.730967787376657],"weight":-1.5629740843772701,"sequenceIndex":37},{"point":[0.730967787376657],"weight":-1.0969345429412543,"sequenceIndex":74},{"point":[0.730967787376657],"weight":-0.8699316812072716,"sequenceIndex":210},{"point":[0.730967787376657],"weight":-1.0468348580067022,"sequenceIndex":39},{"point":[0.730967787376657],"weight":-1.6876562501551347,"sequenceIndex":10},{"point":[0.730967787376657],"weight":-1.2225577666136955,"sequenceIndex":82},{"point":[0.730967787376657],"weight":-0.6677404918930775,"sequenceIndex":84},{"point":[0.730967787376657],"weight":-0.6668369734219141,"sequenceIndex":21},{"point":[0.730967787376657],"weight":-0.7228738332927922,"sequenceIndex":171},{"point":[0.730967787376657],"weight":-1.2621866429683644,"sequenceIndex":90},{"point":[0.730967787376657],"weight":-0.945407495495765,"sequenceIndex":211},{"point":[0.730967787376657],"weight":-0.8742499832712327,"sequenceIndex":224},{"point":[0.730967787376657],"weight":-0.875491920925412,"sequenceIndex":24},{"point":[0.730967787376657],"weight":-0.8571952746689382,"sequenceIndex":191},{"point":[0.730967787376657],"weight":-1.901318326155882,"sequenceIndex":251},{"point":[0.730967787376657],"weight":-0.8346868823077689,"sequenceIndex":151},{"point":[0.730967787376657],"weight":-1.5909370961093492,"sequenceIndex":64},{"point":[0.730967787376657],"weight":-1.12703483149762,"sequenceIndex":106},{"point":[0.730967787376657],"weight":-1.3067702705580897,"sequenceIndex":27},{"point":[0.730967787376657],"weight":-1.5803521959340934,"sequenceIndex":232},{"point":[0.730967787376657],"weight":-0.7945548374840099,"sequenceIndex":113},{"point":[0.730967787376657],"weight":-0.9317565110787419,"sequenceIndex":239},{"point":[0.730967787376657],"weight":-1.3280577459054195,"sequenceIndex":58},{"point":[0.730967787376657],"weight":-1.4279609992564333,"sequenceIndex":119},{"point":[0.730967787376657],"weight":-0.8806428595342358,"sequenceIndex":217},{"point":[0.730967787376657],"weight":-1.0924166526542147,"sequenceIndex":123},{"point":[0.730967787376657],"weight":-0.8960950764792546,"sequenceIndex":177},{"point":[0.730967787376657],"weight":-1.0592409991463505,"sequenceIndex":169},{"point":[0.730967787376657],"weight":-0.955385455505203,"sequenceIndex":256},{"point":[0.730967787376657],"weight":-1.0214027808939117,"sequenceIndex":1},{"point":[0.730967787376657],"weight":-1.752924806129832,"sequenceIndex":33},{"point":[0.730967787376657],"weight":-2.148841432237284,"sequenceIndex":67},{"point":[0.730967787376657],"weight":-2.6963990758963883,"sequenceIndex":68},{"point":[0.730967787376657],"weight":-1.9938547482905526,"sequenceIndex":209},{"point":[0.730967787376657],"weight":-3.41996607176652,"sequenceIndex":208},{"point":[0.730967787376657],"weight":-2.5270762480304048,"sequenceIndex":140},{"point":[0.730967787376657],"weight":-2.131937095145985,"sequenceIndex":18},{"point":[0.730967787376657],"weight":-3.1942866048970857,"sequenceIndex":132},{"point":[0.730967787376657],"weight":-2.038118041787221,"sequenceIndex":36},{"point":[0.730967787376657],"weight":-7.20640254023289,"sequenceIndex":237},{"point":[0.730967787376657],"weight":-1.5004195923811972,"sequenceIndex":220},{"point":[0.730967787376657],"weight":-1.346346421326581,"sequenceIndex":77},{"point":[0.730967787376657],"weight":-1.5111524277996766,"sequenceIndex":78},{"point":[0.730967787376657],"weight":-1.1807758983271366,"sequenceIndex":79},{"point":[0.730967787376657],"weight":-1.7035039976169173,"sequenceIndex":40},{"point":[0.730967787376657],"weight":-4.4901806567231475,"sequenceIndex":190},{"point":[0.730967787376657],"weight":-2.3714913752299016,"sequenceIndex":41},{"point":[0.730967787376657],"weight":-1.5980468929981966,"sequenceIndex":215},{"point":[0.730967787376657],"weight":-1.2625829423643455,"sequenceIndex":42},{"point":[0.730967787376657],"weight":-1.2471481889209146,"sequenceIndex":252},{"point":[0.730967787376657],"weight":-0.9956615910088513,"sequenceIndex":158},{"point":[0.730967787376657],"weight":-2.0427841781516687,"sequenceIndex":128},{"point":[0.730967787376657],"weight":-1.5192732806406097,"sequenceIndex":44},{"point":[0.730967787376657],"weight":-1.9478589400262896,"sequenceIndex":89},{"point":[0.730967787376657],"weight":-1.4950692518225535,"sequenceIndex":11},{"point":[0.730967787376657],"weight":-3.9015500953619533,"sequenceIndex":213},{"point":[0.730967787376657],"weight":-2.204410178942197,"sequenceIndex":159},{"point":[0.730967787376657],"weight":-1.3667761664770188,"sequenceIndex":93},{"point":[0.730967787376657],"weight":-1.1539944354930676,"sequenceIndex":47},{"point":[0.730967787376657],"weight":-2.344925896492984,"sequenceIndex":250},{"point":[0.730967787376657],"weight":-3.353689292244069,"sequenceIndex":207},{"point":[0.730967787376657],"weight":-1.5330797058353156,"sequenceIndex":175},{"point":[0.730967787376657],"weight":-2.1926726030998114,"sequenceIndex":98},{"point":[0.730967787376657],"weight":-3.235261214462398,"sequenceIndex":235},{"point":[0.730967787376657],"weight":-2.28485646956944,"sequenceIndex":50},{"point":[0.730967787376657],"weight":-2.1682204568954644,"sequenceIndex":100},{"point":[0.730967787376657],"weight":-2.3211573580307863,"sequenceIndex":180},{"point":[0.730967787376657],"weight":-1.4678808837165913,"sequenceIndex":233},{"point":[0.730967787376657],"weight":-2.5907853542156936,"sequenceIndex":52},{"point":[0.730967787376657],"weight":-1.67734819039643,"sequenceIndex":105},{"point":[0.730967787376657],"weight":-4.332775314453334,"sequenceIndex":203},{"point":[0.730967787376657],"weight":-1.346035557848181,"sequenceIndex":107},{"point":[0.730967787376657],"weight":-3.1330415236820612,"sequenceIndex":230},{"point":[0.730967787376657],"weight":-2.351574272577085,"sequenceIndex":179},{"point":[0.730967787376657],"weight":-2.4017821789778995,"sequenceIndex":149},{"point":[0.730967787376657],"weight":-2.1995326924149143,"sequenceIndex":206},{"point":[0.730967787376657],"weight":-1.2284392575473988,"sequenceIndex":7},{"point":[0.730967787376657],"weight":-0.8638438881575636,"sequenceIndex":249},{"point":[0.730967787376657],"weight":-1.174632855487931,"sequenceIndex":114},{"point":[0.730967787376657],"weight":-0.9607519762285063,"sequenceIndex":243},{"point":[0.730967787376657],"weight":-4.210752760550772,"sequenceIndex":181},{"point":[0.730967787376657],"weight":-2.297502856688658,"sequenceIndex":117},{"point":[0.730967787376657],"weight":-3.5355369933813043,"sequenceIndex":118},{"point":[0.730967787376657],"weight":-2.4249899848120102,"sequenceIndex":172},{"point":[0.730967787376657],"weight":-1.4693052061947043,"sequenceIndex":176},{"point":[0.730967787376657],"weight":-7.750364832214417,"sequenceIndex":150},{"point":[0.730967787376657],"weight":-2.362055845931037,"sequenceIndex":61},{"point":[0.730967787376657],"weight":-2.17212465746521,"sequenceIndex":122},{"point":[0.730967787376657],"weight":-3.251556028976327,"sequenceIndex":201},{"point":[0.730967787376657],"weight":-1.424300615989522,"sequenceIndex":130},{"point":[0.730967787376657],"weight":-2.2811916623370725,"sequenceIndex":246},{"point":[0.730967787376657],"weight":-1.3073672886632108,"sequenceIndex":137},{"point":[0.730967787376657],"weight":-2.2741418026509828,"sequenceIndex":255}],"sampleSize":128,"lambda":7.8125E-4,"random":{},"entriesSeen":256},"tree":{"storeSequenceIndexesEnabled":false,"centerOfMassEnabled":false,"random":{}}},{"sampler":{"weightedSamples":[{"point":[0.730967787376657],"weight":-0.43146758893534326,"sequenceIndex":75},{"point":[0.730967787376657],"weight":-0.43557429034355205,"sequenceIndex":4},{"point":[0.730967787376657],"weight":-0.43579843585184486,"sequenceIndex":97},{"point":[0.730967787376657],"weight":-0.4397582914803788,"sequenceIndex":208},{"point":[0.730967787376657],"weight":-0.512571718354482,"sequenceIndex":167},{"point":[0.730967787376657],"weight":-0.5217539025912886,"sequenceIndex":157},{"point":[0.730967787376657],"weight":-0.44523391094616505,"sequenceIndex":202},{"point":[0.730967787376657],"weight":-0.5475509931081446,"sequenceIndex":247},{"point":[0.730967787376657],"weight":-0.7961112973521325,"sequenceIndex":38},{"point":[0.730967787376657],"weight":-0.7444592709842324,"sequenceIndex":144},{"point":[0.730967787376657],"weight":-0.5237357720926554,"sequenceIndex":88},{"point":[0.730967787376657],"weight":-0.5741730326827027,"sequenceIndex":48},{"point":[0.730967787376657],"weight":-0.6364227265567481,"sequenceIndex":111},{"point":[0.730967787376657],"weight":-0.5404549061879133,"sequenceIndex":176},{"point":[0.730967787376657],"weight":-0.47532960799358615,"sequenceIndex":122},{"point":[0.730967787376657],"weight":-0.5499986033768038,"sequenceIndex":248},{"point":[0.730967787376657],"weight":-0.8314886938408989,"sequenceIndex":71},{"point":[0.730967787376657],"weight":-1.2478552870924284,"sequenceIndex":147},{"point":[0.730967787376657],"weight":-0.855680831113282,"sequenceIndex":79},{"point":[0.730967787376657],"weight":-0.8636390195993987,"sequenceIndex":250},{"point":[0.730967787376657],"weight":-0.8645845849528438,"sequenceIndex":86},{"point":[0.730967787376657],"weight":-0.8755046967400183,"sequenceIndex":252},{"point":[0.730967787376657],"weight":-0.947282983146368,"sequenceIndex":163},{"point":[0.730967787376657],"weight":-0.5782380592445479,"sequenceIndex":99},{"point":[0.730967787376657],"weight":-0.9288495488801758,"sequenceIndex":174},{"point":[0.730967787376657],"weight":-0.6917525221726755,"sequenceIndex":6},{"point":[0.730967787376657],"weight":-0.6997420111772198,"sequenceIndex":240},{"point":[0.730967787376657],"weight":-0.671007898438596,"sequenceIndex":57},{"point":[0.730967787376657],"weight":-0.9817788988428946,"sequenceIndex":58},{"point":[0.730967787376657],"weight":-1.0198931917076965,"sequenceIndex":225},{"point":[0.730967787376657],"weight":-0.5018714588808663,"sequenceIndex":142},{"point":[0.730967787376657],"weight":-0.6486044348700184,"sequenceIndex":35},{"point":[0.730967787376657],"weight":-0.9354812269112043,"sequenceIndex":33},{"point":[0.730967787376657],"weight":-0.8485252594296395,"sequenceIndex":135},{"point":[0.730967787376657],"weight":-1.2398658703632062,"sequenceIndex":130},{"point":[0.730967787376657],"weight":-1.7878331906696463,"sequenceIndex":244},{"point":[0.730967787376657],"weight":-1.5382383364259857,"sequenceIndex":203},{"point":[0.730967787376657],"weight":-0.944280203506797,"sequenceIndex":77},{"point":[0.730967787376657],"weight":-1.5191248425465418,"sequenceIndex":200},{"point":[0.730967787376657],"weight":-1.4421695323365806,"sequenceIndex":215},{"point":[0.730967787376657],"weight":-1.4978270934938764,"sequenceIndex":83},{"point":[0.730967787376657],"weight":-1.012587985529494,"sequenceIndex":85},{"point":[0.730967787376657],"weight":-1.1268380048062832,"sequenceIndex":43},{"point":[0.730967787376657],"weight":-1.0766926281514735,"sequenceIndex":166},{"point":[0.730967787376657],"weight":-1.3080859203651838,"sequenceIndex":90},{"point":[0.730967787376657],"weight":-1.4113282894742023,"sequenceIndex":171},{"point":[0.730967787376657],"weight":-1.368809815986762,"sequenceIndex":47},{"point":[0.730967787376657],"weight":-1.3806948286359886,"sequenceIndex":191},{"point":[0.730967787376657],"weight":-0.8844224275389612,"sequenceIndex":216},{"point":[0.730967787376657],"weight":-0.9555308173333571,"sequenceIndex":1},{"point":[0.730967787376657],"weight":-1.0527643708738217,"sequenceIndex":156},{"point":[0.730967787376657],"weight":-1.2254077557246803,"sequenceIndex":141},{"point":[0.730967787376657],"weight":-1.3090878194581146,"sequenceIndex":185},{"point":[0.730967787376657],"weight":-0.7783149920332701,"sequenceIndex":55},{"point":[0.730967787376657],"weight":-1.0895953687585689,"sequenceIndex":27},{"point":[0.730967787376657],"weight":-1.0813357918849698,"sequenceIndex":15},{"point":[0.730967787376657],"weight":-1.264783616250924,"sequenceIndex":234},{"point":[0.730967787376657],"weight":-1.0462801854491435,"sequenceIndex":232},{"point":[0.730967787376657],"weight":-1.6904792095689085,"sequenceIndex":65},{"point":[0.730967787376657],"weight":-1.6606390875191452,"sequenceIndex":121},{"point":[0.730967787376657],"weight":-1.0621109288071795,"sequenceIndex":28},{"point":[0.730967787376657],"weight":-0.9602193646067033,"sequenceIndex":125},{"point":[0.730967787376657],"weight":-1.705122692538227,"sequenceIndex":145},{"point":[0.730967787376657],"weight":-0.6746348334348757,"sequenceIndex":227},{"point":[0.730967787376657],"weight":-1.9921750528106763,"sequenceIndex":64},{"point":[0.730967787376657],"weight":-1.2390318998211738,"sequenceIndex":2},{"point":[0.730967787376657],"weight":-3.5815095072529872,"sequenceIndex":233},{"point":[0.730967787376657],"weight":-2.7995423422137122,"sequenceIndex":17},{"point":[0.730967787376657],"weight":-0.8962782752247748,"sequenceIndex":32},{"point":[0.730967787376657],"weight":-1.2794323578529414,"sequenceIndex":34},{"point":[0.730967787376657],"weight":-1.3064982202725528,"sequenceIndex":194},{"point":[0.730967787376657],"weight":-2.7415669456500433,"sequenceIndex":72},{"point":[0.730967787376657],"weight":-2.395933237667176,"sequenceIndex":36},{"point":[0.730967787376657],"weight":-2.4073667967351864,"sequenceIndex":160},{"point":[0.730967787376657],"weight":-1.9978248489719568,"sequenceIndex":168},{"point":[0.730967787376657],"weight":-1.7047302706360608,"sequenceIndex":19},{"point":[0.730967787376657],"weight":-1.2707714518412112,"sequenceIndex":76},{"point":[0.730967787376657],"weight":-2.774930319435379,"sequenceIndex":39},{"point":[0.730967787376657],"weight":-3.135649437553182,"sequenceIndex":251},{"point":[0.730967787376657],"weight":-2.665378982978812,"sequenceIndex":20},{"point":[0.730967787376657],"weight":-2.576264404095832,"sequenceIndex":80},{"point":[0.730967787376657],"weight":-1.5135554563582352,"sequenceIndex":220},{"point":[0.730967787376657],"weight":-2.798876677555753,"sequenceIndex":235},{"point":[0.730967787376657],"weight":-2.1427337043639723,"sequenceIndex":136},{"point":[0.730967787376657],"weight":-1.4113321062357487,"sequenceIndex":138},{"point":[0.730967787376657],"weight":-1.9229764427385319,"sequenceIndex":238},{"point":[0.730967787376657],"weight":-2.820169521671969,"sequenceIndex":132},{"point":[0.730967787376657],"weight":-2.2732157066142276,"sequenceIndex":44},{"point":[0.730967787376657],"weight":-3.5423014119262692,"sequenceIndex":245},{"point":[0.730967787376657],"weight":-1.8198578826736882,"sequenceIndex":11},{"point":[0.730967787376657],"weight":-1.5386420154928093,"sequenceIndex":91},{"point":[0.730967787376657],"weight":-1.6568536824043778,"sequenceIndex":196},{"point":[0.730967787376657],"weight":-1.7375816414740926,"sequenceIndex":161},{"point":[0.730967787376657],"weight":-1.9070412017997278,"sequenceIndex":184},{"point":[0.730967787376657],"weight":-3.1443981487224697,"sequenceIndex":16},{"point":[0.730967787376657],"weight":-2.2396013830819417,"sequenceIndex":24},{"point":[0.730967787376657],"weight":-3.0594646600299638,"sequenceIndex":193},{"point":[0.730967787376657],"weight":-5.223976682762646,"sequenceIndex":98},{"point":[0.730967787376657],"weight":-2.9494145469931117,"sequenceIndex":49},{"point":[0.730967787376657],"weight":-2.046062473540764,"sequenceIndex":50},{"point":[0.730967787376657],"weight":-4.541520926120505,"sequenceIndex":169},{"point":[0.730967787376657],"weight":-2.1283835609183672,"sequenceIndex":51},{"point":[0.730967787376657],"weight":-2.5760520913687985,"sequenceIndex":188},{"point":[0.730967787376657],"weight":-1.6134115942883618,"sequenceIndex":211},{"point":[0.730967787376657],"weight":-1.4638440613441213,"sequenceIndex":105},{"point":[0.730967787376657],"weight":-2.0369841642012974,"sequenceIndex":148},{"point":[0.730967787376657],"weight":-3.331931561948335,"sequenceIndex":140},{"point":[0.730967787376657],"weight":-3.4892510197978717,"sequenceIndex":54},{"point":[0.730967787376657],"weight":-1.9867373843726694,"sequenceIndex":180},{"point":[0.730967787376657],"weight":-2.1490986376227066,"sequenceIndex":204},{"point":[0.730967787376657],"weight":-3.3006728428173857,"sequenceIndex":143},{"point":[0.730967787376657],"weight":-2.26935484480584,"sequenceIndex":56},{"point":[0.730967787376657],"weight":-1.1981617691568691,"sequenceIndex":113},{"point":[0.730967787376657],"weight":-2.151157274248079,"sequenceIndex":14},{"point":[0.730967787376657],"weight":-1.290834136451234,"sequenceIndex":229},{"point":[0.730967787376657],"weight":-1.267548261015881,"sequenceIndex":29},{"point":[0.730967787376657],"weight":-5.397343591307884,"sequenceIndex":117},{"point":[0.730967787376657],"weight":-3.3943944189931767,"sequenceIndex":59},{"point":[0.730967787376657],"weight":-2.1478382893980976,"sequenceIndex":149},{"point":[0.730967787376657],"weight":-2.140847002833952,"sequenceIndex":30},{"point":[0.730967787376657],"weight":-2.0474000822824414,"sequenceIndex":170},{"point":[0.730967787376657],"weight":-1.3185312276333938,"sequenceIndex":195},{"point":[0.730967787376657],"weight":-2.360756467964179,"sequenceIndex":139},{"point":[0.730967787376657],"weight":-2.0257346459123227,"sequenceIndex":124},{"point":[0.730967787376657],"weight":-1.124625706275347,"sequenceIndex":7},{"point":[0.730967787376657],"weight":-2.483810465104045,"sequenceIndex":126},{"point":[0.730967787376657],"weight":-2.9020802121262603,"sequenceIndex":127},{"point":[0.730967787376657],"weight":-2.587806609563866,"sequenceIndex":253}],"sampleSize":128,"lambda":7.8125E-4,"random":{},"entriesSeen":256},"tree":{"storeSequenceIndexesEnabled":false,"centerOfMassEnabled":false,"random":{}}},{"sampler":{"weightedSamples":[{"point":[0.730967787376657],"weight":-0.5985264608618716,"sequenceIndex":187},{"point":[0.730967787376657],"weight":-0.615465415186054,"sequenceIndex":38},{"point":[0.730967787376657],"weight":-0.625204706664254,"sequenceIndex":58},{"point":[0.730967787376657],"weight":-0.6607211807536036,"sequenceIndex":139},{"point":[0.730967787376657],"weight":-0.733160628441427,"sequenceIndex":41},{"point":[0.730967787376657],"weight":-0.7480832721878428,"sequenceIndex":97},{"point":[0.730967787376657],"weight":-0.6325616318481434,"sequenceIndex":6},{"point":[0.730967787376657],"weight":-0.7193981196282556,"sequenceIndex":240},{"point":[0.730967787376657],"weight":-0.6885276533420687,"sequenceIndex":9},{"point":[0.730967787376657],"weight":-0.8056386432673962,"sequenceIndex":142},{"point":[0.730967787376657],"weight":-0.7362779855939124,"sequenceIndex":217},{"point":[0.730967787376657],"weight":-0.7815833847203907,"sequenceIndex":100},{"point":[0.730967787376657],"weight":-0.7769513245185988,"sequenceIndex":182},{"point":[0.730967787376657],"weight":-0.8131585148052826,"sequenceIndex":59},{"point":[0.730967787376657],"weight":-0.6435557257986289,"sequenceIndex":140},{"point":[0.730967787376657],"weight":-0.8668465474750551,"sequenceIndex":251},{"point":[0.730967787376657],"weight":-0.7658044113572764,"sequenceIndex":69},{"point":[0.730967787376657],"weight":-1.1130536934540707,"sequenceIndex":248},{"point":[0.730967787376657],"weight":-1.3264814615748264,"sequenceIndex":76},{"point":[0.730967787376657],"weight":-1.0225278522462662,"sequenceIndex":81},{"point":[0.730967787376657],"weight":-0.9380905114169368,"sequenceIndex":85},{"point":[0.730967787376657],"weight":-0.8464625795580908,"sequenceIndex":183},{"point":[0.730967787376657],"weight":-0.7810523086260113,"sequenceIndex":161},{"point":[0.730967787376657],"weight":-0.8321548830326747,"sequenceIndex":48},{"point":[0.730967787376657],"weight":-0.9972875472498358,"sequenceIndex":102},{"point":[0.730967787376657],"weight":-1.2028658013867521,"sequenceIndex":53},{"point":[0.730967787376657],"weight":-0.8593616213501847,"sequenceIndex":110},{"point":[0.730967787376657],"weight":-0.9311374707500794,"sequenceIndex":168},{"point":[0.730967787376657],"weight":-0.8245151615771091,"sequenceIndex":118},{"point":[0.730967787376657],"weight":-1.0701641033028275,"sequenceIndex":121},{"point":[0.730967787376657],"weight":-0.8153430225018521,"sequenceIndex":30},{"point":[0.730967787376657],"weight":-0.9397506564791762,"sequenceIndex":171},{"point":[0.730967787376657],"weight":-1.1523355310972445,"sequenceIndex":136},{"point":[0.730967787376657],"weight":-2.316954632148596,"sequenceIndex":68},{"point":[0.730967787376657],"weight":-1.8314474044923728,"sequenceIndex":35},{"point":[0.730967787376657],"weight":-1.326711152224425,"sequenceIndex":73},{"point":[0.730967787376657],"weight":-1.2134507405359918,"sequenceIndex":75},{"point":[0.730967787376657],"weight":-1.626959895492517,"sequenceIndex":250},{"point":[0.730967787376657],"weight":-1.5162848218519063,"sequenceIndex":218},{"point":[0.730967787376657],"weight":-1.2772461870862388,"sequenceIndex":242},{"point":[0.730967787376657],"weight":-1.1080125965525818,"sequenceIndex":82},{"point":[0.730967787376657],"weight":-1.2998345738957846,"sequenceIndex":21},{"point":[0.730967787376657],"weight":-0.9812996271662214,"sequenceIndex":190},{"point":[0.730967787376657],"weight":-2.2278572984856244,"sequenceIndex":164},{"point":[0.730967787376657],"weight":-1.1219028418402184,"sequenceIndex":22},{"point":[0.730967787376657],"weight":-1.6718262150903234,"sequenceIndex":93},{"point":[0.730967787376657],"weight":-0.8092366561749608,"sequenceIndex":130},{"point":[0.730967787376657],"weight":-1.7042290920001961,"sequenceIndex":224},{"point":[0.730967787376657],"weight":-1.1284334029091072,"sequenceIndex":49},{"point":[0.730967787376657],"weight":-1.7484122763210357,"sequenceIndex":194},{"point":[0.730967787376657],"weight":-1.3886637751988407,"sequenceIndex":177},{"point":[0.730967787376657],"weight":-1.4217981910445874,"sequenceIndex":105},{"point":[0.730967787376657],"weight":-1.5373913934401326,"sequenceIndex":107},{"point":[0.730967787376657],"weight":-1.3989444547248966,"sequenceIndex":27},{"point":[0.730967787376657],"weight":-1.8074422437180981,"sequenceIndex":178},{"point":[0.730967787376657],"weight":-1.679420992783001,"sequenceIndex":200},{"point":[0.730967787376657],"weight":-1.9511251892246928,"sequenceIndex":28},{"point":[0.730967787376657],"weight":-1.2371073862759325,"sequenceIndex":14},{"point":[0.730967787376657],"weight":-1.2344317469294006,"sequenceIndex":138},{"point":[0.730967787376657],"weight":-1.1589815376608552,"sequenceIndex":169},{"point":[0.730967787376657],"weight":-1.2631471501920901,"sequenceIndex":123},{"point":[0.730967787376657],"weight":-0.8304423409650232,"sequenceIndex":184},{"point":[0.730967787376657],"weight":-1.1564083342852114,"sequenceIndex":126},{"point":[0.730967787376657],"weight":-1.036703450288186,"sequenceIndex":221},{"point":[0.730967787376657],"weight":-1.322122992816131,"sequenceIndex":65},{"point":[0.730967787376657],"weight":-3.145799497288541,"sequenceIndex":66},{"point":[0.730967787376657],"weight":-1.691756943600974,"sequenceIndex":247},{"point":[0.730967787376657],"weight":-3.211854154948815,"sequenceIndex":241},{"point":[0.730967787376657],"weight":-3.248461775753026,"sequenceIndex":233},{"point":[0.730967787376657],"weight":-2.719806894941148,"sequenceIndex":70},{"point":[0.730967787376657],"weight":-5.312553852349928,"sequenceIndex":71},{"point":[0.730967787376657],"weight":-2.268553294124917,"sequenceIndex":72},{"point":[0.730967787376657],"weight":-2.1120999390493895,"sequenceIndex":204},{"point":[0.730967787376657],"weight":-1.3561565828717814,"sequenceIndex":137},{"point":[0.730967787376657],"weight":-1.3604758053002233,"sequenceIndex":167},{"point":[0.730967787376657],"weight":-1.8024687103424943,"sequenceIndex":202},{"point":[0.730967787376657],"weight":-1.7300277061884552,"sequenceIndex":175},{"point":[0.730967787376657],"weight":-4.1307798278778805,"sequenceIndex":78},{"point":[0.730967787376657],"weight":-2.078669677058207,"sequenceIndex":181},{"point":[0.730967787376657],"weight":-2.588885942101912,"sequenceIndex":10},{"point":[0.730967787376657],"weight":-1.7364668927308655,"sequenceIndex":185},{"point":[0.730967787376657],"weight":-1.6507344879517971,"sequenceIndex":40},{"point":[0.730967787376657],"weight":-1.5287782808620034,"sequenceIndex":207},{"point":[0.730967787376657],"weight":-2.2114927391136256,"sequenceIndex":84},{"point":[0.730967787376657],"weight":-1.3599906458023305,"sequenceIndex":205},{"point":[0.730967787376657],"weight":-1.0342693440838253,"sequenceIndex":162},{"point":[0.730967787376657],"weight":-4.79201572030283,"sequenceIndex":87},{"point":[0.730967787376657],"weight":-4.842644249601919,"sequenceIndex":11},{"point":[0.730967787376657],"weight":-2.676810673238077,"sequenceIndex":89},{"point":[0.730967787376657],"weight":-1.564581587789824,"sequenceIndex":214},{"point":[0.730967787376657],"weight":-1.6567079533794447,"sequenceIndex":131},{"point":[0.730967787376657],"weight":-1.7954119545786797,"sequenceIndex":23},{"point":[0.730967787376657],"weight":-2.264780282394174,"sequenceIndex":230},{"point":[0.730967787376657],"weight":-0.966199857303043,"sequenceIndex":47},{"point":[0.730967787376657],"weight":-1.5679483913216696,"sequenceIndex":95},{"point":[0.730967787376657],"weight":-1.910152645490697,"sequenceIndex":3},{"point":[0.730967787376657],"weight":-2.2927364970699338,"sequenceIndex":229},{"point":[0.730967787376657],"weight":-2.120325437765966,"sequenceIndex":98},{"point":[0.730967787376657],"weight":-1.3703646844968707,"sequenceIndex":155},{"point":[0.730967787376657],"weight":-2.3943631962318888,"sequenceIndex":226},{"point":[0.730967787376657],"weight":-2.053515729627891,"sequenceIndex":143},{"point":[0.730967787376657],"weight":-3.759263291488838,"sequenceIndex":236},{"point":[0.730967787376657],"weight":-1.506369481053324,"sequenceIndex":103},{"point":[0.730967787376657],"weight":-3.030206356761602,"sequenceIndex":13},{"point":[0.730967787376657],"weight":-1.9131448631241217,"sequenceIndex":199},{"point":[0.730967787376657],"weight":-2.196162489799756,"sequenceIndex":106},{"point":[0.730967787376657],"weight":-3.052886608795893,"sequenceIndex":220},{"point":[0.730967787376657],"weight":-1.7886503777424005,"sequenceIndex":108},{"point":[0.730967787376657],"weight":-2.248530297075843,"sequenceIndex":170},{"point":[0.730967787376657],"weight":-1.9429986841137883,"sequenceIndex":55},{"point":[0.730967787376657],"weight":-3.248926202319391,"sequenceIndex":111},{"point":[0.730967787376657],"weight":-2.6390378660572513,"sequenceIndex":56},{"point":[0.730967787376657],"weight":-3.166156732978181,"sequenceIndex":147},{"point":[0.730967787376657],"weight":-2.4512067116069063,"sequenceIndex":114},{"point":[0.730967787376657],"weight":-2.450951925842845,"sequenceIndex":115},{"point":[0.730967787376657],"weight":-1.3142009826350793,"sequenceIndex":116},{"point":[0.730967787376657],"weight":-11.100537658413634,"sequenceIndex":117},{"point":[0.730967787376657],"weight":-1.809087501964695,"sequenceIndex":172},{"point":[0.730967787376657],"weight":-1.359180667725009,"sequenceIndex":231},{"point":[0.730967787376657],"weight":-3.583521083746113,"sequenceIndex":60},{"point":[0.730967787376657],"weight":-2.575616959010276,"sequenceIndex":195},{"point":[0.730967787376657],"weight":-2.2581780572127714,"sequenceIndex":15},{"point":[0.730967787376657],"weight":-1.852358522657793,"sequenceIndex":122},{"point":[0.730967787376657],"weight":-3.1584149942851614,"sequenceIndex":198},{"point":[0.730967787376657],"weight":-2.5294921040588036,"sequenceIndex":174},{"point":[0.730967787376657],"weight":-1.6855953759777917,"sequenceIndex":165},{"point":[0.730967787376657],"weight":-1.7149246688464164,"sequenceIndex":8},{"point":[0.730967787376657],"weight":-2.148210641758875,"sequenceIndex":253}],"sampleSize":128,"lambda":7.8125E-4,"random":{},"entriesSeen":256},"tree":{"storeSequenceIndexesEnabled":false,"centerOfMassEnabled":false,"random":{}}},{"sampler":{"weightedSamples":[{"point":[0.730967787376657],"weight":-0.5283790698673042,"sequenceIndex":233},{"point":[0.730967787376657],"weight":-0.5832034273251664,"sequenceIndex":129},{"point":[0.730967787376657],"weight":-0.5474141953972866,"sequenceIndex":208},{"point":[0.730967787376657],"weight":-0.5922845535196044,"sequenceIndex":194},{"point":[0.730967787376657],"weight":-0.6150736460452414,"sequenceIndex":89},{"point":[0.730967787376657],"weight":-0.5531826654629085,"sequenceIndex":6},{"point":[0.730967787376657],"weight":-0.5866327815696623,"sequenceIndex":160},{"point":[0.730967787376657],"weight":-0.6108585289498049,"sequenceIndex":134},{"point":[0.730967787376657],"weight":-0.6453437745690954,"sequenceIndex":152},{"point":[0.730967787376657],"weight":-0.8362568824620145,"sequenceIndex":176},{"point":[0.730967787376657],"weight":-0.710532486879776,"sequenceIndex":141},{"point":[0.730967787376657],"weight":-0.6155600216231422,"sequenceIndex":199},{"point":[0.730967787376657],"weight":-0.7510778596262119,"sequenceIndex":26},{"point":[0.730967787376657],"weight":-0.630079658220941,"sequenceIndex":195},{"point":[0.730967787376657],"weight":-0.588122740722473,"sequenceIndex":161},{"point":[0.730967787376657],"weight":-0.6215114902853656,"sequenceIndex":241},{"point":[0.730967787376657],"weight":-1.4202925291514323,"sequenceIndex":68},{"point":[0.730967787376657],"weight":-1.1377901907912291,"sequenceIndex":75},{"point":[0.730967787376657],"weight":-0.8121381866448434,"sequenceIndex":211},{"point":[0.730967787376657],"weight":-0.8491147178382328,"sequenceIndex":83},{"point":[0.730967787376657],"weight":-1.2464890600428453,"sequenceIndex":173},{"point":[0.730967787376657],"weight":-0.7846918712032219,"sequenceIndex":91},{"point":[0.730967787376657],"weight":-0.7789084079157159,"sequenceIndex":187},{"point":[0.730967787376657],"weight":-1.1579854162006977,"sequenceIndex":49},{"point":[0.730967787376657],"weight":-0.8115611112138372,"sequenceIndex":151},{"point":[0.730967787376657],"weight":-0.7690804551726946,"sequenceIndex":185},{"point":[0.730967787376657],"weight":-0.7885371679085424,"sequenceIndex":111},{"point":[0.730967787376657],"weight":-0.6855211333101923,"sequenceIndex":163},{"point":[0.730967787376657],"weight":-0.6995709990840997,"sequenceIndex":118},{"point":[0.730967787376657],"weight":-0.7235407934970841,"sequenceIndex":1},{"point":[0.730967787376657],"weight":-0.7087118675377284,"sequenceIndex":63},{"point":[0.730967787376657],"weight":-0.6608240853459527,"sequenceIndex":237},{"point":[0.730967787376657],"weight":-1.3220963866287594,"sequenceIndex":216},{"point":[0.730967787376657],"weight":-1.670563651323393,"sequenceIndex":16},{"point":[0.730967787376657],"weight":-1.5628511063673614,"sequenceIndex":71},{"point":[0.730967787376657],"weight":-1.4321612217549893,"sequenceIndex":18},{"point":[0.730967787376657],"weight":-1.1440136571683723,"sequenceIndex":74},{"point":[0.730967787376657],"weight":-0.965831115718165,"sequenceIndex":39},{"point":[0.730967787376657],"weight":-0.9509275092884122,"sequenceIndex":210},{"point":[0.730967787376657],"weight":-1.2868413359303235,"sequenceIndex":203},{"point":[0.730967787376657],"weight":-1.1078335397778052,"sequenceIndex":20},{"point":[0.730967787376657],"weight":-1.9603082104295482,"sequenceIndex":162},{"point":[0.730967787376657],"weight":-1.4989088299614424,"sequenceIndex":86},{"point":[0.730967787376657],"weight":-2.8795992951804763,"sequenceIndex":88},{"point":[0.730967787376657],"weight":-0.8005241626249846,"sequenceIndex":90},{"point":[0.730967787376657],"weight":-0.9110028293271484,"sequenceIndex":46},{"point":[0.730967787376657],"weight":-1.5500177128238206,"sequenceIndex":95},{"point":[0.730967787376657],"weight":-2.0821876575951728,"sequenceIndex":96},{"point":[0.730967787376657],"weight":-1.6710969228000347,"sequenceIndex":48},{"point":[0.730967787376657],"weight":-1.1464749795360702,"sequenceIndex":137},{"point":[0.730967787376657],"weight":-1.6756244789012817,"sequenceIndex":178},{"point":[0.730967787376657],"weight":-1.2624159202767733,"sequenceIndex":104},{"point":[0.730967787376657],"weight":-1.0850305976783523,"sequenceIndex":106},{"point":[0.730967787376657],"weight":-1.7245529533088575,"sequenceIndex":109},{"point":[0.730967787376657],"weight":-1.3951111831950997,"sequenceIndex":239},{"point":[0.730967787376657],"weight":-1.40470422374607,"sequenceIndex":204},{"point":[0.730967787376657],"weight":-1.1160360650816148,"sequenceIndex":57},{"point":[0.730967787376657],"weight":-1.9253243289840702,"sequenceIndex":117},{"point":[0.730967787376657],"weight":-0.7378272130969655,"sequenceIndex":249},{"point":[0.730967787376657],"weight":-0.7346795097456673,"sequenceIndex":15},{"point":[0.730967787376657],"weight":-0.7764133410508264,"sequenceIndex":219},{"point":[0.730967787376657],"weight":-3.8429264216929373,"sequenceIndex":125},{"point":[0.730967787376657],"weight":-1.0385050701051306,"sequenceIndex":135},{"point":[0.730967787376657],"weight":-0.6969834762685099,"sequenceIndex":247},{"point":[0.730967787376657],"weight":-6.35699953839354,"sequenceIndex":214},{"point":[0.730967787376657],"weight":-1.4634656200358822,"sequenceIndex":33},{"point":[0.730967787376657],"weight":-2.4045250577802393,"sequenceIndex":164},{"point":[0.730967787376657],"weight":-1.7517765107202783,"sequenceIndex":34},{"point":[0.730967787376657],"weight":-3.3897140111859247,"sequenceIndex":172},{"point":[0.730967787376657],"weight":-1.8441584328862697,"sequenceIndex":35},{"point":[0.730967787376657],"weight":-1.6854919260764845,"sequenceIndex":133},{"point":[0.730967787376657],"weight":-4.961745468835444,"sequenceIndex":250},{"point":[0.730967787376657],"weight":-1.5910279832906564,"sequenceIndex":229},{"point":[0.730967787376657],"weight":-3.7924850897350972,"sequenceIndex":37},{"point":[0.730967787376657],"weight":-1.3570287941044237,"sequenceIndex":252},{"point":[0.730967787376657],"weight":-5.607516119649087,"sequenceIndex":38},{"point":[0.730967787376657],"weight":-1.9895798635165223,"sequenceIndex":77},{"point":[0.730967787376657],"weight":-1.3683304133117626,"sequenceIndex":9},{"point":[0.730967787376657],"weight":-1.4336565162979449,"sequenceIndex":79},{"point":[0.730967787376657],"weight":-2.8068722546750946,"sequenceIndex":80},{"point":[0.730967787376657],"weight":-2.2797193301013707,"sequenceIndex":10},{"point":[0.730967787376657],"weight":-1.2387948278325365,"sequenceIndex":221},{"point":[0.730967787376657],"weight":-1.1833709647635144,"sequenceIndex":197},{"point":[0.730967787376657],"weight":-2.0485392361363637,"sequenceIndex":21},{"point":[0.730967787376657],"weight":-4.071480076750943,"sequenceIndex":85},{"point":[0.730967787376657],"weight":-1.875743005891659,"sequenceIndex":43},{"point":[0.730967787376657],"weight":-2.6318139228367685,"sequenceIndex":184},{"point":[0.730967787376657],"weight":-3.9948897800585685,"sequenceIndex":22},{"point":[0.730967787376657],"weight":-3.2064866362247155,"sequenceIndex":166},{"point":[0.730967787376657],"weight":-3.5634880439089582,"sequenceIndex":45},{"point":[0.730967787376657],"weight":-2.522650888350291,"sequenceIndex":228},{"point":[0.730967787376657],"weight":-1.8379536503428568,"sequenceIndex":92},{"point":[0.730967787376657],"weight":-4.6798758905911875,"sequenceIndex":150},{"point":[0.730967787376657],"weight":-1.6128456536202669,"sequenceIndex":47},{"point":[0.730967787376657],"weight":-2.071941594450168,"sequenceIndex":230},{"point":[0.730967787376657],"weight":-2.303329756547118,"sequenceIndex":24},{"point":[0.730967787376657],"weight":-2.215541768606544,"sequenceIndex":155},{"point":[0.730967787376657],"weight":-4.8357711554975715,"sequenceIndex":132},{"point":[0.730967787376657],"weight":-5.468685178714277,"sequenceIndex":99},{"point":[0.730967787376657],"weight":-3.277169964918438,"sequenceIndex":100},{"point":[0.730967787376657],"weight":-1.2704088520641788,"sequenceIndex":12},{"point":[0.730967787376657],"weight":-2.1309822209848033,"sequenceIndex":226},{"point":[0.730967787376657],"weight":-2.7617031898399165,"sequenceIndex":8},{"point":[0.730967787376657],"weight":-1.4610545792647693,"sequenceIndex":220},{"point":[0.730967787376657],"weight":-4.060998916292974,"sequenceIndex":105},{"point":[0.730967787376657],"weight":-1.3869224350790204,"sequenceIndex":53},{"point":[0.730967787376657],"weight":-2.3938442920911585,"sequenceIndex":240},{"point":[0.730967787376657],"weight":-2.723964835607138,"sequenceIndex":136},{"point":[0.730967787376657],"weight":-2.7869538457534277,"sequenceIndex":232},{"point":[0.730967787376657],"weight":-3.360745478355683,"sequenceIndex":110},{"point":[0.730967787376657],"weight":-1.6834853610196907,"sequenceIndex":215},{"point":[0.730967787376657],"weight":-4.836005092709841,"sequenceIndex":56},{"point":[0.730967787376657],"weight":-1.9652209758734123,"sequenceIndex":112},{"point":[0.730967787376657],"weight":-2.7790992880483327,"sequenceIndex":157},{"point":[0.730967787376657],"weight":-1.8639301357713143,"sequenceIndex":130},{"point":[0.730967787376657],"weight":-2.288098088367965,"sequenceIndex":116},{"point":[0.730967787376657],"weight":-2.932267203238342,"sequenceIndex":191},{"point":[0.730967787376657],"weight":-1.883441085035591,"sequenceIndex":59},{"point":[0.730967787376657],"weight":-4.067094925776925,"sequenceIndex":246},{"point":[0.730967787376657],"weight":-1.6940279892104295,"sequenceIndex":120},{"point":[0.730967787376657],"weight":-0.8517648161034913,"sequenceIndex":222},{"point":[0.730967787376657],"weight":-1.2987935805571151,"sequenceIndex":202},{"point":[0.730967787376657],"weight":-1.7511471803591436,"sequenceIndex":201},{"point":[0.730967787376657],"weight":-4.634113632224792,"sequenceIndex":190},{"point":[0.730967787376657],"weight":-6.332423883698831,"sequenceIndex":192},{"point":[0.730967787376657],"weight":-1.3315021861810112,"sequenceIndex":126},{"point":[0.730967787376657],"weight":-2.0291078395835487,"sequenceIndex":198},{"point":[0.730967787376657],"weight":-2.1277967895810583,"sequenceIndex":255}],"sampleSize":128,"lambda":7.8125E-4,"random":{},"entriesSeen":256},"tree":{"storeSequenceIndexesEnabled":false,"centerOfMassEnabled":false,"random":{}}},{"sampler":{"weightedSamples":[{"point":[0.730967787376657],"weight":-0.4564533112186506,"sequenceIndex":193},{"point":[0.730967787376657],"weight":-0.46076263231395503,"sequenceIndex":232},{"point":[0.730967787376657],"weight":-0.4638642318769172,"sequenceIndex":166},{"point":[0.730967787376657],"weight":-0.4771009023087702,"sequenceIndex":78},{"point":[0.730967787376657],"weight":-0.47794244150779686,"sequenceIndex":165},{"point":[0.730967787376657],"weight":-0.5691869931949881,"sequenceIndex":97},{"point":[0.730967787376657],"weight":-0.5284267436149688,"sequenceIndex":168},{"point":[0.730967787376657],"weight":-0.48247089897299916,"sequenceIndex":237},{"point":[0.730967787376657],"weight":-0.5981169578320444,"sequenceIndex":143},{"point":[0.730967787376657],"weight":-0.48995281834204857,"sequenceIndex":21},{"point":[0.730967787376657],"weight":-0.7888379259557037,"sequenceIndex":46},{"point":[0.730967787376657],"weight":-0.6539124522733537,"sequenceIndex":171},{"point":[0.730967787376657],"weight":-0.9229577091178605,"sequenceIndex":155},{"point":[0.730967787376657],"weight":-0.6560768309092694,"sequenceIndex":113},{"point":[0.730967787376657],"weight":-0.6965767748338334,"sequenceIndex":123},{"point":[0.730967787376657],"weight":-0.6683590377082833,"sequenceIndex":208},{"point":[0.730967787376657],"weight":-0.7190922802740541,"sequenceIndex":17},{"point":[0.730967787376657],"weight":-0.8365191910529775,"sequenceIndex":72},{"point":[0.730967787376657],"weight":-0.9440887130697458,"sequenceIndex":77},{"point":[0.730967787376657],"weight":-0.5709090632791352,"sequenceIndex":142},{"point":[0.730967787376657],"weight":-0.5230506554459252,"sequenceIndex":173},{"point":[0.730967787376657],"weight":-1.003569663850387,"sequenceIndex":88},{"point":[0.730967787376657],"weight":-0.9909075003322744,"sequenceIndex":93},{"point":[0.730967787376657],"weight":-0.8687512241484613,"sequenceIndex":48},{"point":[0.730967787376657],"weight":-0.6838907307203738,"sequenceIndex":102},{"point":[0.730967787376657],"weight":-1.000771572910703,"sequenceIndex":104},{"point":[0.730967787376657],"weight":-1.1725959951853997,"sequenceIndex":54},{"point":[0.730967787376657],"weight":-0.9998943682854018,"sequenceIndex":215},{"point":[0.730967787376657],"weight":-0.6718063831670658,"sequenceIndex":59},{"point":[0.730967787376657],"weight":-0.7470397446967049,"sequenceIndex":61},{"point":[0.730967787376657],"weight":-0.7060770599636623,"sequenceIndex":156},{"point":[0.730967787376657],"weight":-0.6965812564686975,"sequenceIndex":247},{"point":[0.730967787376657],"weight":-1.3379180910309416,"sequenceIndex":8},{"point":[0.730967787376657],"weight":-0.9999315273551973,"sequenceIndex":34},{"point":[0.730967787376657],"weight":-0.835304219597804,"sequenceIndex":185},{"point":[0.730967787376657],"weight":-1.010748853150331,"sequenceIndex":188},{"point":[0.730967787376657],"weight":-0.9954971666772627,"sequenceIndex":37},{"point":[0.730967787376657],"weight":-1.0753536667749999,"sequenceIndex":228},{"point":[0.730967787376657],"weight":-1.4279460944197442,"sequenceIndex":79},{"point":[0.730967787376657],"weight":-0.758448406610987,"sequenceIndex":243},{"point":[0.730967787376657],"weight":-1.0231410374115144,"sequenceIndex":82},{"point":[0.730967787376657],"weight":-0.8206826560081675,"sequenceIndex":159},{"point":[0.730967787376657],"weight":-0.5670268460862107,"sequenceIndex":204},{"point":[0.730967787376657],"weight":-1.1531211935539862,"sequenceIndex":136},{"point":[0.730967787376657],"weight":-1.2523429784552362,"sequenceIndex":164},{"point":[0.730967787376657],"weight":-1.0672006868947967,"sequenceIndex":23},{"point":[0.730967787376657],"weight":-1.0342451591852915,"sequenceIndex":95},{"point":[0.730967787376657],"weight":-1.0003836575468563,"sequenceIndex":3},{"point":[0.730967787376657],"weight":-1.1212611072552192,"sequenceIndex":216},{"point":[0.730967787376657],"weight":-0.8362438309608461,"sequenceIndex":25},{"point":[0.730967787376657],"weight":-1.5331948861981242,"sequenceIndex":202},{"point":[0.730967787376657],"weight":-1.0015736989294703,"sequenceIndex":105},{"point":[0.730967787376657],"weight":-1.257712164038836,"sequenceIndex":163},{"point":[0.730967787376657],"weight":-1.4707661135109953,"sequenceIndex":27},{"point":[0.730967787376657],"weight":-1.329963082561126,"sequenceIndex":110},{"point":[0.730967787376657],"weight":-1.9192588514465831,"sequenceIndex":7},{"point":[0.730967787376657],"weight":-2.047826702649652,"sequenceIndex":115},{"point":[0.730967787376657],"weight":-0.6927443623430289,"sequenceIndex":144},{"point":[0.730967787376657],"weight":-1.0571057310106935,"sequenceIndex":58},{"point":[0.730967787376657],"weight":-1.4488410506610538,"sequenceIndex":161},{"point":[0.730967787376657],"weight":-1.307820826668597,"sequenceIndex":214},{"point":[0.730967787376657],"weight":-0.7466049227419639,"sequenceIndex":60},{"point":[0.730967787376657],"weight":-0.8905802766076513,"sequenceIndex":127},{"point":[0.730967787376657],"weight":-1.3540558918728627,"sequenceIndex":250},{"point":[0.730967787376657],"weight":-2.6627978525894083,"sequenceIndex":206},{"point":[0.730967787376657],"weight":-2.2138853015899898,"sequenceIndex":172},{"point":[0.730967787376657],"weight":-2.298380471841719,"sequenceIndex":149},{"point":[0.730967787376657],"weight":-1.778870119993746,"sequenceIndex":211},{"point":[0.730967787376657],"weight":-4.567756325652653,"sequenceIndex":183},{"point":[0.730967787376657],"weight":-3.2026137158619292,"sequenceIndex":35},{"point":[0.730967787376657],"weight":-3.496362043851107,"sequenceIndex":174},{"point":[0.730967787376657],"weight":-1.4313134861413737,"sequenceIndex":253},{"point":[0.730967787376657],"weight":-1.5986853152754252,"sequenceIndex":160},{"point":[0.730967787376657],"weight":-2.156429128403296,"sequenceIndex":146},{"point":[0.730967787376657],"weight":-3.0263784188635987,"sequenceIndex":75},{"point":[0.730967787376657],"weight":-1.3434756092039075,"sequenceIndex":76},{"point":[0.730967787376657],"weight":-2.7272800135435435,"sequenceIndex":179},{"point":[0.730967787376657],"weight":-1.9058758858766665,"sequenceIndex":39},{"point":[0.730967787376657],"weight":-2.2716461651090327,"sequenceIndex":207},{"point":[0.730967787376657],"weight":-3.378197777795787,"sequenceIndex":80},{"point":[0.730967787376657],"weight":-3.0994294339709754,"sequenceIndex":197},{"point":[0.730967787376657],"weight":-6.98561347392969,"sequenceIndex":41},{"point":[0.730967787376657],"weight":-1.5685021213353956,"sequenceIndex":225},{"point":[0.730967787376657],"weight":-2.963071690967249,"sequenceIndex":219},{"point":[0.730967787376657],"weight":-4.474169277217052,"sequenceIndex":85},{"point":[0.730967787376657],"weight":-1.3244400617001664,"sequenceIndex":192},{"point":[0.730967787376657],"weight":-1.8565117523050025,"sequenceIndex":252},{"point":[0.730967787376657],"weight":-4.8482732751269655,"sequenceIndex":44},{"point":[0.730967787376657],"weight":-4.513852599658036,"sequenceIndex":222},{"point":[0.730967787376657],"weight":-4.080305328414731,"sequenceIndex":90},{"point":[0.730967787376657],"weight":-4.380216405083996,"sequenceIndex":91},{"point":[0.730967787376657],"weight":-2.1493544636885256,"sequenceIndex":234},{"point":[0.730967787376657],"weight":-2.3228992772203063,"sequenceIndex":32},{"point":[0.730967787376657],"weight":-1.1258082712982536,"sequenceIndex":94},{"point":[0.730967787376657],"weight":-2.7471961804219927,"sequenceIndex":205},{"point":[0.730967787376657],"weight":-3.0821017390571432,"sequenceIndex":96},{"point":[0.730967787376657],"weight":-1.6010361781647608,"sequenceIndex":217},{"point":[0.730967787376657],"weight":-2.488826856392909,"sequenceIndex":49},{"point":[0.730967787376657],"weight":-2.3367415898110298,"sequenceIndex":98},{"point":[0.730967787376657],"weight":-1.5919171700470434,"sequenceIndex":50},{"point":[0.730967787376657],"weight":-1.1759636015385062,"sequenceIndex":153},{"point":[0.730967787376657],"weight":-3.0635118465528874,"sequenceIndex":51},{"point":[0.730967787376657],"weight":-3.8979262408845794,"sequenceIndex":103},{"point":[0.730967787376657],"weight":-1.4184718250282926,"sequenceIndex":13},{"point":[0.730967787376657],"weight":-2.571767385957578,"sequenceIndex":220},{"point":[0.730967787376657],"weight":-3.4902256424972267,"sequenceIndex":106},{"point":[0.730967787376657],"weight":-1.3856735738634032,"sequenceIndex":26},{"point":[0.730967787376657],"weight":-5.5186087251029265,"sequenceIndex":203},{"point":[0.730967787376657],"weight":-2.7563269982628293,"sequenceIndex":140},{"point":[0.730967787376657],"weight":-1.6736753331100376,"sequenceIndex":55},{"point":[0.730967787376657],"weight":-1.8607495732673476,"sequenceIndex":132},{"point":[0.730967787376657],"weight":-3.1886520307463404,"sequenceIndex":56},{"point":[0.730967787376657],"weight":-2.1157494441437277,"sequenceIndex":112},{"point":[0.730967787376657],"weight":-3.3210939758322247,"sequenceIndex":57},{"point":[0.730967787376657],"weight":-2.8726538277159386,"sequenceIndex":201},{"point":[0.730967787376657],"weight":-1.762760011335502,"sequenceIndex":28},{"point":[0.730967787376657],"weight":-1.6067843373500255,"sequenceIndex":116},{"point":[0.730967787376657],"weight":-1.2261073809782934,"sequenceIndex":118},{"point":[0.730967787376657],"weight":-3.1583072685325506,"sequenceIndex":119},{"point":[0.730967787376657],"weight":-2.367905526257128,"sequenceIndex":30},{"point":[0.730967787376657],"weight":-2.7174447286017602,"sequenceIndex":254},{"point":[0.730967787376657],"weight":-2.0887604099699466,"sequenceIndex":15},{"point":[0.730967787376657],"weight":-3.5224944463821783,"sequenceIndex":170},{"point":[0.730967787376657],"weight":-2.1093448345704444,"sequenceIndex":31},{"point":[0.730967787376657],"weight":-2.146547906123566,"sequenceIndex":240},{"point":[0.730967787376657],"weight":-2.4757461272612784,"sequenceIndex":63},{"point":[0.730967787376657],"weight":-1.57077133974567,"sequenceIndex":147},{"point":[0.730967787376657],"weight":-1.5208190122833167,"sequenceIndex":255}],"sampleSize":128,"lambda":7.8125E-4,"random":{},"entriesSeen":256},"tree":{"storeSequenceIndexesEnabled":false,"centerOfMassEnabled":false,"random":{}}},{"sampler":{"weightedSamples":[{"point":[0.730967787376657],"weight":-0.5318187098873884,"sequenceIndex":133},{"point":[0.730967787376657],"weight":-0.5654904614818087,"sequenceIndex":153},{"point":[0.730967787376657],"weight":-0.533270456609582,"sequenceIndex":179},{"point":[0.730967787376657],"weight":-0.6103578414243609,"sequenceIndex":141},{"point":[0.730967787376657],"weight":-0.5658440270155903,"sequenceIndex":140},{"point":[0.730967787376657],"weight":-0.6001247551108103,"sequenceIndex":164},{"point":[0.730967787376657],"weight":-0.5523562300949072,"sequenceIndex":181},{"point":[0.730967787376657],"weight":-0.6165369745575265,"sequenceIndex":204},{"point":[0.730967787376657],"weight":-0.7447277497372076,"sequenceIndex":36},{"point":[0.730967787376657],"weight":-0.6166447328044925,"sequenceIndex":4},{"point":[0.730967787376657],"weight":-0.6486197556595551,"sequenceIndex":93},{"point":[0.730967787376657],"weight":-0.6290561685252707,"sequenceIndex":146},{"point":[0.730967787376657],"weight":-0.6471219635422167,"sequenceIndex":142},{"point":[0.730967787376657],"weight":-0.5945380249207219,"sequenceIndex":158},{"point":[0.730967787376657],"weight":-0.8448245718399776,"sequenceIndex":200},{"point":[0.730967787376657],"weight":-0.6166307073318523,"sequenceIndex":238},{"point":[0.730967787376657],"weight":-0.6738327393282543,"sequenceIndex":152},{"point":[0.730967787376657],"weight":-0.7789628741625582,"sequenceIndex":162},{"point":[0.730967787376657],"weight":-0.7749481640986031,"sequenceIndex":17},{"point":[0.730967787376657],"weight":-0.6246686799685517,"sequenceIndex":83},{"point":[0.730967787376657],"weight":-0.8688437842905221,"sequenceIndex":84},{"point":[0.730967787376657],"weight":-0.8413489463829863,"sequenceIndex":45},{"point":[0.730967787376657],"weight":-0.694841508708282,"sequenceIndex":46},{"point":[0.730967787376657],"weight":-0.8036711210127871,"sequenceIndex":207},{"point":[0.730967787376657],"weight":-0.633471401476135,"sequenceIndex":102},{"point":[0.730967787376657],"weight":-0.8855730309301386,"sequenceIndex":169},{"point":[0.730967787376657],"weight":-0.7061334644443285,"sequenceIndex":108},{"point":[0.730967787376657],"weight":-0.9182983491062298,"sequenceIndex":115},{"point":[0.730967787376657],"weight":-0.6816110104554199,"sequenceIndex":118},{"point":[0.730967787376657],"weight":-1.0659067991610571,"sequenceIndex":183},{"point":[0.730967787376657],"weight":-0.8815000564995018,"sequenceIndex":63},{"point":[0.730967787376657],"weight":-0.7575890221165628,"sequenceIndex":252},{"point":[0.730967787376657],"weight":-1.5546827256702263,"sequenceIndex":165},{"point":[0.730967787376657],"weight":-1.0280447544235234,"sequenceIndex":196},{"point":[0.730967787376657],"weight":-2.039539637646523,"sequenceIndex":246},{"point":[0.730967787376657],"weight":-1.3187913917852476,"sequenceIndex":235},{"point":[0.730967787376657],"weight":-1.3415373141140017,"sequenceIndex":240},{"point":[0.730967787376657],"weight":-0.9735587648188142,"sequenceIndex":76},{"point":[0.730967787376657],"weight":-0.792519866380562,"sequenceIndex":143},{"point":[0.730967787376657],"weight":-1.2478676467439191,"sequenceIndex":20},{"point":[0.730967787376657],"weight":-0.8919827427300476,"sequenceIndex":41},{"point":[0.730967787376657],"weight":-0.8922528329822433,"sequenceIndex":195},{"point":[0.730967787376657],"weight":-0.9497752916919143,"sequenceIndex":86},{"point":[0.730967787376657],"weight":-1.3706554959479065,"sequenceIndex":88},{"point":[0.730967787376657],"weight":-1.1307496855716188,"sequenceIndex":205},{"point":[0.730967787376657],"weight":-1.8546679880879613,"sequenceIndex":134},{"point":[0.730967787376657],"weight":-0.8378194405718111,"sequenceIndex":47},{"point":[0.730967787376657],"weight":-1.644839363732581,"sequenceIndex":12},{"point":[0.730967787376657],"weight":-0.9964633257296456,"sequenceIndex":150},{"point":[0.730967787376657],"weight":-0.8883569201364916,"sequenceIndex":101},{"point":[0.730967787376657],"weight":-0.687548544220937,"sequenceIndex":67},{"point":[0.730967787376657],"weight":-1.6049262437777745,"sequenceIndex":104},{"point":[0.730967787376657],"weight":-1.7492133810614596,"sequenceIndex":206},{"point":[0.730967787376657],"weight":-0.795179344301267,"sequenceIndex":190},{"point":[0.730967787376657],"weight":-1.3272673411277478,"sequenceIndex":110},{"point":[0.730967787376657],"weight":-1.196686281716323,"sequenceIndex":14},{"point":[0.730967787376657],"weight":-1.4018390531398686,"sequenceIndex":175},{"point":[0.730967787376657],"weight":-0.7764731370838394,"sequenceIndex":116},{"point":[0.730967787376657],"weight":-1.4238734755903029,"sequenceIndex":132},{"point":[0.730967787376657],"weight":-1.1037862898550883,"sequenceIndex":147},{"point":[0.730967787376657],"weight":-1.114646830645598,"sequenceIndex":123},{"point":[0.730967787376657],"weight":-1.2848157669210358,"sequenceIndex":189},{"point":[0.730967787376657],"weight":-1.2129485931720998,"sequenceIndex":168},{"point":[0.730967787376657],"weight":-1.035913781126804,"sequenceIndex":239},{"point":[0.730967787376657],"weight":-2.5418062428343386,"sequenceIndex":8},{"point":[0.730967787376657],"weight":-2.8732071231532967,"sequenceIndex":33},{"point":[0.730967787376657],"weight":-1.8266369956472803,"sequenceIndex":192},{"point":[0.730967787376657],"weight":-2.2150010826434716,"sequenceIndex":16},{"point":[0.730967787376657],"weight":-3.094628062141695,"sequenceIndex":171},{"point":[0.730967787376657],"weight":-2.562062971558999,"sequenceIndex":64},{"point":[0.730967787376657],"weight":-3.0487327596259233,"sequenceIndex":71},{"point":[0.730967787376657],"weight":-2.325190736336864,"sequenceIndex":1},{"point":[0.730967787376657],"weight":-5.229484784928418,"sequenceIndex":73},{"point":[0.730967787376657],"weight":-2.1374409445864595,"sequenceIndex":37},{"point":[0.730967787376657],"weight":-2.374484796755332,"sequenceIndex":131},{"point":[0.730967787376657],"weight":-1.69808309369887,"sequenceIndex":38},{"point":[0.730967787376657],"weight":-1.464948153470899,"sequenceIndex":191},{"point":[0.730967787376657],"weight":-2.4258450238192797,"sequenceIndex":78},{"point":[0.730967787376657],"weight":-1.1484421444778685,"sequenceIndex":199},{"point":[0.730967787376657],"weight":-1.686396918823977,"sequenceIndex":80},{"point":[0.730967787376657],"weight":-3.1482116215087026,"sequenceIndex":81},{"point":[0.730967787376657],"weight":-2.504142570294506,"sequenceIndex":208},{"point":[0.730967787376657],"weight":-1.272799498023884,"sequenceIndex":185},{"point":[0.730967787376657],"weight":-4.468258052541071,"sequenceIndex":21},{"point":[0.730967787376657],"weight":-2.890995241950525,"sequenceIndex":172},{"point":[0.730967787376657],"weight":-1.3237333777706186,"sequenceIndex":43},{"point":[0.730967787376657],"weight":-2.4418159743793493,"sequenceIndex":87},{"point":[0.730967787376657],"weight":-3.3702626213576017,"sequenceIndex":44},{"point":[0.730967787376657],"weight":-2.39382243476584,"sequenceIndex":188},{"point":[0.730967787376657],"weight":-1.7126654585719776,"sequenceIndex":202},{"point":[0.730967787376657],"weight":-2.155226822779673,"sequenceIndex":91},{"point":[0.730967787376657],"weight":-1.8610169376804342,"sequenceIndex":193},{"point":[0.730967787376657],"weight":-2.9730406586984572,"sequenceIndex":210},{"point":[0.730967787376657],"weight":-1.6360892046088826,"sequenceIndex":94},{"point":[0.730967787376657],"weight":-2.5596126561977077,"sequenceIndex":95},{"point":[0.730967787376657],"weight":-2.2733809133032943,"sequenceIndex":222},{"point":[0.730967787376657],"weight":-1.6975984125206027,"sequenceIndex":97},{"point":[0.730967787376657],"weight":-2.440600214527288,"sequenceIndex":98},{"point":[0.730967787376657],"weight":-1.967656617712802,"sequenceIndex":247},{"point":[0.730967787376657],"weight":-2.084122543511944,"sequenceIndex":25},{"point":[0.730967787376657],"weight":-0.9376219294034867,"sequenceIndex":136},{"point":[0.730967787376657],"weight":-3.9207645699585427,"sequenceIndex":177},{"point":[0.730967787376657],"weight":-1.6713603378875577,"sequenceIndex":128},{"point":[0.730967787376657],"weight":-1.6936701840197852,"sequenceIndex":26},{"point":[0.730967787376657],"weight":-2.612725396403457,"sequenceIndex":105},{"point":[0.730967787376657],"weight":-2.1100697253074143,"sequenceIndex":148},{"point":[0.730967787376657],"weight":-1.886622399333592,"sequenceIndex":230},{"point":[0.730967787376657],"weight":-1.3031636990970743,"sequenceIndex":54},{"point":[0.730967787376657],"weight":-1.128643302146683,"sequenceIndex":109},{"point":[0.730967787376657],"weight":-1.569916092183773,"sequenceIndex":55},{"point":[0.730967787376657],"weight":-3.0320690142737985,"sequenceIndex":111},{"point":[0.730967787376657],"weight":-2.3845692170746533,"sequenceIndex":112},{"point":[0.730967787376657],"weight":-3.763823050368068,"sequenceIndex":184},{"point":[0.730967787376657],"weight":-1.6161988773486655,"sequenceIndex":57},{"point":[0.730967787376657],"weight":-2.7911731425990416,"sequenceIndex":255},{"point":[0.730967787376657],"weight":-1.3686698087977756,"sequenceIndex":226},{"point":[0.730967787376657],"weight":-0.9275238833774407,"sequenceIndex":117},{"point":[0.730967787376657],"weight":-2.015708988256981,"sequenceIndex":144},{"point":[0.730967787376657],"weight":-1.4976500116594296,"sequenceIndex":245},{"point":[0.730967787376657],"weight":-2.09859462162153,"sequenceIndex":30},{"point":[0.730967787376657],"weight":-2.9267501629240917,"sequenceIndex":121},{"point":[0.730967787376657],"weight":-2.716211936806261,"sequenceIndex":122},{"point":[0.730967787376657],"weight":-1.5411255083283577,"sequenceIndex":9},{"point":[0.730967787376657],"weight":-1.85545803753371,"sequenceIndex":197},{"point":[0.730967787376657],"weight":-1.9405490108651162,"sequenceIndex":125},{"point":[0.730967787376657],"weight":-1.736027051201294,"sequenceIndex":215},{"point":[0.730967787376657],"weight":-1.4378933858459464,"sequenceIndex":248},{"point":[0.730967787376657],"weight":-1.1995487230563042,"sequenceIndex":256}],"sampleSize":128,"lambda":7.8125E-4,"random":{},"entriesSeen":256},"tree":{"storeSequenceIndexesEnabled":false,"centerOfMassEnabled":false,"random":{}}},{"sampler":{"weightedSamples":[{"point":[0.730967787376657],"weight":-0.3438148465361525,"sequenceIndex":134},{"point":[0.730967787376657],"weight":-0.40256283262134296,"sequenceIndex":256},{"point":[0.730967787376657],"weight":-0.3448981417461847,"sequenceIndex":156},{"point":[0.730967787376657],"weight":-0.4676022121999738,"sequenceIndex":74},{"point":[0.730967787376657],"weight":-0.5579349154193868,"sequenceIndex":171},{"point":[0.730967787376657],"weight":-0.3879423258599878,"sequenceIndex":154},{"point":[0.730967787376657],"weight":-0.35239037498664555,"sequenceIndex":167},{"point":[0.730967787376657],"weight":-0.473846629865774,"sequenceIndex":142},{"point":[0.730967787376657],"weight":-0.597570569571043,"sequenceIndex":76},{"point":[0.730967787376657],"weight":-0.7326715596699891,"sequenceIndex":43},{"point":[0.730967787376657],"weight":-0.8096260909588213,"sequenceIndex":94},{"point":[0.730967787376657],"weight":-0.5092072477673558,"sequenceIndex":6},{"point":[0.730967787376657],"weight":-0.4778477930575075,"sequenceIndex":104},{"point":[0.730967787376657],"weight":-0.382368760757008,"sequenceIndex":116},{"point":[0.730967787376657],"weight":-0.5366555338732443,"sequenceIndex":123},{"point":[0.730967787376657],"weight":-0.5575919135325039,"sequenceIndex":178},{"point":[0.730967787376657],"weight":-0.9477344182198841,"sequenceIndex":169},{"point":[0.730967787376657],"weight":-0.8558885658357751,"sequenceIndex":249},{"point":[0.730967787376657],"weight":-0.7930792976884375,"sequenceIndex":176},{"point":[0.730967787376657],"weight":-0.9237541246817846,"sequenceIndex":80},{"point":[0.730967787376657],"weight":-0.8607786803974451,"sequenceIndex":87},{"point":[0.730967787376657],"weight":-0.8133282474589802,"sequenceIndex":11},{"point":[0.730967787376657],"weight":-1.2031497698758342,"sequenceIndex":95},{"point":[0.730967787376657],"weight":-0.6480489618745867,"sequenceIndex":99},{"point":[0.730967787376657],"weight":-1.0323245143212925,"sequenceIndex":248},{"point":[0.730967787376657],"weight":-0.5294206686322864,"sequenceIndex":165},{"point":[0.730967787376657],"weight":-1.1834353980757137,"sequenceIndex":128},{"point":[0.730967787376657],"weight":-0.6737984970195576,"sequenceIndex":161},{"point":[0.730967787376657],"weight":-0.7623414563824161,"sequenceIndex":15},{"point":[0.730967787376657],"weight":-0.6371784036969197,"sequenceIndex":120},{"point":[0.730967787376657],"weight":-0.6304918152038705,"sequenceIndex":127},{"point":[0.730967787376657],"weight":-0.6807530101585866,"sequenceIndex":129},{"point":[0.730967787376657],"weight":-1.0366189504259227,"sequenceIndex":234},{"point":[0.730967787376657],"weight":-1.1967142394461303,"sequenceIndex":201},{"point":[0.730967787376657],"weight":-1.5111367158954252,"sequenceIndex":242},{"point":[0.730967787376657],"weight":-1.1232297311371753,"sequenceIndex":18},{"point":[0.730967787376657],"weight":-1.2556348998043156,"sequenceIndex":158},{"point":[0.730967787376657],"weight":-0.8341757444767626,"sequenceIndex":253},{"point":[0.730967787376657],"weight":-1.2961935698116283,"sequenceIndex":145},{"point":[0.730967787376657],"weight":-1.154503288081514,"sequenceIndex":10},{"point":[0.730967787376657],"weight":-0.963725749466751,"sequenceIndex":82},{"point":[0.730967787376657],"weight":-0.8797938314075873,"sequenceIndex":20},{"point":[0.730967787376657],"weight":-1.1748981203257358,"sequenceIndex":193},{"point":[0.730967787376657],"weight":-0.8386252196693483,"sequenceIndex":44},{"point":[0.730967787376657],"weight":-1.2668316406345985,"sequenceIndex":45},{"point":[0.730967787376657],"weight":-2.042371558438259,"sequenceIndex":153},{"point":[0.730967787376657],"weight":-1.8698895136103657,"sequenceIndex":223},{"point":[0.730967787376657],"weight":-1.3517448278297186,"sequenceIndex":96},{"point":[0.730967787376657],"weight":-0.7701745073185721,"sequenceIndex":219},{"point":[0.730967787376657],"weight":-1.1511600702206355,"sequenceIndex":25},{"point":[0.730967787376657],"weight":-1.2334088961519125,"sequenceIndex":173},{"point":[0.730967787376657],"weight":-1.1608043028973976,"sequenceIndex":105},{"point":[0.730967787376657],"weight":-0.803838323813835,"sequenceIndex":107},{"point":[0.730967787376657],"weight":-1.2670795251900904,"sequenceIndex":187},{"point":[0.730967787376657],"weight":-1.872344982470206,"sequenceIndex":55},{"point":[0.730967787376657],"weight":-0.7801907886711229,"sequenceIndex":113},{"point":[0.730967787376657],"weight":-0.8705286645973387,"sequenceIndex":115},{"point":[0.730967787376657],"weight":-0.889031907749118,"sequenceIndex":229},{"point":[0.730967787376657],"weight":-0.9162734031523211,"sequenceIndex":59},{"point":[0.730967787376657],"weight":-1.0852716552114023,"sequenceIndex":30},{"point":[0.730967787376657],"weight":-1.0035958260595395,"sequenceIndex":214},{"point":[0.730967787376657],"weight":-1.036787672581167,"sequenceIndex":14},{"point":[0.730967787376657],"weight":-1.5994442119491956,"sequenceIndex":221},{"point":[0.730967787376657],"weight":-0.6994415620744231,"sequenceIndex":237},{"point":[0.730967787376657],"weight":-2.509168714923339,"sequenceIndex":195},{"point":[0.730967787376657],"weight":-1.3051564634417543,"sequenceIndex":66},{"point":[0.730967787376657],"weight":-4.569617658135123,"sequenceIndex":189},{"point":[0.730967787376657],"weight":-1.4057061283402454,"sequenceIndex":68},{"point":[0.730967787376657],"weight":-1.298339772596517,"sequenceIndex":34},{"point":[0.730967787376657],"weight":-1.689284124523941,"sequenceIndex":70},{"point":[0.730967787376657],"weight":-1.6367216484219196,"sequenceIndex":71},{"point":[0.730967787376657],"weight":-1.2397914568545862,"sequenceIndex":36},{"point":[0.730967787376657],"weight":-2.8129772472154912,"sequenceIndex":73},{"point":[0.730967787376657],"weight":-4.154682816367456,"sequenceIndex":37},{"point":[0.730967787376657],"weight":-5.774168363749988,"sequenceIndex":224},{"point":[0.730967787376657],"weight":-1.4043035369463437,"sequenceIndex":19},{"point":[0.730967787376657],"weight":-1.4022653879706128,"sequenceIndex":202},{"point":[0.730967787376657],"weight":-3.0160314741430176,"sequenceIndex":39},{"point":[0.730967787376657],"weight":-2.7370000607028,"sequenceIndex":160},{"point":[0.730967787376657],"weight":-1.181222090081106,"sequenceIndex":196},{"point":[0.730967787376657],"weight":-2.825509146528255,"sequenceIndex":151},{"point":[0.730967787376657],"weight":-3.1427356349219586,"sequenceIndex":41},{"point":[0.730967787376657],"weight":-2.057188844198273,"sequenceIndex":83},{"point":[0.730967787376657],"weight":-1.5979508976294063,"sequenceIndex":131},{"point":[0.730967787376657],"weight":-2.384911123193851,"sequenceIndex":85},{"point":[0.730967787376657],"weight":-2.4934656488368314,"sequenceIndex":8},{"point":[0.730967787376657],"weight":-2.0794105823147846,"sequenceIndex":172},{"point":[0.730967787376657],"weight":-0.8430570947558428,"sequenceIndex":88},{"point":[0.730967787376657],"weight":-1.583062071631961,"sequenceIndex":186},{"point":[0.730967787376657],"weight":-1.900950525735522,"sequenceIndex":181},{"point":[0.730967787376657],"weight":-1.6603233291087203,"sequenceIndex":91},{"point":[0.730967787376657],"weight":-4.910682080495397,"sequenceIndex":175},{"point":[0.730967787376657],"weight":-2.2331721883940827,"sequenceIndex":141},{"point":[0.730967787376657],"weight":-3.313339468991698,"sequenceIndex":47},{"point":[0.730967787376657],"weight":-3.4956878699882674,"sequenceIndex":218},{"point":[0.730967787376657],"weight":-1.8769343382557342,"sequenceIndex":24},{"point":[0.730967787376657],"weight":-1.7681824933718822,"sequenceIndex":135},{"point":[0.730967787376657],"weight":-2.4188717619339917,"sequenceIndex":49},{"point":[0.730967787376657],"weight":-1.9105741696657654,"sequenceIndex":98},{"point":[0.730967787376657],"weight":-1.3740658128830137,"sequenceIndex":232},{"point":[0.730967787376657],"weight":-1.4948541685776218,"sequenceIndex":101},{"point":[0.730967787376657],"weight":-1.5651442150174164,"sequenceIndex":184},{"point":[0.730967787376657],"weight":-1.5718873531022508,"sequenceIndex":103},{"point":[0.730967787376657],"weight":-1.6798837022342403,"sequenceIndex":163},{"point":[0.730967787376657],"weight":-1.7207430232805285,"sequenceIndex":244},{"point":[0.730967787376657],"weight":-1.5608348328237314,"sequenceIndex":204},{"point":[0.730967787376657],"weight":-1.1004703232411095,"sequenceIndex":197},{"point":[0.730967787376657],"weight":-1.9525684074654577,"sequenceIndex":174},{"point":[0.730967787376657],"weight":-1.438510931338322,"sequenceIndex":200},{"point":[0.730967787376657],"weight":-1.9941504573983242,"sequenceIndex":110},{"point":[0.730967787376657],"weight":-3.1562169664528077,"sequenceIndex":235},{"point":[0.730967787376657],"weight":-1.9476434861602756,"sequenceIndex":7},{"point":[0.730967787376657],"weight":-1.0172693645748159,"sequenceIndex":206},{"point":[0.730967787376657],"weight":-1.470304568864497,"sequenceIndex":56},{"point":[0.730967787376657],"weight":-0.9231873436940075,"sequenceIndex":114},{"point":[0.730967787376657],"weight":-2.9394766789851574,"sequenceIndex":220},{"point":[0.730967787376657],"weight":-1.1647747340890369,"sequenceIndex":217},{"point":[0.730967787376657],"weight":-1.8414083779016315,"sequenceIndex":191},{"point":[0.730967787376657],"weight":-2.0092709298621405,"sequenceIndex":119},{"point":[0.730967787376657],"weight":-1.6478680983152354,"sequenceIndex":238},{"point":[0.730967787376657],"weight":-2.1229378553555236,"sequenceIndex":183},{"point":[0.730967787376657],"weight":-1.0367461927678534,"sequenceIndex":60},{"point":[0.730967787376657],"weight":-1.701420350316869,"sequenceIndex":231},{"point":[0.730967787376657],"weight":-2.7808506734564897,"sequenceIndex":124},{"point":[0.730967787376657],"weight":-4.4168366371233,"sequenceIndex":125},{"point":[0.730967787376657],"weight":-2.6649252496553375,"sequenceIndex":126},{"point":[0.730967787376657],"weight":-1.613422341738511,"sequenceIndex":136},{"point":[0.730967787376657],"weight":-0.7105703110872363,"sequenceIndex":254}],"sampleSize":128,"lambda":7.8125E-4,"random":{},"entriesSeen":256},"tree":{"storeSequenceIndexesEnabled":false,"centerOfMassEnabled":false,"random":{}}},{"sampler":{"weightedSamples":[{"point":[0.730967787376657],"weight":-0.2716899350411218,"sequenceIndex":228},{"point":[0.730967787376657],"weight":-0.27471090367902873,"sequenceIndex":197},{"point":[0.730967787376657],"weight":-0.28474961199644333,"sequenceIndex":125},{"point":[0.730967787376657],"weight":-0.34190056081742404,"sequenceIndex":238},{"point":[0.730967787376657],"weight":-0.3073717821143171,"sequenceIndex":47},{"point":[0.730967787376657],"weight":-0.310153698446141,"sequenceIndex":1},{"point":[0.730967787376657],"weight":-0.33071864648236327,"sequenceIndex":57},{"point":[0.730967787376657],"weight":-0.5317753790258758,"sequenceIndex":199},{"point":[0.730967787376657],"weight":-0.38298998466082745,"sequenceIndex":148},{"point":[0.730967787376657],"weight":-0.3634377746489217,"sequenceIndex":5},{"point":[0.730967787376657],"weight":-0.5452916459156779,"sequenceIndex":94},{"point":[0.730967787376657],"weight":-0.446269489818724,"sequenceIndex":180},{"point":[0.730967787376657],"weight":-0.3958006016449809,"sequenceIndex":190},{"point":[0.730967787376657],"weight":-0.3496538769532813,"sequenceIndex":59},{"point":[0.730967787376657],"weight":-0.5495885320083429,"sequenceIndex":212},{"point":[0.730967787376657],"weight":-0.7460482142666371,"sequenceIndex":250},{"point":[0.730967787376657],"weight":-0.8877956895145098,"sequenceIndex":177},{"point":[0.730967787376657],"weight":-0.5420031671300687,"sequenceIndex":225},{"point":[0.730967787376657],"weight":-0.43045694696942804,"sequenceIndex":213},{"point":[0.730967787376657],"weight":-0.49682089432205834,"sequenceIndex":40},{"point":[0.730967787376657],"weight":-0.4019460071743589,"sequenceIndex":86},{"point":[0.730967787376657],"weight":-0.8934227495926454,"sequenceIndex":204},{"point":[0.730967787376657],"weight":-1.1219210858025719,"sequenceIndex":131},{"point":[0.730967787376657],"weight":-0.5404408280131889,"sequenceIndex":99},{"point":[0.730967787376657],"weight":-0.8828407118047868,"sequenceIndex":194},{"point":[0.730967787376657],"weight":-0.8848169146818389,"sequenceIndex":53},{"point":[0.730967787376657],"weight":-0.496637382937721,"sequenceIndex":111},{"point":[0.730967787376657],"weight":-0.3528133814431951,"sequenceIndex":236},{"point":[0.730967787376657],"weight":-0.4535326560139121,"sequenceIndex":183},{"point":[0.730967787376657],"weight":-0.6494765117950774,"sequenceIndex":15},{"point":[0.730967787376657],"weight":-0.6402464878769788,"sequenceIndex":127},{"point":[0.730967787376657],"weight":-0.7776263331932095,"sequenceIndex":249},{"point":[0.730967787376657],"weight":-1.2976801107208407,"sequenceIndex":149},{"point":[0.730967787376657],"weight":-1.2250181322865736,"sequenceIndex":145},{"point":[0.730967787376657],"weight":-1.3970541978955977,"sequenceIndex":71},{"point":[0.730967787376657],"weight":-1.339749008305191,"sequenceIndex":200},{"point":[0.730967787376657],"weight":-1.4168370402167227,"sequenceIndex":248},{"point":[0.730967787376657],"weight":-1.0982510048403273,"sequenceIndex":38},{"point":[0.730967787376657],"weight":-2.334412683527544,"sequenceIndex":39},{"point":[0.730967787376657],"weight":-0.7590056433424044,"sequenceIndex":10},{"point":[0.730967787376657],"weight":-1.2126301010478104,"sequenceIndex":134},{"point":[0.730967787376657],"weight":-0.4450683648945088,"sequenceIndex":130},{"point":[0.730967787376657],"weight":-0.8795919338904586,"sequenceIndex":42},{"point":[0.730967787376657],"weight":-2.6301422886639068,"sequenceIndex":196},{"point":[0.730967787376657],"weight":-1.229414130685538,"sequenceIndex":90},{"point":[0.730967787376657],"weight":-1.3396731415585807,"sequenceIndex":179},{"point":[0.730967787376657],"weight":-1.1570077925389652,"sequenceIndex":237},{"point":[0.730967787376657],"weight":-1.1457336240183227,"sequenceIndex":24},{"point":[0.730967787376657],"weight":-1.4489400158044805,"sequenceIndex":166},{"point":[0.730967787376657],"weight":-2.841087678736005,"sequenceIndex":25},{"point":[0.730967787376657],"weight":-1.2912340218137652,"sequenceIndex":220},{"point":[0.730967787376657],"weight":-0.9221052599167883,"sequenceIndex":186},{"point":[0.730967787376657],"weight":-1.3010633777968605,"sequenceIndex":144},{"point":[0.730967787376657],"weight":-0.5963381519322952,"sequenceIndex":109},{"point":[0.730967787376657],"weight":-1.1655046322772882,"sequenceIndex":110},{"point":[0.730967787376657],"weight":-0.43382682410779094,"sequenceIndex":168},{"point":[0.730967787376657],"weight":-0.9000989414068234,"sequenceIndex":150},{"point":[0.730967787376657],"weight":-0.733084285204238,"sequenceIndex":29},{"point":[0.730967787376657],"weight":-1.0875943767201786,"sequenceIndex":119},{"point":[0.730967787376657],"weight":-2.112340444977423,"sequenceIndex":120},{"point":[0.730967787376657],"weight":-0.8479416699586986,"sequenceIndex":239},{"point":[0.730967787376657],"weight":-1.1210698654162197,"sequenceIndex":135},{"point":[0.730967787376657],"weight":-1.1049256028337535,"sequenceIndex":233},{"point":[0.730967787376657],"weight":-0.867139422833671,"sequenceIndex":252},{"point":[0.730967787376657],"weight":-1.7350710436135974,"sequenceIndex":245},{"point":[0.730967787376657],"weight":-2.6493083011703824,"sequenceIndex":172},{"point":[0.730967787376657],"weight":-5.588738052160094,"sequenceIndex":182},{"point":[0.730967787376657],"weight":-3.654055642618111,"sequenceIndex":34},{"point":[0.730967787376657],"weight":-1.2310227012413808,"sequenceIndex":192},{"point":[0.730967787376657],"weight":-2.560493765611929,"sequenceIndex":70},{"point":[0.730967787376657],"weight":-1.555139695454966,"sequenceIndex":234},{"point":[0.730967787376657],"weight":-1.9124098600764998,"sequenceIndex":36},{"point":[0.730967787376657],"weight":-1.9888791818258242,"sequenceIndex":163},{"point":[0.730967787376657],"weight":-1.5188343945323743,"sequenceIndex":8},{"point":[0.730967787376657],"weight":-4.816220916877915,"sequenceIndex":240},{"point":[0.730967787376657],"weight":-3.856026258108521,"sequenceIndex":181},{"point":[0.730967787376657],"weight":-2.202249107983622,"sequenceIndex":128},{"point":[0.730967787376657],"weight":-3.0422750392189397,"sequenceIndex":202},{"point":[0.730967787376657],"weight":-2.421139408737896,"sequenceIndex":79},{"point":[0.730967787376657],"weight":-0.9305782092429432,"sequenceIndex":154},{"point":[0.730967787376657],"weight":-1.6441289574470639,"sequenceIndex":136},{"point":[0.730967787376657],"weight":-1.8026557847183284,"sequenceIndex":171},{"point":[0.730967787376657],"weight":-1.456445218093241,"sequenceIndex":133},{"point":[0.730967787376657],"weight":-1.8747810921423125,"sequenceIndex":84},{"point":[0.730967787376657],"weight":-1.4835190416406348,"sequenceIndex":21},{"point":[0.730967787376657],"weight":-1.0767311709215643,"sequenceIndex":169},{"point":[0.730967787376657],"weight":-1.2586131637198126,"sequenceIndex":87},{"point":[0.730967787376657],"weight":-3.770279271931733,"sequenceIndex":11},{"point":[0.730967787376657],"weight":-4.041535146904952,"sequenceIndex":152},{"point":[0.730967787376657],"weight":-5.483209718710974,"sequenceIndex":216},{"point":[0.730967787376657],"weight":-1.7072253436877005,"sequenceIndex":176},{"point":[0.730967787376657],"weight":-3.970819599068188,"sequenceIndex":187},{"point":[0.730967787376657],"weight":-2.0893185845712594,"sequenceIndex":151},{"point":[0.730967787376657],"weight":-1.2449332995730615,"sequenceIndex":210},{"point":[0.730967787376657],"weight":-1.4972302445133614,"sequenceIndex":244},{"point":[0.730967787376657],"weight":-2.141028788118774,"sequenceIndex":48},{"point":[0.730967787376657],"weight":-6.632511594166266,"sequenceIndex":161},{"point":[0.730967787376657],"weight":-1.7902133214240274,"sequenceIndex":12},{"point":[0.730967787376657],"weight":-1.5656657948819075,"sequenceIndex":98},{"point":[0.730967787376657],"weight":-3.5933876294790745,"sequenceIndex":206},{"point":[0.730967787376657],"weight":-2.857578204767013,"sequenceIndex":101},{"point":[0.730967787376657],"weight":-1.9608528649801944,"sequenceIndex":50},{"point":[0.730967787376657],"weight":-3.0254978228150295,"sequenceIndex":207},{"point":[0.730967787376657],"weight":-1.3322232846651745,"sequenceIndex":13},{"point":[0.730967787376657],"weight":-1.51375473204136,"sequenceIndex":178},{"point":[0.730967787376657],"weight":-1.330047000108227,"sequenceIndex":52},{"point":[0.730967787376657],"weight":-2.1802076442057663,"sequenceIndex":155},{"point":[0.730967787376657],"weight":-1.1593269752909365,"sequenceIndex":54},{"point":[0.730967787376657],"weight":-0.7648636586996097,"sequenceIndex":108},{"point":[0.730967787376657],"weight":-2.5115543768850634,"sequenceIndex":242},{"point":[0.730967787376657],"weight":-1.27667790654646,"sequenceIndex":232},{"point":[0.730967787376657],"weight":-1.0718411355447786,"sequenceIndex":170},{"point":[0.730967787376657],"weight":-3.0363298987587064,"sequenceIndex":113},{"point":[0.730967787376657],"weight":-1.2057499758912003,"sequenceIndex":214},{"point":[0.730967787376657],"weight":-1.5710286087182006,"sequenceIndex":218},{"point":[0.730967787376657],"weight":-6.70591012588516,"sequenceIndex":116},{"point":[0.730967787376657],"weight":-2.2699592728675615,"sequenceIndex":157},{"point":[0.730967787376657],"weight":-1.3674582456069517,"sequenceIndex":118},{"point":[0.730967787376657],"weight":-1.2063618123228732,"sequenceIndex":243},{"point":[0.730967787376657],"weight":-4.193938687127718,"sequenceIndex":30},{"point":[0.730967787376657],"weight":-4.402826781277982,"sequenceIndex":121},{"point":[0.730967787376657],"weight":-2.1072066643501794,"sequenceIndex":2},{"point":[0.730967787376657],"weight":-3.3322908197219046,"sequenceIndex":123},{"point":[0.730967787376657],"weight":-2.5290929247160556,"sequenceIndex":31},{"point":[0.730967787376657],"weight":-1.2386499699210565,"sequenceIndex":224},{"point":[0.730967787376657],"weight":-2.417330811680178,"sequenceIndex":126},{"point":[0.730967787376657],"weight":-1.2884548260619535,"sequenceIndex":63},{"point":[0.730967787376657],"weight":-0.9123476014937866,"sequenceIndex":256}],"sampleSize":128,"lambda":7.8125E-4,"random":{},"entriesSeen":256},"tree":{"storeSequenceIndexesEnabled":false,"centerOfMassEnabled":false,"random":{}}},{"sampler":{"weightedSamples":[{"point":[0.730967787376657],"weight":-0.5147647719937322,"sequenceIndex":123},{"point":[0.730967787376657],"weight":-0.5283045043338832,"sequenceIndex":5},{"point":[0.730967787376657],"weight":-0.5301794071411086,"sequenceIndex":105},{"point":[0.730967787376657],"weight":-0.5459412471684224,"sequenceIndex":211},{"point":[0.730967787376657],"weight":-0.5304968657991089,"sequenceIndex":81},{"point":[0.730967787376657],"weight":-0.6558637153914211,"sequenceIndex":106},{"point":[0.730967787376657],"weight":-0.7201119157694705,"sequenceIndex":135},{"point":[0.730967787376657],"weight":-0.5673972269710099,"sequenceIndex":233},{"point":[0.730967787376657],"weight":-0.5539439159847406,"sequenceIndex":37},{"point":[0.730967787376657],"weight":-0.5880273977465741,"sequenceIndex":21},{"point":[0.730967787376657],"weight":-0.5440303028131699,"sequenceIndex":186},{"point":[0.730967787376657],"weight":-0.7980082680205237,"sequenceIndex":103},{"point":[0.730967787376657],"weight":-0.8624763603132237,"sequenceIndex":146},{"point":[0.730967787376657],"weight":-0.842200327103271,"sequenceIndex":59},{"point":[0.730967787376657],"weight":-0.7477394416112302,"sequenceIndex":127},{"point":[0.730967787376657],"weight":-0.5846389440651368,"sequenceIndex":213},{"point":[0.730967787376657],"weight":-0.9000250351095493,"sequenceIndex":69},{"point":[0.730967787376657],"weight":-1.1211240498832515,"sequenceIndex":219},{"point":[0.730967787376657],"weight":-0.6486528073565214,"sequenceIndex":79},{"point":[0.730967787376657],"weight":-0.6492996416697495,"sequenceIndex":226},{"point":[0.730967787376657],"weight":-0.6762704194746647,"sequenceIndex":128},{"point":[0.730967787376657],"weight":-0.6911181019746376,"sequenceIndex":165},{"point":[0.730967787376657],"weight":-0.640840823471894,"sequenceIndex":154},{"point":[0.730967787376657],"weight":-0.8023287344540558,"sequenceIndex":218},{"point":[0.730967787376657],"weight":-0.9757155691010011,"sequenceIndex":25},{"point":[0.730967787376657],"weight":-0.9785916310865459,"sequenceIndex":198},{"point":[0.730967787376657],"weight":-0.8634417256472278,"sequenceIndex":110},{"point":[0.730967787376657],"weight":-0.9484551879209451,"sequenceIndex":113},{"point":[0.730967787376657],"weight":-1.0277493948407341,"sequenceIndex":119},{"point":[0.730967787376657],"weight":-0.8025700000083862,"sequenceIndex":214},{"point":[0.730967787376657],"weight":-0.7691178187065626,"sequenceIndex":62},{"point":[0.730967787376657],"weight":-0.6907399122081311,"sequenceIndex":250},{"point":[0.730967787376657],"weight":-1.0570628943492693,"sequenceIndex":16},{"point":[0.730967787376657],"weight":-1.0144494701882967,"sequenceIndex":158},{"point":[0.730967787376657],"weight":-1.182910061940822,"sequenceIndex":185},{"point":[0.730967787376657],"weight":-1.291433910487792,"sequenceIndex":235},{"point":[0.730967787376657],"weight":-1.9050980550716798,"sequenceIndex":74},{"point":[0.730967787376657],"weight":-0.9036272518434175,"sequenceIndex":76},{"point":[0.730967787376657],"weight":-0.8746194508702475,"sequenceIndex":38},{"point":[0.730967787376657],"weight":-0.6887278406352619,"sequenceIndex":223},{"point":[0.730967787376657],"weight":-1.8852969360534115,"sequenceIndex":244},{"point":[0.730967787376657],"weight":-1.1655968912590937,"sequenceIndex":42},{"point":[0.730967787376657],"weight":-0.9037743983375113,"sequenceIndex":161},{"point":[0.730967787376657],"weight":-0.8554559508283657,"sequenceIndex":89},{"point":[0.730967787376657],"weight":-1.945375141782169,"sequenceIndex":206},{"point":[0.730967787376657],"weight":-0.7269256019953815,"sequenceIndex":190},{"point":[0.730967787376657],"weight":-0.9267525747094809,"sequenceIndex":47},{"point":[0.730967787376657],"weight":-0.8750032997941084,"sequenceIndex":96},{"point":[0.730967787376657],"weight":-0.8140166549099045,"sequenceIndex":205},{"point":[0.730967787376657],"weight":-1.0659429767440116,"sequenceIndex":202},{"point":[0.730967787376657],"weight":-1.6232140137194015,"sequenceIndex":102},{"point":[0.730967787376657],"weight":-1.2271335074062415,"sequenceIndex":13},{"point":[0.730967787376657],"weight":-1.0717201578742643,"sequenceIndex":52},{"point":[0.730967787376657],"weight":-1.7849702203114561,"sequenceIndex":108},{"point":[0.730967787376657],"weight":-1.3703683438861405,"sequenceIndex":180},{"point":[0.730967787376657],"weight":-1.0796879805584816,"sequenceIndex":151},{"point":[0.730967787376657],"weight":-1.32696675361515,"sequenceIndex":114},{"point":[0.730967787376657],"weight":-1.1750446200609477,"sequenceIndex":178},{"point":[0.730967787376657],"weight":-1.1974130841434427,"sequenceIndex":241},{"point":[0.730967787376657],"weight":-1.0680507087240354,"sequenceIndex":143},{"point":[0.730967787376657],"weight":-2.0279661906859925,"sequenceIndex":176},{"point":[0.730967787376657],"weight":-0.9918801946474926,"sequenceIndex":124},{"point":[0.730967787376657],"weight":-0.8324061377980361,"sequenceIndex":63},{"point":[0.730967787376657],"weight":-0.7708417134493972,"sequenceIndex":256},{"point":[0.730967787376657],"weight":-1.8403591605085388,"sequenceIndex":4},{"point":[0.730967787376657],"weight":-1.5703839657874517,"sequenceIndex":201},{"point":[0.730967787376657],"weight":-4.866508818245713,"sequenceIndex":171},{"point":[0.730967787376657],"weight":-1.3608459882443613,"sequenceIndex":17},{"point":[0.730967787376657],"weight":-3.9519005207184463,"sequenceIndex":207},{"point":[0.730967787376657],"weight":-2.267569114545663,"sequenceIndex":64},{"point":[0.730967787376657],"weight":-1.804104443078728,"sequenceIndex":71},{"point":[0.730967787376657],"weight":-4.385155542852683,"sequenceIndex":36},{"point":[0.730967787376657],"weight":-1.659339205387125,"sequenceIndex":187},{"point":[0.730967787376657],"weight":-2.321457972378974,"sequenceIndex":9},{"point":[0.730967787376657],"weight":-2.5125687485548727,"sequenceIndex":75},{"point":[0.730967787376657],"weight":-0.9695514367540587,"sequenceIndex":18},{"point":[0.730967787376657],"weight":-1.249398099381721,"sequenceIndex":77},{"point":[0.730967787376657],"weight":-1.007872826195355,"sequenceIndex":39},{"point":[0.730967787376657],"weight":-3.145354143379366,"sequenceIndex":170},{"point":[0.730967787376657],"weight":-1.674090652614644,"sequenceIndex":80},{"point":[0.730967787376657],"weight":-1.4827615952820108,"sequenceIndex":1},{"point":[0.730967787376657],"weight":-3.0262552150210666,"sequenceIndex":82},{"point":[0.730967787376657],"weight":-2.217402069188484,"sequenceIndex":83},{"point":[0.730967787376657],"weight":-2.429425978256601,"sequenceIndex":189},{"point":[0.730967787376657],"weight":-2.170058978762898,"sequenceIndex":184},{"point":[0.730967787376657],"weight":-0.9199060946188189,"sequenceIndex":20},{"point":[0.730967787376657],"weight":-1.8788074209348304,"sequenceIndex":191},{"point":[0.730967787376657],"weight":-1.2263330314972996,"sequenceIndex":88},{"point":[0.730967787376657],"weight":-2.246663098092042,"sequenceIndex":169},{"point":[0.730967787376657],"weight":-2.626959597436669,"sequenceIndex":45},{"point":[0.730967787376657],"weight":-2.7387982021231787,"sequenceIndex":91},{"point":[0.730967787376657],"weight":-1.4795713492218079,"sequenceIndex":164},{"point":[0.730967787376657],"weight":-0.7387448126209181,"sequenceIndex":67},{"point":[0.730967787376657],"weight":-1.433630164537891,"sequenceIndex":94},{"point":[0.730967787376657],"weight":-1.6533612855794144,"sequenceIndex":150},{"point":[0.730967787376657],"weight":-2.426320475250804,"sequenceIndex":228},{"point":[0.730967787376657],"weight":-2.2209639624838258,"sequenceIndex":182},{"point":[0.730967787376657],"weight":-1.4549302841426746,"sequenceIndex":196},{"point":[0.730967787376657],"weight":-5.119696697420786,"sequenceIndex":139},{"point":[0.730967787376657],"weight":-3.33706935170092,"sequenceIndex":243},{"point":[0.730967787376657],"weight":-1.2631793690351976,"sequenceIndex":101},{"point":[0.730967787376657],"weight":-3.897893174750405,"sequenceIndex":51},{"point":[0.730967787376657],"weight":-1.7493213692450575,"sequenceIndex":236},{"point":[0.730967787376657],"weight":-2.765923899720794,"sequenceIndex":248},{"point":[0.730967787376657],"weight":-1.5263332761387187,"sequenceIndex":175},{"point":[0.730967787376657],"weight":-4.491854613536974,"sequenceIndex":246},{"point":[0.730967787376657],"weight":-3.477032319873072,"sequenceIndex":199},{"point":[0.730967787376657],"weight":-2.2868596953903757,"sequenceIndex":227},{"point":[0.730967787376657],"weight":-2.0229346575525,"sequenceIndex":174},{"point":[0.730967787376657],"weight":-2.1879126190055413,"sequenceIndex":255},{"point":[0.730967787376657],"weight":-2.579144914690684,"sequenceIndex":111},{"point":[0.730967787376657],"weight":-5.6941122127727075,"sequenceIndex":136},{"point":[0.730967787376657],"weight":-1.3793929310962443,"sequenceIndex":152},{"point":[0.730967787376657],"weight":-3.50383351206438,"sequenceIndex":57},{"point":[0.730967787376657],"weight":-1.6157856139757218,"sequenceIndex":133},{"point":[0.730967787376657],"weight":-2.605187563722744,"sequenceIndex":138},{"point":[0.730967787376657],"weight":-1.6567209960520597,"sequenceIndex":140},{"point":[0.730967787376657],"weight":-2.9201388177333136,"sequenceIndex":168},{"point":[0.730967787376657],"weight":-2.5674465248393497,"sequenceIndex":237},{"point":[0.730967787376657],"weight":-2.996222252373557,"sequenceIndex":120},{"point":[0.730967787376657],"weight":-2.225072038821199,"sequenceIndex":121},{"point":[0.730967787376657],"weight":-3.4796612100007493,"sequenceIndex":122},{"point":[0.730967787376657],"weight":-2.9122328994501343,"sequenceIndex":134},{"point":[0.730967787376657],"weight":-2.4235812742158536,"sequenceIndex":31},{"point":[0.730967787376657],"weight":-1.389324845429176,"sequenceIndex":125},{"point":[0.730967787376657],"weight":-1.0204056515358098,"sequenceIndex":126},{"point":[0.730967787376657],"weight":-2.5885837818620074,"sequenceIndex":238},{"point":[0.730967787376657],"weight":-0.8332993823852461,"sequenceIndex":252}],"sampleSize":128,"lambda":7.8125E-4,"random":{},"entriesSeen":256},"tree":{"storeSequenceIndexesEnabled":false,"centerOfMassEnabled":false,"random":{}}},{"sampler":{"weightedSamples":[{"point":[0.730967787376657],"weight":-0.46831573103336505,"sequenceIndex":216},{"point":[0.730967787376657],"weight":-0.4920034507462027,"sequenceIndex":37},{"point":[0.730967787376657],"weight":-0.5568696266116789,"sequenceIndex":50},{"point":[0.730967787376657],"weight":-0.5757011045266621,"sequenceIndex":237},{"point":[0.730967787376657],"weight":-0.5170729128448872,"sequenceIndex":162},{"point":[0.730967787376657],"weight":-0.6242710590396826,"sequenceIndex":12},{"point":[0.730967787376657],"weight":-0.5624495932890967,"sequenceIndex":61},{"point":[0.730967787376657],"weight":-0.5798846711943635,"sequenceIndex":16},{"point":[0.730967787376657],"weight":-0.6340021188577166,"sequenceIndex":75},{"point":[0.730967787376657],"weight":-0.7323822192091085,"sequenceIndex":171},{"point":[0.730967787376657],"weight":-0.6141063191751956,"sequenceIndex":177},{"point":[0.730967787376657],"weight":-0.7916748412441669,"sequenceIndex":165},{"point":[0.730967787376657],"weight":-0.7741123885540975,"sequenceIndex":149},{"point":[0.730967787376657],"weight":-0.5667633330265399,"sequenceIndex":150},{"point":[0.730967787376657],"weight":-0.5962698755084289,"sequenceIndex":139},{"point":[0.730967787376657],"weight":-0.9528761784457509,"sequenceIndex":243},{"point":[0.730967787376657],"weight":-0.7273114423574275,"sequenceIndex":185},{"point":[0.730967787376657],"weight":-0.7808903841390626,"sequenceIndex":73},{"point":[0.730967787376657],"weight":-0.7404356918152774,"sequenceIndex":76},{"point":[0.730967787376657],"weight":-1.1224211478278021,"sequenceIndex":83},{"point":[0.730967787376657],"weight":-1.0776841568623996,"sequenceIndex":87},{"point":[0.730967787376657],"weight":-0.9061437470781566,"sequenceIndex":130},{"point":[0.730967787376657],"weight":-0.7610392028917319,"sequenceIndex":213},{"point":[0.730967787376657],"weight":-1.0842993072569231,"sequenceIndex":152},{"point":[0.730967787376657],"weight":-0.8666301346042629,"sequenceIndex":144},{"point":[0.730967787376657],"weight":-0.8040570484908357,"sequenceIndex":148},{"point":[0.730967787376657],"weight":-0.7795984148829249,"sequenceIndex":108},{"point":[0.730967787376657],"weight":-0.6516811613917103,"sequenceIndex":14},{"point":[0.730967787376657],"weight":-0.8127116090453896,"sequenceIndex":218},{"point":[0.730967787376657],"weight":-0.7093584355913547,"sequenceIndex":121},{"point":[0.730967787376657],"weight":-0.7315408393443674,"sequenceIndex":145},{"point":[0.730967787376657],"weight":-0.990745716444881,"sequenceIndex":251},{"point":[0.730967787376657],"weight":-0.9904589714307233,"sequenceIndex":67},{"point":[0.730967787376657],"weight":-0.7547046540621087,"sequenceIndex":68},{"point":[0.730967787376657],"weight":-0.9385106684942083,"sequenceIndex":70},{"point":[0.730967787376657],"weight":-0.9944755410185144,"sequenceIndex":18},{"point":[0.730967787376657],"weight":-1.2051592415612744,"sequenceIndex":36},{"point":[0.730967787376657],"weight":-1.2333357566281156,"sequenceIndex":193},{"point":[0.730967787376657],"weight":-1.3329729300550026,"sequenceIndex":79},{"point":[0.730967787376657],"weight":-1.1991340379887532,"sequenceIndex":136},{"point":[0.730967787376657],"weight":-1.3274623806041033,"sequenceIndex":208},{"point":[0.730967787376657],"weight":-1.526594462791338,"sequenceIndex":84},{"point":[0.730967787376657],"weight":-1.3576831463085286,"sequenceIndex":204},{"point":[0.730967787376657],"weight":-1.1523640029972193,"sequenceIndex":236},{"point":[0.730967787376657],"weight":-1.0287535171907853,"sequenceIndex":90},{"point":[0.730967787376657],"weight":-0.761861719035806,"sequenceIndex":22},{"point":[0.730967787376657],"weight":-0.8111568744213442,"sequenceIndex":137},{"point":[0.730967787376657],"weight":-1.1311925864317038,"sequenceIndex":48},{"point":[0.730967787376657],"weight":-1.097091317483172,"sequenceIndex":203},{"point":[0.730967787376657],"weight":-1.0128493895636976,"sequenceIndex":101},{"point":[0.730967787376657],"weight":-1.221175508936959,"sequenceIndex":228},{"point":[0.730967787376657],"weight":-0.8087087572152968,"sequenceIndex":205},{"point":[0.730967787376657],"weight":-1.591378193264179,"sequenceIndex":13},{"point":[0.730967787376657],"weight":-0.7808942450365118,"sequenceIndex":26},{"point":[0.730967787376657],"weight":-0.7874354613361961,"sequenceIndex":65},{"point":[0.730967787376657],"weight":-1.9243698599229264,"sequenceIndex":113},{"point":[0.730967787376657],"weight":-0.6973614486878218,"sequenceIndex":114},{"point":[0.730967787376657],"weight":-0.853648012412175,"sequenceIndex":181},{"point":[0.730967787376657],"weight":-1.4664914455096558,"sequenceIndex":118},{"point":[0.730967787376657],"weight":-2.098195218055375,"sequenceIndex":60},{"point":[0.730967787376657],"weight":-1.102975773283685,"sequenceIndex":215},{"point":[0.730967787376657],"weight":-0.8462130869136666,"sequenceIndex":146},{"point":[0.730967787376657],"weight":-0.9629392583439209,"sequenceIndex":138},{"point":[0.730967787376657],"weight":-2.7828599052255107,"sequenceIndex":253},{"point":[0.730967787376657],"weight":-4.316338989747713,"sequenceIndex":231},{"point":[0.730967787376657],"weight":-2.2571448459814674,"sequenceIndex":195},{"point":[0.730967787376657],"weight":-3.142787110379834,"sequenceIndex":247},{"point":[0.730967787376657],"weight":-1.3023983406778277,"sequenceIndex":5},{"point":[0.730967787376657],"weight":-1.2586752798853267,"sequenceIndex":227},{"point":[0.730967787376657],"weight":-1.6304311296262717,"sequenceIndex":192},{"point":[0.730967787376657],"weight":-3.1512880784342827,"sequenceIndex":163},{"point":[0.730967787376657],"weight":-1.8883655729979114,"sequenceIndex":9},{"point":[0.730967787376657],"weight":-1.094508648297114,"sequenceIndex":252},{"point":[0.730967787376657],"weight":-2.6395767472866987,"sequenceIndex":74},{"point":[0.730967787376657],"weight":-1.3169353862467152,"sequenceIndex":155},{"point":[0.730967787376657],"weight":-4.209492573005034,"sequenceIndex":19},{"point":[0.730967787376657],"weight":-6.966352719021773,"sequenceIndex":77},{"point":[0.730967787376657],"weight":-1.825492902675068,"sequenceIndex":168},{"point":[0.730967787376657],"weight":-2.72830638791692,"sequenceIndex":174},{"point":[0.730967787376657],"weight":-2.1452772095296053,"sequenceIndex":2},{"point":[0.730967787376657],"weight":-1.3111867071046746,"sequenceIndex":214},{"point":[0.730967787376657],"weight":-2.1790736634312675,"sequenceIndex":201},{"point":[0.730967787376657],"weight":-3.365823533576492,"sequenceIndex":233},{"point":[0.730967787376657],"weight":-2.770574762426797,"sequenceIndex":42},{"point":[0.730967787376657],"weight":-1.5356215265628248,"sequenceIndex":85},{"point":[0.730967787376657],"weight":-1.8120813790826056,"sequenceIndex":43},{"point":[0.730967787376657],"weight":-3.610644731094732,"sequenceIndex":200},{"point":[0.730967787376657],"weight":-6.813435066579621,"sequenceIndex":11},{"point":[0.730967787376657],"weight":-1.511656105527198,"sequenceIndex":44},{"point":[0.730967787376657],"weight":-1.825470850594686,"sequenceIndex":45},{"point":[0.730967787376657],"weight":-2.7000217209135524,"sequenceIndex":91},{"point":[0.730967787376657],"weight":-3.3686285770987894,"sequenceIndex":194},{"point":[0.730967787376657],"weight":-1.994572511242888,"sequenceIndex":170},{"point":[0.730967787376657],"weight":-2.738423980255016,"sequenceIndex":191},{"point":[0.730967787376657],"weight":-2.2627373696668442,"sequenceIndex":131},{"point":[0.730967787376657],"weight":-1.1398004384767948,"sequenceIndex":64},{"point":[0.730967787376657],"weight":-1.8676583609310387,"sequenceIndex":190},{"point":[0.730967787376657],"weight":-2.3619686556571415,"sequenceIndex":241},{"point":[0.730967787376657],"weight":-2.671197674896997,"sequenceIndex":99},{"point":[0.730967787376657],"weight":-2.2844582790878247,"sequenceIndex":161},{"point":[0.730967787376657],"weight":-1.7985628567386853,"sequenceIndex":196},{"point":[0.730967787376657],"weight":-3.688468167424617,"sequenceIndex":51},{"point":[0.730967787376657],"weight":-1.280100076012047,"sequenceIndex":103},{"point":[0.730967787376657],"weight":-3.1906490962657528,"sequenceIndex":52},{"point":[0.730967787376657],"weight":-3.1274148634287844,"sequenceIndex":105},{"point":[0.730967787376657],"weight":-4.071943096205934,"sequenceIndex":173},{"point":[0.730967787376657],"weight":-3.4075466198009265,"sequenceIndex":167},{"point":[0.730967787376657],"weight":-3.0987580846126246,"sequenceIndex":219},{"point":[0.730967787376657],"weight":-1.4440908419918534,"sequenceIndex":164},{"point":[0.730967787376657],"weight":-0.8397014301486523,"sequenceIndex":110},{"point":[0.730967787376657],"weight":-3.339474020887816,"sequenceIndex":179},{"point":[0.730967787376657],"weight":-3.8851832445691867,"sequenceIndex":112},{"point":[0.730967787376657],"weight":-2.192563768798378,"sequenceIndex":56},{"point":[0.730967787376657],"weight":-1.2421581667392063,"sequenceIndex":57},{"point":[0.730967787376657],"weight":-2.854968984020898,"sequenceIndex":4},{"point":[0.730967787376657],"weight":-1.3045322470782494,"sequenceIndex":116},{"point":[0.730967787376657],"weight":-2.990184786917006,"sequenceIndex":128},{"point":[0.730967787376657],"weight":-2.2793085009695484,"sequenceIndex":211},{"point":[0.730967787376657],"weight":-1.8735816453745033,"sequenceIndex":119},{"point":[0.730967787376657],"weight":-2.283254675313028,"sequenceIndex":120},{"point":[0.730967787376657],"weight":-2.8871729847634615,"sequenceIndex":224},{"point":[0.730967787376657],"weight":-2.0262227326310347,"sequenceIndex":15},{"point":[0.730967787376657],"weight":-2.4103902158089165,"sequenceIndex":202},{"point":[0.730967787376657],"weight":-1.875022827253578,"sequenceIndex":62},{"point":[0.730967787376657],"weight":-1.2401553326566073,"sequenceIndex":125},{"point":[0.730967787376657],"weight":-1.1350934188165602,"sequenceIndex":140},{"point":[0.730967787376657],"weight":-1.2048634269913785,"sequenceIndex":127},{"point":[0.730967787376657],"weight":-3.767252004310466,"sequenceIndex":256}],"sampleSize":128,"lambda":7.8125E-4,"random":{},"entriesSeen":256},"tree":{"storeSequenceIndexesEnabled":false,"centerOfMassEnabled":false,"random":{}}},{"sampler":{"weightedSamples":[{"point":[0.730967787376657],"weight":-0.48161520252225043,"sequenceIndex":183},{"point":[0.730967787376657],"weight":-0.5032685329174207,"sequenceIndex":70},{"point":[0.730967787376657],"weight":-0.4884000061177509,"sequenceIndex":56},{"point":[0.730967787376657],"weight":-0.5612824294877223,"sequenceIndex":254},{"point":[0.730967787376657],"weight":-0.7340001560739683,"sequenceIndex":200},{"point":[0.730967787376657],"weight":-0.5805711655468995,"sequenceIndex":187},{"point":[0.730967787376657],"weight":-0.532031115958577,"sequenceIndex":123},{"point":[0.730967787376657],"weight":-0.5629952438385468,"sequenceIndex":201},{"point":[0.730967787376657],"weight":-0.7103043125954556,"sequenceIndex":75},{"point":[0.730967787376657],"weight":-0.7561521094213371,"sequenceIndex":83},{"point":[0.730967787376657],"weight":-0.740343674331296,"sequenceIndex":2},{"point":[0.730967787376657],"weight":-0.6532282241282985,"sequenceIndex":150},{"point":[0.730967787376657],"weight":-0.6162847071446554,"sequenceIndex":65},{"point":[0.730967787376657],"weight":-0.8571691384462168,"sequenceIndex":189},{"point":[0.730967787376657],"weight":-0.5921971220724024,"sequenceIndex":192},{"point":[0.730967787376657],"weight":-0.7332702674290201,"sequenceIndex":243},{"point":[0.730967787376657],"weight":-0.6447086323545408,"sequenceIndex":185},{"point":[0.730967787376657],"weight":-0.7459554239767379,"sequenceIndex":141},{"point":[0.730967787376657],"weight":-0.8183494214455185,"sequenceIndex":39},{"point":[0.730967787376657],"weight":-0.7863286277119447,"sequenceIndex":188},{"point":[0.730967787376657],"weight":-0.7961769327121967,"sequenceIndex":42},{"point":[0.730967787376657],"weight":-0.8209856787877501,"sequenceIndex":88},{"point":[0.730967787376657],"weight":-0.747374578116906,"sequenceIndex":95},{"point":[0.730967787376657],"weight":-0.720165978559799,"sequenceIndex":48},{"point":[0.730967787376657],"weight":-0.9065798298949114,"sequenceIndex":213},{"point":[0.730967787376657],"weight":-1.1051513360837184,"sequenceIndex":202},{"point":[0.730967787376657],"weight":-0.6543418503396461,"sequenceIndex":109},{"point":[0.730967787376657],"weight":-0.9069651144540471,"sequenceIndex":180},{"point":[0.730967787376657],"weight":-0.8653889525774512,"sequenceIndex":6},{"point":[0.730967787376657],"weight":-0.6297289101710448,"sequenceIndex":144},{"point":[0.730967787376657],"weight":-0.7197958014646774,"sequenceIndex":31},{"point":[0.730967787376657],"weight":-0.8365867455716735,"sequenceIndex":225},{"point":[0.730967787376657],"weight":-0.9010951953767131,"sequenceIndex":1},{"point":[0.730967787376657],"weight":-0.8247407561517901,"sequenceIndex":69},{"point":[0.730967787376657],"weight":-1.508995179943234,"sequenceIndex":71},{"point":[0.730967787376657],"weight":-0.8583829379498158,"sequenceIndex":171},{"point":[0.730967787376657],"weight":-1.931658553962453,"sequenceIndex":215},{"point":[0.730967787376657],"weight":-1.039312143204178,"sequenceIndex":157},{"point":[0.730967787376657],"weight":-1.5077953150610535,"sequenceIndex":130},{"point":[0.730967787376657],"weight":-1.7499332758349835,"sequenceIndex":230},{"point":[0.730967787376657],"weight":-1.5400189365876056,"sequenceIndex":41},{"point":[0.730967787376657],"weight":-0.9183540360116808,"sequenceIndex":84},{"point":[0.730967787376657],"weight":-1.4948965513267536,"sequenceIndex":206},{"point":[0.730967787376657],"weight":-0.869061732277029,"sequenceIndex":184},{"point":[0.730967787376657],"weight":-0.9834801027191972,"sequenceIndex":91},{"point":[0.730967787376657],"weight":-0.8338449943661358,"sequenceIndex":92},{"point":[0.730967787376657],"weight":-0.8703062457144525,"sequenceIndex":47},{"point":[0.730967787376657],"weight":-0.9455114066375463,"sequenceIndex":216},{"point":[0.730967787376657],"weight":-2.127707148525387,"sequenceIndex":231},{"point":[0.730967787376657],"weight":-1.0167957927184554,"sequenceIndex":101},{"point":[0.730967787376657],"weight":-1.426122588410124,"sequenceIndex":209},{"point":[0.730967787376657],"weight":-1.3798671872256478,"sequenceIndex":105},{"point":[0.730967787376657],"weight":-2.1392673160233384,"sequenceIndex":52},{"point":[0.730967787376657],"weight":-1.2155977639708777,"sequenceIndex":13},{"point":[0.730967787376657],"weight":-1.780165000095329,"sequenceIndex":165},{"point":[0.730967787376657],"weight":-2.1102177502129082,"sequenceIndex":113},{"point":[0.730967787376657],"weight":-0.9166512104499234,"sequenceIndex":214},{"point":[0.730967787376657],"weight":-1.6097913202984864,"sequenceIndex":193},{"point":[0.730967787376657],"weight":-1.2526434919287859,"sequenceIndex":140},{"point":[0.730967787376657],"weight":-0.708368837456199,"sequenceIndex":120},{"point":[0.730967787376657],"weight":-0.6984741236374886,"sequenceIndex":122},{"point":[0.730967787376657],"weight":-0.7794950871871834,"sequenceIndex":199},{"point":[0.730967787376657],"weight":-1.1074471530781493,"sequenceIndex":126},{"point":[0.730967787376657],"weight":-1.210343930727509,"sequenceIndex":251},{"point":[0.730967787376657],"weight":-2.453876262808502,"sequenceIndex":16},{"point":[0.730967787376657],"weight":-2.622290351597412,"sequenceIndex":208},{"point":[0.730967787376657],"weight":-1.4570283650453468,"sequenceIndex":131},{"point":[0.730967787376657],"weight":-2.6099936427346444,"sequenceIndex":68},{"point":[0.730967787376657],"weight":-2.3835239787524745,"sequenceIndex":17},{"point":[0.730967787376657],"weight":-2.0123673229507184,"sequenceIndex":178},{"point":[0.730967787376657],"weight":-3.3450622098305525,"sequenceIndex":226},{"point":[0.730967787376657],"weight":-2.4997800319582093,"sequenceIndex":36},{"point":[0.730967787376657],"weight":-2.494157114019547,"sequenceIndex":72},{"point":[0.730967787376657],"weight":-2.1762600438745534,"sequenceIndex":232},{"point":[0.730967787376657],"weight":-1.99821282102994,"sequenceIndex":203},{"point":[0.730967787376657],"weight":-2.7627267357770244,"sequenceIndex":76},{"point":[0.730967787376657],"weight":-1.06999381496046,"sequenceIndex":77},{"point":[0.730967787376657],"weight":-2.617651337113746,"sequenceIndex":169},{"point":[0.730967787376657],"weight":-1.6553562737371077,"sequenceIndex":79},{"point":[0.730967787376657],"weight":-2.535818247059016,"sequenceIndex":10},{"point":[0.730967787376657],"weight":-4.2533990181830985,"sequenceIndex":81},{"point":[0.730967787376657],"weight":-2.414376360893475,"sequenceIndex":82},{"point":[0.730967787376657],"weight":-1.853203682553218,"sequenceIndex":207},{"point":[0.730967787376657],"weight":-1.4890922557464112,"sequenceIndex":20},{"point":[0.730967787376657],"weight":-1.3632031170730483,"sequenceIndex":205},{"point":[0.730967787376657],"weight":-5.591559706493305,"sequenceIndex":219},{"point":[0.730967787376657],"weight":-1.5092848473336438,"sequenceIndex":168},{"point":[0.730967787376657],"weight":-3.139746241722752,"sequenceIndex":235},{"point":[0.730967787376657],"weight":-2.326589993281474,"sequenceIndex":89},{"point":[0.730967787376657],"weight":-1.4987892010689419,"sequenceIndex":136},{"point":[0.730967787376657],"weight":-1.289085612763529,"sequenceIndex":156},{"point":[0.730967787376657],"weight":-5.584373324895164,"sequenceIndex":197},{"point":[0.730967787376657],"weight":-2.911114888709017,"sequenceIndex":167},{"point":[0.730967787376657],"weight":-2.197738422171821,"sequenceIndex":94},{"point":[0.730967787376657],"weight":-3.7491535356742225,"sequenceIndex":229},{"point":[0.730967787376657],"weight":-1.9572861296104282,"sequenceIndex":3},{"point":[0.730967787376657],"weight":-1.8780122752394994,"sequenceIndex":234},{"point":[0.730967787376657],"weight":-4.9654814735371335,"sequenceIndex":49},{"point":[0.730967787376657],"weight":-2.31153907572989,"sequenceIndex":145},{"point":[0.730967787376657],"weight":-4.451371918918136,"sequenceIndex":100},{"point":[0.730967787376657],"weight":-1.6122868201779776,"sequenceIndex":25},{"point":[0.730967787376657],"weight":-1.441264309123618,"sequenceIndex":51},{"point":[0.730967787376657],"weight":-5.407959713274903,"sequenceIndex":245},{"point":[0.730967787376657],"weight":-4.179683383453015,"sequenceIndex":104},{"point":[0.730967787376657],"weight":-2.2956649858956597,"sequenceIndex":26},{"point":[0.730967787376657],"weight":-2.4019139697749092,"sequenceIndex":212},{"point":[0.730967787376657],"weight":-2.7656334229662525,"sequenceIndex":107},{"point":[0.730967787376657],"weight":-1.7889040302811825,"sequenceIndex":217},{"point":[0.730967787376657],"weight":-1.2400768695586455,"sequenceIndex":158},{"point":[0.730967787376657],"weight":-1.8718685124008376,"sequenceIndex":55},{"point":[0.730967787376657],"weight":-3.2967194418376393,"sequenceIndex":128},{"point":[0.730967787376657],"weight":-2.8845603827459825,"sequenceIndex":112},{"point":[0.730967787376657],"weight":-2.3733140386304137,"sequenceIndex":28},{"point":[0.730967787376657],"weight":-1.9857627490746395,"sequenceIndex":252},{"point":[0.730967787376657],"weight":-1.637620455918089,"sequenceIndex":223},{"point":[0.730967787376657],"weight":-2.0622464445758535,"sequenceIndex":172},{"point":[0.730967787376657],"weight":-1.666144620035993,"sequenceIndex":132},{"point":[0.730967787376657],"weight":-5.174222507737078,"sequenceIndex":118},{"point":[0.730967787376657],"weight":-1.473497549215472,"sequenceIndex":175},{"point":[0.730967787376657],"weight":-1.4222227825610019,"sequenceIndex":255},{"point":[0.730967787376657],"weight":-4.9393525944147365,"sequenceIndex":64},{"point":[0.730967787376657],"weight":-3.09228272824089,"sequenceIndex":61},{"point":[0.730967787376657],"weight":-2.4419432501742913,"sequenceIndex":249},{"point":[0.730967787376657],"weight":-1.2641785114451423,"sequenceIndex":138},{"point":[0.730967787376657],"weight":-2.6650368389283385,"sequenceIndex":135},{"point":[0.730967787376657],"weight":-1.7336330996232743,"sequenceIndex":63},{"point":[0.730967787376657],"weight":-1.578192997070825,"sequenceIndex":127},{"point":[0.730967787376657],"weight":-1.6072343150083284,"sequenceIndex":256}],"sampleSize":128,"lambda":7.8125E-4,"random":{},"entriesSeen":256},"tree":{"storeSequenceIndexesEnabled":false,"centerOfMassEnabled":false,"random":{}}},{"sampler":{"weightedSamples":[{"point":[0.730967787376657],"weight":-0.564761493133161,"sequenceIndex":251},{"point":[0.730967787376657],"weight":-0.5736218996531217,"sequenceIndex":178},{"point":[0.730967787376657],"weight":-0.5886312930179589,"sequenceIndex":150},{"point":[0.730967787376657],"weight":-0.6406822919065119,"sequenceIndex":32},{"point":[0.730967787376657],"weight":-0.6641688590402863,"sequenceIndex":5},{"point":[0.730967787376657],"weight":-0.6202622542037859,"sequenceIndex":51},{"point":[0.730967787376657],"weight":-0.6261338882959768,"sequenceIndex":57},{"point":[0.730967787376657],"weight":-0.6837026673726713,"sequenceIndex":217},{"point":[0.730967787376657],"weight":-0.6857611291595339,"sequenceIndex":76},{"point":[0.730967787376657],"weight":-0.7161014023709106,"sequenceIndex":43},{"point":[0.730967787376657],"weight":-0.8232049145117503,"sequenceIndex":143},{"point":[0.730967787376657],"weight":-0.7411832952110171,"sequenceIndex":49},{"point":[0.730967787376657],"weight":-0.6408512953293359,"sequenceIndex":141},{"point":[0.730967787376657],"weight":-0.741739416909683,"sequenceIndex":162},{"point":[0.730967787376657],"weight":-0.6457641846548611,"sequenceIndex":122},{"point":[0.730967787376657],"weight":-0.830720694209438,"sequenceIndex":248},{"point":[0.730967787376657],"weight":-0.9084987518469034,"sequenceIndex":193},{"point":[0.730967787376657],"weight":-1.1152633521871145,"sequenceIndex":75},{"point":[0.730967787376657],"weight":-1.010528143883659,"sequenceIndex":233},{"point":[0.730967787376657],"weight":-0.9396409429699507,"sequenceIndex":180},{"point":[0.730967787376657],"weight":-0.8978971158578838,"sequenceIndex":86},{"point":[0.730967787376657],"weight":-1.1996475544061387,"sequenceIndex":206},{"point":[0.730967787376657],"weight":-1.0061211010964777,"sequenceIndex":214},{"point":[0.730967787376657],"weight":-0.8805802510385022,"sequenceIndex":48},{"point":[0.730967787376657],"weight":-0.7544073345237722,"sequenceIndex":25},{"point":[0.730967787376657],"weight":-0.6433345826785652,"sequenceIndex":53},{"point":[0.730967787376657],"weight":-1.064542690433194,"sequenceIndex":111},{"point":[0.730967787376657],"weight":-0.9657550277412527,"sequenceIndex":7},{"point":[0.730967787376657],"weight":-1.1130551351121234,"sequenceIndex":225},{"point":[0.730967787376657],"weight":-0.6905814499051617,"sequenceIndex":123},{"point":[0.730967787376657],"weight":-0.8276001877469491,"sequenceIndex":125},{"point":[0.730967787376657],"weight":-0.9753211246975901,"sequenceIndex":226},{"point":[0.730967787376657],"weight":-1.6611511614705754,"sequenceIndex":17},{"point":[0.730967787376657],"weight":-2.4994596003681147,"sequenceIndex":69},{"point":[0.730967787376657],"weight":-1.666888357219219,"sequenceIndex":158},{"point":[0.730967787376657],"weight":-1.1596169255482598,"sequenceIndex":189},{"point":[0.730967787376657],"weight":-1.2332649691786004,"sequenceIndex":221},{"point":[0.730967787376657],"weight":-1.2326513614053691,"sequenceIndex":77},{"point":[0.730967787376657],"weight":-1.2647988428531252,"sequenceIndex":215},{"point":[0.730967787376657],"weight":-1.2641040523242801,"sequenceIndex":224},{"point":[0.730967787376657],"weight":-1.4133737030538003,"sequenceIndex":83},{"point":[0.730967787376657],"weight":-1.206070796226922,"sequenceIndex":183},{"point":[0.730967787376657],"weight":-1.1789259526817444,"sequenceIndex":239},{"point":[0.730967787376657],"weight":-1.216445613642882,"sequenceIndex":89},{"point":[0.730967787376657],"weight":-1.4385673021677678,"sequenceIndex":181},{"point":[0.730967787376657],"weight":-1.2529956095863182,"sequenceIndex":222},{"point":[0.730967787376657],"weight":-1.4662203824853897,"sequenceIndex":47},{"point":[0.730967787376657],"weight":-1.809042114508578,"sequenceIndex":196},{"point":[0.730967787376657],"weight":-1.4858286831159846,"sequenceIndex":244},{"point":[0.730967787376657],"weight":-0.8350478514904276,"sequenceIndex":164},{"point":[0.730967787376657],"weight":-0.9224043534846053,"sequenceIndex":33},{"point":[0.730967787376657],"weight":-1.022635784395301,"sequenceIndex":157},{"point":[0.730967787376657],"weight":-0.680642798899195,"sequenceIndex":106},{"point":[0.730967787376657],"weight":-1.1718475355134257,"sequenceIndex":27},{"point":[0.730967787376657],"weight":-1.3871742751290854,"sequenceIndex":110},{"point":[0.730967787376657],"weight":-1.0443462558788044,"sequenceIndex":249},{"point":[0.730967787376657],"weight":-1.3370725796309237,"sequenceIndex":231},{"point":[0.730967787376657],"weight":-1.6581055703805105,"sequenceIndex":29},{"point":[0.730967787376657],"weight":-1.1960966021851065,"sequenceIndex":151},{"point":[0.730967787376657],"weight":-0.757589373987626,"sequenceIndex":121},{"point":[0.730967787376657],"weight":-0.9379105730374425,"sequenceIndex":185},{"point":[0.730967787376657],"weight":-0.8688877630359408,"sequenceIndex":199},{"point":[0.730967787376657],"weight":-0.9316539018349295,"sequenceIndex":126},{"point":[0.730967787376657],"weight":-1.8699046324247761,"sequenceIndex":253},{"point":[0.730967787376657],"weight":-1.942613808041928,"sequenceIndex":65},{"point":[0.730967787376657],"weight":-5.053511462688396,"sequenceIndex":169},{"point":[0.730967787376657],"weight":-2.1081025549085104,"sequenceIndex":16},{"point":[0.730967787376657],"weight":-2.6638181493729305,"sequenceIndex":34},{"point":[0.730967787376657],"weight":-4.018645605569034,"sequenceIndex":243},{"point":[0.730967787376657],"weight":-1.8327622416721527,"sequenceIndex":4},{"point":[0.730967787376657],"weight":-2.0210738123988805,"sequenceIndex":71},{"point":[0.730967787376657],"weight":-2.3144293918346097,"sequenceIndex":18},{"point":[0.730967787376657],"weight":-3.0442369061149597,"sequenceIndex":197},{"point":[0.730967787376657],"weight":-2.2637702015913623,"sequenceIndex":36},{"point":[0.730967787376657],"weight":-1.5218612147887414,"sequenceIndex":74},{"point":[0.730967787376657],"weight":-1.5182182287422974,"sequenceIndex":19},{"point":[0.730967787376657],"weight":-2.605927561279445,"sequenceIndex":240},{"point":[0.730967787376657],"weight":-3.2076368646660964,"sequenceIndex":223},{"point":[0.730967787376657],"weight":-2.738835295122725,"sequenceIndex":174},{"point":[0.730967787376657],"weight":-3.063281559042889,"sequenceIndex":80},{"point":[0.730967787376657],"weight":-3.2720552890460164,"sequenceIndex":81},{"point":[0.730967787376657],"weight":-3.0557831697120124,"sequenceIndex":82},{"point":[0.730967787376657],"weight":-3.4666187022413655,"sequenceIndex":152},{"point":[0.730967787376657],"weight":-1.2777850173794876,"sequenceIndex":176},{"point":[0.730967787376657],"weight":-2.235777063492217,"sequenceIndex":85},{"point":[0.730967787376657],"weight":-1.9636558652840295,"sequenceIndex":201},{"point":[0.730967787376657],"weight":-2.7416030136177834,"sequenceIndex":190},{"point":[0.730967787376657],"weight":-1.5579905963300618,"sequenceIndex":22},{"point":[0.730967787376657],"weight":-1.3820991889093708,"sequenceIndex":135},{"point":[0.730967787376657],"weight":-1.8432425755273605,"sequenceIndex":90},{"point":[0.730967787376657],"weight":-1.820639744047021,"sequenceIndex":246},{"point":[0.730967787376657],"weight":-1.4338678527462445,"sequenceIndex":227},{"point":[0.730967787376657],"weight":-2.240682849444293,"sequenceIndex":241},{"point":[0.730967787376657],"weight":-2.1073199812905443,"sequenceIndex":94},{"point":[0.730967787376657],"weight":-2.23725008333913,"sequenceIndex":95},{"point":[0.730967787376657],"weight":-2.0611501528498373,"sequenceIndex":3},{"point":[0.730967787376657],"weight":-2.1520834119033103,"sequenceIndex":97},{"point":[0.730967787376657],"weight":-3.21255864792381,"sequenceIndex":98},{"point":[0.730967787376657],"weight":-3.1772353411898595,"sequenceIndex":99},{"point":[0.730967787376657],"weight":-0.9910509516716692,"sequenceIndex":50},{"point":[0.730967787376657],"weight":-0.9642256254960733,"sequenceIndex":101},{"point":[0.730967787376657],"weight":-3.649168002940256,"sequenceIndex":144},{"point":[0.730967787376657],"weight":-6.199443881411274,"sequenceIndex":208},{"point":[0.730967787376657],"weight":-5.783173271776237,"sequenceIndex":104},{"point":[0.730967787376657],"weight":-1.8974741961999595,"sequenceIndex":52},{"point":[0.730967787376657],"weight":-1.4518357150958405,"sequenceIndex":204},{"point":[0.730967787376657],"weight":-0.7809275614791581,"sequenceIndex":107},{"point":[0.730967787376657],"weight":-1.4941055183554826,"sequenceIndex":167},{"point":[0.730967787376657],"weight":-1.5822614103169086,"sequenceIndex":128},{"point":[0.730967787376657],"weight":-1.853485564926993,"sequenceIndex":55},{"point":[0.730967787376657],"weight":-3.1001348949246763,"sequenceIndex":237},{"point":[0.730967787376657],"weight":-1.4864588476884966,"sequenceIndex":191},{"point":[0.730967787376657],"weight":-4.614086458880863,"sequenceIndex":113},{"point":[0.730967787376657],"weight":-1.891177171776994,"sequenceIndex":114},{"point":[0.730967787376657],"weight":-2.3046585707700835,"sequenceIndex":238},{"point":[0.730967787376657],"weight":-2.8807971645920247,"sequenceIndex":140},{"point":[0.730967787376657],"weight":-5.59318356154028,"sequenceIndex":117},{"point":[0.730967787376657],"weight":-1.711754664068602,"sequenceIndex":161},{"point":[0.730967787376657],"weight":-1.3824063413914451,"sequenceIndex":119},{"point":[0.730967787376657],"weight":-0.8172841610313254,"sequenceIndex":14},{"point":[0.730967787376657],"weight":-2.5296743437104667,"sequenceIndex":133},{"point":[0.730967787376657],"weight":-0.9794216145780051,"sequenceIndex":139},{"point":[0.730967787376657],"weight":-4.573476915148771,"sequenceIndex":230},{"point":[0.730967787376657],"weight":-0.9441447602810532,"sequenceIndex":187},{"point":[0.730967787376657],"weight":-1.9996514892735204,"sequenceIndex":216},{"point":[0.730967787376657],"weight":-1.3313592864440738,"sequenceIndex":202},{"point":[0.730967787376657],"weight":-1.6820281598262337,"sequenceIndex":179},{"point":[0.730967787376657],"weight":-1.9482856758938119,"sequenceIndex":252}],"sampleSize":128,"lambda":7.8125E-4,"random":{},"entriesSeen":256},"tree":{"storeSequenceIndexesEnabled":false,"centerOfMassEnabled":false,"random":{}}},{"sampler":{"weightedSamples":[{"point":[0.730967787376657],"weight":-0.4690226603242761,"sequenceIndex":18},{"point":[0.730967787376657],"weight":-0.47391002574010566,"sequenceIndex":64},{"point":[0.730967787376657],"weight":-0.47576934660910797,"sequenceIndex":124},{"point":[0.730967787376657],"weight":-0.5118725950820997,"sequenceIndex":78},{"point":[0.730967787376657],"weight":-0.5858666337155083,"sequenceIndex":173},{"point":[0.730967787376657],"weight":-0.47676726189854296,"sequenceIndex":111},{"point":[0.730967787376657],"weight":-0.5592716595811936,"sequenceIndex":123},{"point":[0.730967787376657],"weight":-0.5867980782507415,"sequenceIndex":219},{"point":[0.730967787376657],"weight":-0.6638495253565898,"sequenceIndex":182},{"point":[0.730967787376657],"weight":-0.6070646006053623,"sequenceIndex":21},{"point":[0.730967787376657],"weight":-0.6459072382000302,"sequenceIndex":239},{"point":[0.730967787376657],"weight":-0.5005194912496422,"sequenceIndex":171},{"point":[0.730967787376657],"weight":-0.7051162832111174,"sequenceIndex":52},{"point":[0.730967787376657],"weight":-0.6141493047696998,"sequenceIndex":28},{"point":[0.730967787376657],"weight":-0.616394044281684,"sequenceIndex":127},{"point":[0.730967787376657],"weight":-0.6001402346121937,"sequenceIndex":245},{"point":[0.730967787376657],"weight":-0.6313310517723464,"sequenceIndex":193},{"point":[0.730967787376657],"weight":-1.263606187080282,"sequenceIndex":255},{"point":[0.730967787376657],"weight":-0.8723508153187265,"sequenceIndex":79},{"point":[0.730967787376657],"weight":-0.7784771009695204,"sequenceIndex":80},{"point":[0.730967787376657],"weight":-0.8410340990668541,"sequenceIndex":133},{"point":[0.730967787376657],"weight":-1.411335209016898,"sequenceIndex":88},{"point":[0.730967787376657],"weight":-1.00483209125564,"sequenceIndex":211},{"point":[0.730967787376657],"weight":-1.0043968809926567,"sequenceIndex":134},{"point":[0.730967787376657],"weight":-1.3729508647418978,"sequenceIndex":163},{"point":[0.730967787376657],"weight":-0.7062815953758743,"sequenceIndex":208},{"point":[0.730967787376657],"weight":-0.7766955944600424,"sequenceIndex":238},{"point":[0.730967787376657],"weight":-0.8073544426538425,"sequenceIndex":137},{"point":[0.730967787376657],"weight":-1.1908414684423816,"sequenceIndex":153},{"point":[0.730967787376657],"weight":-0.6875676049583614,"sequenceIndex":30},{"point":[0.730967787376657],"weight":-1.096133864460894,"sequenceIndex":62},{"point":[0.730967787376657],"weight":-0.6396097151375295,"sequenceIndex":227},{"point":[0.730967787376657],"weight":-1.5187709601098565,"sequenceIndex":66},{"point":[0.730967787376657],"weight":-0.8329598385700744,"sequenceIndex":68},{"point":[0.730967787376657],"weight":-1.15632975799481,"sequenceIndex":136},{"point":[0.730967787376657],"weight":-2.035380007204431,"sequenceIndex":237},{"point":[0.730967787376657],"weight":-1.4820441223490732,"sequenceIndex":74},{"point":[0.730967787376657],"weight":-1.037170324459352,"sequenceIndex":19},{"point":[0.730967787376657],"weight":-2.244783043713239,"sequenceIndex":39},{"point":[0.730967787376657],"weight":-0.8768985441843398,"sequenceIndex":195},{"point":[0.730967787376657],"weight":-0.8965022546554009,"sequenceIndex":145},{"point":[0.730967787376657],"weight":-1.0668373309933914,"sequenceIndex":42},{"point":[0.730967787376657],"weight":-1.8958213817460277,"sequenceIndex":87},{"point":[0.730967787376657],"weight":-2.467472064859864,"sequenceIndex":5},{"point":[0.730967787376657],"weight":-1.593981432282716,"sequenceIndex":209},{"point":[0.730967787376657],"weight":-1.037021780639619,"sequenceIndex":92},{"point":[0.730967787376657],"weight":-2.232306587350207,"sequenceIndex":95},{"point":[0.730967787376657],"weight":-1.496704044194034,"sequenceIndex":146},{"point":[0.730967787376657],"weight":-1.129411470185101,"sequenceIndex":98},{"point":[0.730967787376657],"weight":-1.5822664932637913,"sequenceIndex":223},{"point":[0.730967787376657],"weight":-1.5955119504101944,"sequenceIndex":170},{"point":[0.730967787376657],"weight":-0.7148148532528689,"sequenceIndex":226},{"point":[0.730967787376657],"weight":-1.5089159779038055,"sequenceIndex":53},{"point":[0.730967787376657],"weight":-1.275668698331838,"sequenceIndex":54},{"point":[0.730967787376657],"weight":-1.057211317371552,"sequenceIndex":203},{"point":[0.730967787376657],"weight":-1.488375422864763,"sequenceIndex":57},{"point":[0.730967787376657],"weight":-1.8158855956039153,"sequenceIndex":218},{"point":[0.730967787376657],"weight":-1.4290256389972484,"sequenceIndex":117},{"point":[0.730967787376657],"weight":-1.5446749745783384,"sequenceIndex":119},{"point":[0.730967787376657],"weight":-0.7642714964916557,"sequenceIndex":183},{"point":[0.730967787376657],"weight":-1.334846413350134,"sequenceIndex":244},{"point":[0.730967787376657],"weight":-1.2529051810660161,"sequenceIndex":205},{"point":[0.730967787376657],"weight":-1.1932181487873907,"sequenceIndex":246},{"point":[0.730967787376657],"weight":-0.860981889689751,"sequenceIndex":251},{"point":[0.730967787376657],"weight":-1.643734965526611,"sequenceIndex":33},{"point":[0.730967787376657],"weight":-3.5214590408627697,"sequenceIndex":16},{"point":[0.730967787376657],"weight":-1.8222152873314132,"sequenceIndex":67},{"point":[0.730967787376657],"weight":-2.437864947930331,"sequenceIndex":243},{"point":[0.730967787376657],"weight":-1.4901819263998541,"sequenceIndex":187},{"point":[0.730967787376657],"weight":-1.464480508502039,"sequenceIndex":194},{"point":[0.730967787376657],"weight":-1.7079103160165392,"sequenceIndex":71},{"point":[0.730967787376657],"weight":-3.4639089477819898,"sequenceIndex":72},{"point":[0.730967787376657],"weight":-2.2936580101316992,"sequenceIndex":73},{"point":[0.730967787376657],"weight":-4.433496954849337,"sequenceIndex":37},{"point":[0.730967787376657],"weight":-2.6848530004962528,"sequenceIndex":75},{"point":[0.730967787376657],"weight":-2.1684811228552623,"sequenceIndex":76},{"point":[0.730967787376657],"weight":-1.6829915910962994,"sequenceIndex":38},{"point":[0.730967787376657],"weight":-2.8731318107859445,"sequenceIndex":247},{"point":[0.730967787376657],"weight":-3.0054401455059945,"sequenceIndex":131},{"point":[0.730967787376657],"weight":-3.072554262159996,"sequenceIndex":10},{"point":[0.730967787376657],"weight":-1.863991940667053,"sequenceIndex":197},{"point":[0.730967787376657],"weight":-0.9072970647872125,"sequenceIndex":156},{"point":[0.730967787376657],"weight":-1.9812988878490263,"sequenceIndex":188},{"point":[0.730967787376657],"weight":-4.152715695480708,"sequenceIndex":228},{"point":[0.730967787376657],"weight":-1.3998675279124526,"sequenceIndex":85},{"point":[0.730967787376657],"weight":-1.966715289043048,"sequenceIndex":138},{"point":[0.730967787376657],"weight":-2.752756546041057,"sequenceIndex":162},{"point":[0.730967787376657],"weight":-2.7466319457177675,"sequenceIndex":249},{"point":[0.730967787376657],"weight":-2.7236305793013074,"sequenceIndex":200},{"point":[0.730967787376657],"weight":-1.8015947384538493,"sequenceIndex":175},{"point":[0.730967787376657],"weight":-1.6083748995469445,"sequenceIndex":91},{"point":[0.730967787376657],"weight":-3.087856753319444,"sequenceIndex":46},{"point":[0.730967787376657],"weight":-2.269894598970291,"sequenceIndex":150},{"point":[0.730967787376657],"weight":-6.057665347420337,"sequenceIndex":215},{"point":[0.730967787376657],"weight":-2.2688744874163245,"sequenceIndex":220},{"point":[0.730967787376657],"weight":-4.608044692998849,"sequenceIndex":24},{"point":[0.730967787376657],"weight":-2.9086925388127787,"sequenceIndex":97},{"point":[0.730967787376657],"weight":-1.5657659076325412,"sequenceIndex":48},{"point":[0.730967787376657],"weight":-1.2937542682387821,"sequenceIndex":143},{"point":[0.730967787376657],"weight":-2.031708577095081,"sequenceIndex":230},{"point":[0.730967787376657],"weight":-2.651133080337707,"sequenceIndex":148},{"point":[0.730967787376657],"weight":-3.1710259993683247,"sequenceIndex":102},{"point":[0.730967787376657],"weight":-2.5081949982213447,"sequenceIndex":141},{"point":[0.730967787376657],"weight":-3.4845880886117224,"sequenceIndex":13},{"point":[0.730967787376657],"weight":-0.77396698046313,"sequenceIndex":147},{"point":[0.730967787376657],"weight":-2.6153038296826536,"sequenceIndex":224},{"point":[0.730967787376657],"weight":-2.174754965123791,"sequenceIndex":107},{"point":[0.730967787376657],"weight":-1.6953089495193248,"sequenceIndex":26},{"point":[0.730967787376657],"weight":-2.1759607478514598,"sequenceIndex":152},{"point":[0.730967787376657],"weight":-1.2981043083964339,"sequenceIndex":55},{"point":[0.730967787376657],"weight":-1.3252636997506482,"sequenceIndex":132},{"point":[0.730967787376657],"weight":-5.415443671148253,"sequenceIndex":56},{"point":[0.730967787376657],"weight":-2.835273508980913,"sequenceIndex":112},{"point":[0.730967787376657],"weight":-2.663762964699005,"sequenceIndex":7},{"point":[0.730967787376657],"weight":-4.103655726561295,"sequenceIndex":32},{"point":[0.730967787376657],"weight":-1.746849033248496,"sequenceIndex":116},{"point":[0.730967787376657],"weight":-2.4327151010230805,"sequenceIndex":234},{"point":[0.730967787376657],"weight":-3.749890634148176,"sequenceIndex":118},{"point":[0.730967787376657],"weight":-1.6447069507271432,"sequenceIndex":59},{"point":[0.730967787376657],"weight":-1.515353868855795,"sequenceIndex":60},{"point":[0.730967787376657],"weight":-0.8027401705254581,"sequenceIndex":120},{"point":[0.730967787376657],"weight":-3.2023503225342393,"sequenceIndex":122},{"point":[0.730967787376657],"weight":-1.8757185316985974,"sequenceIndex":210},{"point":[0.730967787376657],"weight":-2.335847595387624,"sequenceIndex":31},{"point":[0.730967787376657],"weight":-2.1619601925664362,"sequenceIndex":235},{"point":[0.730967787376657],"weight":-1.8554155965111438,"sequenceIndex":236},{"point":[0.730967787376657],"weight":-1.3606060443850454,"sequenceIndex":158},{"point":[0.730967787376657],"weight":-1.300350017015076,"sequenceIndex":256}],"sampleSize":128,"lambda":7.8125E-4,"random":{},"entriesSeen":256},"tree":{"storeSequenceIndexesEnabled":false,"centerOfMassEnabled":false,"random":{}}},{"sampler":{"weightedSamples":[{"point":[0.730967787376657],"weight":-0.48936925615707577,"sequenceIndex":79},{"point":[0.730967787376657],"weight":-0.5195422987117615,"sequenceIndex":135},{"point":[0.730967787376657],"weight":-0.5115083905666227,"sequenceIndex":13},{"point":[0.730967787376657],"weight":-0.5252132974013652,"sequenceIndex":33},{"point":[0.730967787376657],"weight":-0.5253375211311792,"sequenceIndex":47},{"point":[0.730967787376657],"weight":-0.5724464115353278,"sequenceIndex":48},{"point":[0.730967787376657],"weight":-0.5206309998807405,"sequenceIndex":127},{"point":[0.730967787376657],"weight":-0.5561589625919175,"sequenceIndex":35},{"point":[0.730967787376657],"weight":-0.6960135916833867,"sequenceIndex":167},{"point":[0.730967787376657],"weight":-0.6420497472841934,"sequenceIndex":208},{"point":[0.730967787376657],"weight":-0.6052687086899959,"sequenceIndex":89},{"point":[0.730967787376657],"weight":-0.5969579893056953,"sequenceIndex":51},{"point":[0.730967787376657],"weight":-0.7970784993143802,"sequenceIndex":211},{"point":[0.730967787376657],"weight":-0.7259299411051049,"sequenceIndex":168},{"point":[0.730967787376657],"weight":-0.6341155012745775,"sequenceIndex":128},{"point":[0.730967787376657],"weight":-0.5667682460123049,"sequenceIndex":32},{"point":[0.730967787376657],"weight":-0.6725713031320693,"sequenceIndex":71},{"point":[0.730967787376657],"weight":-0.7132779703395214,"sequenceIndex":74},{"point":[0.730967787376657],"weight":-0.9600104496980892,"sequenceIndex":244},{"point":[0.730967787376657],"weight":-0.6834106241878374,"sequenceIndex":4},{"point":[0.730967787376657],"weight":-0.6432955392423066,"sequenceIndex":85},{"point":[0.730967787376657],"weight":-0.8138924894642104,"sequenceIndex":144},{"point":[0.730967787376657],"weight":-0.6706032827499723,"sequenceIndex":23},{"point":[0.730967787376657],"weight":-0.6678680187140987,"sequenceIndex":2},{"point":[0.730967787376657],"weight":-0.6406411957205711,"sequenceIndex":25},{"point":[0.730967787376657],"weight":-1.2158661264250965,"sequenceIndex":204},{"point":[0.730967787376657],"weight":-1.0804048416895382,"sequenceIndex":109},{"point":[0.730967787376657],"weight":-1.246661919763674,"sequenceIndex":239},{"point":[0.730967787376657],"weight":-0.8114899664108656,"sequenceIndex":58},{"point":[0.730967787376657],"weight":-0.8014167467908717,"sequenceIndex":190},{"point":[0.730967787376657],"weight":-0.8494084507644828,"sequenceIndex":162},{"point":[0.730967787376657],"weight":-0.770748494740312,"sequenceIndex":246},{"point":[0.730967787376657],"weight":-0.8362224432986846,"sequenceIndex":66},{"point":[0.730967787376657],"weight":-0.7197365069228265,"sequenceIndex":1},{"point":[0.730967787376657],"weight":-0.7184739183289851,"sequenceIndex":173},{"point":[0.730967787376657],"weight":-0.7720271107684699,"sequenceIndex":9},{"point":[0.730967787376657],"weight":-1.2035112709955944,"sequenceIndex":151},{"point":[0.730967787376657],"weight":-0.9969284152821132,"sequenceIndex":234},{"point":[0.730967787376657],"weight":-1.0618675103930024,"sequenceIndex":229},{"point":[0.730967787376657],"weight":-1.6752068529421864,"sequenceIndex":10},{"point":[0.730967787376657],"weight":-0.7784629762658783,"sequenceIndex":172},{"point":[0.730967787376657],"weight":-0.9201468131516433,"sequenceIndex":206},{"point":[0.730967787376657],"weight":-2.56103496867805,"sequenceIndex":137},{"point":[0.730967787376657],"weight":-1.8479920694216696,"sequenceIndex":238},{"point":[0.730967787376657],"weight":-1.5364855976352314,"sequenceIndex":132},{"point":[0.730967787376657],"weight":-0.9979316321247762,"sequenceIndex":92},{"point":[0.730967787376657],"weight":-1.1936561273445407,"sequenceIndex":94},{"point":[0.730967787376657],"weight":-1.0012160740236855,"sequenceIndex":96},{"point":[0.730967787376657],"weight":-2.205194587849211,"sequenceIndex":98},{"point":[0.730967787376657],"weight":-0.8920818415453414,"sequenceIndex":253},{"point":[0.730967787376657],"weight":-0.7337279574166271,"sequenceIndex":138},{"point":[0.730967787376657],"weight":-1.6933268581197949,"sequenceIndex":52},{"point":[0.730967787376657],"weight":-1.3625904708981689,"sequenceIndex":195},{"point":[0.730967787376657],"weight":-1.1046452257111796,"sequenceIndex":108},{"point":[0.730967787376657],"weight":-1.148330123402003,"sequenceIndex":111},{"point":[0.730967787376657],"weight":-1.4617862626828353,"sequenceIndex":56},{"point":[0.730967787376657],"weight":-1.7011114506512235,"sequenceIndex":145},{"point":[0.730967787376657],"weight":-1.2817035458651869,"sequenceIndex":117},{"point":[0.730967787376657],"weight":-0.8948563421574007,"sequenceIndex":59},{"point":[0.730967787376657],"weight":-1.4092148847497432,"sequenceIndex":121},{"point":[0.730967787376657],"weight":-1.0170676092947422,"sequenceIndex":226},{"point":[0.730967787376657],"weight":-1.654913567734801,"sequenceIndex":124},{"point":[0.730967787376657],"weight":-1.0108905041777576,"sequenceIndex":150},{"point":[0.730967787376657],"weight":-0.8377414054707961,"sequenceIndex":254},{"point":[0.730967787376657],"weight":-2.2819336331914055,"sequenceIndex":220},{"point":[0.730967787376657],"weight":-2.239836637071006,"sequenceIndex":242},{"point":[0.730967787376657],"weight":-2.206059095371257,"sequenceIndex":165},{"point":[0.730967787376657],"weight":-2.8285350724920644,"sequenceIndex":203},{"point":[0.730967787376657],"weight":-2.298091957032309,"sequenceIndex":201},{"point":[0.730967787376657],"weight":-1.9537349503344175,"sequenceIndex":255},{"point":[0.730967787376657],"weight":-1.6019887559321693,"sequenceIndex":222},{"point":[0.730967787376657],"weight":-3.2317143734174354,"sequenceIndex":72},{"point":[0.730967787376657],"weight":-2.1820036884843517,"sequenceIndex":73},{"point":[0.730967787376657],"weight":-4.942369102919253,"sequenceIndex":175},{"point":[0.730967787376657],"weight":-1.687330281244884,"sequenceIndex":180},{"point":[0.730967787376657],"weight":-1.3578749343781131,"sequenceIndex":76},{"point":[0.730967787376657],"weight":-1.630525794051171,"sequenceIndex":215},{"point":[0.730967787376657],"weight":-1.9875379191477927,"sequenceIndex":225},{"point":[0.730967787376657],"weight":-2.609146536426053,"sequenceIndex":174},{"point":[0.730967787376657],"weight":-2.3830148221654412,"sequenceIndex":80},{"point":[0.730967787376657],"weight":-5.424420792747065,"sequenceIndex":194},{"point":[0.730967787376657],"weight":-1.6749998462017444,"sequenceIndex":41},{"point":[0.730967787376657],"weight":-1.8682484603713805,"sequenceIndex":156},{"point":[0.730967787376657],"weight":-1.667960782054002,"sequenceIndex":21},{"point":[0.730967787376657],"weight":-1.101789897506332,"sequenceIndex":188},{"point":[0.730967787376657],"weight":-4.061096583883185,"sequenceIndex":43},{"point":[0.730967787376657],"weight":-3.0076933245182293,"sequenceIndex":192},{"point":[0.730967787376657],"weight":-2.7949145966851745,"sequenceIndex":11},{"point":[0.730967787376657],"weight":-3.364930356899793,"sequenceIndex":199},{"point":[0.730967787376657],"weight":-3.4905175797830874,"sequenceIndex":90},{"point":[0.730967787376657],"weight":-1.6765599799798108,"sequenceIndex":45},{"point":[0.730967787376657],"weight":-3.575259474443717,"sequenceIndex":210},{"point":[0.730967787376657],"weight":-1.7255999932963655,"sequenceIndex":8},{"point":[0.730967787376657],"weight":-1.445201781755901,"sequenceIndex":133},{"point":[0.730967787376657],"weight":-2.770241241485631,"sequenceIndex":95},{"point":[0.730967787376657],"weight":-2.127238512751966,"sequenceIndex":218},{"point":[0.730967787376657],"weight":-2.625311402179426,"sequenceIndex":161},{"point":[0.730967787376657],"weight":-6.018922093663173,"sequenceIndex":49},{"point":[0.730967787376657],"weight":-2.3351819022247913,"sequenceIndex":99},{"point":[0.730967787376657],"weight":-0.957887035862091,"sequenceIndex":100},{"point":[0.730967787376657],"weight":-1.420211341352382,"sequenceIndex":101},{"point":[0.730967787376657],"weight":-3.2449927547509314,"sequenceIndex":102},{"point":[0.730967787376657],"weight":-3.199908399828084,"sequenceIndex":189},{"point":[0.730967787376657],"weight":-4.467348434192797,"sequenceIndex":166},{"point":[0.730967787376657],"weight":-2.164040300433013,"sequenceIndex":130},{"point":[0.730967787376657],"weight":-3.582879029373041,"sequenceIndex":236},{"point":[0.730967787376657],"weight":-1.3810263187274343,"sequenceIndex":107},{"point":[0.730967787376657],"weight":-1.9774841590898877,"sequenceIndex":27},{"point":[0.730967787376657],"weight":-2.6106461661218425,"sequenceIndex":249},{"point":[0.730967787376657],"weight":-1.54112773027552,"sequenceIndex":54},{"point":[0.730967787376657],"weight":-1.245733359380224,"sequenceIndex":216},{"point":[0.730967787376657],"weight":-2.127448286671564,"sequenceIndex":112},{"point":[0.730967787376657],"weight":-1.9117167262704728,"sequenceIndex":113},{"point":[0.730967787376657],"weight":-1.8003111275812387,"sequenceIndex":186},{"point":[0.730967787376657],"weight":-3.3342372023797537,"sequenceIndex":224},{"point":[0.730967787376657],"weight":-3.111959868000764,"sequenceIndex":116},{"point":[0.730967787376657],"weight":-1.2876260927966834,"sequenceIndex":240},{"point":[0.730967787376657],"weight":-1.7203046697234914,"sequenceIndex":200},{"point":[0.730967787376657],"weight":-1.3722131173924381,"sequenceIndex":177},{"point":[0.730967787376657],"weight":-1.9669596210178122,"sequenceIndex":60},{"point":[0.730967787376657],"weight":-1.6594469714908804,"sequenceIndex":30},{"point":[0.730967787376657],"weight":-2.791288438988505,"sequenceIndex":61},{"point":[0.730967787376657],"weight":-1.2256040609134418,"sequenceIndex":123},{"point":[0.730967787376657],"weight":-2.6357763582448688,"sequenceIndex":31},{"point":[0.730967787376657],"weight":-2.2728796367055173,"sequenceIndex":125},{"point":[0.730967787376657],"weight":-1.35227088110744,"sequenceIndex":134},{"point":[0.730967787376657],"weight":-3.6544624580103204,"sequenceIndex":227},{"point":[0.730967787376657],"weight":-1.8532566572400933,"sequenceIndex":256}],"sampleSize":128,"lambda":7.8125E-4,"random":{},"entriesSeen":256},"tree":{"storeSequenceIndexesEnabled":false,"centerOfMassEnabled":false,"random":{}}},{"sampler":{"weightedSamples":[{"point":[0.730967787376657],"weight":-0.5400219729664453,"sequenceIndex":206},{"point":[0.730967787376657],"weight":-0.5422898155336928,"sequenceIndex":215},{"point":[0.730967787376657],"weight":-0.5697075814112917,"sequenceIndex":153},{"point":[0.730967787376657],"weight":-0.6011353205017963,"sequenceIndex":213},{"point":[0.730967787376657],"weight":-0.6414506639218069,"sequenceIndex":92},{"point":[0.730967787376657],"weight":-0.5805762292167888,"sequenceIndex":109},{"point":[0.730967787376657],"weight":-0.60878848055579,"sequenceIndex":223},{"point":[0.730967787376657],"weight":-0.6084622704412626,"sequenceIndex":231},{"point":[0.730967787376657],"weight":-0.6208784438160347,"sequenceIndex":183},{"point":[0.730967787376657],"weight":-0.6525371946187392,"sequenceIndex":20},{"point":[0.730967787376657],"weight":-0.7065262202845024,"sequenceIndex":11},{"point":[0.730967787376657],"weight":-0.596855975769176,"sequenceIndex":158},{"point":[0.730967787376657],"weight":-0.7195501081969338,"sequenceIndex":220},{"point":[0.730967787376657],"weight":-0.6587466497797975,"sequenceIndex":217},{"point":[0.730967787376657],"weight":-0.6129725752621227,"sequenceIndex":63},{"point":[0.730967787376657],"weight":-0.6501960651078434,"sequenceIndex":243},{"point":[0.730967787376657],"weight":-0.7982643902907938,"sequenceIndex":34},{"point":[0.730967787376657],"weight":-0.9590417476758006,"sequenceIndex":72},{"point":[0.730967787376657],"weight":-0.7623214635030011,"sequenceIndex":77},{"point":[0.730967787376657],"weight":-1.2170097723923148,"sequenceIndex":41},{"point":[0.730967787376657],"weight":-0.8280701594770999,"sequenceIndex":149},{"point":[0.730967787376657],"weight":-0.8465693865049617,"sequenceIndex":88},{"point":[0.730967787376657],"weight":-0.81222211649316,"sequenceIndex":93},{"point":[0.730967787376657],"weight":-0.8624012508840969,"sequenceIndex":12},{"point":[0.730967787376657],"weight":-0.8867124180039911,"sequenceIndex":103},{"point":[0.730967787376657],"weight":-0.8359050762547878,"sequenceIndex":245},{"point":[0.730967787376657],"weight":-1.3457025876506035,"sequenceIndex":54},{"point":[0.730967787376657],"weight":-0.7315618428829632,"sequenceIndex":113},{"point":[0.730967787376657],"weight":-0.703801183115682,"sequenceIndex":222},{"point":[0.730967787376657],"weight":-1.1354035363191792,"sequenceIndex":122},{"point":[0.730967787376657],"weight":-0.6329735251349007,"sequenceIndex":124},{"point":[0.730967787376657],"weight":-0.9919356918523081,"sequenceIndex":255},{"point":[0.730967787376657],"weight":-1.1051876207678466,"sequenceIndex":32},{"point":[0.730967787376657],"weight":-0.9167085638400191,"sequenceIndex":17},{"point":[0.730967787376657],"weight":-0.8662650308223615,"sequenceIndex":71},{"point":[0.730967787376657],"weight":-1.2321983614616387,"sequenceIndex":196},{"point":[0.730967787376657],"weight":-1.3313667680577388,"sequenceIndex":36},{"point":[0.730967787376657],"weight":-0.9682947935531299,"sequenceIndex":237},{"point":[0.730967787376657],"weight":-1.6626629547814107,"sequenceIndex":140},{"point":[0.730967787376657],"weight":-1.6503433285739375,"sequenceIndex":80},{"point":[0.730967787376657],"weight":-1.2335404981392106,"sequenceIndex":83},{"point":[0.730967787376657],"weight":-1.041639836026636,"sequenceIndex":85},{"point":[0.730967787376657],"weight":-2.3255234640013795,"sequenceIndex":182},{"point":[0.730967787376657],"weight":-0.9531658157486329,"sequenceIndex":209},{"point":[0.730967787376657],"weight":-1.1245369656015418,"sequenceIndex":90},{"point":[0.730967787376657],"weight":-0.9825069057485585,"sequenceIndex":23},{"point":[0.730967787376657],"weight":-0.8498987539525801,"sequenceIndex":46},{"point":[0.730967787376657],"weight":-1.1329223657285659,"sequenceIndex":24},{"point":[0.730967787376657],"weight":-0.9322094887785128,"sequenceIndex":232},{"point":[0.730967787376657],"weight":-1.0334535473741493,"sequenceIndex":170},{"point":[0.730967787376657],"weight":-1.044075477502805,"sequenceIndex":102},{"point":[0.730967787376657],"weight":-1.1111132895502218,"sequenceIndex":160},{"point":[0.730967787376657],"weight":-0.9329278399123638,"sequenceIndex":53},{"point":[0.730967787376657],"weight":-1.3872721300742499,"sequenceIndex":27},{"point":[0.730967787376657],"weight":-2.0323046248494707,"sequenceIndex":110},{"point":[0.730967787376657],"weight":-0.7653732202824346,"sequenceIndex":28},{"point":[0.730967787376657],"weight":-1.694940837675672,"sequenceIndex":57},{"point":[0.730967787376657],"weight":-1.1458728828307505,"sequenceIndex":200},{"point":[0.730967787376657],"weight":-1.2726303587751704,"sequenceIndex":168},{"point":[0.730967787376657],"weight":-1.6938889814262188,"sequenceIndex":154},{"point":[0.730967787376657],"weight":-1.726997663753874,"sequenceIndex":226},{"point":[0.730967787376657],"weight":-1.1783802860200225,"sequenceIndex":125},{"point":[0.730967787376657],"weight":-0.7485279560432714,"sequenceIndex":127},{"point":[0.730967787376657],"weight":-1.007268394491335,"sequenceIndex":151},{"point":[0.730967787376657],"weight":-3.0751644876903326,"sequenceIndex":248},{"point":[0.730967787376657],"weight":-2.024699957805815,"sequenceIndex":66},{"point":[0.730967787376657],"weight":-1.1913345564380498,"sequenceIndex":67},{"point":[0.730967787376657],"weight":-2.126135830977528,"sequenceIndex":163},{"point":[0.730967787376657],"weight":-2.2175158485121034,"sequenceIndex":132},{"point":[0.730967787376657],"weight":-2.2291663165049456,"sequenceIndex":187},{"point":[0.730967787376657],"weight":-1.682773920126382,"sequenceIndex":219},{"point":[0.730967787376657],"weight":-2.2244086200158804,"sequenceIndex":18},{"point":[0.730967787376657],"weight":-1.4520007422636012,"sequenceIndex":189},{"point":[0.730967787376657],"weight":-1.7406607159789884,"sequenceIndex":74},{"point":[0.730967787376657],"weight":-5.430575036217457,"sequenceIndex":138},{"point":[0.730967787376657],"weight":-2.4278463490903337,"sequenceIndex":214},{"point":[0.730967787376657],"weight":-2.3126155250365454,"sequenceIndex":227},{"point":[0.730967787376657],"weight":-4.572440975273183,"sequenceIndex":39},{"point":[0.730967787376657],"weight":-2.1204463808947196,"sequenceIndex":78},{"point":[0.730967787376657],"weight":-2.26919732681296,"sequenceIndex":195},{"point":[0.730967787376657],"weight":-2.049671558476338,"sequenceIndex":81},{"point":[0.730967787376657],"weight":-3.4942272546255255,"sequenceIndex":82},{"point":[0.730967787376657],"weight":-3.042513216218693,"sequenceIndex":207},{"point":[0.730967787376657],"weight":-2.7209384282397484,"sequenceIndex":42},{"point":[0.730967787376657],"weight":-1.4921297226679888,"sequenceIndex":172},{"point":[0.730967787376657],"weight":-3.983143464179097,"sequenceIndex":43},{"point":[0.730967787376657],"weight":-3.242370545417214,"sequenceIndex":136},{"point":[0.730967787376657],"weight":-1.1977848503330741,"sequenceIndex":22},{"point":[0.730967787376657],"weight":-2.7774468617383845,"sequenceIndex":129},{"point":[0.730967787376657],"weight":-2.343839694309607,"sequenceIndex":45},{"point":[0.730967787376657],"weight":-1.9161161173702235,"sequenceIndex":91},{"point":[0.730967787376657],"weight":-1.5993114175520602,"sequenceIndex":201},{"point":[0.730967787376657],"weight":-1.5308326036694837,"sequenceIndex":146},{"point":[0.730967787376657],"weight":-1.7203288345793066,"sequenceIndex":141},{"point":[0.730967787376657],"weight":-1.079328916290324,"sequenceIndex":95},{"point":[0.730967787376657],"weight":-3.0590390641068184,"sequenceIndex":181},{"point":[0.730967787376657],"weight":-2.9774470521484737,"sequenceIndex":167},{"point":[0.730967787376657],"weight":-1.5800435316350046,"sequenceIndex":179},{"point":[0.730967787376657],"weight":-1.710079083416593,"sequenceIndex":131},{"point":[0.730967787376657],"weight":-1.286634476579088,"sequenceIndex":25},{"point":[0.730967787376657],"weight":-1.0413972867714019,"sequenceIndex":101},{"point":[0.730967787376657],"weight":-1.4781904794924092,"sequenceIndex":194},{"point":[0.730967787376657],"weight":-1.1049154602055509,"sequenceIndex":152},{"point":[0.730967787376657],"weight":-2.5622994725117363,"sequenceIndex":26},{"point":[0.730967787376657],"weight":-2.600495721679402,"sequenceIndex":105},{"point":[0.730967787376657],"weight":-3.992594947928178,"sequenceIndex":221},{"point":[0.730967787376657],"weight":-2.8681813849796813,"sequenceIndex":197},{"point":[0.730967787376657],"weight":-2.9031373258691966,"sequenceIndex":202},{"point":[0.730967787376657],"weight":-2.2432842296148485,"sequenceIndex":178},{"point":[0.730967787376657],"weight":-3.3634117202093954,"sequenceIndex":238},{"point":[0.730967787376657],"weight":-3.961772541695049,"sequenceIndex":130},{"point":[0.730967787376657],"weight":-1.2651272935945312,"sequenceIndex":56},{"point":[0.730967787376657],"weight":-3.8081512784705436,"sequenceIndex":234},{"point":[0.730967787376657],"weight":-4.537574477184877,"sequenceIndex":114},{"point":[0.730967787376657],"weight":-2.705810157727256,"sequenceIndex":115},{"point":[0.730967787376657],"weight":-1.2185711341029284,"sequenceIndex":211},{"point":[0.730967787376657],"weight":-1.8727249690960706,"sequenceIndex":137},{"point":[0.730967787376657],"weight":-1.4906226125574447,"sequenceIndex":150},{"point":[0.730967787376657],"weight":-1.8807439015037761,"sequenceIndex":210},{"point":[0.730967787376657],"weight":-3.5006651338052603,"sequenceIndex":120},{"point":[0.730967787376657],"weight":-2.773541240840804,"sequenceIndex":15},{"point":[0.730967787376657],"weight":-2.0455679073841817,"sequenceIndex":61},{"point":[0.730967787376657],"weight":-1.9446761281561886,"sequenceIndex":2},{"point":[0.730967787376657],"weight":-1.8060978695648904,"sequenceIndex":30},{"point":[0.730967787376657],"weight":-2.1999139921026183,"sequenceIndex":235},{"point":[0.730967787376657],"weight":-0.9773875163087563,"sequenceIndex":62},{"point":[0.730967787376657],"weight":-2.184433279576839,"sequenceIndex":128},{"point":[0.730967787376657],"weight":-1.3973530150412647,"sequenceIndex":251}],"sampleSize":128,"lambda":7.8125E-4,"random":{},"entriesSeen":256},"tree":{"storeSequenceIndexesEnabled":false,"centerOfMassEnabled":false,"random":{}}},{"sampler":{"weightedSamples":[{"point":[0.730967787376657],"weight":-0.5987498470544814,"sequenceIndex":119},{"point":[0.730967787376657],"weight":-0.6343832884372003,"sequenceIndex":223},{"point":[0.730967787376657],"weight":-0.6265347889525956,"sequenceIndex":58},{"point":[0.730967787376657],"weight":-0.6348284236292753,"sequenceIndex":253},{"point":[0.730967787376657],"weight":-0.6423137304870976,"sequenceIndex":89},{"point":[0.730967787376657],"weight":-0.7445830695465843,"sequenceIndex":106},{"point":[0.730967787376657],"weight":-0.6615704526992696,"sequenceIndex":30},{"point":[0.730967787376657],"weight":-0.6398074679806687,"sequenceIndex":69},{"point":[0.730967787376657],"weight":-0.8889256336331488,"sequenceIndex":77},{"point":[0.730967787376657],"weight":-0.7138143789322109,"sequenceIndex":41},{"point":[0.730967787376657],"weight":-0.8101563074670317,"sequenceIndex":136},{"point":[0.730967787376657],"weight":-0.7737665313366329,"sequenceIndex":196},{"point":[0.730967787376657],"weight":-0.8155682703890998,"sequenceIndex":27},{"point":[0.730967787376657],"weight":-0.7217825692967873,"sequenceIndex":28},{"point":[0.730967787376657],"weight":-0.8728176670630304,"sequenceIndex":153},{"point":[0.730967787376657],"weight":-0.6469590934996523,"sequenceIndex":233},{"point":[0.730967787376657],"weight":-1.051537405151372,"sequenceIndex":5},{"point":[0.730967787376657],"weight":-0.9214312129528702,"sequenceIndex":188},{"point":[0.730967787376657],"weight":-1.1659385593708596,"sequenceIndex":9},{"point":[0.730967787376657],"weight":-1.1557678566140734,"sequenceIndex":81},{"point":[0.730967787376657],"weight":-0.8193173281242656,"sequenceIndex":85},{"point":[0.730967787376657],"weight":-0.9356813260410387,"sequenceIndex":177},{"point":[0.730967787376657],"weight":-1.0599525240465841,"sequenceIndex":245},{"point":[0.730967787376657],"weight":-0.933735784896078,"sequenceIndex":48},{"point":[0.730967787376657],"weight":-1.4959337794140695,"sequenceIndex":103},{"point":[0.730967787376657],"weight":-0.8611018872865674,"sequenceIndex":135},{"point":[0.730967787376657],"weight":-0.953554231799264,"sequenceIndex":54},{"point":[0.730967787376657],"weight":-0.7884202776290476,"sequenceIndex":115},{"point":[0.730967787376657],"weight":-0.9771656403730621,"sequenceIndex":232},{"point":[0.730967787376657],"weight":-1.0324842009867354,"sequenceIndex":171},{"point":[0.730967787376657],"weight":-0.993466376294563,"sequenceIndex":201},{"point":[0.730967787376657],"weight":-0.6898828399170609,"sequenceIndex":238},{"point":[0.730967787376657],"weight":-1.3544025379961588,"sequenceIndex":33},{"point":[0.730967787376657],"weight":-1.0825055900542913,"sequenceIndex":243},{"point":[0.730967787376657],"weight":-2.1730513968051994,"sequenceIndex":212},{"point":[0.730967787376657],"weight":-2.076545197679671,"sequenceIndex":18},{"point":[0.730967787376657],"weight":-1.2150886290400185,"sequenceIndex":37},{"point":[0.730967787376657],"weight":-1.637047234204665,"sequenceIndex":219},{"point":[0.730967787376657],"weight":-1.535473443315547,"sequenceIndex":210},{"point":[0.730967787376657],"weight":-1.1869238986235762,"sequenceIndex":1},{"point":[0.730967787376657],"weight":-1.49796110553859,"sequenceIndex":191},{"point":[0.730967787376657],"weight":-1.1241464280043958,"sequenceIndex":21},{"point":[0.730967787376657],"weight":-1.0396976181491524,"sequenceIndex":141},{"point":[0.730967787376657],"weight":-1.4091893814056375,"sequenceIndex":88},{"point":[0.730967787376657],"weight":-0.9951492564450184,"sequenceIndex":44},{"point":[0.730967787376657],"weight":-1.468855709231272,"sequenceIndex":209},{"point":[0.730967787376657],"weight":-1.0895854003749517,"sequenceIndex":94},{"point":[0.730967787376657],"weight":-1.3452972323594308,"sequenceIndex":194},{"point":[0.730967787376657],"weight":-1.561301806093494,"sequenceIndex":99},{"point":[0.730967787376657],"weight":-1.800142036909597,"sequenceIndex":162},{"point":[0.730967787376657],"weight":-1.5015157115907647,"sequenceIndex":224},{"point":[0.730967787376657],"weight":-1.0300510083215342,"sequenceIndex":52},{"point":[0.730967787376657],"weight":-1.478075703187132,"sequenceIndex":53},{"point":[0.730967787376657],"weight":-1.0505375571033482,"sequenceIndex":163},{"point":[0.730967787376657],"weight":-0.9797694507773522,"sequenceIndex":161},{"point":[0.730967787376657],"weight":-1.7265569955847673,"sequenceIndex":112},{"point":[0.730967787376657],"weight":-2.621494725637668,"sequenceIndex":7},{"point":[0.730967787376657],"weight":-1.1745078405423919,"sequenceIndex":250},{"point":[0.730967787376657],"weight":-1.201093201218656,"sequenceIndex":218},{"point":[0.730967787376657],"weight":-2.499982630657892,"sequenceIndex":220},{"point":[0.730967787376657],"weight":-1.800979049077177,"sequenceIndex":64},{"point":[0.730967787376657],"weight":-1.6097956093518069,"sequenceIndex":221},{"point":[0.730967787376657],"weight":-1.2205098138587167,"sequenceIndex":227},{"point":[0.730967787376657],"weight":-0.9425211117925953,"sequenceIndex":231},{"point":[0.730967787376657],"weight":-2.611280247617019,"sequenceIndex":217},{"point":[0.730967787376657],"weight":-2.425375352614303,"sequenceIndex":66},{"point":[0.730967787376657],"weight":-2.5955142185414886,"sequenceIndex":158},{"point":[0.730967787376657],"weight":-2.1265641950538843,"sequenceIndex":34},{"point":[0.730967787376657],"weight":-1.0958415344268964,"sequenceIndex":68},{"point":[0.730967787376657],"weight":-3.748339230653709,"sequenceIndex":70},{"point":[0.730967787376657],"weight":-2.7653121916696506,"sequenceIndex":35},{"point":[0.730967787376657],"weight":-2.4327059647519254,"sequenceIndex":208},{"point":[0.730967787376657],"weight":-2.624990646418383,"sequenceIndex":148},{"point":[0.730967787376657],"weight":-2.7563162335731333,"sequenceIndex":74},{"point":[0.730967787376657],"weight":-1.737739611678513,"sequenceIndex":189},{"point":[0.730967787376657],"weight":-2.9825504959922258,"sequenceIndex":242},{"point":[0.730967787376657],"weight":-1.8073167685917038,"sequenceIndex":128},{"point":[0.730967787376657],"weight":-2.9911178934647618,"sequenceIndex":78},{"point":[0.730967787376657],"weight":-1.73580673519933,"sequenceIndex":79},{"point":[0.730967787376657],"weight":-1.3154091681056264,"sequenceIndex":80},{"point":[0.730967787376657],"weight":-1.2518165093403286,"sequenceIndex":213},{"point":[0.730967787376657],"weight":-2.390862971555316,"sequenceIndex":82},{"point":[0.730967787376657],"weight":-1.735486158005254,"sequenceIndex":144},{"point":[0.730967787376657],"weight":-1.6247060147727397,"sequenceIndex":173},{"point":[0.730967787376657],"weight":-1.197677535086284,"sequenceIndex":150},{"point":[0.730967787376657],"weight":-2.6799281213499055,"sequenceIndex":43},{"point":[0.730967787376657],"weight":-1.4825008913516715,"sequenceIndex":87},{"point":[0.730967787376657],"weight":-2.7445118682803082,"sequenceIndex":11},{"point":[0.730967787376657],"weight":-2.3622973085845556,"sequenceIndex":222},{"point":[0.730967787376657],"weight":-1.0102840917328684,"sequenceIndex":237},{"point":[0.730967787376657],"weight":-2.901234283596074,"sequenceIndex":147},{"point":[0.730967787376657],"weight":-2.2558415389451407,"sequenceIndex":155},{"point":[0.730967787376657],"weight":-1.715473750063015,"sequenceIndex":193},{"point":[0.730967787376657],"weight":-1.6499982108244386,"sequenceIndex":47},{"point":[0.730967787376657],"weight":-2.604617901316469,"sequenceIndex":95},{"point":[0.730967787376657],"weight":-1.5651866266248662,"sequenceIndex":96},{"point":[0.730967787376657],"weight":-1.550664767418523,"sequenceIndex":181},{"point":[0.730967787376657],"weight":-2.0560502910552176,"sequenceIndex":98},{"point":[0.730967787376657],"weight":-1.6285505355763177,"sequenceIndex":49},{"point":[0.730967787376657],"weight":-1.982416971895108,"sequenceIndex":50},{"point":[0.730967787376657],"weight":-2.5604201023226874,"sequenceIndex":205},{"point":[0.730967787376657],"weight":-1.8534556276068563,"sequenceIndex":51},{"point":[0.730967787376657],"weight":-2.4078160171408207,"sequenceIndex":185},{"point":[0.730967787376657],"weight":-2.5800263483739134,"sequenceIndex":13},{"point":[0.730967787376657],"weight":-1.928057298824879,"sequenceIndex":225},{"point":[0.730967787376657],"weight":-3.560167208358161,"sequenceIndex":152},{"point":[0.730967787376657],"weight":-3.007662070121767,"sequenceIndex":107},{"point":[0.730967787376657],"weight":-3.9425599842803383,"sequenceIndex":229},{"point":[0.730967787376657],"weight":-1.0709928558877528,"sequenceIndex":109},{"point":[0.730967787376657],"weight":-1.2167169944445078,"sequenceIndex":184},{"point":[0.730967787376657],"weight":-2.676857642067891,"sequenceIndex":187},{"point":[0.730967787376657],"weight":-2.6216595269157934,"sequenceIndex":56},{"point":[0.730967787376657],"weight":-1.8707625027915304,"sequenceIndex":113},{"point":[0.730967787376657],"weight":-2.741952941694783,"sequenceIndex":114},{"point":[0.730967787376657],"weight":-3.0887692202358825,"sequenceIndex":146},{"point":[0.730967787376657],"weight":-1.4111256716648566,"sequenceIndex":211},{"point":[0.730967787376657],"weight":-4.1350234695805135,"sequenceIndex":166},{"point":[0.730967787376657],"weight":-1.5317828560929139,"sequenceIndex":230},{"point":[0.730967787376657],"weight":-3.063478529160978,"sequenceIndex":159},{"point":[0.730967787376657],"weight":-2.9601787426542185,"sequenceIndex":180},{"point":[0.730967787376657],"weight":-3.6132895430868235,"sequenceIndex":157},{"point":[0.730967787376657],"weight":-2.0562008750163496,"sequenceIndex":235},{"point":[0.730967787376657],"weight":-3.3813813025025508,"sequenceIndex":4},{"point":[0.730967787376657],"weight":-2.223878842638713,"sequenceIndex":124},{"point":[0.730967787376657],"weight":-2.3226246864946063,"sequenceIndex":215},{"point":[0.730967787376657],"weight":-2.493796802891047,"sequenceIndex":216},{"point":[0.730967787376657],"weight":-2.5746290463306805,"sequenceIndex":255},{"point":[0.730967787376657],"weight":-2.9956432799667416,"sequenceIndex":256}],"sampleSize":128,"lambda":7.8125E-4,"random":{},"entriesSeen":256},"tree":{"storeSequenceIndexesEnabled":false,"centerOfMassEnabled":false,"random":{}}},{"sampler":{"weightedSamples":[{"point":[0.730967787376657],"weight":-0.37830866914710637,"sequenceIndex":84},{"point":[0.730967787376657],"weight":-0.4463872460091637,"sequenceIndex":243},{"point":[0.730967787376657],"weight":-0.41085873332651934,"sequenceIndex":184},{"point":[0.730967787376657],"weight":-0.4668503812110722,"sequenceIndex":145},{"point":[0.730967787376657],"weight":-0.5372332299725903,"sequenceIndex":82},{"point":[0.730967787376657],"weight":-0.44010041288892215,"sequenceIndex":27},{"point":[0.730967787376657],"weight":-0.41183488848551086,"sequenceIndex":61},{"point":[0.730967787376657],"weight":-0.48510167735530874,"sequenceIndex":238},{"point":[0.730967787376657],"weight":-0.6000965543382466,"sequenceIndex":253},{"point":[0.730967787376657],"weight":-0.6309301714507074,"sequenceIndex":40},{"point":[0.730967787376657],"weight":-0.5385140479567296,"sequenceIndex":23},{"point":[0.730967787376657],"weight":-0.4601380263570092,"sequenceIndex":50},{"point":[0.730967787376657],"weight":-0.5556133355759457,"sequenceIndex":182},{"point":[0.730967787376657],"weight":-0.594884774903095,"sequenceIndex":207},{"point":[0.730967787376657],"weight":-0.5727776685557783,"sequenceIndex":127},{"point":[0.730967787376657],"weight":-0.5032752196009966,"sequenceIndex":252},{"point":[0.730967787376657],"weight":-0.4964075933164406,"sequenceIndex":153},{"point":[0.730967787376657],"weight":-0.6299710522226973,"sequenceIndex":159},{"point":[0.730967787376657],"weight":-0.8207647638190864,"sequenceIndex":222},{"point":[0.730967787376657],"weight":-0.6709847045029163,"sequenceIndex":241},{"point":[0.730967787376657],"weight":-0.7032535105181074,"sequenceIndex":168},{"point":[0.730967787376657],"weight":-0.8456417113587725,"sequenceIndex":148},{"point":[0.730967787376657],"weight":-0.5828771595139194,"sequenceIndex":92},{"point":[0.730967787376657],"weight":-0.4746335371342851,"sequenceIndex":181},{"point":[0.730967787376657],"weight":-0.9237077700626983,"sequenceIndex":24},{"point":[0.730967787376657],"weight":-0.5965496041863341,"sequenceIndex":247},{"point":[0.730967787376657],"weight":-0.577220391683024,"sequenceIndex":55},{"point":[0.730967787376657],"weight":-0.6099339748366777,"sequenceIndex":113},{"point":[0.730967787376657],"weight":-1.0471545012622319,"sequenceIndex":59},{"point":[0.730967787376657],"weight":-0.6228309969891549,"sequenceIndex":147},{"point":[0.730967787376657],"weight":-0.6612059811900408,"sequenceIndex":126},{"point":[0.730967787376657],"weight":-0.5362945666322334,"sequenceIndex":256},{"point":[0.730967787376657],"weight":-0.653074725310054,"sequenceIndex":4},{"point":[0.730967787376657],"weight":-1.1507947796865088,"sequenceIndex":233},{"point":[0.730967787376657],"weight":-0.5738160332811427,"sequenceIndex":71},{"point":[0.730967787376657],"weight":-1.1744472410785696,"sequenceIndex":73},{"point":[0.730967787376657],"weight":-0.7122155493954858,"sequenceIndex":216},{"point":[0.730967787376657],"weight":-0.8679170080529981,"sequenceIndex":171},{"point":[0.730967787376657],"weight":-1.7786304669594108,"sequenceIndex":79},{"point":[0.730967787376657],"weight":-0.8417737356911484,"sequenceIndex":41},{"point":[0.730967787376657],"weight":-0.7321270922840707,"sequenceIndex":133},{"point":[0.730967787376657],"weight":-0.8649697999219775,"sequenceIndex":85},{"point":[0.730967787376657],"weight":-1.2659140442293355,"sequenceIndex":234},{"point":[0.730967787376657],"weight":-1.6148596814511247,"sequenceIndex":198},{"point":[0.730967787376657],"weight":-0.9919347065114452,"sequenceIndex":180},{"point":[0.730967787376657],"weight":-1.833892746836125,"sequenceIndex":193},{"point":[0.730967787376657],"weight":-0.6185808998581362,"sequenceIndex":33},{"point":[0.730967787376657],"weight":-0.48397711872655824,"sequenceIndex":187},{"point":[0.730967787376657],"weight":-1.0537372046167774,"sequenceIndex":163},{"point":[0.730967787376657],"weight":-1.046745542946602,"sequenceIndex":100},{"point":[0.730967787376657],"weight":-1.0941217178696185,"sequenceIndex":51},{"point":[0.730967787376657],"weight":-0.6037583220289323,"sequenceIndex":52},{"point":[0.730967787376657],"weight":-0.7651142067604528,"sequenceIndex":106},{"point":[0.730967787376657],"weight":-1.0476475320670484,"sequenceIndex":152},{"point":[0.730967787376657],"weight":-0.848241011745483,"sequenceIndex":111},{"point":[0.730967787376657],"weight":-0.8623315542633431,"sequenceIndex":3},{"point":[0.730967787376657],"weight":-1.0219322462113691,"sequenceIndex":115},{"point":[0.730967787376657],"weight":-1.760234985471205,"sequenceIndex":117},{"point":[0.730967787376657],"weight":-1.456637802916341,"sequenceIndex":140},{"point":[0.730967787376657],"weight":-2.0266224532379993,"sequenceIndex":176},{"point":[0.730967787376657],"weight":-1.049739066577617,"sequenceIndex":15},{"point":[0.730967787376657],"weight":-0.7076579776318296,"sequenceIndex":124},{"point":[0.730967787376657],"weight":-0.6697533995271825,"sequenceIndex":63},{"point":[0.730967787376657],"weight":-0.5496703117895667,"sequenceIndex":240},{"point":[0.730967787376657],"weight":-1.5326127324826482,"sequenceIndex":65},{"point":[0.730967787376657],"weight":-2.942939641105444,"sequenceIndex":195},{"point":[0.730967787376657],"weight":-0.6854374083736694,"sequenceIndex":67},{"point":[0.730967787376657],"weight":-1.824645264514033,"sequenceIndex":17},{"point":[0.730967787376657],"weight":-3.1456742298365765,"sequenceIndex":69},{"point":[0.730967787376657],"weight":-1.8604762104611985,"sequenceIndex":197},{"point":[0.730967787376657],"weight":-0.7605655195987693,"sequenceIndex":206},{"point":[0.730967787376657],"weight":-1.4362612560989068,"sequenceIndex":9},{"point":[0.730967787376657],"weight":-4.055198780385565,"sequenceIndex":202},{"point":[0.730967787376657],"weight":-0.7472631077507289,"sequenceIndex":37},{"point":[0.730967787376657],"weight":-3.1206107273100008,"sequenceIndex":231},{"point":[0.730967787376657],"weight":-1.1131079305098306,"sequenceIndex":19},{"point":[0.730967787376657],"weight":-1.7897176210491152,"sequenceIndex":77},{"point":[0.730967787376657],"weight":-4.708049760577171,"sequenceIndex":39},{"point":[0.730967787376657],"weight":-2.827730637055983,"sequenceIndex":166},{"point":[0.730967787376657],"weight":-2.558926290996792,"sequenceIndex":10},{"point":[0.730967787376657],"weight":-0.9010713866150604,"sequenceIndex":146},{"point":[0.730967787376657],"weight":-1.076485390186903,"sequenceIndex":20},{"point":[0.730967787376657],"weight":-2.2170917810076873,"sequenceIndex":151},{"point":[0.730967787376657],"weight":-1.2741699910050883,"sequenceIndex":21},{"point":[0.730967787376657],"weight":-6.020392062140608,"sequenceIndex":188},{"point":[0.730967787376657],"weight":-2.5713770525208126,"sequenceIndex":251},{"point":[0.730967787376657],"weight":-1.4062525368669976,"sequenceIndex":160},{"point":[0.730967787376657],"weight":-2.847158460989165,"sequenceIndex":11},{"point":[0.730967787376657],"weight":-1.7285539277638995,"sequenceIndex":89},{"point":[0.730967787376657],"weight":-2.9329604859115883,"sequenceIndex":90},{"point":[0.730967787376657],"weight":-1.8321794889231264,"sequenceIndex":45},{"point":[0.730967787376657],"weight":-2.094926207033655,"sequenceIndex":46},{"point":[0.730967787376657],"weight":-2.4668794071821463,"sequenceIndex":229},{"point":[0.730967787376657],"weight":-0.6906337473361398,"sequenceIndex":47},{"point":[0.730967787376657],"weight":-1.418789836513835,"sequenceIndex":192},{"point":[0.730967787376657],"weight":-2.2824292321262787,"sequenceIndex":6},{"point":[0.730967787376657],"weight":-0.9833522773215045,"sequenceIndex":48},{"point":[0.730967787376657],"weight":-1.9504528742233027,"sequenceIndex":49},{"point":[0.730967787376657],"weight":-1.2913760137514176,"sequenceIndex":220},{"point":[0.730967787376657],"weight":-2.581496777111648,"sequenceIndex":237},{"point":[0.730967787376657],"weight":-2.022636724311212,"sequenceIndex":101},{"point":[0.730967787376657],"weight":-2.3145773687766003,"sequenceIndex":211},{"point":[0.730967787376657],"weight":-2.317208152816806,"sequenceIndex":103},{"point":[0.730967787376657],"weight":-2.086089599415411,"sequenceIndex":12},{"point":[0.730967787376657],"weight":-1.1988584776776527,"sequenceIndex":191},{"point":[0.730967787376657],"weight":-3.242740882500467,"sequenceIndex":53},{"point":[0.730967787376657],"weight":-1.463487619798094,"sequenceIndex":189},{"point":[0.730967787376657],"weight":-1.5567384059263454,"sequenceIndex":26},{"point":[0.730967787376657],"weight":-1.8158539762153432,"sequenceIndex":174},{"point":[0.730967787376657],"weight":-1.4017343125209452,"sequenceIndex":16},{"point":[0.730967787376657],"weight":-1.8881368191412091,"sequenceIndex":218},{"point":[0.730967787376657],"weight":-2.924761737906918,"sequenceIndex":183},{"point":[0.730967787376657],"weight":-1.6249835048205947,"sequenceIndex":175},{"point":[0.730967787376657],"weight":-1.265311282303913,"sequenceIndex":114},{"point":[0.730967787376657],"weight":-2.679985235797616,"sequenceIndex":161},{"point":[0.730967787376657],"weight":-2.2746077659428683,"sequenceIndex":116},{"point":[0.730967787376657],"weight":-2.719413709806574,"sequenceIndex":142},{"point":[0.730967787376657],"weight":-1.9925637158756002,"sequenceIndex":196},{"point":[0.730967787376657],"weight":-1.9367036206239212,"sequenceIndex":132},{"point":[0.730967787376657],"weight":-4.009676453821784,"sequenceIndex":120},{"point":[0.730967787376657],"weight":-2.0611769488689924,"sequenceIndex":60},{"point":[0.730967787376657],"weight":-1.7153632689358809,"sequenceIndex":199},{"point":[0.730967787376657],"weight":-1.7063985016993353,"sequenceIndex":165},{"point":[0.730967787376657],"weight":-0.7445928558684366,"sequenceIndex":31},{"point":[0.730967787376657],"weight":-5.890773122905156,"sequenceIndex":137},{"point":[0.730967787376657],"weight":-0.9625049535392461,"sequenceIndex":250},{"point":[0.730967787376657],"weight":-1.734487502783286,"sequenceIndex":172},{"point":[0.730967787376657],"weight":-0.5771056116769329,"sequenceIndex":219}],"sampleSize":128,"lambda":7.8125E-4,"random":{},"entriesSeen":256},"tree":{"storeSequenceIndexesEnabled":false,"centerOfMassEnabled":false,"random":{}}}],"totalUpdates":256}}} ================================================ FILE: Java/serialization/src/test/resources/com/amazon/randomcutforest/serialize/json/v1/forest_2.json ================================================ {"rng":{},"dimensions":4,"sampleSize":256,"outputAfter":64,"numberOfTrees":40,"lambda":3.90625E-4,"storeSequenceIndexesEnabled":false,"centerOfMassEnabled":false,"parallelExecutionEnabled":false,"threadPoolSize":0,"executor":{"executor_type":"SequentialForestTraversalExecutor","executor":{"treeUpdaters":[{"sampler":{"weightedSamples":[{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6146341146058565,"sequenceIndex":102},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6255214339265123,"sequenceIndex":23},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6173355557619195,"sequenceIndex":390},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6424537490521822,"sequenceIndex":267},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6770442929901405,"sequenceIndex":445},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6670617915140761,"sequenceIndex":270},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6470060574953065,"sequenceIndex":56},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6494753406574544,"sequenceIndex":421},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6482248369862156,"sequenceIndex":158},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7111122190981582,"sequenceIndex":277},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6884986134724926,"sequenceIndex":435},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7191897617635025,"sequenceIndex":12},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6902886361900491,"sequenceIndex":219},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7413988003783913,"sequenceIndex":350},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7708727856668871,"sequenceIndex":412},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6642069499799408,"sequenceIndex":375},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9404390746152521,"sequenceIndex":141},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.816230222625517,"sequenceIndex":73},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8568471191810594,"sequenceIndex":407},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7804561694743611,"sequenceIndex":81},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7469157529074638,"sequenceIndex":174},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7465680537740108,"sequenceIndex":129},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6999084733016269,"sequenceIndex":95},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7747571296888397,"sequenceIndex":490},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7209080238967158,"sequenceIndex":452},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7719800463845987,"sequenceIndex":213},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7000274285243815,"sequenceIndex":280},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7420237078093452,"sequenceIndex":229},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7714865870004123,"sequenceIndex":118},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8010912713549354,"sequenceIndex":454},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8287897464503723,"sequenceIndex":303},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6664928276518648,"sequenceIndex":472},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8722166156692749,"sequenceIndex":420},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.452344059536703,"sequenceIndex":16},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0627722970336262,"sequenceIndex":419},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8304215441652594,"sequenceIndex":359},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.022453284840302,"sequenceIndex":74},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2098078407663795,"sequenceIndex":327},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1308820105161126,"sequenceIndex":287},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8669244229088726,"sequenceIndex":432},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8062404976686423,"sequenceIndex":345},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.789892276486641,"sequenceIndex":457},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8220285779837672,"sequenceIndex":281},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0068269200245459,"sequenceIndex":179},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9737299968808646,"sequenceIndex":182},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9412091054570471,"sequenceIndex":46},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.808790697562306,"sequenceIndex":477},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1134444676159847,"sequenceIndex":418},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3932165148870164,"sequenceIndex":49},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7623090003792994,"sequenceIndex":202},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7257602020521662,"sequenceIndex":205},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8581763271773278,"sequenceIndex":210},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0337984576969779,"sequenceIndex":53},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1136670590794953,"sequenceIndex":109},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9564313595531402,"sequenceIndex":220},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7494019784035879,"sequenceIndex":227},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9230486880716878,"sequenceIndex":335},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8670175135569511,"sequenceIndex":232},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1051158711045586,"sequenceIndex":59},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.115072236519442,"sequenceIndex":241},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8236664787134794,"sequenceIndex":443},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9104509605256094,"sequenceIndex":396},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9268524716922116,"sequenceIndex":126},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.716545796911989,"sequenceIndex":494},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1644372469804525,"sequenceIndex":348},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9765441626931674,"sequenceIndex":33},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.17538160009973,"sequenceIndex":292},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8062223104692763,"sequenceIndex":68},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8390552661994923,"sequenceIndex":138},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2770725115556942,"sequenceIndex":140},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6301038591800907,"sequenceIndex":376},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.463049892380754,"sequenceIndex":2},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.894970786975603,"sequenceIndex":301},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3247984101890453,"sequenceIndex":274},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4070771969383313,"sequenceIndex":75},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4245311775345746,"sequenceIndex":38},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8459235005517505,"sequenceIndex":77},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1758671181519165,"sequenceIndex":157},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6857333040813078,"sequenceIndex":495},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.0996507718401896,"sequenceIndex":161},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.327383547273299,"sequenceIndex":354},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0254860530999557,"sequenceIndex":164},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.327703771960061,"sequenceIndex":83},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6140569919042995,"sequenceIndex":320},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8194915283039823,"sequenceIndex":171},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.123944164416666,"sequenceIndex":272},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6109342399672828,"sequenceIndex":261},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1599351681923493,"sequenceIndex":176},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0470782150780569,"sequenceIndex":299},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.797441488264947,"sequenceIndex":180},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9917216387178892,"sequenceIndex":428},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0450603342615046,"sequenceIndex":92},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9565973017906502,"sequenceIndex":187},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.2335976483492135,"sequenceIndex":402},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8207407094693493,"sequenceIndex":47},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1366445144411095,"sequenceIndex":97},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2839124517089457,"sequenceIndex":6},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6727640063012823,"sequenceIndex":346},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.014119419324425,"sequenceIndex":265},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.364316680582126,"sequenceIndex":201},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.07323935402226,"sequenceIndex":319},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.776501886676347,"sequenceIndex":296},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.050670620819365,"sequenceIndex":206},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3844370527205472,"sequenceIndex":13},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9256964704708991,"sequenceIndex":104},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7745777335509079,"sequenceIndex":212},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2828686802145257,"sequenceIndex":214},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2502345930610748,"sequenceIndex":217},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.298603689836242,"sequenceIndex":436},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9782151974010167,"sequenceIndex":482},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0073330190504945,"sequenceIndex":223},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9132638521567816,"sequenceIndex":28},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1836778156044538,"sequenceIndex":226},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9248993560218666,"sequenceIndex":427},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4360295024064462,"sequenceIndex":115},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0105676835303468,"sequenceIndex":459},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8752316444994324,"sequenceIndex":117},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2916069417127378,"sequenceIndex":294},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.198967314782571,"sequenceIndex":321},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2054643969963252,"sequenceIndex":240},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4572940755157315,"sequenceIndex":414},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0694712452744488,"sequenceIndex":122},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.59436466359968,"sequenceIndex":246},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3920694303609287,"sequenceIndex":248},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9790845293915927,"sequenceIndex":62},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1700236705814648,"sequenceIndex":252},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.155092188059932,"sequenceIndex":315},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8332619389930083,"sequenceIndex":511},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.4147906618921513,"sequenceIndex":343},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.214237167233229,"sequenceIndex":417},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2192929951797002,"sequenceIndex":131},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3106400429452085,"sequenceIndex":464},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.3494859071500294,"sequenceIndex":300},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4893800217712083,"sequenceIndex":134},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.199643032303285,"sequenceIndex":384},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.550281588893283,"sequenceIndex":433},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.3227556440050092,"sequenceIndex":391},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.890701858959415,"sequenceIndex":442},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.1616979632619806,"sequenceIndex":382},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.0203006871795393,"sequenceIndex":488},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.1610993779752374,"sequenceIndex":467},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9214324920237151,"sequenceIndex":71},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.5699152578647797,"sequenceIndex":290},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9542229576220636,"sequenceIndex":144},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.2465347172366874,"sequenceIndex":308},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.1268878723791396,"sequenceIndex":361},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9345217675034244,"sequenceIndex":485},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.639058054522798,"sequenceIndex":298},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.558904622050164,"sequenceIndex":149},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.3997305643275446,"sequenceIndex":150},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5313666477982357,"sequenceIndex":151},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.4180985223520826,"sequenceIndex":152},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5332328406534792,"sequenceIndex":307},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-8.818049833060684,"sequenceIndex":154},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.17851983350423,"sequenceIndex":273},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.6218591301130876,"sequenceIndex":156},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.432242552588391,"sequenceIndex":484},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.41435128127985,"sequenceIndex":440},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8710711689860564,"sequenceIndex":268},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.553901612810165,"sequenceIndex":80},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.4664690723723686,"sequenceIndex":453},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6618309748537292,"sequenceIndex":40},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.19931941084694,"sequenceIndex":372},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8881595866707879,"sequenceIndex":403},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1293353323691986,"sequenceIndex":165},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6349570571000702,"sequenceIndex":166},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.2196580529699257,"sequenceIndex":371},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.4561933943289396,"sequenceIndex":21},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-5.60036491821988,"sequenceIndex":405},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.949497546762246,"sequenceIndex":170},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.498794635207275,"sequenceIndex":380},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-7.128563303775397,"sequenceIndex":86},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.621942128084607,"sequenceIndex":497},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.519510845744535,"sequenceIndex":87},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.4971692548113116,"sequenceIndex":323},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.683293725600786,"sequenceIndex":88},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4563201729989443,"sequenceIndex":89},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5181092464648076,"sequenceIndex":11},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1402466450060076,"sequenceIndex":399},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.7277813579269425,"sequenceIndex":90},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9687381154451329,"sequenceIndex":304},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.251341427260495,"sequenceIndex":45},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.3438782679704766,"sequenceIndex":264},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.048240154435768,"sequenceIndex":438},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.566530543124627,"sequenceIndex":185},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.322824268821487,"sequenceIndex":283},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.3672518654164145,"sequenceIndex":469},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-5.32290986918298,"sequenceIndex":94},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.73962880510932,"sequenceIndex":383},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.5412812363201303,"sequenceIndex":282},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2856553133333934,"sequenceIndex":191},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.316712841065747,"sequenceIndex":96},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3306100327653574,"sequenceIndex":193},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.9836426207390336,"sequenceIndex":317},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2954974119767062,"sequenceIndex":279},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.234084023836952,"sequenceIndex":98},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8762911791692782,"sequenceIndex":257},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.6955009879574092,"sequenceIndex":324},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.7246051479253333,"sequenceIndex":508},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.8006328282377875,"sequenceIndex":25},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.6883750110087017,"sequenceIndex":200},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6007518721323255,"sequenceIndex":101},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9898078235604157,"sequenceIndex":306},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.648122577928123,"sequenceIndex":50},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.5915733537256065,"sequenceIndex":392},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.196208885134257,"sequenceIndex":103},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.772369119010644,"sequenceIndex":8},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.1842258321215877,"sequenceIndex":208},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.2127735103942703,"sequenceIndex":209},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7207153895560734,"sequenceIndex":105},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.660357530966055,"sequenceIndex":211},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-5.293168224313462,"sequenceIndex":401},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-5.578540219215814,"sequenceIndex":385},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7386017278498844,"sequenceIndex":107},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5854941531113742,"sequenceIndex":355},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.55601797568199,"sequenceIndex":54},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.8949663305802904,"sequenceIndex":364},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.3892439640273544,"sequenceIndex":218},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.350278335526986,"sequenceIndex":461},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.440468821521761,"sequenceIndex":110},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.367052056643202,"sequenceIndex":221},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.364332874349917,"sequenceIndex":222},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.430961272436031,"sequenceIndex":27},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.2656797012676635,"sequenceIndex":378},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6593958981072445,"sequenceIndex":313},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.540098142343765,"sequenceIndex":113},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.6720800447694852,"sequenceIndex":381},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.510138847909892,"sequenceIndex":114},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9742735199759647,"sequenceIndex":450},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9348777935217742,"sequenceIndex":489},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6759521289524897,"sequenceIndex":312},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.0308300324974127,"sequenceIndex":486},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4774274321908487,"sequenceIndex":408},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.4389766345324038,"sequenceIndex":340},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.5303352089127484,"sequenceIndex":235},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.575664620524247,"sequenceIndex":425},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.9323159410853243,"sequenceIndex":509},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2050288714104807,"sequenceIndex":119},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.17154492662349,"sequenceIndex":269},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.647555897098906,"sequenceIndex":30},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.666591017742403,"sequenceIndex":458},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.2138839193092124,"sequenceIndex":451},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.995012466675898,"sequenceIndex":243},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9450562048387652,"sequenceIndex":478},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.5210659345291146,"sequenceIndex":413},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-5.288151772833298,"sequenceIndex":123},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.807145832361837,"sequenceIndex":271},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.539659143633028,"sequenceIndex":31},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.1564325748836533,"sequenceIndex":367},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.289114464515293,"sequenceIndex":250},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.6793737267393096,"sequenceIndex":260},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4074730021973758,"sequenceIndex":63},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3796779644456088,"sequenceIndex":253},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.571132733354329,"sequenceIndex":127},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7375167900269994,"sequenceIndex":393},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.7982712308507103,"sequenceIndex":512}],"sampleSize":256,"lambda":3.90625E-4,"random":{},"entriesSeen":512},"tree":{"storeSequenceIndexesEnabled":false,"centerOfMassEnabled":false,"random":{}}},{"sampler":{"weightedSamples":[{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.46160257609048216,"sequenceIndex":93},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.47234957712283093,"sequenceIndex":444},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5129839426339975,"sequenceIndex":333},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.47626985955480583,"sequenceIndex":510},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.478050424126917,"sequenceIndex":419},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5580324894912493,"sequenceIndex":103},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6185679106276508,"sequenceIndex":120},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5147304138095607,"sequenceIndex":464},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.4771575995299145,"sequenceIndex":37},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.48849538741462106,"sequenceIndex":175},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5322631908956976,"sequenceIndex":180},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5662605593129507,"sequenceIndex":479},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.561232876958656,"sequenceIndex":26},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6216523304632913,"sequenceIndex":230},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6190014844005043,"sequenceIndex":123},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5362960726570848,"sequenceIndex":488},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5936856154507646,"sequenceIndex":291},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.4860121636166222,"sequenceIndex":405},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6574972670394791,"sequenceIndex":430},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5392135255718532,"sequenceIndex":161},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5311053453295104,"sequenceIndex":172},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8344782821468506,"sequenceIndex":88},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8767081269768855,"sequenceIndex":189},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7370859384909471,"sequenceIndex":198},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5963688724043,"sequenceIndex":200},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6382512272916732,"sequenceIndex":403},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5927639105567727,"sequenceIndex":261},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7814212367779709,"sequenceIndex":29},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7048008766664908,"sequenceIndex":58},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6397715702005524,"sequenceIndex":465},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6646096994334827,"sequenceIndex":255},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8411861202559467,"sequenceIndex":512},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6476594370552187,"sequenceIndex":32},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6927685066365329,"sequenceIndex":425},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8084898176493764,"sequenceIndex":259},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6958649086841673,"sequenceIndex":72},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5969200377038163,"sequenceIndex":462},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8935865590223131,"sequenceIndex":153},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2198928255504724,"sequenceIndex":415},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5537832258508532,"sequenceIndex":162},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9606567836132694,"sequenceIndex":265},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5324391911262383,"sequenceIndex":341},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6963972056755529,"sequenceIndex":87},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9009124629901575,"sequenceIndex":279},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9853804272664342,"sequenceIndex":505},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2260854695828003,"sequenceIndex":92},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8916684884835586,"sequenceIndex":23},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9421781951647543,"sequenceIndex":386},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1924772210363077,"sequenceIndex":448},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1353121477830068,"sequenceIndex":301},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6123099584419172,"sequenceIndex":397},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9575906756489297,"sequenceIndex":105},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.915054796093627,"sequenceIndex":107},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7239374887175686,"sequenceIndex":374},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.645941597248104,"sequenceIndex":414},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.826568772469541,"sequenceIndex":226},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1099637705853518,"sequenceIndex":56},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7890266314808103,"sequenceIndex":235},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.01829252483617,"sequenceIndex":326},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6744051877147653,"sequenceIndex":475},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0419074678473952,"sequenceIndex":508},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7251720489265925,"sequenceIndex":125},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8708874989259588,"sequenceIndex":400},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9201061838132067,"sequenceIndex":506},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0836918853938873,"sequenceIndex":312},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4088323974575665,"sequenceIndex":17},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.243348765342244,"sequenceIndex":298},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.181023850831463,"sequenceIndex":309},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2777897279551815,"sequenceIndex":35},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4520888387304536,"sequenceIndex":34},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0837989278904976,"sequenceIndex":459},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.904222280619888,"sequenceIndex":321},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.0247971947558865,"sequenceIndex":73},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8336055104085134,"sequenceIndex":4},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5223673798163782,"sequenceIndex":481},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8947547941839094,"sequenceIndex":429},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0590773161840559,"sequenceIndex":76},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3501918618790358,"sequenceIndex":78},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2733916412604798,"sequenceIndex":38},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7255210803206694,"sequenceIndex":320},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.337334295880422,"sequenceIndex":163},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0168425989285064,"sequenceIndex":271},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1638293765834138,"sequenceIndex":166},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7075709726477124,"sequenceIndex":42},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.211803194828219,"sequenceIndex":170},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.043235257714599,"sequenceIndex":129},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0170918376701148,"sequenceIndex":174},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1215263840906156,"sequenceIndex":64},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.286703001879683,"sequenceIndex":179},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0536143381620509,"sequenceIndex":442},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1978013340821176,"sequenceIndex":388},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4949258666488292,"sequenceIndex":184},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3525314739647172,"sequenceIndex":477},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8975835836667849,"sequenceIndex":482},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9222849266731339,"sequenceIndex":1},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5748622383501973,"sequenceIndex":192},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.214820720925634,"sequenceIndex":421},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6040289942640544,"sequenceIndex":3},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5993888668437137,"sequenceIndex":197},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.628321865143275,"sequenceIndex":316},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.3395504369962783,"sequenceIndex":101},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0271277932635399,"sequenceIndex":204},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2575820613851927,"sequenceIndex":207},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.139754419150573,"sequenceIndex":6},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2744585274199054,"sequenceIndex":373},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.430063545905811,"sequenceIndex":418},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.393545224210303,"sequenceIndex":308},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2107402318935672,"sequenceIndex":266},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7668198378680026,"sequenceIndex":219},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9725416515996916,"sequenceIndex":220},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.597389044474273,"sequenceIndex":223},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0735434897253753,"sequenceIndex":112},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.078535472953142,"sequenceIndex":113},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3544035465805004,"sequenceIndex":229},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6024257352966889,"sequenceIndex":507},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1165471114403103,"sequenceIndex":28},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9616543324876712,"sequenceIndex":375},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0310662690438637,"sequenceIndex":282},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1352612444759433,"sequenceIndex":323},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4092917639106834,"sequenceIndex":466},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.040250016489322,"sequenceIndex":243},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4637200514001787,"sequenceIndex":503},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5307742036312042,"sequenceIndex":246},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7470110984612602,"sequenceIndex":124},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8900342771893002,"sequenceIndex":471},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0958236087614188,"sequenceIndex":126},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0097166388069636,"sequenceIndex":254},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9336096934589261,"sequenceIndex":498},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5467204452571457,"sequenceIndex":370},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.3810595438500037,"sequenceIndex":130},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1536640435763579,"sequenceIndex":65},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.976371636875073,"sequenceIndex":389},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5585749269077878,"sequenceIndex":355},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.293683961076618,"sequenceIndex":67},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.98188394978397,"sequenceIndex":134},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6940452368913663,"sequenceIndex":16},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.3344115529297125,"sequenceIndex":299},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6148126837307357,"sequenceIndex":457},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.5708246435446735,"sequenceIndex":270},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9055301384559844,"sequenceIndex":297},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5994635004202213,"sequenceIndex":272},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.3222184365804006,"sequenceIndex":71},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.4754928600240147,"sequenceIndex":394},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.200138025409071,"sequenceIndex":36},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.1523562360460153,"sequenceIndex":496},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.70874972664507,"sequenceIndex":468},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.688020718895389,"sequenceIndex":289},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.18684542689058,"sequenceIndex":453},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1076821446544751,"sequenceIndex":149},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.486554906861959,"sequenceIndex":398},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.090581050442323,"sequenceIndex":380},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.3301956294670947,"sequenceIndex":19},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0182458563002519,"sequenceIndex":77},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.4978748159760245,"sequenceIndex":335},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8180058251903843,"sequenceIndex":322},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.6159693118402227,"sequenceIndex":402},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5681549294946782,"sequenceIndex":281},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-5.333319366492589,"sequenceIndex":158},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.2679262839741603,"sequenceIndex":159},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0740398030317087,"sequenceIndex":5},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0062800025618786,"sequenceIndex":412},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.0898846580813815,"sequenceIndex":334},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.086566057712326,"sequenceIndex":484},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-6.096427584875557,"sequenceIndex":41},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1062462228885097,"sequenceIndex":352},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2168801597490515,"sequenceIndex":83},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3927129780487981,"sequenceIndex":268},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1531844784162557,"sequenceIndex":447},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9266746886086075,"sequenceIndex":428},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4542383102835237,"sequenceIndex":284},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.060748523871097,"sequenceIndex":171},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2030198531526948,"sequenceIndex":43},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6957448392040102,"sequenceIndex":455},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.222613420117918,"sequenceIndex":494},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.2388300113605806,"sequenceIndex":449},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5138513754136929,"sequenceIndex":420},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1923758691291784,"sequenceIndex":329},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.492083833527857,"sequenceIndex":89},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3860484778367637,"sequenceIndex":509},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2316811929513252,"sequenceIndex":90},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4722199105066232,"sequenceIndex":181},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.790874142186293,"sequenceIndex":182},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.031940930169071,"sequenceIndex":262},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.347987777402797,"sequenceIndex":46},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.5146217699639295,"sequenceIndex":461},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.830693154080988,"sequenceIndex":441},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.634802950584005,"sequenceIndex":330},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.930520552343428,"sequenceIndex":450},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0598732390569028,"sequenceIndex":300},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.450716701607215,"sequenceIndex":190},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.430027435067635,"sequenceIndex":359},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9619953694982533,"sequenceIndex":96},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.429491772679377,"sequenceIndex":417},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7660625214295271,"sequenceIndex":24},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.261493496212232,"sequenceIndex":366},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.391463022478367,"sequenceIndex":98},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.177208474860661,"sequenceIndex":196},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.1938007649801268,"sequenceIndex":99},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7561568410028945,"sequenceIndex":458},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7890001013500112,"sequenceIndex":25},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.1747952580425016,"sequenceIndex":467},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.1273079189217707,"sequenceIndex":202},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.2367062032293057,"sequenceIndex":203},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.379731011115925,"sequenceIndex":339},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.510879637838231,"sequenceIndex":264},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.23801606838597,"sequenceIndex":350},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6805728013534669,"sequenceIndex":439},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5739712049721997,"sequenceIndex":208},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1624666703716393,"sequenceIndex":209},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9707017970941352,"sequenceIndex":472},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3494269465284483,"sequenceIndex":211},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.027973327837422,"sequenceIndex":438},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7712016382951135,"sequenceIndex":407},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6519344428746707,"sequenceIndex":342},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.312133628243091,"sequenceIndex":443},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3495056697711714,"sequenceIndex":27},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.285315739360893,"sequenceIndex":317},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7884874543467504,"sequenceIndex":303},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6636859973284244,"sequenceIndex":432},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.2538196772574786,"sequenceIndex":55},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.193745971406072,"sequenceIndex":221},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.089121673734058,"sequenceIndex":110},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.3758599494934716,"sequenceIndex":288},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.694857199798995,"sequenceIndex":224},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.500793556557662,"sequenceIndex":7},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.9329238132209916,"sequenceIndex":454},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.457165268435461,"sequenceIndex":433},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.4811575826612904,"sequenceIndex":228},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.560954347130487,"sequenceIndex":114},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.1174418477040176,"sequenceIndex":485},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6642623925185658,"sequenceIndex":305},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.393751088429611,"sequenceIndex":353},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9513060183553315,"sequenceIndex":233},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9606023534842012,"sequenceIndex":401},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1184696936938434,"sequenceIndex":383},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5459806145599906,"sequenceIndex":59},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3233267314137522,"sequenceIndex":236},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.57061812965076,"sequenceIndex":238},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5581668818470307,"sequenceIndex":347},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.4171912885021487,"sequenceIndex":240},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7302824610041414,"sequenceIndex":15},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.152065561268401,"sequenceIndex":242},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.121146814735208,"sequenceIndex":478},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5442402197181384,"sequenceIndex":61},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.0019629260843983,"sequenceIndex":292},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.439143191252268,"sequenceIndex":476},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9997257797732455,"sequenceIndex":247},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.967173951446308,"sequenceIndex":278},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.604462830054479,"sequenceIndex":249},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4045993118037339,"sequenceIndex":446},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3255377424738877,"sequenceIndex":256},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.135449309679315,"sequenceIndex":252},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.722387100825859,"sequenceIndex":489},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.34255865550598,"sequenceIndex":127},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5759730768738247,"sequenceIndex":456},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5047103509536448,"sequenceIndex":511}],"sampleSize":256,"lambda":3.90625E-4,"random":{},"entriesSeen":512},"tree":{"storeSequenceIndexesEnabled":false,"centerOfMassEnabled":false,"random":{}}},{"sampler":{"weightedSamples":[{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5260944109533162,"sequenceIndex":313},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5359086379131986,"sequenceIndex":466},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.548388511053123,"sequenceIndex":224},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5497644053083429,"sequenceIndex":377},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5393683903666211,"sequenceIndex":363},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5526880605271366,"sequenceIndex":49},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5579689695931819,"sequenceIndex":303},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.573170822567569,"sequenceIndex":460},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5518202314073564,"sequenceIndex":145},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.569900424305517,"sequenceIndex":260},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5437397583510777,"sequenceIndex":435},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5879334620115415,"sequenceIndex":340},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6023704628113324,"sequenceIndex":429},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5807667843568343,"sequenceIndex":447},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.603209737853231,"sequenceIndex":399},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.595782154837056,"sequenceIndex":131},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6853745060153638,"sequenceIndex":35},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6159080928230225,"sequenceIndex":147},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6095932730795004,"sequenceIndex":154},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6941930330477768,"sequenceIndex":162},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6705752782265264,"sequenceIndex":443},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5717030294373283,"sequenceIndex":178},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.582031118308687,"sequenceIndex":92},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6078642638859618,"sequenceIndex":199},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6025386662222623,"sequenceIndex":100},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6406788594971086,"sequenceIndex":214},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.744356589115243,"sequenceIndex":290},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6128850191964808,"sequenceIndex":229},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6908807437299432,"sequenceIndex":233},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6922331428099769,"sequenceIndex":285},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6304533890109647,"sequenceIndex":436},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6648460401544095,"sequenceIndex":511},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6115483016566329,"sequenceIndex":423},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9259874568754812,"sequenceIndex":17},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4007540287832962,"sequenceIndex":70},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6708968860976656,"sequenceIndex":424},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7519482844688304,"sequenceIndex":150},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7812303141607132,"sequenceIndex":274},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7711117236223178,"sequenceIndex":455},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8299866832752445,"sequenceIndex":40},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.753319475133741,"sequenceIndex":164},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8618101976411661,"sequenceIndex":295},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9403798578162164,"sequenceIndex":87},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8731740414272922,"sequenceIndex":418},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8141741461810272,"sequenceIndex":390},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6232292205051265,"sequenceIndex":93},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.685374069060882,"sequenceIndex":23},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7862085319435075,"sequenceIndex":1},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7705716406432933,"sequenceIndex":99},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7070939525742483,"sequenceIndex":315},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6458950853815364,"sequenceIndex":365},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9324878199962862,"sequenceIndex":271},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.713599387183294,"sequenceIndex":486},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7729660302876872,"sequenceIndex":403},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0031714930709517,"sequenceIndex":324},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6707776185331576,"sequenceIndex":404},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7525191786174004,"sequenceIndex":439},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7860103048713483,"sequenceIndex":452},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7102847551772383,"sequenceIndex":263},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.694621974802462,"sequenceIndex":242},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7762731430232328,"sequenceIndex":344},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.788770941424639,"sequenceIndex":31},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6699969685599683,"sequenceIndex":127},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7490141546225475,"sequenceIndex":476},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.965172281134006,"sequenceIndex":33},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0913836285849694,"sequenceIndex":32},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8083955894239638,"sequenceIndex":368},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4362735648939904,"sequenceIndex":68},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.70454160508493,"sequenceIndex":139},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9475609748166327,"sequenceIndex":427},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5151180782235767,"sequenceIndex":71},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0762076808864134,"sequenceIndex":18},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0637694246316745,"sequenceIndex":8},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2593176119465064,"sequenceIndex":149},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0258200821035812,"sequenceIndex":348},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4095750114302565,"sequenceIndex":489},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3018260934082273,"sequenceIndex":77},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9960102891222928,"sequenceIndex":156},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.931067707281034,"sequenceIndex":159},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.078492643871671,"sequenceIndex":160},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9553903475561631,"sequenceIndex":326},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0959950373760599,"sequenceIndex":370},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0867800024317138,"sequenceIndex":292},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9354902037387403,"sequenceIndex":296},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0372318764458373,"sequenceIndex":450},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2170520226896766,"sequenceIndex":339},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9963929963864807,"sequenceIndex":174},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3006909990508584,"sequenceIndex":416},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7588571191650195,"sequenceIndex":451},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7041784762018137,"sequenceIndex":406},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0620254917650023,"sequenceIndex":331},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7131867077189776,"sequenceIndex":185},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6935360249588589,"sequenceIndex":265},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6046292691614912,"sequenceIndex":189},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1884159378171235,"sequenceIndex":316},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.053728809008446,"sequenceIndex":193},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8804688461474481,"sequenceIndex":97},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.216178024577335,"sequenceIndex":409},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8684841484561897,"sequenceIndex":198},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7768969650573727,"sequenceIndex":25},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8404570699813109,"sequenceIndex":371},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8829256225370673,"sequenceIndex":351},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7990978075812794,"sequenceIndex":206},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.016588538431301,"sequenceIndex":381},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1128125809561107,"sequenceIndex":211},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7620315232195607,"sequenceIndex":106},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.763437506111344,"sequenceIndex":474},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1320535959017948,"sequenceIndex":282},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0702401204803174,"sequenceIndex":219},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2113044156525357,"sequenceIndex":54},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.1821138829686557,"sequenceIndex":223},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.8984484713181904,"sequenceIndex":225},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8676375739608724,"sequenceIndex":320},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2742238423256953,"sequenceIndex":114},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9790042044579668,"sequenceIndex":230},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.242796737913473,"sequenceIndex":232},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1202178758681027,"sequenceIndex":498},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7450001802803075,"sequenceIndex":58},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1213662278942402,"sequenceIndex":422},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7338054564939562,"sequenceIndex":60},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9064918492033363,"sequenceIndex":14},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5790934215375558,"sequenceIndex":61},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1224076165324355,"sequenceIndex":488},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9802557787536221,"sequenceIndex":350},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8311658905511503,"sequenceIndex":428},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4603499657884453,"sequenceIndex":126},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7401482929538656,"sequenceIndex":63},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5832155274376851,"sequenceIndex":508},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.031638735753606,"sequenceIndex":504},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.647952340757775,"sequenceIndex":490},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-7.597285986662614,"sequenceIndex":337},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.0091790282893314,"sequenceIndex":132},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.490412396177701,"sequenceIndex":382},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.3168753330657785,"sequenceIndex":134},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.4585439827656566,"sequenceIndex":487},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6008513765965287,"sequenceIndex":136},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8159453519692652,"sequenceIndex":137},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.4862354893213694,"sequenceIndex":138},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.0920671328998064,"sequenceIndex":69},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.7638894626082946,"sequenceIndex":140},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.850044507767239,"sequenceIndex":401},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.4771259099294545,"sequenceIndex":261},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.0730392659564187,"sequenceIndex":143},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8111309033356875,"sequenceIndex":321},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1748064645286496,"sequenceIndex":286},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.7540842600070077,"sequenceIndex":146},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.1994772091735926,"sequenceIndex":507},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.872039871646988,"sequenceIndex":37},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.0758566799220315,"sequenceIndex":272},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.4753480461056574,"sequenceIndex":75},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3854010532257865,"sequenceIndex":334},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-5.8885527790002365,"sequenceIndex":19},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.3232540932876944,"sequenceIndex":300},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.75521279302123,"sequenceIndex":479},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.565871671168844,"sequenceIndex":354},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.517201055444477,"sequenceIndex":402},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.262716479419825,"sequenceIndex":157},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9452752638231493,"sequenceIndex":65},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.0049368366637386,"sequenceIndex":413},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7241532141497298,"sequenceIndex":5},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8763571706672262,"sequenceIndex":161},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9951412443302015,"sequenceIndex":437},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-7.267034973397639,"sequenceIndex":284},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.2162676234212646,"sequenceIndex":41},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.4980630377074884,"sequenceIndex":289},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.71367910387317,"sequenceIndex":349},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5329478468391644,"sequenceIndex":360},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.526106745961805,"sequenceIndex":21},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8622169776710213,"sequenceIndex":168},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.1338300106268107,"sequenceIndex":170},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3980571502681125,"sequenceIndex":171},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8201099613191152,"sequenceIndex":258},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.463199809878807,"sequenceIndex":299},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.6324143356399654,"sequenceIndex":482},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2572931711806938,"sequenceIndex":175},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7244674571130576,"sequenceIndex":397},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6185139996374267,"sequenceIndex":500},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.008407923463852,"sequenceIndex":89},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.019058444616309,"sequenceIndex":391},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.2751389931582486,"sequenceIndex":180},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.4469826072565124,"sequenceIndex":181},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.3343631152686233,"sequenceIndex":182},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1245778277043583,"sequenceIndex":91},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.4031598812094743,"sequenceIndex":46},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.040255126539048,"sequenceIndex":184},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-5.847042868793321,"sequenceIndex":186},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0832089264530416,"sequenceIndex":374},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7399390861808774,"sequenceIndex":94},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.683444615258053,"sequenceIndex":362},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4555575800949925,"sequenceIndex":95},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3525178752438138,"sequenceIndex":191},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.6829301766857925,"sequenceIndex":192},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.986796425696412,"sequenceIndex":96},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.079226605756757,"sequenceIndex":194},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4220198649506708,"sequenceIndex":494},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.5841103240635475,"sequenceIndex":196},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.3184508767577006,"sequenceIndex":98},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0976726918400148,"sequenceIndex":497},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.5617338480605927,"sequenceIndex":431},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.9041830197067955,"sequenceIndex":481},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1253932265760285,"sequenceIndex":201},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.3559148900195197,"sequenceIndex":202},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6166680192106695,"sequenceIndex":342},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.279639393815452,"sequenceIndex":51},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3227563896156234,"sequenceIndex":204},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.369721094191956,"sequenceIndex":358},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1294813847250802,"sequenceIndex":276},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3683527419175592,"sequenceIndex":26},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1765769506675414,"sequenceIndex":469},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.044538945850007,"sequenceIndex":262},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.04500043710329,"sequenceIndex":462},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.0708814993176805,"sequenceIndex":212},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.0818733965580076,"sequenceIndex":213},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.633188204019934,"sequenceIndex":426},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.0040071096294456,"sequenceIndex":341},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.78037965984465,"sequenceIndex":27},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5634325508099864,"sequenceIndex":388},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1605491671595864,"sequenceIndex":218},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1859051986973448,"sequenceIndex":322},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4108030072433013,"sequenceIndex":294},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.4442747747696694,"sequenceIndex":128},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.7641447794933804,"sequenceIndex":111},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.615670713535556,"sequenceIndex":222},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.013360439570342,"sequenceIndex":7},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.7398292733652077,"sequenceIndex":461},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.515109257755804,"sequenceIndex":378},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4425516135074237,"sequenceIndex":372},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4488492443444936,"sequenceIndex":228},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.8384805662689887,"sequenceIndex":470},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.1850541896527313,"sequenceIndex":293},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5067552052677682,"sequenceIndex":231},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.69510244929935,"sequenceIndex":28},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.2900658880039564,"sequenceIndex":463},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6260121683310464,"sequenceIndex":234},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.654523807606816,"sequenceIndex":417},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8604470007121694,"sequenceIndex":325},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3636901681806397,"sequenceIndex":309},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3965938657610506,"sequenceIndex":119},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.282872091267528,"sequenceIndex":239},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.273854280665398,"sequenceIndex":120},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.4317853988162614,"sequenceIndex":240},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0273715183600531,"sequenceIndex":369},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.25089915350913,"sequenceIndex":312},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.274665203447609,"sequenceIndex":244},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.086410744392713,"sequenceIndex":283},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.1647558020007938,"sequenceIndex":445},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4972906071262615,"sequenceIndex":257},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7419821356055711,"sequenceIndex":248},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.769855761766187,"sequenceIndex":472},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5121901884862492,"sequenceIndex":125},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2931929451204605,"sequenceIndex":380},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.461714147184994,"sequenceIndex":252},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6706713230068377,"sequenceIndex":499},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2466376527345713,"sequenceIndex":254},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0807483051785824,"sequenceIndex":255},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8245199856546708,"sequenceIndex":2}],"sampleSize":256,"lambda":3.90625E-4,"random":{},"entriesSeen":512},"tree":{"storeSequenceIndexesEnabled":false,"centerOfMassEnabled":false,"random":{}}},{"sampler":{"weightedSamples":[{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.3818313988005322,"sequenceIndex":381},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.3897263779042205,"sequenceIndex":184},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.3888570213178338,"sequenceIndex":335},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.39231675133027366,"sequenceIndex":491},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.404305455877325,"sequenceIndex":162},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.41279602412810024,"sequenceIndex":220},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.4163470662365382,"sequenceIndex":228},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.3925031390937806,"sequenceIndex":68},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.41151063307303837,"sequenceIndex":149},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.4070252232377526,"sequenceIndex":379},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.4447913376176663,"sequenceIndex":181},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5361604637469644,"sequenceIndex":199},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5317598415612959,"sequenceIndex":264},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.4419730902261371,"sequenceIndex":113},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.41752154125157137,"sequenceIndex":261},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.39925694949059193,"sequenceIndex":450},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.4384885128254923,"sequenceIndex":32},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5172311096266909,"sequenceIndex":403},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5750541081826791,"sequenceIndex":39},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.437665473047515,"sequenceIndex":356},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.45747735529633776,"sequenceIndex":260},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5422131509930802,"sequenceIndex":343},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.50127181414208,"sequenceIndex":94},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5404504342808591,"sequenceIndex":257},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6161421647579762,"sequenceIndex":377},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5516515641681752,"sequenceIndex":387},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5482957393926003,"sequenceIndex":111},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.4763413025490339,"sequenceIndex":490},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5008708736616337,"sequenceIndex":238},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.43993985166104926,"sequenceIndex":295},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5661928323665468,"sequenceIndex":63},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.4046755214691486,"sequenceIndex":456},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.4968213361649064,"sequenceIndex":135},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.4648855943284984,"sequenceIndex":69},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.47116369587000817,"sequenceIndex":70},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6257127251607816,"sequenceIndex":37},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6041254997695569,"sequenceIndex":407},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.898290908263374,"sequenceIndex":154},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6787172650331293,"sequenceIndex":274},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5961868208985492,"sequenceIndex":334},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5145579274952363,"sequenceIndex":288},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.4984509855606138,"sequenceIndex":168},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8679971900121906,"sequenceIndex":391},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5708537005079727,"sequenceIndex":179},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5739271900386365,"sequenceIndex":496},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5651492716438227,"sequenceIndex":46},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5538418749060455,"sequenceIndex":190},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0328566924805238,"sequenceIndex":435},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6595030214954836,"sequenceIndex":459},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9926073862591953,"sequenceIndex":25},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6650327084121611,"sequenceIndex":431},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8344909892760701,"sequenceIndex":371},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8465166116596569,"sequenceIndex":106},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5871839272961783,"sequenceIndex":218},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0263939018029444,"sequenceIndex":275},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5131015590243841,"sequenceIndex":129},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.766815528074294,"sequenceIndex":413},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5286509161402626,"sequenceIndex":405},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5224136583642938,"sequenceIndex":236},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9907724170986802,"sequenceIndex":461},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5543939816928036,"sequenceIndex":301},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6498024850797093,"sequenceIndex":124},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7540300320808839,"sequenceIndex":437},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.46177564974729,"sequenceIndex":481},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5709740819030578,"sequenceIndex":313},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7486349712274847,"sequenceIndex":133},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5534897794917688,"sequenceIndex":67},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8875396195700384,"sequenceIndex":390},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5398216174268968,"sequenceIndex":325},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.110606874831603,"sequenceIndex":141},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5584668905224405,"sequenceIndex":142},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6823471722479599,"sequenceIndex":144},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0622750940217478,"sequenceIndex":146},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9958678310764336,"sequenceIndex":500},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6736059612589619,"sequenceIndex":291},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1760337936688368,"sequenceIndex":153},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.959720115906325,"sequenceIndex":77},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8286609697332845,"sequenceIndex":322},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7056372052431007,"sequenceIndex":408},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2292655913023134,"sequenceIndex":160},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8487511909890516,"sequenceIndex":478},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6317991438363069,"sequenceIndex":41},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6862659183275681,"sequenceIndex":83},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5793408703495999,"sequenceIndex":4},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7285771429144958,"sequenceIndex":296},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.032810996426315,"sequenceIndex":440},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6179470786747483,"sequenceIndex":468},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6956219134695297,"sequenceIndex":45},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8759648128471107,"sequenceIndex":277},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7110576141270611,"sequenceIndex":300},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.627368843218544,"sequenceIndex":183},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7894977502454714,"sequenceIndex":357},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6522155107283083,"sequenceIndex":329},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5953747553846762,"sequenceIndex":22},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4221699590438481,"sequenceIndex":267},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.250622126301647,"sequenceIndex":6},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.239227744998176,"sequenceIndex":194},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3028406958965504,"sequenceIndex":196},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.799216172345604,"sequenceIndex":429},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1880308988235864,"sequenceIndex":495},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2517152085252594,"sequenceIndex":446},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7029419529478221,"sequenceIndex":204},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8946317780025669,"sequenceIndex":103},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.158765765227053,"sequenceIndex":306},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6563028845756802,"sequenceIndex":289},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0297523641236055,"sequenceIndex":428},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9847923156858226,"sequenceIndex":384},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6692726875086656,"sequenceIndex":216},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.870573621578685,"sequenceIndex":109},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1786811043637484,"sequenceIndex":266},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4229372498763906,"sequenceIndex":486},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.071763234710726,"sequenceIndex":225},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8307561449519493,"sequenceIndex":112},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3211868693280795,"sequenceIndex":505},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1633910371276686,"sequenceIndex":286},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9860789246266324,"sequenceIndex":2},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0266866531141596,"sequenceIndex":353},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8603072191363206,"sequenceIndex":237},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8611286317571976,"sequenceIndex":448},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.340697023380137,"sequenceIndex":240},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0829183774495406,"sequenceIndex":477},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6003982280537972,"sequenceIndex":258},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2358364246705715,"sequenceIndex":444},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7299490997228921,"sequenceIndex":248},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3926959574504159,"sequenceIndex":251},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6287743820380354,"sequenceIndex":348},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2120762384082107,"sequenceIndex":127},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1121127158017148,"sequenceIndex":501},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8893068470934942,"sequenceIndex":128},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6567334453903101,"sequenceIndex":33},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.428095699102055,"sequenceIndex":131},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.584710563519354,"sequenceIndex":16},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-5.539488674297153,"sequenceIndex":311},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.477763251642157,"sequenceIndex":134},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7330331575912814,"sequenceIndex":401},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-5.589193130752905,"sequenceIndex":17},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.72114731068527,"sequenceIndex":385},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9062279337524528,"sequenceIndex":138},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.634457486043725,"sequenceIndex":487},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.5212624999108586,"sequenceIndex":34},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.6048589286668404,"sequenceIndex":410},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.1602077201311305,"sequenceIndex":421},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.4063870448939615,"sequenceIndex":280},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.880391053442508,"sequenceIndex":36},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7594285742091744,"sequenceIndex":145},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.726621721553871,"sequenceIndex":72},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7025445134510022,"sequenceIndex":292},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.714387302352788,"sequenceIndex":148},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2032163006692609,"sequenceIndex":1},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.986391231058456,"sequenceIndex":393},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2462702418029437,"sequenceIndex":294},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.399686930069121,"sequenceIndex":152},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.5506797719248047,"sequenceIndex":38},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6512093333399367,"sequenceIndex":76},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0481931295869216,"sequenceIndex":155},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9997362091837202,"sequenceIndex":411},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0313573008877495,"sequenceIndex":157},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7994071674729375,"sequenceIndex":158},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.278585206219982,"sequenceIndex":422},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.5444482124452668,"sequenceIndex":80},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4443821051711452,"sequenceIndex":507},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9381284024531418,"sequenceIndex":20},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9131220064497483,"sequenceIndex":163},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.923902393545851,"sequenceIndex":82},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.570363140824152,"sequenceIndex":164},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0010072933612122,"sequenceIndex":298},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.6834480661011617,"sequenceIndex":167},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6512162293912321,"sequenceIndex":363},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8264757085369383,"sequenceIndex":279},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4855604934623214,"sequenceIndex":336},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.147292141171303,"sequenceIndex":171},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.233115295821773,"sequenceIndex":86},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.48478930851418,"sequenceIndex":449},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.266955195934262,"sequenceIndex":174},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.5152518668267247,"sequenceIndex":361},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.164969309235952,"sequenceIndex":44},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7879219139966225,"sequenceIndex":176},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.6295577989206804,"sequenceIndex":178},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9004233267328796,"sequenceIndex":89},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2174832549397854,"sequenceIndex":11},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0149617629244805,"sequenceIndex":362},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.31999335777745,"sequenceIndex":91},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.0104060600568974,"sequenceIndex":8},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5957879135499629,"sequenceIndex":23},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.034122940871018,"sequenceIndex":394},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5309774638937086,"sequenceIndex":380},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.050583898961708,"sequenceIndex":396},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.22897280492723,"sequenceIndex":188},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4486095221600215,"sequenceIndex":189},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.60749369400639,"sequenceIndex":332},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8126027580089308,"sequenceIndex":426},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.295444248554696,"sequenceIndex":453},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.1924273477025005,"sequenceIndex":382},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.154967063995641,"sequenceIndex":497},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2874056067919226,"sequenceIndex":337},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.87521515091206,"sequenceIndex":49},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4054458722195553,"sequenceIndex":197},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2972008541698166,"sequenceIndex":98},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4173464673514686,"sequenceIndex":312},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.6619369943798,"sequenceIndex":200},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6520148419036098,"sequenceIndex":494},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.899858737618254,"sequenceIndex":471},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.7861580940155224,"sequenceIndex":203},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6660437960725956,"sequenceIndex":367},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.1947597617121266,"sequenceIndex":333},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5026320097354273,"sequenceIndex":206},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.661381375871137,"sequenceIndex":207},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.274012387705602,"sequenceIndex":208},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8225582904416973,"sequenceIndex":26},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.159548267541763,"sequenceIndex":210},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7984540283116048,"sequenceIndex":415},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6744116501150894,"sequenceIndex":53},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.434173852078577,"sequenceIndex":213},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9573474020182315,"sequenceIndex":107},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.724254360330068,"sequenceIndex":214},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.859268567121385,"sequenceIndex":108},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7087672563802975,"sequenceIndex":7},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4027346592834933,"sequenceIndex":488},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2325988360218747,"sequenceIndex":340},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.31845303488183,"sequenceIndex":503},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-8.308757778344876,"sequenceIndex":221},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.84659257422574,"sequenceIndex":222},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.469640832006987,"sequenceIndex":223},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.361434354129223,"sequenceIndex":56},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.5769763323398807,"sequenceIndex":224},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3345878066171963,"sequenceIndex":226},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0577767081802856,"sequenceIndex":28},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-7.689091596889984,"sequenceIndex":57},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.5052667108624447,"sequenceIndex":229},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4325828263069296,"sequenceIndex":504},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.610499801929948,"sequenceIndex":231},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.035953242855645,"sequenceIndex":347},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5759749567529977,"sequenceIndex":233},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.29213935105969,"sequenceIndex":398},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8487312754834977,"sequenceIndex":235},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.910085642382972,"sequenceIndex":59},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8718428419505133,"sequenceIndex":464},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7494625295459763,"sequenceIndex":373},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.4782326446707756,"sequenceIndex":273},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.789293425576507,"sequenceIndex":467},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.887459187921114,"sequenceIndex":241},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.8151625988846933,"sequenceIndex":242},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.303758155720062,"sequenceIndex":404},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.264614559480873,"sequenceIndex":454},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2484412661276765,"sequenceIndex":455},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.077690115090195,"sequenceIndex":123},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.0060023817690387,"sequenceIndex":324},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.084327415337533,"sequenceIndex":62},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3651234605642533,"sequenceIndex":346},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.0214578132825016,"sequenceIndex":250},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6115916969801127,"sequenceIndex":406},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.295348432159696,"sequenceIndex":252},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.0542585561719897,"sequenceIndex":473},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.4671283211835586,"sequenceIndex":254},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.694903363608748,"sequenceIndex":498},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8212757528408487,"sequenceIndex":511}],"sampleSize":256,"lambda":3.90625E-4,"random":{},"entriesSeen":512},"tree":{"storeSequenceIndexesEnabled":false,"centerOfMassEnabled":false,"random":{}}},{"sampler":{"weightedSamples":[{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.41076555251373625,"sequenceIndex":51},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.41128782560609983,"sequenceIndex":304},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.4196758913116757,"sequenceIndex":96},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.41608797741161296,"sequenceIndex":476},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.4140988442425498,"sequenceIndex":270},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.4426765065532665,"sequenceIndex":415},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.47379026229384225,"sequenceIndex":381},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.4325365317342104,"sequenceIndex":34},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.4258793337994201,"sequenceIndex":155},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.48462242096144525,"sequenceIndex":292},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.47888408153606793,"sequenceIndex":47},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5320637343429684,"sequenceIndex":380},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.47737560850493765,"sequenceIndex":104},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.4918765670165315,"sequenceIndex":350},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.4930902943761117,"sequenceIndex":317},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5116274074719844,"sequenceIndex":377},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.4638506105635342,"sequenceIndex":278},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6128234564986658,"sequenceIndex":72},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6214201042705433,"sequenceIndex":335},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6080940767048836,"sequenceIndex":433},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.48555451526176147,"sequenceIndex":169},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5062644983749363,"sequenceIndex":44},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.47962286339137894,"sequenceIndex":276},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5363674983703273,"sequenceIndex":405},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6821735039044128,"sequenceIndex":442},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5322798983342368,"sequenceIndex":211},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.818890024133296,"sequenceIndex":109},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5351460733981976,"sequenceIndex":437},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6083661387956425,"sequenceIndex":494},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5354710312022348,"sequenceIndex":336},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.687620384982829,"sequenceIndex":255},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5382100173547699,"sequenceIndex":507},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6734689683729348,"sequenceIndex":135},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1516941654910087,"sequenceIndex":303},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5268891883232955,"sequenceIndex":142},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0494343181786654,"sequenceIndex":145},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6130496289590855,"sequenceIndex":4},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.766943006499105,"sequenceIndex":480},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.350810496015029,"sequenceIndex":411},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9962839481120661,"sequenceIndex":161},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.982227213440814,"sequenceIndex":164},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5398019396891583,"sequenceIndex":42},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5307076250411541,"sequenceIndex":21},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5606109931149603,"sequenceIndex":295},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7793360979694587,"sequenceIndex":182},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5260005685329219,"sequenceIndex":280},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6596853122937784,"sequenceIndex":465},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.606353406204448,"sequenceIndex":458},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6227255464609807,"sequenceIndex":401},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7834061232605847,"sequenceIndex":477},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8648765777322432,"sequenceIndex":103},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6038655140127112,"sequenceIndex":105},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5586725831876546,"sequenceIndex":417},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9827488162508279,"sequenceIndex":333},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9175737400568243,"sequenceIndex":260},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.671355875418893,"sequenceIndex":56},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8618955842070507,"sequenceIndex":284},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7326150445706083,"sequenceIndex":232},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.795281433520965,"sequenceIndex":487},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6866299084815191,"sequenceIndex":391},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6645468707397092,"sequenceIndex":359},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2381129895421958,"sequenceIndex":124},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7208002639377629,"sequenceIndex":253},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5382508579704549,"sequenceIndex":506},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2934546225659256,"sequenceIndex":363},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.169311482366279,"sequenceIndex":323},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9108079582275467,"sequenceIndex":469},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4470860467254272,"sequenceIndex":420},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4217930845386217,"sequenceIndex":408},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1787920444540714,"sequenceIndex":35},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8956072405759048,"sequenceIndex":314},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.3154265048634843,"sequenceIndex":482},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1338700454178934,"sequenceIndex":146},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8753698699908398,"sequenceIndex":149},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3075253641711848,"sequenceIndex":389},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4331856823022093,"sequenceIndex":153},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8493868684253044,"sequenceIndex":491},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6802808091686423,"sequenceIndex":78},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8341658978533315,"sequenceIndex":311},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9965828851633682,"sequenceIndex":402},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0156431068311775,"sequenceIndex":388},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2015227144463676,"sequenceIndex":82},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.012972711144663,"sequenceIndex":463},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.229033721643924,"sequenceIndex":84},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3122935811637702,"sequenceIndex":395},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9744914126267747,"sequenceIndex":329},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7921520447621415,"sequenceIndex":86},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.021388810740196,"sequenceIndex":447},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7237478344089914,"sequenceIndex":89},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0676111172654497,"sequenceIndex":90},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7968591421945883,"sequenceIndex":183},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1809487648210473,"sequenceIndex":340},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3003928506020972,"sequenceIndex":93},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.431087413330223,"sequenceIndex":343},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8232689354900539,"sequenceIndex":191},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6730565925708216,"sequenceIndex":446},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.646312642803931,"sequenceIndex":25},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.99942749464963,"sequenceIndex":49},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7937313469672573,"sequenceIndex":198},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9938573610450077,"sequenceIndex":413},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.5342228202572405,"sequenceIndex":101},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.9493313394491,"sequenceIndex":205},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.338816792720813,"sequenceIndex":508},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8635645293542427,"sequenceIndex":209},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0030683388556312,"sequenceIndex":501},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9389949772017029,"sequenceIndex":53},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6706308608445511,"sequenceIndex":266},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2405305860315234,"sequenceIndex":217},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9975207525545502,"sequenceIndex":316},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1517025824299787,"sequenceIndex":221},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3948310882848447,"sequenceIndex":223},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8538124586592356,"sequenceIndex":14},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.151164357199666,"sequenceIndex":258},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.162466321675002,"sequenceIndex":57},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9412716694934333,"sequenceIndex":231},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8301504367243165,"sequenceIndex":268},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.243467964749317,"sequenceIndex":331},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2417036560575492,"sequenceIndex":370},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.933688505413061,"sequenceIndex":495},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8723374445570999,"sequenceIndex":310},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7961928673393782,"sequenceIndex":296},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3275091077862429,"sequenceIndex":244},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7706821725929299,"sequenceIndex":321},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8773586414157153,"sequenceIndex":345},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.26158088379581,"sequenceIndex":309},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7607234263408399,"sequenceIndex":31},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7695826861284436,"sequenceIndex":351},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5833496271936753,"sequenceIndex":470},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.7147239924928903,"sequenceIndex":129},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.158920430324552,"sequenceIndex":65},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.1788833387228013,"sequenceIndex":281},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.75782134751831,"sequenceIndex":66},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-6.417532114317823,"sequenceIndex":397},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.438477728636481,"sequenceIndex":16},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-5.426434325214341,"sequenceIndex":283},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.073670683238186,"sequenceIndex":17},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5063394390928242,"sequenceIndex":136},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.795349078217416,"sequenceIndex":263},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.039104169899174,"sequenceIndex":139},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.4613393265881522,"sequenceIndex":140},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7335740264329358,"sequenceIndex":409},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.546959375378277,"sequenceIndex":366},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3968959562812366,"sequenceIndex":500},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.61148489247996,"sequenceIndex":18},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.4392953354174463,"sequenceIndex":307},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5205594776019975,"sequenceIndex":73},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.177642114170059,"sequenceIndex":147},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7057409413982019,"sequenceIndex":148},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7096657583999617,"sequenceIndex":425},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.230091514198687,"sequenceIndex":269},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.714322370288945,"sequenceIndex":257},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.861719708177973,"sequenceIndex":19},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.966474253186489,"sequenceIndex":152},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.993471091901151,"sequenceIndex":77},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3591741656279284,"sequenceIndex":285},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9909674368039538,"sequenceIndex":156},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.876589574921329,"sequenceIndex":368},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.029439069774457,"sequenceIndex":369},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.1334609925276595,"sequenceIndex":279},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.470460079602587,"sequenceIndex":347},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.2974160839387876,"sequenceIndex":353},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1240700040502956,"sequenceIndex":372},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3298813143205752,"sequenceIndex":349},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.6792989438579555,"sequenceIndex":498},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.7230427428888277,"sequenceIndex":165},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.3500736303212983,"sequenceIndex":83},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.0950560146648822,"sequenceIndex":166},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-6.306277524897012,"sequenceIndex":483},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8676006884913285,"sequenceIndex":403},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.9876019692190816,"sequenceIndex":85},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4981353363275716,"sequenceIndex":170},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.8134043409619,"sequenceIndex":43},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.829021717070229,"sequenceIndex":454},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.5770216313215686,"sequenceIndex":352},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9985276228887084,"sequenceIndex":308},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.253789264229145,"sequenceIndex":22},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3901688546377242,"sequenceIndex":385},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8027717390414317,"sequenceIndex":178},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.063668597669345,"sequenceIndex":179},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.0937186987916445,"sequenceIndex":426},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.769099770767167,"sequenceIndex":181},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.336237349359063,"sequenceIndex":91},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.2317266719968463,"sequenceIndex":466},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7361090554855763,"sequenceIndex":92},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2484118582842743,"sequenceIndex":185},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9367796749518853,"sequenceIndex":186},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5923010369543105,"sequenceIndex":357},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.627795695946994,"sequenceIndex":453},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.5222670986219726,"sequenceIndex":379},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-7.4116150980328985,"sequenceIndex":190},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8287453594858387,"sequenceIndex":95},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6838907313661353,"sequenceIndex":6},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7852409844870567,"sequenceIndex":451},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0703254887936844,"sequenceIndex":194},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.16008561860816,"sequenceIndex":195},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.3790982832130605,"sequenceIndex":503},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1642313768860981,"sequenceIndex":197},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8474819894343542,"sequenceIndex":99},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.274957096635813,"sequenceIndex":328},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.037524518939259,"sequenceIndex":24},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2066920737923026,"sequenceIndex":300},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.733976812922519,"sequenceIndex":271},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.373619767684486,"sequenceIndex":203},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.559340163343574,"sequenceIndex":299},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.380204544250063,"sequenceIndex":325},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6369365670964835,"sequenceIndex":206},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.314643959044869,"sequenceIndex":277},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5759094257005888,"sequenceIndex":13},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.4053184081638084,"sequenceIndex":360},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1258217747588337,"sequenceIndex":210},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0415027550411342,"sequenceIndex":431},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5266073786222618,"sequenceIndex":212},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.3782438995186466,"sequenceIndex":301},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-9.953797287944797,"sequenceIndex":424},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.6746927860933547,"sequenceIndex":215},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.4469061638752456,"sequenceIndex":216},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.921889512446123,"sequenceIndex":27},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1329314282116625,"sequenceIndex":332},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.339262222522451,"sequenceIndex":441},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.894894514825776,"sequenceIndex":55},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5024450185981868,"sequenceIndex":220},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.5955213039999796,"sequenceIndex":222},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.12524790425941,"sequenceIndex":111},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1430979076148817,"sequenceIndex":224},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.086501599476621,"sequenceIndex":225},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.201274145068709,"sequenceIndex":226},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.892217807536163,"sequenceIndex":290},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.1074404478321163,"sequenceIndex":468},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8722287892340526,"sequenceIndex":334},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.403032018154942,"sequenceIndex":8},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6516304433651645,"sequenceIndex":456},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9211022975902685,"sequenceIndex":29},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.0824466837442435,"sequenceIndex":439},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4242052543895873,"sequenceIndex":117},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-8.129338169513039,"sequenceIndex":235},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.6864057242123587,"sequenceIndex":118},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5234595342420423,"sequenceIndex":427},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1329272459750455,"sequenceIndex":119},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3157497076463855,"sequenceIndex":239},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4389923121650618,"sequenceIndex":240},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9853646989139248,"sequenceIndex":120},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2520838602180056,"sequenceIndex":474},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8796745761171992,"sequenceIndex":243},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3918672634466696,"sequenceIndex":61},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.7561944538157306,"sequenceIndex":394},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.851972299582312,"sequenceIndex":123},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7826093567632108,"sequenceIndex":486},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.152247335830071,"sequenceIndex":62},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.2517111086132537,"sequenceIndex":338},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.0924713786680296,"sequenceIndex":378},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2967607859773023,"sequenceIndex":386},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7298254886252185,"sequenceIndex":443},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.6340658657101486,"sequenceIndex":312},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7758850588370527,"sequenceIndex":261},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.5093390394507233,"sequenceIndex":392},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.872705673391796,"sequenceIndex":509}],"sampleSize":256,"lambda":3.90625E-4,"random":{},"entriesSeen":512},"tree":{"storeSequenceIndexesEnabled":false,"centerOfMassEnabled":false,"random":{}}},{"sampler":{"weightedSamples":[{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.4167723115098101,"sequenceIndex":323},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.4167990148935595,"sequenceIndex":43},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.4201540303623035,"sequenceIndex":14},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.4614281267599293,"sequenceIndex":457},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.4499693586048835,"sequenceIndex":423},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.4449605786938321,"sequenceIndex":192},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.4242291640232057,"sequenceIndex":117},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5324418702619016,"sequenceIndex":481},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.50921350145025,"sequenceIndex":421},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.500259527671344,"sequenceIndex":4},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5141214713692313,"sequenceIndex":419},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.48498447314103166,"sequenceIndex":24},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.44805866177787745,"sequenceIndex":219},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.42690605113404884,"sequenceIndex":284},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.4790456295864388,"sequenceIndex":358},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5699030449756834,"sequenceIndex":466},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5462463079220368,"sequenceIndex":384},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6070263882570301,"sequenceIndex":401},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8086067863538057,"sequenceIndex":280},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5370396560023059,"sequenceIndex":305},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5113958758600466,"sequenceIndex":273},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6586428438895201,"sequenceIndex":183},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6016441209332574,"sequenceIndex":184},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6862510415496836,"sequenceIndex":96},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6057965853602543,"sequenceIndex":101},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5164289796638947,"sequenceIndex":215},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5565308303072316,"sequenceIndex":220},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5722814711469648,"sequenceIndex":275},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.45324049017695023,"sequenceIndex":239},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6716418217824242,"sequenceIndex":300},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5756107786404235,"sequenceIndex":129},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5776557428215141,"sequenceIndex":406},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8947167155870214,"sequenceIndex":135},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.706556669825146,"sequenceIndex":397},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9671582407294835,"sequenceIndex":460},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6188941534135812,"sequenceIndex":72},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7094219553767822,"sequenceIndex":150},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0944956704805329,"sequenceIndex":302},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8449179205059666,"sequenceIndex":157},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7566687247387598,"sequenceIndex":163},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6565857848392259,"sequenceIndex":41},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9025515747870058,"sequenceIndex":361},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9147826531929157,"sequenceIndex":87},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.863723061115721,"sequenceIndex":22},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8142708228085695,"sequenceIndex":91},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7646036873126584,"sequenceIndex":449},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8824882819557498,"sequenceIndex":377},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8288799464560672,"sequenceIndex":497},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9870344656199865,"sequenceIndex":49},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8556760816837938,"sequenceIndex":278},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6342926662357837,"sequenceIndex":355},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5513594805180716,"sequenceIndex":339},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6105645668151447,"sequenceIndex":456},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7648497224096785,"sequenceIndex":501},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8466448908464705,"sequenceIndex":502},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6439876257693039,"sequenceIndex":488},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.233852148171099,"sequenceIndex":229},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6993554311799627,"sequenceIndex":58},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7892830225401399,"sequenceIndex":492},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1970713388493834,"sequenceIndex":243},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7820762938023343,"sequenceIndex":246},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8788933896512361,"sequenceIndex":31},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7644667088183936,"sequenceIndex":382},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5854286049532917,"sequenceIndex":508},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8783312008764235,"sequenceIndex":279},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2745533372962181,"sequenceIndex":390},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9111129361712282,"sequenceIndex":262},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8603608716253812,"sequenceIndex":137},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8242172441897218,"sequenceIndex":420},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3476304407184339,"sequenceIndex":312},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4645923449145009,"sequenceIndex":400},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0964296748878244,"sequenceIndex":145},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9898227644027142,"sequenceIndex":147},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6000212093831463,"sequenceIndex":326},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9321939383172002,"sequenceIndex":448},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2328229580181325,"sequenceIndex":444},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.397887009624906,"sequenceIndex":288},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9655503331664804,"sequenceIndex":459},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8477111570141848,"sequenceIndex":295},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5708718181864472,"sequenceIndex":352},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8167700166792216,"sequenceIndex":356},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8007004557853445,"sequenceIndex":165},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.757114827416389,"sequenceIndex":348},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1800255469731118,"sequenceIndex":487},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2005166993122984,"sequenceIndex":171},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.644878383900552,"sequenceIndex":396},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.282021598099767,"sequenceIndex":174},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9688913246132209,"sequenceIndex":176},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1716915140854396,"sequenceIndex":178},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8251232557771363,"sequenceIndex":369},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8703946909742786,"sequenceIndex":418},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0870270650340428,"sequenceIndex":438},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3070751170412067,"sequenceIndex":296},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0091042002455142,"sequenceIndex":317},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0405581391549248,"sequenceIndex":374},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5228576608521347,"sequenceIndex":376},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8802571014473741,"sequenceIndex":493},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3683478171170431,"sequenceIndex":445},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4742588742389273,"sequenceIndex":198},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9887341009063783,"sequenceIndex":50},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2733272179895687,"sequenceIndex":277},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8418380479405387,"sequenceIndex":307},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9559350533556563,"sequenceIndex":207},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2211253782926048,"sequenceIndex":407},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9836343110120379,"sequenceIndex":211},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1833841407297678,"sequenceIndex":213},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3932561802144763,"sequenceIndex":214},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3329380561438897,"sequenceIndex":383},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7896393886201634,"sequenceIndex":337},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6025475364648505,"sequenceIndex":322},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3309479335262882,"sequenceIndex":345},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6569372417006827,"sequenceIndex":432},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6846455422918375,"sequenceIndex":473},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5561165094242877,"sequenceIndex":292},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4372125273923964,"sequenceIndex":1},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3620359644973052,"sequenceIndex":470},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7607544121521558,"sequenceIndex":116},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4052012595648429,"sequenceIndex":59},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8257006396740046,"sequenceIndex":321},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.031727514235044,"sequenceIndex":60},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.887129338349002,"sequenceIndex":495},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1306779458800624,"sequenceIndex":245},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.028603072944664,"sequenceIndex":123},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9254004656157865,"sequenceIndex":458},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.261591586086804,"sequenceIndex":124},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1640936074643782,"sequenceIndex":63},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9628635291694991,"sequenceIndex":381},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.586201776422233,"sequenceIndex":451},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.172142201176963,"sequenceIndex":276},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8499668880406148,"sequenceIndex":130},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.818125905427418,"sequenceIndex":131},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-5.308906319624573,"sequenceIndex":66},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.0356167666625393,"sequenceIndex":133},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.2570873035523995,"sequenceIndex":33},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.430886699367294,"sequenceIndex":454},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.8241762126214414,"sequenceIndex":17},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7178884979932947,"sequenceIndex":336},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1870636992782688,"sequenceIndex":68},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9777717376003955,"sequenceIndex":139},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.742051484357004,"sequenceIndex":290},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9981842647277235,"sequenceIndex":141},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-5.083280188752955,"sequenceIndex":71},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.770876945875638,"sequenceIndex":353},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.595086940861381,"sequenceIndex":144},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9756799605996769,"sequenceIndex":9},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.0697538230439236,"sequenceIndex":146},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1583312866367208,"sequenceIndex":73},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.6784978777911506,"sequenceIndex":74},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.664645755359197,"sequenceIndex":148},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.619833790254309,"sequenceIndex":37},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8185184205794773,"sequenceIndex":309},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-5.743235528687532,"sequenceIndex":76},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3951254403681062,"sequenceIndex":152},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8652863569372478,"sequenceIndex":38},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7767357590713768,"sequenceIndex":350},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.1000400497847838,"sequenceIndex":156},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.912434097268538,"sequenceIndex":78},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.0021491688301567,"sequenceIndex":158},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.7077666740930795,"sequenceIndex":333},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.40536173440498,"sequenceIndex":20},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.3054746654804634,"sequenceIndex":354},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.4055380567872855,"sequenceIndex":429},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.7163568219062824,"sequenceIndex":375},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.42710705753575,"sequenceIndex":392},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6633288914629971,"sequenceIndex":472},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7320495752991107,"sequenceIndex":417},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-5.5961361530758085,"sequenceIndex":167},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6820166951255975,"sequenceIndex":351},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.283063634414821,"sequenceIndex":494},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-6.79989930004874,"sequenceIndex":85},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9930102128269587,"sequenceIndex":170},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8657054550471768,"sequenceIndex":86},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9641557120861795,"sequenceIndex":329},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.52385651310193,"sequenceIndex":483},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6079141320404788,"sequenceIndex":293},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7623302404358607,"sequenceIndex":88},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.870327390055666,"sequenceIndex":367},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8483240361027853,"sequenceIndex":450},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6677716192541403,"sequenceIndex":179},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8921956481376203,"sequenceIndex":180},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9410090045330928,"sequenceIndex":408},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.1654091142087983,"sequenceIndex":182},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2885336277252009,"sequenceIndex":479},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5743547366852917,"sequenceIndex":475},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.356170080379277,"sequenceIndex":185},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3389202508668592,"sequenceIndex":186},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7797429897382833,"sequenceIndex":187},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.374561236531541,"sequenceIndex":388},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8555223123838052,"sequenceIndex":439},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.1260811893112157,"sequenceIndex":370},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.0274427354560043,"sequenceIndex":259},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7006595590724687,"sequenceIndex":3},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.4698509085722726,"sequenceIndex":416},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9683064455976488,"sequenceIndex":314},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.029710049065513,"sequenceIndex":303},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.5166861493498827,"sequenceIndex":196},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5653451785830022,"sequenceIndex":480},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.176808983041949,"sequenceIndex":99},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.8680210435700113,"sequenceIndex":199},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.335346762211262,"sequenceIndex":200},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-5.935987306107144,"sequenceIndex":507},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.2628978921723353,"sequenceIndex":346},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.169583570949931,"sequenceIndex":203},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4611824390900774,"sequenceIndex":102},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.8610941484755057,"sequenceIndex":205},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6430151612882244,"sequenceIndex":265},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2425692323403414,"sequenceIndex":385},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.9557489679392543,"sequenceIndex":52},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3390421961869596,"sequenceIndex":330},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2853202155590195,"sequenceIndex":105},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.1429850466931155,"sequenceIndex":264},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4358150059269241,"sequenceIndex":12},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.359289277403614,"sequenceIndex":106},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.878093198556987,"sequenceIndex":107},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5307756607657867,"sequenceIndex":258},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.262798750990264,"sequenceIndex":286},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4533279109527952,"sequenceIndex":217},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.432815923867239,"sequenceIndex":313},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.919723411598876,"sequenceIndex":500},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.7591046496952494,"sequenceIndex":110},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6552726216793336,"sequenceIndex":478},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.0569351084107086,"sequenceIndex":308},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.31052183135636,"sequenceIndex":362},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.219083768945598,"sequenceIndex":7},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6848972271597833,"sequenceIndex":464},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3392759410937982,"sequenceIndex":56},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.7152287774466326,"sequenceIndex":297},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5598175292489465,"sequenceIndex":57},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.119342393394067,"sequenceIndex":405},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.448981161782397,"sequenceIndex":230},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.629054608573534,"sequenceIndex":404},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.0584242223027,"sequenceIndex":29},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6737845289774624,"sequenceIndex":232},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.2370602021520845,"sequenceIndex":332},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1977625192087147,"sequenceIndex":311},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.654805360814565,"sequenceIndex":118},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4353869245170883,"sequenceIndex":315},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.3150627642694626,"sequenceIndex":119},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.4487869792572465,"sequenceIndex":359},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.1262304034812924,"sequenceIndex":240},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.9029956932863246,"sequenceIndex":241},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.0100934891300133,"sequenceIndex":306},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.7567118960737673,"sequenceIndex":468},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.4392349304374634,"sequenceIndex":244},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.2340252497390036,"sequenceIndex":347},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2588910399741953,"sequenceIndex":506},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6938856953385721,"sequenceIndex":485},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.4166644274205087,"sequenceIndex":62},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8381324408696944,"sequenceIndex":248},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.928480037885627,"sequenceIndex":250},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.380817279728157,"sequenceIndex":403},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.728104488032326,"sequenceIndex":415},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5926259643997076,"sequenceIndex":253},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8068348463648936,"sequenceIndex":399},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7277501525793977,"sequenceIndex":452},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.2695034764436435,"sequenceIndex":510}],"sampleSize":256,"lambda":3.90625E-4,"random":{},"entriesSeen":512},"tree":{"storeSequenceIndexesEnabled":false,"centerOfMassEnabled":false,"random":{}}},{"sampler":{"weightedSamples":[{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.46149947926444923,"sequenceIndex":275},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.4659594823532823,"sequenceIndex":179},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.47530074501989983,"sequenceIndex":246},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.49639985619579735,"sequenceIndex":362},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.4922752378224734,"sequenceIndex":167},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.4766000344752878,"sequenceIndex":377},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.498987367330516,"sequenceIndex":120},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.516083860702059,"sequenceIndex":475},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.508882531063219,"sequenceIndex":412},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5239683431275213,"sequenceIndex":379},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6643260301038669,"sequenceIndex":406},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5900208144160212,"sequenceIndex":261},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5011076675630493,"sequenceIndex":396},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5605515972743128,"sequenceIndex":118},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5506896791618354,"sequenceIndex":243},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5488906668333844,"sequenceIndex":503},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.541870319697298,"sequenceIndex":17},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6223635174172961,"sequenceIndex":302},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5959332578602772,"sequenceIndex":470},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6967019030180789,"sequenceIndex":166},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.648264934550384,"sequenceIndex":87},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6661678138593382,"sequenceIndex":180},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7484323965368391,"sequenceIndex":185},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6374423890920422,"sequenceIndex":331},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6923756857220646,"sequenceIndex":205},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.52111634954169,"sequenceIndex":427},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5823711389994106,"sequenceIndex":341},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5620807975082941,"sequenceIndex":390},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.578025227142135,"sequenceIndex":29},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5680679883132159,"sequenceIndex":121},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6668171660539345,"sequenceIndex":271},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7987631969888587,"sequenceIndex":506},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6274268548633014,"sequenceIndex":134},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8788532210795931,"sequenceIndex":499},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7132759001090798,"sequenceIndex":143},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7356862903389717,"sequenceIndex":145},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9832619222008698,"sequenceIndex":375},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6115160116889482,"sequenceIndex":310},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7016193187921123,"sequenceIndex":282},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0533131870813117,"sequenceIndex":81},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8520285228096371,"sequenceIndex":165},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7898377485362478,"sequenceIndex":171},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.857876462739306,"sequenceIndex":355},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7113364118557332,"sequenceIndex":178},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9912991459390886,"sequenceIndex":328},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8551764331336311,"sequenceIndex":381},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7594111801584363,"sequenceIndex":94},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8094330989287257,"sequenceIndex":316},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.706586140511292,"sequenceIndex":98},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.729590883504583,"sequenceIndex":101},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8262675813587942,"sequenceIndex":102},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7118790549872378,"sequenceIndex":280},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7849352040753034,"sequenceIndex":53},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7824458906463245,"sequenceIndex":54},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7894649833420584,"sequenceIndex":55},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.580583702015045,"sequenceIndex":351},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6817017232491498,"sequenceIndex":403},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6613561519030436,"sequenceIndex":233},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7953082288349702,"sequenceIndex":465},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7195764731992128,"sequenceIndex":315},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5865182956327576,"sequenceIndex":245},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6985031810228517,"sequenceIndex":125},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8349596829134658,"sequenceIndex":422},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8222153751649728,"sequenceIndex":502},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0473334261390963,"sequenceIndex":371},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.857793151632225,"sequenceIndex":133},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9054133487865534,"sequenceIndex":495},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2398176688752884,"sequenceIndex":137},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1174166051585004,"sequenceIndex":138},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6026318044499503,"sequenceIndex":35},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8468317828977605,"sequenceIndex":70},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8945626599493882,"sequenceIndex":18},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8845956350746506,"sequenceIndex":365},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1751775120684196,"sequenceIndex":284},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2163701855344222,"sequenceIndex":482},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6152834444831263,"sequenceIndex":321},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6771294564098844,"sequenceIndex":485},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.854234772035474,"sequenceIndex":283},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7954052491579688,"sequenceIndex":78},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.120196197752501,"sequenceIndex":20},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0876115479311899,"sequenceIndex":80},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1862712203515768,"sequenceIndex":164},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9569176121605903,"sequenceIndex":463},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0129196242504916,"sequenceIndex":446},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0965503502843068,"sequenceIndex":383},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9133367566010938,"sequenceIndex":441},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2759825096130857,"sequenceIndex":508},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8020539986770282,"sequenceIndex":177},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0018207518342042,"sequenceIndex":342},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.65097779118904,"sequenceIndex":181},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0200548956309925,"sequenceIndex":183},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.09180477280912,"sequenceIndex":46},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.884011475306212,"sequenceIndex":92},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9709490919119212,"sequenceIndex":23},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.620100300093402,"sequenceIndex":477},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4751531623746514,"sequenceIndex":6},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3404104445102945,"sequenceIndex":450},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1461086826620284,"sequenceIndex":372},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3508802050528954,"sequenceIndex":258},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9743344226332966,"sequenceIndex":279},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0285113583122545,"sequenceIndex":413},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.106354158381496,"sequenceIndex":486},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2063045961356373,"sequenceIndex":295},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.044715786622563,"sequenceIndex":209},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4024594256883167,"sequenceIndex":26},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0139506086760703,"sequenceIndex":392},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2381427645859084,"sequenceIndex":305},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9736234542192238,"sequenceIndex":389},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.654959055446408,"sequenceIndex":311},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3477103553785372,"sequenceIndex":281},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3686276111954827,"sequenceIndex":436},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.674864924343923,"sequenceIndex":224},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9557977069969222,"sequenceIndex":434},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0917503104403636,"sequenceIndex":57},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2326192828427933,"sequenceIndex":447},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3820793444763784,"sequenceIndex":472},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.465651979325381,"sequenceIndex":438},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1248963832555754,"sequenceIndex":335},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6043279290623136,"sequenceIndex":432},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8218891706992454,"sequenceIndex":314},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9567752894866791,"sequenceIndex":488},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4349000791676074,"sequenceIndex":444},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7854107789356383,"sequenceIndex":356},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9785553658889756,"sequenceIndex":248},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8018400800821314,"sequenceIndex":256},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9003976944691638,"sequenceIndex":252},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9640329001775989,"sequenceIndex":31},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8617968411246071,"sequenceIndex":494},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9847368006278617,"sequenceIndex":32},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.0550975255691815,"sequenceIndex":65},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.503078870416265,"sequenceIndex":130},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.100571556793972,"sequenceIndex":66},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.8020058441149978,"sequenceIndex":460},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0718508257281956,"sequenceIndex":67},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6385892903868065,"sequenceIndex":428},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6371227187820672,"sequenceIndex":34},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-6.854750775779705,"sequenceIndex":408},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.4217856298380602,"sequenceIndex":453},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6434518359362225,"sequenceIndex":139},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.2405441566320627,"sequenceIndex":140},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.7834569724891325,"sequenceIndex":141},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1340216456480228,"sequenceIndex":142},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.011916368568114,"sequenceIndex":71},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8081452609777902,"sequenceIndex":481},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4357936046426365,"sequenceIndex":359},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.7067159133894356,"sequenceIndex":445},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3475591595189316,"sequenceIndex":147},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8400238592338134,"sequenceIndex":322},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8722855250473998,"sequenceIndex":435},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7810986932817021,"sequenceIndex":308},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.398743355100165,"sequenceIndex":151},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.8168358674540204,"sequenceIndex":401},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.4063359575001892,"sequenceIndex":458},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.059209231312482,"sequenceIndex":154},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1364361055118954,"sequenceIndex":466},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.525225846084745,"sequenceIndex":39},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.238237837785735,"sequenceIndex":325},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1011378395105142,"sequenceIndex":497},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1286767577027081,"sequenceIndex":330},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3455652917027545,"sequenceIndex":384},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.3682572915849516,"sequenceIndex":264},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.3902639977259823,"sequenceIndex":162},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.4748527701432574,"sequenceIndex":326},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.6605035859430908,"sequenceIndex":82},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3616009804386198,"sequenceIndex":41},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.5129434751986652,"sequenceIndex":83},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.991070679235778,"sequenceIndex":500},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.0593127637212834,"sequenceIndex":84},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.2803660258551393,"sequenceIndex":297},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4784457019775843,"sequenceIndex":478},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1765022222728898,"sequenceIndex":442},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3196302941930893,"sequenceIndex":425},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3917184044341961,"sequenceIndex":173},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.49708722820678,"sequenceIndex":492},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.38617036678186,"sequenceIndex":175},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5498942901817678,"sequenceIndex":44},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9515390329343966,"sequenceIndex":88},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2892144772053504,"sequenceIndex":11},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7256125880587048,"sequenceIndex":430},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.2676948495244216,"sequenceIndex":45},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8914902931196396,"sequenceIndex":386},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.1464884474073167,"sequenceIndex":347},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.1045779805392284,"sequenceIndex":489},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.431243541199696,"sequenceIndex":504},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.802090956271655,"sequenceIndex":451},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.4817824012153045,"sequenceIndex":368},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6883767544532615,"sequenceIndex":187},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.477653437076561,"sequenceIndex":188},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3512705065762167,"sequenceIndex":361},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.676992395233858,"sequenceIndex":190},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.0179466304590106,"sequenceIndex":307},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.5218989280247226,"sequenceIndex":487},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7950223139864478,"sequenceIndex":410},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.551949218420904,"sequenceIndex":194},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.150638956502148,"sequenceIndex":195},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.3885912405299905,"sequenceIndex":345},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.371848731264089,"sequenceIndex":197},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.379001278346474,"sequenceIndex":99},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.8375917651703295,"sequenceIndex":199},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.001607896864202,"sequenceIndex":334},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1914649471337242,"sequenceIndex":257},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.224703537573463,"sequenceIndex":319},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.3578929479795967,"sequenceIndex":203},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.507238308267798,"sequenceIndex":476},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.6110706613718073,"sequenceIndex":263},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.6311067987110413,"sequenceIndex":206},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.344613192355254,"sequenceIndex":380},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5123124171545066,"sequenceIndex":104},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.394558594617732,"sequenceIndex":366},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.258458534728357,"sequenceIndex":462},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.16898002120294,"sequenceIndex":64},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.127434936448886,"sequenceIndex":479},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3714747483341845,"sequenceIndex":493},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.5806934342345946,"sequenceIndex":214},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.851772540088463,"sequenceIndex":378},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.887799506262721,"sequenceIndex":216},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6641813985816918,"sequenceIndex":217},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.540661769837613,"sequenceIndex":218},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.5544247400219597,"sequenceIndex":219},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.1684299663474516,"sequenceIndex":220},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3531842939972936,"sequenceIndex":110},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4228249850519865,"sequenceIndex":222},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7800784134079426,"sequenceIndex":358},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.926280755361144,"sequenceIndex":112},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2678829774558686,"sequenceIndex":225},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.0032139171752235,"sequenceIndex":226},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8434266528228211,"sequenceIndex":113},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.0420626458796507,"sequenceIndex":300},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2879693522822557,"sequenceIndex":229},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.48781015930085,"sequenceIndex":452},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.129039088726586,"sequenceIndex":259},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.116456426550789,"sequenceIndex":58},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7216347064115296,"sequenceIndex":232},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.2952924613740455,"sequenceIndex":234},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.9789998402606384,"sequenceIndex":299},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.2716927144158783,"sequenceIndex":59},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2814240683217952,"sequenceIndex":278},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-5.112616024989032,"sequenceIndex":238},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6757823969942738,"sequenceIndex":274},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5901620204394413,"sequenceIndex":240},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.2700698421376972,"sequenceIndex":498},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.228680851353041,"sequenceIndex":242},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9593917830491158,"sequenceIndex":456},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9209980479337376,"sequenceIndex":122},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8758639362968248,"sequenceIndex":61},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.0526853104747262,"sequenceIndex":123},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.659036571992088,"sequenceIndex":317},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.8750151021454244,"sequenceIndex":62},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.76752459958321,"sequenceIndex":287},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4336004271856495,"sequenceIndex":250},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0940169963645419,"sequenceIndex":337},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.033379401203524,"sequenceIndex":126},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2285160979096745,"sequenceIndex":364},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.260987730167664,"sequenceIndex":254},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.837513532219282,"sequenceIndex":409},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6872211597567133,"sequenceIndex":509}],"sampleSize":256,"lambda":3.90625E-4,"random":{},"entriesSeen":512},"tree":{"storeSequenceIndexesEnabled":false,"centerOfMassEnabled":false,"random":{}}},{"sampler":{"weightedSamples":[{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.48303930308021575,"sequenceIndex":360},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.48396339947514816,"sequenceIndex":479},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5026563496959839,"sequenceIndex":252},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.4901365644317718,"sequenceIndex":490},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.4960032668380658,"sequenceIndex":44},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5074859121731506,"sequenceIndex":98},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.574957274661368,"sequenceIndex":340},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.525942307774576,"sequenceIndex":69},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6480473630782035,"sequenceIndex":146},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5274941157582563,"sequenceIndex":311},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5285827348533466,"sequenceIndex":95},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.535559003470778,"sequenceIndex":201},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5413099908866473,"sequenceIndex":219},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5785653568725179,"sequenceIndex":228},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5916288817951886,"sequenceIndex":14},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5333134411508716,"sequenceIndex":508},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5558858110416947,"sequenceIndex":143},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6954680489519465,"sequenceIndex":354},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6893977163981376,"sequenceIndex":304},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7663368267767349,"sequenceIndex":20},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5675051245756465,"sequenceIndex":84},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7707319931663095,"sequenceIndex":451},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5646856233755305,"sequenceIndex":23},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6215978924925147,"sequenceIndex":192},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5857427187420471,"sequenceIndex":206},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5433503469555423,"sequenceIndex":52},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5543995243197622,"sequenceIndex":111},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6608499517730513,"sequenceIndex":114},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6564034124920135,"sequenceIndex":289},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6230950254154383,"sequenceIndex":373},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7466044122803212,"sequenceIndex":450},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5337609259880344,"sequenceIndex":482},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7166852891892732,"sequenceIndex":256},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6635667579801929,"sequenceIndex":137},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.57937933583185,"sequenceIndex":358},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9875579898970226,"sequenceIndex":72},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8447735402372814,"sequenceIndex":363},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6827579873385918,"sequenceIndex":77},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9635696978440663,"sequenceIndex":79},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0708668546954563,"sequenceIndex":369},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8961267214756261,"sequenceIndex":287},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6225465310762305,"sequenceIndex":449},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6121451775389806,"sequenceIndex":417},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4243059190319238,"sequenceIndex":88},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7933001966932964,"sequenceIndex":45},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.815299110853778,"sequenceIndex":350},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6042008832139771,"sequenceIndex":188},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9552592420594945,"sequenceIndex":48},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6876176962504159,"sequenceIndex":199},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7693376428004076,"sequenceIndex":49},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8880346063608838,"sequenceIndex":205},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.786064484459801,"sequenceIndex":210},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.600459340632388,"sequenceIndex":213},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5710082600806824,"sequenceIndex":108},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.627701502227527,"sequenceIndex":54},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9270867821841668,"sequenceIndex":226},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8250321597281144,"sequenceIndex":231},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.656695920643402,"sequenceIndex":232},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1143703406898235,"sequenceIndex":306},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7885438689653547,"sequenceIndex":12},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7540115108696637,"sequenceIndex":392},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.895772745835263,"sequenceIndex":125},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9278077777498004,"sequenceIndex":337},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5914148355165058,"sequenceIndex":65},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9417566719427323,"sequenceIndex":339},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2331009521793082,"sequenceIndex":9},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.87112043388488,"sequenceIndex":361},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4766157653527965,"sequenceIndex":466},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6640174121928157,"sequenceIndex":433},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0413952762337249,"sequenceIndex":140},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1110046787652488,"sequenceIndex":331},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3258694801344535,"sequenceIndex":5},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2685411558991206,"sequenceIndex":276},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6752991901484489,"sequenceIndex":464},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9016782803083642,"sequenceIndex":151},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.723566570657588,"sequenceIndex":38},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.1235269287234417,"sequenceIndex":443},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9902896163909489,"sequenceIndex":157},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9746696015665348,"sequenceIndex":39},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1638251660310568,"sequenceIndex":425},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6939479874586145,"sequenceIndex":81},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9511360272072311,"sequenceIndex":165},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2714845012366216,"sequenceIndex":280},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9915503350603413,"sequenceIndex":10},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3109349303235525,"sequenceIndex":171},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7491077788834144,"sequenceIndex":268},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6220013492916332,"sequenceIndex":457},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.739526097412724,"sequenceIndex":11},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6406785674867164,"sequenceIndex":179},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9341266969039261,"sequenceIndex":90},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8737947349354336,"sequenceIndex":297},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9112547735728804,"sequenceIndex":411},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0755502161071497,"sequenceIndex":93},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8428815517913705,"sequenceIndex":47},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7174165790169365,"sequenceIndex":94},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0261328254097544,"sequenceIndex":473},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1658355693077098,"sequenceIndex":475},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7063863167015881,"sequenceIndex":97},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8391191686147762,"sequenceIndex":390},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3548221153290436,"sequenceIndex":343},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3770752208969916,"sequenceIndex":336},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6055821689825238,"sequenceIndex":502},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9537638076062757,"sequenceIndex":50},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4641449410634548,"sequenceIndex":208},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9988921744681916,"sequenceIndex":421},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1617712258929331,"sequenceIndex":303},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8161786800619594,"sequenceIndex":275},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.677732429762816,"sequenceIndex":217},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8360891926999352,"sequenceIndex":273},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.684793127550665,"sequenceIndex":410},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9639794465987516,"sequenceIndex":259},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1500789258994055,"sequenceIndex":377},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8655281057791215,"sequenceIndex":112},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8610031430071154,"sequenceIndex":29},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3547001156459482,"sequenceIndex":511},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1489715703323877,"sequenceIndex":448},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9571003409454909,"sequenceIndex":309},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1337216193524182,"sequenceIndex":422},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6087831725987216,"sequenceIndex":239},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2351396711915825,"sequenceIndex":240},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.939385524398482,"sequenceIndex":285},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1027898495301844,"sequenceIndex":244},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0631389564500988,"sequenceIndex":398},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.287395809679524,"sequenceIndex":362},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3055948734690783,"sequenceIndex":264},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.627943892408,"sequenceIndex":366},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2856911282701047,"sequenceIndex":444},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7823441604549101,"sequenceIndex":498},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3947132720433035,"sequenceIndex":128},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5761776991991223,"sequenceIndex":405},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8091088227419323,"sequenceIndex":462},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.1278673153234995,"sequenceIndex":301},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.5715978836228954,"sequenceIndex":133},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0280251414547728,"sequenceIndex":66},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1918461896189374,"sequenceIndex":467},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.4317195898218373,"sequenceIndex":68},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.732709643373611,"sequenceIndex":136},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2689924317162338,"sequenceIndex":16},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.3167543471468943,"sequenceIndex":283},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1345790286138357,"sequenceIndex":504},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5549287923512696,"sequenceIndex":141},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.116427077426103,"sequenceIndex":142},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4422880663861997,"sequenceIndex":452},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.5434390908196027,"sequenceIndex":389},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6233354127249378,"sequenceIndex":292},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.305774720769098,"sequenceIndex":399},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5175440019390838,"sequenceIndex":487},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.6703861928100476,"sequenceIndex":148},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.280353259368148,"sequenceIndex":37},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3522096992867334,"sequenceIndex":150},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9840268227473988,"sequenceIndex":501},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.794495235886857,"sequenceIndex":152},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.107655165799792,"sequenceIndex":300},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.712203687312368,"sequenceIndex":154},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.222898297677219,"sequenceIndex":328},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.9174518615030642,"sequenceIndex":78},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.947584121486783,"sequenceIndex":420},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.249452923937453,"sequenceIndex":158},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.8585780568444124,"sequenceIndex":393},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6689244950278377,"sequenceIndex":4},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2659381300792583,"sequenceIndex":286},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.0966237950292355,"sequenceIndex":162},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9375003365427776,"sequenceIndex":491},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.19172763091545,"sequenceIndex":82},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.1157359882360645,"sequenceIndex":284},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.7739029470493537,"sequenceIndex":166},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.398272489854038,"sequenceIndex":41},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.677766016284396,"sequenceIndex":168},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.532915976749696,"sequenceIndex":344},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.7761314562025374,"sequenceIndex":85},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.5280650897698647,"sequenceIndex":316},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0360089859945694,"sequenceIndex":465},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6549807508276322,"sequenceIndex":318},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.442230155444525,"sequenceIndex":174},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6956350264864763,"sequenceIndex":404},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.391564815261322,"sequenceIndex":176},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8258199774103665,"sequenceIndex":424},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.215118872884743,"sequenceIndex":178},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.5903735387378966,"sequenceIndex":471},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.4315318617410675,"sequenceIndex":317},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9970562090615174,"sequenceIndex":181},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.991838446250195,"sequenceIndex":414},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4917447164349151,"sequenceIndex":183},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2401379443862637,"sequenceIndex":499},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.678530944198201,"sequenceIndex":269},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.3541145634943614,"sequenceIndex":258},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2884391079238684,"sequenceIndex":187},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.0452301727388558,"sequenceIndex":455},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.357357984495991,"sequenceIndex":189},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0265256786198425,"sequenceIndex":190},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.825103778671869,"sequenceIndex":191},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.3325559359293853,"sequenceIndex":3},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.030313999656466,"sequenceIndex":193},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.238328432480371,"sequenceIndex":96},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2417666733114288,"sequenceIndex":195},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.258518185651491,"sequenceIndex":7},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.034445620686547,"sequenceIndex":197},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.272537760946548,"sequenceIndex":99},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.145246934166006,"sequenceIndex":263},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.359246961977198,"sequenceIndex":25},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6020479961017298,"sequenceIndex":370},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.0508210208472404,"sequenceIndex":435},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.1184088301875805,"sequenceIndex":261},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.6888198888714814,"sequenceIndex":102},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9178288961664576,"sequenceIndex":1},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9629406559272211,"sequenceIndex":345},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4121746565729412,"sequenceIndex":295},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6684810383291222,"sequenceIndex":13},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.3049720879616467,"sequenceIndex":209},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.068414152775658,"sequenceIndex":446},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.143907064060903,"sequenceIndex":356},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3936653346287817,"sequenceIndex":26},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9254459444962189,"sequenceIndex":428},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.252367659697231,"sequenceIndex":214},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.1713300285576547,"sequenceIndex":260},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.530504530595043,"sequenceIndex":27},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8224124378145492,"sequenceIndex":383},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.01516780128912,"sequenceIndex":391},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1623208840279429,"sequenceIndex":493},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.4481080783084597,"sequenceIndex":503},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3215935357892412,"sequenceIndex":221},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.4001899054277263,"sequenceIndex":484},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2430640380597275,"sequenceIndex":496},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9320556647354696,"sequenceIndex":28},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.131008393691928,"sequenceIndex":225},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.0017287288624357,"sequenceIndex":429},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.1403250078344165,"sequenceIndex":427},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2758433901367512,"sequenceIndex":497},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.168575643235679,"sequenceIndex":229},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5166642375262778,"sequenceIndex":115},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.495275276538174,"sequenceIndex":409},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9019091080634818,"sequenceIndex":6},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8048387450298524,"sequenceIndex":233},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5454559109099517,"sequenceIndex":382},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1757175386438241,"sequenceIndex":235},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.4823158449152056,"sequenceIndex":436},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.110738741436794,"sequenceIndex":458},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.0505856729354432,"sequenceIndex":238},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.3266970156378246,"sequenceIndex":347},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-6.389467737377894,"sequenceIndex":120},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.6124890790799773,"sequenceIndex":241},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.453427344316238,"sequenceIndex":242},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7917118634535198,"sequenceIndex":60},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-5.742957722524656,"sequenceIndex":61},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.5811726534140598,"sequenceIndex":438},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.932464429844905,"sequenceIndex":122},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.088360897121808,"sequenceIndex":413},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.988617644615235,"sequenceIndex":248},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.887232578085686,"sequenceIndex":249},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.240315834119491,"sequenceIndex":314},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8772944793658242,"sequenceIndex":505},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.1454030530382875,"sequenceIndex":431},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.984404924481527,"sequenceIndex":281},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.281213867851595,"sequenceIndex":127},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.4927562347297587,"sequenceIndex":255},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.464722950727941,"sequenceIndex":512}],"sampleSize":256,"lambda":3.90625E-4,"random":{},"entriesSeen":512},"tree":{"storeSequenceIndexesEnabled":false,"centerOfMassEnabled":false,"random":{}}},{"sampler":{"weightedSamples":[{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.4476690086469726,"sequenceIndex":385},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.45026332004590003,"sequenceIndex":69},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.4494386366225582,"sequenceIndex":56},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.46192676568585217,"sequenceIndex":138},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.4782066678245175,"sequenceIndex":284},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.46372649381197195,"sequenceIndex":436},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.4728061244592632,"sequenceIndex":366},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5031460697992636,"sequenceIndex":408},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.4667790894807297,"sequenceIndex":72},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5738131220170594,"sequenceIndex":168},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5896770972903458,"sequenceIndex":91},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.4825839264757147,"sequenceIndex":346},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.4846280371169179,"sequenceIndex":350},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5051682582303615,"sequenceIndex":234},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5027632030832622,"sequenceIndex":304},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5109946204983183,"sequenceIndex":510},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8367452294140876,"sequenceIndex":457},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5400163985660391,"sequenceIndex":147},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.4923544285081229,"sequenceIndex":19},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5811013424019122,"sequenceIndex":266},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6349279918930775,"sequenceIndex":84},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7090693989058693,"sequenceIndex":285},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6439202637490327,"sequenceIndex":268},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.497146895932269,"sequenceIndex":199},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5093932761595497,"sequenceIndex":6},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7338257611289283,"sequenceIndex":417},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7958772345342358,"sequenceIndex":217},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6032829594589935,"sequenceIndex":275},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7939514571213566,"sequenceIndex":424},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5898129848007567,"sequenceIndex":245},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6719625544292368,"sequenceIndex":63},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5279552628623602,"sequenceIndex":456},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5295387008971533,"sequenceIndex":134},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0156494443095272,"sequenceIndex":474},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8553854555052031,"sequenceIndex":256},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.360461567914433,"sequenceIndex":505},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6449015638592762,"sequenceIndex":75},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5432938224683019,"sequenceIndex":154},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7095118344578343,"sequenceIndex":157},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9201973753975807,"sequenceIndex":162},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8429193216250845,"sequenceIndex":373},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6560769582927922,"sequenceIndex":171},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6586338484219141,"sequenceIndex":21},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8269544514792545,"sequenceIndex":177},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7677006821805319,"sequenceIndex":375},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7323277825818054,"sequenceIndex":280},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.782486571080883,"sequenceIndex":94},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5068021106731421,"sequenceIndex":193},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.107639923423728,"sequenceIndex":475},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6178125562554457,"sequenceIndex":396},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6165314510277936,"sequenceIndex":204},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7879004312072716,"sequenceIndex":210},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8747305548688218,"sequenceIndex":26},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9764883960289552,"sequenceIndex":297},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8291161190558181,"sequenceIndex":111},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6859103381216802,"sequenceIndex":227},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6592645563376651,"sequenceIndex":437},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0025729727612256,"sequenceIndex":495},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8383971360787419,"sequenceIndex":239},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7851842669628364,"sequenceIndex":120},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6699930694076253,"sequenceIndex":444},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7665782631575636,"sequenceIndex":249},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8837108725820881,"sequenceIndex":330},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5983708113229347,"sequenceIndex":494},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0210121558939118,"sequenceIndex":1},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0177336001710082,"sequenceIndex":343},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.146306200241214,"sequenceIndex":263},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2538516636632109,"sequenceIndex":137},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1302054627699096,"sequenceIndex":258},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.255193593197089,"sequenceIndex":394},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.002071499904941,"sequenceIndex":361},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.012891635392044,"sequenceIndex":441},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4678303900444916,"sequenceIndex":319},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.024055541787221,"sequenceIndex":36},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7757025073077688,"sequenceIndex":151},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5589299176832306,"sequenceIndex":153},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9317884833844118,"sequenceIndex":501},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9519551509919846,"sequenceIndex":300},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9339428410088514,"sequenceIndex":158},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2326324720106125,"sequenceIndex":392},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6837500001551347,"sequenceIndex":10},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.064874593972222,"sequenceIndex":422},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0110324026039672,"sequenceIndex":260},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9932253741463506,"sequenceIndex":169},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.0010729878387523,"sequenceIndex":498},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.653752989013694,"sequenceIndex":278},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4647203308353156,"sequenceIndex":175},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4005552061947044,"sequenceIndex":176},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1295045319730062,"sequenceIndex":318},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4907723768225536,"sequenceIndex":11},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9190912621469529,"sequenceIndex":472},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5760442692432304,"sequenceIndex":421},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3304480414770188,"sequenceIndex":93},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8097606190375244,"sequenceIndex":339},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7825858996689381,"sequenceIndex":191},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8661169209254119,"sequenceIndex":24},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6079438336138268,"sequenceIndex":308},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5724975584504128,"sequenceIndex":382},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4317118626168253,"sequenceIndex":468},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.81588545480451,"sequenceIndex":430},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.1291579568954644,"sequenceIndex":100},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8463023191952451,"sequenceIndex":484},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7510949484361329,"sequenceIndex":454},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9122141232905525,"sequenceIndex":209},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.862985620495765,"sequenceIndex":211},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.08562858149762,"sequenceIndex":106},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3042386828481811,"sequenceIndex":107},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2962233955580897,"sequenceIndex":27},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0195541808695938,"sequenceIndex":218},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.209329774781226,"sequenceIndex":380},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9847396044763976,"sequenceIndex":287},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7119172665090585,"sequenceIndex":112},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.75041421248401,"sequenceIndex":113},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.130101605487931,"sequenceIndex":114},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5104050563482843,"sequenceIndex":416},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3054014959054194,"sequenceIndex":58},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1237955325271836,"sequenceIndex":313},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.1999245902307862,"sequenceIndex":321},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2095451634102727,"sequenceIndex":357},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.922330936414615,"sequenceIndex":367},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8658301012285063,"sequenceIndex":243},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0443697776542147,"sequenceIndex":123},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0969886231774308,"sequenceIndex":265},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.360202763668346,"sequenceIndex":360},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.803271451155882,"sequenceIndex":251},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1487106889209147,"sequenceIndex":252},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4897794751877504,"sequenceIndex":390},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.621543050106999,"sequenceIndex":502},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.926871746453948,"sequenceIndex":431},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.373519365989522,"sequenceIndex":130},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2211552250342144,"sequenceIndex":303},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.142724104897086,"sequenceIndex":132},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7400341811298319,"sequenceIndex":33},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.1226695572372845,"sequenceIndex":67},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.026821816512353,"sequenceIndex":405},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.669836575896388,"sequenceIndex":68},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4864250008401618,"sequenceIndex":293},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5868377546293553,"sequenceIndex":34},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.3851764832447784,"sequenceIndex":459},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.4723887480304048,"sequenceIndex":140},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.1392110420535553,"sequenceIndex":508},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.852042818985824,"sequenceIndex":324},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4096535311787417,"sequenceIndex":506},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.124905845145985,"sequenceIndex":18},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.3164603237363846,"sequenceIndex":349},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5485209593772702,"sequenceIndex":37},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6549558655834598,"sequenceIndex":464},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.3626739071253726,"sequenceIndex":353},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.3435790539778996,"sequenceIndex":149},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-7.691771082214417,"sequenceIndex":150},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0680282929412541,"sequenceIndex":74},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.7296977162652714,"sequenceIndex":407},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2479518009076598,"sequenceIndex":442},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.316268296326581,"sequenceIndex":77},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.20389419968843,"sequenceIndex":340},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4806836777996766,"sequenceIndex":78},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.031600483006702,"sequenceIndex":39},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1499165233271365,"sequenceIndex":79},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.142300803942197,"sequenceIndex":159},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6878789976169173,"sequenceIndex":40},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6308443009231326,"sequenceIndex":344},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.597129651332262,"sequenceIndex":491},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.1647978488490387,"sequenceIndex":411},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.3554757502299015,"sequenceIndex":41},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.8308305018732614,"sequenceIndex":269},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1905265166136956,"sequenceIndex":82},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.007387525474351,"sequenceIndex":262},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2461766923643456,"sequenceIndex":42},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.309711627755183,"sequenceIndex":320},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.3886955919398667,"sequenceIndex":267},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.078478875453992,"sequenceIndex":455},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.3578024848120105,"sequenceIndex":172},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.113475191922418,"sequenceIndex":354},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.2144956430695895,"sequenceIndex":276},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.704098804322117,"sequenceIndex":288},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5020857806406096,"sequenceIndex":44},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8854734553591093,"sequenceIndex":504},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9130933150262894,"sequenceIndex":89},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.2816523975770853,"sequenceIndex":179},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.2508448580307863,"sequenceIndex":180},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.140049635550771,"sequenceIndex":181},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2270303929683644,"sequenceIndex":90},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.8122272095521508,"sequenceIndex":485},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.224905144553081,"sequenceIndex":418},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.7097244247234507,"sequenceIndex":316},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.043737812161776,"sequenceIndex":467},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.28171355601412,"sequenceIndex":315},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1356350604930676,"sequenceIndex":47},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8119469066527363,"sequenceIndex":309},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.4159619067231475,"sequenceIndex":190},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5903098785856953,"sequenceIndex":493},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.062444157095284,"sequenceIndex":365},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.32888220405799,"sequenceIndex":359},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.826197352070088,"sequenceIndex":331},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9182994627835025,"sequenceIndex":195},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.154391353099811,"sequenceIndex":98},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.702953720227949,"sequenceIndex":471},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.034796716112329,"sequenceIndex":264},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4893793840595562,"sequenceIndex":395},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.26532521956944,"sequenceIndex":50},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.173040403976327,"sequenceIndex":201},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.757557314085403,"sequenceIndex":450},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.2534784394533345,"sequenceIndex":203},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.301840788680852,"sequenceIndex":461},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.561575219883399,"sequenceIndex":314},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.1190639424149142,"sequenceIndex":206},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.2728299172440694,"sequenceIndex":207},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.3387160717665196,"sequenceIndex":208},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.570472854215694,"sequenceIndex":52},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.63633256539643,"sequenceIndex":105},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.565937096109349,"sequenceIndex":64},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2724859714853751,"sequenceIndex":362},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.818346970361953,"sequenceIndex":213},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.938635671890566,"sequenceIndex":337},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5140625179981966,"sequenceIndex":215},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7406154032276584,"sequenceIndex":432},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6948339229756424,"sequenceIndex":378},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.11284311953107,"sequenceIndex":488},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.6100453108978563,"sequenceIndex":387},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4144820923811972,"sequenceIndex":220},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.1690629700480204,"sequenceIndex":334},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.7660443356413142,"sequenceIndex":342},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.60987068537738,"sequenceIndex":420},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2257048825473988,"sequenceIndex":7},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7867499832712327,"sequenceIndex":224},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6375255501585297,"sequenceIndex":458},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.526410347984732,"sequenceIndex":371},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.0355247771695266,"sequenceIndex":356},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4998345978955117,"sequenceIndex":272},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.0431977736820612,"sequenceIndex":230},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.98803236277479,"sequenceIndex":261},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4897271959340934,"sequenceIndex":232},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3768652587165913,"sequenceIndex":233},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.251799731688658,"sequenceIndex":117},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.143464339462398,"sequenceIndex":235},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.489443243381304,"sequenceIndex":118},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-7.11382441523289,"sequenceIndex":237},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3814766242564331,"sequenceIndex":119},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2337438918832015,"sequenceIndex":423},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9241205716190493,"sequenceIndex":379},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.878021707647061,"sequenceIndex":465},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.312065559003574,"sequenceIndex":341},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.3180716888289328,"sequenceIndex":372},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.338227720931037,"sequenceIndex":61},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.011289478382119,"sequenceIndex":466},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.1850979123370724,"sequenceIndex":246},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.1244684074652103,"sequenceIndex":122},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-5.6129708869473784,"sequenceIndex":345},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.1084308114043604,"sequenceIndex":389},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.247269646492984,"sequenceIndex":250},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.235622110460375,"sequenceIndex":329},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.1023409415967467,"sequenceIndex":338},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5506617490235124,"sequenceIndex":325},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9927841781516686,"sequenceIndex":128},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.1745324276509828,"sequenceIndex":255},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1812005674883357,"sequenceIndex":511}],"sampleSize":256,"lambda":3.90625E-4,"random":{},"entriesSeen":512},"tree":{"storeSequenceIndexesEnabled":false,"centerOfMassEnabled":false,"random":{}}},{"sampler":{"weightedSamples":[{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.4464027088808663,"sequenceIndex":142},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.447337343354482,"sequenceIndex":167},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.45106661810814463,"sequenceIndex":247},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.4547182916836945,"sequenceIndex":303},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.4717049061879133,"sequenceIndex":176},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.45384168969950506,"sequenceIndex":470},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.45312360337680385,"sequenceIndex":248},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.4734235393567861,"sequenceIndex":500},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.4604257775912886,"sequenceIndex":157},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5069197571213607,"sequenceIndex":306},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.4893607720926554,"sequenceIndex":88},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5395661842445478,"sequenceIndex":99},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5577606528508725,"sequenceIndex":437},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.4632281831018059,"sequenceIndex":434},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6059920111772198,"sequenceIndex":240},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5623789781509387,"sequenceIndex":506},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8037543188408989,"sequenceIndex":71},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.469379306057217,"sequenceIndex":430},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7812675473521326,"sequenceIndex":38},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6056322462532264,"sequenceIndex":463},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5308446824050217,"sequenceIndex":273},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5823195085035173,"sequenceIndex":364},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6454793037219289,"sequenceIndex":342},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5554230326827028,"sequenceIndex":48},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9030643899374788,"sequenceIndex":327},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6894087721726755,"sequenceIndex":6},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5740330805867268,"sequenceIndex":379},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5859629584348757,"sequenceIndex":227},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5712517234424548,"sequenceIndex":369},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7156435980182217,"sequenceIndex":505},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6958646091915615,"sequenceIndex":439},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5859734615222338,"sequenceIndex":269},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6349325598700184,"sequenceIndex":35},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8837782752247747,"sequenceIndex":32},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.02496521185145,"sequenceIndex":495},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.542221208229966,"sequenceIndex":315},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.48830731448948617,"sequenceIndex":320},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9142020785067969,"sequenceIndex":77},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.824821456113282,"sequenceIndex":79},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8836111081463681,"sequenceIndex":163},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9455314521537332,"sequenceIndex":292},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9793848605294939,"sequenceIndex":85},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5647220322472613,"sequenceIndex":465},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.690537353614188,"sequenceIndex":393},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.613972508212671,"sequenceIndex":485},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9953749188771093,"sequenceIndex":416},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1922094763006126,"sequenceIndex":333},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8845542924885242,"sequenceIndex":410},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5785725810148659,"sequenceIndex":471},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9551401923333571,"sequenceIndex":1},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9689802888937409,"sequenceIndex":334},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7058082100582024,"sequenceIndex":431},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7063384947070575,"sequenceIndex":447},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7568306170332701,"sequenceIndex":55},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.593063351556748,"sequenceIndex":111},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9320025667076965,"sequenceIndex":225},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6487422734385959,"sequenceIndex":57},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9556551854491435,"sequenceIndex":232},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6747976199240344,"sequenceIndex":266},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0051709962842166,"sequenceIndex":307},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8306113123475595,"sequenceIndex":383},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7024759658715072,"sequenceIndex":487},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7770671967400182,"sequenceIndex":252},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6019480052931029,"sequenceIndex":481},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1890846203632062,"sequenceIndex":130},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2382506498211738,"sequenceIndex":2},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7957908844296395,"sequenceIndex":135},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5013241634733194,"sequenceIndex":280},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3574258562357486,"sequenceIndex":138},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1703296307246804,"sequenceIndex":141},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9734901077570717,"sequenceIndex":402},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6882092709842323,"sequenceIndex":144},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5492008445382315,"sequenceIndex":338},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8092259526369896,"sequenceIndex":422},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.649605696558517,"sequenceIndex":301},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6973083956360606,"sequenceIndex":19},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2410839518412113,"sequenceIndex":76},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9918268708738216,"sequenceIndex":156},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.138077338947045,"sequenceIndex":313},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6746910164740927,"sequenceIndex":161},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6176151874345157,"sequenceIndex":367},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1542547291213021,"sequenceIndex":382},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0118488781514736,"sequenceIndex":166},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8152212706234998,"sequenceIndex":278},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2608647248587355,"sequenceIndex":460},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8428810293657371,"sequenceIndex":423},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8309908349528439,"sequenceIndex":86},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.954055371233517,"sequenceIndex":381},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9205032628819328,"sequenceIndex":355},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2729296703651838,"sequenceIndex":90},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6676267794534252,"sequenceIndex":332},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2368221944581146,"sequenceIndex":185},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2824080295367721,"sequenceIndex":411},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3504504409867621,"sequenceIndex":47},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3060854536359887,"sequenceIndex":191},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.1174956622504166,"sequenceIndex":324},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1007186872358505,"sequenceIndex":493},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4413622478215111,"sequenceIndex":413},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.9302739219931118,"sequenceIndex":49},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4409998425465418,"sequenceIndex":200},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2170823560700121,"sequenceIndex":390},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.0694111376227067,"sequenceIndex":204},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6650125595793461,"sequenceIndex":473},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9112829269112159,"sequenceIndex":499},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4228284363441213,"sequenceIndex":105},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7545622371411612,"sequenceIndex":385},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1346509357529753,"sequenceIndex":480},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8000474275389611,"sequenceIndex":216},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0704131911248844,"sequenceIndex":376},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.079048493758569,"sequenceIndex":27},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8411059302637702,"sequenceIndex":426},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0754764168849698,"sequenceIndex":15},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.154021144156869,"sequenceIndex":113},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.892447572123235,"sequenceIndex":349},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2807726863533306,"sequenceIndex":360},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9591226488428947,"sequenceIndex":58},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.173377366250924,"sequenceIndex":234},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.413417051125168,"sequenceIndex":456},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7438581301550593,"sequenceIndex":300},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8077351941901432,"sequenceIndex":440},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.38159129665716,"sequenceIndex":310},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0511734288071795,"sequenceIndex":28},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8538573035756423,"sequenceIndex":444},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9113912396067033,"sequenceIndex":125},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7659827695993987,"sequenceIndex":250},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7855375148371864,"sequenceIndex":404},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7832315293652733,"sequenceIndex":298},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6060210386611683,"sequenceIndex":484},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6650885845689085,"sequenceIndex":65},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9671750528106762,"sequenceIndex":64},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.1346721521588226,"sequenceIndex":474},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.7686070216719694,"sequenceIndex":132},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.8904551218523546,"sequenceIndex":308},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9225906019112043,"sequenceIndex":33},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.782297060942022,"sequenceIndex":276},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.7929017172137125,"sequenceIndex":17},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.089608704363972,"sequenceIndex":136},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7856468952500917,"sequenceIndex":386},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.306459592964179,"sequenceIndex":139},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.277244061948335,"sequenceIndex":140},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2661511078529413,"sequenceIndex":34},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.6163508863027873,"sequenceIndex":491},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.2448134678173854,"sequenceIndex":143},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.7134419456500436,"sequenceIndex":72},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.648482067538227,"sequenceIndex":145},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.381870737667176,"sequenceIndex":36},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1904334120924285,"sequenceIndex":147},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9791716642012973,"sequenceIndex":148},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.0896351643980977,"sequenceIndex":149},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.6271035888527163,"sequenceIndex":389},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6974598828926628,"sequenceIndex":409},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.4219915326948223,"sequenceIndex":372},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.2928266425982877,"sequenceIndex":337},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.4184313490683174,"sequenceIndex":318},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.9765473818410317,"sequenceIndex":289},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.759695944435379,"sequenceIndex":39},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4102245786839915,"sequenceIndex":476},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5131020196598526,"sequenceIndex":391},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5534597481064165,"sequenceIndex":504},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.657566482978812,"sequenceIndex":20},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.3448667967351864,"sequenceIndex":160},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.545014404095832,"sequenceIndex":80},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8912594441431263,"sequenceIndex":432},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4369886005027248,"sequenceIndex":496},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.038589207487571,"sequenceIndex":490},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4654052184938764,"sequenceIndex":83},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.161002903330988,"sequenceIndex":452},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9321998489719567,"sequenceIndex":168},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.4755053011205055,"sequenceIndex":169},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9809938322824414,"sequenceIndex":170},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3445314144742024,"sequenceIndex":171},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1100411298062831,"sequenceIndex":43},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8744688875421487,"sequenceIndex":436},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8608807988801758,"sequenceIndex":174},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.2081103371763082,"sequenceIndex":403},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.2560282066142276,"sequenceIndex":44},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3423877399661766,"sequenceIndex":345},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.3453492773394737,"sequenceIndex":358},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.087517360851063,"sequenceIndex":445},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9164248843726694,"sequenceIndex":180},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8155610076736883,"sequenceIndex":11},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5030951404928095,"sequenceIndex":91},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.119522060964183,"sequenceIndex":265},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8351662017997277,"sequenceIndex":184},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2412749609684568,"sequenceIndex":442},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6404575656602305,"sequenceIndex":398},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.8654308061674425,"sequenceIndex":328},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.5026145913687983,"sequenceIndex":188},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.135633032692487,"sequenceIndex":295},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.6705099870977262,"sequenceIndex":341},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4556270301843872,"sequenceIndex":412},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.2302263830819418,"sequenceIndex":24},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.9840740350299635,"sequenceIndex":193},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2307169702725527,"sequenceIndex":194},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2423593526333938,"sequenceIndex":195},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-5.185695432762646,"sequenceIndex":98},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.580291182404378,"sequenceIndex":196},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.7545057421650077,"sequenceIndex":312},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.406497280536577,"sequenceIndex":275},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.026531223540764,"sequenceIndex":50},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.674772413060875,"sequenceIndex":400},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.157921030273102,"sequenceIndex":438},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4589414614259857,"sequenceIndex":203},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.108461685918367,"sequenceIndex":51},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.259819831334318,"sequenceIndex":394},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.2477525062456,"sequenceIndex":279},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.1381481487224696,"sequenceIndex":16},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.090565814152004,"sequenceIndex":448},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.162702848304662,"sequenceIndex":407},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.0625545861133916,"sequenceIndex":326},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.530989719288362,"sequenceIndex":211},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.5182252223168566,"sequenceIndex":462},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.067544280645824,"sequenceIndex":340},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.9610189994893252,"sequenceIndex":331},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3581851573365806,"sequenceIndex":215},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.4681572697978718,"sequenceIndex":54},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.24564387035553,"sequenceIndex":329},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3604231850381727,"sequenceIndex":291},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1984555447666563,"sequenceIndex":282},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4276179563582352,"sequenceIndex":220},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4801751030501518,"sequenceIndex":387},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3603163696126628,"sequenceIndex":472},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8569411673574723,"sequenceIndex":397},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.2474798448058397,"sequenceIndex":56},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.529663694240356,"sequenceIndex":468},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8907927980943557,"sequenceIndex":449},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2405877571046302,"sequenceIndex":296},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.145688524248079,"sequenceIndex":14},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2013810114512338,"sequenceIndex":229},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.823240732067974,"sequenceIndex":395},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.356680241757205,"sequenceIndex":330},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.256220136015881,"sequenceIndex":29},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.490493882252987,"sequenceIndex":233},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-5.351640466307884,"sequenceIndex":117},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.707079802555753,"sequenceIndex":235},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.371347543993177,"sequenceIndex":59},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.310741064893119,"sequenceIndex":433},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8300076927385318,"sequenceIndex":238},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9668747920843448,"sequenceIndex":319},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.129128252833952,"sequenceIndex":30},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.4175119897756927,"sequenceIndex":365},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6133734625191454,"sequenceIndex":121},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4395654711156671,"sequenceIndex":497},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6925206906696462,"sequenceIndex":244},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.4465982869262692,"sequenceIndex":245},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.210328240636655,"sequenceIndex":446},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.09720955969797,"sequenceIndex":284},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9772971459123225,"sequenceIndex":124},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.197296103001011,"sequenceIndex":405},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1218913312753471,"sequenceIndex":7},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.037602562553182,"sequenceIndex":251},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.434591715104045,"sequenceIndex":126},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.488978484563866,"sequenceIndex":253},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.8524708371262606,"sequenceIndex":127},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.6198538172532597,"sequenceIndex":293},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.645775962149425,"sequenceIndex":509}],"sampleSize":256,"lambda":3.90625E-4,"random":{},"entriesSeen":512},"tree":{"storeSequenceIndexesEnabled":false,"centerOfMassEnabled":false,"random":{}}},{"sampler":{"weightedSamples":[{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.546514687455079,"sequenceIndex":2},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5493953868808967,"sequenceIndex":422},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.594740298179645,"sequenceIndex":342},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5755864625455219,"sequenceIndex":326},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5551490213157744,"sequenceIndex":365},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6247831341717176,"sequenceIndex":268},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.602548456664254,"sequenceIndex":58},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5888682257986289,"sequenceIndex":140},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6006216651860541,"sequenceIndex":38},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6212225856230348,"sequenceIndex":294},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5577107661138884,"sequenceIndex":395},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6874523258216996,"sequenceIndex":397},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6515123605939124,"sequenceIndex":217},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6302178818481434,"sequenceIndex":6},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6256481196282556,"sequenceIndex":240},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6109760181372657,"sequenceIndex":495},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6064243057536036,"sequenceIndex":139},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.61116374415964,"sequenceIndex":363},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.853218560063389,"sequenceIndex":432},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7171450034414271,"sequenceIndex":41},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6549019415674112,"sequenceIndex":399},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7058575745185988,"sequenceIndex":182},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5690885324228165,"sequenceIndex":46},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7101926471878427,"sequenceIndex":97},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7425208847203907,"sequenceIndex":100},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7644127471506131,"sequenceIndex":330},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6666871463432955,"sequenceIndex":358},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0523754765865179,"sequenceIndex":506},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7784214115771092,"sequenceIndex":118},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6708835792300155,"sequenceIndex":423},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6659975969588943,"sequenceIndex":297},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.667363370333931,"sequenceIndex":510},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7744382184009259,"sequenceIndex":376},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7388512863572764,"sequenceIndex":69},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7501698932673961,"sequenceIndex":142},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6850120283420686,"sequenceIndex":9},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7896105691533823,"sequenceIndex":374},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9619530018078013,"sequenceIndex":272},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8652055849459257,"sequenceIndex":369},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7181616836260112,"sequenceIndex":161},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0558601059910844,"sequenceIndex":427},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8655124707500794,"sequenceIndex":168},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7942094173533268,"sequenceIndex":413},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1117076228144251,"sequenceIndex":379},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7749782045580909,"sequenceIndex":183},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7585673409650232,"sequenceIndex":184},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6718854221347226,"sequenceIndex":316},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7645603680359028,"sequenceIndex":314},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0711277554057612,"sequenceIndex":340},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3751086584822245,"sequenceIndex":472},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9574437972498357,"sequenceIndex":102},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8163762141912689,"sequenceIndex":352},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1259883079203419,"sequenceIndex":329},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0484523337728318,"sequenceIndex":408},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7080348753604414,"sequenceIndex":259},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.616729092000196,"sequenceIndex":224},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.268946292725009,"sequenceIndex":231},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2316386362759324,"sequenceIndex":14},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7901116398052825,"sequenceIndex":59},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7195352815958922,"sequenceIndex":424},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7754731490747407,"sequenceIndex":353},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7687996724750551,"sequenceIndex":251},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7166257190400679,"sequenceIndex":318},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6688542966957889,"sequenceIndex":500},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.296732367816131,"sequenceIndex":65},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9908954661789855,"sequenceIndex":487},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6529032293678754,"sequenceIndex":350},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0992105310972446,"sequenceIndex":136},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1805254969294006,"sequenceIndex":138},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8700950954339267,"sequenceIndex":474},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8132157950396584,"sequenceIndex":456},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2070088955400946,"sequenceIndex":439},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.298195527224425,"sequenceIndex":73},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0405158332785072,"sequenceIndex":418},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1841538655359918,"sequenceIndex":75},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0236036157205712,"sequenceIndex":381},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0946161746471206,"sequenceIndex":505},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7674524331726587,"sequenceIndex":430},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9308099705866033,"sequenceIndex":473},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1897321289425,"sequenceIndex":337},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9709880940838252,"sequenceIndex":162},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6211422509777917,"sequenceIndex":165},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0759813465525818,"sequenceIndex":82},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9048873864169368,"sequenceIndex":85},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8729537814791762,"sequenceIndex":171},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.741900001964695,"sequenceIndex":172},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6616683311884552,"sequenceIndex":175},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3195231501988407,"sequenceIndex":177},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1919184727537253,"sequenceIndex":298},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1133090918402184,"sequenceIndex":22},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1638009891821002,"sequenceIndex":279},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9430004743599414,"sequenceIndex":496},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5357303347963494,"sequenceIndex":470},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7318981741013121,"sequenceIndex":333},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9070808771662214,"sequenceIndex":190},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3098950074137108,"sequenceIndex":378},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8134048830326748,"sequenceIndex":48},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.0820441877659657,"sequenceIndex":98},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.109292777909107,"sequenceIndex":49},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.601295992783001,"sequenceIndex":200},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5750238449663463,"sequenceIndex":380},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2799125208023305,"sequenceIndex":205},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.376297436305193,"sequenceIndex":475},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6698659152871704,"sequenceIndex":357},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1899410365596936,"sequenceIndex":335},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.182162676386752,"sequenceIndex":53},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4809878377898238,"sequenceIndex":214},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6514936120876764,"sequenceIndex":451},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3883975797248966,"sequenceIndex":27},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.950375325288186,"sequenceIndex":221},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8163928713501847,"sequenceIndex":110},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.6171628660572512,"sequenceIndex":56},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.1935441037317327,"sequenceIndex":349},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9401876892246928,"sequenceIndex":28},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3334209555728371,"sequenceIndex":269},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2688884826350795,"sequenceIndex":116},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.5179652407622246,"sequenceIndex":266},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.887055575074267,"sequenceIndex":387},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9161114654959076,"sequenceIndex":309},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.117713529948815,"sequenceIndex":241},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9045332868516583,"sequenceIndex":355},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8496226464808059,"sequenceIndex":356},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3254444978364317,"sequenceIndex":414},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8036242725018521,"sequenceIndex":30},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.027838413350464,"sequenceIndex":410},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0533163239936807,"sequenceIndex":382},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.258649441242071,"sequenceIndex":403},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6738153635402229,"sequenceIndex":373},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.3662014647838454,"sequenceIndex":450},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3015088308960794,"sequenceIndex":278},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6055360783794448,"sequenceIndex":131},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.1200182472885407,"sequenceIndex":66},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1315024723714007,"sequenceIndex":313},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.310900605078839,"sequenceIndex":421},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.922266742089911,"sequenceIndex":260},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.290392132148596,"sequenceIndex":68},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3026409578717815,"sequenceIndex":137},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7332542316669404,"sequenceIndex":509},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.623308866819355,"sequenceIndex":362},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.692463144941148,"sequenceIndex":70},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8177755294923728,"sequenceIndex":35},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-5.284819477349927,"sequenceIndex":71},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9976563546278912,"sequenceIndex":143},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.2404282941249174,"sequenceIndex":72},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2166376533968482,"sequenceIndex":273},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.2543521705355785,"sequenceIndex":296},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.108734857978181,"sequenceIndex":147},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1270742933250204,"sequenceIndex":312},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.109696126498351,"sequenceIndex":375},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.3809161069567337,"sequenceIndex":420},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.502396448776844,"sequenceIndex":371},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2967939615748265,"sequenceIndex":76},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.0901609766204663,"sequenceIndex":284},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4891669222199457,"sequenceIndex":480},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3098178094968707,"sequenceIndex":155},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.100311077877881,"sequenceIndex":78},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.5845105163752535,"sequenceIndex":447},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2466737993554853,"sequenceIndex":468},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.3816785615885396,"sequenceIndex":396},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.584979692101912,"sequenceIndex":10},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.1041665704394794,"sequenceIndex":458},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9908872272462662,"sequenceIndex":81},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.58332946447074,"sequenceIndex":270},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.1637947984856245,"sequenceIndex":164},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6351094879517971,"sequenceIndex":40},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7117996688464163,"sequenceIndex":8},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2952414303002233,"sequenceIndex":167},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.1786802391136257,"sequenceIndex":84},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.092965912660855,"sequenceIndex":169},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.182124047075843,"sequenceIndex":170},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2916314488957847,"sequenceIndex":21},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.8767260158941825,"sequenceIndex":334},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-5.350849697635394,"sequenceIndex":310},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.75803134530283,"sequenceIndex":87},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.4615233540588037,"sequenceIndex":174},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.838347374601918,"sequenceIndex":11},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.433286567076634,"sequenceIndex":367},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.642045048238077,"sequenceIndex":89},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.737910993718098,"sequenceIndex":178},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.383213625617188,"sequenceIndex":320},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.007966552058207,"sequenceIndex":181},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.590656079957613,"sequenceIndex":400},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.283077332080044,"sequenceIndex":366},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7864275795786797,"sequenceIndex":23},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6642012677308655,"sequenceIndex":185},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6354980900903233,"sequenceIndex":93},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7435624363720126,"sequenceIndex":359},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.947840482303043,"sequenceIndex":47},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.411521869857225,"sequenceIndex":491},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5308390163216696,"sequenceIndex":95},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.346589402772135,"sequenceIndex":261},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.908980770490697,"sequenceIndex":3},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.2319908980595917,"sequenceIndex":466},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6726310263210356,"sequenceIndex":194},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.499445084010276,"sequenceIndex":195},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.1106026655673795,"sequenceIndex":280},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.5716053946625443,"sequenceIndex":271},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.081071244285161,"sequenceIndex":198},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8354104881241216,"sequenceIndex":199},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.0217259938940657,"sequenceIndex":508},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.929248707330805,"sequenceIndex":372},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7235624603424942,"sequenceIndex":202},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.918603690464333,"sequenceIndex":393},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.0324124390493896,"sequenceIndex":204},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.6302240013571274,"sequenceIndex":497},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4661351060533239,"sequenceIndex":103},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4479189058620032,"sequenceIndex":207},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.025128231761602,"sequenceIndex":13},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9847377225488345,"sequenceIndex":449},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3807825660445874,"sequenceIndex":105},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5058488207844578,"sequenceIndex":386},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.154756239799756,"sequenceIndex":106},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.2735333727173384,"sequenceIndex":331},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4955945184401327,"sequenceIndex":107},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9965003804264532,"sequenceIndex":440},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7464628777424005,"sequenceIndex":108},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.1322044125338886,"sequenceIndex":455},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4311285718519062,"sequenceIndex":218},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.0964872767320966,"sequenceIndex":384},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.966949108795893,"sequenceIndex":220},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9215143091137883,"sequenceIndex":55},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.205566827319391,"sequenceIndex":111},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6633849187769538,"sequenceIndex":299},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.0884812446079972,"sequenceIndex":459},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.9192189214744295,"sequenceIndex":315},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.3060819462318887,"sequenceIndex":226},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.240315936720175,"sequenceIndex":354},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.4066754616069064,"sequenceIndex":114},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.203283372069934,"sequenceIndex":229},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.406030050842845,"sequenceIndex":115},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.174936532394174,"sequenceIndex":230},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.699969679622575,"sequenceIndex":293},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.157446150753026,"sequenceIndex":233},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-11.054834533413633,"sequenceIndex":117},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.5947003443472,"sequenceIndex":288},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.667075791488838,"sequenceIndex":236},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3525394708280445,"sequenceIndex":467},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.8193224303775875,"sequenceIndex":407},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3509590811193948,"sequenceIndex":295},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.560083583746113,"sequenceIndex":60},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.1294293828993873,"sequenceIndex":390},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1827149370862389,"sequenceIndex":242},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0228984783028274,"sequenceIndex":121},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.2523186822127714,"sequenceIndex":15},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.21510027519209,"sequenceIndex":123},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.804702272657793,"sequenceIndex":122},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5952725686009739,"sequenceIndex":247},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0161786934540706,"sequenceIndex":248},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.384447358014826,"sequenceIndex":389},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.529303645492517,"sequenceIndex":250},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.028637455687704,"sequenceIndex":394},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1071895842852115,"sequenceIndex":126},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.049382516758875,"sequenceIndex":253},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5956121352562196,"sequenceIndex":267},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.2801968996017363,"sequenceIndex":258},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7584554061749608,"sequenceIndex":130}],"sampleSize":256,"lambda":3.90625E-4,"random":{},"entriesSeen":512},"tree":{"storeSequenceIndexesEnabled":false,"centerOfMassEnabled":false,"random":{}}},{"sampler":{"weightedSamples":[{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.4245402545142029,"sequenceIndex":175},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.42761761021691325,"sequenceIndex":423},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.4373634448673042,"sequenceIndex":233},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.4495743196763768,"sequenceIndex":502},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.45590571179003936,"sequenceIndex":391},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.46616419539728665,"sequenceIndex":208},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.4464926283336448,"sequenceIndex":121},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.45209322574352695,"sequenceIndex":500},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.4669361887101153,"sequenceIndex":267},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5241327815696623,"sequenceIndex":160},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5803080210452414,"sequenceIndex":89},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.4916301355822429,"sequenceIndex":281},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.4691963267990482,"sequenceIndex":54},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.523205116750115,"sequenceIndex":3},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5273708652853656,"sequenceIndex":241},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5530740905459745,"sequenceIndex":507},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5665267850092313,"sequenceIndex":414},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5009817150920671,"sequenceIndex":285},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.4960466704440313,"sequenceIndex":76},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5252321157224729,"sequenceIndex":161},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7515175492242769,"sequenceIndex":365},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.749144996203222,"sequenceIndex":91},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6968148301726946,"sequenceIndex":185},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5165033035196044,"sequenceIndex":194},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5328128023251664,"sequenceIndex":129},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7297163116448433,"sequenceIndex":211},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5508389154629085,"sequenceIndex":6},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5559666558299698,"sequenceIndex":409},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5682459603459526,"sequenceIndex":237},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6004991012685099,"sequenceIndex":247},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6405615880969655,"sequenceIndex":249},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5585147789498048,"sequenceIndex":134},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.887901125782575,"sequenceIndex":464},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7678877798696764,"sequenceIndex":368},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6554543618797759,"sequenceIndex":141},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6104269142781987,"sequenceIndex":405},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7525767362138371,"sequenceIndex":151},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5859687745690954,"sequenceIndex":152},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8841019545147893,"sequenceIndex":483},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6218492583101923,"sequenceIndex":163},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5649462446073674,"sequenceIndex":366},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2798713245504985,"sequenceIndex":389},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9762414169305106,"sequenceIndex":488},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7549030034280073,"sequenceIndex":462},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7653679126249846,"sequenceIndex":90},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7058615329157159,"sequenceIndex":187},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9680374700381943,"sequenceIndex":378},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.553907783220941,"sequenceIndex":195},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5378256466231421,"sequenceIndex":199},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2075444609303234,"sequenceIndex":203},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6925221401085385,"sequenceIndex":275},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7409216096262119,"sequenceIndex":26},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9849763381526706,"sequenceIndex":356},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6908664660508264,"sequenceIndex":219},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5523863829048833,"sequenceIndex":279},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6345579272558313,"sequenceIndex":272},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8210636635303337,"sequenceIndex":333},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2131104451597734,"sequenceIndex":392},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6534772490840998,"sequenceIndex":118},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7288201347456673,"sequenceIndex":15},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7097105325877606,"sequenceIndex":425},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6732033389831533,"sequenceIndex":428},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6841024925377285,"sequenceIndex":63},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6178847375456501,"sequenceIndex":491},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7231501684970841,"sequenceIndex":1},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4505749950358822,"sequenceIndex":33},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9136828416241283,"sequenceIndex":422},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3937300291514323,"sequenceIndex":68},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0929593545360703,"sequenceIndex":137},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.518009311589723,"sequenceIndex":396},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9592686336597569,"sequenceIndex":367},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4251299717549892,"sequenceIndex":18},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7673674219976777,"sequenceIndex":323},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1084933157912291,"sequenceIndex":75},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1151074071683722,"sequenceIndex":74},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.950596740718165,"sequenceIndex":39},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.869405092578305,"sequenceIndex":375},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3648147883117625,"sequenceIndex":9},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4027971412979447,"sequenceIndex":79},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1745345741465176,"sequenceIndex":431},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8759232711189773,"sequenceIndex":487},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1000210397778052,"sequenceIndex":20},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7688382852566829,"sequenceIndex":300},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6893181658499632,"sequenceIndex":451},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.2691529230877903,"sequenceIndex":458},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1789109350428453,"sequenceIndex":173},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4653150799614425,"sequenceIndex":86},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7675068824620144,"sequenceIndex":176},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3916286249459546,"sequenceIndex":442},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9329407585755383,"sequenceIndex":283},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8476904958742433,"sequenceIndex":269},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4468511555025936,"sequenceIndex":413},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8930340793271484,"sequenceIndex":46},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.594486278620267,"sequenceIndex":47},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5129083378238206,"sequenceIndex":95},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1388447912006976,"sequenceIndex":49},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7234488711146039,"sequenceIndex":321},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1064178397635143,"sequenceIndex":197},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3925347558438232,"sequenceIndex":463},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6726315553591438,"sequenceIndex":201},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2198873305571152,"sequenceIndex":202},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9898812769610961,"sequenceIndex":466},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1674500080055044,"sequenceIndex":360},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2217909202767732,"sequenceIndex":104},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8688962592884122,"sequenceIndex":210},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0327755019879865,"sequenceIndex":262},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0436243476783524,"sequenceIndex":106},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2377213866287595,"sequenceIndex":216},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6819748283088574,"sequenceIndex":109},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1524667028325366,"sequenceIndex":221},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7451777929085425,"sequenceIndex":111},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.18138505169585,"sequenceIndex":341},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.772280916820836,"sequenceIndex":504},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0937704400816148,"sequenceIndex":57},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7766185077091057,"sequenceIndex":353},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.423824792974761,"sequenceIndex":430},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8796212039840703,"sequenceIndex":117},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8603942100355908,"sequenceIndex":59},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2657802917793508,"sequenceIndex":479},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6471529892104295,"sequenceIndex":120},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1493895054746461,"sequenceIndex":265},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.972252084138383,"sequenceIndex":277},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8657424268555746,"sequenceIndex":388},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9653830896800304,"sequenceIndex":407},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7945459219452196,"sequenceIndex":287},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2585912941044235,"sequenceIndex":252},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4741677473945412,"sequenceIndex":346},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6700797979107271,"sequenceIndex":489},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2221537608135247,"sequenceIndex":415},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8131488857713143,"sequenceIndex":130},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.977552758637854,"sequenceIndex":372},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.784208655497571,"sequenceIndex":132},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6335388010764844,"sequenceIndex":133},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.9357948604608253,"sequenceIndex":490},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9857706951051306,"sequenceIndex":135},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.670839835607138,"sequenceIndex":136},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7384952607202782,"sequenceIndex":34},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6643136513233932,"sequenceIndex":16},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.555243573977445,"sequenceIndex":419},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8304865578862697,"sequenceIndex":35},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.928351217548292,"sequenceIndex":465},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5351167313673615,"sequenceIndex":71},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.392409775236867,"sequenceIndex":384},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.320135827102347,"sequenceIndex":495},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.62527592503415,"sequenceIndex":380},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8492441599458225,"sequenceIndex":426},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3191201896086555,"sequenceIndex":263},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.7780319647350975,"sequenceIndex":37},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2233807680029065,"sequenceIndex":291},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.6212821405911875,"sequenceIndex":150},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9073880224135007,"sequenceIndex":318},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-5.592672369649087,"sequenceIndex":38},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.565087441575272,"sequenceIndex":447},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9595017385165223,"sequenceIndex":77},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.154994893606544,"sequenceIndex":155},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.167128341342926,"sequenceIndex":340},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.717771163048333,"sequenceIndex":157},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.1701315521495332,"sequenceIndex":309},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.625151402757812,"sequenceIndex":299},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.7756222546750946,"sequenceIndex":80},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2715480688895937,"sequenceIndex":498},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.2758130801013707,"sequenceIndex":10},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8970269604295482,"sequenceIndex":162},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.3404625577802394,"sequenceIndex":164},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.862038022022778,"sequenceIndex":400},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.1416428862247154,"sequenceIndex":166},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8166928428382328,"sequenceIndex":83},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.0403361111363636,"sequenceIndex":21},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7130367109243325,"sequenceIndex":381},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.038276951750943,"sequenceIndex":85},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.653986072998711,"sequenceIndex":411},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.322526511185925,"sequenceIndex":172},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.858946130891659,"sequenceIndex":43},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9193708012368755,"sequenceIndex":461},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.5460987557844073,"sequenceIndex":271},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.986296030058569,"sequenceIndex":22},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4435392319329683,"sequenceIndex":445},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.845224295180476,"sequenceIndex":88},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6060932289012817,"sequenceIndex":178},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.5459099189089582,"sequenceIndex":45},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.7100116264869616,"sequenceIndex":397},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5441143156772497,"sequenceIndex":330},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1378815001062783,"sequenceIndex":494},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.5599389228367686,"sequenceIndex":184},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.802016150342857,"sequenceIndex":92},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.731336483363755,"sequenceIndex":484},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.084694795731381,"sequenceIndex":328},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.87369013798577,"sequenceIndex":457},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.5073297785004303,"sequenceIndex":292},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.559894882224792,"sequenceIndex":190},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.857657828238342,"sequenceIndex":191},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-6.257423883698831,"sequenceIndex":192},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.293954756547118,"sequenceIndex":24},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.0446876575951727,"sequenceIndex":96},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.099499424793411,"sequenceIndex":482},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6523469228000347,"sequenceIndex":48},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.7698608671132714,"sequenceIndex":301},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-5.4300133037142775,"sequenceIndex":99},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9517640895835486,"sequenceIndex":198},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.238107464918438,"sequenceIndex":100},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.758578189839916,"sequenceIndex":8},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2657213520641788,"sequenceIndex":12},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3436358061770513,"sequenceIndex":310},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.32501672374607,"sequenceIndex":204},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.646893054225647,"sequenceIndex":268},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.338877130674424,"sequenceIndex":418},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9602062481579434,"sequenceIndex":477},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7211662993172872,"sequenceIndex":475},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.504755380002727,"sequenceIndex":307},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.019983291292974,"sequenceIndex":105},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.1467700387788384,"sequenceIndex":444},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3662193100790203,"sequenceIndex":53},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.2671596492430504,"sequenceIndex":331},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-6.27340578839354,"sequenceIndex":214},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5995009860196907,"sequenceIndex":215},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.0250916892773185,"sequenceIndex":408},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.70868804619341,"sequenceIndex":327},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.956039653769438,"sequenceIndex":493},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.750399218756337,"sequenceIndex":282},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.317776728355683,"sequenceIndex":110},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3751170792647693,"sequenceIndex":220},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7650460661034912,"sequenceIndex":222},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.1140648909477573,"sequenceIndex":448},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.81413009270984,"sequenceIndex":56},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-7.942979785444234,"sequenceIndex":459},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.042700970984803,"sequenceIndex":226},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9214709758734123,"sequenceIndex":112},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.433588388350291,"sequenceIndex":228},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5015748582906563,"sequenceIndex":229},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.982097844450168,"sequenceIndex":230},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.163547091320041,"sequenceIndex":347},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.696328845753428,"sequenceIndex":232},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.242785588367965,"sequenceIndex":116},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.091416554200782,"sequenceIndex":449},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.9063771126226428,"sequenceIndex":355},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.630632190286712,"sequenceIndex":377},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.171134638793058,"sequenceIndex":335},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3970228203707737,"sequenceIndex":315},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3017518081950996,"sequenceIndex":239},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.3000942920911585,"sequenceIndex":240},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.032284816991065,"sequenceIndex":433},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2926280296670098,"sequenceIndex":278},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.309444958194634,"sequenceIndex":469},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.789602446670803,"sequenceIndex":305},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.666994533826686,"sequenceIndex":342},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.9710011757769252,"sequenceIndex":246},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1972024644502917,"sequenceIndex":506},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.9512788279573905,"sequenceIndex":290},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0529127166255887,"sequenceIndex":435},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.864089218835444,"sequenceIndex":250},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.7940982966929373,"sequenceIndex":125},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2822834361810114,"sequenceIndex":126},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.519858515885342,"sequenceIndex":364},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.596099928314291,"sequenceIndex":429},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.0281874145810583,"sequenceIndex":255},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0846811766574522,"sequenceIndex":512}],"sampleSize":256,"lambda":3.90625E-4,"random":{},"entriesSeen":512},"tree":{"storeSequenceIndexesEnabled":false,"centerOfMassEnabled":false,"random":{}}},{"sampler":{"weightedSamples":[{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.42577157128223564,"sequenceIndex":493},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.43098314785390923,"sequenceIndex":383},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.4549389503032981,"sequenceIndex":278},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.4459601670612897,"sequenceIndex":486},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.44403351653395323,"sequenceIndex":10},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.48733934608621066,"sequenceIndex":204},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5423646722484142,"sequenceIndex":271},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.4499620416675082,"sequenceIndex":474},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.4466321523087702,"sequenceIndex":78},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.45547253044592517,"sequenceIndex":173},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.44413372032678755,"sequenceIndex":413},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.531296368194988,"sequenceIndex":97},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5699007003516177,"sequenceIndex":409},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5507515223528424,"sequenceIndex":269},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6000968814686976,"sequenceIndex":247},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.4633774987109342,"sequenceIndex":485},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.4503611164637571,"sequenceIndex":283},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6364943623430289,"sequenceIndex":144},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.589155013016897,"sequenceIndex":352},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6047528256340658,"sequenceIndex":306},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.4628017436149688,"sequenceIndex":168},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.46248434500014546,"sequenceIndex":408},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.596390685063324,"sequenceIndex":457},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5924213556441269,"sequenceIndex":490},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6440469807203737,"sequenceIndex":102},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5871090377082834,"sequenceIndex":208},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.631409107157898,"sequenceIndex":279},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5692539988827584,"sequenceIndex":302},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6487595081670657,"sequenceIndex":59},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6485298998338335,"sequenceIndex":123},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7231674227419639,"sequenceIndex":60},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5080289939319849,"sequenceIndex":449},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6464945735356906,"sequenceIndex":390},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.4699727935934105,"sequenceIndex":406},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5154403132791351,"sequenceIndex":142},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8083941910529774,"sequenceIndex":72},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6493948841746351,"sequenceIndex":354},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7756615490662808,"sequenceIndex":327},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6052094088124635,"sequenceIndex":382},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6433180390926775,"sequenceIndex":495},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6359818976340655,"sequenceIndex":482},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.48174969334204853,"sequenceIndex":21},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1768058882756078,"sequenceIndex":415},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.969194663850387,"sequenceIndex":88},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8975059845552877,"sequenceIndex":341},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.763038594597804,"sequenceIndex":185},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6407429914442662,"sequenceIndex":459},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8500012241484614,"sequenceIndex":48},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6132492323426534,"sequenceIndex":451},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8264782059608461,"sequenceIndex":25},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7027890944245433,"sequenceIndex":401},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5886533873585007,"sequenceIndex":273},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6662293925433723,"sequenceIndex":330},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0368861072552191,"sequenceIndex":216},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.124673338918852,"sequenceIndex":454},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6472796776139346,"sequenceIndex":489},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6119362059092694,"sequenceIndex":113},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6821665751495988,"sequenceIndex":349},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.016645531901621,"sequenceIndex":455},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6635265316109871,"sequenceIndex":243},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9358871782398848,"sequenceIndex":477},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7871303976593977,"sequenceIndex":366},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8409709016076512,"sequenceIndex":127},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7477282822280064,"sequenceIndex":499},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9777132335860164,"sequenceIndex":397},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3347930910309416,"sequenceIndex":8},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1257669388215938,"sequenceIndex":355},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9866502773551973,"sequenceIndex":34},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7124516552740541,"sequenceIndex":17},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.976701962448851,"sequenceIndex":263},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5422575828320445,"sequenceIndex":143},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8270964357250807,"sequenceIndex":288},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.51334946474567,"sequenceIndex":147},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8314475183483154,"sequenceIndex":265},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6822608187364414,"sequenceIndex":359},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8542844695788023,"sequenceIndex":453},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7793258911105261,"sequenceIndex":377},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6451395599636623,"sequenceIndex":156},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7585732810081675,"sequenceIndex":159},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.385950425661054,"sequenceIndex":161},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.194040289038836,"sequenceIndex":163},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8613928970163192,"sequenceIndex":423},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9911097874115143,"sequenceIndex":82},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1182540883424485,"sequenceIndex":274},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5871155772733536,"sequenceIndex":171},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9660240649075291,"sequenceIndex":429},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1819057178454313,"sequenceIndex":437},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.520902556387541,"sequenceIndex":315},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9992468686747257,"sequenceIndex":496},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4711047081860302,"sequenceIndex":494},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.209128389937666,"sequenceIndex":337},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0582163118947967,"sequenceIndex":23},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9545793753322744,"sequenceIndex":93},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7708691759557037,"sequenceIndex":46},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9971357841852914,"sequenceIndex":95},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2494400617001664,"sequenceIndex":192},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9992117825468564,"sequenceIndex":3},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.961929038163236,"sequenceIndex":410},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9982400582225045,"sequenceIndex":300},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5723859200470434,"sequenceIndex":50},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.454288636198124,"sequenceIndex":202},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.402818674803514,"sequenceIndex":473},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.190786790109033,"sequenceIndex":207},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.960146572910703,"sequenceIndex":104},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7402869350925158,"sequenceIndex":488},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7098810990398742,"sequenceIndex":280},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9159099932854018,"sequenceIndex":215},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4602192385109953,"sequenceIndex":27},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1515022451853996,"sequenceIndex":54},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6521909581100376,"sequenceIndex":55},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.286994332561126,"sequenceIndex":110},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4806114963353956,"sequenceIndex":225},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8594349982715559,"sequenceIndex":379},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8065530524561866,"sequenceIndex":475},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7259631145388034,"sequenceIndex":384},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9051347841974696,"sequenceIndex":403},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5614718373500256,"sequenceIndex":116},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0344494810106935,"sequenceIndex":58},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3943813388566169,"sequenceIndex":261},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.62413958987453,"sequenceIndex":333},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7207083876105156,"sequenceIndex":347},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.02100554162771,"sequenceIndex":389},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.235847384567449,"sequenceIndex":407},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.263628781324693,"sequenceIndex":388},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2563996418728627,"sequenceIndex":250},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3324853611413736,"sequenceIndex":253},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4212096372833167,"sequenceIndex":255},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8301069129201664,"sequenceIndex":502},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9925416455668638,"sequenceIndex":393},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.191437998698116,"sequenceIndex":465},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.05342874168283,"sequenceIndex":295},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8091870732673476,"sequenceIndex":132},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.32199109101835,"sequenceIndex":336},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6202395157126288,"sequenceIndex":395},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8883329722194666,"sequenceIndex":320},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0999961935539864,"sequenceIndex":136},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1482671199341041,"sequenceIndex":404},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8384452981332016,"sequenceIndex":466},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8786318079321955,"sequenceIndex":367},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.1889418408619292,"sequenceIndex":35},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.7016394982628293,"sequenceIndex":140},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2999359868996447,"sequenceIndex":325},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2585111739340107,"sequenceIndex":362},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.870039699252982,"sequenceIndex":424},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8580554124134714,"sequenceIndex":441},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.099397878403296,"sequenceIndex":146},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.697393578604065,"sequenceIndex":350},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9810440416772627,"sequenceIndex":37},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.240177346841719,"sequenceIndex":149},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.9970815438635987,"sequenceIndex":75},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1572082272247584,"sequenceIndex":412},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3137881092039077,"sequenceIndex":76},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1161979765385062,"sequenceIndex":153},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9140105880697458,"sequenceIndex":77},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8624108341178605,"sequenceIndex":155},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8906415108766663,"sequenceIndex":39},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8819881715942999,"sequenceIndex":308},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.397086719419744,"sequenceIndex":79},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0700765722282741,"sequenceIndex":257},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.346947777795787,"sequenceIndex":80},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5361853152754252,"sequenceIndex":160},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.2289129230122025,"sequenceIndex":414},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.3061566852610147,"sequenceIndex":498},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-6.9695978489296895,"sequenceIndex":41},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.188280478455236,"sequenceIndex":164},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.38681041790401,"sequenceIndex":456},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7461879997223926,"sequenceIndex":418},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8510528340781385,"sequenceIndex":503},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2245500000294915,"sequenceIndex":270},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.440966152217052,"sequenceIndex":85},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.4560881963821783,"sequenceIndex":170},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.14669780158999,"sequenceIndex":172},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.1074835692123126,"sequenceIndex":357},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.4283932938511072,"sequenceIndex":174},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3362284733754446,"sequenceIndex":266},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.831085775126966,"sequenceIndex":44},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.075430906357838,"sequenceIndex":405},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7290266751770298,"sequenceIndex":259},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.6573581385435436,"sequenceIndex":179},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.045149078414731,"sequenceIndex":90},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.576356872129711,"sequenceIndex":464},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.344669530083995,"sequenceIndex":91},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.496271950652654,"sequenceIndex":183},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.664197548839216,"sequenceIndex":461},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-5.922795777705017,"sequenceIndex":378},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.714744285543127,"sequenceIndex":458},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1903426126500902,"sequenceIndex":260},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0890895212982534,"sequenceIndex":94},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.937311353150331,"sequenceIndex":188},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9382892093110855,"sequenceIndex":322},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1568837632641753,"sequenceIndex":292},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.044601739057143,"sequenceIndex":96},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.930569158236135,"sequenceIndex":440},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1970353805082612,"sequenceIndex":433},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.809445433797473,"sequenceIndex":328},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.469686231392909,"sequenceIndex":49},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.0224763089709756,"sequenceIndex":197},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.2984603398110295,"sequenceIndex":98},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4218184140685362,"sequenceIndex":296},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.741377500710625,"sequenceIndex":301},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.7941382027159385,"sequenceIndex":201},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.629807623763654,"sequenceIndex":358},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-5.439311850102927,"sequenceIndex":203},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.0435899715528874,"sequenceIndex":51},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.6671180554219927,"sequenceIndex":205},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.857691865884579,"sequenceIndex":103},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.582329102589408,"sequenceIndex":206},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4133937000282926,"sequenceIndex":13},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3466766436824795,"sequenceIndex":331},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9605580739294703,"sequenceIndex":105},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6964482449937461,"sequenceIndex":211},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.4488193924972266,"sequenceIndex":106},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8245002247740936,"sequenceIndex":277},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3755173238634033,"sequenceIndex":26},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2242270766685968,"sequenceIndex":214},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.686841350570513,"sequenceIndex":442},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5162705531647607,"sequenceIndex":217},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1694503952764876,"sequenceIndex":319},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.877524815967249,"sequenceIndex":219},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.485829885957578,"sequenceIndex":220},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.4502072840161757,"sequenceIndex":462},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.427133849658036,"sequenceIndex":222},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.5762639401869625,"sequenceIndex":368},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.1667770307463403,"sequenceIndex":56},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9165244764465832,"sequenceIndex":7},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.071999444143728,"sequenceIndex":112},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9880547330233453,"sequenceIndex":402},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.298828350832225,"sequenceIndex":57},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9862911667749998,"sequenceIndex":228},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.002904827649652,"sequenceIndex":115},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.3980754245368487,"sequenceIndex":431},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.751822511335502,"sequenceIndex":28},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7938813317048368,"sequenceIndex":396},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.0579482136885257,"sequenceIndex":234},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.652110583578865,"sequenceIndex":479},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1800136309782934,"sequenceIndex":118},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0434168412348401,"sequenceIndex":444},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.1118228935325507,"sequenceIndex":119},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.1365356875585606,"sequenceIndex":294},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.356186776257128,"sequenceIndex":30},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.052797906123566,"sequenceIndex":240},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7232116196967049,"sequenceIndex":61},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.4427481821178767,"sequenceIndex":421},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.0829010349699466,"sequenceIndex":15},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.7654944358077582,"sequenceIndex":375},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.792372084934134,"sequenceIndex":445},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2977326942973353,"sequenceIndex":400},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.0972354595704443,"sequenceIndex":31},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.3103992772203066,"sequenceIndex":32},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.366778179819457,"sequenceIndex":436},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.918464168891595,"sequenceIndex":392},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.451136752261278,"sequenceIndex":63},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7580742523050026,"sequenceIndex":252},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.6182259786017603,"sequenceIndex":254},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8259912979360844,"sequenceIndex":275},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8215019854963914,"sequenceIndex":505}],"sampleSize":256,"lambda":3.90625E-4,"random":{},"entriesSeen":512},"tree":{"storeSequenceIndexesEnabled":false,"centerOfMassEnabled":false,"random":{}}},{"sampler":{"weightedSamples":[{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5230277624172739,"sequenceIndex":484},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.532819274920722,"sequenceIndex":158},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5236619573318523,"sequenceIndex":238},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5552797164243609,"sequenceIndex":141},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5360622551108103,"sequenceIndex":164},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5368494745575265,"sequenceIndex":204},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5416998574087696,"sequenceIndex":311},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5916532135422167,"sequenceIndex":142},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5720249185252707,"sequenceIndex":146},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.57764367467834,"sequenceIndex":271},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6122916306595552,"sequenceIndex":93},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5936276514761349,"sequenceIndex":102},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5652005249423813,"sequenceIndex":419},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6302658286263276,"sequenceIndex":377},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6250026397366142,"sequenceIndex":309},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6486157072338647,"sequenceIndex":495},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7366604913805621,"sequenceIndex":143},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7306652497372076,"sequenceIndex":36},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6144577393282542,"sequenceIndex":152},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5922468049685518,"sequenceIndex":83},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8195574059301386,"sequenceIndex":169},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7482404469328932,"sequenceIndex":369},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.676872758708282,"sequenceIndex":46},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8160809579822433,"sequenceIndex":195},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7228117460127872,"sequenceIndex":207},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5721888206165145,"sequenceIndex":288},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6639459644443285,"sequenceIndex":108},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8733764741062298,"sequenceIndex":115},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.63551726045542,"sequenceIndex":118},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.651871199204806,"sequenceIndex":293},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6591515221165627,"sequenceIndex":252},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7340042325547169,"sequenceIndex":456},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.661376669220937,"sequenceIndex":67},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8844969294034866,"sequenceIndex":136},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9752107929081006,"sequenceIndex":497},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0463644148550884,"sequenceIndex":147},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9378695757296456,"sequenceIndex":150},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9438712648188142,"sequenceIndex":76},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.768307539098603,"sequenceIndex":17},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7156816241625581,"sequenceIndex":162},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6150822328044925,"sequenceIndex":4},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8360312842905221,"sequenceIndex":84},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9129252648441304,"sequenceIndex":258},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3362804959479064,"sequenceIndex":88},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8237708213829863,"sequenceIndex":45},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8192702062066931,"sequenceIndex":453},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.720960594301267,"sequenceIndex":190},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6401518637325812,"sequenceIndex":12},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8882498092725748,"sequenceIndex":297},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7666995718399776,"sequenceIndex":200},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8821014136066245,"sequenceIndex":327},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1119854823773179,"sequenceIndex":365},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6257571041815826,"sequenceIndex":347},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0083743949084703,"sequenceIndex":466},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0100021284681542,"sequenceIndex":354},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8965158450224696,"sequenceIndex":406},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9276138276476438,"sequenceIndex":436},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7127699462279998,"sequenceIndex":295},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7108307788005315,"sequenceIndex":325},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9642217769485625,"sequenceIndex":460},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7524208320615376,"sequenceIndex":395},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9340315944036639,"sequenceIndex":292},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8568906814995019,"sequenceIndex":63},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8960629145692631,"sequenceIndex":502},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5376098833283576,"sequenceIndex":9},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.372310975590303,"sequenceIndex":132},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0028967933626265,"sequenceIndex":491},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.868156435862296,"sequenceIndex":423},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8874267969752457,"sequenceIndex":315},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6213603378875576,"sequenceIndex":128},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8632641662729914,"sequenceIndex":509},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.959458988256981,"sequenceIndex":144},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9484483355190763,"sequenceIndex":445},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1538666706565,"sequenceIndex":286},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9887613261533049,"sequenceIndex":465},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3860823574920702,"sequenceIndex":473},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.276541953002777,"sequenceIndex":308},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2963423505445468,"sequenceIndex":389},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0727441916799334,"sequenceIndex":496},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8469539109934414,"sequenceIndex":282},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8833201368066492,"sequenceIndex":410},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8759671177300477,"sequenceIndex":41},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3994684163396922,"sequenceIndex":498},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1473235931720998,"sequenceIndex":168},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.5795028841826073,"sequenceIndex":374},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9161815416919143,"sequenceIndex":86},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2674652748066055,"sequenceIndex":357},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.097567525119564,"sequenceIndex":326},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4618366354068209,"sequenceIndex":446},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.326695031381563,"sequenceIndex":454},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9944224241610572,"sequenceIndex":183},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.200533873023884,"sequenceIndex":185},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9720676426411408,"sequenceIndex":414},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2109876419210357,"sequenceIndex":189},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8194600655718111,"sequenceIndex":47},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7516369956472801,"sequenceIndex":192},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6597077875206028,"sequenceIndex":97},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9514822544235234,"sequenceIndex":196},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0707077694778684,"sequenceIndex":199},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.532611528749292,"sequenceIndex":276},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8489037951364916,"sequenceIndex":101},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0230021614975204,"sequenceIndex":486},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9999831624725194,"sequenceIndex":469},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5643012437777744,"sequenceIndex":104},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.571709771403457,"sequenceIndex":105},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8709516909686861,"sequenceIndex":257},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6319839256673145,"sequenceIndex":323},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0149466673822198,"sequenceIndex":420},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.086065177146683,"sequenceIndex":109},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2842985911277478,"sequenceIndex":110},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0285540990327533,"sequenceIndex":429},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9807876725510254,"sequenceIndex":413},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.191217531716323,"sequenceIndex":14},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.564775313363598,"sequenceIndex":312},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3417542216604805,"sequenceIndex":392},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7311606370838393,"sequenceIndex":116},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8818207583774407,"sequenceIndex":117},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.91891097941388,"sequenceIndex":471},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9425544061268041,"sequenceIndex":239},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2477873141140017,"sequenceIndex":240},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8137895694924129,"sequenceIndex":375},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4019468866594296,"sequenceIndex":245},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.066599955645598,"sequenceIndex":123},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0920361480509755,"sequenceIndex":421},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8917208858651162,"sequenceIndex":125},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.781512536429709,"sequenceIndex":349},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3465909317708407,"sequenceIndex":337},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1340510430834139,"sequenceIndex":507},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.902419662256089,"sequenceIndex":438},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.537062971558999,"sequenceIndex":64},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.323312921755332,"sequenceIndex":131},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.8603164981532965,"sequenceIndex":33},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.203518582809704,"sequenceIndex":472},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8023242380879612,"sequenceIndex":134},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1522064253926085,"sequenceIndex":321},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.2087510826434715,"sequenceIndex":16},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.8673446333163906,"sequenceIndex":352},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.298648773204768,"sequenceIndex":385},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.5386812428343384,"sequenceIndex":8},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.54381548056268,"sequenceIndex":264},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.1574379762180556,"sequenceIndex":399},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.020998384625923,"sequenceIndex":71},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.248911100984731,"sequenceIndex":505},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.324800111336864,"sequenceIndex":1},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.5169484376878497,"sequenceIndex":488},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-5.200969159928418,"sequenceIndex":73},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.2543164209703384,"sequenceIndex":508},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.1229878195864598,"sequenceIndex":37},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.052257225307414,"sequenceIndex":148},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.748149213889352,"sequenceIndex":313},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3606133562601403,"sequenceIndex":265},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.68323934369887,"sequenceIndex":38},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8053923813061532,"sequenceIndex":476},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.4602509555162944,"sequenceIndex":388},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.7406712467606753,"sequenceIndex":501},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.3953762738192794,"sequenceIndex":78},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.9663862151148677,"sequenceIndex":437},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.551141965953222,"sequenceIndex":463},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.5280744891413067,"sequenceIndex":260},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.655146918823977,"sequenceIndex":80},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2400551467439191,"sequenceIndex":20},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.1165709965087025,"sequenceIndex":81},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8092035435460805,"sequenceIndex":281},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9564659668966701,"sequenceIndex":489},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4902296006702263,"sequenceIndex":165},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4078224478445072,"sequenceIndex":427},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9005599586384696,"sequenceIndex":391},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.46005492754107,"sequenceIndex":21},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.995187535397495,"sequenceIndex":364},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.598910273337953,"sequenceIndex":330},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.027831187141695,"sequenceIndex":171},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.8238077419505254,"sequenceIndex":172},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3069365027706186,"sequenceIndex":43},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.4078315993793495,"sequenceIndex":87},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3334796781398686,"sequenceIndex":175},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.3530751213576018,"sequenceIndex":44},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.851623944958543,"sequenceIndex":177},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5539694823366956,"sequenceIndex":433},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-5.560959328204277,"sequenceIndex":280},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.6942811839719623,"sequenceIndex":459},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.66509768678631,"sequenceIndex":381},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.119679947779673,"sequenceIndex":91},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0296009739251488,"sequenceIndex":278},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.691948050368068,"sequenceIndex":184},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.216645712409021,"sequenceIndex":449},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7693809808673988,"sequenceIndex":307},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.742881435673525,"sequenceIndex":262},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.3203849347658396,"sequenceIndex":188},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5993704546088825,"sequenceIndex":94},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.5225032811977077,"sequenceIndex":95},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3903387784708992,"sequenceIndex":191},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.4893976863644105,"sequenceIndex":452},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7856263126804341,"sequenceIndex":193},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.552381219064778,"sequenceIndex":430},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.711380524161448,"sequenceIndex":290},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.4023189645272875,"sequenceIndex":98},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.77850491253371,"sequenceIndex":197},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6843328725897584,"sequenceIndex":332},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.734037600270434,"sequenceIndex":450},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.074356918511944,"sequenceIndex":25},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.047417344459207,"sequenceIndex":367},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6337592085719777,"sequenceIndex":202},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9937013111032216,"sequenceIndex":303},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6321146421444026,"sequenceIndex":439},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0506715605716188,"sequenceIndex":205},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6687446310614598,"sequenceIndex":206},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.04223388966829,"sequenceIndex":317},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.422892570294506,"sequenceIndex":208},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6835139340197853,"sequenceIndex":26},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.8910094086984572,"sequenceIndex":210},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.750901313171083,"sequenceIndex":479},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2071022774683924,"sequenceIndex":366},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7638734911676166,"sequenceIndex":481},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.3993805078329857,"sequenceIndex":451},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.652042676201294,"sequenceIndex":215},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2820699490970742,"sequenceIndex":54},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3591944874653197,"sequenceIndex":424},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7046419320081427,"sequenceIndex":387},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.218728862150945,"sequenceIndex":373},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.548431717183773,"sequenceIndex":55},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.4829199611255293,"sequenceIndex":434},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.9887096392737984,"sequenceIndex":111},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.1866621633032945,"sequenceIndex":222},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.3408192170746536,"sequenceIndex":112},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4591706530240252,"sequenceIndex":462},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2803885587977757,"sequenceIndex":226},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7665084359502405,"sequenceIndex":442},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5939332523486656,"sequenceIndex":57},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.560267083530937,"sequenceIndex":338},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.796778649333592,"sequenceIndex":230},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.528468506770993,"sequenceIndex":259},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.104678557754199,"sequenceIndex":480},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7490634911116831,"sequenceIndex":291},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0995487230563044,"sequenceIndex":256},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2269945167852476,"sequenceIndex":235},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.9607885147997424,"sequenceIndex":503},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.2737741086559313,"sequenceIndex":275},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.5357958122650572,"sequenceIndex":340},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.5657168897235714,"sequenceIndex":426},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.08687587162153,"sequenceIndex":30},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8449740834981572,"sequenceIndex":407},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.8794845379240916,"sequenceIndex":121},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8576247318324046,"sequenceIndex":455},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.668555686806261,"sequenceIndex":122},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7792962867130826,"sequenceIndex":336},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.943445887646523,"sequenceIndex":246},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8711722427128021,"sequenceIndex":247},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3410183858459463,"sequenceIndex":248},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.484210013616401,"sequenceIndex":411},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9827721479926372,"sequenceIndex":418},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.406377952613741,"sequenceIndex":269},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.7719014994607907,"sequenceIndex":371},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.7594121891476306,"sequenceIndex":443},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.6231079449609815,"sequenceIndex":322},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.6915637675990416,"sequenceIndex":255},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.574249656009918,"sequenceIndex":510}],"sampleSize":256,"lambda":3.90625E-4,"random":{},"entriesSeen":512},"tree":{"storeSequenceIndexesEnabled":false,"centerOfMassEnabled":false,"random":{}}},{"sampler":{"weightedSamples":[{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5068634977673558,"sequenceIndex":6},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5249783630202474,"sequenceIndex":282},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5152033415481417,"sequenceIndex":407},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5272038459500563,"sequenceIndex":433},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6001688204671001,"sequenceIndex":410},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5317454177943866,"sequenceIndex":446},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5390384509225771,"sequenceIndex":333},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.534359297387376,"sequenceIndex":507},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5351669704209369,"sequenceIndex":280},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6109078720195577,"sequenceIndex":161},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6210817266876889,"sequenceIndex":265},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5444919182650165,"sequenceIndex":357},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.599228915024357,"sequenceIndex":450},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.606863437074423,"sequenceIndex":237},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5808824402038705,"sequenceIndex":127},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5949150318621946,"sequenceIndex":503},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9629004213386375,"sequenceIndex":263},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7208076163201385,"sequenceIndex":367},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5678830695710431,"sequenceIndex":76},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6631359909504524,"sequenceIndex":416},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7158746846699892,"sequenceIndex":43},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7243292976884375,"sequenceIndex":176},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7729073409588213,"sequenceIndex":94},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5636010557233948,"sequenceIndex":362},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8387837308398401,"sequenceIndex":428},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6512348778369313,"sequenceIndex":353},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.684627632318572,"sequenceIndex":219},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6953237780389272,"sequenceIndex":324},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7118724195755398,"sequenceIndex":380},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5903034036969197,"sequenceIndex":120},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6113515610872363,"sequenceIndex":254},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.603188023556497,"sequenceIndex":511},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9213213082902447,"sequenceIndex":270},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9758009669603028,"sequenceIndex":369},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9673224288424005,"sequenceIndex":340},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7929881752136811,"sequenceIndex":272},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7430616646035791,"sequenceIndex":258},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7320636908692261,"sequenceIndex":490},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7167876274042788,"sequenceIndex":417},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.831679290374411,"sequenceIndex":430},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.931694499466751,"sequenceIndex":82},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7869087098149725,"sequenceIndex":385},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.826794305397445,"sequenceIndex":87},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8086820947558429,"sequenceIndex":88},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0417905164225576,"sequenceIndex":388},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7952806537866556,"sequenceIndex":339},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1660403948758342,"sequenceIndex":95},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9424131969833678,"sequenceIndex":448},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5917321918057208,"sequenceIndex":467},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1181986144461304,"sequenceIndex":201},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9368006145748159,"sequenceIndex":206},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7272298625296629,"sequenceIndex":510},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.762041448813835,"sequenceIndex":107},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.080009109089037,"sequenceIndex":217},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0469784273061555,"sequenceIndex":273},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.736050163671123,"sequenceIndex":113},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.799578782749118,"sequenceIndex":229},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7564820813824161,"sequenceIndex":15},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8932265281523211,"sequenceIndex":59},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0735529052114023,"sequenceIndex":30},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6999419072803632,"sequenceIndex":344},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6303623851585866,"sequenceIndex":129},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6464251320293698,"sequenceIndex":309},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6877266767492101,"sequenceIndex":494},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5467790226294065,"sequenceIndex":131},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0935560167120182,"sequenceIndex":393},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6492764036944796,"sequenceIndex":387},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3791436283402454,"sequenceIndex":68},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0920252037208684,"sequenceIndex":314},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.661940374523941,"sequenceIndex":70},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5183131667863947,"sequenceIndex":460},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1161984811371752,"sequenceIndex":18},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.45247176258811,"sequenceIndex":276},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7868623450095806,"sequenceIndex":331},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3595821360940836,"sequenceIndex":341},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9802589399761998,"sequenceIndex":382},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.1499061681740828,"sequenceIndex":484},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9420406268798117,"sequenceIndex":396},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1939161498043156,"sequenceIndex":158},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8668778395821551,"sequenceIndex":364},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8925041246817846,"sequenceIndex":80},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1070739378706018,"sequenceIndex":423},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1360054632705092,"sequenceIndex":268},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8719813314075873,"sequenceIndex":20},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.065446997579111,"sequenceIndex":471},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1658307711519125,"sequenceIndex":173},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8845996574654575,"sequenceIndex":174},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8214377196693483,"sequenceIndex":44},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8090313724589803,"sequenceIndex":11},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2492535156345985,"sequenceIndex":45},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6247764541087204,"sequenceIndex":91},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3600475285860365,"sequenceIndex":352},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8736533511997896,"sequenceIndex":311},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.2949800939916982,"sequenceIndex":47},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7667990029016316,"sequenceIndex":191},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0995074953257358,"sequenceIndex":193},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2811402021868414,"sequenceIndex":408},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0235171982411095,"sequenceIndex":197},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6093770868745867,"sequenceIndex":99},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1413944452206355,"sequenceIndex":25},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3233591379706129,"sequenceIndex":202},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4599794974576075,"sequenceIndex":453},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5316529781022508,"sequenceIndex":103},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8827993962076878,"sequenceIndex":425},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8308324679612485,"sequenceIndex":394},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.467692594751057,"sequenceIndex":436},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9200020760595394,"sequenceIndex":214},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.647506663909057,"sequenceIndex":360},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.8075614881530035,"sequenceIndex":299},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5131160869491957,"sequenceIndex":221},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4089978871445428,"sequenceIndex":262},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9449091111602756,"sequenceIndex":7},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1334353980757137,"sequenceIndex":128},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8256067895973387,"sequenceIndex":115},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8786560936940074,"sequenceIndex":114},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9961241120207079,"sequenceIndex":489},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9452127004259228,"sequenceIndex":234},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2996737464560064,"sequenceIndex":421},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4003561074642408,"sequenceIndex":264},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1019533136771018,"sequenceIndex":359},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.416605465895425,"sequenceIndex":242},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7450128027706133,"sequenceIndex":321},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9980083895853699,"sequenceIndex":439},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9354495143212924,"sequenceIndex":248},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7586229408357751,"sequenceIndex":249},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7353476194767626,"sequenceIndex":253},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6967148573966611,"sequenceIndex":432},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7149171608478486,"sequenceIndex":477},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.5125771168503443,"sequenceIndex":455},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.2995211427525675,"sequenceIndex":313},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7740868801051266,"sequenceIndex":345},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2793752134417544,"sequenceIndex":66},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2044963438141463,"sequenceIndex":482},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.0237139276826106,"sequenceIndex":390},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7154481183718822,"sequenceIndex":135},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.560297341738511,"sequenceIndex":136},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.4158007750899735,"sequenceIndex":473},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2850585225965168,"sequenceIndex":34},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.6074420219276813,"sequenceIndex":456},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.304875418446263,"sequenceIndex":463},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.1780940633940826,"sequenceIndex":141},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6089872734219197,"sequenceIndex":71},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.8031365453627313,"sequenceIndex":354},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2257289568545864,"sequenceIndex":36},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2395529448116283,"sequenceIndex":145},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.784461622215491,"sequenceIndex":73},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9258114961437602,"sequenceIndex":481},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.1402296913674554,"sequenceIndex":37},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.194402685731637,"sequenceIndex":383},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9792108705963631,"sequenceIndex":469},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.766524771528255,"sequenceIndex":151},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3968816619463436,"sequenceIndex":19},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.982605933438259,"sequenceIndex":153},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.4111070693596193,"sequenceIndex":445},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.2095700560725415,"sequenceIndex":399},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.0007970991430177,"sequenceIndex":39},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.9947912602294147,"sequenceIndex":501},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.4529889408659495,"sequenceIndex":365},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.4506468281866605,"sequenceIndex":281},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.6745000607028,"sequenceIndex":160},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.150597038081514,"sequenceIndex":10},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.8783718252422763,"sequenceIndex":277},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6162118272342403,"sequenceIndex":163},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.1267200099219585,"sequenceIndex":41},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4839011131713375,"sequenceIndex":506},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.0247669691982733,"sequenceIndex":83},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.550482509748206,"sequenceIndex":308},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0290636211743187,"sequenceIndex":302},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8817187932198841,"sequenceIndex":169},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.351707998193851,"sequenceIndex":85},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.1792288325556264,"sequenceIndex":286},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.012223082314785,"sequenceIndex":172},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.503673479363684,"sequenceIndex":347},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.15548625419936,"sequenceIndex":495},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.842322705495397,"sequenceIndex":175},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.236849227266275,"sequenceIndex":458},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.781062342088189,"sequenceIndex":411},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1057428341103894,"sequenceIndex":377},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.7237409860098674,"sequenceIndex":287},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5302325516136672,"sequenceIndex":378},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.830247400735522,"sequenceIndex":181},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.490340648836831,"sequenceIndex":8},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.0514534803555238,"sequenceIndex":183},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4932692150174163,"sequenceIndex":184},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.0768676422294616,"sequenceIndex":415},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5104058216319611,"sequenceIndex":186},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1940326501900904,"sequenceIndex":187},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.8542130790999516,"sequenceIndex":379},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.495789533135124,"sequenceIndex":189},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.383150363050087,"sequenceIndex":349},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.1713927893203686,"sequenceIndex":488},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.867559338255734,"sequenceIndex":24},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7397301533926686,"sequenceIndex":449},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3142448278297187,"sequenceIndex":96},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.432996839923339,"sequenceIndex":195},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.3997311369339918,"sequenceIndex":49},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.104659590081106,"sequenceIndex":196},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8722929196657654,"sequenceIndex":98},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.717091535693213,"sequenceIndex":374},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.360385931338322,"sequenceIndex":200},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.438671897810818,"sequenceIndex":358},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.455401043577622,"sequenceIndex":101},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5253923538173806,"sequenceIndex":330},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4811473328237312,"sequenceIndex":204},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4677069371382212,"sequenceIndex":465},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.637172266419253,"sequenceIndex":480},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.43178556723566,"sequenceIndex":307},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0771075275699025,"sequenceIndex":470},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.5940052227241313,"sequenceIndex":366},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1197886778973976,"sequenceIndex":105},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8520109105475945,"sequenceIndex":476},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5347273534619092,"sequenceIndex":431},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.8876436003206685,"sequenceIndex":444},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.6975299978884553,"sequenceIndex":447},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.6825344904822765,"sequenceIndex":271},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.043573659797206,"sequenceIndex":323},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.826890268714669,"sequenceIndex":509},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.410531619988267,"sequenceIndex":218},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.654062118987474,"sequenceIndex":442},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.8535391789851574,"sequenceIndex":220},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9511817073983242,"sequenceIndex":110},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.850860607470206,"sequenceIndex":55},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7827801386103657,"sequenceIndex":223},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-5.686668363749988,"sequenceIndex":224},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.7230194422815703,"sequenceIndex":329},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.0742831458281654,"sequenceIndex":409},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.157175003670858,"sequenceIndex":397},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.448429568864497,"sequenceIndex":56},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.136541132649379,"sequenceIndex":289},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1073367968175165,"sequenceIndex":288},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6111859753168691,"sequenceIndex":231},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2834408128830135,"sequenceIndex":232},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4817289533555658,"sequenceIndex":420},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.924467527000446,"sequenceIndex":413},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.0644200914528077,"sequenceIndex":235},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.020130152126836,"sequenceIndex":485},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.7883577706154177,"sequenceIndex":372},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9627865548621406,"sequenceIndex":119},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5548993483152354,"sequenceIndex":238},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.291267483541281,"sequenceIndex":475},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.427198639853804,"sequenceIndex":319},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.067876338871545,"sequenceIndex":474},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.424257650289127,"sequenceIndex":305},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6254305232805284,"sequenceIndex":244},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0133086927678534,"sequenceIndex":60},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.82423643511386,"sequenceIndex":355},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1484227970691605,"sequenceIndex":429},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.73241317345649,"sequenceIndex":124},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.031318922581167,"sequenceIndex":14},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.3680085121233,"sequenceIndex":125},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.278842370183535,"sequenceIndex":326},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.6157064996553374,"sequenceIndex":126},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1375343263361457,"sequenceIndex":508},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9840249252632839,"sequenceIndex":418},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.409231079827465,"sequenceIndex":294},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9627971910820161,"sequenceIndex":512}],"sampleSize":256,"lambda":3.90625E-4,"random":{},"entriesSeen":512},"tree":{"storeSequenceIndexesEnabled":false,"centerOfMassEnabled":false,"random":{}}},{"sampler":{"weightedSamples":[{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.375956989818724,"sequenceIndex":180},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.38204828101391214,"sequenceIndex":183},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.41192701421709216,"sequenceIndex":450},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.3942871148945088,"sequenceIndex":130},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.39147876595221603,"sequenceIndex":257},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.4402745538565418,"sequenceIndex":415},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.45411254213006874,"sequenceIndex":225},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.41678655247565355,"sequenceIndex":426},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.4021644228679754,"sequenceIndex":421},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.48119589432205834,"sequenceIndex":40},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.48390381909790514,"sequenceIndex":391},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.45404100402587577,"sequenceIndex":199},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.4490895126540375,"sequenceIndex":453},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.525609681752838,"sequenceIndex":407},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5728488739246892,"sequenceIndex":273},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.46330494042440806,"sequenceIndex":291},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.4667628180183102,"sequenceIndex":373},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5483970015014177,"sequenceIndex":330},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7095560131581206,"sequenceIndex":326},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.49784332738068304,"sequenceIndex":379},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5657421992941672,"sequenceIndex":417},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5260414822809162,"sequenceIndex":295},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5085728959156779,"sequenceIndex":94},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5017689530131889,"sequenceIndex":99},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6601617888722145,"sequenceIndex":493},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.46677603200834294,"sequenceIndex":212},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.453278007937721,"sequenceIndex":111},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5370519046158729,"sequenceIndex":302},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6840752684307437,"sequenceIndex":335},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6427880969531861,"sequenceIndex":267},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5906371128769787,"sequenceIndex":127},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.4989873171108715,"sequenceIndex":501},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6881089232150426,"sequenceIndex":287},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5651145545808014,"sequenceIndex":278},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8507116359286856,"sequenceIndex":360},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7948654362362931,"sequenceIndex":478},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6784349510879903,"sequenceIndex":304},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8123476014937865,"sequenceIndex":256},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.003551158590757,"sequenceIndex":413},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6444665808953434,"sequenceIndex":266},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6594322360203233,"sequenceIndex":465},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0054348855447786,"sequenceIndex":170},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5733335915067519,"sequenceIndex":480},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8186550645145098,"sequenceIndex":177},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9157418174833836,"sequenceIndex":442},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8494490099167883,"sequenceIndex":186},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8786917140959195,"sequenceIndex":441},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8070594618047868,"sequenceIndex":194},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6836230182404551,"sequenceIndex":380},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8691471630785634,"sequenceIndex":307},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8137352495926454,"sequenceIndex":204},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5598155192199581,"sequenceIndex":339},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.571507483140447,"sequenceIndex":449},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5537600269322952,"sequenceIndex":109},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5492620709701801,"sequenceIndex":261},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7185441821268926,"sequenceIndex":333},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6456558359515389,"sequenceIndex":269},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7217561602042379,"sequenceIndex":29},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7545822949586986,"sequenceIndex":239},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1114399373228732,"sequenceIndex":243},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6436171367950774,"sequenceIndex":15},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6345022223642907,"sequenceIndex":400},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7687019228336709,"sequenceIndex":252},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5015480039964209,"sequenceIndex":474},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7030892254888077,"sequenceIndex":410},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9750960659052128,"sequenceIndex":322},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0683354904162197,"sequenceIndex":135},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4750251602353757,"sequenceIndex":506},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6490832665919165,"sequenceIndex":388},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.838455293178337,"sequenceIndex":455},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3693198228955978,"sequenceIndex":71},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1683775072865736,"sequenceIndex":145},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7218878694609818,"sequenceIndex":382},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2394769857208405,"sequenceIndex":149},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8415051914068234,"sequenceIndex":150},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0834072548403273,"sequenceIndex":38},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8704219592429432,"sequenceIndex":154},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.2086311478675618,"sequenceIndex":157},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0350126017939483,"sequenceIndex":397},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7550993933424044,"sequenceIndex":10},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1263172263808299,"sequenceIndex":460},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7087295778597178,"sequenceIndex":342},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9756384908486928,"sequenceIndex":268},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0107155459215642,"sequenceIndex":169},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4753159166406349,"sequenceIndex":21},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8631856838904586,"sequenceIndex":42},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7597559553328752,"sequenceIndex":327},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.420698618647671,"sequenceIndex":504},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0086657591593178,"sequenceIndex":294},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.194257880685538,"sequenceIndex":90},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9113106206813169,"sequenceIndex":337},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.284269791820163,"sequenceIndex":346},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8568873687505111,"sequenceIndex":321},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.382814526570804,"sequenceIndex":508},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9082966137778781,"sequenceIndex":510},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1560227012413806,"sequenceIndex":192},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1363586240183225,"sequenceIndex":24},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1983884389684123,"sequenceIndex":399},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.08536130762281,"sequenceIndex":498},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.261624008305191,"sequenceIndex":200},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.911653029313237,"sequenceIndex":260},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8335155728020982,"sequenceIndex":258},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.346578466402973,"sequenceIndex":315},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5659166313515263,"sequenceIndex":345},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5689995093103046,"sequenceIndex":364},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7385515765262644,"sequenceIndex":404},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1221562258912001,"sequenceIndex":214},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0003533417648407,"sequenceIndex":488},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7226761586996098,"sequenceIndex":108},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1225358822772882,"sequenceIndex":110},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5735747692779295,"sequenceIndex":282},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1511499699210563,"sequenceIndex":224},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2956155486633052,"sequenceIndex":469},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8090880951970538,"sequenceIndex":447},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8184462524535315,"sequenceIndex":470},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0139099778337535,"sequenceIndex":233},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2359749756453051,"sequenceIndex":471},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0644296675389653,"sequenceIndex":237},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0411100017201784,"sequenceIndex":119},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.065465444977423,"sequenceIndex":120},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.4170231268850637,"sequenceIndex":242},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7387392538513646,"sequenceIndex":385},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.585139479227392,"sequenceIndex":292},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6803607081932095,"sequenceIndex":249},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6483919642666371,"sequenceIndex":250},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9764282660497399,"sequenceIndex":420},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0765291177634861,"sequenceIndex":412},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5404894944497549,"sequenceIndex":496},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.1064254143501797,"sequenceIndex":2},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.4330769824926914,"sequenceIndex":491},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.070749210802572,"sequenceIndex":131},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.421803814275727,"sequenceIndex":411},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.404492093093241,"sequenceIndex":133},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1602863510478103,"sequenceIndex":134},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.7274865265078225,"sequenceIndex":398},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.6407743926181113,"sequenceIndex":34},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.591003957447064,"sequenceIndex":136},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6714617020140887,"sequenceIndex":370},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5906644741331257,"sequenceIndex":396},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.533150015611929,"sequenceIndex":70},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.362832925178965,"sequenceIndex":386},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8875543410694353,"sequenceIndex":401},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.152249107983622,"sequenceIndex":128},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8983473600765,"sequenceIndex":36},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2448133777968604,"sequenceIndex":144},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.829027877755778,"sequenceIndex":377},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-5.101902597093417,"sequenceIndex":492},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5157093945323743,"sequenceIndex":8},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.3745952162890234,"sequenceIndex":369},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9160103496807578,"sequenceIndex":430},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.0303342095712593,"sequenceIndex":151},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.9821601469049517,"sequenceIndex":152},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3818555274444613,"sequenceIndex":390},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.488254721694493,"sequenceIndex":324},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.1196607692057663,"sequenceIndex":155},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.319178308527544,"sequenceIndex":39},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.3087295017767544,"sequenceIndex":348},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.390280033737896,"sequenceIndex":79},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.802464614187685,"sequenceIndex":405},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.842716505224216,"sequenceIndex":374},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-6.569620969166265,"sequenceIndex":161},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.613151663924232,"sequenceIndex":503},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9252073068258242,"sequenceIndex":163},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8532855756843749,"sequenceIndex":359},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.4167911917955793,"sequenceIndex":296},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3840962658044806,"sequenceIndex":166},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.443844852340601,"sequenceIndex":259},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8419685921423123,"sequenceIndex":84},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5700003772875708,"sequenceIndex":265},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-5.097246388570896,"sequenceIndex":476},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7358589097183286,"sequenceIndex":171},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.5821208011703827,"sequenceIndex":172},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2014889237355488,"sequenceIndex":484},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2246287887198126,"sequenceIndex":87},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.982973093273886,"sequenceIndex":344},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.765982396931733,"sequenceIndex":11},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6384753436877006,"sequenceIndex":176},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.44422348204136,"sequenceIndex":178},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2697512665585806,"sequenceIndex":179},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5875954576876146,"sequenceIndex":365},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.785323133108521,"sequenceIndex":181},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-5.517644302160094,"sequenceIndex":182},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-5.581578687424253,"sequenceIndex":483},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5772553247379437,"sequenceIndex":299},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.0166988368706273,"sequenceIndex":440},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9364040345818427,"sequenceIndex":464},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.8977727240681883,"sequenceIndex":187},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6285560258208824,"sequenceIndex":402},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4814819232333587,"sequenceIndex":353},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4608724904998027,"sequenceIndex":434},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.122342001756343,"sequenceIndex":451},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.122278788118774,"sequenceIndex":48},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.5751104696998053,"sequenceIndex":323},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.0223025122186105,"sequenceIndex":352},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.4214176761526236,"sequenceIndex":279},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.5535797886639067,"sequenceIndex":196},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7855258214240275,"sequenceIndex":12},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5273845448819074,"sequenceIndex":98},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2846979937567038,"sequenceIndex":325},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.831322053736005,"sequenceIndex":25},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.434039995972805,"sequenceIndex":350},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.96336878921894,"sequenceIndex":202},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.8181250797670128,"sequenceIndex":101},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9413216149801944,"sequenceIndex":50},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6082729835921652,"sequenceIndex":328},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.5129188794790744,"sequenceIndex":206},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.94463844781503,"sequenceIndex":207},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3271451596651744,"sequenceIndex":13},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6945574916142226,"sequenceIndex":285},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1629020495730615,"sequenceIndex":210},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8641137896818389,"sequenceIndex":53},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.309734500108227,"sequenceIndex":52},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.305487361384865,"sequenceIndex":466},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.3012104644586904,"sequenceIndex":375},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.468172552410225,"sequenceIndex":283},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-5.398834718710973,"sequenceIndex":216},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1382332252909364,"sequenceIndex":54},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4858723587182006,"sequenceIndex":218},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.057561998570165,"sequenceIndex":354},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2052965218137652,"sequenceIndex":220},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4110826764343731,"sequenceIndex":313},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7651106821571176,"sequenceIndex":502},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0670776149612238,"sequenceIndex":431},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.084192914008404,"sequenceIndex":490},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.634263826957662,"sequenceIndex":349},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.992189273758706,"sequenceIndex":113},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.1443187242211037,"sequenceIndex":306},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8316514521878595,"sequenceIndex":429},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9082869660122277,"sequenceIndex":389},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.5808135334900486,"sequenceIndex":314},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.016743410204568,"sequenceIndex":463},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-6.66059762588516,"sequenceIndex":116},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.18605290654646,"sequenceIndex":232},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.463733445454966,"sequenceIndex":234},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2363320151348693,"sequenceIndex":310},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3213644956069517,"sequenceIndex":118},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4517242051468475,"sequenceIndex":454},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.500773781347804,"sequenceIndex":462},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5086038867682012,"sequenceIndex":371},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.722470916877915,"sequenceIndex":240},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.182219937127718,"sequenceIndex":30},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.3555611562779815,"sequenceIndex":121},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.3607067686382344,"sequenceIndex":271},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4019177445133613,"sequenceIndex":244},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6393679186135974,"sequenceIndex":245},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.2842439447219043,"sequenceIndex":123},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9862571403759182,"sequenceIndex":303},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.5169835497160555,"sequenceIndex":31},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3199620402167227,"sequenceIndex":248},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.573472918351591,"sequenceIndex":409},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6019965441087647,"sequenceIndex":406},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.368112061680178,"sequenceIndex":126},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0139685752038534,"sequenceIndex":457},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2638454510619535,"sequenceIndex":63},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.8478652187177875,"sequenceIndex":276},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9023104838165564,"sequenceIndex":511}],"sampleSize":256,"lambda":3.90625E-4,"random":{},"entriesSeen":512},"tree":{"storeSequenceIndexesEnabled":false,"centerOfMassEnabled":false,"random":{}}},{"sampler":{"weightedSamples":[{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5024753368840857,"sequenceIndex":272},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5080933275580308,"sequenceIndex":486},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5079930002282356,"sequenceIndex":399},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5236701093684022,"sequenceIndex":476},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5798242727465741,"sequenceIndex":21},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5915994276332387,"sequenceIndex":354},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5610183916697495,"sequenceIndex":226},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6262704194746648,"sequenceIndex":128},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5263513793338832,"sequenceIndex":5},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6266649769746376,"sequenceIndex":165},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6374765927145796,"sequenceIndex":343},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6347642998216707,"sequenceIndex":386},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.601618465635262,"sequenceIndex":223},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6708417134493972,"sequenceIndex":256},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5930836622081311,"sequenceIndex":250},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6269432366636343,"sequenceIndex":451},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7147553199866872,"sequenceIndex":428},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5394907909847405,"sequenceIndex":37},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5356312076040994,"sequenceIndex":413},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6333580844148039,"sequenceIndex":262},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7473174944277143,"sequenceIndex":266},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6566698826736361,"sequenceIndex":325},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6527068519953815,"sequenceIndex":190},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7192946145925907,"sequenceIndex":441},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7339385299099045,"sequenceIndex":205},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.614457465391421,"sequenceIndex":106},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6218850445026209,"sequenceIndex":372},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6724079678398011,"sequenceIndex":379},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.819153452103271,"sequenceIndex":59},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6602748909050583,"sequenceIndex":366},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6981300666112301,"sequenceIndex":127},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6330806156040021,"sequenceIndex":477},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6673775407694705,"sequenceIndex":135},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7262124992289085,"sequenceIndex":317},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9078908062566559,"sequenceIndex":306},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5787588852329881,"sequenceIndex":357},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0207036055584817,"sequenceIndex":151},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.580684573471894,"sequenceIndex":154},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5657347649965584,"sequenceIndex":436},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6849578829392312,"sequenceIndex":356},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4155088492218078,"sequenceIndex":164},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1016869123767548,"sequenceIndex":324},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7781088001098723,"sequenceIndex":290},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8206903258283657,"sequenceIndex":89},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6777033691055732,"sequenceIndex":416},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9804632209010425,"sequenceIndex":391},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9083931997094808,"sequenceIndex":47},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8375032997941084,"sequenceIndex":96},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.779885546853009,"sequenceIndex":440},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9659499441010011,"sequenceIndex":25},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7532068533465066,"sequenceIndex":296},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7481350412989376,"sequenceIndex":275},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6915040528294829,"sequenceIndex":378},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6362379386632497,"sequenceIndex":429},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8204729756472278,"sequenceIndex":110},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7022396400920632,"sequenceIndex":393},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8033504087862564,"sequenceIndex":264},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8435729843875013,"sequenceIndex":287},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9812650198407341,"sequenceIndex":119},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9526638560284353,"sequenceIndex":427},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8028370564191554,"sequenceIndex":327},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8817735866360787,"sequenceIndex":299},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7348618823852462,"sequenceIndex":252},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8078183686730194,"sequenceIndex":501},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1074787495632084,"sequenceIndex":338},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0508128943492694,"sequenceIndex":16},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.712572937620918,"sequenceIndex":67},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3542053632443614,"sequenceIndex":17},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8730719101095493,"sequenceIndex":69},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6020334960520597,"sequenceIndex":140},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0121913337240354,"sequenceIndex":143},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4075213951741774,"sequenceIndex":474},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8054451103132236,"sequenceIndex":146},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8761918050716797,"sequenceIndex":74},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.079048321267219,"sequenceIndex":289},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8739397518434175,"sequenceIndex":76},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6457709718690119,"sequenceIndex":267},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6177934323565214,"sequenceIndex":79},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8597757008702476,"sequenceIndex":38},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8408837733375113,"sequenceIndex":161},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0769607191407926,"sequenceIndex":333},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.207660723582936,"sequenceIndex":493},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4461668376740022,"sequenceIndex":259},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1491906412590938,"sequenceIndex":42},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.078947893379366,"sequenceIndex":170},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8925914347783251,"sequenceIndex":463},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4579739011387187,"sequenceIndex":175},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1919580314972995,"sequenceIndex":88},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1055133700609476,"sequenceIndex":178},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7799630956489743,"sequenceIndex":398},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4511336096591403,"sequenceIndex":330},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.110644436940822,"sequenceIndex":185},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3566554550992058,"sequenceIndex":342},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.396911414537891,"sequenceIndex":94},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8041980459348306,"sequenceIndex":191},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.034539933276764,"sequenceIndex":414},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3104844738995198,"sequenceIndex":322},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3783677841426747,"sequenceIndex":196},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8602536002317314,"sequenceIndex":471},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4581052882389454,"sequenceIndex":437},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9870367267440114,"sequenceIndex":202},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7577738930205238,"sequenceIndex":103},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5833702637194016,"sequenceIndex":102},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0769309271587806,"sequenceIndex":387},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9076151583687426,"sequenceIndex":426},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0514076578742644,"sequenceIndex":52},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7189762500083862,"sequenceIndex":214},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0838351310463539,"sequenceIndex":435},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7171724844540559,"sequenceIndex":218},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4739959593829899,"sequenceIndex":507},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.888614167241276,"sequenceIndex":263},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0855459316489728,"sequenceIndex":484},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9043145629209451,"sequenceIndex":113},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.337257975250804,"sequenceIndex":228},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2810976889495338,"sequenceIndex":408},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8843145646574062,"sequenceIndex":358},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.199637035487792,"sequenceIndex":235},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6571338692450577,"sequenceIndex":236},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5538466296940832,"sequenceIndex":505},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1032724591434429,"sequenceIndex":241},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.177806413821199,"sequenceIndex":121},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7899844360534114,"sequenceIndex":244},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.395760863536974,"sequenceIndex":246},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9434426946474925,"sequenceIndex":124},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2613122051937933,"sequenceIndex":454},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7448990687065625,"sequenceIndex":62},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8077967627980361,"sequenceIndex":63},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9454425409751943,"sequenceIndex":492},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.412560031911186,"sequenceIndex":326},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8387966605085386,"sequenceIndex":4},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.1502118968268795,"sequenceIndex":449},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1286660126727146,"sequenceIndex":422},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5638324889757218,"sequenceIndex":133},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.8598891494501344,"sequenceIndex":134},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.826266125091502,"sequenceIndex":438},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-5.640987212772707,"sequenceIndex":136},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.9571126242222374,"sequenceIndex":457},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.5512813137227437,"sequenceIndex":138},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-5.065399822420787,"sequenceIndex":139},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.734767442721488,"sequenceIndex":448},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.165514709519218,"sequenceIndex":418},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7763700680787282,"sequenceIndex":71},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6949680533380589,"sequenceIndex":280},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.371093042852682,"sequenceIndex":36},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8000828384195144,"sequenceIndex":381},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9483795521320406,"sequenceIndex":452},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.3792767175327234,"sequenceIndex":328},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.317942347378974,"sequenceIndex":9},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-9.393883305112322,"sequenceIndex":283},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.4832718735548727,"sequenceIndex":75},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5947675355794144,"sequenceIndex":150},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3200179310962443,"sequenceIndex":152},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9625201867540588,"sequenceIndex":18},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2193199743817211,"sequenceIndex":77},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5960965196407673,"sequenceIndex":361},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.992638451195355,"sequenceIndex":39},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.0718681249716395,"sequenceIndex":390},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9527307201882967,"sequenceIndex":158},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2198428034626836,"sequenceIndex":466},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.642840652614644,"sequenceIndex":80},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9482743398316171,"sequenceIndex":425},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.482370970282011,"sequenceIndex":1},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.8373178095318248,"sequenceIndex":464},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.994223965021067,"sequenceIndex":82},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.40590523002778,"sequenceIndex":468},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.184980194188484,"sequenceIndex":83},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5350279148964021,"sequenceIndex":488},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.8545138177333134,"sequenceIndex":168},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.180647473092042,"sequenceIndex":169},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-5.148839056059376,"sequenceIndex":360},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.799711943245712,"sequenceIndex":171},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9120935946188189,"sequenceIndex":20},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.294116267761889,"sequenceIndex":298},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9549659075524997,"sequenceIndex":174},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4711770946372664,"sequenceIndex":446},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9592161906859926,"sequenceIndex":176},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.612932491828352,"sequenceIndex":373},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8423306256032999,"sequenceIndex":384},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.23317966678314,"sequenceIndex":382},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.609381472436669,"sequenceIndex":45},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3000558438861405,"sequenceIndex":180},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.7032513271231786,"sequenceIndex":91},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.149870212483826,"sequenceIndex":182},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.098183978762898,"sequenceIndex":184},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6249283834545012,"sequenceIndex":419},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.2328310880818387,"sequenceIndex":410},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.586292330387125,"sequenceIndex":187},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.0360207548649942,"sequenceIndex":404},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.355597853256601,"sequenceIndex":189},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-6.327754117377899,"sequenceIndex":433},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.185674344998144,"sequenceIndex":482},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3125997257713113,"sequenceIndex":455},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.272253459861274,"sequenceIndex":376},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-5.3593904878592955,"sequenceIndex":355},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.742953165210485,"sequenceIndex":420},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5993639948003107,"sequenceIndex":412},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.238797021329826,"sequenceIndex":335},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.901247881086546,"sequenceIndex":198},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.399297944873072,"sequenceIndex":199},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.977864264353146,"sequenceIndex":465},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4918683407874518,"sequenceIndex":201},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2237262440351977,"sequenceIndex":101},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0254033660468538,"sequenceIndex":421},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.877971299750405,"sequenceIndex":51},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.905309208794016,"sequenceIndex":467},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.864906391782169,"sequenceIndex":206},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.8710411457184466,"sequenceIndex":207},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2220553824062415,"sequenceIndex":13},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9384139482183798,"sequenceIndex":321},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-6.559036149293423,"sequenceIndex":456},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.3184990864921944,"sequenceIndex":431},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.77941943520946,"sequenceIndex":500},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.0921925910742227,"sequenceIndex":470},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.6298903453487568,"sequenceIndex":490},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.680011476470475,"sequenceIndex":273},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.742782720311456,"sequenceIndex":108},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7047986324458846,"sequenceIndex":341},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.6022724496372476,"sequenceIndex":359},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0355771748832514,"sequenceIndex":219},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.735021332481046,"sequenceIndex":497},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.7397643965538645,"sequenceIndex":303},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.535785539690684,"sequenceIndex":111},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-5.152496839846353,"sequenceIndex":409},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.693995594152332,"sequenceIndex":292},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0884271061576343,"sequenceIndex":383},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.4439046368071713,"sequenceIndex":489},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.198187820390376,"sequenceIndex":227},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.4815678870643803,"sequenceIndex":57},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.8895151831346197,"sequenceIndex":271},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2824355036151498,"sequenceIndex":114},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-5.9681025086906825,"sequenceIndex":363},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-5.122399234579905,"sequenceIndex":350},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6625176153095358,"sequenceIndex":284},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.834013745062748,"sequenceIndex":302},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.389211630750894,"sequenceIndex":443},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.8829815908339707,"sequenceIndex":260},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.47486839983935,"sequenceIndex":237},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.495615031862007,"sequenceIndex":238},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.242569114545663,"sequenceIndex":64},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.949347252373557,"sequenceIndex":120},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.964564483209742,"sequenceIndex":472},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.9362231851977696,"sequenceIndex":279},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.2421474767009197,"sequenceIndex":243},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.4320049600007496,"sequenceIndex":122},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.5960343529179477,"sequenceIndex":473},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.416057416652445,"sequenceIndex":469},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-5.105580825493438,"sequenceIndex":311},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.669048899720794,"sequenceIndex":248},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.4114718992158535,"sequenceIndex":31},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.340496720429176,"sequenceIndex":125},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6192096389133588,"sequenceIndex":487},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9711869015358098,"sequenceIndex":126},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.7912478097747524,"sequenceIndex":407},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0026181880600282,"sequenceIndex":265},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.0883032440055413,"sequenceIndex":255},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.200407927975351,"sequenceIndex":508}],"sampleSize":256,"lambda":3.90625E-4,"random":{},"entriesSeen":512},"tree":{"storeSequenceIndexesEnabled":false,"centerOfMassEnabled":false,"random":{}}},{"sampler":{"weightedSamples":[{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.4696946263196493,"sequenceIndex":408},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.4775503257462027,"sequenceIndex":37},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.47237376250528496,"sequenceIndex":464},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5081695830265399,"sequenceIndex":150},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5449656941751957,"sequenceIndex":177},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5373383766116789,"sequenceIndex":50},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.4831229795266621,"sequenceIndex":237},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5105212670727101,"sequenceIndex":475},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6047052438577166,"sequenceIndex":75},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6166017475767,"sequenceIndex":297},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6550458173574275,"sequenceIndex":185},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6195835590396825,"sequenceIndex":12},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6028603892375274,"sequenceIndex":369},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5258157854925499,"sequenceIndex":379},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5375954720177065,"sequenceIndex":284},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5382681609148998,"sequenceIndex":484},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5419730005084289,"sequenceIndex":139},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6749002143443674,"sequenceIndex":145},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7107481918152774,"sequenceIndex":76},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7272217162441669,"sequenceIndex":165},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6655853442091085,"sequenceIndex":171},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.782944887412175,"sequenceIndex":181},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.753267969035806,"sequenceIndex":22},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7094376545366144,"sequenceIndex":349},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7286306322152968,"sequenceIndex":205},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.677836077891732,"sequenceIndex":213},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7275553590453897,"sequenceIndex":218},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6462124113917103,"sequenceIndex":14},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6101945907064006,"sequenceIndex":314},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5386214682890967,"sequenceIndex":61},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6536919529656744,"sequenceIndex":329},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6241887358285654,"sequenceIndex":491},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5736346711943635,"sequenceIndex":16},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7281421540621088,"sequenceIndex":68},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9111669184942083,"sequenceIndex":70},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.728289567653208,"sequenceIndex":343},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7159092635540975,"sequenceIndex":149},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0249243072569232,"sequenceIndex":152},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7620448363361961,"sequenceIndex":65},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8636807152777546,"sequenceIndex":282},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7591296978855409,"sequenceIndex":460},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.792570950121294,"sequenceIndex":476},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9527519778265503,"sequenceIndex":454},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9126642860102236,"sequenceIndex":473},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9935972671907854,"sequenceIndex":90},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.966107468761581,"sequenceIndex":456},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3514758782187808,"sequenceIndex":296},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1124425864317038,"sequenceIndex":48},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7324048708989292,"sequenceIndex":419},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7478740735566152,"sequenceIndex":364},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9168125475325449,"sequenceIndex":288},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7525267153959594,"sequenceIndex":355},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8776605427553614,"sequenceIndex":477},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.737410914882925,"sequenceIndex":108},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7672442106478025,"sequenceIndex":269},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1700034048853265,"sequenceIndex":227},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6528301986878218,"sequenceIndex":114},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1165315460640433,"sequenceIndex":504},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0400154037169385,"sequenceIndex":389},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6620928105913546,"sequenceIndex":121},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5876313532512488,"sequenceIndex":316},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8203327468251481,"sequenceIndex":394},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7659396642829901,"sequenceIndex":309},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7155782996431368,"sequenceIndex":512},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8553624970781566,"sequenceIndex":130},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.774066701326078,"sequenceIndex":434},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9005295223348577,"sequenceIndex":334},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7576412494213441,"sequenceIndex":137},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.742769572990515,"sequenceIndex":407},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0804059188165602,"sequenceIndex":140},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4912237510059523,"sequenceIndex":359},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7523747591390627,"sequenceIndex":73},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7891818369136666,"sequenceIndex":146},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7462445484908358,"sequenceIndex":148},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1910967415612745,"sequenceIndex":36},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6317982014330783,"sequenceIndex":366},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2563885112467152,"sequenceIndex":155},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8301223096457419,"sequenceIndex":390},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0116997712291467,"sequenceIndex":388},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9494922322240292,"sequenceIndex":493},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8486790977992489,"sequenceIndex":489},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7784652372540363,"sequenceIndex":433},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.089999272827802,"sequenceIndex":83},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4937819627913378,"sequenceIndex":84},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0153258682859398,"sequenceIndex":328},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9877671892458211,"sequenceIndex":344},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0436997818623996,"sequenceIndex":87},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4843316683045757,"sequenceIndex":306},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4944686055271978,"sequenceIndex":44},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4585241831794375,"sequenceIndex":480},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.014945405218839,"sequenceIndex":442},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4697266759459438,"sequenceIndex":413},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.154313528122665,"sequenceIndex":393},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9917065284176891,"sequenceIndex":403},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7934396109310387,"sequenceIndex":190},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1579451316281155,"sequenceIndex":193},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1946363841147571,"sequenceIndex":362},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7220003567386855,"sequenceIndex":196},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4909938164326852,"sequenceIndex":385},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2189553548999241,"sequenceIndex":416},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9733962645636977,"sequenceIndex":101},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2779956463085285,"sequenceIndex":204},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2398657010120469,"sequenceIndex":103},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2374696344434701,"sequenceIndex":321},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.1968866259695483,"sequenceIndex":211},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0776089013324897,"sequenceIndex":376},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8829403314475244,"sequenceIndex":478},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7707379950365119,"sequenceIndex":26},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0801562004877407,"sequenceIndex":420},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7967326801486523,"sequenceIndex":110},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7830465130472719,"sequenceIndex":258},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8802292349229264,"sequenceIndex":113},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.170688768798378,"sequenceIndex":56},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1321130089369589,"sequenceIndex":228},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1953749056609189,"sequenceIndex":404},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2256888470523644,"sequenceIndex":260},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4538810010766885,"sequenceIndex":432},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0601765029972192,"sequenceIndex":236},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0410657101366674,"sequenceIndex":271},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8208806878702102,"sequenceIndex":318},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.857954303445751,"sequenceIndex":243},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.617764890350269,"sequenceIndex":353},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6576608953429857,"sequenceIndex":372},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5751273604433345,"sequenceIndex":430},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.892698841444881,"sequenceIndex":251},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9960711482971141,"sequenceIndex":252},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1552540519913785,"sequenceIndex":127},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7623895097782043,"sequenceIndex":482},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.853406484020898,"sequenceIndex":4},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1148004384767947,"sequenceIndex":64},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.211565494666844,"sequenceIndex":131},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.1832630854892874,"sequenceIndex":467},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9891356648286622,"sequenceIndex":402},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9642870964307232,"sequenceIndex":67},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5841273505784865,"sequenceIndex":440},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3004452156778277,"sequenceIndex":5},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1460090379887533,"sequenceIndex":136},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.909033008343921,"sequenceIndex":138},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.72582212496615,"sequenceIndex":501},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7193809250311909,"sequenceIndex":468},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.270923637792374,"sequenceIndex":395},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.1649458493556715,"sequenceIndex":453},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.3777285632808383,"sequenceIndex":281},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8848499479979113,"sequenceIndex":9},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8103801346042628,"sequenceIndex":144},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9874442910185145,"sequenceIndex":18},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7262398257114553,"sequenceIndex":511},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.6106704972866988,"sequenceIndex":74},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0909988464470985,"sequenceIndex":508},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.610406535390216,"sequenceIndex":375},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2036227795194578,"sequenceIndex":330},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.202070698005034,"sequenceIndex":19},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8778003657153102,"sequenceIndex":435},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-6.936274594021773,"sequenceIndex":77},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.294310256277842,"sequenceIndex":341},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9103049875463016,"sequenceIndex":335},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.247275416371403,"sequenceIndex":391},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3021135550550025,"sequenceIndex":79},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6730899767142582,"sequenceIndex":275},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.1444959595296056,"sequenceIndex":2},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.2215676540878246,"sequenceIndex":161},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.171402179883018,"sequenceIndex":387},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.0876162034342824,"sequenceIndex":163},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3800283419918533,"sequenceIndex":164},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5974117172822582,"sequenceIndex":494},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4628946065677677,"sequenceIndex":358},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.342312244800927,"sequenceIndex":167},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.7541685124267974,"sequenceIndex":42},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7598679026750679,"sequenceIndex":168},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.928166261242888,"sequenceIndex":170},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5024184015628248,"sequenceIndex":85},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7952845040826055,"sequenceIndex":43},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.004364971205934,"sequenceIndex":173},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.66033763791692,"sequenceIndex":174},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3195892801905587,"sequenceIndex":423},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-6.8091381915796205,"sequenceIndex":11},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.57389092823718,"sequenceIndex":367},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.727423853065797,"sequenceIndex":259},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.269552145887816,"sequenceIndex":179},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.807892725594686,"sequenceIndex":45},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.157248211884078,"sequenceIndex":457},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.6644748459135523,"sequenceIndex":91},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.710332725556065,"sequenceIndex":441},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.25938115979885,"sequenceIndex":507},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-8.507402233021038,"sequenceIndex":263},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.743900599705851,"sequenceIndex":373},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.8205849101201808,"sequenceIndex":371},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.7550138259684815,"sequenceIndex":331},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.5546654441512757,"sequenceIndex":406},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.8388445619891227,"sequenceIndex":345},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.663814605255016,"sequenceIndex":191},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5554311296262717,"sequenceIndex":192},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.0742864481134675,"sequenceIndex":396},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.2928473270987895,"sequenceIndex":194},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.1809729709814674,"sequenceIndex":195},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.2406086723236083,"sequenceIndex":510},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9076964834086987,"sequenceIndex":436},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.6325257998969973,"sequenceIndex":99},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.359449107963409,"sequenceIndex":397},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.532519731094732,"sequenceIndex":200},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.1005580384312674,"sequenceIndex":201},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.331483965808917,"sequenceIndex":202},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.017794442483172,"sequenceIndex":203},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.668546292424617,"sequenceIndex":51},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.0060059243149015,"sequenceIndex":352},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5912528489720927,"sequenceIndex":455},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2746014986320995,"sequenceIndex":304},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.170336596265753,"sequenceIndex":52},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2462123806041032,"sequenceIndex":208},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.0863992384287844,"sequenceIndex":105},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.524460834040532,"sequenceIndex":399},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.586300068264179,"sequenceIndex":13},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.1800346045841197,"sequenceIndex":488},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2275929571046744,"sequenceIndex":214},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.018991398283685,"sequenceIndex":215},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8996520354562125,"sequenceIndex":305},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9523429841078624,"sequenceIndex":283},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2956428719802089,"sequenceIndex":448},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.0132112096126247,"sequenceIndex":219},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7135653430045055,"sequenceIndex":386},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.13122920030905,"sequenceIndex":323},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8448389614048804,"sequenceIndex":276},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2629054765522965,"sequenceIndex":365},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.841433244569187,"sequenceIndex":112},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.7996729847634616,"sequenceIndex":224},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.479806808503211,"sequenceIndex":339},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.8829277976678425,"sequenceIndex":315},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2198925417392064,"sequenceIndex":57},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5366890079313524,"sequenceIndex":301},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.9401847869170057,"sequenceIndex":128},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.226104614747713,"sequenceIndex":231},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2592197470782496,"sequenceIndex":116},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.274807908576492,"sequenceIndex":233},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6570076878263036,"sequenceIndex":412},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.6672520043104657,"sequenceIndex":256},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4203976955096558,"sequenceIndex":118},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.820756699721024,"sequenceIndex":414},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8270972703745032,"sequenceIndex":119},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2043025430298755,"sequenceIndex":308},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.236379675313028,"sequenceIndex":120},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.2678280306571414,"sequenceIndex":241},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.074757718055375,"sequenceIndex":60},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.4906155876817095,"sequenceIndex":294},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.0203633576310347,"sequenceIndex":15},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9286964906518795,"sequenceIndex":437},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3855576810936767,"sequenceIndex":295},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.046302735379834,"sequenceIndex":247},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.850804077253578,"sequenceIndex":62},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.1935481832409955,"sequenceIndex":298},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1913272076566073,"sequenceIndex":125},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6453861865493753,"sequenceIndex":496},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.2053792194035005,"sequenceIndex":384},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.6840317802255105,"sequenceIndex":253},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.732642719822167,"sequenceIndex":470},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.0110788493606093,"sequenceIndex":370},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9555904064099788,"sequenceIndex":505}],"sampleSize":256,"lambda":3.90625E-4,"random":{},"entriesSeen":512},"tree":{"storeSequenceIndexesEnabled":false,"centerOfMassEnabled":false,"random":{}}},{"sampler":{"weightedSamples":[{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.4196007207288104,"sequenceIndex":86},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.4648047377957223,"sequenceIndex":398},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.4512839909796748,"sequenceIndex":274},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.4759247829174207,"sequenceIndex":70},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.4917215518568215,"sequenceIndex":382},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.48447961883854684,"sequenceIndex":201},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.4620636794877223,"sequenceIndex":254},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.4768844046346311,"sequenceIndex":455},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.538986314374352,"sequenceIndex":471},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.49318617229695183,"sequenceIndex":431},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5075242905468994,"sequenceIndex":187},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5171971220724023,"sequenceIndex":192},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5450717252116043,"sequenceIndex":271},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.4665250061177509,"sequenceIndex":56},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.4777815656973036,"sequenceIndex":314},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.607147506383768,"sequenceIndex":507},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.4871160439477013,"sequenceIndex":295},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5665978610972144,"sequenceIndex":390},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7225433627589426,"sequenceIndex":328},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5554649956622248,"sequenceIndex":340},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5908940821446554,"sequenceIndex":65},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5181247623825352,"sequenceIndex":402},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5724430073545408,"sequenceIndex":185},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7014159785597991,"sequenceIndex":48},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6368686839544851,"sequenceIndex":275},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6285791552881326,"sequenceIndex":273},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6117637253396461,"sequenceIndex":109},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.4747632347634445,"sequenceIndex":372},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5201814665984558,"sequenceIndex":356},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.48398424095857695,"sequenceIndex":123},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.576235178248377,"sequenceIndex":400},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6313169509097731,"sequenceIndex":361},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7409078983124034,"sequenceIndex":339},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7977876311517901,"sequenceIndex":69},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5450563447986339,"sequenceIndex":484},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5734789101710448,"sequenceIndex":144},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5946344741282985,"sequenceIndex":150},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8133662422359764,"sequenceIndex":377},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7968998653788153,"sequenceIndex":343},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1443797922858805,"sequenceIndex":478},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7237302344213372,"sequenceIndex":83},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7915860629498157,"sequenceIndex":171},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7797706827121966,"sequenceIndex":42},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7395624243312959,"sequenceIndex":2},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8366526144540471,"sequenceIndex":180},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7309104730631861,"sequenceIndex":493},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.710265203116906,"sequenceIndex":95},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.446405910720523,"sequenceIndex":262},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7017607121871834,"sequenceIndex":199},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6558751560739683,"sequenceIndex":200},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8134356449801224,"sequenceIndex":479},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9680084046144903,"sequenceIndex":323},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8233767048949114,"sequenceIndex":213},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8611364066375463,"sequenceIndex":216},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7826218172780457,"sequenceIndex":379},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7486961205716735,"sequenceIndex":225},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7655835948981459,"sequenceIndex":456},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7673757833882426,"sequenceIndex":418},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5699727873514162,"sequenceIndex":401},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5461659743280323,"sequenceIndex":348},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6508178736374886,"sequenceIndex":122},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7076864264646774,"sequenceIndex":31},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0582284030781495,"sequenceIndex":126},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6889165271719806,"sequenceIndex":500},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.405856490045347,"sequenceIndex":131},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9007045703767131,"sequenceIndex":1},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8334835139569536,"sequenceIndex":448},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.445664201068942,"sequenceIndex":136},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2102722614451422,"sequenceIndex":138},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6908772989767378,"sequenceIndex":141},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7891679809327178,"sequenceIndex":304},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4649011444352562,"sequenceIndex":435},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7598580022415139,"sequenceIndex":270},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0749441825578854,"sequenceIndex":302},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6810074375954556,"sequenceIndex":75},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8164773487028439,"sequenceIndex":354},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.872750243487472,"sequenceIndex":384},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8031150464455185,"sequenceIndex":39},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9256568732315252,"sequenceIndex":480},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2667201652125009,"sequenceIndex":444},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1461754680559328,"sequenceIndex":427},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.715711875095329,"sequenceIndex":165},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3827894362136224,"sequenceIndex":264},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4436598473336437,"sequenceIndex":168},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8855415360116807,"sequenceIndex":84},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.940283773380992,"sequenceIndex":495},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0306663493802644,"sequenceIndex":416},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7619631766683634,"sequenceIndex":405},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1540788955072006,"sequenceIndex":332},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8534587517052354,"sequenceIndex":502},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9479332277191972,"sequenceIndex":91},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.797186732277029,"sequenceIndex":184},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.755063146994019,"sequenceIndex":359},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7128911277119447,"sequenceIndex":188},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8519468707144524,"sequenceIndex":47},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5344006952984863,"sequenceIndex":193},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8347611076400052,"sequenceIndex":441},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.516911244174344,"sequenceIndex":380},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4305010184644527,"sequenceIndex":288},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9773426677184555,"sequenceIndex":101},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0262450860837184,"sequenceIndex":202},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.035096821365912,"sequenceIndex":325},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4144278013267537,"sequenceIndex":206},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.344481963410124,"sequenceIndex":209},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3388515622256478,"sequenceIndex":105},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.1189548160233387,"sequenceIndex":52},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8330574604499233,"sequenceIndex":214},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2105196389708777,"sequenceIndex":13},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7513524038665804,"sequenceIndex":315},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8399645683606085,"sequenceIndex":449},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5505110809180889,"sequenceIndex":223},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.178375258279429,"sequenceIndex":490},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.3623765386304134,"sequenceIndex":28},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.201281378579984,"sequenceIndex":472},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6600895258349835,"sequenceIndex":230},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8630452025774512,"sequenceIndex":6},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7866060252394993,"sequenceIndex":234},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5288536019527252,"sequenceIndex":454},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7726918710519328,"sequenceIndex":352},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.661493837456199,"sequenceIndex":120},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6383483924290202,"sequenceIndex":243},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1053928899180319,"sequenceIndex":412},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7896707349192961,"sequenceIndex":260},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7979736390170256,"sequenceIndex":463},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8036025091661487,"sequenceIndex":387},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2507374095760597,"sequenceIndex":459},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3226134075610019,"sequenceIndex":255},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7053633639153597,"sequenceIndex":511},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.246719441837639,"sequenceIndex":128},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.4476262628085017,"sequenceIndex":16},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4570140650610535,"sequenceIndex":130},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.614582120035993,"sequenceIndex":132},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1378908639085654,"sequenceIndex":506},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.7497221320181113,"sequenceIndex":298},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.6123024639283385,"sequenceIndex":135},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.583431142734644,"sequenceIndex":68},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9022868868899385,"sequenceIndex":424},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.3768833537524747,"sequenceIndex":17},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2298166325388624,"sequenceIndex":333},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1979559919287859,"sequenceIndex":140},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7124366921867307,"sequenceIndex":392},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.481260804943234,"sequenceIndex":71},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0502431812997206,"sequenceIndex":501},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.485717531958209,"sequenceIndex":36},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.25489845072989,"sequenceIndex":145},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.4660321140195474,"sequenceIndex":72},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.627032373589698,"sequenceIndex":310},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.023448539739238,"sequenceIndex":403},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.326300355217892,"sequenceIndex":497},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.205427243394475,"sequenceIndex":499},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3827220522443262,"sequenceIndex":278},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.7330392357770243,"sequenceIndex":76},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9942896944444999,"sequenceIndex":329},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.03991568996046,"sequenceIndex":77},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.614806925160759,"sequenceIndex":445},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2281481127635292,"sequenceIndex":156},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9779840182041781,"sequenceIndex":157},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6244968987371076,"sequenceIndex":79},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1783581195586454,"sequenceIndex":158},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.531911997059016,"sequenceIndex":10},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.4053984235133106,"sequenceIndex":394},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.221758393183098,"sequenceIndex":81},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4243352099583726,"sequenceIndex":297},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.3823451108934752,"sequenceIndex":82},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.553862400139803,"sequenceIndex":282},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5240033115876057,"sequenceIndex":41},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.8458805137090173,"sequenceIndex":167},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4812797557464112,"sequenceIndex":20},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.5516357121137463,"sequenceIndex":169},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.521232021418717,"sequenceIndex":425},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.387505127928136,"sequenceIndex":414},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9950589445758535,"sequenceIndex":172},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.128111786804459,"sequenceIndex":367},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2258575605520903,"sequenceIndex":491},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.405138174215472,"sequenceIndex":175},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7866106787877502,"sequenceIndex":88},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9684114477137165,"sequenceIndex":316},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.2918243682814743,"sequenceIndex":89},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9428360729507184,"sequenceIndex":178},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.2169122992115193,"sequenceIndex":494},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.5346624795685124,"sequenceIndex":312},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.6424748250948715,"sequenceIndex":487},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.353186225419264,"sequenceIndex":408},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7979074943661357,"sequenceIndex":92},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.801221125838504,"sequenceIndex":476},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.79729961802777,"sequenceIndex":407},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.357587041627219,"sequenceIndex":393},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.161019672171821,"sequenceIndex":94},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7833410134462168,"sequenceIndex":189},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.473101945240517,"sequenceIndex":432},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4336242690107512,"sequenceIndex":344},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9561142546104282,"sequenceIndex":3},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.121504310433089,"sequenceIndex":338},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.807581241424392,"sequenceIndex":294},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.44786030411703,"sequenceIndex":510},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.946340848537134,"sequenceIndex":49},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-5.507420199895164,"sequenceIndex":197},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.5557527971001237,"sequenceIndex":440},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7261295445119416,"sequenceIndex":433},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.412309418918136,"sequenceIndex":100},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.063438750559355,"sequenceIndex":428},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6025211951779776,"sequenceIndex":25},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9189159460299399,"sequenceIndex":203},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.421342434123618,"sequenceIndex":51},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2831249920730483,"sequenceIndex":205},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5373902538278903,"sequenceIndex":317},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.772344307553218,"sequenceIndex":207},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.1390583834530155,"sequenceIndex":104},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.541040351597412,"sequenceIndex":208},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.2855087358956596,"sequenceIndex":26},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.3778845885549376,"sequenceIndex":446},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.3191014697749095,"sequenceIndex":212},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.4717612774035564,"sequenceIndex":357},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.7238365479662527,"sequenceIndex":107},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.847674178962453,"sequenceIndex":215},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5143445956704198,"sequenceIndex":496},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7041384052811823,"sequenceIndex":217},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9835727287915879,"sequenceIndex":322},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-5.5060128314933054,"sequenceIndex":219},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8503841374008376,"sequenceIndex":55},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.084719097596338,"sequenceIndex":307},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.672984577005707,"sequenceIndex":285},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.2525459446349667,"sequenceIndex":439},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.8408103827459827,"sequenceIndex":112},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.066077125212908,"sequenceIndex":113},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.2567809598305524,"sequenceIndex":226},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.42181668843132,"sequenceIndex":259},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.696456035534953,"sequenceIndex":386},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.6597004106742226,"sequenceIndex":229},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.4204950489219077,"sequenceIndex":397},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.037472773525387,"sequenceIndex":231},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.0856350438745537,"sequenceIndex":232},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.437404928249996,"sequenceIndex":468},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.586464857246426,"sequenceIndex":289},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.047949366722752,"sequenceIndex":235},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-5.128128757737078,"sequenceIndex":118},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.914352594414737,"sequenceIndex":64},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9458785936418235,"sequenceIndex":299},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.1434787030535682,"sequenceIndex":453},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0087465797812603,"sequenceIndex":375},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.0781033861499383,"sequenceIndex":286},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.44053340955652,"sequenceIndex":277},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.039751262241658,"sequenceIndex":371},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.0684546032408897,"sequenceIndex":61},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-5.312256588274903,"sequenceIndex":245},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.2189769960237697,"sequenceIndex":280},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2201160197208651,"sequenceIndex":505},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0740754902979877,"sequenceIndex":281},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.3446776251742913,"sequenceIndex":249},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9357298925756506,"sequenceIndex":301},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1122970557275091,"sequenceIndex":251},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8873252490746393,"sequenceIndex":252},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7090237246232742,"sequenceIndex":63},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.528583622070825,"sequenceIndex":127},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5072343150083285,"sequenceIndex":256},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0051040522586416,"sequenceIndex":512}],"sampleSize":256,"lambda":3.90625E-4,"random":{},"entriesSeen":512},"tree":{"storeSequenceIndexesEnabled":false,"centerOfMassEnabled":false,"random":{}}},{"sampler":{"weightedSamples":[{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.48546103845260724,"sequenceIndex":424},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.48824167919150296,"sequenceIndex":455},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.49030345506317896,"sequenceIndex":373},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5082012853505424,"sequenceIndex":495},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5026800279364845,"sequenceIndex":384},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5267346819077205,"sequenceIndex":26},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5045189776543771,"sequenceIndex":59},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5370748807557643,"sequenceIndex":329},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5186632039663763,"sequenceIndex":39},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5337192059722647,"sequenceIndex":323},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5040906496531217,"sequenceIndex":178},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5444675739612167,"sequenceIndex":376},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5476565325189888,"sequenceIndex":387},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5229490980214404,"sequenceIndex":282},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5463293783422043,"sequenceIndex":346},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5804071206493213,"sequenceIndex":464},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5728748208025849,"sequenceIndex":351},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5300375430179589,"sequenceIndex":150},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6560736291595339,"sequenceIndex":76},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6372696998900425,"sequenceIndex":364},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5693965398964446,"sequenceIndex":403},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6517125754043954,"sequenceIndex":483},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5317962255366033,"sequenceIndex":10},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7220426702110171,"sequenceIndex":49},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6003403792037859,"sequenceIndex":51},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6226314576785653,"sequenceIndex":53},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5989370423726712,"sequenceIndex":217},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6011244801100216,"sequenceIndex":309},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5510726577765621,"sequenceIndex":340},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.598107934654861,"sequenceIndex":122},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.733845694209438,"sequenceIndex":248},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5847479770772789,"sequenceIndex":471},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6934753659723208,"sequenceIndex":414},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6281822919065119,"sequenceIndex":32},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5857731703293358,"sequenceIndex":141},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5329783403868849,"sequenceIndex":402},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0850353184875798,"sequenceIndex":310},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0502525008019674,"sequenceIndex":443},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8709274087671769,"sequenceIndex":294},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6622157340402863,"sequenceIndex":5},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7709853514904276,"sequenceIndex":164},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.100530974761394,"sequenceIndex":459},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6993045273709106,"sequenceIndex":43},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8233128251624063,"sequenceIndex":454},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8693284429699507,"sequenceIndex":180},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8656449480374425,"sequenceIndex":185},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0857888005482597,"sequenceIndex":189},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7546978925268363,"sequenceIndex":473},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7911533880359408,"sequenceIndex":199},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8754698513422715,"sequenceIndex":295},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7446417095237722,"sequenceIndex":25},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.654903142689272,"sequenceIndex":374},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6392365488991949,"sequenceIndex":106},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.891354981937197,"sequenceIndex":436},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7687938122134693,"sequenceIndex":284},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.88703987469759,"sequenceIndex":226},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6038682632959768,"sequenceIndex":57},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5916661359570078,"sequenceIndex":274},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.703204815439309,"sequenceIndex":413},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7103237489876261,"sequenceIndex":121},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6425345749051617,"sequenceIndex":123},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7478271280200945,"sequenceIndex":392},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8194718085224632,"sequenceIndex":430},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7515133611171482,"sequenceIndex":486},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1888785649763802,"sequenceIndex":380},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8047628200361492,"sequenceIndex":477},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2451642760012593,"sequenceIndex":391},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3060377121407274,"sequenceIndex":498},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9251247395780051,"sequenceIndex":139},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0368764975097036,"sequenceIndex":434},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7673455395117503,"sequenceIndex":143},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4492063652402198,"sequenceIndex":396},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6800482060478708,"sequenceIndex":352},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0859664771871145,"sequenceIndex":75},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1371122271851066,"sequenceIndex":151},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5107963537422973,"sequenceIndex":19},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0910043148960753,"sequenceIndex":385},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9613076593953008,"sequenceIndex":157},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.605169607219219,"sequenceIndex":158},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6485739243334825,"sequenceIndex":449},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.678458166909683,"sequenceIndex":162},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8254427813297099,"sequenceIndex":475},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9538551164331011,"sequenceIndex":312},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.447377288988498,"sequenceIndex":331},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.0159756741969943,"sequenceIndex":263},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8643033658578838,"sequenceIndex":86},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.742402923296259,"sequenceIndex":432},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2090350173794877,"sequenceIndex":176},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.181679988642882,"sequenceIndex":89},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.367864177167768,"sequenceIndex":181},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1345864212269219,"sequenceIndex":183},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6600403550511307,"sequenceIndex":494},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8710978852810531,"sequenceIndex":187},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1833879289108424,"sequenceIndex":285},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4118494726884967,"sequenceIndex":191},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8331081268469035,"sequenceIndex":193},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9095137284846053,"sequenceIndex":33},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7324796145085781,"sequenceIndex":196},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8441942471119394,"sequenceIndex":478},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9715197016716692,"sequenceIndex":50},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9247725004960733,"sequenceIndex":101},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3721482150958404,"sequenceIndex":204},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1191788044061388,"sequenceIndex":206},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6881672713613205,"sequenceIndex":445},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7311969054223668,"sequenceIndex":335},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5177055638147379,"sequenceIndex":469},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.739130686479158,"sequenceIndex":107},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1613006605134257,"sequenceIndex":27},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1291021673442727,"sequenceIndex":334},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0211833154331942,"sequenceIndex":111},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.166276859586318,"sequenceIndex":222},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9630206527412526,"sequenceIndex":7},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3451959777462446,"sequenceIndex":227},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.609596599954885,"sequenceIndex":301},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.967271621218315,"sequenceIndex":410},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.919512518883659,"sequenceIndex":233},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3476599127489501,"sequenceIndex":502},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.08911299149694,"sequenceIndex":506},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0855665776817445,"sequenceIndex":239},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8118154110313254,"sequenceIndex":14},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9738702155257553,"sequenceIndex":423},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9535974039504134,"sequenceIndex":401},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7245459940470211,"sequenceIndex":246},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9470806308788043,"sequenceIndex":249},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7787720627469491,"sequenceIndex":125},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8824351518349294,"sequenceIndex":126},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1654738768728283,"sequenceIndex":305},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1931542958834833,"sequenceIndex":504},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5322614103169085,"sequenceIndex":128},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.917223183041928,"sequenceIndex":65},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5856029233916948,"sequenceIndex":379},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6545105364705754,"sequenceIndex":17},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.4777212187104665,"sequenceIndex":133},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.7687493858917196,"sequenceIndex":422},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3293648139093708,"sequenceIndex":135},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.6505368993729306,"sequenceIndex":34},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9355763532847243,"sequenceIndex":345},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.4725064753681147,"sequenceIndex":69},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.092267576488146,"sequenceIndex":456},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.8261096645920247,"sequenceIndex":140},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8311997416721526,"sequenceIndex":4},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9933394373988804,"sequenceIndex":71},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1954801910710737,"sequenceIndex":357},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.592918002940256,"sequenceIndex":144},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.3073981418346095,"sequenceIndex":18},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2852215583768338,"sequenceIndex":367},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.3925229374523242,"sequenceIndex":397},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.2497077015913622,"sequenceIndex":36},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1899438515699703,"sequenceIndex":470},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4929549647887412,"sequenceIndex":74},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.0313330759662085,"sequenceIndex":463},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.4072437022413657,"sequenceIndex":152},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.1342494927828857,"sequenceIndex":491},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2025732364053692,"sequenceIndex":77},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.1018525549085103,"sequenceIndex":16},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.0076310200186,"sequenceIndex":461},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8085524841510168,"sequenceIndex":479},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.761607510249474,"sequenceIndex":408},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.1715296275562217,"sequenceIndex":395},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.032031559042889,"sequenceIndex":80},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6488640390686022,"sequenceIndex":161},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.2404146640460163,"sequenceIndex":81},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0029922528908408,"sequenceIndex":383},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.0237519197120126,"sequenceIndex":82},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5240695513056355,"sequenceIndex":493},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3809518280538002,"sequenceIndex":83},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4288711433554826,"sequenceIndex":167},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.739768855399813,"sequenceIndex":394},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.987495837688397,"sequenceIndex":169},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.202573938492217,"sequenceIndex":85},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.2430069520974145,"sequenceIndex":404},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.062797172827161,"sequenceIndex":381},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3948123504093954,"sequenceIndex":314},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.670866545122725,"sequenceIndex":174},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.9440574796236634,"sequenceIndex":265},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5493968463300618,"sequenceIndex":22},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6112122978704222,"sequenceIndex":390},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.854308020416697,"sequenceIndex":500},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6121062848262335,"sequenceIndex":179},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8080863255273605,"sequenceIndex":90},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.935261945412735,"sequenceIndex":450},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8777159776690855,"sequenceIndex":299},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4119848188195994,"sequenceIndex":447},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9442264675431704,"sequenceIndex":322},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-5.538850058098651,"sequenceIndex":457},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9558615435646243,"sequenceIndex":377},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1011502631018701,"sequenceIndex":440},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.0706012312905444,"sequenceIndex":94},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4478610074853897,"sequenceIndex":47},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.6673842636177834,"sequenceIndex":190},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.20014070833913,"sequenceIndex":95},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.059978277849837,"sequenceIndex":3},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7136967272005936,"sequenceIndex":485},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.1141927869033106,"sequenceIndex":97},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.4748786054403764,"sequenceIndex":439},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.17427739792381,"sequenceIndex":98},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.96728378111496,"sequenceIndex":197},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.1385634661898596,"sequenceIndex":99},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8618302510385023,"sequenceIndex":48},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9931831567150774,"sequenceIndex":339},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8851402402840296,"sequenceIndex":201},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2524530364440738,"sequenceIndex":202},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.763688643947997,"sequenceIndex":496},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9175855723472113,"sequenceIndex":451},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.8251563682814513,"sequenceIndex":308},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1476604674117066,"sequenceIndex":264},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5991740910317478,"sequenceIndex":261},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-6.118193881411274,"sequenceIndex":208},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-5.742548271776237,"sequenceIndex":104},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8771616961999595,"sequenceIndex":52},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7360415971724608,"sequenceIndex":355},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.1199312334097735,"sequenceIndex":356},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9053643455250384,"sequenceIndex":348},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9225273510964777,"sequenceIndex":214},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1808144678531252,"sequenceIndex":215},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9152764892735206,"sequenceIndex":216},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.3300098867494885,"sequenceIndex":505},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1954478522387424,"sequenceIndex":386},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4103170601314599,"sequenceIndex":378},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.832001189926993,"sequenceIndex":55},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1469368441786005,"sequenceIndex":221},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3442055251290854,"sequenceIndex":110},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.120527489666096,"sequenceIndex":223},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.17660405232428,"sequenceIndex":224},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0251645101121234,"sequenceIndex":225},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.569945833880864,"sequenceIndex":113},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.5726601068448627,"sequenceIndex":417},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.846645921776994,"sequenceIndex":114},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.0679206378971244,"sequenceIndex":275},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.483633165148771,"sequenceIndex":230},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2468382046309239,"sequenceIndex":231},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6467774453805104,"sequenceIndex":29},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3827763463649863,"sequenceIndex":400},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-5.54748043654028,"sequenceIndex":117},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5718492982058492,"sequenceIndex":318},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.654608787841057,"sequenceIndex":257},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.0075567699246766,"sequenceIndex":237},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.2116898207700832,"sequenceIndex":238},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.335921966391445,"sequenceIndex":119},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.512177561279445,"sequenceIndex":240},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.146542224444293,"sequenceIndex":241},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.0182623462272558,"sequenceIndex":343},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.9237237305690345,"sequenceIndex":243},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3905161831159845,"sequenceIndex":244},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0217448373681675,"sequenceIndex":363},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7831545863519964,"sequenceIndex":489},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9473737696543414,"sequenceIndex":338},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.649338930325164,"sequenceIndex":467},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6167037022774173,"sequenceIndex":474},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.311938041653325,"sequenceIndex":427},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.525231328219062,"sequenceIndex":350},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8498481758938117,"sequenceIndex":252},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.771076507424776,"sequenceIndex":253},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.4680636525298696,"sequenceIndex":279},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.510431299288723,"sequenceIndex":472},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6326944614733998,"sequenceIndex":507}],"sampleSize":256,"lambda":3.90625E-4,"random":{},"entriesSeen":512},"tree":{"storeSequenceIndexesEnabled":false,"centerOfMassEnabled":false,"random":{}}},{"sampler":{"weightedSamples":[{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.4508760769154083,"sequenceIndex":511},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.4585539020003295,"sequenceIndex":279},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.45977660438628254,"sequenceIndex":278},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.4598572915460619,"sequenceIndex":344},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.460944885395275,"sequenceIndex":291},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5012512032507415,"sequenceIndex":219},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.48822824227361855,"sequenceIndex":370},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.4619914103242761,"sequenceIndex":18},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.4814038450820997,"sequenceIndex":78},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5182885087155084,"sequenceIndex":173},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5927557753565897,"sequenceIndex":182},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5559404267723463,"sequenceIndex":193},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5639034005012573,"sequenceIndex":262},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5509378401375296,"sequenceIndex":227},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5044371096121937,"sequenceIndex":245},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.47721572982783556,"sequenceIndex":433},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5826632147997421,"sequenceIndex":430},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7165451054631299,"sequenceIndex":147},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8132231431786143,"sequenceIndex":322},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5534523633707018,"sequenceIndex":337},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5541446681716833,"sequenceIndex":308},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6927871214916558,"sequenceIndex":183},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8028336851857083,"sequenceIndex":429},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6443119792537737,"sequenceIndex":371},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6325469993360622,"sequenceIndex":283},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6250315953758744,"sequenceIndex":208},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5785186863556788,"sequenceIndex":373},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6265336032528688,"sequenceIndex":226},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5525478632000301,"sequenceIndex":239},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5112247845811936,"sequenceIndex":123},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5667846692816839,"sequenceIndex":127},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.4943913532920661,"sequenceIndex":437},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7890809740668542,"sequenceIndex":133},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7538388176538424,"sequenceIndex":137},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.237894893238782,"sequenceIndex":143},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8398616296554009,"sequenceIndex":145},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8041231338685754,"sequenceIndex":334},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0297484494593518,"sequenceIndex":19},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8414914403187265,"sequenceIndex":79},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7472271009695204,"sequenceIndex":80},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6469572856908988,"sequenceIndex":295},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0504310809933914,"sequenceIndex":42},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5988614756053623,"sequenceIndex":21},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7648978985591133,"sequenceIndex":273},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0655665874685276,"sequenceIndex":310},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8076328868185878,"sequenceIndex":343},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0016129751326923,"sequenceIndex":456},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8007266691843398,"sequenceIndex":195},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.091130220185101,"sequenceIndex":98},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6871046290244163,"sequenceIndex":359},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1728270560660161,"sequenceIndex":205},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6807561386987515,"sequenceIndex":415},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0310033883750205,"sequenceIndex":382},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5933539253121627,"sequenceIndex":431},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7227769658657934,"sequenceIndex":315},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7413782034089875,"sequenceIndex":509},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2283566261545733,"sequenceIndex":357},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6032118047696998,"sequenceIndex":28},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6837268444600425,"sequenceIndex":238},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7558651705254581,"sequenceIndex":120},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6758488549583614,"sequenceIndex":30},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7413021469546793,"sequenceIndex":453},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9380518663371702,"sequenceIndex":473},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5304718013412167,"sequenceIndex":488},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6308443405266109,"sequenceIndex":33},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2737011997506482,"sequenceIndex":132},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9520531309926566,"sequenceIndex":134},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8063973385700745,"sequenceIndex":68},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6561043105263182,"sequenceIndex":368},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.430439900906951,"sequenceIndex":290},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6801759410165393,"sequenceIndex":71},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3380700863922776,"sequenceIndex":492},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9731163153994493,"sequenceIndex":452},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.453137872349073,"sequenceIndex":74},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9670268104776184,"sequenceIndex":374},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1310758434423815,"sequenceIndex":153},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.292977485032187,"sequenceIndex":417},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8463595647872125,"sequenceIndex":156},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.207549246158878,"sequenceIndex":458},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9063934505807913,"sequenceIndex":406},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3092789897418977,"sequenceIndex":163},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7360368252250349,"sequenceIndex":413},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9666655175800144,"sequenceIndex":476},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.578166289562913,"sequenceIndex":503},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3666644029124526,"sequenceIndex":85},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8399617223347223,"sequenceIndex":389},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7036064538537246,"sequenceIndex":327},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7827701509005286,"sequenceIndex":376},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.376960209016898,"sequenceIndex":88},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7115336759109427,"sequenceIndex":362},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.376795273809599,"sequenceIndex":426},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.4071562347634208,"sequenceIndex":443},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.001084280639619,"sequenceIndex":92},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5274432194583827,"sequenceIndex":468},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.1803494920094653,"sequenceIndex":484},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9968038203069312,"sequenceIndex":477},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9366927096531507,"sequenceIndex":499},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5470159076325412,"sequenceIndex":48},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.7942320142538417,"sequenceIndex":276},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.0795268693772666,"sequenceIndex":465},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9779144423715521,"sequenceIndex":203},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.2329476563100457,"sequenceIndex":303},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3188759274502382,"sequenceIndex":464},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5123408072827158,"sequenceIndex":209},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6848037832111173,"sequenceIndex":52},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1742246080047147,"sequenceIndex":450},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.200350017015076,"sequenceIndex":256},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.685152699519325,"sequenceIndex":26},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6113459352806339,"sequenceIndex":501},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1728236556783758,"sequenceIndex":483},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3817412582979325,"sequenceIndex":358},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.466109797864763,"sequenceIndex":57},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5653656919158339,"sequenceIndex":311},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.683566018629922,"sequenceIndex":434},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.559533302283591,"sequenceIndex":259},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9540833435584385,"sequenceIndex":365},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3833225139972485,"sequenceIndex":117},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.763228096511144,"sequenceIndex":236},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4981905995783382,"sequenceIndex":119},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.824734264881194,"sequenceIndex":316},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8170288616539629,"sequenceIndex":405},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.239533913350134,"sequenceIndex":244},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0971243987873909,"sequenceIndex":246},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.026263973503801,"sequenceIndex":377},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7629350146897509,"sequenceIndex":251},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.071915114460894,"sequenceIndex":62},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.163996812080282,"sequenceIndex":255},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5534535966680838,"sequenceIndex":486},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.46373977179032,"sequenceIndex":424},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.6678717565718513,"sequenceIndex":348},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.9542682705059944,"sequenceIndex":131},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.5152090408627696,"sequenceIndex":16},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4929897101098566,"sequenceIndex":66},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7960434123314133,"sequenceIndex":67},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5303125250827434,"sequenceIndex":289},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.10320475799481,"sequenceIndex":136},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8757026696044794,"sequenceIndex":395},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9128090390430479,"sequenceIndex":138},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.2563024169935573,"sequenceIndex":293},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-5.33666333477023,"sequenceIndex":268},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.4531168732213446,"sequenceIndex":141},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.7147241941497735,"sequenceIndex":384},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.3185414098171737,"sequenceIndex":285},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.43578394778199,"sequenceIndex":72},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.281995028195736,"sequenceIndex":425},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.265142385131699,"sequenceIndex":73},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4396727941940342,"sequenceIndex":146},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.419043829849337,"sequenceIndex":37},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.5933205803377066,"sequenceIndex":148},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.6555561254962528,"sequenceIndex":75},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.211300848970291,"sequenceIndex":150},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.138793622855262,"sequenceIndex":76},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.11658574785146,"sequenceIndex":152},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6681478410962993,"sequenceIndex":38},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.692942709870044,"sequenceIndex":360},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.229548668713239,"sequenceIndex":39},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.0561852363293402,"sequenceIndex":427},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2988872943850454,"sequenceIndex":158},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6155269929993905,"sequenceIndex":510},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.068648012159996,"sequenceIndex":10},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6114002475599158,"sequenceIndex":361},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.6894752960410573,"sequenceIndex":162},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5488256993590301,"sequenceIndex":460},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-5.7244486205241305,"sequenceIndex":369},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.2488401382680414,"sequenceIndex":392},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4211886796766429,"sequenceIndex":439},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7765874519867106,"sequenceIndex":493},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-6.2172474580415855,"sequenceIndex":284},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.091155726561295,"sequenceIndex":32},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5291057004101944,"sequenceIndex":170},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.5787036604665703,"sequenceIndex":419},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.857079996660391,"sequenceIndex":479},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5897727148555385,"sequenceIndex":498},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8618370067460277,"sequenceIndex":87},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7332353634538493,"sequenceIndex":175},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.465518939859864,"sequenceIndex":5},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8326334868365395,"sequenceIndex":385},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.7730672380835357,"sequenceIndex":354},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.0689663932412943,"sequenceIndex":269},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.3752044259639327,"sequenceIndex":504},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.160289609591437,"sequenceIndex":263},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5728280245469446,"sequenceIndex":91},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6290608065572638,"sequenceIndex":379},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.069888003319444,"sequenceIndex":46},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.507982845661858,"sequenceIndex":347},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6144157512808002,"sequenceIndex":349},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4171350513998542,"sequenceIndex":187},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9078613878490263,"sequenceIndex":188},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-5.379464709029456,"sequenceIndex":336},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.195197212350207,"sequenceIndex":95},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.6784596124213897,"sequenceIndex":407},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.5986696929988495,"sequenceIndex":24},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.2076705256718387,"sequenceIndex":286},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.870801913812779,"sequenceIndex":97},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3886992585020388,"sequenceIndex":194},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.5225025069857065,"sequenceIndex":304},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.787038815667053,"sequenceIndex":197},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.5260254593059575,"sequenceIndex":319},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.244258100265348,"sequenceIndex":394},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.6455055793013074,"sequenceIndex":200},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.620728260493675,"sequenceIndex":445},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.467016945487195,"sequenceIndex":391},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.205601608431475,"sequenceIndex":474},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.131182249368325,"sequenceIndex":102},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.0811857778657723,"sequenceIndex":480},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.3548673981516712,"sequenceIndex":298},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.252503777696349,"sequenceIndex":363},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.479509963611722,"sequenceIndex":13},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6422066926358216,"sequenceIndex":471},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7936872816985974,"sequenceIndex":210},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.92241021625564,"sequenceIndex":211},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4882128529038054,"sequenceIndex":53},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-5.183357757308836,"sequenceIndex":388},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.1329580901237915,"sequenceIndex":107},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-5.973680972420337,"sequenceIndex":215},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.0758623164919587,"sequenceIndex":475},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.681192098543813,"sequenceIndex":341},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7307293456039152,"sequenceIndex":218},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2545749483318378,"sequenceIndex":54},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.1829369874163245,"sequenceIndex":220},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2766199333964339,"sequenceIndex":55},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.594595790066826,"sequenceIndex":440},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4951571182637913,"sequenceIndex":223},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-5.393568671148253,"sequenceIndex":56},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.5278038296826537,"sequenceIndex":224},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.791523508980913,"sequenceIndex":112},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8047880335723305,"sequenceIndex":466},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.0636531954807085,"sequenceIndex":228},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.661028589699005,"sequenceIndex":7},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9418648270950813,"sequenceIndex":230},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.138305929089322,"sequenceIndex":408},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7015365332484962,"sequenceIndex":116},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3386152603691779,"sequenceIndex":277},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.3413088510230806,"sequenceIndex":234},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.0701633175664362,"sequenceIndex":235},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.7037968841481756,"sequenceIndex":118},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9428018822044308,"sequenceIndex":237},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.621660075727143,"sequenceIndex":59},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.3160497250820855,"sequenceIndex":449},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.491916368855795,"sequenceIndex":60},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.456976011847764,"sequenceIndex":330},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9793024038750875,"sequenceIndex":266},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.3429430729303307,"sequenceIndex":243},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.1546940725342396,"sequenceIndex":122},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.680169534915636,"sequenceIndex":447},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6493329415142381,"sequenceIndex":487},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.7766474357859448,"sequenceIndex":247},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.323738220387624,"sequenceIndex":31},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.6493663207177676,"sequenceIndex":249},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.803482615836966,"sequenceIndex":321},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8234731861146789,"sequenceIndex":432},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.129381956886729,"sequenceIndex":411},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3007720867860881,"sequenceIndex":282},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.80083053105747,"sequenceIndex":387},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7573374537147441,"sequenceIndex":485},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5545937468148092,"sequenceIndex":444}],"sampleSize":256,"lambda":3.90625E-4,"random":{},"entriesSeen":512},"tree":{"storeSequenceIndexesEnabled":false,"centerOfMassEnabled":false,"random":{}}},{"sampler":{"weightedSamples":[{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.4628559144039275,"sequenceIndex":348},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.46680792371176144,"sequenceIndex":135},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.46457581998014796,"sequenceIndex":311},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.4706042285762159,"sequenceIndex":509},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.4932468781660201,"sequenceIndex":485},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.4724022304556878,"sequenceIndex":267},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.47102162488074045,"sequenceIndex":127},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.4707252186468207,"sequenceIndex":477},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.49590253821122987,"sequenceIndex":463},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5403925917504349,"sequenceIndex":466},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5069781461311791,"sequenceIndex":47},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5085609555357291,"sequenceIndex":427},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5064302655666227,"sequenceIndex":13},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5349935635609494,"sequenceIndex":344},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5841155012745776,"sequenceIndex":128},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.47475853804835905,"sequenceIndex":425},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5032145548131917,"sequenceIndex":395},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5702231342001687,"sequenceIndex":412},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.4998497579529356,"sequenceIndex":471},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6280619034114331,"sequenceIndex":449},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6100924142423066,"sequenceIndex":85},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5705030836899959,"sequenceIndex":89},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6616189077499723,"sequenceIndex":23},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5536964115353279,"sequenceIndex":48},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5770361143056953,"sequenceIndex":51},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5607997472841934,"sequenceIndex":208},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.633508469891156,"sequenceIndex":327},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7446208549924316,"sequenceIndex":342},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6538732504981697,"sequenceIndex":354},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5950728146506006,"sequenceIndex":404},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.685930498044856,"sequenceIndex":263},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5123226724013653,"sequenceIndex":33},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5542682460123048,"sequenceIndex":32},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6798217074166272,"sequenceIndex":138},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5424870875919175,"sequenceIndex":35},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7576424894642104,"sequenceIndex":144},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6602750244053508,"sequenceIndex":362},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7270922143862881,"sequenceIndex":457},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6220295867232986,"sequenceIndex":332},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6818481241878374,"sequenceIndex":4},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6307792166833867,"sequenceIndex":167},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.660304941105105,"sequenceIndex":168},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6508957933289852,"sequenceIndex":173},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9795466409854137,"sequenceIndex":338},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.481765221898312,"sequenceIndex":374},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8108035458106635,"sequenceIndex":422},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7271979967908717,"sequenceIndex":190},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6670867687140987,"sequenceIndex":2},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.166913337849211,"sequenceIndex":98},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6308755707205711,"sequenceIndex":25},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8396780631516433,"sequenceIndex":206},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7146566243143803,"sequenceIndex":211},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.663816623209334,"sequenceIndex":336},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.037826716689538,"sequenceIndex":109},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6700144087491546,"sequenceIndex":337},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9287863592947421,"sequenceIndex":226},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9724143853930025,"sequenceIndex":229},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7888337164108656,"sequenceIndex":58},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8718094671574007,"sequenceIndex":59},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6920420179922167,"sequenceIndex":265},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6746547447403121,"sequenceIndex":246},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.09394624172279,"sequenceIndex":333},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7385226554707961,"sequenceIndex":254},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7672731322427802,"sequenceIndex":494},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1938544850766402,"sequenceIndex":501},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8104411932986846,"sequenceIndex":66},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2999271311074398,"sequenceIndex":134},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7193458819228266,"sequenceIndex":1},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3712848007849483,"sequenceIndex":453},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1880067592715085,"sequenceIndex":430},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6448369281320693,"sequenceIndex":71},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7685114857684698,"sequenceIndex":9},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8711895409402877,"sequenceIndex":437},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6843717203395214,"sequenceIndex":74},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8876874711346681,"sequenceIndex":413},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3281874343781133,"sequenceIndex":76},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1767212013611867,"sequenceIndex":447},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7129366424004177,"sequenceIndex":261},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7887353613921221,"sequenceIndex":294},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9239002533632867,"sequenceIndex":435},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7861272007644827,"sequenceIndex":162},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6589842212017445,"sequenceIndex":41},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.2853483882653935,"sequenceIndex":361},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8145130018404977,"sequenceIndex":474},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8431621578821662,"sequenceIndex":473},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7112754762658783,"sequenceIndex":172},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8913500222622973,"sequenceIndex":329},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1196162857655265,"sequenceIndex":350},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.541134528790261,"sequenceIndex":390},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4932227093897927,"sequenceIndex":276},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6589818549798108,"sequenceIndex":45},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9619941321247761,"sequenceIndex":92},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3782893717932576,"sequenceIndex":456},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.028352397506332,"sequenceIndex":188},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7973749917010404,"sequenceIndex":483},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9637160740236854,"sequenceIndex":96},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9213057135320203,"sequenceIndex":503},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.1298493393594633,"sequenceIndex":444},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.2965100272247914,"sequenceIndex":99},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.918824535862091,"sequenceIndex":100},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9402284504383703,"sequenceIndex":281},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1361786264250964,"sequenceIndex":204},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9158095818482302,"sequenceIndex":488},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.165481865482143,"sequenceIndex":268},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.4377652748879903,"sequenceIndex":322},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7679738403728413,"sequenceIndex":421},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7868214737483942,"sequenceIndex":481},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1613583593802241,"sequenceIndex":216},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0624577257111796,"sequenceIndex":108},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5200339802755198,"sequenceIndex":54},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9657860666875834,"sequenceIndex":400},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8996472941477927,"sequenceIndex":225},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4399112626828354,"sequenceIndex":56},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1895890766603436,"sequenceIndex":392},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.0309997494021568,"sequenceIndex":323},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9729343834555184,"sequenceIndex":370},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9055221652821132,"sequenceIndex":234},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.687098835930683,"sequenceIndex":480},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1533025447636738,"sequenceIndex":239},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1938760927966834,"sequenceIndex":240},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2280593994956845,"sequenceIndex":375},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8646979496980892,"sequenceIndex":244},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1775571859134417,"sequenceIndex":123},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.606476067734801,"sequenceIndex":124},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.0398884980553893,"sequenceIndex":309},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7932537165453415,"sequenceIndex":253},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4669021842007341,"sequenceIndex":487},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8727729267286026,"sequenceIndex":486},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9425786505545768,"sequenceIndex":280},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.113259050433013,"sequenceIndex":130},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.0015220540082197,"sequenceIndex":300},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4849230976352314,"sequenceIndex":132},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.393248656755901,"sequenceIndex":133},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.535334643986675,"sequenceIndex":465},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.166821039084895,"sequenceIndex":347},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.231883692783792,"sequenceIndex":450},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.5075193436780503,"sequenceIndex":137},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.924935074001095,"sequenceIndex":411},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.228488894215977,"sequenceIndex":325},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.832233515280021,"sequenceIndex":308},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2163345722102055,"sequenceIndex":299},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4996640508407142,"sequenceIndex":377},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9858970508427901,"sequenceIndex":366},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.2035893734174357,"sequenceIndex":72},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6444708256512235,"sequenceIndex":145},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.1534880634843514,"sequenceIndex":73},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3474642252302431,"sequenceIndex":423},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1190625509672942,"sequenceIndex":316},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6276162766781384,"sequenceIndex":312},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9522967541777576,"sequenceIndex":150},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1445268959955945,"sequenceIndex":151},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.268039106367208,"sequenceIndex":356},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.8149150546488606,"sequenceIndex":286},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.110127986605183,"sequenceIndex":358},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.3810188242639323,"sequenceIndex":320},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8073109603713806,"sequenceIndex":156},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8380555115863662,"sequenceIndex":304},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2031254585246027,"sequenceIndex":458},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4385050172900535,"sequenceIndex":495},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.3517648221654412,"sequenceIndex":80},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.562420777179426,"sequenceIndex":161},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6713006029421864,"sequenceIndex":10},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8144390595497589,"sequenceIndex":279},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.187499203506212,"sequenceIndex":429},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.141605970371257,"sequenceIndex":165},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.402504684192796,"sequenceIndex":166},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.8998516915355235,"sequenceIndex":443},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.659757657054002,"sequenceIndex":21},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0389883420808395,"sequenceIndex":290},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.0597041085706156,"sequenceIndex":418},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.8998458885845144,"sequenceIndex":387},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.044299708883186,"sequenceIndex":43},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.7391023109749506,"sequenceIndex":343},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.541177786426053,"sequenceIndex":174},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.874009727919253,"sequenceIndex":175},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.7906177216851744,"sequenceIndex":11},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3030724923924382,"sequenceIndex":177},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.83482730990789,"sequenceIndex":389},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.535005196138084,"sequenceIndex":490},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.4553613297830874,"sequenceIndex":90},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.617017781244884,"sequenceIndex":180},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.395075666993777,"sequenceIndex":319},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-6.170478399240818,"sequenceIndex":264},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9803761195687312,"sequenceIndex":506},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4000976721088783,"sequenceIndex":455},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7276548775812388,"sequenceIndex":186},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.6628003164410528,"sequenceIndex":292},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1569373773445406,"sequenceIndex":94},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.1260802748280843,"sequenceIndex":189},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.733131866485631,"sequenceIndex":95},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4261091772059997,"sequenceIndex":401},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.9326933245182296,"sequenceIndex":192},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.491085541785682,"sequenceIndex":334},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-5.348639542747065,"sequenceIndex":194},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2864185958981689,"sequenceIndex":195},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-5.999781468663174,"sequenceIndex":49},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.474477458891769,"sequenceIndex":307},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-5.5254052659082955,"sequenceIndex":394},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.287195981899793,"sequenceIndex":199},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6421796697234914,"sequenceIndex":200},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.2195763320323088,"sequenceIndex":201},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3807582163523822,"sequenceIndex":101},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.749238197492064,"sequenceIndex":203},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.2051490047509317,"sequenceIndex":102},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.6253418810881195,"sequenceIndex":314},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.826606299134421,"sequenceIndex":451},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.316764085111127,"sequenceIndex":434},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.673014358119795,"sequenceIndex":52},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.4645148947494238,"sequenceIndex":340},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.493228224443717,"sequenceIndex":210},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.0008172191894933,"sequenceIndex":502},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.6749465396902985,"sequenceIndex":426},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.1656739219595957,"sequenceIndex":331},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3392294437274344,"sequenceIndex":107},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.546541419051171,"sequenceIndex":215},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9669372840898878,"sequenceIndex":27},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3118277593711374,"sequenceIndex":432},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.0420822627519657,"sequenceIndex":218},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7224749932963654,"sequenceIndex":8},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.1959961331914055,"sequenceIndex":220},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.1099151041820075,"sequenceIndex":393},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5152700059321693,"sequenceIndex":222},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.104970748402003,"sequenceIndex":111},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.246737202379754,"sequenceIndex":224},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.0836982866715643,"sequenceIndex":112},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8675761012704728,"sequenceIndex":113},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.5657905830103207,"sequenceIndex":227},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.980411075277421,"sequenceIndex":368},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.567941391377,"sequenceIndex":371},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.2225362859155022,"sequenceIndex":291},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.848641932044464,"sequenceIndex":383},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.0666473680007638,"sequenceIndex":116},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.181582268148413,"sequenceIndex":452},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.236000420865187,"sequenceIndex":117},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.953577217723601,"sequenceIndex":446},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.490691529373041,"sequenceIndex":236},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7532566572400934,"sequenceIndex":256},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7550233194216696,"sequenceIndex":238},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.9280104290686535,"sequenceIndex":339},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9435221210178122,"sequenceIndex":60},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3619492597497433,"sequenceIndex":121},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.1453053870710064,"sequenceIndex":242},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6477282214908804,"sequenceIndex":30},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.767460313988505,"sequenceIndex":61},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6005437446647717,"sequenceIndex":406},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.908198151079769,"sequenceIndex":507},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.507507897286829,"sequenceIndex":328},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.6236669832448687,"sequenceIndex":31},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.5133805411218426,"sequenceIndex":249},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.2240515117055173,"sequenceIndex":125},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.1973666796394924,"sequenceIndex":315},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8430249951593538,"sequenceIndex":364},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.02271847179713,"sequenceIndex":409},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7699821423913096,"sequenceIndex":379},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8541255753344175,"sequenceIndex":255},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.245926388329603,"sequenceIndex":510}],"sampleSize":256,"lambda":3.90625E-4,"random":{},"entriesSeen":512},"tree":{"storeSequenceIndexesEnabled":false,"centerOfMassEnabled":false,"random":{}}},{"sampler":{"weightedSamples":[{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.3995425460769366,"sequenceIndex":275},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.4162158074092641,"sequenceIndex":437},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.41849477551061737,"sequenceIndex":240},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.4191175449375748,"sequenceIndex":503},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.44684163512739306,"sequenceIndex":177},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.4583054405336929,"sequenceIndex":215},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.44200532093701367,"sequenceIndex":247},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6469448750238475,"sequenceIndex":308},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.4328030280763182,"sequenceIndex":377},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.46073722769741154,"sequenceIndex":161},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.536528867900043,"sequenceIndex":409},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.4595532229664453,"sequenceIndex":206},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5179321955017963,"sequenceIndex":213},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.45063580996445596,"sequenceIndex":324},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.47366975818663104,"sequenceIndex":480},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7688929561582549,"sequenceIndex":492},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7849831402907937,"sequenceIndex":34},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7698670344770999,"sequenceIndex":149},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5099419564112918,"sequenceIndex":153},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5174900324012958,"sequenceIndex":366},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6813481708572496,"sequenceIndex":404},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5493940688160348,"sequenceIndex":183},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6055131639218069,"sequenceIndex":92},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.47798693016204635,"sequenceIndex":457},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7476066402022107,"sequenceIndex":429},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5407178873635127,"sequenceIndex":473},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5216791055557901,"sequenceIndex":223},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5182278954412626,"sequenceIndex":231},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5967503846612401,"sequenceIndex":277},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5552741901078435,"sequenceIndex":243},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5845360251349007,"sequenceIndex":124},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8016656215292652,"sequenceIndex":512},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9375571357864187,"sequenceIndex":326},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.910067938840019,"sequenceIndex":17},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8385306558223615,"sequenceIndex":71},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9309167476758006,"sequenceIndex":72},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9482840194913349,"sequenceIndex":151},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.732243338503001,"sequenceIndex":77},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5351372257691761,"sequenceIndex":158},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6447246946187392,"sequenceIndex":20},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8107812621828587,"sequenceIndex":463},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9670472973741492,"sequenceIndex":170},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3466063106194324,"sequenceIndex":343},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7022293452845024,"sequenceIndex":11},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0893807156015418,"sequenceIndex":90},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7758939914931601,"sequenceIndex":93},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8319300039525801,"sequenceIndex":46},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5461282761372039,"sequenceIndex":329},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8577137508840968,"sequenceIndex":12},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9381656763411356,"sequenceIndex":470},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8464780430039912,"sequenceIndex":103},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8715251907486329,"sequenceIndex":209},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9122247149123639,"sequenceIndex":53},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5379981042167887,"sequenceIndex":109},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6170824331156819,"sequenceIndex":222},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6596238804369351,"sequenceIndex":389},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7835607672216225,"sequenceIndex":298},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8415844887785129,"sequenceIndex":232},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8757166685531299,"sequenceIndex":237},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2342925516152443,"sequenceIndex":490},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7402019512547878,"sequenceIndex":245},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5883632002621227,"sequenceIndex":63},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6196708066736747,"sequenceIndex":262},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.025424369282366,"sequenceIndex":496},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6589072084165932,"sequenceIndex":131},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0926876207678466,"sequenceIndex":32},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1651626814380498,"sequenceIndex":67},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5771022941666621,"sequenceIndex":498},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9482947892801286,"sequenceIndex":345},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6079754547814107,"sequenceIndex":140},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6598664471207536,"sequenceIndex":268},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1031839466001891,"sequenceIndex":286},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4738013536694838,"sequenceIndex":146},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4556560090087758,"sequenceIndex":469},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.317304268057739,"sequenceIndex":36},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.739202906964932,"sequenceIndex":367},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9836335458961952,"sequenceIndex":289},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5831027819302838,"sequenceIndex":371},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8505014450631332,"sequenceIndex":397},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.81707205613777,"sequenceIndex":432},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.018030933476338,"sequenceIndex":81},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.200994147392315,"sequenceIndex":41},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.927405907941931,"sequenceIndex":292},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2070053587751703,"sequenceIndex":168},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.008436711026636,"sequenceIndex":85},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4249422226679889,"sequenceIndex":172},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.247045440604137,"sequenceIndex":274},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1891911003330742,"sequenceIndex":22},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8121943865049618,"sequenceIndex":88},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6645661924231452,"sequenceIndex":501},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1699921366427941,"sequenceIndex":384},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9735225307485585,"sequenceIndex":23},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.156119441504946,"sequenceIndex":187},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.378172617263601,"sequenceIndex":189},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9469161774265586,"sequenceIndex":316},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8536012851132643,"sequenceIndex":313},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.004901508570201,"sequenceIndex":354},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1556358614616389,"sequenceIndex":196},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4881585903133916,"sequenceIndex":338},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0677478828307505,"sequenceIndex":200},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0019441617714018,"sequenceIndex":101},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.004231727502805,"sequenceIndex":102},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6417196573887232,"sequenceIndex":447},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.736972312593187,"sequenceIndex":340},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1361492591029285,"sequenceIndex":211},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2774215791774726,"sequenceIndex":318},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1532811625445163,"sequenceIndex":368},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5739810247797974,"sequenceIndex":217},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5574808554304629,"sequenceIndex":381},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6336126081969338,"sequenceIndex":220},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3246088376506033,"sequenceIndex":54},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6874212178829633,"sequenceIndex":113},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7544357202824347,"sequenceIndex":28},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.672675212675672,"sequenceIndex":57},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8937457778251758,"sequenceIndex":349},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9439509131329834,"sequenceIndex":276},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.1081171171026183,"sequenceIndex":235},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0231545214321711,"sequenceIndex":408},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9420367864872823,"sequenceIndex":337},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.54818111620672,"sequenceIndex":445},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7771613501236259,"sequenceIndex":312},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7540498321246341,"sequenceIndex":482},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0877472863191793,"sequenceIndex":122},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.443192236958581,"sequenceIndex":320},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1295521610200225,"sequenceIndex":125},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9531687663087562,"sequenceIndex":62},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6989185810432713,"sequenceIndex":127},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1038514213397277,"sequenceIndex":505},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.7270562367383846,"sequenceIndex":129},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.910991291695049,"sequenceIndex":130},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.1474169423933054,"sequenceIndex":412},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.1659533485121036,"sequenceIndex":132},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.998918707805815,"sequenceIndex":66},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.310839660859463,"sequenceIndex":426},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.0605741073444235,"sequenceIndex":346},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.1892455454172137,"sequenceIndex":136},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8192093440960706,"sequenceIndex":137},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-5.376668786217457,"sequenceIndex":138},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9696503776960315,"sequenceIndex":485},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.1140442601326415,"sequenceIndex":486},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6652507095793068,"sequenceIndex":141},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.0101793899146094,"sequenceIndex":355},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.6995412787881286,"sequenceIndex":511},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.21737737001588,"sequenceIndex":18},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-5.7779478313117885,"sequenceIndex":491},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6336744480474392,"sequenceIndex":493},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.9409929767340826,"sequenceIndex":364},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7117544659789883,"sequenceIndex":74},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.732460432029655,"sequenceIndex":328},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4320288625574447,"sequenceIndex":150},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.010994980181598,"sequenceIndex":504},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.045540460205551,"sequenceIndex":152},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.830369937787712,"sequenceIndex":304},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6337327314262187,"sequenceIndex":154},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6943921359564573,"sequenceIndex":488},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.557206600273184,"sequenceIndex":39},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8962382419288457,"sequenceIndex":386},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.0899776308947193,"sequenceIndex":78},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8359919612238793,"sequenceIndex":263},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6190933285739375,"sequenceIndex":80},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0486132895502218,"sequenceIndex":160},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.5865501380872873,"sequenceIndex":416},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.0624639559775275,"sequenceIndex":163},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.462196004625526,"sequenceIndex":82},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4509467502693236,"sequenceIndex":423},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2011186231392106,"sequenceIndex":83},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.912212677148474,"sequenceIndex":167},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.7045321782397487,"sequenceIndex":42},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.118261664182013,"sequenceIndex":421},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.587836187478853,"sequenceIndex":427},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4810111579170382,"sequenceIndex":282},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.9663465891790968,"sequenceIndex":43},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.674787368742149,"sequenceIndex":342},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.2885484442518744,"sequenceIndex":360},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.988793339581894,"sequenceIndex":454},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3002302509286525,"sequenceIndex":471},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-5.309286109630986,"sequenceIndex":460},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.1737529796148483,"sequenceIndex":178},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5101216566350044,"sequenceIndex":179},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.326261569309607,"sequenceIndex":45},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.9883359391068183,"sequenceIndex":181},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.25442971400138,"sequenceIndex":182},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8805692423702236,"sequenceIndex":91},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.8842561090332564,"sequenceIndex":441},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6831091332771628,"sequenceIndex":290},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.8685973933428226,"sequenceIndex":369},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-6.9635238911519135,"sequenceIndex":510},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5271005443815764,"sequenceIndex":331},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.4463080342211225,"sequenceIndex":358},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.042219541290324,"sequenceIndex":95},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-5.576914764258305,"sequenceIndex":341},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1235473657285657,"sequenceIndex":24},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.568975252271182,"sequenceIndex":417},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.402409229492409,"sequenceIndex":194},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.19302545181296,"sequenceIndex":195},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.2212411023445013,"sequenceIndex":405},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.7912282599796816,"sequenceIndex":197},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8444390608508512,"sequenceIndex":359},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.8039251585122553,"sequenceIndex":266},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.276868851579088,"sequenceIndex":25},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5207957925520603,"sequenceIndex":201},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.824231075869197,"sequenceIndex":202},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4903602592252072,"sequenceIndex":351},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.772465877085266,"sequenceIndex":379},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.933563226114014,"sequenceIndex":319},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.0967212897636305,"sequenceIndex":425},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.9616538412186935,"sequenceIndex":207},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.552143222511736,"sequenceIndex":26},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.53538602580665,"sequenceIndex":261},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.559480096679402,"sequenceIndex":105},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7987126515037761,"sequenceIndex":210},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.602828348473881,"sequenceIndex":394},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.419150184492356,"sequenceIndex":479},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.344252599090334,"sequenceIndex":214},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8169045288584176,"sequenceIndex":347},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.37672525507425,"sequenceIndex":27},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6621640068620755,"sequenceIndex":357},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7532143220215395,"sequenceIndex":259},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.597227045126382,"sequenceIndex":219},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9893358748494707,"sequenceIndex":110},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.906266822928178,"sequenceIndex":221},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.1634819164066874,"sequenceIndex":396},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.7709329647478573,"sequenceIndex":288},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2432522935945314,"sequenceIndex":56},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9385073713148706,"sequenceIndex":273},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6387164137538741,"sequenceIndex":226},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.2239436500365457,"sequenceIndex":227},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.493043227184877,"sequenceIndex":114},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.1253454164768706,"sequenceIndex":272},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.660888282727256,"sequenceIndex":115},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9011400825106535,"sequenceIndex":455},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.092421439965387,"sequenceIndex":363},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.33470380618227,"sequenceIndex":434},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.7167450284705437,"sequenceIndex":234},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.277295429809065,"sequenceIndex":299},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.087788416685804,"sequenceIndex":362},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.74107650253101,"sequenceIndex":464},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.270442970209395,"sequenceIndex":238},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.4690793646428317,"sequenceIndex":451},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.4537901338052603,"sequenceIndex":120},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.214057342683148,"sequenceIndex":431},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.767681865840804,"sequenceIndex":15},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.8973845429550282,"sequenceIndex":456},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.0217397823841816,"sequenceIndex":61},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8296760411662529,"sequenceIndex":271},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.433406017071492,"sequenceIndex":356},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.1344332795768386,"sequenceIndex":128},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.9782894876903323,"sequenceIndex":248},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7943791195648904,"sequenceIndex":30},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.300922830791807,"sequenceIndex":264},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2993061400412649,"sequenceIndex":251},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.765674231917039,"sequenceIndex":415},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3620395629105395,"sequenceIndex":333},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9438948781561887,"sequenceIndex":2},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8923263168523081,"sequenceIndex":255},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6772122219440821,"sequenceIndex":509}],"sampleSize":256,"lambda":3.90625E-4,"random":{},"entriesSeen":512},"tree":{"storeSequenceIndexesEnabled":false,"centerOfMassEnabled":false,"random":{}}},{"sampler":{"weightedSamples":[{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.49178394783537105,"sequenceIndex":203},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.515031634389807,"sequenceIndex":380},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.4979383775663946,"sequenceIndex":306},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5177735335622691,"sequenceIndex":389},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5195678941022348,"sequenceIndex":407},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5066024598709726,"sequenceIndex":386},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5023665878047426,"sequenceIndex":61},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5427485546787104,"sequenceIndex":134},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.531756566624228,"sequenceIndex":39},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5531479610430537,"sequenceIndex":20},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5815706446048037,"sequenceIndex":320},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6831644469176003,"sequenceIndex":436},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5472739134372002,"sequenceIndex":223},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.533187361147581,"sequenceIndex":59},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5065941826317435,"sequenceIndex":452},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5789085315431689,"sequenceIndex":458},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6128543429806687,"sequenceIndex":69},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5730018901422915,"sequenceIndex":314},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5618788986122074,"sequenceIndex":38},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6977987539322109,"sequenceIndex":41},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7861142031242656,"sequenceIndex":85},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6075481054870976,"sequenceIndex":89},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8479937129528703,"sequenceIndex":188},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6972040313366328,"sequenceIndex":196},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.844626448107801,"sequenceIndex":482},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6322600486015657,"sequenceIndex":469},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7294877939319426,"sequenceIndex":497},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7434984026290476,"sequenceIndex":115},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5522654720544814,"sequenceIndex":119},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5268908819231387,"sequenceIndex":418},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5247644712316228,"sequenceIndex":15},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5952483279212435,"sequenceIndex":439},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8049002656833699,"sequenceIndex":339},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6886750062413588,"sequenceIndex":316},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9846194931491524,"sequenceIndex":141},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2239388406401424,"sequenceIndex":391},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.646968397260591,"sequenceIndex":427},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8130520420630305,"sequenceIndex":153},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.70494736019933,"sequenceIndex":79},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9168788257773521,"sequenceIndex":161},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.74294526612418,"sequenceIndex":332},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9656873259867355,"sequenceIndex":171},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3563166615724356,"sequenceIndex":435},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.73410400223902,"sequenceIndex":431},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9779617564450184,"sequenceIndex":44},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9860748848916709,"sequenceIndex":363},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0528666503749515,"sequenceIndex":94},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8811425658278259,"sequenceIndex":289},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8270741330057186,"sequenceIndex":449},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8905288439636359,"sequenceIndex":472},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4556994044140694,"sequenceIndex":103},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0097385083215342,"sequenceIndex":52},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7031768195465843,"sequenceIndex":106},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.932460481799264,"sequenceIndex":54},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8050213953890998,"sequenceIndex":27},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0852686120866595,"sequenceIndex":328},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8522867367925954,"sequenceIndex":231},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5559434684996524,"sequenceIndex":233},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.596914089917061,"sequenceIndex":238},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6498517026992696,"sequenceIndex":30},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6216132882598957,"sequenceIndex":459},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5431361578763585,"sequenceIndex":125},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5360002986292752,"sequenceIndex":253},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6126025750941504,"sequenceIndex":473},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5974955176847465,"sequenceIndex":441},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5719930275001213,"sequenceIndex":301},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8083675122865674,"sequenceIndex":135},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7570313074670317,"sequenceIndex":136},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8292862891276357,"sequenceIndex":258},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5011293971555808,"sequenceIndex":463},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1264690703305091,"sequenceIndex":350},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.679236158005254,"sequenceIndex":144},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.3568676459005458,"sequenceIndex":372},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9460750238234621,"sequenceIndex":383},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.139083785086284,"sequenceIndex":150},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.11074790937139,"sequenceIndex":433},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8588475086331487,"sequenceIndex":77},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.9606491434647615,"sequenceIndex":78},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.5337954685414883,"sequenceIndex":158},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1241272316140736,"sequenceIndex":81},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9868656821033481,"sequenceIndex":163},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8984313893141953,"sequenceIndex":423},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7936611417814303,"sequenceIndex":504},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0318366427154053,"sequenceIndex":317},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1275388964063415,"sequenceIndex":268},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5571278897727396,"sequenceIndex":173},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4025199886831592,"sequenceIndex":416},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8665407010410386,"sequenceIndex":177},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7483492381282513,"sequenceIndex":312},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.247871071191955,"sequenceIndex":486},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4072768849296255,"sequenceIndex":269},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1448419944445076,"sequenceIndex":184},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4668571725871746,"sequenceIndex":443},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5456754270470705,"sequenceIndex":456},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.42335173053859,"sequenceIndex":191},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5276866266248663,"sequenceIndex":96},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9149857848960781,"sequenceIndex":48},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5226299310934939,"sequenceIndex":99},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2189028271935793,"sequenceIndex":279},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.914950751294563,"sequenceIndex":201},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.967053994519786,"sequenceIndex":499},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8335337526068565,"sequenceIndex":51},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.0123834147116044,"sequenceIndex":381},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3872150842312718,"sequenceIndex":209},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.230160153810486,"sequenceIndex":319},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1686133843403286,"sequenceIndex":213},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6522983143338388,"sequenceIndex":287},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0173315378113048,"sequenceIndex":331},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.028414730887753,"sequenceIndex":109},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.523467484351807,"sequenceIndex":221},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5405603259567477,"sequenceIndex":360},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6828069955847673,"sequenceIndex":112},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1318379388587168,"sequenceIndex":227},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.922460275226691,"sequenceIndex":412},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.195912767022347,"sequenceIndex":451},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7108450692967874,"sequenceIndex":28},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8931351008777817,"sequenceIndex":437},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6038785389525957,"sequenceIndex":58},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6969283840975413,"sequenceIndex":296},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.29548172824379,"sequenceIndex":370},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9875837150542913,"sequenceIndex":243},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9642493990465841,"sequenceIndex":245},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0494804505190465,"sequenceIndex":349},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2719314499287573,"sequenceIndex":455},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9946140049249316,"sequenceIndex":405},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5976677868179228,"sequenceIndex":432},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0052824453713445,"sequenceIndex":345},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6885480674108291,"sequenceIndex":509},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7573167685917037,"sequenceIndex":128},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.775979049077177,"sequenceIndex":64},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7345012889409268,"sequenceIndex":502},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.399594102614303,"sequenceIndex":66},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.4262281319464596,"sequenceIndex":303},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3415119129961588,"sequenceIndex":33},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.2104753886140354,"sequenceIndex":464},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.1132829450538844,"sequenceIndex":34},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.049584280151372,"sequenceIndex":5},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0692790344268963,"sequenceIndex":68},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.057011503345174,"sequenceIndex":281},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.720995480653709,"sequenceIndex":70},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.30859284464909,"sequenceIndex":492},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.7516403166696506,"sequenceIndex":35},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1271772269747335,"sequenceIndex":313},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.069513947679671,"sequenceIndex":18},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.3510499412498964,"sequenceIndex":369},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.0317379702358824,"sequenceIndex":146},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.843812408596074,"sequenceIndex":147},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.7274099835731334,"sequenceIndex":74},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.567178146418383,"sequenceIndex":148},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2006355040400185,"sequenceIndex":37},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.8956432799667415,"sequenceIndex":256},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.500792208358161,"sequenceIndex":152},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1624229343708594,"sequenceIndex":9},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0734274061973634,"sequenceIndex":308},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.1952946639451407,"sequenceIndex":155},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.379818802502551,"sequenceIndex":4},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.5519614180868238,"sequenceIndex":157},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.5957091300068122,"sequenceIndex":444},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.001369154160978,"sequenceIndex":159},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2841591681056264,"sequenceIndex":80},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2525082662188205,"sequenceIndex":325},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.736860786909597,"sequenceIndex":162},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1865332736235763,"sequenceIndex":1},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.3588317215553163,"sequenceIndex":82},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.106785597527102,"sequenceIndex":271},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.070179719580513,"sequenceIndex":166},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.6883857160647864,"sequenceIndex":471},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.115943303004396,"sequenceIndex":21},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7280157668114555,"sequenceIndex":299},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7099370957827753,"sequenceIndex":490},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3843634377095704,"sequenceIndex":461},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.6631312463499053,"sequenceIndex":43},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.253946213764769,"sequenceIndex":257},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4485165163516716,"sequenceIndex":87},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6155849851994584,"sequenceIndex":292},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.740214993280308,"sequenceIndex":11},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4727589157810117,"sequenceIndex":495},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3748143814056375,"sequenceIndex":88},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.832987861763318,"sequenceIndex":415},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.8898662426542185,"sequenceIndex":180},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4799616424185231,"sequenceIndex":181},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5065839298555959,"sequenceIndex":318},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.435669085187242,"sequenceIndex":388},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.795322695165546,"sequenceIndex":446},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.3355503921408207,"sequenceIndex":185},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.2942991375469806,"sequenceIndex":333},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.603810767067891,"sequenceIndex":187},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6316388358244387,"sequenceIndex":47},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.663911486678513,"sequenceIndex":189},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.567508526316469,"sequenceIndex":95},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8978497446648568,"sequenceIndex":429},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.090585385910482,"sequenceIndex":385},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.640083125063015,"sequenceIndex":193},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2695159823594306,"sequenceIndex":194},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4704118456522934,"sequenceIndex":404},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.017769041055218,"sequenceIndex":98},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5649853372682094,"sequenceIndex":510},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6094099105763175,"sequenceIndex":49},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9127181747166835,"sequenceIndex":266},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.962885721895108,"sequenceIndex":50},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7573388082959112,"sequenceIndex":493},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.393397786119992,"sequenceIndex":409},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5835187048029606,"sequenceIndex":434},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.2759880091624334,"sequenceIndex":367},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.4803419773226874,"sequenceIndex":205},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.5799214875576406,"sequenceIndex":364},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.419468061237504,"sequenceIndex":334},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.574948223373913,"sequenceIndex":13},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.351455964751925,"sequenceIndex":208},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.453442193315547,"sequenceIndex":210},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3287037966648567,"sequenceIndex":211},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.0902388968051997,"sequenceIndex":212},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.457372578187132,"sequenceIndex":53},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.965865195121767,"sequenceIndex":107},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.2386403114946063,"sequenceIndex":215},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.409421802891047,"sequenceIndex":216},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.5265146226170194,"sequenceIndex":217},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1159369512186559,"sequenceIndex":218},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5515003592046648,"sequenceIndex":219},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.414045130657892,"sequenceIndex":220},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8540053343614944,"sequenceIndex":457},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.275578558584556,"sequenceIndex":222},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.367172949906112,"sequenceIndex":373},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.618760350637668,"sequenceIndex":7},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.840166673824879,"sequenceIndex":225},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8266218777915304,"sequenceIndex":113},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4140157115907646,"sequenceIndex":224},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.697421691694783,"sequenceIndex":114},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.8531068592803384,"sequenceIndex":229},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.5997845269157933,"sequenceIndex":56},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4419391060929139,"sequenceIndex":230},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.886540640373062,"sequenceIndex":232},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.0972652853047347,"sequenceIndex":479},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.6519590143872573,"sequenceIndex":346},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9644040000163494,"sequenceIndex":235},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9255516200926706,"sequenceIndex":353},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9177059667328684,"sequenceIndex":237},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.4692437362432056,"sequenceIndex":365},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.2240521764925787,"sequenceIndex":496},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.622406882790635,"sequenceIndex":478},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9836205786459828,"sequenceIndex":259},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.888019245992226,"sequenceIndex":242},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.6577002836149126,"sequenceIndex":414},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8853473428973424,"sequenceIndex":321},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-5.499229556564067,"sequenceIndex":508},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2362037832556985,"sequenceIndex":411},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8166585262956088,"sequenceIndex":295},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.175441342638713,"sequenceIndex":124},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4291596747124644,"sequenceIndex":394},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0768515905423919,"sequenceIndex":250},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6015269460104569,"sequenceIndex":470},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.344995404011268,"sequenceIndex":284},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.364982034151774,"sequenceIndex":413},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7553721041151396,"sequenceIndex":270},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.4750196713306805,"sequenceIndex":255},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2444055615232008,"sequenceIndex":512}],"sampleSize":256,"lambda":3.90625E-4,"random":{},"entriesSeen":512},"tree":{"storeSequenceIndexesEnabled":false,"centerOfMassEnabled":false,"random":{}}},{"sampler":{"weightedSamples":[{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5002513989052614,"sequenceIndex":465},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5052019799725902,"sequenceIndex":82},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5012684293382467,"sequenceIndex":253},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5339311866410741,"sequenceIndex":440},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5295296729567297,"sequenceIndex":23},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5140253999030949,"sequenceIndex":207},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5231682935557783,"sequenceIndex":127},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5460816582811427,"sequenceIndex":71},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5544985623581493,"sequenceIndex":394},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6153051714507074,"sequenceIndex":40},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5469396595139193,"sequenceIndex":92},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5257885429396376,"sequenceIndex":435},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5140447165709725,"sequenceIndex":456},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5657933498366777,"sequenceIndex":113},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5264881958765563,"sequenceIndex":341},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6515122253100539,"sequenceIndex":4},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6056902748581363,"sequenceIndex":33},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5654091219891548,"sequenceIndex":147},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5678616772226973,"sequenceIndex":159},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8257581106911485,"sequenceIndex":41},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6376285105181074,"sequenceIndex":168},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6170047066120213,"sequenceIndex":379},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6722743723361397,"sequenceIndex":47},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5533654354222212,"sequenceIndex":328},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6800967695987692,"sequenceIndex":206},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5834458220289322,"sequenceIndex":52},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.555736016683024,"sequenceIndex":55},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7277951465946569,"sequenceIndex":271},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6904930457854759,"sequenceIndex":366},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5465924069461956,"sequenceIndex":451},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6119872311900408,"sequenceIndex":126},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7877176007283478,"sequenceIndex":505},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6592655333736693,"sequenceIndex":67},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.677405306341263,"sequenceIndex":409},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6539072696739472,"sequenceIndex":429},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8440401366150604,"sequenceIndex":146},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7328099827507288,"sequenceIndex":37},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9882725320670483,"sequenceIndex":152},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9336423026002105,"sequenceIndex":322},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9900653296167775,"sequenceIndex":163},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9394528496361125,"sequenceIndex":410},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8011201330529981,"sequenceIndex":171},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0047403121792997,"sequenceIndex":454},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6776501512903338,"sequenceIndex":386},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9216222065114452,"sequenceIndex":180},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0296422592784085,"sequenceIndex":308},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8560516033483953,"sequenceIndex":391},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7081795190116004,"sequenceIndex":425},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6184923844560283,"sequenceIndex":264},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7398888726665582,"sequenceIndex":358},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9617843936272263,"sequenceIndex":354},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5836126442150178,"sequenceIndex":296},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7237079567604527,"sequenceIndex":106},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6278405493954857,"sequenceIndex":216},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.565501541202847,"sequenceIndex":317},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8119923027971202,"sequenceIndex":420},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7910050415599703,"sequenceIndex":342},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8818208882512109,"sequenceIndex":352},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8533583140044536,"sequenceIndex":282},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5768440795029163,"sequenceIndex":241},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9266592864067289,"sequenceIndex":331},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6592204776318296,"sequenceIndex":124},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6451440245271826,"sequenceIndex":63},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1112616062650098,"sequenceIndex":500},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4399348171030364,"sequenceIndex":377},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6801739672840708,"sequenceIndex":133},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7697413211097687,"sequenceIndex":418},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2336645955013974,"sequenceIndex":385},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.266553698604022,"sequenceIndex":347},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.401950302916341,"sequenceIndex":140},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7851752298052325,"sequenceIndex":444},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0835681560424728,"sequenceIndex":402},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1459316160785695,"sequenceIndex":73},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7878292113587726,"sequenceIndex":148},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9632716958248841,"sequenceIndex":343},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1056860555098305,"sequenceIndex":19},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5877784168643712,"sequenceIndex":288},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2827244894862093,"sequenceIndex":371},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3702401223812042,"sequenceIndex":422},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3437525368669976,"sequenceIndex":160},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.662225327751824,"sequenceIndex":327},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.068672890186903,"sequenceIndex":20},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9562761527644588,"sequenceIndex":315},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9340705293485084,"sequenceIndex":403},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8317666749219775,"sequenceIndex":85},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.605619711255208,"sequenceIndex":439},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5566241298205947,"sequenceIndex":175},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9578724532379994,"sequenceIndex":176},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3157033867862398,"sequenceIndex":362},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0422042278781658,"sequenceIndex":369},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8146013639231264,"sequenceIndex":45},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.076957457033655,"sequenceIndex":46},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0713153585137563,"sequenceIndex":479},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3896594947980938,"sequenceIndex":189},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1242491026776529,"sequenceIndex":191},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.343789836513835,"sequenceIndex":192},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.786013409428125,"sequenceIndex":359},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7835230854611983,"sequenceIndex":197},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.198030070993287,"sequenceIndex":349},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9143327700626983,"sequenceIndex":24},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9764356341029975,"sequenceIndex":339},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0741998428696187,"sequenceIndex":51},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9917651940791633,"sequenceIndex":481},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1474873566431807,"sequenceIndex":443},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3954843125209453,"sequenceIndex":16},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.0538134420361494,"sequenceIndex":324},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8479271478569783,"sequenceIndex":419},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6323054128961929,"sequenceIndex":471},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.802980569141209,"sequenceIndex":218},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2054385137514176,"sequenceIndex":220},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7340460138190863,"sequenceIndex":222},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8611596792633431,"sequenceIndex":3},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5000358419914421,"sequenceIndex":273},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2207800323039129,"sequenceIndex":114},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9770103712113692,"sequenceIndex":115},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0597791546865087,"sequenceIndex":233},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1745077942293354,"sequenceIndex":234},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0241076262622317,"sequenceIndex":59},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0944048715586217,"sequenceIndex":400},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6313784433422487,"sequenceIndex":417},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.0377394488689924,"sequenceIndex":60},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.043879691577617,"sequenceIndex":15},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0165189164473938,"sequenceIndex":319},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7324834808684366,"sequenceIndex":31},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8648487035392461,"sequenceIndex":250},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1815955162718363,"sequenceIndex":468},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7949738251555201,"sequenceIndex":316},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1845520138531367,"sequenceIndex":497},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.1512477415037,"sequenceIndex":309},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5072221074826482,"sequenceIndex":65},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.452455044120939,"sequenceIndex":489},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8851411206239213,"sequenceIndex":132},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.398383340752467,"sequenceIndex":421},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7245589449441354,"sequenceIndex":486},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2353821294749283,"sequenceIndex":326},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.818004639514033,"sequenceIndex":17},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-5.8372574979051555,"sequenceIndex":137},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.1187211048365766,"sequenceIndex":69},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.457612983297683,"sequenceIndex":504},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7784486871787557,"sequenceIndex":450},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.1186854498352234,"sequenceIndex":387},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.663944959806574,"sequenceIndex":142},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2340242497955118,"sequenceIndex":307},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4327456310989066,"sequenceIndex":9},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9634070923238847,"sequenceIndex":313},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3653349457114188,"sequenceIndex":477},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7640991958448433,"sequenceIndex":460},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5294170893564287,"sequenceIndex":390},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9787059553216757,"sequenceIndex":272},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.7934244646490187,"sequenceIndex":392},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.1581074060076872,"sequenceIndex":151},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7796095108659695,"sequenceIndex":483},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.857071601514786,"sequenceIndex":464},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7596394960491153,"sequenceIndex":77},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8019440774610118,"sequenceIndex":470},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.6928153855771715,"sequenceIndex":39},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.303226971422821,"sequenceIndex":314},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7477710919594107,"sequenceIndex":79},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8526931085432814,"sequenceIndex":432},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.555020040996792,"sequenceIndex":10},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.617094610797616,"sequenceIndex":161},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.2036379907714125,"sequenceIndex":298},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.5669622315146987,"sequenceIndex":491},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.560364188606136,"sequenceIndex":263},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6419453766993353,"sequenceIndex":165},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.762886887055983,"sequenceIndex":166},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.829684857064799,"sequenceIndex":472},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2659668660050885,"sequenceIndex":21},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0375911127656963,"sequenceIndex":434},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9350456296425942,"sequenceIndex":494},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1937409294885515,"sequenceIndex":266},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.667300002783286,"sequenceIndex":172},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.197342273227082,"sequenceIndex":415},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.747885226215343,"sequenceIndex":174},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.320627114060447,"sequenceIndex":333},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.842861585989165,"sequenceIndex":11},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.9221490732647872,"sequenceIndex":375},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6937883027638994,"sequenceIndex":89},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.245916574995067,"sequenceIndex":373},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.8978042359115883,"sequenceIndex":90},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5779726589027887,"sequenceIndex":469},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9273046631251063,"sequenceIndex":452},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.8532773629069177,"sequenceIndex":183},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.15995231723394,"sequenceIndex":428},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.304981003456822,"sequenceIndex":330},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.4160389600940486,"sequenceIndex":427},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7395132432772145,"sequenceIndex":459},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-5.946954562140609,"sequenceIndex":188},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.6758094968997916,"sequenceIndex":398},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.615258453048525,"sequenceIndex":338},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.411015730460442,"sequenceIndex":510},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.2800854821262786,"sequenceIndex":6},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.758502121836125,"sequenceIndex":193},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9646022773215046,"sequenceIndex":48},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.866767766105444,"sequenceIndex":195},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9313122492233026,"sequenceIndex":49},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9160012158756003,"sequenceIndex":196},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5375159314511246,"sequenceIndex":198},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6376288939358807,"sequenceIndex":199},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.007683042946602,"sequenceIndex":100},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.468716355428916,"sequenceIndex":407},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.9762925303855647,"sequenceIndex":202},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9831835993112124,"sequenceIndex":101},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6460979702755825,"sequenceIndex":488},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7220827983056997,"sequenceIndex":405},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.2769737778168055,"sequenceIndex":103},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.150227112002445,"sequenceIndex":416},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.081402099415411,"sequenceIndex":12},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.61498364690465,"sequenceIndex":335},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7565857304733823,"sequenceIndex":438},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.2321554937766,"sequenceIndex":211},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.2220377575004666,"sequenceIndex":53},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.054005397850871,"sequenceIndex":340},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2842760749891693,"sequenceIndex":370},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.6399729802168674,"sequenceIndex":311},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5465821559263455,"sequenceIndex":26},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7605112512903603,"sequenceIndex":336},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.858278986449094,"sequenceIndex":408},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.9661541224482932,"sequenceIndex":397},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.0319551816724526,"sequenceIndex":476},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.8162111480969925,"sequenceIndex":445},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8048816367454831,"sequenceIndex":111},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.1191035690385873,"sequenceIndex":261},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.924184942905256,"sequenceIndex":378},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9937708997611334,"sequenceIndex":274},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.3731010812769133,"sequenceIndex":329},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.3851660823396963,"sequenceIndex":384},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3370981568174176,"sequenceIndex":281},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.3774262821821464,"sequenceIndex":229},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0161064357144378,"sequenceIndex":461},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.0303763523100007,"sequenceIndex":231},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.229295265942868,"sequenceIndex":116},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.16803020451512,"sequenceIndex":430},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.714531860471205,"sequenceIndex":117},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.89017764503991,"sequenceIndex":345},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5379802094087018,"sequenceIndex":346},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.488918652111648,"sequenceIndex":237},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8659519057684093,"sequenceIndex":351},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.333137115602353,"sequenceIndex":393},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.9628014538217844,"sequenceIndex":120},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2204159398911558,"sequenceIndex":446},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.9684107798263777,"sequenceIndex":401},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.0084354907895348,"sequenceIndex":357},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.2061739423068265,"sequenceIndex":487},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8231935357855173,"sequenceIndex":300},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7908705807949599,"sequenceIndex":304},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.6159588637467333,"sequenceIndex":355},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.0947650022071294,"sequenceIndex":306},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4319667555541629,"sequenceIndex":275},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7074138335776656,"sequenceIndex":503},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.4733301775208125,"sequenceIndex":251},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9146354081148762,"sequenceIndex":508},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.5644679098988745,"sequenceIndex":449},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0633925417758758,"sequenceIndex":396},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.097168817432159,"sequenceIndex":490},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7360918350266983,"sequenceIndex":511}],"sampleSize":256,"lambda":3.90625E-4,"random":{},"entriesSeen":512},"tree":{"storeSequenceIndexesEnabled":false,"centerOfMassEnabled":false,"random":{}}},{"sampler":{"weightedSamples":[{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5248350308876331,"sequenceIndex":134},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5723678663268322,"sequenceIndex":36},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5462143906391562,"sequenceIndex":111},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5736485063983494,"sequenceIndex":454},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5885347967570621,"sequenceIndex":161},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5644351076462568,"sequenceIndex":196},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5462177481650456,"sequenceIndex":403},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6227528184838611,"sequenceIndex":136},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6844497590785706,"sequenceIndex":295},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6190463257510948,"sequenceIndex":323},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7092065652277438,"sequenceIndex":415},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5707636237927379,"sequenceIndex":313},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6353778911321729,"sequenceIndex":3},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5845762417535214,"sequenceIndex":114},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6014212632017717,"sequenceIndex":322},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6421793856467785,"sequenceIndex":17},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8817267436053886,"sequenceIndex":137},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8073149812390455,"sequenceIndex":461},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7820278935968178,"sequenceIndex":433},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6410411105214454,"sequenceIndex":392},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6510284555691834,"sequenceIndex":168},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8640710276222529,"sequenceIndex":453},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7256160045123144,"sequenceIndex":128},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6567572327582083,"sequenceIndex":347},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6105303648112809,"sequenceIndex":334},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6742134585562702,"sequenceIndex":442},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7269586632288145,"sequenceIndex":425},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6206079559207041,"sequenceIndex":298},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7126767588479452,"sequenceIndex":394},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7085073958693036,"sequenceIndex":61},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6326846765767141,"sequenceIndex":125},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7058590306886139,"sequenceIndex":507},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1505525804659655,"sequenceIndex":32},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0039074170966458,"sequenceIndex":16},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0431595622618373,"sequenceIndex":336},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0819397541256908,"sequenceIndex":144},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.819242096881022,"sequenceIndex":294},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9109802036652245,"sequenceIndex":494},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9575107404658355,"sequenceIndex":275},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3251023720756816,"sequenceIndex":338},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6955118133289078,"sequenceIndex":447},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9537433687731305,"sequenceIndex":21},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.71169545761316,"sequenceIndex":375},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8823186683073486,"sequenceIndex":179},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1531999336480583,"sequenceIndex":389},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8069829732,"sequenceIndex":185},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9987889208695824,"sequenceIndex":47},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8287142272413486,"sequenceIndex":290},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8277405566287881,"sequenceIndex":199},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.075207259717247,"sequenceIndex":465},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9633342283241372,"sequenceIndex":103},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0425360865152418,"sequenceIndex":208},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6748043576526003,"sequenceIndex":341},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2275414700097402,"sequenceIndex":435},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3979715537515396,"sequenceIndex":223},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6779261728495174,"sequenceIndex":224},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7209749422862202,"sequenceIndex":436},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7280497468863969,"sequenceIndex":235},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9261110863718439,"sequenceIndex":333},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9334496694299301,"sequenceIndex":242},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0610660291611145,"sequenceIndex":245},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0935007943543287,"sequenceIndex":124},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7291575160445449,"sequenceIndex":254},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7714190382712738,"sequenceIndex":486},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9240781911624576,"sequenceIndex":390},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3334905874770848,"sequenceIndex":132},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1577901470845144,"sequenceIndex":360},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2609441674188626,"sequenceIndex":69},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4166694795240364,"sequenceIndex":365},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.127569897963495,"sequenceIndex":140},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1047040319142005,"sequenceIndex":35},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3004864151889448,"sequenceIndex":450},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1090569779411814,"sequenceIndex":147},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4063101211026925,"sequenceIndex":148},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.217221959684327,"sequenceIndex":424},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1798193488710187,"sequenceIndex":19},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.677250147895251,"sequenceIndex":381},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.169926320105777,"sequenceIndex":346},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.262628719756861,"sequenceIndex":472},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3384878643350793,"sequenceIndex":504},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7230291972227816,"sequenceIndex":467},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5501172530479093,"sequenceIndex":269},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5646425109441944,"sequenceIndex":83},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9088220243728915,"sequenceIndex":428},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1119945979227328,"sequenceIndex":351},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8774678631697128,"sequenceIndex":43},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0184492133115952,"sequenceIndex":174},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.386050023338359,"sequenceIndex":177},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4653533809150232,"sequenceIndex":324},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5205289090204528,"sequenceIndex":181},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5748599052816374,"sequenceIndex":45},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.025401260003416,"sequenceIndex":23},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.346032142049385,"sequenceIndex":93},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0448110408030797,"sequenceIndex":362},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3395228204841874,"sequenceIndex":95},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9068095530710467,"sequenceIndex":397},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9642404836167222,"sequenceIndex":194},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0723973221760896,"sequenceIndex":451},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.319059087403,"sequenceIndex":99},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.324019233262144,"sequenceIndex":300},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4587627185801153,"sequenceIndex":202},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1413854004125457,"sequenceIndex":327},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8540672897457404,"sequenceIndex":464},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4469056184108149,"sequenceIndex":325},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.39066421876726,"sequenceIndex":211},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6479633761420047,"sequenceIndex":212},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4107760282578228,"sequenceIndex":452},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2388380901289129,"sequenceIndex":416},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.278718515222746,"sequenceIndex":372},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.829142953259742,"sequenceIndex":110},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5270971142808276,"sequenceIndex":314},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7237785247512937,"sequenceIndex":56},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.82753015085188,"sequenceIndex":113},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8807287495317249,"sequenceIndex":402},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4033609887738592,"sequenceIndex":231},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1666932480127106,"sequenceIndex":233},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0575936136693418,"sequenceIndex":279},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2392692837343815,"sequenceIndex":257},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0345304132256272,"sequenceIndex":457},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.3043622523654967,"sequenceIndex":266},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2507178253203544,"sequenceIndex":363},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0811938784892352,"sequenceIndex":291},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0960601669915648,"sequenceIndex":247},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4688604966528285,"sequenceIndex":391},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2064362660698107,"sequenceIndex":361},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7412604792957946,"sequenceIndex":63},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1951523006302929,"sequenceIndex":127},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8023056720458465,"sequenceIndex":495},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.598208719158489,"sequenceIndex":64},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.350624337403337,"sequenceIndex":65},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4020230938054536,"sequenceIndex":316},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5486659626489152,"sequenceIndex":487},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.698855473865404,"sequenceIndex":308},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5875163519577566,"sequenceIndex":463},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4570156090087898,"sequenceIndex":479},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.5149847819096927,"sequenceIndex":34},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7276490898265744,"sequenceIndex":508},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4205264264227988,"sequenceIndex":68},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.475384349971375,"sequenceIndex":293},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2104997847382148,"sequenceIndex":70},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.579045399357825,"sequenceIndex":141},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.150813621119193,"sequenceIndex":71},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.5029370159855975,"sequenceIndex":143},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.371134612472052,"sequenceIndex":387},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.637017497019791,"sequenceIndex":145},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9092105876242573,"sequenceIndex":288},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4422648097877848,"sequenceIndex":319},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9630554451239846,"sequenceIndex":74},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.971633752827694,"sequenceIndex":422},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-7.289868073597945,"sequenceIndex":75},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9569218583882424,"sequenceIndex":151},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.224437144135665,"sequenceIndex":152},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4786841681789153,"sequenceIndex":153},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8469307123796692,"sequenceIndex":440},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.815402981030696,"sequenceIndex":155},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-5.492870967537261,"sequenceIndex":39},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.0106882540648603,"sequenceIndex":278},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.614533895103961,"sequenceIndex":78},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5362280451805295,"sequenceIndex":259},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-5.055289405839548,"sequenceIndex":160},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.701856132221906,"sequenceIndex":462},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.1692244011438007,"sequenceIndex":318},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.1260566852868465,"sequenceIndex":353},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.056762788702066,"sequenceIndex":379},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.217202436865887,"sequenceIndex":410},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.656225244478179,"sequenceIndex":166},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.1321970732239937,"sequenceIndex":470},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.2259714141554428,"sequenceIndex":84},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.795477981932231,"sequenceIndex":169},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.2629493764298596,"sequenceIndex":445},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6438164114881582,"sequenceIndex":284},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.93218494730056,"sequenceIndex":172},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9182724677691663,"sequenceIndex":352},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5860103906721754,"sequenceIndex":87},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.367177925926457,"sequenceIndex":175},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-5.986212015117925,"sequenceIndex":176},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.5291913607712,"sequenceIndex":44},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8692335496582384,"sequenceIndex":88},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.2829918051140115,"sequenceIndex":368},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6305359918421014,"sequenceIndex":90},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.0402729990512922,"sequenceIndex":343},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.736460879408271,"sequenceIndex":182},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.0070707086974755,"sequenceIndex":366},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.0679797084907707,"sequenceIndex":92},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.7374563214905328,"sequenceIndex":482},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.1043518759853104,"sequenceIndex":186},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.8987530405974575,"sequenceIndex":187},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.0954121533955448,"sequenceIndex":488},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4130527305595262,"sequenceIndex":260},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.464577533541111,"sequenceIndex":190},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.340901236210182,"sequenceIndex":388},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.220217358267083,"sequenceIndex":96},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.257089749335829,"sequenceIndex":97},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.232737253496326,"sequenceIndex":12},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.830202528942534,"sequenceIndex":502},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5511926140415044,"sequenceIndex":98},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.6300563627931517,"sequenceIndex":197},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8825172896851772,"sequenceIndex":474},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9240767688646454,"sequenceIndex":458},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9735985563977139,"sequenceIndex":420},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4330770985575854,"sequenceIndex":201},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7507388747687989,"sequenceIndex":101},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.7827461972198484,"sequenceIndex":398},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9101178331074806,"sequenceIndex":204},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6112801447139344,"sequenceIndex":102},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-7.172279536416798,"sequenceIndex":206},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.781106870690471,"sequenceIndex":207},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9567964677188716,"sequenceIndex":52},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5827816374151815,"sequenceIndex":492},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.1844830777935984,"sequenceIndex":210},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.252803317870239,"sequenceIndex":105},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.070933769635768,"sequenceIndex":406},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7820351456299308,"sequenceIndex":213},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.8724041552282875,"sequenceIndex":214},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.514220737590013,"sequenceIndex":107},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.9381324079435864,"sequenceIndex":374},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.21176561550635,"sequenceIndex":407},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5722087658343686,"sequenceIndex":218},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.2547432357346313,"sequenceIndex":282},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.374597980798318,"sequenceIndex":220},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.837272591616831,"sequenceIndex":1},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.0361106762026275,"sequenceIndex":222},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.0859148062058006,"sequenceIndex":490},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.769202793705984,"sequenceIndex":28},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.404670778132997,"sequenceIndex":225},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.461367850442871,"sequenceIndex":419},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9838933232478444,"sequenceIndex":286},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.593228525612356,"sequenceIndex":29},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1303204163338787,"sequenceIndex":469},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.11183026406802,"sequenceIndex":115},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4133964056298067,"sequenceIndex":448},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.808678354819195,"sequenceIndex":232},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.0203694690109666,"sequenceIndex":14},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.167754103030759,"sequenceIndex":234},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9854282863115045,"sequenceIndex":417},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-8.850266281922636,"sequenceIndex":59},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.1278496890180953,"sequenceIndex":396},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.3119758225579883,"sequenceIndex":119},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0403373589543932,"sequenceIndex":280},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.3132157857894353,"sequenceIndex":120},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.885630161866249,"sequenceIndex":350},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4855434032731587,"sequenceIndex":7},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9284633688273154,"sequenceIndex":243},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3496391331701763,"sequenceIndex":122},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1386117029669145,"sequenceIndex":400},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.9328307037174377,"sequenceIndex":312},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-7.155042675678357,"sequenceIndex":355},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.893093422566238,"sequenceIndex":248},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8553718996346245,"sequenceIndex":249},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.6725292325914185,"sequenceIndex":340},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.2817881858806546,"sequenceIndex":276},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.8736829958449923,"sequenceIndex":252},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8884383087331984,"sequenceIndex":253},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9668087254001287,"sequenceIndex":310},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5888666449237279,"sequenceIndex":255},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.4058552915297655,"sequenceIndex":510}],"sampleSize":256,"lambda":3.90625E-4,"random":{},"entriesSeen":512},"tree":{"storeSequenceIndexesEnabled":false,"centerOfMassEnabled":false,"random":{}}},{"sampler":{"weightedSamples":[{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.47403196714226253,"sequenceIndex":213},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.4761201641618797,"sequenceIndex":504},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5293432143239618,"sequenceIndex":319},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.4889744340452282,"sequenceIndex":269},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.4770509345414727,"sequenceIndex":295},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6099597631671893,"sequenceIndex":49},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5361811615325505,"sequenceIndex":227},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5007702046377726,"sequenceIndex":139},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5949357208352063,"sequenceIndex":39},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6288313878825021,"sequenceIndex":439},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5979643760687395,"sequenceIndex":23},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6319369585789513,"sequenceIndex":96},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6446393244030565,"sequenceIndex":279},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5426616657966095,"sequenceIndex":116},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6284605928352625,"sequenceIndex":65},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.502308136972194,"sequenceIndex":512},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5817118249813611,"sequenceIndex":402},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8502229424660268,"sequenceIndex":477},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7209080488683592,"sequenceIndex":18},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8672772021107643,"sequenceIndex":476},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7963009888475316,"sequenceIndex":171},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7191395144721839,"sequenceIndex":10},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7356807755312359,"sequenceIndex":93},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7232814659912479,"sequenceIndex":356},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6893254789732187,"sequenceIndex":101},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6938555131744774,"sequenceIndex":326},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7966104303419567,"sequenceIndex":223},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.547536373064348,"sequenceIndex":231},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7545795671680648,"sequenceIndex":298},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6701676532060274,"sequenceIndex":397},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6483262387174957,"sequenceIndex":420},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5156086559552945,"sequenceIndex":433},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6339268891331751,"sequenceIndex":133},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6496128296432544,"sequenceIndex":442},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8908754263356597,"sequenceIndex":379},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8742984252844538,"sequenceIndex":37},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.952623487431557,"sequenceIndex":75},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0392457108120632,"sequenceIndex":395},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8510394991971562,"sequenceIndex":322},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9745400912579205,"sequenceIndex":413},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0864712967693229,"sequenceIndex":501},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8083794049164731,"sequenceIndex":346},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0649059874000888,"sequenceIndex":87},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7654097474265753,"sequenceIndex":179},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1564297979941358,"sequenceIndex":180},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0208106251237354,"sequenceIndex":184},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0177204002267286,"sequenceIndex":393},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4274212889201539,"sequenceIndex":12},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0373289637070424,"sequenceIndex":256},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0675480315630295,"sequenceIndex":203},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7027419432602352,"sequenceIndex":206},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9379820607531351,"sequenceIndex":327},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8964527233975126,"sequenceIndex":215},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8725867145902922,"sequenceIndex":216},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9591564592423588,"sequenceIndex":505},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8512170539061101,"sequenceIndex":461},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8220488653150649,"sequenceIndex":114},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8374298087525158,"sequenceIndex":297},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.761787743449249,"sequenceIndex":58},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7506425178968658,"sequenceIndex":121},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.702436781950313,"sequenceIndex":60},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7317443117566255,"sequenceIndex":125},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1827724123952785,"sequenceIndex":325},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5864935667232424,"sequenceIndex":333},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.847364712709977,"sequenceIndex":130},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8999307946595527,"sequenceIndex":390},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9297685883440617,"sequenceIndex":67},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7668928569032701,"sequenceIndex":137},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.121551626380294,"sequenceIndex":138},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0314920225716486,"sequenceIndex":140},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1722093903891309,"sequenceIndex":142},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0056551259369562,"sequenceIndex":481},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.557585639242022,"sequenceIndex":375},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2040917920988832,"sequenceIndex":36},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2740594007134398,"sequenceIndex":312},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.668853058777878,"sequenceIndex":383},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.249308232134304,"sequenceIndex":155},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.3513744427974363,"sequenceIndex":507},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1142127612899826,"sequenceIndex":401},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.070864227077064,"sequenceIndex":161},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1258277008046125,"sequenceIndex":338},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2342010096254141,"sequenceIndex":82},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4698493017472805,"sequenceIndex":166},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0163892974976008,"sequenceIndex":5},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1036463623312156,"sequenceIndex":380},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5102320917024485,"sequenceIndex":172},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2606240222769822,"sequenceIndex":258},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8443272607053663,"sequenceIndex":348},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7670238978672985,"sequenceIndex":178},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3546830787921516,"sequenceIndex":330},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2515091989047251,"sequenceIndex":182},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2689798793316502,"sequenceIndex":492},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.135384708412701,"sequenceIndex":92},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9867669435157354,"sequenceIndex":94},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.327126789848619,"sequenceIndex":95},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4478122096754187,"sequenceIndex":193},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5685811766931934,"sequenceIndex":97},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5496211052212487,"sequenceIndex":6},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1199581680394306,"sequenceIndex":98},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.0071577953044444,"sequenceIndex":200},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.607490347922515,"sequenceIndex":100},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7350767159041525,"sequenceIndex":431},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8761547316237218,"sequenceIndex":315},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0219957331335834,"sequenceIndex":317},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3171601857672124,"sequenceIndex":490},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.184273765279172,"sequenceIndex":482},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9566374478463543,"sequenceIndex":343},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9760349868821225,"sequenceIndex":287},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8935657562515373,"sequenceIndex":392},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1977885798571897,"sequenceIndex":324},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2665823989708762,"sequenceIndex":222},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8980152392715544,"sequenceIndex":14},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1510521152729214,"sequenceIndex":299},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.195420830356687,"sequenceIndex":229},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8851537750240338,"sequenceIndex":230},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0227929944480167,"sequenceIndex":414},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0464324221550378,"sequenceIndex":321},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1534640372126197,"sequenceIndex":236},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.393998430537716,"sequenceIndex":119},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3950090742166772,"sequenceIndex":341},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7918476502783556,"sequenceIndex":243},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8114920699521464,"sequenceIndex":122},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1989173364144408,"sequenceIndex":349},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9903576759920276,"sequenceIndex":31},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.827651524569804,"sequenceIndex":124},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.373806200499869,"sequenceIndex":253},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2118470409921958,"sequenceIndex":466},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5919297604792345,"sequenceIndex":468},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8912213741326505,"sequenceIndex":129},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2790943785533335,"sequenceIndex":418},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.562874430599606,"sequenceIndex":403},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.074404519653415,"sequenceIndex":32},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5385680279964546,"sequenceIndex":423},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.878040429540384,"sequenceIndex":134},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.2959257735090133,"sequenceIndex":135},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.5620814909207317,"sequenceIndex":17},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.347691966134,"sequenceIndex":323},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4689127093571377,"sequenceIndex":483},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.412223655966854,"sequenceIndex":362},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.0290495341143937,"sequenceIndex":458},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.088728259473719,"sequenceIndex":443},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4791738715019804,"sequenceIndex":503},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.032843367283536,"sequenceIndex":438},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.03378384211137,"sequenceIndex":9},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.375034109308345,"sequenceIndex":257},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8193989509550441,"sequenceIndex":73},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.989041152343621,"sequenceIndex":147},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3403679013703196,"sequenceIndex":388},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.945624696367644,"sequenceIndex":149},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.108409907716805,"sequenceIndex":150},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2840028829210333,"sequenceIndex":428},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7718615742382386,"sequenceIndex":19},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.862209065120442,"sequenceIndex":391},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.914887795349461,"sequenceIndex":1},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.445238327415378,"sequenceIndex":500},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.8811643048016378,"sequenceIndex":456},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-5.848156813400115,"sequenceIndex":157},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6998462213103176,"sequenceIndex":158},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.2119713555364813,"sequenceIndex":406},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.3816014333528694,"sequenceIndex":20},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.718967837077148,"sequenceIndex":465},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.270250050242825,"sequenceIndex":363},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-5.06502474096503,"sequenceIndex":290},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9914431182973351,"sequenceIndex":164},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4838274278036605,"sequenceIndex":262},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.096707512974246,"sequenceIndex":434},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6009907657321436,"sequenceIndex":260},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7465035490272605,"sequenceIndex":168},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2744177238869903,"sequenceIndex":358},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.1922849881818194,"sequenceIndex":430},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.7456234930374874,"sequenceIndex":469},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-5.274795711330053,"sequenceIndex":384},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6842917892834952,"sequenceIndex":173},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.086891631666707,"sequenceIndex":306},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.7399191624037225,"sequenceIndex":417},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.2994590318897727,"sequenceIndex":44},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8639016169244291,"sequenceIndex":176},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0302744830333104,"sequenceIndex":89},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.3484883119595343,"sequenceIndex":416},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.6194912648227953,"sequenceIndex":473},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5761449794517077,"sequenceIndex":181},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6558094422239038,"sequenceIndex":271},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.7260720610994125,"sequenceIndex":268},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.7614956852595935,"sequenceIndex":46},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8626956161538413,"sequenceIndex":415},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.6143254735052266,"sequenceIndex":411},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1707935851190387,"sequenceIndex":354},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.1542923301120185,"sequenceIndex":460},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-5.984345713716033,"sequenceIndex":189},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.6481576083492975,"sequenceIndex":270},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5437521087639359,"sequenceIndex":191},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6987717545599486,"sequenceIndex":48},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.9247547910313854,"sequenceIndex":511},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.604655697642882,"sequenceIndex":194},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-7.219005143643359,"sequenceIndex":195},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5713396263898518,"sequenceIndex":196},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.510269234179218,"sequenceIndex":289},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.668284429151234,"sequenceIndex":396},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.8939268862692535,"sequenceIndex":199},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.140055155699046,"sequenceIndex":25},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.215031224581435,"sequenceIndex":440},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.0248960277239854,"sequenceIndex":467},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.4199581245186055,"sequenceIndex":329},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.57567172525451,"sequenceIndex":204},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6233556334609003,"sequenceIndex":205},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.0525544714791817,"sequenceIndex":364},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.5815949667792806,"sequenceIndex":455},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6861115810301348,"sequenceIndex":13},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.8518419964682655,"sequenceIndex":209},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3916376310284304,"sequenceIndex":210},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.854062952245905,"sequenceIndex":385},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5499581265460958,"sequenceIndex":302},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.371000795762826,"sequenceIndex":422},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.948204487851163,"sequenceIndex":497},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9180499590893556,"sequenceIndex":421},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4960871905288564,"sequenceIndex":26},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.757582561394642,"sequenceIndex":479},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9159696073976173,"sequenceIndex":394},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.5597610535731112,"sequenceIndex":219},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.1481806908002876,"sequenceIndex":220},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3988022459807987,"sequenceIndex":281},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.5004520259985967,"sequenceIndex":407},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.1692102901697106,"sequenceIndex":352},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.519480255395899,"sequenceIndex":3},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8060789693314425,"sequenceIndex":225},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.271552479257223,"sequenceIndex":113},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.7735628077606096,"sequenceIndex":437},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2357918244021948,"sequenceIndex":57},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4683793547026098,"sequenceIndex":294},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.88308411977074,"sequenceIndex":486},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2589373652996887,"sequenceIndex":373},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8979925253708976,"sequenceIndex":29},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0445717687444063,"sequenceIndex":233},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5638263523650702,"sequenceIndex":117},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5853147765748785,"sequenceIndex":452},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.81347855315887,"sequenceIndex":498},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3420332201009257,"sequenceIndex":320},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.363113801828704,"sequenceIndex":238},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-5.599924642374273,"sequenceIndex":445},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.1280809904362092,"sequenceIndex":15},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7851268420913327,"sequenceIndex":309},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8122167188527443,"sequenceIndex":457},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.19950847384845,"sequenceIndex":494},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.7777121731952796,"sequenceIndex":427},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.337284599209632,"sequenceIndex":368},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3876393828056397,"sequenceIndex":471},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7128685801959338,"sequenceIndex":128},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0740648628311296,"sequenceIndex":248},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.067556895209981,"sequenceIndex":249},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0544129191851086,"sequenceIndex":459},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-5.8132618109110785,"sequenceIndex":389},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8564012880776797,"sequenceIndex":252},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.2494210219667123,"sequenceIndex":451},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9874156905227163,"sequenceIndex":313},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.778299383833872,"sequenceIndex":255},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6237760302552692,"sequenceIndex":506}],"sampleSize":256,"lambda":3.90625E-4,"random":{},"entriesSeen":512},"tree":{"storeSequenceIndexesEnabled":false,"centerOfMassEnabled":false,"random":{}}},{"sampler":{"weightedSamples":[{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5010865874662669,"sequenceIndex":307},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5283647435569528,"sequenceIndex":93},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5059206878405591,"sequenceIndex":377},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5540523176798509,"sequenceIndex":133},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5549925352563355,"sequenceIndex":40},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5244886347379383,"sequenceIndex":282},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5164754830198399,"sequenceIndex":296},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5730650629034968,"sequenceIndex":445},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6027668838768496,"sequenceIndex":437},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5856156180559691,"sequenceIndex":310},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5759013723556802,"sequenceIndex":89},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5946686816382848,"sequenceIndex":280},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5255260556013924,"sequenceIndex":223},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5189054635222692,"sequenceIndex":358},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.570972875358672,"sequenceIndex":313},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.580557741360928,"sequenceIndex":347},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5883059534174215,"sequenceIndex":430},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7198486696057091,"sequenceIndex":148},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6052453845471591,"sequenceIndex":39},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7889525057927912,"sequenceIndex":167},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6119642500544846,"sequenceIndex":175},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7444096875779714,"sequenceIndex":182},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6188073085442549,"sequenceIndex":22},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7077407849196138,"sequenceIndex":192},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7382933641343132,"sequenceIndex":429},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6673417269817522,"sequenceIndex":395},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6978896185201989,"sequenceIndex":219},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5424980691533576,"sequenceIndex":227},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7048791282291937,"sequenceIndex":58},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6348615346477751,"sequenceIndex":380},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7094851537564415,"sequenceIndex":312},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6640989292455921,"sequenceIndex":497},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6137869406689809,"sequenceIndex":375},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0629979116228687,"sequenceIndex":348},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7253522531537614,"sequenceIndex":256},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8857098139263122,"sequenceIndex":37},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9463529974431752,"sequenceIndex":291},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.913895842440654,"sequenceIndex":76},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6978661482059303,"sequenceIndex":9},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.238404574711743,"sequenceIndex":293},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0241531140448277,"sequenceIndex":372},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0975010576224618,"sequenceIndex":168},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9677088045727748,"sequenceIndex":172},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.856296846424046,"sequenceIndex":11},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8025379702052986,"sequenceIndex":91},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7396236240032539,"sequenceIndex":387},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7205065085333846,"sequenceIndex":188},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7210238019018115,"sequenceIndex":12},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7089520056952681,"sequenceIndex":198},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4668948502919088,"sequenceIndex":434},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.006005266315025,"sequenceIndex":483},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6820137067624488,"sequenceIndex":265},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.698550358464332,"sequenceIndex":212},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7260451616802589,"sequenceIndex":216},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.727353396902102,"sequenceIndex":428},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7505170116124732,"sequenceIndex":14},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5946505530778132,"sequenceIndex":115},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7152343098966831,"sequenceIndex":340},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8151515846474962,"sequenceIndex":237},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9750113374306082,"sequenceIndex":443},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6754557256172349,"sequenceIndex":122},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2522302431936032,"sequenceIndex":397},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8093980143606323,"sequenceIndex":426},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6772176122561457,"sequenceIndex":457},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2580095162947817,"sequenceIndex":32},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9068852614009588,"sequenceIndex":132},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.986280028109186,"sequenceIndex":338},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4938110424918831,"sequenceIndex":136},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2335061109672745,"sequenceIndex":466},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0571650416878522,"sequenceIndex":71},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1614799239277525,"sequenceIndex":143},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.846169410127692,"sequenceIndex":73},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.4348603267081095,"sequenceIndex":36},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9504070333659737,"sequenceIndex":75},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.005040300001082,"sequenceIndex":74},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5513513896414495,"sequenceIndex":8},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2626436554646343,"sequenceIndex":341},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1162962604220212,"sequenceIndex":464},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8717989789705942,"sequenceIndex":433},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7330895697004773,"sequenceIndex":486},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6939744018898188,"sequenceIndex":162},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.255908969964736,"sequenceIndex":278},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3817884138330916,"sequenceIndex":510},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.410113824050407,"sequenceIndex":84},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.137788706447587,"sequenceIndex":288},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.049479071671016,"sequenceIndex":468},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1457340282582555,"sequenceIndex":290},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5689882625477092,"sequenceIndex":496},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7430971207395236,"sequenceIndex":390},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0530196159794492,"sequenceIndex":274},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.095926152097151,"sequenceIndex":508},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.05272623843487,"sequenceIndex":386},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1544706800380604,"sequenceIndex":187},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7552859386727017,"sequenceIndex":360},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.122275064502734,"sequenceIndex":95},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3718361055372013,"sequenceIndex":384},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.63989368585159,"sequenceIndex":452},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.738796960869088,"sequenceIndex":196},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.220411467433343,"sequenceIndex":48},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4762430111133267,"sequenceIndex":50},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6162214285904104,"sequenceIndex":482},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0445744419547178,"sequenceIndex":24},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1299814896127232,"sequenceIndex":484},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3045437616041884,"sequenceIndex":13},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.2618070933235273,"sequenceIndex":459},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1407300979987205,"sequenceIndex":272},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.837280891330197,"sequenceIndex":283},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1588215916236537,"sequenceIndex":27},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8176830565521569,"sequenceIndex":371},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9514123810509454,"sequenceIndex":221},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.627008349389556,"sequenceIndex":268},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3751934640958878,"sequenceIndex":504},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8951750199396505,"sequenceIndex":286},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2787788798822517,"sequenceIndex":381},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8238018818633566,"sequenceIndex":230},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8417816145651524,"sequenceIndex":232},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9153364754142271,"sequenceIndex":235},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1437819270639467,"sequenceIndex":236},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1429068254370964,"sequenceIndex":118},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0071404305533629,"sequenceIndex":471},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1229690482442818,"sequenceIndex":320},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.5916806422891314,"sequenceIndex":415},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9550800910122728,"sequenceIndex":123},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5839646752791627,"sequenceIndex":249},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4896532278568446,"sequenceIndex":125},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.155168951342704,"sequenceIndex":366},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9854561999284396,"sequenceIndex":473},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7332982684729812,"sequenceIndex":470},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.365636229232519,"sequenceIndex":128},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.844027459716879,"sequenceIndex":130},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6018349176839681,"sequenceIndex":65},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.0414202716422616,"sequenceIndex":66},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4671180267955923,"sequenceIndex":506},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5554798891581085,"sequenceIndex":4},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4407963922530094,"sequenceIndex":480},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.6162977804659002,"sequenceIndex":17},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.9252869090064677,"sequenceIndex":137},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.1182148965658367,"sequenceIndex":448},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4591321211997577,"sequenceIndex":413},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.7573962402544874,"sequenceIndex":70},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1846949802321902,"sequenceIndex":141},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.296430119025408,"sequenceIndex":34},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2777886937198795,"sequenceIndex":142},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.294046503986773,"sequenceIndex":72},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.332989713394109,"sequenceIndex":144},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.531722200212347,"sequenceIndex":146},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.313521889773207,"sequenceIndex":441},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6654910956074989,"sequenceIndex":18},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.690864154328227,"sequenceIndex":149},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.738440972687105,"sequenceIndex":150},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1138985500196044,"sequenceIndex":489},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.612562278476573,"sequenceIndex":152},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.0816625497320906,"sequenceIndex":450},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.1686044705215815,"sequenceIndex":77},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.4070333294749355,"sequenceIndex":345},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5992041320529469,"sequenceIndex":156},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.0714221328426334,"sequenceIndex":475},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5301551506399917,"sequenceIndex":79},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.918227624194914,"sequenceIndex":303},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.066785151234676,"sequenceIndex":80},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.0650121777935286,"sequenceIndex":455},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8425037822806514,"sequenceIndex":20},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.654426248400127,"sequenceIndex":163},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3580552967760922,"sequenceIndex":1},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2730380242878514,"sequenceIndex":266},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4989043574394796,"sequenceIndex":166},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6312046331798435,"sequenceIndex":502},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.6774933745179283,"sequenceIndex":21},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.21535935061256,"sequenceIndex":365},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.4439208779802466,"sequenceIndex":170},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7223232929043493,"sequenceIndex":85},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.6843863993365282,"sequenceIndex":86},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.2883078853682344,"sequenceIndex":173},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6302269832028609,"sequenceIndex":258},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1767633852635424,"sequenceIndex":446},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.8023555169638463,"sequenceIndex":328},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6335189919567525,"sequenceIndex":177},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.27809251331945,"sequenceIndex":462},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.3458661646931085,"sequenceIndex":129},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0620908443594053,"sequenceIndex":376},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.841525070805899,"sequenceIndex":420},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.6929887366669423,"sequenceIndex":488},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.306058071774053,"sequenceIndex":277},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.546308848037948,"sequenceIndex":424},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.411287017822044,"sequenceIndex":495},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5313077197499882,"sequenceIndex":318},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.535221611435818,"sequenceIndex":414},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8561881314501198,"sequenceIndex":94},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0493326512261212,"sequenceIndex":47},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7719554697168687,"sequenceIndex":190},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-6.44498482711013,"sequenceIndex":191},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.4047377439615865,"sequenceIndex":3},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.853381143685042,"sequenceIndex":411},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.610888707739604,"sequenceIndex":315},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.951344948779945,"sequenceIndex":308},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-6.971889586014228,"sequenceIndex":98},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1546186697079421,"sequenceIndex":197},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.008211597257842,"sequenceIndex":402},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.861908257009875,"sequenceIndex":362},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9784685790037846,"sequenceIndex":438},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.09988014836925,"sequenceIndex":287},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6898465642441185,"sequenceIndex":300},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.1355897828985873,"sequenceIndex":203},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9515946916030684,"sequenceIndex":102},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.6483558163930114,"sequenceIndex":305},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.089735613220531,"sequenceIndex":103},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3461197357308254,"sequenceIndex":346},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.0956399350439443,"sequenceIndex":355},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8594938718781384,"sequenceIndex":209},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.221381896329991,"sequenceIndex":105},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.5402566965443474,"sequenceIndex":264},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8005403841235441,"sequenceIndex":53},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.0781460422256526,"sequenceIndex":354},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9497029194771498,"sequenceIndex":321},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.5611429523537477,"sequenceIndex":215},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.865016177401685,"sequenceIndex":481},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.717698853263078,"sequenceIndex":217},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.835844944782672,"sequenceIndex":109},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.1570165825604466,"sequenceIndex":359},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.004013860633541,"sequenceIndex":55},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3868914176524416,"sequenceIndex":335},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.033868175582044,"sequenceIndex":111},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.06572907922179,"sequenceIndex":373},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.4131693757010457,"sequenceIndex":440},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7138709990568253,"sequenceIndex":394},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.565161024118278,"sequenceIndex":226},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5236029565237654,"sequenceIndex":447},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4596900168642086,"sequenceIndex":57},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.744895581705088,"sequenceIndex":403},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1901198900343195,"sequenceIndex":114},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5128881435082346,"sequenceIndex":314},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.1701988834750536,"sequenceIndex":116},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2840433584273803,"sequenceIndex":233},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0226570954636711,"sequenceIndex":317},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4725761178494496,"sequenceIndex":417},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.76088557467283,"sequenceIndex":59},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2753478114510306,"sequenceIndex":327},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6621884869232235,"sequenceIndex":271},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.2529548994499966,"sequenceIndex":239},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6368354087259505,"sequenceIndex":60},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.836989180808962,"sequenceIndex":241},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.0521610158630303,"sequenceIndex":121},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.505794906446189,"sequenceIndex":267},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.788336349834012,"sequenceIndex":244},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.6904678655311494,"sequenceIndex":451},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.165651269510456,"sequenceIndex":385},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.5529249169171715,"sequenceIndex":16},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.49779844040168,"sequenceIndex":124},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6298169008454555,"sequenceIndex":248},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.202048980373728,"sequenceIndex":436},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.251181549181952,"sequenceIndex":374},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2838188917685012,"sequenceIndex":63},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7873296778132821,"sequenceIndex":449},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.762539533347345,"sequenceIndex":472},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9997988253607173,"sequenceIndex":255},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9312326408305112,"sequenceIndex":512}],"sampleSize":256,"lambda":3.90625E-4,"random":{},"entriesSeen":512},"tree":{"storeSequenceIndexesEnabled":false,"centerOfMassEnabled":false,"random":{}}},{"sampler":{"weightedSamples":[{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.4708764704403767,"sequenceIndex":296},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.4742645460706711,"sequenceIndex":9},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5017109004441257,"sequenceIndex":376},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.4924918008878485,"sequenceIndex":431},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.49823480854171814,"sequenceIndex":308},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5137798859808531,"sequenceIndex":436},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5435733870273423,"sequenceIndex":430},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5556665846953192,"sequenceIndex":140},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5646538702333588,"sequenceIndex":367},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.49903928892907473,"sequenceIndex":432},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.49877332158463145,"sequenceIndex":399},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5521378216904419,"sequenceIndex":408},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5504874895882803,"sequenceIndex":314},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5595966900100735,"sequenceIndex":229},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5653207343367279,"sequenceIndex":252},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7085866351495349,"sequenceIndex":512},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5739263364047277,"sequenceIndex":279},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7413673999096855,"sequenceIndex":72},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7284355010253647,"sequenceIndex":155},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7919054677670823,"sequenceIndex":457},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.619890644984445,"sequenceIndex":417},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6904722310227175,"sequenceIndex":176},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.731578094301687,"sequenceIndex":282},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6206893968251296,"sequenceIndex":422},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.594421912416598,"sequenceIndex":50},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6007427108695695,"sequenceIndex":264},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.636808321308723,"sequenceIndex":455},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6087366714145387,"sequenceIndex":226},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5907266845178631,"sequenceIndex":239},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6849154214075792,"sequenceIndex":14},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7147426097475318,"sequenceIndex":416},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8368171215875903,"sequenceIndex":483},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8555199779250947,"sequenceIndex":291},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6799930072764816,"sequenceIndex":137},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2413869490503426,"sequenceIndex":35},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8148935236572874,"sequenceIndex":5},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2976205075816107,"sequenceIndex":375},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7497714632213948,"sequenceIndex":418},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0691789887701468,"sequenceIndex":397},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7931784890065817,"sequenceIndex":338},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1500779569898334,"sequenceIndex":20},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7190179968892811,"sequenceIndex":84},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.18239787795611,"sequenceIndex":87},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1263050766772629,"sequenceIndex":177},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.764129561410468,"sequenceIndex":467},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8193675085843619,"sequenceIndex":372},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0040700983556397,"sequenceIndex":190},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6825278050360724,"sequenceIndex":382},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9610042739148688,"sequenceIndex":463},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8215044780139593,"sequenceIndex":447},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7385844298693209,"sequenceIndex":434},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7306434296416265,"sequenceIndex":211},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1059556919811815,"sequenceIndex":106},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7147307345074965,"sequenceIndex":443},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8716316763791165,"sequenceIndex":378},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8554466315920297,"sequenceIndex":3},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8587423033461686,"sequenceIndex":419},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6198069466032818,"sequenceIndex":29},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6624392732268702,"sequenceIndex":368},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8380030318931962,"sequenceIndex":366},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.689130066206737,"sequenceIndex":123},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7519628217345914,"sequenceIndex":420},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2600604336293002,"sequenceIndex":126},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9694953921293037,"sequenceIndex":487},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3576728850651698,"sequenceIndex":64},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9054787939847432,"sequenceIndex":65},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5259198218748025,"sequenceIndex":396},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7257692899885801,"sequenceIndex":136},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.763073006807806,"sequenceIndex":348},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5864117509457443,"sequenceIndex":358},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9129894939937762,"sequenceIndex":142},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3335201313293303,"sequenceIndex":476},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3491451671949353,"sequenceIndex":73},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.876827381199239,"sequenceIndex":148},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4230475035014831,"sequenceIndex":471},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7788760165219623,"sequenceIndex":18},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.464106028568947,"sequenceIndex":295},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3297765229139582,"sequenceIndex":156},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1452580763266968,"sequenceIndex":262},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0735444219201076,"sequenceIndex":160},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2035608693839066,"sequenceIndex":162},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.807161270796184,"sequenceIndex":435},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.2631900518401724,"sequenceIndex":309},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2062238529000957,"sequenceIndex":21},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.46570354099532,"sequenceIndex":85},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2330812873422625,"sequenceIndex":289},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.1996508457207495,"sequenceIndex":258},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9329063078857516,"sequenceIndex":407},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5586239750159305,"sequenceIndex":179},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0016552811490138,"sequenceIndex":383},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8489740206228379,"sequenceIndex":182},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1258700382486018,"sequenceIndex":185},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8861727278757002,"sequenceIndex":92},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7761640075820118,"sequenceIndex":283},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2802677993308107,"sequenceIndex":414},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0584787620866423,"sequenceIndex":428},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8990538033021506,"sequenceIndex":195},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5711118189173587,"sequenceIndex":365},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4332995558410278,"sequenceIndex":198},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0914265737455178,"sequenceIndex":24},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6107058255140403,"sequenceIndex":203},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0846812427748198,"sequenceIndex":205},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.55214002322126,"sequenceIndex":473},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.41701220129322,"sequenceIndex":52},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7439151916246387,"sequenceIndex":284},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3671978298932228,"sequenceIndex":26},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.600882895693472,"sequenceIndex":107},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8683515455597546,"sequenceIndex":217},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2296852545284849,"sequenceIndex":401},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6661176064409062,"sequenceIndex":220},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0189567630147616,"sequenceIndex":317},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7473736217163485,"sequenceIndex":508},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1425776875434261,"sequenceIndex":337},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1285956033675903,"sequenceIndex":499},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8919256713713022,"sequenceIndex":318},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.019885982504114,"sequenceIndex":116},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3983463124480242,"sequenceIndex":235},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6771321623418192,"sequenceIndex":237},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3807848606295707,"sequenceIndex":321},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9561717082230816,"sequenceIndex":60},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0723959930198974,"sequenceIndex":387},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8280009684561922,"sequenceIndex":245},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9829063714663288,"sequenceIndex":246},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.31357038602358,"sequenceIndex":410},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.471469169921775,"sequenceIndex":251},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8352083526949627,"sequenceIndex":278},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3042359571554125,"sequenceIndex":275},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9849264740011408,"sequenceIndex":497},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.8836322075697236,"sequenceIndex":323},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.9801909554718238,"sequenceIndex":130},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9982731411492403,"sequenceIndex":294},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8894641805391565,"sequenceIndex":4},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2429468472122183,"sequenceIndex":133},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.1434444622670927,"sequenceIndex":67},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.980233172095435,"sequenceIndex":286},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.893152223543488,"sequenceIndex":17},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.827687407441442,"sequenceIndex":442},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4198017501065618,"sequenceIndex":68},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.6454029078860173,"sequenceIndex":341},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6896903654602582,"sequenceIndex":433},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.375794047987341,"sequenceIndex":504},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.140809394137558,"sequenceIndex":71},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.1409179155213636,"sequenceIndex":482},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.073482563110553,"sequenceIndex":459},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.781546700144639,"sequenceIndex":299},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-5.524153334025105,"sequenceIndex":146},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-6.530605946871293,"sequenceIndex":324},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.2818830936200922,"sequenceIndex":37},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.5973776050365536,"sequenceIndex":149},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4813226045017847,"sequenceIndex":354},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.331125243124053,"sequenceIndex":151},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.378599711564807,"sequenceIndex":316},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6780534783592356,"sequenceIndex":281},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.851221170725803,"sequenceIndex":267},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8598479286906127,"sequenceIndex":373},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3716265632944582,"sequenceIndex":39},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.0484045727489635,"sequenceIndex":394},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4364953219814622,"sequenceIndex":79},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.688815751825218,"sequenceIndex":287},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2311127078767725,"sequenceIndex":2},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6911065302902164,"sequenceIndex":462},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5609255510309215,"sequenceIndex":81},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.383884234803494,"sequenceIndex":163},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.8901664599115264,"sequenceIndex":349},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.271769518606389,"sequenceIndex":165},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.3398948776063966,"sequenceIndex":83},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.7265657314834724,"sequenceIndex":391},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2938277316141857,"sequenceIndex":472},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6750576941879531,"sequenceIndex":169},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.147321404629809,"sequenceIndex":328},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.3044548777551697,"sequenceIndex":171},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2361592161820185,"sequenceIndex":33},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.3816859184189236,"sequenceIndex":340},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.42191080533481,"sequenceIndex":360},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.368147602176657,"sequenceIndex":377},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.039627831610243,"sequenceIndex":88},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.042378744447934,"sequenceIndex":484},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.3776791590221387,"sequenceIndex":89},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.265272013915703,"sequenceIndex":178},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5795233657983863,"sequenceIndex":180},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.801429407782205,"sequenceIndex":320},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.0479948642038868,"sequenceIndex":91},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.360082097799591,"sequenceIndex":400},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1495804213928411,"sequenceIndex":46},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9320729899291569,"sequenceIndex":280},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9849363459922194,"sequenceIndex":332},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.3672579302374075,"sequenceIndex":336},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.064933388434837,"sequenceIndex":47},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8115623224212816,"sequenceIndex":188},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5799769302583737,"sequenceIndex":94},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6718917366749835,"sequenceIndex":191},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6097169184854763,"sequenceIndex":6},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0784187615856387,"sequenceIndex":425},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9562179882422412,"sequenceIndex":424},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4294865265325656,"sequenceIndex":477},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.0428932958978487,"sequenceIndex":49},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8675250599064892,"sequenceIndex":489},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.5164565421090668,"sequenceIndex":458},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9420979191501313,"sequenceIndex":331},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5882898832066816,"sequenceIndex":100},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.213220662449798,"sequenceIndex":201},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.75339761295087,"sequenceIndex":101},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.362223790985698,"sequenceIndex":361},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.4151372581118435,"sequenceIndex":204},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8483960739809973,"sequenceIndex":102},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6147747990099637,"sequenceIndex":206},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9089520000459175,"sequenceIndex":207},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.6835658087258114,"sequenceIndex":208},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7563120849517637,"sequenceIndex":209},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.5106133723949644,"sequenceIndex":351},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.112518606113937,"sequenceIndex":310},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.4544745914444785,"sequenceIndex":212},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8060398835060003,"sequenceIndex":213},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.6031890537559264,"sequenceIndex":214},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.01016170905964,"sequenceIndex":393},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.565033336399512,"sequenceIndex":486},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2575064357217907,"sequenceIndex":481},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.0503982369524834,"sequenceIndex":503},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-5.023982452524348,"sequenceIndex":496},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8049203629539503,"sequenceIndex":110},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.1436342726533577,"sequenceIndex":492},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-6.2079978001983696,"sequenceIndex":222},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.2665554523646714,"sequenceIndex":329},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.4858342749995472,"sequenceIndex":301},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.5464741315552293,"sequenceIndex":276},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4252413197513862,"sequenceIndex":352},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6409379670479673,"sequenceIndex":266},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.649912347048025,"sequenceIndex":228},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4560479806749598,"sequenceIndex":322},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4994511871067695,"sequenceIndex":115},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.540444408715276,"sequenceIndex":260},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.341672490794531,"sequenceIndex":232},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6713033492077831,"sequenceIndex":233},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-5.524883000854573,"sequenceIndex":234},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.516784019265156,"sequenceIndex":319},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9363472520431928,"sequenceIndex":118},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1231143001415531,"sequenceIndex":236},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.642699009001657,"sequenceIndex":32},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.505920969228378,"sequenceIndex":269},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4988294664969346,"sequenceIndex":440},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.0973440482059797,"sequenceIndex":327},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.111980080901454,"sequenceIndex":312},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.829854633955344,"sequenceIndex":243},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.3931194901200676,"sequenceIndex":61},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9659219648888355,"sequenceIndex":335},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.0607387130246018,"sequenceIndex":122},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.395481829481765,"sequenceIndex":326},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.468697285779144,"sequenceIndex":248},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.40186639251894,"sequenceIndex":461},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5886494584201891,"sequenceIndex":290},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.624692411104703,"sequenceIndex":385},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.2131599554964407,"sequenceIndex":63},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.274700909682283,"sequenceIndex":359},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.2951393621759952,"sequenceIndex":334},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5389168825715966,"sequenceIndex":444},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0106736069423488,"sequenceIndex":495}],"sampleSize":256,"lambda":3.90625E-4,"random":{},"entriesSeen":512},"tree":{"storeSequenceIndexesEnabled":false,"centerOfMassEnabled":false,"random":{}}},{"sampler":{"weightedSamples":[{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.4858229754207344,"sequenceIndex":330},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.4872620510375193,"sequenceIndex":502},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.490356066397699,"sequenceIndex":301},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5299213764717216,"sequenceIndex":454},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.4898391177076135,"sequenceIndex":185},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6880508048162892,"sequenceIndex":102},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5351721461916753,"sequenceIndex":238},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5496647849647347,"sequenceIndex":451},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7191509589543584,"sequenceIndex":306},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5373372384250258,"sequenceIndex":167},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5798419514077974,"sequenceIndex":358},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7258586836345676,"sequenceIndex":25},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.761578474846764,"sequenceIndex":377},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5736044197386476,"sequenceIndex":370},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.53930014313063,"sequenceIndex":247},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5887199554433356,"sequenceIndex":489},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7225956553811267,"sequenceIndex":143},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7326689369182935,"sequenceIndex":456},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7563196197327555,"sequenceIndex":18},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7022039704431122,"sequenceIndex":312},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8694958891300617,"sequenceIndex":168},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5874306162308289,"sequenceIndex":179},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6511045927909472,"sequenceIndex":188},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7420948397723388,"sequenceIndex":97},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7358271518519,"sequenceIndex":308},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7798374879667624,"sequenceIndex":105},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8190824350074238,"sequenceIndex":460},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7032169898328363,"sequenceIndex":115},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.591019303829602,"sequenceIndex":235},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6102139668024491,"sequenceIndex":289},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6556316356330851,"sequenceIndex":255},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6214141977856469,"sequenceIndex":419},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7158589118162287,"sequenceIndex":66},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9800837363088313,"sequenceIndex":68},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8824129399167358,"sequenceIndex":316},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.829324662269745,"sequenceIndex":147},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.990964834066355,"sequenceIndex":386},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7940851842216833,"sequenceIndex":152},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8193059326080224,"sequenceIndex":158},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7253285287880498,"sequenceIndex":80},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7483478889394165,"sequenceIndex":270},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0480192664620784,"sequenceIndex":310},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8894529470083126,"sequenceIndex":174},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9520402349595064,"sequenceIndex":89},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6887568720477861,"sequenceIndex":132},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7607340004716993,"sequenceIndex":93},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6568054217274205,"sequenceIndex":191},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8051713140176755,"sequenceIndex":1},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8085700002392576,"sequenceIndex":129},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0993711343679042,"sequenceIndex":282},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7528774656226753,"sequenceIndex":422},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8780791813802057,"sequenceIndex":209},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8887695360339962,"sequenceIndex":322},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0106291669414524,"sequenceIndex":109},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0571535952480535,"sequenceIndex":111},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.340038425634295,"sequenceIndex":113},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9180387358841735,"sequenceIndex":114},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.198730825809331,"sequenceIndex":342},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6483693353496862,"sequenceIndex":381},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8007452874529742,"sequenceIndex":479},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8308881652458674,"sequenceIndex":444},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7703061511961707,"sequenceIndex":130},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7445128235595969,"sequenceIndex":474},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6868193943319045,"sequenceIndex":510},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.425607729122935,"sequenceIndex":64},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8475845316542178,"sequenceIndex":365},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8947822732428031,"sequenceIndex":67},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.297977659957579,"sequenceIndex":17},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.520975650281005,"sequenceIndex":138},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0927791912387492,"sequenceIndex":34},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8983958705118908,"sequenceIndex":416},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8819588791612418,"sequenceIndex":336},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1087528497730792,"sequenceIndex":351},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9952130745690149,"sequenceIndex":412},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.004873108003205,"sequenceIndex":284},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4849225924986345,"sequenceIndex":458},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.1180556308440956,"sequenceIndex":154},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1208747098439005,"sequenceIndex":157},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8791016475494227,"sequenceIndex":39},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7382159315262906,"sequenceIndex":161},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8392590469118542,"sequenceIndex":280},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0415567036972604,"sequenceIndex":394},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.222934420737666,"sequenceIndex":166},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.243434113915014,"sequenceIndex":441},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1863171060067665,"sequenceIndex":170},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.934249606040292,"sequenceIndex":452},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9470620628587046,"sequenceIndex":87},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.282611443618607,"sequenceIndex":11},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9643992020158999,"sequenceIndex":88},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6941893239964521,"sequenceIndex":437},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8939586866227409,"sequenceIndex":91},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9219693840720636,"sequenceIndex":389},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7780104149083764,"sequenceIndex":187},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.647707614712938,"sequenceIndex":47},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.728322358681079,"sequenceIndex":429},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1045894600363209,"sequenceIndex":192},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8380361771601437,"sequenceIndex":321},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4040667138274587,"sequenceIndex":98},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3393144466921827,"sequenceIndex":49},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2406401459678194,"sequenceIndex":201},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.313548567328322,"sequenceIndex":203},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3249732189976564,"sequenceIndex":496},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.049259796224815,"sequenceIndex":311},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7077544719308766,"sequenceIndex":344},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.180580493235067,"sequenceIndex":350},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2569540994123924,"sequenceIndex":212},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4214837172697414,"sequenceIndex":333},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.361627345967599,"sequenceIndex":445},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8486979606582619,"sequenceIndex":108},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8424677932826241,"sequenceIndex":221},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2479227382249385,"sequenceIndex":55},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3416166150345785,"sequenceIndex":56},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5057663791123919,"sequenceIndex":279},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6607342667775213,"sequenceIndex":356},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0165659022373228,"sequenceIndex":455},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8773374523410131,"sequenceIndex":233},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2009563824631917,"sequenceIndex":324},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9381310811651796,"sequenceIndex":236},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4651286766246596,"sequenceIndex":461},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9640636802748915,"sequenceIndex":240},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3750872930908342,"sequenceIndex":300},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2677315210347453,"sequenceIndex":245},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.006779301138317,"sequenceIndex":348},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1562385105015658,"sequenceIndex":401},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7691389006384153,"sequenceIndex":464},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8477934263823603,"sequenceIndex":252},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.916354274438307,"sequenceIndex":440},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2882563588242022,"sequenceIndex":512},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.4650844585087084,"sequenceIndex":128},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.9029278539346954,"sequenceIndex":409},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9867599578892787,"sequenceIndex":131},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9332623608414942,"sequenceIndex":8},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.4373503843362134,"sequenceIndex":411},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9954787411274658,"sequenceIndex":364},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.3429384709799743,"sequenceIndex":135},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.4872288392059665,"sequenceIndex":136},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.0567832370962713,"sequenceIndex":137},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.750175724950233,"sequenceIndex":410},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5807599191120012,"sequenceIndex":139},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-5.120613149422466,"sequenceIndex":140},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.1054426195609928,"sequenceIndex":70},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.512041380921692,"sequenceIndex":71},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.218223090710488,"sequenceIndex":352},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6330852272722727,"sequenceIndex":9},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.901218164238975,"sequenceIndex":319},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6938012543511443,"sequenceIndex":146},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.286818806808259,"sequenceIndex":384},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.581963954775608,"sequenceIndex":36},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5781313345389527,"sequenceIndex":382},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.5493748236311715,"sequenceIndex":275},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.680141977650968,"sequenceIndex":151},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.3107974506049183,"sequenceIndex":495},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.905191421684678,"sequenceIndex":355},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.861119021503395,"sequenceIndex":77},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.509487118280383,"sequenceIndex":459},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.788076226228357,"sequenceIndex":156},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.7172879535781296,"sequenceIndex":78},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5452728913826417,"sequenceIndex":79},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0255904437675618,"sequenceIndex":457},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1193427368775144,"sequenceIndex":487},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7535478100235211,"sequenceIndex":483},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.376955755135771,"sequenceIndex":335},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8551758826722329,"sequenceIndex":163},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5389450623092733,"sequenceIndex":164},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2530214406882085,"sequenceIndex":494},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.6981659660850905,"sequenceIndex":83},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4973261448270145,"sequenceIndex":427},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.135413914464539,"sequenceIndex":42},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6338583251517313,"sequenceIndex":339},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.286920435555379,"sequenceIndex":85},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.508251865132913,"sequenceIndex":491},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.7979911010839684,"sequenceIndex":43},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9904578800607242,"sequenceIndex":442},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5136885371005246,"sequenceIndex":467},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.2941545773048064,"sequenceIndex":175},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.887948183168378,"sequenceIndex":504},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.148038917723249,"sequenceIndex":346},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1840965967961574,"sequenceIndex":421},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.304745288953973,"sequenceIndex":304},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.3593644221416388,"sequenceIndex":406},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8631033710432275,"sequenceIndex":181},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8580995328139411,"sequenceIndex":471},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9305091418885427,"sequenceIndex":183},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.601779095477629,"sequenceIndex":23},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9954924501793836,"sequenceIndex":403},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0156937338482888,"sequenceIndex":186},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7512286255001226,"sequenceIndex":453},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.719906878957141,"sequenceIndex":94},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.689849970202079,"sequenceIndex":189},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.0890608206785974,"sequenceIndex":95},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.705932857879201,"sequenceIndex":486},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.418220346148104,"sequenceIndex":48},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.0969261774340713,"sequenceIndex":353},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.933003520294151,"sequenceIndex":425},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0885415668138085,"sequenceIndex":292},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.460245370471546,"sequenceIndex":196},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.0597705167373737,"sequenceIndex":197},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.1443431761272516,"sequenceIndex":99},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.0105311974397653,"sequenceIndex":293},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.197456404496632,"sequenceIndex":200},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.120412467876821,"sequenceIndex":399},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7891132961125886,"sequenceIndex":202},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7088997854022057,"sequenceIndex":449},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8935408576034083,"sequenceIndex":51},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-9.361889640493333,"sequenceIndex":278},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.53603728938968,"sequenceIndex":206},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.20998669741581,"sequenceIndex":362},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.511901049132939,"sequenceIndex":208},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.68773923955451,"sequenceIndex":438},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.890860836943703,"sequenceIndex":360},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.645350351571648,"sequenceIndex":320},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.201606756533894,"sequenceIndex":106},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3635343163089386,"sequenceIndex":368},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.3073599981935704,"sequenceIndex":214},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.040485633144359,"sequenceIndex":53},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.9830731715041754,"sequenceIndex":216},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.2882920896962795,"sequenceIndex":54},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.851725986285789,"sequenceIndex":414},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.4414184669483667,"sequenceIndex":219},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.94379266830978,"sequenceIndex":110},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.754474475193515,"sequenceIndex":372},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.025290488086333,"sequenceIndex":267},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.5118593066417145,"sequenceIndex":2},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.543611857646627,"sequenceIndex":417},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.2735831336865173,"sequenceIndex":400},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.753172024429554,"sequenceIndex":450},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6150055051460992,"sequenceIndex":227},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.865165596683522,"sequenceIndex":57},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.547918886692758,"sequenceIndex":229},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6118052000111953,"sequenceIndex":230},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.4044613545455915,"sequenceIndex":231},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.882588329942707,"sequenceIndex":58},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.694664822533188,"sequenceIndex":265},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.1466155553298583,"sequenceIndex":234},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6509840634401893,"sequenceIndex":501},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.7275842459017428,"sequenceIndex":118},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8775812866708608,"sequenceIndex":378},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.017105498299956,"sequenceIndex":398},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.1388808491519846,"sequenceIndex":256},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.539365079677803,"sequenceIndex":60},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.041819038793996,"sequenceIndex":307},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.1160609930877206,"sequenceIndex":276},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8731539859443649,"sequenceIndex":243},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.2386076308002525,"sequenceIndex":122},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5509303247333033,"sequenceIndex":244},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1146417573739418,"sequenceIndex":334},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6372132867674243,"sequenceIndex":363},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5584885604503909,"sequenceIndex":327},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.920989668227779,"sequenceIndex":287},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.188160876395973,"sequenceIndex":328},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.5698232833995625,"sequenceIndex":296},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9085697322108637,"sequenceIndex":63},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8479724365655847,"sequenceIndex":431},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2891388881907395,"sequenceIndex":127},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6291051777170995,"sequenceIndex":331},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7163169315260967,"sequenceIndex":508}],"sampleSize":256,"lambda":3.90625E-4,"random":{},"entriesSeen":512},"tree":{"storeSequenceIndexesEnabled":false,"centerOfMassEnabled":false,"random":{}}},{"sampler":{"weightedSamples":[{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.43218231525758877,"sequenceIndex":355},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.4485291957059978,"sequenceIndex":272},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.46161219556158933,"sequenceIndex":199},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.4555950935759638,"sequenceIndex":330},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.45533098186052356,"sequenceIndex":166},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5019168357102136,"sequenceIndex":200},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.4772590778795263,"sequenceIndex":58},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.47747780456511746,"sequenceIndex":499},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.4731079867634925,"sequenceIndex":316},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5786594495877174,"sequenceIndex":163},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.4890804174516189,"sequenceIndex":44},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.510905874902158,"sequenceIndex":291},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.534159354219894,"sequenceIndex":109},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.48796139743336425,"sequenceIndex":233},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5207192057090839,"sequenceIndex":346},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.510851561908569,"sequenceIndex":430},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5927418697091994,"sequenceIndex":34},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.49897978718136526,"sequenceIndex":9},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5597998334543972,"sequenceIndex":157},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.672444707444778,"sequenceIndex":81},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5976444447764573,"sequenceIndex":168},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6911387595292909,"sequenceIndex":329},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5269748200104902,"sequenceIndex":184},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6478046108407362,"sequenceIndex":353},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6218329906823525,"sequenceIndex":100},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5357925943953431,"sequenceIndex":269},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5356280984410237,"sequenceIndex":54},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5172079085066068,"sequenceIndex":114},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5036350925787829,"sequenceIndex":314},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7118705959945192,"sequenceIndex":123},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5517275785757312,"sequenceIndex":125},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.671044780907049,"sequenceIndex":465},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.728055953548155,"sequenceIndex":435},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9870982470736505,"sequenceIndex":138},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7882774230551995,"sequenceIndex":264},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6534247763282934,"sequenceIndex":344},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5807554033191522,"sequenceIndex":335},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9964800538538917,"sequenceIndex":18},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6476561692272954,"sequenceIndex":156},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.920202445262679,"sequenceIndex":303},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6748993178919759,"sequenceIndex":164},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8251054141788285,"sequenceIndex":447},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.047414378451381,"sequenceIndex":322},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9823042419377067,"sequenceIndex":266},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8086061845848271,"sequenceIndex":387},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.536591268393244,"sequenceIndex":46},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5384159678551852,"sequenceIndex":427},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7155680095001897,"sequenceIndex":391},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.653722876759252,"sequenceIndex":196},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6579668469210824,"sequenceIndex":202},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7156597292021663,"sequenceIndex":102},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.730251912795576,"sequenceIndex":104},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.051566311004025,"sequenceIndex":107},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9137466327356003,"sequenceIndex":217},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9122391278770806,"sequenceIndex":444},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1404621366351742,"sequenceIndex":413},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5979333578174034,"sequenceIndex":230},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5652985811985672,"sequenceIndex":234},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9339378207769127,"sequenceIndex":59},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9877003741642711,"sequenceIndex":368},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4402694020885676,"sequenceIndex":498},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8872526503355296,"sequenceIndex":62},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5655519042842441,"sequenceIndex":385},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7144977444070437,"sequenceIndex":502},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.456676106496991,"sequenceIndex":428},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5853472998592693,"sequenceIndex":458},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9478347886701531,"sequenceIndex":134},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.0418510246037807,"sequenceIndex":352},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.2165935865337842,"sequenceIndex":139},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1421477935736484,"sequenceIndex":463},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2813557985600237,"sequenceIndex":256},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.394923069770304,"sequenceIndex":8},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4660316544003311,"sequenceIndex":506},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9975702486860947,"sequenceIndex":148},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9333866634074868,"sequenceIndex":407},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3795069657691368,"sequenceIndex":489},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0462117781064142,"sequenceIndex":65},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9952801330122117,"sequenceIndex":481},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0394008761629654,"sequenceIndex":39},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.4531928832589416,"sequenceIndex":343},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2837072507098266,"sequenceIndex":507},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7006287478046819,"sequenceIndex":40},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8883882883148864,"sequenceIndex":371},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4757064018407855,"sequenceIndex":20},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0248557320218463,"sequenceIndex":84},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.248223113155371,"sequenceIndex":286},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0945998991114811,"sequenceIndex":174},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9844429450763853,"sequenceIndex":176},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3292595660948998,"sequenceIndex":381},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8195503102986449,"sequenceIndex":45},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.954542829773518,"sequenceIndex":315},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2404231536067352,"sequenceIndex":454},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7338283669044146,"sequenceIndex":93},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7998977846757096,"sequenceIndex":47},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3262057291828664,"sequenceIndex":349},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.271004212223958,"sequenceIndex":491},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3326643400824276,"sequenceIndex":96},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1309030793527863,"sequenceIndex":197},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6653415235423492,"sequenceIndex":293},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8759152877767958,"sequenceIndex":350},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0729951334237686,"sequenceIndex":431},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8403178507213727,"sequenceIndex":205},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8743661242787271,"sequenceIndex":390},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0276907120441028,"sequenceIndex":416},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0525753035608025,"sequenceIndex":321},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7699606263113823,"sequenceIndex":460},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.364339154587096,"sequenceIndex":268},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.469432462404565,"sequenceIndex":12},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9336037630831073,"sequenceIndex":365},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2924571040676256,"sequenceIndex":401},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9997217018680697,"sequenceIndex":223},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2693221503858503,"sequenceIndex":14},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3460158019578996,"sequenceIndex":226},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7973904893206231,"sequenceIndex":345},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7115290234838819,"sequenceIndex":358},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7258306543374332,"sequenceIndex":116},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9861153558259991,"sequenceIndex":493},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0463553115132718,"sequenceIndex":118},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9442058718113867,"sequenceIndex":478},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0091870916010257,"sequenceIndex":415},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.361979717481527,"sequenceIndex":443},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5638720254128438,"sequenceIndex":245},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5154544490167192,"sequenceIndex":500},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9290367470552747,"sequenceIndex":302},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4434530156432408,"sequenceIndex":250},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7013083465142445,"sequenceIndex":252},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9151754712046856,"sequenceIndex":127},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7669367654459347,"sequenceIndex":462},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7148068328042567,"sequenceIndex":452},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.5745971976508786,"sequenceIndex":130},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.663441120686128,"sequenceIndex":16},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.487291402258444,"sequenceIndex":32},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.3057256158253923,"sequenceIndex":392},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.0893912352831654,"sequenceIndex":66},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.331005593548822,"sequenceIndex":135},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.6318995103769485,"sequenceIndex":17},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.543249589047329,"sequenceIndex":336},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.3362026363972674,"sequenceIndex":69},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.3675357990978885,"sequenceIndex":479},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.462801592637378,"sequenceIndex":370},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6687553982263839,"sequenceIndex":366},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.0805210114621313,"sequenceIndex":492},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.125269846442948,"sequenceIndex":143},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6042732391392944,"sequenceIndex":144},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6966452353680401,"sequenceIndex":145},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.5180395476047024,"sequenceIndex":146},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7341637879659366,"sequenceIndex":262},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4595854735255722,"sequenceIndex":37},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.1110449144721466,"sequenceIndex":472},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9163383667400715,"sequenceIndex":150},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1450157899351014,"sequenceIndex":75},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.960587232084712,"sequenceIndex":152},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.3359757886314516,"sequenceIndex":363},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.4021843057179115,"sequenceIndex":154},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5141349735399445,"sequenceIndex":468},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.280819766911588,"sequenceIndex":78},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6089984140258298,"sequenceIndex":488},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7829193541378647,"sequenceIndex":450},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9616419662675306,"sequenceIndex":306},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.675368514994843,"sequenceIndex":80},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.976457873553566,"sequenceIndex":461},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.3989394698186555,"sequenceIndex":1},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.6214015123889713,"sequenceIndex":400},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7348510470920759,"sequenceIndex":82},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1178498518503202,"sequenceIndex":399},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-5.85878215827205,"sequenceIndex":83},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1353055333168434,"sequenceIndex":167},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.959185375302622,"sequenceIndex":374},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4863247886356594,"sequenceIndex":169},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.3780717037198373,"sequenceIndex":170},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9008873230916492,"sequenceIndex":299},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6421464416286096,"sequenceIndex":342},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3316419279986962,"sequenceIndex":173},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6943443735618615,"sequenceIndex":87},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5322932997654586,"sequenceIndex":277},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.426849092230423,"sequenceIndex":88},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.2183780355372846,"sequenceIndex":467},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.435739533071314,"sequenceIndex":178},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5130787243887953,"sequenceIndex":369},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5144697366353954,"sequenceIndex":180},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6229416502608804,"sequenceIndex":483},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.2845937516547146,"sequenceIndex":182},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0864141444099502,"sequenceIndex":183},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.3102513497466393,"sequenceIndex":92},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2898595651763456,"sequenceIndex":394},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3877450925081403,"sequenceIndex":186},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4888180737944325,"sequenceIndex":327},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0317127280312262,"sequenceIndex":404},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2883135679025595,"sequenceIndex":310},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-7.736656622928817,"sequenceIndex":410},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.500773508797091,"sequenceIndex":412},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.0682422967124303,"sequenceIndex":3},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8356755799190065,"sequenceIndex":192},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5746761458370275,"sequenceIndex":194},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5782476368973926,"sequenceIndex":195},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2449339565804778,"sequenceIndex":48},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1847191051477792,"sequenceIndex":422},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.896653813204601,"sequenceIndex":261},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.634984746533856,"sequenceIndex":285},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9762083303679591,"sequenceIndex":25},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2783431650797608,"sequenceIndex":201},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.7124485824973985,"sequenceIndex":504},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1246098091035086,"sequenceIndex":505},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.110790927760366,"sequenceIndex":204},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9020632063121636,"sequenceIndex":408},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.5308814065524237,"sequenceIndex":103},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.739580021414638,"sequenceIndex":258},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.408870339298737,"sequenceIndex":26},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.285296261847491,"sequenceIndex":208},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9537183696155414,"sequenceIndex":105},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.4768182390409086,"sequenceIndex":211},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.2594720580803394,"sequenceIndex":53},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9094038916018234,"sequenceIndex":284},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-5.481678216029119,"sequenceIndex":389},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.203349134014364,"sequenceIndex":475},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6889719851612335,"sequenceIndex":477},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9888643330689189,"sequenceIndex":333},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2216789433160955,"sequenceIndex":218},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0260475115647623,"sequenceIndex":275},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9420579471526738,"sequenceIndex":487},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5862790239825457,"sequenceIndex":221},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5359438706497677,"sequenceIndex":111},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.0245873175592006,"sequenceIndex":354},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7081334033296767,"sequenceIndex":403},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.018712602441313,"sequenceIndex":225},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9744904585064142,"sequenceIndex":445},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.3692641207580922,"sequenceIndex":298},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1081676297416727,"sequenceIndex":57},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9349694669763597,"sequenceIndex":372},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5372165165157898,"sequenceIndex":457},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.902314644770325,"sequenceIndex":456},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9421872586986753,"sequenceIndex":448},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2705297365096881,"sequenceIndex":319},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6184956826310763,"sequenceIndex":386},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9893151767848376,"sequenceIndex":337},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8629394556916434,"sequenceIndex":287},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.7205275862393656,"sequenceIndex":267},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3979404634726453,"sequenceIndex":238},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-6.32549908198766,"sequenceIndex":4},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.307695386747366,"sequenceIndex":120},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.7748217269023576,"sequenceIndex":388},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.0961512896298133,"sequenceIndex":121},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.3394329704656456,"sequenceIndex":242},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.007834289699108,"sequenceIndex":122},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.5233527737035466,"sequenceIndex":348},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.711204636988655,"sequenceIndex":485},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7331732436513616,"sequenceIndex":438},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.207621191768583,"sequenceIndex":248},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.0191590543841054,"sequenceIndex":420},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.9737307954875334,"sequenceIndex":324},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.047020544040035,"sequenceIndex":282},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9228875231007905,"sequenceIndex":126},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.185148608722154,"sequenceIndex":63},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.7035382496424947,"sequenceIndex":326},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.330422516468464,"sequenceIndex":255},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8254819844809498,"sequenceIndex":508}],"sampleSize":256,"lambda":3.90625E-4,"random":{},"entriesSeen":512},"tree":{"storeSequenceIndexesEnabled":false,"centerOfMassEnabled":false,"random":{}}},{"sampler":{"weightedSamples":[{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.4973688102840023,"sequenceIndex":278},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5060371767345275,"sequenceIndex":322},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5228097556586833,"sequenceIndex":229},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.508916993425157,"sequenceIndex":450},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5151499285314994,"sequenceIndex":171},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5482705220750808,"sequenceIndex":372},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.53454875258925,"sequenceIndex":7},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5225530490501025,"sequenceIndex":462},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6113083236722386,"sequenceIndex":144},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.58903167671159,"sequenceIndex":420},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5470513687515192,"sequenceIndex":182},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6427510445314031,"sequenceIndex":283},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5641550097420565,"sequenceIndex":26},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5574501071702778,"sequenceIndex":430},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5672631420688377,"sequenceIndex":385},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5316253900975894,"sequenceIndex":481},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7684072776249165,"sequenceIndex":71},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6197315972930415,"sequenceIndex":492},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6365330094783536,"sequenceIndex":428},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8698559437695622,"sequenceIndex":160},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5965944149578167,"sequenceIndex":421},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5760990148676591,"sequenceIndex":448},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6878543932926886,"sequenceIndex":23},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7301476211769456,"sequenceIndex":294},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.671537360661678,"sequenceIndex":203},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7129611750850526,"sequenceIndex":212},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5852064373516835,"sequenceIndex":396},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6961611631123278,"sequenceIndex":340},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6383080611443186,"sequenceIndex":117},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7132447336987471,"sequenceIndex":354},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6407679853097566,"sequenceIndex":499},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5345493617656112,"sequenceIndex":422},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3530351356831072,"sequenceIndex":134},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1506123890394395,"sequenceIndex":423},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9165702860494014,"sequenceIndex":257},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7427624713424404,"sequenceIndex":18},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7314097974722822,"sequenceIndex":348},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6725663759454212,"sequenceIndex":297},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8490224805705368,"sequenceIndex":156},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9909909082296868,"sequenceIndex":468},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9609183386313787,"sequenceIndex":82},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6838595651474582,"sequenceIndex":85},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6425655273042373,"sequenceIndex":87},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7180215781361419,"sequenceIndex":4},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6550137620878168,"sequenceIndex":473},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7760115056123004,"sequenceIndex":46},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7178350314328972,"sequenceIndex":94},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8135197414032338,"sequenceIndex":96},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9232600757198128,"sequenceIndex":48},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0658105944331357,"sequenceIndex":319},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7534092955775344,"sequenceIndex":325},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7394677830142944,"sequenceIndex":209},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7938319447519199,"sequenceIndex":303},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6297571079957155,"sequenceIndex":258},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7123762492978596,"sequenceIndex":55},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1748364510328875,"sequenceIndex":28},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7193955954358021,"sequenceIndex":115},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7028938437375565,"sequenceIndex":506},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9276528904723989,"sequenceIndex":393},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.988434053008993,"sequenceIndex":121},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7322247250112124,"sequenceIndex":60},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7268011913981614,"sequenceIndex":250},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6790470447544434,"sequenceIndex":253},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5441797305714491,"sequenceIndex":497},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9505401356369416,"sequenceIndex":64},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8513411699920355,"sequenceIndex":66},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5508954193718445,"sequenceIndex":337},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.480271470225363,"sequenceIndex":136},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4035429095274903,"sequenceIndex":311},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1012702137825086,"sequenceIndex":453},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.412781104327091,"sequenceIndex":442},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4310840626292167,"sequenceIndex":454},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8692250698989777,"sequenceIndex":146},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2204886694044015,"sequenceIndex":37},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8845248036350113,"sequenceIndex":399},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4886040865657932,"sequenceIndex":390},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7534858364428885,"sequenceIndex":411},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8938879377344087,"sequenceIndex":157},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3925583504227408,"sequenceIndex":376},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.168819125574342,"sequenceIndex":10},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.181877784735641,"sequenceIndex":327},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0280357326222018,"sequenceIndex":164},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0707466337180653,"sequenceIndex":370},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.783294859266626,"sequenceIndex":330},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9466027287028816,"sequenceIndex":486},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7326955391513064,"sequenceIndex":436},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9729227100698518,"sequenceIndex":259},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7957327054641341,"sequenceIndex":323},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7358358878267341,"sequenceIndex":269},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.803331096806224,"sequenceIndex":90},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5533004521641491,"sequenceIndex":487},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3774646611321764,"sequenceIndex":389},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2337261063064482,"sequenceIndex":93},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9768279055986889,"sequenceIndex":188},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.17503726049971,"sequenceIndex":478},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.142343317031489,"sequenceIndex":2},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0165959053458125,"sequenceIndex":194},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.923299884898386,"sequenceIndex":405},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4470484479908756,"sequenceIndex":346},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4297833814034822,"sequenceIndex":364},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.237853997396787,"sequenceIndex":440},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.408925021320803,"sequenceIndex":204},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1936216512582094,"sequenceIndex":437},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7428474900783527,"sequenceIndex":13},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.326728009377924,"sequenceIndex":285},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.429663521540352,"sequenceIndex":426},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9388410561173363,"sequenceIndex":414},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9126703391950136,"sequenceIndex":400},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7558141620318706,"sequenceIndex":256},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9607328286198458,"sequenceIndex":457},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9847367684073949,"sequenceIndex":295},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.292955342925033,"sequenceIndex":224},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2407985727229722,"sequenceIndex":320},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.0796767176889306,"sequenceIndex":493},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7380855513261412,"sequenceIndex":230},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8854984026321123,"sequenceIndex":415},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8024427998526135,"sequenceIndex":58},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.136884972778343,"sequenceIndex":490},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9143307262500449,"sequenceIndex":510},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3520992778000418,"sequenceIndex":360},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.082050871925046,"sequenceIndex":120},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1347658539170897,"sequenceIndex":61},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8692379325255752,"sequenceIndex":416},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8464181387827172,"sequenceIndex":384},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2061140251831712,"sequenceIndex":251},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7367839576206219,"sequenceIndex":475},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7228620193389971,"sequenceIndex":255},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6047526872726042,"sequenceIndex":511},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5920039100330619,"sequenceIndex":374},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.0156898433880723,"sequenceIndex":130},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.594839086835488,"sequenceIndex":326},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.2751140636447733,"sequenceIndex":132},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.8840373284649434,"sequenceIndex":133},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7398133791056478,"sequenceIndex":67},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.79233228235691,"sequenceIndex":378},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.562563243111901,"sequenceIndex":34},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.3117109577500634,"sequenceIndex":137},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.397347980903518,"sequenceIndex":324},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.45503342892964,"sequenceIndex":383},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8943325722387738,"sequenceIndex":70},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9428933264852677,"sequenceIndex":339},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.248651428423419,"sequenceIndex":335},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4166915861479932,"sequenceIndex":143},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.2298393994409333,"sequenceIndex":413},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5168039247892187,"sequenceIndex":375},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.585067431604288,"sequenceIndex":73},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0944079149940464,"sequenceIndex":147},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5889957426000607,"sequenceIndex":74},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.543216428014472,"sequenceIndex":367},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2624254945852196,"sequenceIndex":75},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.1158117372776926,"sequenceIndex":151},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.03170487677397,"sequenceIndex":444},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5425826603934818,"sequenceIndex":418},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.785173076913568,"sequenceIndex":77},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.728702562602254,"sequenceIndex":296},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.0744846256248852,"sequenceIndex":78},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.7100092124238615,"sequenceIndex":425},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.889235342795439,"sequenceIndex":158},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.714297721261049,"sequenceIndex":310},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.902681970964993,"sequenceIndex":503},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.4779190651142295,"sequenceIndex":161},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.5667077200172215,"sequenceIndex":81},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.201379946301353,"sequenceIndex":162},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5546807754352177,"sequenceIndex":445},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5051999167729624,"sequenceIndex":377},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0968732746955738,"sequenceIndex":83},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.3032032527188955,"sequenceIndex":167},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.2412942142500643,"sequenceIndex":168},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9518417576821687,"sequenceIndex":382},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-5.071013690457448,"sequenceIndex":496},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3968373153878475,"sequenceIndex":345},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.95004211559388,"sequenceIndex":43},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8695160101850011,"sequenceIndex":172},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4739890617759592,"sequenceIndex":86},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9063730360759397,"sequenceIndex":286},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2846810856231428,"sequenceIndex":432},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2849584483998817,"sequenceIndex":498},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.233376478913222,"sequenceIndex":89},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.6168890470173625,"sequenceIndex":267},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.3112869545601686,"sequenceIndex":45},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.343693246801004,"sequenceIndex":347},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.415766789580363,"sequenceIndex":91},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.5467211451791982,"sequenceIndex":183},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.4758683264267756,"sequenceIndex":284},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.666410381803981,"sequenceIndex":185},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.403298272070074,"sequenceIndex":186},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.285371750148533,"sequenceIndex":272},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.0535641200772305,"sequenceIndex":488},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3313509094448295,"sequenceIndex":189},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5191687585151352,"sequenceIndex":190},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4455111422285791,"sequenceIndex":191},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.7305705660392183,"sequenceIndex":404},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.568329735564515,"sequenceIndex":280},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.1585542013972887,"sequenceIndex":97},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9397162455224397,"sequenceIndex":288},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5098712472247195,"sequenceIndex":98},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.196417433237718,"sequenceIndex":331},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.134705633841062,"sequenceIndex":449},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.002433008694086,"sequenceIndex":274},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.13916910122152,"sequenceIndex":200},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.7257411601558164,"sequenceIndex":489},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3432438258138184,"sequenceIndex":101},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.845660616243099,"sequenceIndex":342},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.9162775214734515,"sequenceIndex":300},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7240801254318316,"sequenceIndex":205},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5002027461895615,"sequenceIndex":433},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7726383792445988,"sequenceIndex":1},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.4425215517158647,"sequenceIndex":208},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.0439123858964465,"sequenceIndex":403},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3806266002277903,"sequenceIndex":105},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-5.494824730805039,"sequenceIndex":211},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6760846851365072,"sequenceIndex":485},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.794817528630632,"sequenceIndex":474},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.518090314920807,"sequenceIndex":463},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.286137409117118,"sequenceIndex":387},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0242273487644868,"sequenceIndex":358},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4534546735508385,"sequenceIndex":500},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2908524110535364,"sequenceIndex":129},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9693686839215994,"sequenceIndex":467},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7589710877824813,"sequenceIndex":220},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.005125535331012,"sequenceIndex":402},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3783153150462277,"sequenceIndex":344},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.2080035248176637,"sequenceIndex":260},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5675554155932967,"sequenceIndex":112},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.118048293470563,"sequenceIndex":225},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7400986123229136,"sequenceIndex":113},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9341987272209338,"sequenceIndex":227},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.3870621783279415,"sequenceIndex":397},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.5625485535986194,"sequenceIndex":392},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9687486649576107,"sequenceIndex":508},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7683707729496985,"sequenceIndex":338},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9776721153639978,"sequenceIndex":116},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.160178930744983,"sequenceIndex":350},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.8398113364400106,"sequenceIndex":365},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7743096903671987,"sequenceIndex":281},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.700949340757882,"sequenceIndex":236},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.757413663867739,"sequenceIndex":318},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.8881852641909704,"sequenceIndex":119},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.5843794420376014,"sequenceIndex":262},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-5.976063741810023,"sequenceIndex":30},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.382928265755589,"sequenceIndex":240},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.963878075156559,"sequenceIndex":351},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.217869991258555,"sequenceIndex":243},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2431537016677248,"sequenceIndex":302},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.16883508040138,"sequenceIndex":245},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.9338810001723816,"sequenceIndex":427},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.246248117960478,"sequenceIndex":431},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.8296103041517964,"sequenceIndex":124},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.2986124590434662,"sequenceIndex":249},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.406768109939617,"sequenceIndex":62},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.928832142453249,"sequenceIndex":391},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.454756141637128,"sequenceIndex":126},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7541595964479679,"sequenceIndex":252},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9694705789171905,"sequenceIndex":292},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7362831406102939,"sequenceIndex":333},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8808857126785352,"sequenceIndex":512}],"sampleSize":256,"lambda":3.90625E-4,"random":{},"entriesSeen":512},"tree":{"storeSequenceIndexesEnabled":false,"centerOfMassEnabled":false,"random":{}}},{"sampler":{"weightedSamples":[{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.42619771958609537,"sequenceIndex":47},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.43345143258128493,"sequenceIndex":286},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.4293265293904184,"sequenceIndex":326},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.4608304411748756,"sequenceIndex":137},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.43827822187100385,"sequenceIndex":2},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.4315640195397491,"sequenceIndex":399},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.4974204847727388,"sequenceIndex":456},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.46565712963053457,"sequenceIndex":400},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.46781347412024343,"sequenceIndex":341},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.4633778498801164,"sequenceIndex":167},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.4455809073088714,"sequenceIndex":395},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.4586880959255478,"sequenceIndex":6},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.43456635149105477,"sequenceIndex":55},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5889536026501747,"sequenceIndex":29},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5575845902843625,"sequenceIndex":15},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.4900278865420333,"sequenceIndex":133},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5449975124369217,"sequenceIndex":140},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6005579927363516,"sequenceIndex":297},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6003932802935689,"sequenceIndex":428},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5799184962451617,"sequenceIndex":308},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.779300545125928,"sequenceIndex":343},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.4990657413433982,"sequenceIndex":89},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5209650118747244,"sequenceIndex":368},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6403918943393926,"sequenceIndex":196},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.4687540569375934,"sequenceIndex":204},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.4562868877251727,"sequenceIndex":304},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5369042266955,"sequenceIndex":54},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6317068758530606,"sequenceIndex":416},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6615713401030259,"sequenceIndex":377},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5675303072108515,"sequenceIndex":240},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6408920830347702,"sequenceIndex":282},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.4932240578057968,"sequenceIndex":496},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6802716610471267,"sequenceIndex":473},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.606556831035033,"sequenceIndex":69},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.61028853182528,"sequenceIndex":35},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0142378030349612,"sequenceIndex":346},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7129158830029204,"sequenceIndex":430},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8513382606769139,"sequenceIndex":291},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6093381181028767,"sequenceIndex":158},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8313043365481972,"sequenceIndex":163},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7963373066802938,"sequenceIndex":164},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9044608267637612,"sequenceIndex":384},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8911991055548459,"sequenceIndex":87},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.249305688132369,"sequenceIndex":450},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7552034547984369,"sequenceIndex":91},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5678939024718194,"sequenceIndex":187},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5785113513450488,"sequenceIndex":259},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9153824913055594,"sequenceIndex":96},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7660651386864122,"sequenceIndex":98},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5953416895727442,"sequenceIndex":100},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5639325999715332,"sequenceIndex":207},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.49806441566540527,"sequenceIndex":433},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.65383901522256,"sequenceIndex":27},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6126386362056737,"sequenceIndex":218},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1036778126210283,"sequenceIndex":372},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6646547362442476,"sequenceIndex":227},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6601495071903389,"sequenceIndex":272},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.721404220515793,"sequenceIndex":369},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.82801513652758,"sequenceIndex":118},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6254747781840414,"sequenceIndex":61},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.670059738795118,"sequenceIndex":244},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8568023425316305,"sequenceIndex":472},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9773101158618809,"sequenceIndex":126},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.88839324935546,"sequenceIndex":506},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9528411826277059,"sequenceIndex":331},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0868595814771214,"sequenceIndex":265},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.506106954831744,"sequenceIndex":67},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7401672347916053,"sequenceIndex":8},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9431130242529148,"sequenceIndex":471},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.942404984532177,"sequenceIndex":502},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7806674386636836,"sequenceIndex":407},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.330446100169048,"sequenceIndex":18},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0511411896867207,"sequenceIndex":147},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.859572560734734,"sequenceIndex":74},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7480418030789947,"sequenceIndex":1},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0717137262147722,"sequenceIndex":19},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.279670889872967,"sequenceIndex":354},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.991702512052667,"sequenceIndex":38},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7582296274164384,"sequenceIndex":4},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8433881845352482,"sequenceIndex":405},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0340588542519702,"sequenceIndex":40},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.388737218900961,"sequenceIndex":461},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9221995751668304,"sequenceIndex":322},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0180777547261157,"sequenceIndex":168},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9705025281098207,"sequenceIndex":41},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6613793800179069,"sequenceIndex":172},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0993417122432894,"sequenceIndex":274},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3122408831498333,"sequenceIndex":435},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4443818658074077,"sequenceIndex":507},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7594089777032923,"sequenceIndex":340},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7766816833823106,"sequenceIndex":338},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5857946279120249,"sequenceIndex":364},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7855512465266357,"sequenceIndex":260},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8953485300211025,"sequenceIndex":189},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2617411202345663,"sequenceIndex":191},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.038689651549418,"sequenceIndex":311},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0227330751318848,"sequenceIndex":194},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.003999937843405,"sequenceIndex":359},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1374609132591116,"sequenceIndex":198},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4014517607842742,"sequenceIndex":403},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6314291392369553,"sequenceIndex":380},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.8666843032099214,"sequenceIndex":333},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9279104199869668,"sequenceIndex":437},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1211207166523818,"sequenceIndex":440},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6221739653945711,"sequenceIndex":104},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7338649692899989,"sequenceIndex":106},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7877457471682636,"sequenceIndex":266},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6855119517241508,"sequenceIndex":397},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1044906215732246,"sequenceIndex":464},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.823063631823243,"sequenceIndex":221},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.057603159261053,"sequenceIndex":414},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8734587022973378,"sequenceIndex":224},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4289495191482815,"sequenceIndex":226},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8946858855185241,"sequenceIndex":228},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4033653962696095,"sequenceIndex":279},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8605022749080113,"sequenceIndex":28},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.791392944805167,"sequenceIndex":429},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7275083541020984,"sequenceIndex":495},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.186718314254239,"sequenceIndex":365},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9124736045058333,"sequenceIndex":60},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.921685182272235,"sequenceIndex":352},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7313748217730737,"sequenceIndex":7},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7253397579329358,"sequenceIndex":295},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.04414706762908,"sequenceIndex":348},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4720829820025607,"sequenceIndex":378},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1770719096187794,"sequenceIndex":413},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0991147972193192,"sequenceIndex":254},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0638134251100024,"sequenceIndex":511},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.2031456335223085,"sequenceIndex":129},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7432184586010135,"sequenceIndex":358},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.136890584023146,"sequenceIndex":480},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.594762173247052,"sequenceIndex":508},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.180518641679706,"sequenceIndex":324},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7332411156222298,"sequenceIndex":134},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7426299657522255,"sequenceIndex":443},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.476204977323509,"sequenceIndex":382},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.274906013742164,"sequenceIndex":347},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8368165469683038,"sequenceIndex":301},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0891403054762818,"sequenceIndex":139},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.6746951847777294,"sequenceIndex":417},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-7.872319957800618,"sequenceIndex":141},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.161085600585867,"sequenceIndex":142},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.078558963273582,"sequenceIndex":315},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.9730183240232337,"sequenceIndex":501},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.2293564025370594,"sequenceIndex":432},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.3723309620229296,"sequenceIndex":146},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.1714556961807316,"sequenceIndex":418},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3984609293214811,"sequenceIndex":476},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2258755915684194,"sequenceIndex":271},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.185635917062024,"sequenceIndex":499},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6861352087013788,"sequenceIndex":345},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.642502735479028,"sequenceIndex":335},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6382818079632708,"sequenceIndex":153},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.114302699221238,"sequenceIndex":154},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.06522473784119,"sequenceIndex":485},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9901403985251185,"sequenceIndex":156},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.5960867062637014,"sequenceIndex":157},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.3352200921541955,"sequenceIndex":442},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.1691412619416055,"sequenceIndex":159},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7353887682192233,"sequenceIndex":20},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.6407855502545186,"sequenceIndex":328},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6359228238605472,"sequenceIndex":162},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3411923201055709,"sequenceIndex":474},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-5.093672600577947,"sequenceIndex":82},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.625689367360154,"sequenceIndex":269},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.750841361004159,"sequenceIndex":166},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2510011565778136,"sequenceIndex":5},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-6.025588382945282,"sequenceIndex":21},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.0262862908236605,"sequenceIndex":169},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9959041475448684,"sequenceIndex":448},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8016217154740135,"sequenceIndex":171},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.5317892842336907,"sequenceIndex":42},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8317893984233533,"sequenceIndex":313},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-8.593165601924417,"sequenceIndex":376},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.4905984904414105,"sequenceIndex":408},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.553926580042387,"sequenceIndex":176},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4865187712981185,"sequenceIndex":309},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.6023234090189846,"sequenceIndex":434},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.2741100159244376,"sequenceIndex":179},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.301939424435114,"sequenceIndex":90},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9139875065644394,"sequenceIndex":285},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3623488550339267,"sequenceIndex":484},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8133373462809526,"sequenceIndex":298},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9996919090581265,"sequenceIndex":92},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6557403692086934,"sequenceIndex":337},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.3987510753921564,"sequenceIndex":93},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.675596777333336,"sequenceIndex":424},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.0930895231733886,"sequenceIndex":381},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4623786021690424,"sequenceIndex":454},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.311145591901192,"sequenceIndex":307},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.056522555452434,"sequenceIndex":460},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.043364357557995,"sequenceIndex":12},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.114609029304178,"sequenceIndex":296},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.602530773565006,"sequenceIndex":357},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2522333393274723,"sequenceIndex":195},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.5150759925476245,"sequenceIndex":49},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2707894041405075,"sequenceIndex":409},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3738285292997152,"sequenceIndex":99},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.432199302453765,"sequenceIndex":277},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.6081267937139834,"sequenceIndex":200},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9093748973338174,"sequenceIndex":201},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.787600615696048,"sequenceIndex":101},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9916767534345647,"sequenceIndex":319},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-6.162710606285837,"sequenceIndex":385},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-5.60660893645555,"sequenceIndex":205},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0667192093565772,"sequenceIndex":206},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0312643897301779,"sequenceIndex":103},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-5.448607670608509,"sequenceIndex":26},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.3251464494887037,"sequenceIndex":353},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.1168221869123336,"sequenceIndex":293},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.666708403017345,"sequenceIndex":278},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1663977944948685,"sequenceIndex":280},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8647084031192648,"sequenceIndex":275},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9521446545157163,"sequenceIndex":401},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6873149246766586,"sequenceIndex":215},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9190967706348276,"sequenceIndex":3},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0342558250866918,"sequenceIndex":270},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.297678064508649,"sequenceIndex":463},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.299060600628447,"sequenceIndex":327},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.088795421507686,"sequenceIndex":220},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.1181248360630978,"sequenceIndex":110},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.111122599539255,"sequenceIndex":111},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.252548190587248,"sequenceIndex":466},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.3036983216670057,"sequenceIndex":14},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.041861715422634,"sequenceIndex":225},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.719760816963986,"sequenceIndex":112},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6969335086028183,"sequenceIndex":447},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8259927958094113,"sequenceIndex":57},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8975924702606604,"sequenceIndex":426},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6268552916093544,"sequenceIndex":494},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.1379848488546416,"sequenceIndex":361},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.5973028858333724,"sequenceIndex":116},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0488353217009867,"sequenceIndex":389},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.91179692124984,"sequenceIndex":117},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5024089791113757,"sequenceIndex":234},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.0701093489347206,"sequenceIndex":236},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.816026882281499,"sequenceIndex":302},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3426132890164049,"sequenceIndex":238},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4817645814823794,"sequenceIndex":128},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.307135413388725,"sequenceIndex":356},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.880462993186049,"sequenceIndex":241},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.0781695700360863,"sequenceIndex":427},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.46647582996601,"sequenceIndex":243},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.900901575946849,"sequenceIndex":122},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7383410547096612,"sequenceIndex":245},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.856708610394352,"sequenceIndex":246},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.0292440032531234,"sequenceIndex":123},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5048004451475878,"sequenceIndex":248},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1703071952953255,"sequenceIndex":394},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.406942678389322,"sequenceIndex":491},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.990931517287093,"sequenceIndex":268},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9783730794023422,"sequenceIndex":63},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3419407966288404,"sequenceIndex":396},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1836035922029595,"sequenceIndex":438},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.4614755364268803,"sequenceIndex":255},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1695235024964705,"sequenceIndex":483}],"sampleSize":256,"lambda":3.90625E-4,"random":{},"entriesSeen":512},"tree":{"storeSequenceIndexesEnabled":false,"centerOfMassEnabled":false,"random":{}}},{"sampler":{"weightedSamples":[{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5064663693551557,"sequenceIndex":41},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5213468144887055,"sequenceIndex":9},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5130101393466253,"sequenceIndex":25},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5525095094856098,"sequenceIndex":294},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5335350536075059,"sequenceIndex":376},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5603817970363063,"sequenceIndex":429},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5408690278602389,"sequenceIndex":112},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.558052777651177,"sequenceIndex":426},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7097211213778862,"sequenceIndex":151},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5942721471483361,"sequenceIndex":316},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5939374988113116,"sequenceIndex":351},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5677921335868918,"sequenceIndex":311},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5706653311075429,"sequenceIndex":277},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5481639956494487,"sequenceIndex":231},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5449735635648337,"sequenceIndex":125},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6515813201662238,"sequenceIndex":483},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6622861852131647,"sequenceIndex":69},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7098923988307566,"sequenceIndex":327},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7487940084431258,"sequenceIndex":454},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6359561015433761,"sequenceIndex":160},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6346855526039374,"sequenceIndex":278},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8675628985632032,"sequenceIndex":381},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6190513535715249,"sequenceIndex":46},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7126498435760181,"sequenceIndex":98},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6752004958878829,"sequenceIndex":101},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7491972926757735,"sequenceIndex":213},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5876859621522363,"sequenceIndex":349},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5740197099453279,"sequenceIndex":402},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.585526106774722,"sequenceIndex":428},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6220583146954146,"sequenceIndex":423},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5719812248557312,"sequenceIndex":249},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6566487933063825,"sequenceIndex":484},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7422922120470783,"sequenceIndex":409},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9075918151385738,"sequenceIndex":267},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7287006770008825,"sequenceIndex":65},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8789152416089542,"sequenceIndex":36},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8199936216378704,"sequenceIndex":448},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7957906580674321,"sequenceIndex":463},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1882033999062453,"sequenceIndex":79},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9182540387545719,"sequenceIndex":342},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6770912792523323,"sequenceIndex":164},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2481081940484968,"sequenceIndex":315},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7669423326173418,"sequenceIndex":172},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0636093419040695,"sequenceIndex":179},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.225151020811381,"sequenceIndex":91},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6355730442111865,"sequenceIndex":184},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1504864670530401,"sequenceIndex":382},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2988912910803927,"sequenceIndex":280},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4207805747025573,"sequenceIndex":199},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9458855680117887,"sequenceIndex":424},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.688657467667933,"sequenceIndex":206},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0527065498979402,"sequenceIndex":271},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8028763708200612,"sequenceIndex":305},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.709887598101311,"sequenceIndex":373},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7643360691590508,"sequenceIndex":110},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9889248793690937,"sequenceIndex":337},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7945904124438725,"sequenceIndex":445},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.722960296583395,"sequenceIndex":427},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6343440528785628,"sequenceIndex":239},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7430017387109499,"sequenceIndex":61},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6908168408094095,"sequenceIndex":245},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9749865075092569,"sequenceIndex":251},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5814360803306684,"sequenceIndex":282},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.678027342977704,"sequenceIndex":473},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3803726503763978,"sequenceIndex":64},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0776777675691047,"sequenceIndex":132},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1216496870123196,"sequenceIndex":67},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3708671280499873,"sequenceIndex":321},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1126247376745397,"sequenceIndex":139},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7701724017332817,"sequenceIndex":264},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1180671865327034,"sequenceIndex":143},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2458768190663236,"sequenceIndex":72},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0094188020167,"sequenceIndex":146},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0783716571265278,"sequenceIndex":256},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.02759099356388,"sequenceIndex":485},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.216586547240496,"sequenceIndex":77},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0534585718704141,"sequenceIndex":155},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2178049590158204,"sequenceIndex":317},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6613350875285675,"sequenceIndex":425},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.120212625718705,"sequenceIndex":503},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.607261828342843,"sequenceIndex":322},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9576094630707074,"sequenceIndex":461},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.143215716280657,"sequenceIndex":367},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4305732420003352,"sequenceIndex":439},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3535385601133065,"sequenceIndex":288},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8436798424707757,"sequenceIndex":21},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7890108656191221,"sequenceIndex":175},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0766285123625676,"sequenceIndex":434},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.193521810412908,"sequenceIndex":478},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3727995424813484,"sequenceIndex":180},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4182681280976666,"sequenceIndex":355},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8599075980885446,"sequenceIndex":185},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9317871567907272,"sequenceIndex":186},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1986142624635319,"sequenceIndex":261},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6269214974259167,"sequenceIndex":191},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5598141950617628,"sequenceIndex":192},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8544711829266496,"sequenceIndex":194},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.0266358448030535,"sequenceIndex":24},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4484714335868452,"sequenceIndex":99},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.1144681622260624,"sequenceIndex":100},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9783912682659098,"sequenceIndex":441},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8627599099796143,"sequenceIndex":386},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0860259493829498,"sequenceIndex":320},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2234447482996404,"sequenceIndex":209},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8492065159264601,"sequenceIndex":303},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8884142080725931,"sequenceIndex":501},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0259047001397468,"sequenceIndex":107},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1548827808391942,"sequenceIndex":109},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7815309347740937,"sequenceIndex":129},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8985701826792846,"sequenceIndex":220},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8184539626004113,"sequenceIndex":223},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5262801098226815,"sequenceIndex":224},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1087755180331451,"sequenceIndex":113},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1942829112162898,"sequenceIndex":228},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1030900898498348,"sequenceIndex":28},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.194333216684616,"sequenceIndex":233},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.255375216086092,"sequenceIndex":14},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7532801238329827,"sequenceIndex":58},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7032128947046683,"sequenceIndex":343},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3829869214903292,"sequenceIndex":240},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.777789284925086,"sequenceIndex":326},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.117988323098341,"sequenceIndex":358},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.419357526082583,"sequenceIndex":246},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4615855362793475,"sequenceIndex":124},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2011102966771476,"sequenceIndex":449},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8632662420953532,"sequenceIndex":63},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0728475763464398,"sequenceIndex":360},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7580128243128355,"sequenceIndex":502},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.629338501392837,"sequenceIndex":32},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.2429619710905464,"sequenceIndex":130},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.745778218225133,"sequenceIndex":348},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5881652428370847,"sequenceIndex":2},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4012672916378561,"sequenceIndex":133},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1948594205380318,"sequenceIndex":134},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.385301965467861,"sequenceIndex":304},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6454788697530407,"sequenceIndex":17},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6750489646560425,"sequenceIndex":295},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1534641907444851,"sequenceIndex":437},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4512162896570424,"sequenceIndex":472},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.591103544849008,"sequenceIndex":70},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.65721737416697,"sequenceIndex":141},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3755937398049483,"sequenceIndex":422},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-7.338955631449313,"sequenceIndex":462},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.268973334270531,"sequenceIndex":144},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.6389778686871437,"sequenceIndex":145},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.4953005950897578,"sequenceIndex":410},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8317971399178823,"sequenceIndex":147},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.785012106128601,"sequenceIndex":492},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.565736526047666,"sequenceIndex":505},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.055722461659212,"sequenceIndex":300},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1153950554122651,"sequenceIndex":310},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6486019451955303,"sequenceIndex":38},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2254733831177187,"sequenceIndex":403},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3642288341891278,"sequenceIndex":76},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4855639859387169,"sequenceIndex":346},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-5.143432852753377,"sequenceIndex":128},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7635832316061855,"sequenceIndex":157},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.1596981154137884,"sequenceIndex":158},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.2463837318548086,"sequenceIndex":302},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.734388415466785,"sequenceIndex":80},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.885479948142958,"sequenceIndex":468},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7499963394614746,"sequenceIndex":415},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.931421234507558,"sequenceIndex":380},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9977716375314355,"sequenceIndex":82},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8516480223662188,"sequenceIndex":453},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5354833400289563,"sequenceIndex":456},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.154693199813363,"sequenceIndex":353},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.39149294085949,"sequenceIndex":42},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6711681309430686,"sequenceIndex":84},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.157818828206081,"sequenceIndex":85},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.2281501822861998,"sequenceIndex":170},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0955351238541384,"sequenceIndex":494},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.194007248875388,"sequenceIndex":383},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.1661233281107264,"sequenceIndex":174},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6145767407339615,"sequenceIndex":339},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6849655872224758,"sequenceIndex":176},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.143031935069677,"sequenceIndex":11},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.992530515817045,"sequenceIndex":89},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.5632152507280006,"sequenceIndex":421},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.601433586087968,"sequenceIndex":45},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.69105444098366,"sequenceIndex":181},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9807059379320717,"sequenceIndex":319},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.7487103293741963,"sequenceIndex":313},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.3181196587514092,"sequenceIndex":92},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7699224666562228,"sequenceIndex":474},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3756965457881254,"sequenceIndex":450},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4564461768125265,"sequenceIndex":371},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.9739321251755686,"sequenceIndex":345},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.997612791588815,"sequenceIndex":436},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.1313021072552685,"sequenceIndex":95},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.9740968723508225,"sequenceIndex":414},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.1964239472552545,"sequenceIndex":48},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6917790506770243,"sequenceIndex":400},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.9499153465917325,"sequenceIndex":480},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.89341093516011,"sequenceIndex":384},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.1116637847160895,"sequenceIndex":370},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.545121392006742,"sequenceIndex":273},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8072464173843084,"sequenceIndex":198},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6500981923023401,"sequenceIndex":500},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.201787388052271,"sequenceIndex":490},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.6547930806938944,"sequenceIndex":201},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.572057014217358,"sequenceIndex":385},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9599958151631784,"sequenceIndex":333},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.9777493495772727,"sequenceIndex":51},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.599702745811022,"sequenceIndex":390},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.264611165380655,"sequenceIndex":393},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4684461587142734,"sequenceIndex":443},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.213972184805995,"sequenceIndex":13},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4658952496250586,"sequenceIndex":399},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.8451570674608124,"sequenceIndex":329},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.4873510981004436,"sequenceIndex":263},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4583915973981094,"sequenceIndex":493},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.0545588315589383,"sequenceIndex":447},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9426760455064034,"sequenceIndex":214},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.823842791839905,"sequenceIndex":470},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.7183499112391845,"sequenceIndex":27},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.358063842459212,"sequenceIndex":216},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.751383215839482,"sequenceIndex":108},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4562924136309707,"sequenceIndex":218},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6114129235697499,"sequenceIndex":497},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5157828925212515,"sequenceIndex":274},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8378637756436289,"sequenceIndex":222},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1805889429330607,"sequenceIndex":444},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.055056566131996,"sequenceIndex":7},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.497900854424913,"sequenceIndex":412},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.647266955467929,"sequenceIndex":420},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7884796957693494,"sequenceIndex":269},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4592945744716366,"sequenceIndex":114},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4281026174722815,"sequenceIndex":292},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9930135675929601,"sequenceIndex":230},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.017924167891236,"sequenceIndex":457},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.7386865207782933,"sequenceIndex":116},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3646698329095361,"sequenceIndex":378},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.343654655586407,"sequenceIndex":405},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.8881037623642203,"sequenceIndex":235},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4995062111824669,"sequenceIndex":236},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9491566225839064,"sequenceIndex":306},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.862367004659946,"sequenceIndex":238},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.8057733347626272,"sequenceIndex":119},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.547175200988337,"sequenceIndex":60},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.256900198390116,"sequenceIndex":241},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5860965369138416,"sequenceIndex":120},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.218807213881615,"sequenceIndex":446},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3699408025676862,"sequenceIndex":15},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1481986026621562,"sequenceIndex":279},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.177677102448892,"sequenceIndex":308},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.4372499155506913,"sequenceIndex":307},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.4886480471487586,"sequenceIndex":435},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.37514735150258,"sequenceIndex":293},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4773070976807032,"sequenceIndex":250},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3226262332779486,"sequenceIndex":408},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.0163754373342826,"sequenceIndex":364},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5286163099996475,"sequenceIndex":347},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7298989328712548,"sequenceIndex":357},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.657796567749366,"sequenceIndex":275},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.772412475448106,"sequenceIndex":507}],"sampleSize":256,"lambda":3.90625E-4,"random":{},"entriesSeen":512},"tree":{"storeSequenceIndexesEnabled":false,"centerOfMassEnabled":false,"random":{}}},{"sampler":{"weightedSamples":[{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.505977781474662,"sequenceIndex":322},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5059854898127096,"sequenceIndex":145},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5178533124362862,"sequenceIndex":112},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5207682278123955,"sequenceIndex":73},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5361963251497277,"sequenceIndex":5},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.532939664263322,"sequenceIndex":375},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5482763248423206,"sequenceIndex":266},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5625289462542018,"sequenceIndex":131},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5250723099765618,"sequenceIndex":351},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5516689446756178,"sequenceIndex":422},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.555474734215254,"sequenceIndex":338},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5388123573443929,"sequenceIndex":279},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.562210188011806,"sequenceIndex":216},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6705493225978134,"sequenceIndex":232},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.582684933632113,"sequenceIndex":255},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6279366736718449,"sequenceIndex":511},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6465370176114829,"sequenceIndex":2},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7415040077758435,"sequenceIndex":151},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5881507594712443,"sequenceIndex":19},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5852085402584533,"sequenceIndex":40},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6103019466060833,"sequenceIndex":444},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5782967521766245,"sequenceIndex":360},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6093999795987916,"sequenceIndex":478},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6183654390411246,"sequenceIndex":48},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5958380385583253,"sequenceIndex":50},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5858136745798084,"sequenceIndex":105},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5698103333810292,"sequenceIndex":221},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7062156045063205,"sequenceIndex":231},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.896351462072671,"sequenceIndex":366},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7855339923155613,"sequenceIndex":121},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6226277938964764,"sequenceIndex":62},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6572757374150333,"sequenceIndex":504},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.943979189163138,"sequenceIndex":135},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6966538410997436,"sequenceIndex":137},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7405349108416687,"sequenceIndex":141},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.152395580785274,"sequenceIndex":436},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7446388967620914,"sequenceIndex":75},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6289892016983869,"sequenceIndex":77},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7261502693876258,"sequenceIndex":158},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9257082803894178,"sequenceIndex":161},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6024959399469216,"sequenceIndex":413},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6768418143610527,"sequenceIndex":171},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.833735403238033,"sequenceIndex":285},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8946077348740243,"sequenceIndex":177},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.857858680057098,"sequenceIndex":181},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7084031970391405,"sequenceIndex":92},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6253839378895836,"sequenceIndex":445},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6269126573859838,"sequenceIndex":451},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3060295969587594,"sequenceIndex":98},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7308557360336072,"sequenceIndex":383},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.650666334080312,"sequenceIndex":420},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.901513987846085,"sequenceIndex":314},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8661538819861175,"sequenceIndex":215},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6303128485938437,"sequenceIndex":381},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.751433683261802,"sequenceIndex":110},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8485842622379738,"sequenceIndex":317},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7627114088422097,"sequenceIndex":28},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.143811701219382,"sequenceIndex":424},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0895826561653676,"sequenceIndex":316},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9079514128706407,"sequenceIndex":437},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1885923849232072,"sequenceIndex":247},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8467818984400255,"sequenceIndex":31},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0884883655868998,"sequenceIndex":475},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7782675504902605,"sequenceIndex":32},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9491292664755695,"sequenceIndex":396},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.307331877941503,"sequenceIndex":330},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9465827808338818,"sequenceIndex":67},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8158440705522925,"sequenceIndex":136},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8737095439581721,"sequenceIndex":139},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5065140350051394,"sequenceIndex":70},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1658066104102458,"sequenceIndex":71},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.0699426358733857,"sequenceIndex":144},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6702427842146745,"sequenceIndex":414},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1822352356839585,"sequenceIndex":484},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8354923374706584,"sequenceIndex":150},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6361222221457208,"sequenceIndex":152},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.0633877363070945,"sequenceIndex":155},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9864061917262106,"sequenceIndex":261},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7203953329691624,"sequenceIndex":159},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1279654940356565,"sequenceIndex":502},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1167086569350668,"sequenceIndex":421},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.441879918288986,"sequenceIndex":82},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9110269719881178,"sequenceIndex":83},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1057051068882529,"sequenceIndex":8},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6537653016065526,"sequenceIndex":431},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.088877570905752,"sequenceIndex":339},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.24666743268922,"sequenceIndex":174},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4385580333257408,"sequenceIndex":474},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3217593308028621,"sequenceIndex":178},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2848893801795935,"sequenceIndex":307},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4691087091054416,"sequenceIndex":182},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.222239960565069,"sequenceIndex":433},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4329185136815124,"sequenceIndex":435},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7331208921658889,"sequenceIndex":188},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.265617497800334,"sequenceIndex":191},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.932700775575517,"sequenceIndex":364},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9570829436299965,"sequenceIndex":323},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.364229254575966,"sequenceIndex":459},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.0437457677834954,"sequenceIndex":198},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5547454073530025,"sequenceIndex":372},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9111607184343975,"sequenceIndex":465},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8252028101045511,"sequenceIndex":51},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1950201963105314,"sequenceIndex":297},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0476902010873907,"sequenceIndex":209},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.604854389556549,"sequenceIndex":382},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8759944923151639,"sequenceIndex":332},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9538826127109479,"sequenceIndex":107},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.377333864087427,"sequenceIndex":389},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6454669511711073,"sequenceIndex":397},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7875702968236381,"sequenceIndex":386},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8815158119616491,"sequenceIndex":223},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0263257603679823,"sequenceIndex":447},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0671553843558272,"sequenceIndex":337},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8365395841294072,"sequenceIndex":228},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5219715245235594,"sequenceIndex":230},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2632268954858559,"sequenceIndex":15},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3708754338950662,"sequenceIndex":234},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6686917620029045,"sequenceIndex":59},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2904513984832309,"sequenceIndex":238},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9083292575659573,"sequenceIndex":241},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3345292056612856,"sequenceIndex":14},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.725559029196066,"sequenceIndex":326},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2285644812600167,"sequenceIndex":278},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1562036048593556,"sequenceIndex":479},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0870909552006922,"sequenceIndex":250},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7908916972847322,"sequenceIndex":63},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1208442614333478,"sequenceIndex":127},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7857464924428452,"sequenceIndex":501},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.0702051497552385,"sequenceIndex":304},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.954177187995217,"sequenceIndex":130},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.5945174352177816,"sequenceIndex":493},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.323372498802291,"sequenceIndex":429},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.594930588655321,"sequenceIndex":275},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9764012400839932,"sequenceIndex":134},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.3358664758415335,"sequenceIndex":500},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5812082636290123,"sequenceIndex":68},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1457620375298836,"sequenceIndex":477},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.1493866515461537,"sequenceIndex":302},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.6757181469344657,"sequenceIndex":392},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.948043867319927,"sequenceIndex":140},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.264417937406938,"sequenceIndex":410},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4712532859011813,"sequenceIndex":142},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1745726440410458,"sequenceIndex":143},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.071814676638922,"sequenceIndex":36},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.550158494315923,"sequenceIndex":368},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.179680636703256,"sequenceIndex":146},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.15073927550742,"sequenceIndex":147},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.530856089256786,"sequenceIndex":74},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5224994767502966,"sequenceIndex":149},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4353514687124742,"sequenceIndex":9},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.48471038394687,"sequenceIndex":288},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.4520929468396173,"sequenceIndex":76},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.015933535302889,"sequenceIndex":423},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.4893547724929954,"sequenceIndex":356},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.9654119803580636,"sequenceIndex":510},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.356939579966619,"sequenceIndex":369},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.383066152507208,"sequenceIndex":374},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.2140400431751504,"sequenceIndex":79},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.624429358131523,"sequenceIndex":426},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6457916642698598,"sequenceIndex":282},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.3058940553685416,"sequenceIndex":469},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7767451722290422,"sequenceIndex":391},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7344114186566202,"sequenceIndex":441},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.9158067139372887,"sequenceIndex":483},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.2547034553214202,"sequenceIndex":394},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3970043830471166,"sequenceIndex":166},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.716348245472768,"sequenceIndex":319},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9912037989381373,"sequenceIndex":42},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.8977296129222014,"sequenceIndex":409},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.989041260833898,"sequenceIndex":85},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.1542091719832457,"sequenceIndex":290},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2418949002037674,"sequenceIndex":21},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3628774791231053,"sequenceIndex":264},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.502403154284098,"sequenceIndex":454},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.3784856559823715,"sequenceIndex":175},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.1784902571879177,"sequenceIndex":11},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.8207630704618016,"sequenceIndex":487},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.390730613648198,"sequenceIndex":89},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.476719195169579,"sequenceIndex":387},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.737332149076059,"sequenceIndex":45},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9645518272627078,"sequenceIndex":428},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.1060641272910927,"sequenceIndex":268},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6840116057706285,"sequenceIndex":183},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.6536717455852123,"sequenceIndex":46},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.259761434870378,"sequenceIndex":185},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6612555081491769,"sequenceIndex":362},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.765578602986112,"sequenceIndex":313},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7331265610399673,"sequenceIndex":94},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.081506135766315,"sequenceIndex":189},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2831074757013377,"sequenceIndex":95},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4460150586746137,"sequenceIndex":476},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.9668757409472937,"sequenceIndex":192},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.41212681263999,"sequenceIndex":6},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-8.056772495794094,"sequenceIndex":97},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.533645819266034,"sequenceIndex":325},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.4973546280209864,"sequenceIndex":432},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.376412901542896,"sequenceIndex":291},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.837938596022434,"sequenceIndex":99},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.1617378006439893,"sequenceIndex":199},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9735813687326793,"sequenceIndex":25},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.390730237915575,"sequenceIndex":496},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.128057960051193,"sequenceIndex":393},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.3990617227607864,"sequenceIndex":303},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8612502571363462,"sequenceIndex":204},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.7765465169890398,"sequenceIndex":205},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.1728073994084443,"sequenceIndex":206},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6667495013520364,"sequenceIndex":403},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.5247532718254773,"sequenceIndex":26},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3175950200763067,"sequenceIndex":208},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8327787010248011,"sequenceIndex":467},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.8274495912961446,"sequenceIndex":463},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.8940013020250777,"sequenceIndex":106},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.607390655136571,"sequenceIndex":301},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7546711972102895,"sequenceIndex":214},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4330910022023406,"sequenceIndex":370},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-6.005178841336033,"sequenceIndex":54},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6977191166258279,"sequenceIndex":257},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.858829625605784,"sequenceIndex":379},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.4771056981128665,"sequenceIndex":219},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0055536636730915,"sequenceIndex":220},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.141920164125772,"sequenceIndex":499},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2095190103840436,"sequenceIndex":263},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0587560273087122,"sequenceIndex":347},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.371398930831987,"sequenceIndex":7},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.153289490534632,"sequenceIndex":224},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1038645419594841,"sequenceIndex":271},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6684618925365389,"sequenceIndex":227},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.8684509335680035,"sequenceIndex":473},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.186926482776944,"sequenceIndex":277},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6718151615863501,"sequenceIndex":287},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.363218686783917,"sequenceIndex":286},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.3134907351105074,"sequenceIndex":503},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.79376092799714,"sequenceIndex":348},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8058791466003448,"sequenceIndex":482},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.1432545772861435,"sequenceIndex":128},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.115207145473793,"sequenceIndex":349},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.7911382434412673,"sequenceIndex":309},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9595693665641445,"sequenceIndex":457},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3801200434696348,"sequenceIndex":270},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.0527958994565334,"sequenceIndex":60},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9539237416512159,"sequenceIndex":240},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.894953547331569,"sequenceIndex":367},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.744266938342351,"sequenceIndex":336},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.910558182378848,"sequenceIndex":61},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.199693407960174,"sequenceIndex":245},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.765158871792935,"sequenceIndex":355},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4139962734491343,"sequenceIndex":346},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1891945082023085,"sequenceIndex":248},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.7389426379003186,"sequenceIndex":398},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8151655434454155,"sequenceIndex":453},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.058704984073989,"sequenceIndex":300},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.5393469795316106,"sequenceIndex":260},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.0593328076875967,"sequenceIndex":253},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.1006478313706327,"sequenceIndex":452},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.184205604833071,"sequenceIndex":310},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.095848568645303,"sequenceIndex":485}],"sampleSize":256,"lambda":3.90625E-4,"random":{},"entriesSeen":512},"tree":{"storeSequenceIndexesEnabled":false,"centerOfMassEnabled":false,"random":{}}},{"sampler":{"weightedSamples":[{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.4693039934748071,"sequenceIndex":140},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.4840121511509101,"sequenceIndex":478},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.49998281087261365,"sequenceIndex":415},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.486735142529108,"sequenceIndex":482},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5611010898022386,"sequenceIndex":162},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5012807051018184,"sequenceIndex":223},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5271637626693254,"sequenceIndex":58},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5422021993308042,"sequenceIndex":481},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5082465505591345,"sequenceIndex":76},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5677730798692979,"sequenceIndex":486},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5880313064278875,"sequenceIndex":332},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5043128038679372,"sequenceIndex":103},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6076316681393219,"sequenceIndex":109},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6863636877518756,"sequenceIndex":289},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5471091245492284,"sequenceIndex":127},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5509402262786786,"sequenceIndex":135},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5505598331822379,"sequenceIndex":143},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5225122297069983,"sequenceIndex":145},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6355053262311434,"sequenceIndex":158},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.701503583834551,"sequenceIndex":328},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.567893541170008,"sequenceIndex":386},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5907662348240884,"sequenceIndex":183},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7072740971321273,"sequenceIndex":259},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5568980045651706,"sequenceIndex":381},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7418338910274144,"sequenceIndex":201},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7235232650458576,"sequenceIndex":211},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6187497038373624,"sequenceIndex":430},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7788777869726062,"sequenceIndex":404},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8210079405811754,"sequenceIndex":119},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5495450386878632,"sequenceIndex":243},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9078497185684644,"sequenceIndex":125},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5891012477713203,"sequenceIndex":491},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9551517061250699,"sequenceIndex":348},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5658923977327448,"sequenceIndex":372},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8276528365305345,"sequenceIndex":388},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7172920601707917,"sequenceIndex":433},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5860191420620445,"sequenceIndex":375},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.957090211643823,"sequenceIndex":360},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6781990000962219,"sequenceIndex":159},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8597732780816492,"sequenceIndex":391},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7522013083844744,"sequenceIndex":164},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6493146050755455,"sequenceIndex":169},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0108340473986404,"sequenceIndex":453},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6557727976765053,"sequenceIndex":354},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6871588696894486,"sequenceIndex":490},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1794119814214605,"sequenceIndex":408},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8341906176801821,"sequenceIndex":340},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8195031016721681,"sequenceIndex":370},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7257407040295712,"sequenceIndex":98},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7842429002860981,"sequenceIndex":101},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.912867079478571,"sequenceIndex":204},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7615922458606563,"sequenceIndex":104},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7843977497840715,"sequenceIndex":212},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6423142116126185,"sequenceIndex":296},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6813013440253289,"sequenceIndex":390},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7860125352256891,"sequenceIndex":56},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7935881203462887,"sequenceIndex":228},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.042222776283626,"sequenceIndex":117},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.939298721489795,"sequenceIndex":59},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8244293278842825,"sequenceIndex":323},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7315920354123385,"sequenceIndex":245},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1312344852875373,"sequenceIndex":454},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9151352058940596,"sequenceIndex":63},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2713683789732675,"sequenceIndex":501},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9974942980785864,"sequenceIndex":33},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1449741628601358,"sequenceIndex":410},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2904431036192228,"sequenceIndex":32},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.487898602209545,"sequenceIndex":34},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5933402184049803,"sequenceIndex":350},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6764617501251455,"sequenceIndex":290},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8290419952578338,"sequenceIndex":70},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0448077239239097,"sequenceIndex":443},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7546826975329345,"sequenceIndex":146},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7922481636302625,"sequenceIndex":425},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7316430104895422,"sequenceIndex":312},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3081190696086284,"sequenceIndex":153},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.480257790182236,"sequenceIndex":39},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9366783670660684,"sequenceIndex":156},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9564738973448594,"sequenceIndex":426},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2747740992839236,"sequenceIndex":160},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9977291974051687,"sequenceIndex":434},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7982023625270928,"sequenceIndex":498},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8563817832050433,"sequenceIndex":424},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7206868595607017,"sequenceIndex":441},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7481669338644068,"sequenceIndex":170},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2776815534781256,"sequenceIndex":86},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4604225854925659,"sequenceIndex":432},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.220472855465804,"sequenceIndex":293},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5229525711874794,"sequenceIndex":178},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1001301216400545,"sequenceIndex":301},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8024742628655654,"sequenceIndex":321},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3527034604967552,"sequenceIndex":411},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2476179852970386,"sequenceIndex":458},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.451249484491594,"sequenceIndex":324},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.096480426410148,"sequenceIndex":191},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9824732665326257,"sequenceIndex":193},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8805796191065678,"sequenceIndex":452},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.278795977710343,"sequenceIndex":49},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7554382378200567,"sequenceIndex":198},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8359945035370306,"sequenceIndex":6},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2691066380171048,"sequenceIndex":304},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0253610189493003,"sequenceIndex":442},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2921027944209784,"sequenceIndex":450},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8920424111427967,"sequenceIndex":297},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9009950735496232,"sequenceIndex":52},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2657759094909253,"sequenceIndex":413},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8399496366410977,"sequenceIndex":344},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7168500042708827,"sequenceIndex":217},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9250305682075238,"sequenceIndex":218},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7585514445586108,"sequenceIndex":54},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.1819750945579477,"sequenceIndex":497},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4011384114411602,"sequenceIndex":276},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7219745839493994,"sequenceIndex":418},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6139596096829745,"sequenceIndex":229},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9708769708940922,"sequenceIndex":436},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7630623714560567,"sequenceIndex":29},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.202489918004328,"sequenceIndex":234},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2538813168178122,"sequenceIndex":118},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.230765782268019,"sequenceIndex":273},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.524664538142794,"sequenceIndex":120},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9317868382662906,"sequenceIndex":437},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3186797192850157,"sequenceIndex":302},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5442938653140326,"sequenceIndex":122},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4502871318144939,"sequenceIndex":248},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2477189032065115,"sequenceIndex":412},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1610175341314568,"sequenceIndex":317},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0154162939234412,"sequenceIndex":338},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7036098490021319,"sequenceIndex":507},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4684166719753604,"sequenceIndex":345},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9080252996790925,"sequenceIndex":470},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3307029746142691,"sequenceIndex":131},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.928294478550343,"sequenceIndex":132},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7730447964794105,"sequenceIndex":66},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8234057082391222,"sequenceIndex":469},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.8710011248350655,"sequenceIndex":465},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.406216469052101,"sequenceIndex":395},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.558600329073051,"sequenceIndex":256},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6903613234794921,"sequenceIndex":335},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6033482531013987,"sequenceIndex":139},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.729324195951773,"sequenceIndex":35},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8701283063852006,"sequenceIndex":476},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.045453823508399,"sequenceIndex":142},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.5672281793078375,"sequenceIndex":416},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.929418511967215,"sequenceIndex":144},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.0161496988123058,"sequenceIndex":36},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.434012944200853,"sequenceIndex":72},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.257114067102977,"sequenceIndex":147},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5758322872760184,"sequenceIndex":9},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.256474043625807,"sequenceIndex":315},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7460672076676718,"sequenceIndex":343},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7583835481101875,"sequenceIndex":266},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.595526466065567,"sequenceIndex":38},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.0369262215609436,"sequenceIndex":382},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.161641177201963,"sequenceIndex":154},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.550157884158847,"sequenceIndex":459},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.2262095700230327,"sequenceIndex":19},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.022695249441574,"sequenceIndex":316},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2477430285654614,"sequenceIndex":419},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3334605624354616,"sequenceIndex":462},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5585595775710628,"sequenceIndex":20},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2982128613087942,"sequenceIndex":287},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.3049439733886365,"sequenceIndex":494},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4010933655933515,"sequenceIndex":376},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.5817689168509617,"sequenceIndex":41},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1316100257008215,"sequenceIndex":165},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3902601303387454,"sequenceIndex":83},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2275501181903552,"sequenceIndex":473},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.139273127935113,"sequenceIndex":84},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7518080474659888,"sequenceIndex":285},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8075453441853364,"sequenceIndex":5},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1539182750182326,"sequenceIndex":346},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4416789057947337,"sequenceIndex":309},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3405924328751537,"sequenceIndex":308},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.397511766027813,"sequenceIndex":349},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.142243948587143,"sequenceIndex":175},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.404005877096511,"sequenceIndex":11},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.80977136716229,"sequenceIndex":177},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.889730929881774,"sequenceIndex":405},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5559965486291447,"sequenceIndex":179},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.120385382896049,"sequenceIndex":90},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.3259753754128396,"sequenceIndex":369},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4245404661370982,"sequenceIndex":44},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1328122125124227,"sequenceIndex":438},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.633631161060294,"sequenceIndex":92},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.5423984848678742,"sequenceIndex":325},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5338681616902066,"sequenceIndex":22},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9421516687728548,"sequenceIndex":417},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.393988324768284,"sequenceIndex":94},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.5387934287250133,"sequenceIndex":353},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5583213569931575,"sequenceIndex":47},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5510305922438934,"sequenceIndex":257},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3971529471929496,"sequenceIndex":192},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3736935939673143,"sequenceIndex":12},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.0387468758769165,"sequenceIndex":479},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.9589041798610998,"sequenceIndex":357},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.193452238795127,"sequenceIndex":196},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5695132587437322,"sequenceIndex":197},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.6249830063028416,"sequenceIndex":396},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6541157682574397,"sequenceIndex":366},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6788152575377886,"sequenceIndex":461},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2852030892433832,"sequenceIndex":330},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.598111383595755,"sequenceIndex":445},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.827687638257358,"sequenceIndex":489},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.691417698226775,"sequenceIndex":51},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7010400884303665,"sequenceIndex":464},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.039396640688582,"sequenceIndex":449},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.1238924141290254,"sequenceIndex":292},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.5997064530029075,"sequenceIndex":13},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9988148333142448,"sequenceIndex":427},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.604337001671381,"sequenceIndex":314},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.4505098794943754,"sequenceIndex":278},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5116784422879554,"sequenceIndex":53},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4359543735090325,"sequenceIndex":367},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.672610098853346,"sequenceIndex":214},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.6670902368068337,"sequenceIndex":384},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.2340315703026965,"sequenceIndex":26},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2375071707024097,"sequenceIndex":216},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6788699421853945,"sequenceIndex":108},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-8.259000534052335,"sequenceIndex":342},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.5418010977660335,"sequenceIndex":110},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.040966343265917,"sequenceIndex":220},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.4269689595693746,"sequenceIndex":111},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.3035992563476353,"sequenceIndex":222},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.9950990169800913,"sequenceIndex":112},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.4324327783182444,"sequenceIndex":393},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.016700837134444,"sequenceIndex":447},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7467854159960567,"sequenceIndex":227},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.2296403182191176,"sequenceIndex":485},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.325928175787128,"sequenceIndex":499},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.511023829904382,"sequenceIndex":115},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0475266771109986,"sequenceIndex":355},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.3673161297430507,"sequenceIndex":377},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.516311042305978,"sequenceIndex":233},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.9056404641438123,"sequenceIndex":439},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.796021448375709,"sequenceIndex":261},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.132422842226857,"sequenceIndex":236},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2906931505556647,"sequenceIndex":313},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.263225268918278,"sequenceIndex":493},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3835133443502203,"sequenceIndex":239},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.1140644987025636,"sequenceIndex":15},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.493021059835676,"sequenceIndex":241},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.120645378701462,"sequenceIndex":121},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1154990269263556,"sequenceIndex":421},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.615409380358695,"sequenceIndex":61},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.4954184464712847,"sequenceIndex":244},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.078127836055196,"sequenceIndex":246},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.015400895758009,"sequenceIndex":277},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9417785868011939,"sequenceIndex":62},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.470430459850424,"sequenceIndex":249},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2735315375042235,"sequenceIndex":124},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3941090522785706,"sequenceIndex":1},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.249559568815418,"sequenceIndex":446},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.4861818293297353,"sequenceIndex":253},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.604079715543496,"sequenceIndex":254},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0531723598862504,"sequenceIndex":255},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.1132054472607527,"sequenceIndex":512}],"sampleSize":256,"lambda":3.90625E-4,"random":{},"entriesSeen":512},"tree":{"storeSequenceIndexesEnabled":false,"centerOfMassEnabled":false,"random":{}}},{"sampler":{"weightedSamples":[{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.43564362268112,"sequenceIndex":303},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.4371250457439498,"sequenceIndex":133},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.4573606480781339,"sequenceIndex":291},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.43871853184354903,"sequenceIndex":147},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.4761026856051829,"sequenceIndex":187},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.47147597368085215,"sequenceIndex":97},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.48952711355892037,"sequenceIndex":417},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.45977557766947996,"sequenceIndex":447},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.4795020155462564,"sequenceIndex":478},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.516603477158614,"sequenceIndex":81},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5246394060286124,"sequenceIndex":460},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7514994644780828,"sequenceIndex":198},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5007122458366595,"sequenceIndex":219},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5158892644557309,"sequenceIndex":466},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6114227677337317,"sequenceIndex":283},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.45980219242686515,"sequenceIndex":465},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.46571522143434313,"sequenceIndex":452},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5554616841789418,"sequenceIndex":309},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.510595819153248,"sequenceIndex":155},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5198492353822775,"sequenceIndex":167},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.518509450153846,"sequenceIndex":87},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5418909188306894,"sequenceIndex":183},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5288997604871732,"sequenceIndex":384},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7556414743810932,"sequenceIndex":48},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7676259171490208,"sequenceIndex":429},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5009910145911629,"sequenceIndex":397},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9274557184520615,"sequenceIndex":279},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6209406808373502,"sequenceIndex":281},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6660301995779561,"sequenceIndex":232},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8435940339796425,"sequenceIndex":388},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6166393839335171,"sequenceIndex":414},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6153898034674699,"sequenceIndex":505},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7725763538419961,"sequenceIndex":482},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.46594635952470953,"sequenceIndex":34},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5091454464840527,"sequenceIndex":70},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6589123055464675,"sequenceIndex":338},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5585464007464205,"sequenceIndex":149},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5764501186236005,"sequenceIndex":152},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5810498642409427,"sequenceIndex":78},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6347916491618363,"sequenceIndex":345},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8450782420885469,"sequenceIndex":485},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5732235201078799,"sequenceIndex":42},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6375580059381125,"sequenceIndex":357},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5508276029297334,"sequenceIndex":416},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8552904477417995,"sequenceIndex":90},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5340973726716208,"sequenceIndex":268},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7804584364543581,"sequenceIndex":361},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0794424987270652,"sequenceIndex":192},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8783936412547414,"sequenceIndex":501},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8457817327773992,"sequenceIndex":100},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0012769896978195,"sequenceIndex":207},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6701930212794512,"sequenceIndex":209},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6074667961006694,"sequenceIndex":213},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3682946617956706,"sequenceIndex":216},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.001766615882566,"sequenceIndex":474},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6316751250822574,"sequenceIndex":15},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.006038451676484,"sequenceIndex":115},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0759312328268462,"sequenceIndex":234},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.686408016832157,"sequenceIndex":238},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.104956523500903,"sequenceIndex":241},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9110490547967139,"sequenceIndex":274},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8258686099039253,"sequenceIndex":325},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8023833423942451,"sequenceIndex":383},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7830189214682873,"sequenceIndex":511},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0952219781851587,"sequenceIndex":406},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8575287779547586,"sequenceIndex":390},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8575000047375269,"sequenceIndex":135},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5266251733832674,"sequenceIndex":137},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6941989275503928,"sequenceIndex":300},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6869638387497212,"sequenceIndex":140},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5725584732447536,"sequenceIndex":4},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2419977818339887,"sequenceIndex":9},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2366862654473483,"sequenceIndex":382},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6957841426671072,"sequenceIndex":148},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6870957212300259,"sequenceIndex":450},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1061313684847707,"sequenceIndex":446},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6912600947417608,"sequenceIndex":391},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9356294801402132,"sequenceIndex":156},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7923888676662443,"sequenceIndex":158},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.586567230488423,"sequenceIndex":418},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0618267006322137,"sequenceIndex":163},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.859868872761881,"sequenceIndex":40},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.281519509284326,"sequenceIndex":82},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5752562833073775,"sequenceIndex":415},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7952841138506135,"sequenceIndex":433},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8910597111243356,"sequenceIndex":172},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.744488161428853,"sequenceIndex":174},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0845001510267387,"sequenceIndex":411},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9677462122054563,"sequenceIndex":275},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.019511172171816,"sequenceIndex":486},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2210628922482425,"sequenceIndex":477},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9803702411925196,"sequenceIndex":92},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9067446601949632,"sequenceIndex":288},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2455415296594428,"sequenceIndex":47},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8293745282787615,"sequenceIndex":95},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.107056182589819,"sequenceIndex":495},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2528677741491028,"sequenceIndex":479},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9162616906066365,"sequenceIndex":196},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9800852246672552,"sequenceIndex":360},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8498948654808381,"sequenceIndex":394},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0583422725829406,"sequenceIndex":440},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.10730693634504,"sequenceIndex":287},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.723535872373937,"sequenceIndex":362},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2953161725739883,"sequenceIndex":458},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7581128272350482,"sequenceIndex":410},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.310884110024715,"sequenceIndex":436},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8767017378133748,"sequenceIndex":392},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6803209634234184,"sequenceIndex":370},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5291519410662289,"sequenceIndex":381},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3551023123023525,"sequenceIndex":304},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4707406319916156,"sequenceIndex":307},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.033655042555525,"sequenceIndex":225},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.3222474379688958,"sequenceIndex":372},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5707571369570705,"sequenceIndex":228},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5534755580835495,"sequenceIndex":114},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6172538862033081,"sequenceIndex":324},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6640590654699507,"sequenceIndex":508},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7653378783243954,"sequenceIndex":237},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3005265634927412,"sequenceIndex":316},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2867924597781855,"sequenceIndex":490},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4456875231195052,"sequenceIndex":120},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0028166058141157,"sequenceIndex":12},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4368049759460284,"sequenceIndex":247},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.079706548973351,"sequenceIndex":249},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1046124118873955,"sequenceIndex":251},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1909115443719125,"sequenceIndex":328},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8401790685319908,"sequenceIndex":127},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8209742044359856,"sequenceIndex":483},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8800526770745007,"sequenceIndex":441},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.212355900423898,"sequenceIndex":65},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6975274221857046,"sequenceIndex":442},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.4005308843317588,"sequenceIndex":294},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7318947438076018,"sequenceIndex":487},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9289088092405697,"sequenceIndex":373},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6363880794308827,"sequenceIndex":376},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.2050562895442924,"sequenceIndex":68},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7054571390173594,"sequenceIndex":136},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.897999633637805,"sequenceIndex":17},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.32185462067358,"sequenceIndex":139},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.6192556307139117,"sequenceIndex":35},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.368527976352415,"sequenceIndex":129},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0615702836061474,"sequenceIndex":142},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7079777726642171,"sequenceIndex":71},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3251836045613137,"sequenceIndex":471},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4869891566992832,"sequenceIndex":315},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-5.729056661882351,"sequenceIndex":73},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2443745129487724,"sequenceIndex":146},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.253938397246215,"sequenceIndex":510},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.288169261847945,"sequenceIndex":322},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.0067008102078483,"sequenceIndex":444},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7638694236485958,"sequenceIndex":278},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.7096680304274297,"sequenceIndex":354},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.79153595602323,"sequenceIndex":339},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.5984631499294055,"sequenceIndex":154},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.0963882181703934,"sequenceIndex":321},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.682657810051333,"sequenceIndex":39},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5114623561337919,"sequenceIndex":260},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.1238252138261657,"sequenceIndex":423},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3337422709242683,"sequenceIndex":159},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.333602281983634,"sequenceIndex":20},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.8883792968271256,"sequenceIndex":160},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.820935041860034,"sequenceIndex":342},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.304476775631747,"sequenceIndex":405},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.9967431044830874,"sequenceIndex":364},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.3809198857705396,"sequenceIndex":165},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.352928534832491,"sequenceIndex":413},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3907507386096722,"sequenceIndex":270},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.9628916849537443,"sequenceIndex":168},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6454435280245114,"sequenceIndex":10},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.777638120222282,"sequenceIndex":170},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.813311265927615,"sequenceIndex":265},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.9469842008155345,"sequenceIndex":43},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.111596378003309,"sequenceIndex":173},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.105812177023676,"sequenceIndex":480},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8340799034242632,"sequenceIndex":175},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7886182248301956,"sequenceIndex":451},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.975550345320658,"sequenceIndex":314},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6551198911355482,"sequenceIndex":178},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4752724931810643,"sequenceIndex":179},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.0790118235072472,"sequenceIndex":371},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9166799103856191,"sequenceIndex":181},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3257894792163318,"sequenceIndex":182},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.1015099585376262,"sequenceIndex":301},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5889627318779227,"sequenceIndex":496},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5138178663435793,"sequenceIndex":488},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2099152635938057,"sequenceIndex":186},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.1227736306554275,"sequenceIndex":399},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.6172735665201303,"sequenceIndex":402},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5679419449929286,"sequenceIndex":189},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.835162710194383,"sequenceIndex":459},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9239829055935393,"sequenceIndex":191},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.893076843205652,"sequenceIndex":3},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8484007631905348,"sequenceIndex":340},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.239376312686396,"sequenceIndex":194},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.1495954328433458,"sequenceIndex":492},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.8679107077217996,"sequenceIndex":98},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-5.965539150654346,"sequenceIndex":308},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9122070988316024,"sequenceIndex":504},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5426728912675862,"sequenceIndex":199},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.300437106256786,"sequenceIndex":13},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.7042013783777508,"sequenceIndex":311},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.108556673645134,"sequenceIndex":299},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.4716393263418484,"sequenceIndex":203},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6161019459591197,"sequenceIndex":51},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1911854019667187,"sequenceIndex":204},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.846865418579773,"sequenceIndex":206},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.1846657145094346,"sequenceIndex":421},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.359065018435117,"sequenceIndex":26},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.2676667121454583,"sequenceIndex":431},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.924667748726317,"sequenceIndex":104},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8196099147217888,"sequenceIndex":455},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4086262886863146,"sequenceIndex":53},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3157130262140329,"sequenceIndex":298},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1398813577357325,"sequenceIndex":374},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.4111810207234985,"sequenceIndex":215},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.389259063541299,"sequenceIndex":6},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7342290046658315,"sequenceIndex":481},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9308904382664576,"sequenceIndex":109},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9048890141537136,"sequenceIndex":267},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.666633378944688,"sequenceIndex":55},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8731886451049824,"sequenceIndex":386},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.8467974293097438,"sequenceIndex":493},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-5.27297051187847,"sequenceIndex":389},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.0093044219719536,"sequenceIndex":56},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3251211085451986,"sequenceIndex":112},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.5481764648320095,"sequenceIndex":113},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.560372863809715,"sequenceIndex":285},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.902899944984877,"sequenceIndex":7},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7234512418227514,"sequenceIndex":350},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.2532644319936304,"sequenceIndex":230},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.0849920979654133,"sequenceIndex":310},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.977103740684771,"sequenceIndex":58},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.41147224837413,"sequenceIndex":409},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9278605720815845,"sequenceIndex":117},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9412501621921257,"sequenceIndex":235},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.1291084303226304,"sequenceIndex":118},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9009703349809295,"sequenceIndex":236},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.061128638650348,"sequenceIndex":29},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.6751543501815416,"sequenceIndex":498},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8393129660859562,"sequenceIndex":60},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3239475963105274,"sequenceIndex":121},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.1165837099037477,"sequenceIndex":242},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9424220107555188,"sequenceIndex":387},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.869451989788618,"sequenceIndex":464},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.1055962503551244,"sequenceIndex":395},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.55010745294789,"sequenceIndex":246},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.624334664972687,"sequenceIndex":359},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.0618772587549405,"sequenceIndex":62},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.3424967625093074,"sequenceIndex":295},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7048174807477723,"sequenceIndex":125},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5976289496378198,"sequenceIndex":250},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.511121532844419,"sequenceIndex":509},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.606549529787768,"sequenceIndex":502},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3824978655327256,"sequenceIndex":457},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8664743065999159,"sequenceIndex":432},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2368415807248208,"sequenceIndex":512}],"sampleSize":256,"lambda":3.90625E-4,"random":{},"entriesSeen":512},"tree":{"storeSequenceIndexesEnabled":false,"centerOfMassEnabled":false,"random":{}}},{"sampler":{"weightedSamples":[{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.45611357824685034,"sequenceIndex":298},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.49128962489658967,"sequenceIndex":162},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.4573128599831167,"sequenceIndex":249},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.4996234591571578,"sequenceIndex":369},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.534785402827346,"sequenceIndex":160},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.4953470748476184,"sequenceIndex":210},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.46833240569362067,"sequenceIndex":247},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5302928482085455,"sequenceIndex":508},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5901619323612171,"sequenceIndex":272},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6034381313942498,"sequenceIndex":277},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6269190952751202,"sequenceIndex":296},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.49646227414073685,"sequenceIndex":97},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.515532410191545,"sequenceIndex":216},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5333667276953433,"sequenceIndex":57},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5727717514629719,"sequenceIndex":326},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5601356095019336,"sequenceIndex":477},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9141779934407832,"sequenceIndex":136},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7299170804496616,"sequenceIndex":149},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7413383451351178,"sequenceIndex":434},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7996179000226884,"sequenceIndex":501},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7121365703975346,"sequenceIndex":169},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6929228760733441,"sequenceIndex":455},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8020832413784781,"sequenceIndex":280},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.670815054416015,"sequenceIndex":351},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.57830907949723,"sequenceIndex":51},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5521435192240409,"sequenceIndex":211},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6099229635039507,"sequenceIndex":265},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7142994264894752,"sequenceIndex":259},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7507660741144664,"sequenceIndex":236},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6455939887024992,"sequenceIndex":291},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6189190355112103,"sequenceIndex":4},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5666430336432758,"sequenceIndex":461},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9717820164570948,"sequenceIndex":258},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.160721696148165,"sequenceIndex":138},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2455647381911374,"sequenceIndex":303},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8832169696424109,"sequenceIndex":473},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.099362695570444,"sequenceIndex":486},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8307716372760733,"sequenceIndex":309},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2057128832245352,"sequenceIndex":159},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8992116515786022,"sequenceIndex":297},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8292830312068595,"sequenceIndex":339},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.048432420485059,"sequenceIndex":171},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8227157303695898,"sequenceIndex":468},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8361587778568739,"sequenceIndex":464},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.706559472039991,"sequenceIndex":452},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9476857457342514,"sequenceIndex":47},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8724210575285891,"sequenceIndex":189},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8245279467814756,"sequenceIndex":193},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8558402330545576,"sequenceIndex":197},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6248148707675507,"sequenceIndex":200},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5997395451552381,"sequenceIndex":206},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6098753144324016,"sequenceIndex":105},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.848339056877536,"sequenceIndex":353},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9220931774861819,"sequenceIndex":108},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6808707565279613,"sequenceIndex":438},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9345063697739612,"sequenceIndex":225},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1294651303024759,"sequenceIndex":114},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8018977898070954,"sequenceIndex":234},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8196815360133274,"sequenceIndex":354},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8124865104878325,"sequenceIndex":411},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6539945144120517,"sequenceIndex":123},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7052177983011589,"sequenceIndex":319},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0141003532165194,"sequenceIndex":126},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6096932812323415,"sequenceIndex":500},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8448283256400593,"sequenceIndex":130},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.109146998393224,"sequenceIndex":8},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4910600391969775,"sequenceIndex":67},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7560492092238487,"sequenceIndex":334},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2920601323339445,"sequenceIndex":139},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3995691047662981,"sequenceIndex":336},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5866516575494247,"sequenceIndex":282},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2570393386622265,"sequenceIndex":144},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9225040989547952,"sequenceIndex":2},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4020800101459425,"sequenceIndex":394},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3357456652961226,"sequenceIndex":432},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0337398680181544,"sequenceIndex":77},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9966987908127004,"sequenceIndex":154},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.282272764487467,"sequenceIndex":19},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3592596406588493,"sequenceIndex":424},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.501063228868183,"sequenceIndex":441},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9957840397485798,"sequenceIndex":292},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8982876341127941,"sequenceIndex":165},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9597730020104714,"sequenceIndex":499},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.990453257934192,"sequenceIndex":306},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8828021779013215,"sequenceIndex":5},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8786440967561873,"sequenceIndex":439},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.915005464074949,"sequenceIndex":285},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1119524295973928,"sequenceIndex":312},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2167629093166623,"sequenceIndex":178},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8730802745224155,"sequenceIndex":181},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.724008101299279,"sequenceIndex":489},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9082730897409446,"sequenceIndex":472},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5034265065005616,"sequenceIndex":186},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1041604461761585,"sequenceIndex":23},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.216090139181006,"sequenceIndex":398},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.920632832937143,"sequenceIndex":96},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9927680956384509,"sequenceIndex":49},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4597603951188127,"sequenceIndex":24},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4874526324457578,"sequenceIndex":198},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1407684389774209,"sequenceIndex":417},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.750989992024597,"sequenceIndex":203},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9115843794477438,"sequenceIndex":349},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8909490029379313,"sequenceIndex":261},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6315267159749388,"sequenceIndex":209},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7269497975952566,"sequenceIndex":475},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4975610757768787,"sequenceIndex":106},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8895695602295556,"sequenceIndex":1},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1096573678025532,"sequenceIndex":13},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.492404473352404,"sequenceIndex":219},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8495090086666771,"sequenceIndex":405},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2715218321455708,"sequenceIndex":370},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9988916436330578,"sequenceIndex":113},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5083402790714346,"sequenceIndex":227},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2373681976637365,"sequenceIndex":267},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2742930749704449,"sequenceIndex":230},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9341246508328656,"sequenceIndex":29},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1265247574524708,"sequenceIndex":360},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2665434491782637,"sequenceIndex":325},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8412353297238072,"sequenceIndex":436},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.335323852478306,"sequenceIndex":402},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.865125075351393,"sequenceIndex":242},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9483954747457065,"sequenceIndex":15},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6808536082498433,"sequenceIndex":509},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8194669009627547,"sequenceIndex":446},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1697836269269004,"sequenceIndex":31},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.0490615059621153,"sequenceIndex":377},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4698376604883723,"sequenceIndex":254},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6692968047433246,"sequenceIndex":433},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.932684817527212,"sequenceIndex":32},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1661875460550213,"sequenceIndex":355},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2726175401208146,"sequenceIndex":275},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.509215157564269,"sequenceIndex":132},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6111678513188035,"sequenceIndex":268},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.871087754226711,"sequenceIndex":361},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9885670526626178,"sequenceIndex":276},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.178750164371709,"sequenceIndex":68},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.0652820980297677,"sequenceIndex":17},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.008178706367996,"sequenceIndex":69},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8693579196039314,"sequenceIndex":340},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.15939637997846,"sequenceIndex":70},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.517631374489275,"sequenceIndex":270},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.0734670114092375,"sequenceIndex":128},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8115545258856103,"sequenceIndex":271},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6095822643497895,"sequenceIndex":18},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.6437419394542703,"sequenceIndex":323},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.135912114164077,"sequenceIndex":313},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.51387637331299,"sequenceIndex":147},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.5444699499699706,"sequenceIndex":37},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.193155344667903,"sequenceIndex":463},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9907070944088594,"sequenceIndex":75},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5093881818808617,"sequenceIndex":279},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.976108134668352,"sequenceIndex":38},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1621107301880778,"sequenceIndex":152},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1857969191159459,"sequenceIndex":39},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-5.689074575154366,"sequenceIndex":283},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3041272200057101,"sequenceIndex":156},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9692942898638832,"sequenceIndex":157},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.457014776465921,"sequenceIndex":79},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.679553440334005,"sequenceIndex":498},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.5603247556056337,"sequenceIndex":20},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.539004303565296,"sequenceIndex":478},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.079837836658321,"sequenceIndex":450},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.8369509268515443,"sequenceIndex":495},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7705169592937264,"sequenceIndex":41},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3107400152426771,"sequenceIndex":83},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6746893475536957,"sequenceIndex":82},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.221436640617024,"sequenceIndex":167},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.2058602389591617,"sequenceIndex":84},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.6789667589312027,"sequenceIndex":408},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9169689160011127,"sequenceIndex":170},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.1808221261509573,"sequenceIndex":483},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8308623800709982,"sequenceIndex":43},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0887369379194063,"sequenceIndex":173},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.647452100881046,"sequenceIndex":174},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.0808117392776344,"sequenceIndex":368},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9214342967078624,"sequenceIndex":176},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5029654790181595,"sequenceIndex":404},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.1661471435536384,"sequenceIndex":89},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4679933734540336,"sequenceIndex":179},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2599051586156524,"sequenceIndex":45},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4526986753409943,"sequenceIndex":390},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5996914241585862,"sequenceIndex":91},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.1061927666438334,"sequenceIndex":435},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.626362201186847,"sequenceIndex":46},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.2783494626034666,"sequenceIndex":409},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.874062031529778,"sequenceIndex":487},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.179714749940214,"sequenceIndex":380},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.0664830501843285,"sequenceIndex":470},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.9794732617163917,"sequenceIndex":393},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.0965058955290345,"sequenceIndex":305},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.584896600312593,"sequenceIndex":400},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.407429584299727,"sequenceIndex":6},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5238027159031,"sequenceIndex":456},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1534093228805868,"sequenceIndex":372},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1763537065107037,"sequenceIndex":195},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.380618564747683,"sequenceIndex":196},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.3991085573885007,"sequenceIndex":407},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.760435360873271,"sequenceIndex":99},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5366738166958334,"sequenceIndex":199},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-6.328371326593296,"sequenceIndex":100},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.230874520161745,"sequenceIndex":320},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.933099549263564,"sequenceIndex":50},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6808818709283868,"sequenceIndex":202},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7068559048634389,"sequenceIndex":25},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9041336805058342,"sequenceIndex":321},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.53731777403234,"sequenceIndex":102},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8721680183844855,"sequenceIndex":385},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3789584465567601,"sequenceIndex":26},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0180016816970545,"sequenceIndex":328},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.7142533532404634,"sequenceIndex":425},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.5142820513139026,"sequenceIndex":382},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.927454381432256,"sequenceIndex":335},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5549793620143961,"sequenceIndex":289},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.50154294595571,"sequenceIndex":214},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9920175787865267,"sequenceIndex":215},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.655043609155131,"sequenceIndex":415},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.1915920569308374,"sequenceIndex":348},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.6754071592700654,"sequenceIndex":364},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.1098448045681466,"sequenceIndex":462},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.2630379300175396,"sequenceIndex":342},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.09113707621043,"sequenceIndex":448},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.92794354276137,"sequenceIndex":111},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.8215288038929933,"sequenceIndex":274},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.3068177006004653,"sequenceIndex":112},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1292970683253765,"sequenceIndex":224},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8795451551709412,"sequenceIndex":7},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-6.116825618525983,"sequenceIndex":378},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7187968793140398,"sequenceIndex":56},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.2702498418545884,"sequenceIndex":505},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3389654511290723,"sequenceIndex":115},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.049741252710293,"sequenceIndex":311},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9922123309142719,"sequenceIndex":232},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.025775921138196,"sequenceIndex":263},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-6.745595962484196,"sequenceIndex":357},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.1824223248748695,"sequenceIndex":329},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9855512657593426,"sequenceIndex":118},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4035775793922374,"sequenceIndex":428},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.509108850112804,"sequenceIndex":238},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4233409526463934,"sequenceIndex":388},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.505916443078246,"sequenceIndex":240},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3770464926434418,"sequenceIndex":30},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4343966413197866,"sequenceIndex":121},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.202868401592053,"sequenceIndex":295},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.85833741408244,"sequenceIndex":431},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5850013573695085,"sequenceIndex":245},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.050911256610319,"sequenceIndex":246},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8569195246889327,"sequenceIndex":429},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.428143587237047,"sequenceIndex":124},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.77281133774056,"sequenceIndex":494},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.118106246182926,"sequenceIndex":250},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.878781199371494,"sequenceIndex":251},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.898294177561965,"sequenceIndex":63},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.510607739576585,"sequenceIndex":510},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.321650526269306,"sequenceIndex":127},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.13087707158632,"sequenceIndex":293},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.062313906113535,"sequenceIndex":511}],"sampleSize":256,"lambda":3.90625E-4,"random":{},"entriesSeen":512},"tree":{"storeSequenceIndexesEnabled":false,"centerOfMassEnabled":false,"random":{}}},{"sampler":{"weightedSamples":[{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.4505467472266587,"sequenceIndex":257},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.47060671875635995,"sequenceIndex":466},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.4721397362321465,"sequenceIndex":238},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.48992676011847147,"sequenceIndex":416},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.4805108381909878,"sequenceIndex":42},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5142074583969133,"sequenceIndex":218},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.4723709013545723,"sequenceIndex":59},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5016151745653069,"sequenceIndex":483},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5619495921785637,"sequenceIndex":149},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5909431934729423,"sequenceIndex":269},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5595301729963194,"sequenceIndex":189},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5294133366516,"sequenceIndex":203},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5730883993101591,"sequenceIndex":408},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.49889292319461487,"sequenceIndex":29},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5107394032680804,"sequenceIndex":245},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6701234511195411,"sequenceIndex":481},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6208012344616243,"sequenceIndex":71},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6496154684510249,"sequenceIndex":306},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6403435897297929,"sequenceIndex":156},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5938097717468713,"sequenceIndex":272},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6912667033002402,"sequenceIndex":469},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5811018232415707,"sequenceIndex":89},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6469744847668194,"sequenceIndex":190},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5654229561320572,"sequenceIndex":196},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5788532584576657,"sequenceIndex":438},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7235347093769163,"sequenceIndex":211},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.574621671681497,"sequenceIndex":309},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.49973752713858594,"sequenceIndex":228},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5236111216211713,"sequenceIndex":58},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5127779993323636,"sequenceIndex":15},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7467972952090134,"sequenceIndex":126},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6851101494229829,"sequenceIndex":295},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.120634802314606,"sequenceIndex":287},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6228900388975498,"sequenceIndex":282},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6669986804745184,"sequenceIndex":68},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8907443018655017,"sequenceIndex":297},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8071849716106119,"sequenceIndex":452},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7140332449419733,"sequenceIndex":154},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6823660792224674,"sequenceIndex":19},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.79247734795905,"sequenceIndex":163},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8304714813808263,"sequenceIndex":40},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7652254667505656,"sequenceIndex":315},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8846652633027089,"sequenceIndex":351},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7137216342715588,"sequenceIndex":44},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8415755192072673,"sequenceIndex":45},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8039347793914181,"sequenceIndex":92},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.783836057154483,"sequenceIndex":431},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.662003041432246,"sequenceIndex":49},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8023687238962685,"sequenceIndex":347},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6768512776249329,"sequenceIndex":202},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8023127087121188,"sequenceIndex":273},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2366178626124689,"sequenceIndex":307},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.738330492852392,"sequenceIndex":258},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7737168760148693,"sequenceIndex":216},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7652984647961438,"sequenceIndex":426},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5372280141458186,"sequenceIndex":113},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5748902486273043,"sequenceIndex":231},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.759187901577425,"sequenceIndex":497},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5473958387650285,"sequenceIndex":118},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7958932237534162,"sequenceIndex":242},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5157409409011411,"sequenceIndex":247},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7943567475746286,"sequenceIndex":399},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4209769343078165,"sequenceIndex":252},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.695273601519673,"sequenceIndex":503},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9480112605586886,"sequenceIndex":284},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8434788077997846,"sequenceIndex":467},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6660713921595303,"sequenceIndex":66},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0185100516918768,"sequenceIndex":69},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3199000622625654,"sequenceIndex":34},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9886538174654538,"sequenceIndex":140},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9870426215226308,"sequenceIndex":270},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6189523993964947,"sequenceIndex":509},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.538953275463935,"sequenceIndex":146},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8494420552771748,"sequenceIndex":430},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0388316458258195,"sequenceIndex":461},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8182605100950073,"sequenceIndex":77},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8659126970888256,"sequenceIndex":76},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.912397002627945,"sequenceIndex":290},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3691126735627273,"sequenceIndex":159},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3338711674108266,"sequenceIndex":277},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9891893983118201,"sequenceIndex":162},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8790695219957502,"sequenceIndex":451},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.319762005495565,"sequenceIndex":375},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3275731471283272,"sequenceIndex":427},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.567528937922838,"sequenceIndex":171},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0752670218268707,"sequenceIndex":341},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.910193934181423,"sequenceIndex":280},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2030908978274808,"sequenceIndex":176},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9100503612087194,"sequenceIndex":429},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9977468059836339,"sequenceIndex":455},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6214804394603193,"sequenceIndex":261},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9924848094530941,"sequenceIndex":23},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8745825971857577,"sequenceIndex":400},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9092720670614962,"sequenceIndex":47},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9909094866313783,"sequenceIndex":494},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4377915853043677,"sequenceIndex":193},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0545296160969482,"sequenceIndex":318},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0029969650719128,"sequenceIndex":364},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3288074281669193,"sequenceIndex":199},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3969158776425736,"sequenceIndex":201},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8619564256291283,"sequenceIndex":482},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0960354121584372,"sequenceIndex":205},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8676619145114206,"sequenceIndex":327},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.453470669725685,"sequenceIndex":208},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5154955351522712,"sequenceIndex":104},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8958789318034466,"sequenceIndex":312},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7762371375542728,"sequenceIndex":26},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.186193284885259,"sequenceIndex":109},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9249104687159854,"sequenceIndex":346},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1867688796625577,"sequenceIndex":409},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3349352879446854,"sequenceIndex":303},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6066703708986159,"sequenceIndex":224},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5756334816366735,"sequenceIndex":319},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0044322367594711,"sequenceIndex":56},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7247367269399204,"sequenceIndex":114},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7477881749618436,"sequenceIndex":233},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.278472789062652,"sequenceIndex":235},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.56519658128201,"sequenceIndex":236},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.717110518961455,"sequenceIndex":119},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0308457544933831,"sequenceIndex":120},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1053536684871863,"sequenceIndex":336},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6573574519957743,"sequenceIndex":420},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8212049108060395,"sequenceIndex":454},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.666689496674353,"sequenceIndex":248},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3633398773985819,"sequenceIndex":250},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6828467924203832,"sequenceIndex":489},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7511480646289297,"sequenceIndex":127},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0905474172766971,"sequenceIndex":511},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.650450478053789,"sequenceIndex":275},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8147908194382496,"sequenceIndex":64},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.4126173577671426,"sequenceIndex":478},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9902393552248117,"sequenceIndex":32},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.240154009287208,"sequenceIndex":310},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.9540995805917007,"sequenceIndex":134},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.1626303132606375,"sequenceIndex":317},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.617192550301928,"sequenceIndex":16},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-5.813466545599038,"sequenceIndex":137},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.0348887378625133,"sequenceIndex":138},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.610974440632379,"sequenceIndex":472},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5895065780482927,"sequenceIndex":35},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.104894266070398,"sequenceIndex":457},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.07896022238319,"sequenceIndex":70},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.423692401224896,"sequenceIndex":425},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.4006706599690384,"sequenceIndex":321},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.2708374284833623,"sequenceIndex":435},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.4860673932933746,"sequenceIndex":73},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.1523902096484346,"sequenceIndex":147},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.4350359726813466,"sequenceIndex":274},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2154271414826385,"sequenceIndex":462},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.453540559332801,"sequenceIndex":468},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.366186682681578,"sequenceIndex":151},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7968255678816778,"sequenceIndex":38},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0151069847771448,"sequenceIndex":152},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.833599180111765,"sequenceIndex":445},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.189725210740324,"sequenceIndex":276},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.579409472423491,"sequenceIndex":78},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.764648110344672,"sequenceIndex":446},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.433873993031992,"sequenceIndex":158},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6508045771474953,"sequenceIndex":441},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4087898182674006,"sequenceIndex":3},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.197130572515787,"sequenceIndex":294},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.3881726460667485,"sequenceIndex":81},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2891852173466962,"sequenceIndex":354},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.367977578025331,"sequenceIndex":82},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.359732237167334,"sequenceIndex":164},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.6460842916299474,"sequenceIndex":507},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4461614636375792,"sequenceIndex":167},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.477039589235158,"sequenceIndex":168},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4923458331776287,"sequenceIndex":84},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6628789298560835,"sequenceIndex":304},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6013446935026727,"sequenceIndex":381},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.3103466974213145,"sequenceIndex":385},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.6384984545261987,"sequenceIndex":173},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.92664422060941,"sequenceIndex":361},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5936458292007634,"sequenceIndex":175},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.631565889779794,"sequenceIndex":464},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.67146466061629,"sequenceIndex":405},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.361973106772181,"sequenceIndex":449},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.180081692511917,"sequenceIndex":424},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1572976785115714,"sequenceIndex":360},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1318878763151246,"sequenceIndex":181},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.911513134311358,"sequenceIndex":91},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.3349823054799868,"sequenceIndex":363},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8169231056669664,"sequenceIndex":389},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.247498989302157,"sequenceIndex":185},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.327853523488458,"sequenceIndex":186},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.5607460517839904,"sequenceIndex":374},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.3247197094766237,"sequenceIndex":188},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9588908842865445,"sequenceIndex":453},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.004540624824326,"sequenceIndex":95},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.317497900733914,"sequenceIndex":501},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.566778394706553,"sequenceIndex":192},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8579727493788667,"sequenceIndex":48},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.5912843505290604,"sequenceIndex":293},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0803277107028786,"sequenceIndex":292},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5446824018577703,"sequenceIndex":2},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.16317384507045,"sequenceIndex":380},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.989971108297856,"sequenceIndex":99},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.93217262049976,"sequenceIndex":391},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.3166791493723053,"sequenceIndex":200},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5484322723797188,"sequenceIndex":25},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7558393737000073,"sequenceIndex":369},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.386063688610757,"sequenceIndex":331},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.043473901492627,"sequenceIndex":51},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.886799696009048,"sequenceIndex":329},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5392205470046625,"sequenceIndex":206},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.922473211898003,"sequenceIndex":207},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.0072635409362345,"sequenceIndex":52},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.27712082750346,"sequenceIndex":456},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.9866033255124296,"sequenceIndex":401},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.609958599403672,"sequenceIndex":260},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.2549797833940053,"sequenceIndex":106},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.088325532918351,"sequenceIndex":271},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.228869609428676,"sequenceIndex":414},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-6.12542282444888,"sequenceIndex":215},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.6015206204710117,"sequenceIndex":108},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.5974370628369803,"sequenceIndex":506},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.272530163234187,"sequenceIndex":54},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0194196384729737,"sequenceIndex":463},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.4938766894581144,"sequenceIndex":348},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.629799590606496,"sequenceIndex":372},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.128285758431476,"sequenceIndex":460},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.368760977034978,"sequenceIndex":471},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.5348412319447924,"sequenceIndex":28},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9531657670379778,"sequenceIndex":358},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8067466000195498,"sequenceIndex":334},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.5129484596739116,"sequenceIndex":490},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.516637153433466,"sequenceIndex":338},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.945918197066419,"sequenceIndex":322},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.914359466997721,"sequenceIndex":508},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0324620144162764,"sequenceIndex":313},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.2293178947126115,"sequenceIndex":116},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.225237798444808,"sequenceIndex":7},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.409868593108424,"sequenceIndex":117},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.381038901497581,"sequenceIndex":234},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4167996801403588,"sequenceIndex":505},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.0700465891987316,"sequenceIndex":237},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.254596224141901,"sequenceIndex":387},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9459068618165772,"sequenceIndex":239},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4319626052837904,"sequenceIndex":240},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.42660494612085,"sequenceIndex":320},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.0634576586560818,"sequenceIndex":422},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.477263865770193,"sequenceIndex":492},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3974381772031725,"sequenceIndex":244},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.166501190133886,"sequenceIndex":476},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.104286698719499,"sequenceIndex":1},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.302648970276084,"sequenceIndex":479},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.84404489446913,"sequenceIndex":62},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.7199946136143978,"sequenceIndex":249},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.0571104757620615,"sequenceIndex":326},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.6484684774409843,"sequenceIndex":323},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.1755997770182236,"sequenceIndex":442},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.1811638061099012,"sequenceIndex":253},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.3333252255134944,"sequenceIndex":285},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-5.126215061068308,"sequenceIndex":255},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5944602841747246,"sequenceIndex":512}],"sampleSize":256,"lambda":3.90625E-4,"random":{},"entriesSeen":512},"tree":{"storeSequenceIndexesEnabled":false,"centerOfMassEnabled":false,"random":{}}},{"sampler":{"weightedSamples":[{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.4409256727741692,"sequenceIndex":204},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.44141159340224634,"sequenceIndex":186},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.4462064848647759,"sequenceIndex":269},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.4494976417413684,"sequenceIndex":39},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.44739839725491637,"sequenceIndex":309},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.45814980462923,"sequenceIndex":6},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.4465049493259178,"sequenceIndex":409},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.46110883832824157,"sequenceIndex":488},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.44993579465894684,"sequenceIndex":36},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.46488857673788037,"sequenceIndex":4},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.49074282052202073,"sequenceIndex":23},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.47334317413554183,"sequenceIndex":353},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.539232476504889,"sequenceIndex":321},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.4553384010672422,"sequenceIndex":114},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.4523437016920186,"sequenceIndex":285},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5100957634833727,"sequenceIndex":472},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5068308677332861,"sequenceIndex":8},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.49668128340638473,"sequenceIndex":291},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6184197122942443,"sequenceIndex":154},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6059434099730148,"sequenceIndex":370},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5836385148507931,"sequenceIndex":168},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5934252114362919,"sequenceIndex":179},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6245498040650852,"sequenceIndex":5},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.48538561360240506,"sequenceIndex":411},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.47404922020462015,"sequenceIndex":202},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5580616555274834,"sequenceIndex":106},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7248220228428799,"sequenceIndex":348},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.46947566428311316,"sequenceIndex":228},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.4909497640666451,"sequenceIndex":118},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.558455553090478,"sequenceIndex":417},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7825622633774046,"sequenceIndex":379},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5237379923075237,"sequenceIndex":442},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6340256601422767,"sequenceIndex":381},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5147255211926068,"sequenceIndex":139},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5344680089711398,"sequenceIndex":141},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6661379932912055,"sequenceIndex":467},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7078187583371991,"sequenceIndex":262},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6675708530451963,"sequenceIndex":367},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.644765775954502,"sequenceIndex":407},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7089613071686106,"sequenceIndex":163},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6243174925282583,"sequenceIndex":164},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7844655864551862,"sequenceIndex":21},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6863345508500148,"sequenceIndex":304},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1559087655796392,"sequenceIndex":22},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8321181968175589,"sequenceIndex":182},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1197061181292343,"sequenceIndex":479},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6812591257570456,"sequenceIndex":190},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5764847181523284,"sequenceIndex":193},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5691231626853785,"sequenceIndex":459},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5054480810281154,"sequenceIndex":263},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6682314266174023,"sequenceIndex":207},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6757061446886466,"sequenceIndex":476},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8043912893742795,"sequenceIndex":107},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8304904327056604,"sequenceIndex":416},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8219473051333882,"sequenceIndex":111},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6314293026766652,"sequenceIndex":225},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9357620591398222,"sequenceIndex":29},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6006641107451602,"sequenceIndex":296},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6005996526905083,"sequenceIndex":239},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8861647109555236,"sequenceIndex":435},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6044710395679177,"sequenceIndex":123},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8089028679212585,"sequenceIndex":250},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2678963043689726,"sequenceIndex":334},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.5627006534361164,"sequenceIndex":301},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6809055183138144,"sequenceIndex":469},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7789987185355638,"sequenceIndex":365},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0432741666975052,"sequenceIndex":451},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5090016309402974,"sequenceIndex":137},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7870492078362121,"sequenceIndex":298},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6320518588543987,"sequenceIndex":460},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7951544941073423,"sequenceIndex":441},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7027284167497256,"sequenceIndex":383},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8419374897803427,"sequenceIndex":18},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.4341226559827294,"sequenceIndex":149},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.317840329655498,"sequenceIndex":461},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.050167116369164,"sequenceIndex":152},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6873079448166308,"sequenceIndex":312},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1036813488615216,"sequenceIndex":414},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8207642530282121,"sequenceIndex":385},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9519308763909178,"sequenceIndex":261},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8100706482364007,"sequenceIndex":405},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7317757374064361,"sequenceIndex":41},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4209428299699403,"sequenceIndex":166},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.1782432808452072,"sequenceIndex":293},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6042627822908844,"sequenceIndex":408},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.697394441565312,"sequenceIndex":43},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1379644695066542,"sequenceIndex":87},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4599925786737307,"sequenceIndex":313},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3386710900788985,"sequenceIndex":89},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8402980850734034,"sequenceIndex":44},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3839482542021508,"sequenceIndex":294},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2940730925296122,"sequenceIndex":470},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1438774474585274,"sequenceIndex":437},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3979504713313229,"sequenceIndex":94},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8840891792369917,"sequenceIndex":188},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6404097147497101,"sequenceIndex":48},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6777803655396072,"sequenceIndex":195},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8508277529004109,"sequenceIndex":197},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6136425799020759,"sequenceIndex":198},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7089345725892877,"sequenceIndex":50},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.205497170805399,"sequenceIndex":399},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1693751387679903,"sequenceIndex":393},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9192059365876626,"sequenceIndex":434},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3134353186296306,"sequenceIndex":209},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0941908833242686,"sequenceIndex":308},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5200725584951893,"sequenceIndex":338},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1492767494364005,"sequenceIndex":215},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.792213851625103,"sequenceIndex":310},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0423831716948277,"sequenceIndex":109},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9100796792265119,"sequenceIndex":220},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1580443023740443,"sequenceIndex":258},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6424971479660729,"sequenceIndex":401},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4448882167463197,"sequenceIndex":328},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1014890559453052,"sequenceIndex":511},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.970043393520296,"sequenceIndex":480},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9781647798651729,"sequenceIndex":233},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6228838910653001,"sequenceIndex":234},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.738634349410046,"sequenceIndex":237},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9511145657309665,"sequenceIndex":487},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3790053486442833,"sequenceIndex":395},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9887440649009485,"sequenceIndex":120},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6972641502995232,"sequenceIndex":245},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8274627235414078,"sequenceIndex":429},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.898193728074703,"sequenceIndex":404},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9229900117957947,"sequenceIndex":251},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4811959180664591,"sequenceIndex":289},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8110207132576235,"sequenceIndex":347},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8335254029865209,"sequenceIndex":507},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.777267842085972,"sequenceIndex":377},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.8738314517993993,"sequenceIndex":65},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.83381615620499,"sequenceIndex":130},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1050732500294858,"sequenceIndex":378},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9644785937600389,"sequenceIndex":423},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.797079780366956,"sequenceIndex":317},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.331501131106359,"sequenceIndex":306},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.2950013469339243,"sequenceIndex":136},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9661232016594452,"sequenceIndex":34},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1610397172367035,"sequenceIndex":69},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.2247714703704515,"sequenceIndex":468},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9781843655752824,"sequenceIndex":70},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.6655758204369446,"sequenceIndex":140},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5035018589526077,"sequenceIndex":142},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5386350820213814,"sequenceIndex":143},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3917310419676432,"sequenceIndex":72},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.1142498958878257,"sequenceIndex":333},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.094541745920552,"sequenceIndex":146},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.842533329905653,"sequenceIndex":495},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.9095254161376185,"sequenceIndex":37},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.6167884802088333,"sequenceIndex":273},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.3392379569365365,"sequenceIndex":75},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.398652663777298,"sequenceIndex":267},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9900246258684975,"sequenceIndex":76},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3297813335057211,"sequenceIndex":493},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7081063567410634,"sequenceIndex":9},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2629966000263675,"sequenceIndex":375},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.0474484838040876,"sequenceIndex":336},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.0331201422463807,"sequenceIndex":157},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.387353413792321,"sequenceIndex":128},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3492735862051715,"sequenceIndex":356},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5586565838972595,"sequenceIndex":10},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.480863072428841,"sequenceIndex":161},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.66145272828821,"sequenceIndex":162},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.3762633901325767,"sequenceIndex":276},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9181901200844955,"sequenceIndex":477},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4445827663906983,"sequenceIndex":278},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8482420245419044,"sequenceIndex":83},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.001388974568315,"sequenceIndex":167},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-5.076261712087481,"sequenceIndex":84},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.3236806271341166,"sequenceIndex":359},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6183992056548229,"sequenceIndex":170},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.393734939718761,"sequenceIndex":171},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3406839333207512,"sequenceIndex":374},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.370664665841993,"sequenceIndex":361},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.573225819902174,"sequenceIndex":174},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7383053830156,"sequenceIndex":175},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8975481532352427,"sequenceIndex":502},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5823943107932703,"sequenceIndex":177},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.0235675975636696,"sequenceIndex":456},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.496867960498022,"sequenceIndex":305},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-6.899071933277866,"sequenceIndex":180},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.207203876142821,"sequenceIndex":1},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.437116334634678,"sequenceIndex":373},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.2960109973168406,"sequenceIndex":412},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.135937793123457,"sequenceIndex":287},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9453875210660276,"sequenceIndex":185},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.397697716806775,"sequenceIndex":463},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3966591362774687,"sequenceIndex":446},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.8178728315568486,"sequenceIndex":47},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.7138334885928703,"sequenceIndex":189},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.5507724712621347,"sequenceIndex":95},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-5.762226206111389,"sequenceIndex":191},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.590290755756962,"sequenceIndex":96},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.463145270623116,"sequenceIndex":192},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9823469755698535,"sequenceIndex":24},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1856297022772333,"sequenceIndex":509},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4495460890835015,"sequenceIndex":98},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.333440939297787,"sequenceIndex":372},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.364960396037589,"sequenceIndex":49},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7798808950015981,"sequenceIndex":422},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4005553374664401,"sequenceIndex":200},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9515409187718223,"sequenceIndex":201},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3120918996747681,"sequenceIndex":492},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.0423812636701464,"sequenceIndex":503},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.764070196842062,"sequenceIndex":51},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.30552539118187,"sequenceIndex":205},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.5664657046343455,"sequenceIndex":103},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.955790261598473,"sequenceIndex":341},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-4.408358767274582,"sequenceIndex":270},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.1936819649930515,"sequenceIndex":415},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.318154029509137,"sequenceIndex":105},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4539073837438405,"sequenceIndex":425},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.2331850579769528,"sequenceIndex":53},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.3671750740373843,"sequenceIndex":260},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.2845845385468546,"sequenceIndex":214},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.891213103008755,"sequenceIndex":498},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.8227392066347954,"sequenceIndex":216},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-5.765478924296321,"sequenceIndex":295},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.301943270144005,"sequenceIndex":218},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.2043120138803984,"sequenceIndex":302},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.4751096289359236,"sequenceIndex":387},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.3628855424999498,"sequenceIndex":344},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4700014460498712,"sequenceIndex":481},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.593064322037851,"sequenceIndex":223},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-5.404662823182272,"sequenceIndex":14},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.7663634712594724,"sequenceIndex":224},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6594589085081752,"sequenceIndex":350},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6123649380325624,"sequenceIndex":281},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.950892528522452,"sequenceIndex":501},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.6681707182328864,"sequenceIndex":229},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.963066337379958,"sequenceIndex":431},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.8447313904311504,"sequenceIndex":318},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.4485056751485947,"sequenceIndex":28},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.032888062432252,"sequenceIndex":406},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3868588278321516,"sequenceIndex":450},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.71605398814051,"sequenceIndex":283},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.0243077887713796,"sequenceIndex":345},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.28203973270908,"sequenceIndex":400},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.1990204575703178,"sequenceIndex":266},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9993902861412431,"sequenceIndex":352},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.596678725235261,"sequenceIndex":30},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.903086056325348,"sequenceIndex":427},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.0952910328081917,"sequenceIndex":449},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.1175046523190058,"sequenceIndex":330},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.9232312661216866,"sequenceIndex":122},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-0.9176542924546596,"sequenceIndex":462},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.273726560826445,"sequenceIndex":452},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.021034675004877,"sequenceIndex":490},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.0787283022619043,"sequenceIndex":440},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.3453793957739955,"sequenceIndex":329},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.4734205658454713,"sequenceIndex":392},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.376469898617029,"sequenceIndex":457},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-1.492587210947598,"sequenceIndex":126},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.581588668660513,"sequenceIndex":265},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-2.006071877755358,"sequenceIndex":254},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.2027951304914786,"sequenceIndex":255},{"point":[0.730967787376657,0.24053641567148587,0.6374174253501083,0.5504370051176339],"weight":-3.2294894102291583,"sequenceIndex":512}],"sampleSize":256,"lambda":3.90625E-4,"random":{},"entriesSeen":512},"tree":{"storeSequenceIndexesEnabled":false,"centerOfMassEnabled":false,"random":{}}}],"totalUpdates":512}}} ================================================ FILE: Java/spotless-eclipse.xml ================================================ ================================================ FILE: Java/testutils/pom.xml ================================================ 4.0.0 randomcutforest-parent software.amazon.randomcutforest 4.4.0 randomcutforest-testutils jar ================================================ FILE: Java/testutils/src/main/java/com/amazon/randomcutforest/testutils/ExampleDataSets.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.testutils; import static java.lang.Math.PI; import static java.lang.Math.cos; import static java.lang.Math.sin; import java.util.Random; /** * This class samples point from a mixture of 2 multi-variate normal * distribution with covariance matrices of the form sigma * I. One of the * normal distributions is considered the base distribution, the second is * considered the anomaly distribution, and there are random transitions between * the two. */ public class ExampleDataSets { public static double[][] generateFan(int numberPerBlade, int numberOfBlades) { if ((numberOfBlades > 12) || (numberPerBlade <= 0)) return null; int newDimensions = 2; int dataSize = numberOfBlades * numberPerBlade; Random prg = new Random(0); NormalMixtureTestData generator = new NormalMixtureTestData(0.0, 1.0, 0.0, 1.0, 0, 1); double[][] data = generator.generateTestData(dataSize, newDimensions, 100); double[][] transformedData = new double[data.length][newDimensions]; for (int j = 0; j < data.length; j++) { // shrink transformedData[j][0] = 0.05 * data[j][0]; transformedData[j][1] = 0.2 * data[j][1]; double toss = prg.nextDouble(); // rotate int i = 0; while (i < numberOfBlades + 1) { if (toss < i * 1.0 / numberOfBlades) { double[] vec = rotateClockWise(transformedData[j], 2 * PI * i / numberOfBlades); transformedData[j][0] = vec[0] + 0.6 * sin(2 * PI * i / numberOfBlades); transformedData[j][1] = vec[1] + 0.6 * cos(2 * PI * i / numberOfBlades); break; } else ++i; } } return transformedData; } public static double[] rotateClockWise(double[] point, double theta) { double[] result = new double[2]; result[0] = cos(theta) * point[0] + sin(theta) * point[1]; result[1] = -sin(theta) * point[0] + cos(theta) * point[1]; return result; } public static double[][] generate(int size) { Random prg = new Random(); double[][] data = new double[size][2]; for (int i = 0; i < size; i++) { boolean test = false; while (!test) { double x = 2 * prg.nextDouble() - 1; double y = 2 * prg.nextDouble() - 1; if (x * x + y * y <= 1) { if (y > 0) { if (x > 0 && ((x - 0.5) * (x - 0.5) + y * y) <= 0.25) { test = ((x - 0.5) * (x - 0.5) + y * y > 1.0 / 32) && (prg.nextDouble() < 0.6); } } else { if (x > 0) { if ((x - 0.5) * (x - 0.5) + y * y > 1.0 / 32) { test = ((x - 0.5) * (x - 0.5) + y * y < 0.25) || (prg.nextDouble() < 0.4); } } else { test = ((x + 0.5) * (x + 0.5) + y * y > 0.25) && (prg.nextDouble() < 0.2); } } } if (test) { data[i][0] = x; data[i][1] = y; } } } return data; } } ================================================ FILE: Java/testutils/src/main/java/com/amazon/randomcutforest/testutils/MultiDimDataWithKey.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.testutils; public class MultiDimDataWithKey { public double[][] data; public int[] changeIndices; public double[][] changes; public MultiDimDataWithKey(double[][] data, int[] changeIndices, double[][] changes) { this.data = data; this.changeIndices = changeIndices; this.changes = changes; } } ================================================ FILE: Java/testutils/src/main/java/com/amazon/randomcutforest/testutils/NormalMixtureTestData.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.testutils; import java.util.Arrays; import java.util.Random; /** * This class samples point from a mixture of 2 multi-variate normal * distribution with covariance matrices of the form sigma * I. One of the * normal distributions is considered the base distribution, the second is * considered the anomaly distribution, and there are random transitions between * the two. */ public class NormalMixtureTestData { private final double baseMu; private final double baseSigma; private final double anomalyMu; private final double anomalySigma; private final double transitionToAnomalyProbability; private final double transitionToBaseProbability; public NormalMixtureTestData(double baseMu, double baseSigma, double anomalyMu, double anomalySigma, double transitionToAnomalyProbability, double transitionToBaseProbability) { this.baseMu = baseMu; this.baseSigma = baseSigma; this.anomalyMu = anomalyMu; this.anomalySigma = anomalySigma; this.transitionToAnomalyProbability = transitionToAnomalyProbability; this.transitionToBaseProbability = transitionToBaseProbability; } public NormalMixtureTestData() { this(0.0, 1.0, 4.0, 2.0, 0.01, 0.3); } public NormalMixtureTestData(double baseMu, double anomalyMu) { this(baseMu, 1.0, anomalyMu, 2.0, 0.01, 0.3); } public double[][] generateTestData(int numberOfRows, int numberOfColumns) { return generateTestData(numberOfRows, numberOfColumns, 0); } public double[][] generateTestData(int numberOfRows, int numberOfColumns, int seed) { double[][] result = new double[numberOfRows][numberOfColumns]; boolean anomaly = false; NormalDistribution dist; if (seed != 0) dist = new NormalDistribution(new Random(seed)); else dist = new NormalDistribution(new Random()); for (int i = 0; i < numberOfRows; i++) { if (!anomaly) { fillRow(result[i], dist, baseMu, baseSigma); if (Math.random() < transitionToAnomalyProbability) { anomaly = true; } } else { fillRow(result[i], dist, anomalyMu, anomalySigma); if (Math.random() < transitionToBaseProbability) { anomaly = false; } } } return result; } public MultiDimDataWithKey generateTestDataWithKey(int numberOfRows, int numberOfColumns, int seed) { double[][] resultData = new double[numberOfRows][numberOfColumns]; int[] change = new int[numberOfRows]; int numberOfChanges = 0; boolean anomaly = false; NormalDistribution dist; if (seed != 0) dist = new NormalDistribution(new Random(seed)); else dist = new NormalDistribution(new Random()); for (int i = 0; i < numberOfRows; i++) { if (!anomaly) { fillRow(resultData[i], dist, baseMu, baseSigma); if (Math.random() < transitionToAnomalyProbability) { change[numberOfChanges++] = i + 1; // next item is different anomaly = true; } } else { fillRow(resultData[i], dist, anomalyMu, anomalySigma); if (Math.random() < transitionToBaseProbability) { anomaly = false; change[numberOfChanges++] = i + 1; // next item is different } } } return new MultiDimDataWithKey(resultData, Arrays.copyOf(change, numberOfChanges), null); } private void fillRow(double[] row, NormalDistribution dist, double mu, double sigma) { for (int j = 0; j < row.length; j++) { row[j] = dist.nextDouble(mu, sigma); } } public static class NormalDistribution { private final Random rng; private final double[] buffer; private int index; public NormalDistribution(Random rng) { this.rng = rng; buffer = new double[2]; index = 0; } public double nextDouble() { if (index == 0) { // apply the Box-Muller transform to produce Normal variates double u = rng.nextDouble(); double v = rng.nextDouble(); double r = Math.sqrt(-2 * Math.log(u)); buffer[0] = r * Math.cos(2 * Math.PI * v); buffer[1] = r * Math.sin(2 * Math.PI * v); } double result = buffer[index]; index = (index + 1) % 2; return result; } public double nextDouble(double mu, double sigma) { return mu + sigma * nextDouble(); } } } ================================================ FILE: Java/testutils/src/main/java/com/amazon/randomcutforest/testutils/ShingledData.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.testutils; import static java.lang.Math.PI; import java.util.Random; public class ShingledData { public static double[][] generateShingledData(int size, int period, int dimensions, long seed) { double[][] answer = new double[size][]; int entryIndex = 0; boolean filledShingleAtleastOnce = false; double[] history = new double[dimensions]; int count = 0; double[] data = getData(size + dimensions - 1, period, 100, 5, seed); for (int j = 0; j < size + dimensions - 1; ++j) { // we stream here .... history[entryIndex] = data[j]; entryIndex = (entryIndex + 1) % dimensions; if (entryIndex == 0) { filledShingleAtleastOnce = true; } if (filledShingleAtleastOnce) { answer[count++] = getShinglePoint(history, entryIndex, dimensions); } } return answer; } private static double[] getShinglePoint(double[] recentPointsSeen, int indexOfOldestPoint, int shingleLength) { double[] shingledPoint = new double[shingleLength]; int i = 0; for (int j = 0; j < shingleLength; ++j) { double point = recentPointsSeen[(j + indexOfOldestPoint) % shingleLength]; shingledPoint[i++] = point; } return shingledPoint; } private static double[] getData(int num, int period, double amplitude, double noise, long seed) { double[] data = new double[num]; Random noiseprg = new Random(seed); for (int i = 0; i < num; i++) { data[i] = amplitude * Math.cos(2 * PI * (i + 50) / period) + noise * noiseprg.nextDouble(); if (noiseprg.nextDouble() < 0.01) { double change = noiseprg.nextDouble() < 0.5 ? 10 * noise : -10 * noise; data[i] += change; System.out.println(" timestamp " + i + " changing by " + change); } } return data; } } ================================================ FILE: Java/testutils/src/main/java/com/amazon/randomcutforest/testutils/ShingledMultiDimDataWithKeys.java ================================================ /* * Copyright 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://www.apache.org/licenses/LICENSE-2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazon.randomcutforest.testutils; import static java.lang.Math.PI; import java.util.Arrays; import java.util.Random; public class ShingledMultiDimDataWithKeys { public static MultiDimDataWithKey generateShingledDataWithKey(int size, int period, int shingleSize, int baseDimension, long seed) { int entryIndex = 0; boolean filledShingleAtleastOnce = false; double[][] history = new double[shingleSize][]; int count = 0; MultiDimDataWithKey dataWithKeys = getMultiDimData(size + shingleSize - 1, period, 100, 5, seed, baseDimension); double[][] answer = generateShingledData(dataWithKeys.data, shingleSize, baseDimension, false); return new MultiDimDataWithKey(answer, dataWithKeys.changeIndices, dataWithKeys.changes); } public static double[][] generateShingledData(double[][] data, int shingleSize, int baseDimension, boolean rotation) { int size = data.length - shingleSize + 1; double[][] answer = new double[size][]; int entryIndex = 0; boolean filledShingleAtleastOnce = false; double[][] history = new double[shingleSize][]; int count = 0; for (int j = 0; j < size + shingleSize - 1; ++j) { // we stream here .... history[entryIndex] = data[j]; entryIndex = (entryIndex + 1) % shingleSize; if (entryIndex == 0) { filledShingleAtleastOnce = true; } if (filledShingleAtleastOnce) { int position = (rotation) ? 0 : entryIndex; answer[count++] = getShinglePoint(history, position, shingleSize, baseDimension); } } return answer; } private static double[] getShinglePoint(double[][] recentPointsSeen, int indexOfOldestPoint, int shingleLength, int baseDimension) { double[] shingledPoint = new double[shingleLength * baseDimension]; int count = 0; for (int j = 0; j < shingleLength; ++j) { double[] point = recentPointsSeen[(j + indexOfOldestPoint) % shingleLength]; for (int i = 0; i < baseDimension; i++) { shingledPoint[count++] = point[i]; } } return shingledPoint; } public static MultiDimDataWithKey getMultiDimData(int num, int period, double amplitude, double noise, long seed, int baseDimension) { return getMultiDimData(num, period, amplitude, noise, seed, baseDimension, false); } public static MultiDimDataWithKey getMultiDimData(int num, int period, double amplitude, double noise, long seed, int baseDimension, boolean useSlope) { return getMultiDimData(num, period, amplitude, noise, seed, baseDimension, 5.0, useSlope); } public static MultiDimDataWithKey getMultiDimData(int num, int period, double amplitude, double noise, long seed, int baseDimension, double anomalyFactor, boolean useSlope) { double[][] data = new double[num][]; double[][] changes = new double[num][]; int[] changedIndices = new int[num]; int counter = 0; Random prg = new Random(seed); Random noiseprg = new Random(prg.nextLong()); double[] phase = new double[baseDimension]; double[] amp = new double[baseDimension]; double[] slope = new double[baseDimension]; double[] shift = new double[baseDimension]; for (int i = 0; i < baseDimension; i++) { phase[i] = prg.nextInt(period); if (useSlope) { shift[i] = (4 * prg.nextDouble() - 1) * amplitude; } amp[i] = (1 + 0.2 * prg.nextDouble()) * amplitude; if (useSlope) { slope[i] = (0.25 - prg.nextDouble() * 0.5) * amplitude / period; } } for (int i = 0; i < num; i++) { data[i] = new double[baseDimension]; boolean flag = (noiseprg.nextDouble() < 0.01); double[] newChange = new double[baseDimension]; boolean used = false; for (int j = 0; j < baseDimension; j++) { data[i][j] = amp[j] * Math.cos(2 * PI * (i + phase[j]) / period) + slope[j] * i + shift[j]; // ensures that the noise does not cancel the anomaly or change it's magnitude if (flag && noiseprg.nextDouble() < 0.3) { double factor = anomalyFactor * (1 + noiseprg.nextDouble()); double change = noiseprg.nextDouble() < 0.5 ? factor * noise : -factor * noise; data[i][j] += newChange[j] = change; used = true; } else { data[i][j] += noise * (2 * noiseprg.nextDouble() - 1); } } if (used) { changedIndices[counter] = i; changes[counter++] = newChange; } } return new MultiDimDataWithKey(data, Arrays.copyOf(changedIndices, counter), Arrays.copyOf(changes, counter)); } } ================================================ FILE: LICENSE ================================================ Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. Copyright [yyyy] [name of copyright owner] Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. ================================================ FILE: NOTICE ================================================ RandomCutForest Copyright 2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. ================================================ FILE: README.md ================================================ # Random Cut Forest by AWS This repository contains implementations of the Random Cut Forest (RCF) probabilistic data structure. RCFs were originally developed at Amazon to use in a nonparametric anomaly detection algorithm for streaming data. Later new algorithms based on RCFs were developed for density estimation, imputation, and forecasting. The different directories correspond to equivalent implementations in different languages, and bindings to to those base implementations, using language specific features for greater flexibility of use. RandomCutForest in the randomcutforest-core package provides an estimation (say anomaly score, or extrapolation over a forecast horizon) and using that raw estimation can be challenging. The randomcutforest-parkservices package provides several capabilities (ThresholdedRandomCutForest, RCFCaster, respectively) for distilling the scores to a determination of a potential anomaly or calibrated forecast respectively. The package randomcutforest-examples showcases several example scenarios for using the repository. They also provide examples for some of the parameter settings. Many of these examples are built in tests. ## Documentation * Guha, S., Mishra, N., Roy, G., & Schrijvers, O. (2016, June). Robust random cut forest based anomaly detection on streams. In *International conference on machine learning* (pp. 2712-2721). ## Code of Conduct This project has adopted an [Open Source Code of Conduct](https://aws.github.io/code-of-conduct). ## Security issue notifications If you discover a potential security issue in this project we ask that you notify AWS/Amazon Security via our [vulnerability reporting page](http://aws.amazon.com/security/vulnerability-reporting/). Please do **not** create a public GitHub issue. ## Licensing See the [LICENSE](./LICENSE) file for our project's licensing. We will ask you to confirm the licensing of your contribution. ## Copyright Copyright 2019-2020 Amazon.com, Inc. or its affiliates. All Rights Reserved. ================================================ FILE: Rust/.gitignore ================================================ ################################################################################ # Additional Ignores ################################################################################ *~ .vscode/ ################################################################################ # GitHub Rust GitIgnore ################################################################################ # Generated by Cargo # will have compiled files and executables debug/ target/ # Remove Cargo.lock from gitignore if creating an executable, leave it for libraries # More information here https://doc.rust-lang.org/cargo/guide/cargo-toml-vs-cargo-lock.html Cargo.lock # These are backup files generated by rustfmt **/*.rs.bk ================================================ FILE: Rust/Cargo.toml ================================================ [package] name = "rcf" version = "4.0.0" edition = "2021" license = "Apache-2.0" [profile.test] opt-level = 3 [lib] name = "rcflib" path = "src/lib.rs" [[bin]] name = "example" path = "src/example.rs" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] num = "0.4.1" rayon = "1.7" rand = "*" rand_chacha = "0.3.1" rand_core = "0.6.2" [dev-dependencies] parameterized_test = "0.1.0" ================================================ FILE: Rust/README.md ================================================ # Random Cut Forest This directory contains a Rust implementation, that mirrors the Java implementation of the Random Cut Forest (RCF). The compact trees in the Java version of RCF2.0 was designed with memory safety in mind. This rust implementation skips over that version and mirrors Java RCF3.0. Rust provides memory safety and the parallel implementation of the same algorithm in different languages allows us to get a (qualified) verification of safety. At the same time, verifying the randomness of randomized data structure is non-trivial, and the existing tests of the Java version provide a qualified verification. We expect the different implementations to remain in sync. ================================================ FILE: Rust/rustfmt.toml ================================================ # This configuration uses unstable features from rustfmt nightly to format imports. Follow these steps to run `cargo fmt`: # 1. Install the nightly toolchain # rustup toolchains install nightly # 2. Install or update the nightly build of rustfmt # rustup component add rustfmt --toolchain nightly # 3. Run `cargo fmt` with the `+nightly` flag # `cargo +nightly fmt` unstable_features = true group_imports = "StdExternalCrate" imports_granularity = "Crate" reorder_imports = true ================================================ FILE: Rust/src/common/cluster.rs ================================================ use std::cmp::{max, min}; use std::ops::{Deref, Index}; use std::slice; use rand::{Rng, SeedableRng}; use rand_chacha::ChaCha20Rng; use rand_core::RngCore; use rayon::iter::{IntoParallelRefMutIterator, ParallelIterator}; use crate::util::check_argument; use crate::types::Result; const PHASE2_THRESHOLD: usize = 2; const SEPARATION_RATIO_FOR_MERGE: f64 = 0.8; const WEIGHT_THRESHOLD: f64 = 1.25; const LENGTH_BOUND: usize = 5000; /** * In the following, the goal is to cluster objects of type T, given a distance function over a pair * of references. The clustering need not create any new object of type T, but would find representative * points that express the cluster. The dictionary of points is expressed as pairs of reference and * corresponding weights of objects. However for vectors/slives over f32 and single representative scenario * the clustering does allow computation of an approximation median to create new "central" points. * Q is the struct that corresponds to a representative of a cluster. Note that * a cluster can have multiple representatives (see for example https://en.wikipedia.org/wiki/CURE_algorithm) * thus the entire information is a vector of tuples corresponding to (representative, weight of representative) * **/ pub trait IntermediateCluster { // aclsuter should provide a measure of the point set convered by the cluster fn weight(&self) -> f64; // A cluster is an extended object of a type different from the base type of a // point indicated by T (and only the reference is used in the distance function // every clustering algorithm implicitly/explicitly defines this function // the return value is (distance, the integer identifier of the cluster representative) // if the cluster is represented by a single value then that identifier would be 0 fn distance_to_point<'a>(&self, dictionary: &'a [Z], get_point: fn (usize, &'a [Z]) -> &'a T, point: &T, distance: fn(&T, &T) -> f64) -> (f64,usize); // Likewise, the distance function needs to be extended (implicitly/explicitly) // to a distance function between clusters // the return value is the distance and the pair of identifiers in the corresponding clusters which // define that closest distance fn distance_to_cluster<'a>(&self, dictionary: &'a [Z], get_point: fn (usize, &'a [Z]) -> &'a T, other: &dyn IntermediateCluster, distance: fn(&T, &T) -> f64) -> (f64, usize, usize); // a function that assigns a point indexed by usize from a list of samples to // the cluster; note the weight used in the function need not be the entire weight of the // sampled point (for example in case of soft assignments) fn add_point(&mut self, index: usize, weight: f32, dist: f64, representative: usize) -> Result<()>; // given a set of previous assignments, recomputes the optimal set of representatives // this is the classic optimization step for k-Means; but the analogue exists for every // clustering; note that it is possible that recompute does nothing fn recompute<'a>(&mut self, points: &'a [Z], get_point: fn (usize,&'a [Z]) -> &'a T, distance: fn(&T, &T) -> f64) -> f64; // resets the statistics of a clusters; preparing for a sequence of add_point followed // by recompute fn reset(&mut self); // a function that allows a cluster to absorb another cluster in an agglomerative \ // clustering algorithm fn extent_measure(&self) -> f64; // a function that indicates cluster quality fn average_radius(&self) -> f64; // a function that absorbs another cluster fn absorb<'a>(&mut self, dictionary: &'a [Z], get_point: fn (usize,&'a [Z]) -> &'a T, another: &dyn IntermediateCluster, distance: fn(&T, &T) -> f64) -> Result<()>; // a function to return a list of representatives corresponding to pairs (Q,weight) fn representatives(&self) -> Vec<(Q, f32)>; // a function that helps scale (by multiplication) the cluster weight fn scale_weight(&mut self, factor: f64) -> Result<()>; } fn pick(points: &[(T, f32)], wt: f32) -> usize { let mut position = 0; let mut running = wt; for i in 0..points.len() { position = i; if running - points[i].1 <= 0.0 { break; } else { running -= points[i].1; } } position } fn median<'a, Z,Q:?Sized>(dimensions:usize,points: &'a [Z], get_point: fn(usize,&'a [Z]) -> &'a Q,list: &mut [(usize, f32)]) -> Vec where Q: Index { let mut answer = vec![0.0f32;dimensions]; let total: f64 = list.iter().map(|a| a.1 as f64).sum(); for i in 0..dimensions { list.sort_by(|a, b| get_point(a.0,&points)[i].partial_cmp(&get_point(b.0,points)[i]).unwrap()); let position = pick(list, (total / 2.0) as f32); answer[i] = get_point(list[position].0,&points)[i]; } answer } #[repr(C)] pub struct Center { representative: Vec, weight: f64, points: Vec<(usize, f32)>, sum_of_radii: f64, } impl Center { pub fn new(_representative: usize, point:&[f32], weight: f32, _params:usize) -> Result { Ok(Center { representative: Vec::from(point), weight: weight as f64, points: Vec::new(), sum_of_radii: 0.0, }) } pub fn new_as_vec(_representative: usize, point:&Vec, weight: f32,_params:usize) -> Result { Ok(Center { representative: point.clone(), weight: weight as f64, points: Vec::new(), sum_of_radii: 0.0, }) } pub fn average_radius(&self) -> f64 { if self.weight == 0.0 { 0.0 } else { self.sum_of_radii / self.weight } } pub fn distance(&self, point: &[f32], dist: fn(&[f32],&[f32]) -> f64) -> f64 { (dist)(&self.representative,point) } pub fn representative(&self) -> Vec { self.representative.clone() } pub fn weight(&self) -> f64 { self.weight } fn re_optimize<'a, Z, Q:?Sized>(&mut self, points:&'a [Z], get_point: fn(usize,&'a [Z]) ->&'a Q, picker: fn(usize,&'a [Z],fn(usize,&'a [Z]) -> &'a Q, a: &mut [(usize,f32)]) -> Vec) { if self.weight == 0.0 { let dimensions = self.representative.len(); // the following computes an approximate median if self.points.len() < 500 { self.representative = picker(dimensions, points, get_point, &mut self.points); } else { let mut samples = Vec::new(); let mut rng = ChaCha20Rng::seed_from_u64(0); for i in 0..self.points.len() { if rng.gen::() < (200.0 * self.points[i].1 as f64) / self.weight { samples.push((self.points[i].0, 1.0)); } } self.representative = picker(dimensions, points, get_point, &mut samples); }; } } fn recompute_rad<'a,Z>(&mut self, points: &'a [Z], get_point: fn(usize,&'a [Z]) -> &'a [f32], dist: fn(&[f32],&[f32]) -> f64) -> f64 { let old_value = self.sum_of_radii; self.sum_of_radii = 0.0; for j in 0..self.points.len() { self.sum_of_radii += self.points[j].1 as f64 * dist(&self.representative, get_point(self.points[j].0,&points)) as f64; } old_value - self.sum_of_radii } fn recompute_rad_vec<'a,Z>(&mut self, points: &'a [Z], get_point: fn(usize,&'a [Z]) -> &'a Vec, dist: fn(&Vec,&Vec) -> f64) -> f64 { let old_value = self.sum_of_radii; self.sum_of_radii = 0.0; for j in 0..self.points.len() { self.sum_of_radii += self.points[j].1 as f64 * dist(&self.representative, get_point(self.points[j].0,&points)) as f64; } old_value - self.sum_of_radii } fn add_point(&mut self, index: usize, weight: f32, dist: f64) { self.points.push((index, weight)); self.weight += weight as f64; self.sum_of_radii += weight as f64 * dist; } fn reset(&mut self) { self.points.clear(); self.weight = 0.0; self.sum_of_radii = 0.0; } fn absorb_list(&mut self, other_weight: f64, other_list: &Vec<(Vec,f32)>, closest: (f64,usize)){ let t = f64::exp(2.0 * (self.weight - other_weight) / (self.weight + other_weight)); let factor = t / (1.0 + t); let dimensions = self.representative.len(); for i in 0..dimensions { self.representative[i] = (factor * (self.representative[i] as f64) + (1.0 - factor) * (other_list[closest.1].0[i] as f64)) as f32; } self.sum_of_radii += (self.weight * (1.0 - factor) + factor * other_weight) * closest.0; } } impl IntermediateCluster, [f32]> for Center { fn weight(&self) -> f64 { self.weight() } fn scale_weight(&mut self, factor: f64) -> Result<()>{ check_argument(!factor.is_nan() && factor>0.0," has to be positive")?; self.weight = self.weight as f64 * factor; Ok(()) } fn distance_to_point<'a>(&self, _points:&'a [Z],_get_point: fn(usize,&'a [Z]) ->&'a [f32],point: &[f32], distance: fn(&[f32], &[f32]) -> f64) -> (f64,usize) { ((distance)(&self.representative, point),0) } fn distance_to_cluster<'a>( &self, _points:&'a [Z], _get_point: fn(usize,&'a [Z]) ->&'a [f32], other: &dyn IntermediateCluster, [f32]>, distance: fn(&[f32], &[f32]) -> f64, ) -> (f64,usize,usize) { let tuple = other.distance_to_point(_points,_get_point,&self.representative, distance); (tuple.0,0,tuple.1) } fn add_point(&mut self, index: usize, weight: f32, dist: f64, representative:usize) -> Result<()> { check_argument(representative==0,"can have only one representative")?; check_argument(!weight.is_nan() && weight >= 0.0f32, "non-negative weight")?; self.add_point(index,weight,dist); Ok(()) } fn recompute<'a>(&mut self, points:&'a [Z],get_point: fn(usize,&'a [Z]) ->&'a [f32], distance: fn(&[f32], &[f32]) -> f64) -> f64 { self.re_optimize(&points,get_point, median); self.recompute_rad(&points,get_point, distance) } fn reset(&mut self) { self.reset(); } fn extent_measure(&self) -> f64 { self.average_radius() } fn average_radius(&self) -> f64 { self.average_radius() } fn absorb<'a>( &mut self, points:&'a [Z], get_point: fn(usize,&'a [Z]) ->&'a [f32], another: &dyn IntermediateCluster, [f32]>, distance: fn(&[f32], &[f32]) -> f64, ) ->Result<()> { let closest = another.distance_to_point(points, get_point, &self.representative, distance); self.absorb_list(another.weight(), &another.representatives(), closest); Ok(()) } fn representatives(&self) -> Vec<(Vec, f32)> { vec![(self.representative.clone(), self.weight as f32); 1] } } impl IntermediateCluster, Vec> for Center { fn weight(&self) -> f64 { self.weight() } fn scale_weight(&mut self, factor: f64) -> Result<()>{ check_argument(!factor.is_nan() && factor>0.0," has to be positive")?; self.weight = self.weight as f64 * factor; Ok(()) } fn distance_to_point<'a>(&self, _points:&'a [Z],_get_point: fn(usize,&'a [Z]) ->&'a Vec,point: &Vec, distance: fn(&Vec, &Vec) -> f64) -> (f64,usize) { ((distance)(&self.representative, point),0) } fn distance_to_cluster<'a>( &self, _points:&'a [Z], _get_point: fn(usize,&'a [Z]) ->&'a Vec, other: &dyn IntermediateCluster, Vec>, distance: fn(&Vec, &Vec) -> f64, ) -> (f64,usize,usize) { let tuple = other.distance_to_point(_points,_get_point,&self.representative, distance); (tuple.0,0,tuple.1) } fn add_point(&mut self, index: usize, weight: f32, dist: f64, representative:usize) ->Result<()>{ check_argument(representative==0,"can have only one representative")?; check_argument(!weight.is_nan() && weight >= 0.0f32, "non-negative weight")?; self.add_point(index,weight,dist); Ok(()) } fn recompute<'a>(&mut self, points:&'a [Z],get_point: fn(usize,&'a [Z]) ->&'a Vec, distance: fn(&Vec, &Vec) -> f64) -> f64 { self.re_optimize(&points,get_point, median); self.recompute_rad_vec(&points,get_point, distance) } fn reset(&mut self) { self.reset(); } fn extent_measure(&self) -> f64 { self.average_radius() } fn average_radius(&self) -> f64 { self.average_radius() } fn absorb<'a>( &mut self, points:&'a [Z], get_point: fn(usize,&'a [Z]) ->&'a Vec, another: &dyn IntermediateCluster, Vec>, distance: fn(&Vec, &Vec) -> f64, ) -> Result<()>{ let closest = another.distance_to_point(points,get_point, &self.representative,distance); self.absorb_list(another.weight(),&another.representatives(),closest); Ok(()) } fn representatives(&self) -> Vec<(Vec, f32)> { vec![(self.representative.clone(), self.weight as f32); 1] } } fn process_point<'a,Z,U,Q,T :?Sized>(dictionary: &'a [Z], get_point: fn(usize,&'a [Z])->&'a T, index: usize, centers: &mut [U], weight : f32, distance: fn(&T, &T) -> f64) -> Result<()> where U: IntermediateCluster + Send, T: Sync, { let mut dist = vec![(0.0, 1); centers.len()]; let mut min_distance = (f64::MAX, 1); for j in 0..centers.len() { dist[j] = centers[j].distance_to_point(dictionary, get_point,get_point(index,dictionary), distance); check_argument(dist[j].0>=0.0," distances cannot be negative")?; if min_distance.0 > dist[j].0 { min_distance = dist[j]; } }; check_argument(min_distance.0>=0.0," distances cannot be negative")?; if min_distance.0 == 0.0 { for j in 0..centers.len() { if dist[j].0 == 0.0 { centers[j].add_point(index, weight, 0.0, dist[j].1)?; } } } else { let mut sum = 0.0; for j in 0..centers.len() { if dist[j].0 <= WEIGHT_THRESHOLD * min_distance.0 { sum += min_distance.0 / dist[j].0; } } for j in 0..centers.len() { if dist[j].0 <= WEIGHT_THRESHOLD * min_distance.0 { centers[j].add_point( index, (weight as f64 * min_distance.0 / (sum * dist[j].0)) as f32, dist[j].0, dist[j].1 )?; } } } Ok(()) } fn assign_and_recompute<'a, Z, Q, U, T: ?Sized>( dictionary: &'a [Z], weights: &'a [f32], get_point: fn(usize,&'a [Z]) -> &'a T, get_weight: fn(usize,&'a [Z],&'a [f32]) -> f32, samples: &[(usize,f32)], centers: &mut [U], distance: fn(&T, &T) -> f64, parallel_enabled: bool, ) -> Result where U: IntermediateCluster + Send, T: Sync, Z: Sync, { for j in 0..centers.len() { centers[j].reset(); } if samples.len() == 0{ for i in 0..dictionary.len() { process_point(dictionary,get_point,i,centers,get_weight(i,dictionary,weights),distance)?; } } else { for i in 0..samples.len() { process_point(dictionary,get_point,i,centers,samples[i].1,distance)?; } } let gain: f64 = if parallel_enabled { centers .par_iter_mut() .map(|x| x.recompute(dictionary, get_point,distance)) .sum() } else { centers .iter_mut() .map(|x| x.recompute(dictionary, get_point,distance)) .sum() }; Ok(gain) } fn down_sample<'a,Z>(points: &'a [Z], weights:&'a [f32], get_weight: fn(usize,&'a [Z],&'a [f32]) -> f32, seed:u64, approximate_bound: usize) -> Vec<(usize, f32)> { let mut total_weight: f64 = 0.0; for j in 0..points.len() { total_weight += get_weight(j, &points, &weights) as f64; }; let mut rng = ChaCha20Rng::seed_from_u64(seed as u64); let mut sampled_points = Vec::new(); let mut remainder = 0.0f64; for j in 0..points.len() { let point_weight = get_weight(j,&points,&weights); if point_weight > (0.005 * total_weight) as f32 { sampled_points.push((j, point_weight)); } else { remainder += point_weight as f64; } } for j in 0..points.len() { let point_weight = get_weight(j,&points,&weights); if point_weight <= (0.005 * total_weight) as f32 && rng.gen::() < approximate_bound as f64 / (points.len() as f64) { let t = point_weight as f64 * (points.len() as f64 / approximate_bound as f64) * (remainder / total_weight); sampled_points.push((j, t as f32)); } } sampled_points } fn pick_from<'a,Z>(points: &'a [Z], weights: &'a [f32], get_weight: fn(usize,&'a [Z],&'a [f32]) -> f32, wt: f32) -> (usize,f32) { let mut position = 0; let mut weight = get_weight(position,points,weights); let mut running = wt; for i in 0..points.len() { position = i; weight = get_weight(position,points,weights); if running - weight <= 0.0 { break; } else { running -= weight; } } (position,weight) } pub fn general_iterative_clustering<'a, U, V, Q, Z, T: ?Sized>( max_allowed: usize, dictionary: &'a [Z], weights: &'a [f32], get_point: fn(usize,&'a [Z]) -> &'a T, get_weight: fn(usize,&'a [Z],&'a [f32]) -> f32, approximate_bound: usize, seed: u64, parallel_enabled: bool, create: fn(usize, &'a T, f32, V) -> Result, create_params: V, distance: fn(&T, &T) -> f64, phase_2_reassign: bool, enable_phase_3: bool, overlap_parameter: f64, ) -> Result> where U: IntermediateCluster + Send, T: Sync, Z: Sync, V: Copy, { check_argument(max_allowed < 51, " for large number of clusters, other methods may be better, consider recursively removing clusters")?; check_argument(max_allowed > 0, " number of clusters has to be greater or equal to 1")?; let mut rng = ChaCha20Rng::seed_from_u64(seed); let mut centers: Vec = Vec::new(); let samples : Vec<(usize,f32)> = if dictionary.len() > approximate_bound { down_sample(dictionary,weights,get_weight,rng.next_u64(),approximate_bound) } else { Vec::new() }; // // we now peform an initialization; the sampling corresponds a denoising // note that if we are look at 2k random points, we are likely hitting every group of points // with weight 1/k whp let sampled_sum: f32 = if dictionary.len() > approximate_bound { samples.iter().map(|x| x.1).sum() } else { (0..dictionary.len()).into_iter().map(|x| get_weight(x,dictionary,weights)).sum() }; for _k in 0..10 * max_allowed { let wt = (rng.gen::() * sampled_sum as f64) as f32; let mut min_dist = f64::MAX; let (index,weight) = if dictionary.len() > approximate_bound { let i = pick(&samples, wt); (i,samples[i].1) } else { pick_from(dictionary,weights,get_weight,wt) }; for i in 0..centers.len() { let t = centers[i].distance_to_point(dictionary,get_point,get_point(index,&dictionary), distance); if t.0 < min_dist { min_dist = t.0; }; } if min_dist > 0.0 { centers.push(create(index,get_point(index,dictionary), weight,create_params)?); } } assign_and_recompute(&dictionary,weights, get_point, get_weight,&samples,&mut centers, distance, parallel_enabled)?; // sort in increasing order of weight centers.sort_by(|o1, o2| o1.weight().partial_cmp(&o2.weight()).unwrap()); while centers.len() > 0 && centers[0].weight() == 0.0 { centers.remove(0); } let mut phase_3_distance = 0.0f64; let mut keep_reducing_centers = centers.len() > max(max_allowed, 1); while keep_reducing_centers { let mut measure = 0.0f64; let mut measure_dist = f64::MAX; let mut lower = 0; let mut first = lower; let mut second = lower + 1; let mut found_merge = false; while lower < centers.len() - 1 && !found_merge { let mut min_dist = f64::MAX; let mut min_nbr = usize::MAX; for j in lower + 1..centers.len() { let dist = centers[lower].distance_to_cluster(&dictionary,get_point,¢ers[j], distance); if min_dist > dist.0 { min_nbr = j; min_dist = dist.0; } let numerator = centers[lower].extent_measure() + centers[j].extent_measure() + phase_3_distance; if numerator >= overlap_parameter * dist.0 { if measure * dist.0 < numerator { first = lower; second = j; if dist.0 == 0.0f64 { found_merge = true; } else { measure = numerator / dist.0; } measure_dist = dist.0; } } } if lower == 0 && !found_merge { measure_dist = min_dist; second = min_nbr; } lower += 1; } let inital = centers.len(); if inital > max_allowed || found_merge || (enable_phase_3 && measure > overlap_parameter) { let (small, large) = centers.split_at_mut(second); large.first_mut().unwrap().absorb(&dictionary,get_point, &small[first], distance)?; centers.swap_remove(first); if phase_2_reassign && centers.len() <= PHASE2_THRESHOLD * max_allowed + 1{ assign_and_recompute(&dictionary, weights,get_point,get_weight, &samples, &mut centers, distance, parallel_enabled)?; } centers.sort_by(|o1, o2| o1.weight().partial_cmp(&o2.weight()).unwrap()); while centers.len() > 0 && centers[0].weight() == 0.0 { centers.remove(0); } if inital > max_allowed && centers.len() <= max_allowed { // phase 3 kicks in; but this will execute at most once // note that measureDist can be 0 as well phase_3_distance = measure_dist; } } else { keep_reducing_centers = false; } } centers.sort_by(|o1, o2| o2.weight().partial_cmp(&o1.weight()).unwrap()); // decreasing order let center_sum: f64 = centers.iter().map(|x| x.weight() as f64).sum(); for i in 0..centers.len() { centers[i].scale_weight(1.0/center_sum)?; } Ok(centers) } fn pick_slice_to_slice<'a>(index: usize, entry:&'a [&[f32]]) -> &'a [f32]{ &entry[index] } fn pick_first_slice_to_slice<'a>(index: usize, entry:&'a [(&[f32],f32)]) -> &'a [f32]{ &entry[index].0 } fn pick_first_to_slice<'a>(index: usize, entry:&'a [(Vec,f32)]) -> &'a [f32]{ &entry[index].0 } fn pick_to_slice<'a>(index: usize, entry:&'a [Vec]) -> &'a [f32]{ &entry[index] } fn pick_tuple_weight(index:usize, entry:&[(T,f32)], _weights: &[f32]) -> f32{ entry[index].1 } fn pick_weight(index:usize, _entry:&[T], weights: &[f32]) -> f32{ weights[index] } fn one<'a,Z>(_i:usize,_points : &'a[Z], _weight : &'a [f32]) -> f32{ 1.0 } pub fn single_centroid_cluster_weighted_vec_with_distance_over_slices( dictionary: &[(Vec, f32)], distance: fn(&[f32], &[f32]) -> f64, max_allowed: usize, parallel_enabled: bool, ) -> Result> { general_iterative_clustering( max_allowed, dictionary, empty_weights, pick_first_to_slice, pick_tuple_weight, LENGTH_BOUND, max_allowed as u64, parallel_enabled, Center::new, 0, distance, false, true, SEPARATION_RATIO_FOR_MERGE, ) } const empty_weights:&Vec = &Vec::new(); pub fn single_centroid_unweighted_cluster_vec_as_slice( dictionary: &[Vec], distance: fn(&[f32], &[f32]) -> f64, max_allowed: usize, parallel_enabled: bool, ) -> Result> { general_iterative_clustering( max_allowed, dictionary, empty_weights, pick_to_slice, one, LENGTH_BOUND, max_allowed as u64, parallel_enabled, Center::new, 0, distance, false, true, SEPARATION_RATIO_FOR_MERGE, ) } pub fn single_centroid_unweighted_cluster_slice( dictionary: &[&[f32]], distance: fn(&[f32], &[f32]) -> f64, max_allowed: usize, parallel_enabled: bool, ) -> Result> { general_iterative_clustering( max_allowed, dictionary, empty_weights, pick_slice_to_slice, one, LENGTH_BOUND, max_allowed as u64, parallel_enabled, Center::new, 0, distance, false, true, SEPARATION_RATIO_FOR_MERGE, ) } pub fn single_centroid_cluster_slice_with_weight_arrays( dictionary: &[&[f32]], weights : &[f32], distance: fn(&[f32], &[f32]) -> f64, max_allowed: usize, parallel_enabled: bool, ) -> Result> { general_iterative_clustering( max_allowed, dictionary, &weights, pick_slice_to_slice, pick_weight, LENGTH_BOUND, max_allowed as u64, parallel_enabled, Center::new, 0, distance, false, true, SEPARATION_RATIO_FOR_MERGE, ) } pub fn single_centroid_cluster_weighted_vec( dictionary: &[(Vec, f32)], distance: fn(&Vec, &Vec) -> f64, max_allowed: usize, parallel_enabled: bool, ) -> Result> { general_iterative_clustering( max_allowed, dictionary, empty_weights, pick_first_to_ref, pick_tuple_weight, LENGTH_BOUND, max_allowed as u64, parallel_enabled, Center::new_as_vec, 0, distance, false, true, SEPARATION_RATIO_FOR_MERGE, ) } fn pick_ref<'a,T :?Sized>(index: usize, entry:&[&'a T]) -> &'a T{ entry[index] } fn pick_ref_tuple_first<'a,T :?Sized>(index: usize, entry:&[(&'a T,f32)]) -> &'a T{ entry[index].0 } fn pick_first_to_ref<'a,T>(index: usize, entry:&'a [(T,f32)]) -> &'a T{ &entry[index].0 } fn pick_to_ref<'a,T>(index: usize, entry:&'a [T]) -> &'a T{ &entry[index] } pub fn single_centroid_cluster_vec( dictionary: &[Vec], distance: fn(&Vec, &Vec) -> f64, max_allowed: usize, parallel_enabled: bool, ) -> Result> { general_iterative_clustering( max_allowed, dictionary, empty_weights, pick_to_ref, one, LENGTH_BOUND, max_allowed as u64, parallel_enabled, Center::new_as_vec, 0, distance, false, true, SEPARATION_RATIO_FOR_MERGE, ) } #[repr(C)] pub struct MultiCenterRef<'b, T :?Sized> { representatives: Vec<(&'b T,f32)>, number_of_representatives: usize, is_compact: bool, shrinkage: f32, weight: f64, sum_of_radii: f64, } impl<'b,T :?Sized> MultiCenterRef<'b,T>{ pub fn representatives(& self) -> Vec<(&'b T,f32)>{ self.representatives.clone() } pub fn new(_representative: usize, point: &'b T, weight: f32, params : (usize,f32,bool)) -> Result { let (number_of_representatives, shrinkage,is_compact) = params; check_argument(number_of_representatives>0,"has to be positive")?; check_argument(shrinkage>=0.0 && shrinkage<= 1.0," has to between [0,1]")?; Ok(MultiCenterRef { representatives: vec![(point, weight as f32);1], number_of_representatives, shrinkage, is_compact, weight: weight as f64, sum_of_radii: 0.0, }) } pub fn average_radius(&self) -> f64 { if self.weight == 0.0 { 0.0 } else { self.sum_of_radii / self.weight } } pub fn weight(&self) -> f64 { self.weight } } impl<'b, Z, T:?Sized> IntermediateCluster for MultiCenterRef<'b,T> { fn weight(&self) -> f64 { self.weight() } fn distance_to_point<'a>(&self, _points:&'a [Z],_get_point: fn(usize,&'a [Z]) ->&'a T,point: &T, distance: fn(&T, &T) -> f64) -> (f64,usize) { let original = ((distance)(point, self.representatives[0].0), 0); let mut closest = original; for i in 1..self.representatives.len() { let t = ((distance)(point, self.representatives[i].0), i); if closest.0 > t.0 { closest = t; } } ((closest.0 * (1.0 - self.shrinkage as f64) + self.shrinkage as f64 * original.0), closest.1) } fn distance_to_cluster<'a>( &self, _points:&'a [Z], _get_point: fn(usize,&'a [Z]) ->&'a T, other: &dyn IntermediateCluster, distance: fn(&T, &T) -> f64, ) -> (f64,usize,usize) { let list = other.representatives(); let original = ((distance)(list[0].0, self.representatives[0].0), 0, 0); let mut closest = original; for i in 1..self.representatives.len() { for j in 1..list.len() { let t = ((distance)(list[j].0, self.representatives[i].0), i, j); if closest.0 > t.0 { closest = t; } } } ((closest.0 * (1.0 - self.shrinkage as f64) + self.shrinkage as f64 * original.0), closest.1, closest.2) } fn add_point(&mut self, _index: usize, weight: f32, dist: f64, representative: usize) -> Result<()>{ self.representatives[representative].1 += weight; self.sum_of_radii += weight as f64 * dist; self.weight += weight as f64; Ok(()) } fn recompute<'a>(&mut self, _points:&'a [Z],_get_point: fn(usize,&'a [Z]) ->&'a T, _distance: fn(&T, &T) -> f64) -> f64 { self.representatives.sort_by(|a,b| a.1.partial_cmp(&b.1).unwrap()); 0.0 } fn reset(&mut self) { self.sum_of_radii = 0.0; self.weight = 0.0; for i in 0..self.representatives.len() { self.representatives[i].1 = 0.0; } } fn extent_measure(&self) -> f64 { 0.5 * self.average_radius() / self.number_of_representatives as f64 } fn average_radius(&self) -> f64 { self.average_radius() } fn absorb<'a>( &mut self, _points:&'a [Z], _get_point: fn(usize,&'a [Z]) ->&'a T, another: &dyn IntermediateCluster, distance: fn(&T, &T) -> f64, ) -> Result<()> { self.sum_of_radii += if self.is_compact { another.average_radius()*another.weight() } else { another.extent_measure()*another.weight() }; self.weight += another.weight(); let mut representatives = Vec::new(); representatives.append(&mut self.representatives); representatives.append(&mut another.representatives()); self.representatives = Vec::with_capacity(self.number_of_representatives); let mut max_index: usize = 0; let mut weight = representatives[0].1; for i in 1..representatives.len() { if representatives[i].1 > weight { weight = representatives[i].1; max_index = i; } } self.representatives.push(representatives[max_index]); representatives.swap_remove(max_index); /** * create a list of representatives based on the farthest point method, which * correspond to a well scattered set. See * https://en.wikipedia.org/wiki/CURE_algorithm */ while representatives.len() > 0 && self.representatives.len() < self.number_of_representatives { let mut farthest_weighted_distance = 0.0; let mut farthest_index: usize = usize::MAX; for j in 0..representatives.len() { if representatives[j].1 as f64 > (weight as f64) / (2.0 * self.number_of_representatives as f64) { let mut new_weighted_distance = (distance)(self.representatives[0].0, representatives[j].0) * representatives[j].1 as f64; check_argument(new_weighted_distance >= 0.0, " weights or distances cannot be negative")?; for i in 1..self.representatives.len() { let t = (distance)(self.representatives[i].0, representatives[j].0) * representatives[j].1 as f64; check_argument(t >= 0.0, " weights or distances cannot be negative")?; if t < new_weighted_distance { new_weighted_distance = t; } } if new_weighted_distance > farthest_weighted_distance { farthest_weighted_distance = new_weighted_distance; farthest_index = j; } } } if farthest_weighted_distance == 0.0 { break; } self.representatives.push(representatives[farthest_index]); representatives.swap_remove(farthest_index); } // absorb the remainder into existing representatives for j in 0..representatives.len() { let dist = (distance)(representatives[0].0, self.representatives[0].0); check_argument(dist >= 0.0, "distance cannot be negative")?; let mut min_dist = dist; let mut min_index: usize = 0; for i in 1..self.representatives.len() { let new_dist = (distance)(self.representatives[i].0, representatives[j].0); check_argument(new_dist >= 0.0, "distance cannot be negative")?; if new_dist < min_dist { min_dist = new_dist; min_index = i; } } self.representatives[min_index].1 += representatives[j].1; self.sum_of_radii += representatives[j].1 as f64 * min_dist; } self.representatives.sort_by(|a,b| b.1.partial_cmp(&a.1).unwrap()); Ok(()) } fn representatives(&self) -> Vec<(&'b T, f32)> { self.representatives() } fn scale_weight(&mut self, factor: f64) -> Result<()>{ check_argument(!factor.is_nan() && factor>0.0," has to be positive")?; for i in 0..self.representatives.len() { self.representatives[i].1 = (self.representatives[i].1 as f64 * factor) as f32; } Ok(()) } } pub fn multi_cluster_obj<'a,T:Sync>( dictionary: &'a [T], distance: fn(&T, &T) -> f64, number_of_representatives: usize, shrinkage: f32, is_compact: bool, max_allowed: usize, parallel_enabled: bool, ) -> Result>> { general_iterative_clustering( max_allowed, dictionary, empty_weights, pick_to_ref, one, LENGTH_BOUND, max_allowed as u64, parallel_enabled, MultiCenterRef::new, (number_of_representatives,shrinkage,is_compact), distance, false, true, SEPARATION_RATIO_FOR_MERGE, ) } pub fn multi_cluster_as_ref<'a,T:Sync>( dictionary: &'a [&T], distance: fn(&T, &T) -> f64, number_of_representatives: usize, shrinkage: f32, is_compact: bool, max_allowed: usize, parallel_enabled: bool, ) -> Result>> { general_iterative_clustering( max_allowed, dictionary, empty_weights, pick_ref, one, LENGTH_BOUND, max_allowed as u64, parallel_enabled, MultiCenterRef::new, (number_of_representatives,shrinkage,is_compact), distance, false, true, SEPARATION_RATIO_FOR_MERGE, ) } pub fn multi_cluster_as_weighted_obj<'a,T:Sync>( dictionary: &'a [(T,f32)], distance: fn(&T, &T) -> f64, number_of_representatives: usize, shrinkage: f32, is_compact: bool, max_allowed: usize, parallel_enabled: bool, ) -> Result>> { general_iterative_clustering( max_allowed, dictionary, empty_weights, pick_first_to_ref, pick_tuple_weight, LENGTH_BOUND, max_allowed as u64, parallel_enabled, MultiCenterRef::new, (number_of_representatives,shrinkage,is_compact), distance, false, true, SEPARATION_RATIO_FOR_MERGE, ) } pub fn multi_cluster_as_weighted_ref<'a,T:Sync + ?Sized>( dictionary: &'a [(&T,f32)], distance: fn(&T, &T) -> f64, number_of_representatives: usize, shrinkage: f32, is_compact: bool, max_allowed: usize, parallel_enabled: bool, ) -> Result>> { general_iterative_clustering( max_allowed, dictionary, empty_weights, pick_ref_tuple_first, pick_tuple_weight, LENGTH_BOUND, max_allowed as u64, parallel_enabled, MultiCenterRef::new, (number_of_representatives,shrinkage,is_compact), distance, false, true, SEPARATION_RATIO_FOR_MERGE, ) } pub fn multi_cluster_as_object_with_weight_array<'a,T :Sync>( dictionary: &'a [T], weights: &'a [f32], distance: fn(&T, &T) -> f64, number_of_representatives: usize, shrinkage: f32, is_compact: bool, max_allowed: usize, parallel_enabled: bool, ) -> Result>> { general_iterative_clustering( max_allowed, dictionary, weights, pick_to_ref, pick_weight, LENGTH_BOUND, max_allowed as u64, parallel_enabled, MultiCenterRef::new, (number_of_representatives,shrinkage,is_compact), distance, false, true, SEPARATION_RATIO_FOR_MERGE, ) } #[repr(C)] #[derive(Clone)] pub struct MultiCenter { representatives: Vec<(T,f32)>, shrinkage: f32, weight: f64, sum_of_radii: f64, } impl MultiCenter{ pub fn create<'a>( refc : &MultiCenterRef<'a,T> ) -> Self { let mut rep_list = Vec::new(); for j in refc.representatives() { rep_list.push((j.0.clone(),j.1)); } MultiCenter { representatives: rep_list, weight: refc.weight, shrinkage : refc.shrinkage, sum_of_radii: refc.sum_of_radii, } } pub fn representatives(& self) -> Vec<(T,f32)>{ self.representatives.clone() } pub fn representative(& self, number: usize) -> T { self.representatives[number].0.clone() } pub fn average_radius(&self) -> f64 { if self.weight == 0.0 { 0.0 } else { self.sum_of_radii / self.weight } } pub fn weight(&self) -> f64 { self.weight } pub fn distance_to_point(&self, point: &T, ignore: f32, distance: fn(&T, &T) -> f64) -> Result<(f64,usize)> { let original = ((distance)(point, &self.representatives[0].0), 0); check_argument(original.0>=0.0,"distances cannot be negative")?; let mut closest = original; for i in 1..self.representatives.len() { if self.representatives[i].1 > ignore { let t = ((distance)(point, &self.representatives[i].0), i); check_argument(t.0 >= 0.0, "distances cannot be negative")?; if closest.0 > t.0 { closest = t; } } } Ok(((closest.0 * (1.0 - self.shrinkage as f64) + self.shrinkage as f64 * original.0), closest.1)) } pub fn distance_to_point_and_ref<'a>(&'a self, point: &T, ignore: f32, distance: fn(&T, &T) -> f64) -> Result<(f64,&'a T)> { let original = ((distance)(point, &self.representatives[0].0), 0); check_argument(original.0>=0.0,"distances cannot be negative")?; let mut closest = original; for i in 1..self.representatives.len() { if self.representatives[i].1 > ignore { let t = ((distance)(point, &self.representatives[i].0), i); check_argument(t.0 >= 0.0, "distances cannot be negative")?; if closest.0 > t.0 { closest = t; } } } Ok(((closest.0 * (1.0 - self.shrinkage as f64) + self.shrinkage as f64 * original.0), &self.representatives[closest.1].0)) } } pub fn persist<'a,T:Clone>(list:&Vec>) -> Vec> { let mut answer = Vec::new(); for item in list { answer.push(MultiCenter::create(item)); } answer } ================================================ FILE: Rust/src/common/conditionalfieldsummarizer.rs ================================================ use std::hash::Hash; use crate::{ common::samplesummary::{summarize, SampleSummary}, pointstore::PointStore, types::Result }; fn project_missing(point: &Vec, position: &[usize]) -> Vec { position.iter().map(|i| point[*i]).collect() } const CONDITIONAL_UPPER_FRACTION : f64 = 0.9; const CONDITIONAL_LOWER_FRACTION : f64 = 0.1; /// the following function is a conduit that summarizes the conditional samples derived from the trees /// The samples are denoted by (PointIndex, f32) where the PointIndex(usize) corresponds to the point identifier /// in the point store and the f32 associated with a scalar value (corresponding to weight) /// the field missing corresponds to the list of missing fields in the space of the full (potentially shingled) points /// centrality corresponds to the parameter which was used to derive the samples, and thus provides a mechanism for /// refined interpretation in summarization /// project corresponds to a boolean flag, determining whether we wish to focus on the missing fields only (project = true) /// or we focus on the entire space of (potentially shingled) points (in case of project = false) which have different /// and complementary uses. /// max_number corresponds to a parameter that controls the summarization -- in the current version this corresponds to /// an upper bound on the number of summary points in the SampleSummary construct /// /// Note that the global, mean and median do not perform any weighting/pruning; whereas the summarize() performs on /// somewhat denoised data to provide a list of summary. Note further that summarize() is redundant (and skipped) /// when max_number = 0 /// The combination appears to provide the best of all worlds with little performance overhead and can be /// used and reconfigured easily. In the fullness of time, it is possible to leverage a dynamic Kernel, since /// the entire PointStore is present and the PointStore is dynamic. #[repr(C)] pub struct FieldSummarizer { centrality: f64, project: bool, max_number: usize, distance: fn(&[f32], &[f32]) -> f64, } impl FieldSummarizer { pub fn new( centrality: f64, project: bool, max_number: usize, distance: fn(&[f32], &[f32]) -> f64, ) -> Self { FieldSummarizer { centrality, project, max_number, distance, } } pub fn summarize_list( &self, pointstore: &dyn PointStore, point_list_with_distance: &[(f64, usize, f64)], missing: &[usize] ) -> Result { let mut distance_list: Vec = point_list_with_distance.iter().map(|a| a.2).collect(); distance_list.sort_by(|a, b| a.partial_cmp(&b).unwrap()); let mut threshold = 0.0; if self.centrality > 0.0 { let mut always_include = 0; while always_include < point_list_with_distance.len() - 1 && distance_list[always_include] == 0.0 { always_include += 1; } threshold = self.centrality * (distance_list[always_include + (distance_list.len() - always_include) / 3] + distance_list[always_include + (distance_list.len() - always_include) / 2]) as f64; } threshold += (1.0 - self.centrality) * distance_list[point_list_with_distance.len() - 1] as f64; let total_weight = point_list_with_distance.len() as f64; let dimensions = if !self.project || missing.len() == 0 { pointstore.copy(point_list_with_distance[0].1)?.len() } else { missing.len() }; let mut mean = vec![0.0f32; dimensions]; let mut deviation = vec![0.0f32; dimensions]; let mut sum_values_sq = vec![0.0f64; dimensions]; let mut sum_values = vec![0.0f64; dimensions]; let mut vec = Vec::new(); for i in 0..point_list_with_distance.len() { let point = if !self.project || missing.len() == 0 { pointstore.copy(point_list_with_distance[i].1)? } else { project_missing( &pointstore.copy(point_list_with_distance[i].1)?, &missing, ) }; for j in 0..dimensions { sum_values[j] += point[j] as f64; sum_values_sq[j] += point[j] as f64 * point[j] as f64; } // the else can be filtered further let weight: f32 = if point_list_with_distance[i].2 <= threshold { 1.0 } else { (threshold / point_list_with_distance[i].2) as f32 }; vec.push((point, weight)); } for j in 0..dimensions { mean[j] = (sum_values[j] / total_weight as f64) as f32; let t: f64 = sum_values_sq[j] / total_weight as f64 - sum_values[j] * sum_values[j] / (total_weight as f64 * total_weight as f64); deviation[j] = f64::sqrt(if t > 0.0 { t } else { 0.0 }) as f32; } let vec_weight : f64 = vec.iter().map(|x| x.1 as f64).sum(); let num = vec_weight/2.0; let lower_fraction = vec_weight *CONDITIONAL_LOWER_FRACTION; let upper_fraction = vec_weight*CONDITIONAL_UPPER_FRACTION; let mut median = vec![0.0f32; dimensions]; let mut upper = vec![0.0f32; dimensions]; let mut lower = vec![0.0f32; dimensions]; for j in 0..dimensions { let mut y: Vec<(f32,f32)> = vec.iter().map(|x| (x.0[j],x.1)).collect(); y.sort_by(|a, b| a.0.partial_cmp(&b.0).unwrap()); let first = SampleSummary::pick(&y,lower_fraction,0,0.0); lower[j] = y[first.0].0; let second = SampleSummary::pick(&y,num,first.0,first.1); median[j] = y[second.0].0; let third = SampleSummary::pick(&y,upper_fraction,second.0,second.1); upper[j] = y[third.0].0; } let summary = summarize(&vec, self.distance, self.max_number, false).unwrap(); Ok(SampleSummary { summary_points: summary.summary_points.clone(), relative_weight: summary.relative_weight.clone(), total_weight: summary.total_weight, mean, median, upper, lower, deviation, }) } } ================================================ FILE: Rust/src/common/descriptor.rs ================================================ use crate::common::divector::DiVector; use crate::common::rangevector::RangeVector; use crate::trcf::types::{CorrectionMode, ImputationMethod, ScoringStrategy, TransformMethod}; use crate::trcf::types::ImputationMethod::USE_RCF; use crate::trcf::types::ScoringStrategy::EXPECTED_INVERSE_HEIGHT; /** * This class maintains a simple discounted statistics. Setters are avoided * except for discount rate which is useful as initialization from raw scores */ #[repr(C)] #[derive(Clone)] pub struct Descriptor { pub id: u64, pub current_input: Vec, pub current_timestamp: u64, pub missing_values: Option>, pub rcf_point: Option>, pub score: f32, pub correction_mode: CorrectionMode, pub values_seen: usize, pub transform_method : TransformMethod, pub threshold: f32, pub anomaly_grade: f32, pub data_confidence: f32, pub attribution: Option, pub relative_index : i32, pub scale : Option>, pub shift : Option>, pub difference_deviations: Option>, pub deviations_post : Option>, pub time_augmented : bool, pub expected_rcf_point: Option>, pub last_anomaly : Option, pub forecast : Option>, pub error_information : Option, pub scoring_strategy : ScoringStrategy, pub imputation_method : ImputationMethod, } #[repr(C)] #[derive(Clone)] pub struct AnomalyInformation { // we do not explicitly provide a default so that each of these entires are // considered carefully before declaring an anomaly pub expected_rcf_point: Vec, pub anomalous_rcf_point: Vec, pub relative_index: i32, pub values_seen: usize, pub attribution: Option, pub score: f32, pub grade: f32, pub expected_timestamp: u64, pub relevant_attribution: Option>, pub time_attribution: f32, pub past_values: Vec, pub past_timestamp: u64, pub expected_values_list: Vec>, pub likelihood_of_values: Vec } #[repr(C)] #[derive(Clone)] pub struct ErrorInformation { pub interval_precision: Vec, pub error_distribution : RangeVector, pub error_rmse : DiVector, pub error_mean : Vec } impl Default for Descriptor { fn default() -> Self { Descriptor{ id: 0, current_input: vec![], current_timestamp: 0, missing_values: None, rcf_point: None, score: 0.0, correction_mode: CorrectionMode::NONE, values_seen: 0, transform_method: TransformMethod::NONE, threshold: 0.0, anomaly_grade: 0.0, data_confidence: 0.0, attribution: None, relative_index: 0, scale: None, shift: None, difference_deviations: None, deviations_post: None, time_augmented: false, expected_rcf_point: None, last_anomaly: None, forecast: None, error_information: None, scoring_strategy: EXPECTED_INVERSE_HEIGHT, imputation_method: USE_RCF } } } impl Descriptor { pub fn new(id: u64, point: &[f32], current_timestamp: u64,time_augmented: bool, missing_values: Option>) -> Self { if missing_values.as_ref().is_some(){ for i in missing_values.as_ref().unwrap() { assert!( *i < point.len(), "incorrect input") } } Descriptor { id, current_input: Vec::from(point), current_timestamp, time_augmented, missing_values, ..Default::default()} } } ================================================ FILE: Rust/src/common/deviation.rs ================================================ use crate::util::check_argument; use crate::types::Result; /** * This class maintains a simple discounted statistics. Setters are avoided * except for discount rate which is useful as initialization from raw scores */ #[repr(C)] #[derive(Clone)] pub struct Deviation { pub discount: f64, pub weight: f64, pub sum_squared:f64, pub sum: f64, pub count: i32 } impl Deviation { pub fn new(discount: f64) -> Result { check_argument(discount>=0.0 && discount < 1.0, "incorrect discount value")?; Ok(Deviation { discount, weight: 0.0, sum:0.0, sum_squared:0.0, count:0 }) } pub fn default() -> Self { Deviation { discount: 0.0, weight: 0.0, sum:0.0, sum_squared:0.0, count:0 } } pub fn create(discount:f64,weight:f64,sum:f64,sum_squared:f64,count:i32) -> Self{ Deviation{ discount, weight, sum, sum_squared, count } } pub fn reset(&mut self) { self.weight = 0.0; self.count = 0; self.sum = 0.0; self.sum_squared = 0.0; } pub fn mean(&self) -> f64 { if self.is_empty() { 0.0 } else { self.sum / self.weight } } pub fn update(&mut self, score: f64) { let factor = if self.discount == 0.0 {1.0} else { let a = 1.0 - self.discount; let b= 1.0 - 1.0 / (self.count + 2) as f64; if a f64{ if self.is_empty() { return 0.0; } let temp = self.sum / self.weight; let answer = self.sum_squared / self.weight - temp * temp; if answer > 0.0 { f64::sqrt(answer) } else { 0.0 } } pub fn is_empty(&self) -> bool{ self.weight <= 0.0 } pub fn discount(&self) -> f64 { self.discount } pub fn set_discount(&mut self, discount:f64) { self.discount = discount; } pub fn sum(&self) -> f64 { self.sum } pub fn sum_squared(&self) -> f64{ self.sum_squared } pub fn weight(&self) -> f64{ self.weight } pub fn count(&self) -> i32{ self.count } pub fn set_count(&mut self,count:i32) { self.count = count; } } ================================================ FILE: Rust/src/common/directionaldensity.rs ================================================ use crate::{common::divector::DiVector, samplerplustree::boundingbox::BoundingBox}; use crate::types::Result; use crate::util::check_argument; #[repr(C)] #[derive(Clone)] pub struct InterpolationMeasure { pub measure: DiVector, pub distance: DiVector, pub probability_mass: DiVector, pub sample_size: f32, } impl InterpolationMeasure { pub fn empty(dimension: usize, sample_size: f32) -> Self { InterpolationMeasure { measure: DiVector::empty(dimension), distance: DiVector::empty(dimension), probability_mass: DiVector::empty(dimension), sample_size, } } pub fn new( measure: DiVector, distance: DiVector, prob_mass: DiVector, sample_size: f32, ) -> Result { check_argument( measure.dimensions() == distance.dimensions(), " incorrect lengths" )?; check_argument( measure.dimensions() == prob_mass.dimensions(), " incorrect lengths" )?; Ok(InterpolationMeasure { measure: measure, distance: distance, probability_mass: prob_mass, sample_size, }) } pub fn add_to(&self, other: &mut InterpolationMeasure) { self.probability_mass.add_to(&mut other.probability_mass); self.distance.add_to(&mut other.distance); self.measure.add_to(&mut other.measure); other.sample_size += self.sample_size; } pub fn divide(&mut self, num: usize) { self.scale(1.0 / num as f64); self.scale_samples(1.0 / num as f64); } pub fn scale(&mut self, factor: f64) { self.distance.scale(factor); self.probability_mass.scale(factor); self.measure.scale(factor); } pub fn scale_samples(&mut self, factor: f64) { self.sample_size = (self.sample_size as f64 * factor) as f32; } pub fn update(&mut self, point: &[f32], bounding_box: &BoundingBox, measure: f64) -> f64 { let min_values = bounding_box.get_min_values(); let max_values = bounding_box.get_max_values(); let minsum: f32 = min_values .iter() .zip(point) .map(|(&x, &y)| if x - y > 0.0 { x - y } else { 0.0 }) .sum(); let maxsum: f32 = point .iter() .zip(max_values) .map(|(&x, &y)| if x - y > 0.0 { x - y } else { 0.0 }) .sum(); let sum = maxsum + minsum; let new_range = sum as f64 + bounding_box.get_range_sum(); let prob = sum as f64 / (new_range); if prob > 0.0 { self.scale(1.0 - prob); for i in 0..point.len() { if point[i] > max_values[i] { let t = (point[i] - max_values[i]) as f64 / new_range; self.distance.high[i] += t * (point[i] - min_values[i]) as f64; self.probability_mass.high[i] += t; self.measure.high[i] += measure * t; } else if point[i] < min_values[i] { let t = (min_values[i] - point[i]) as f64 / new_range; self.distance.low[i] += t * (max_values[i] - point[i]) as f64; self.probability_mass.low[i] += t; self.measure.low[i] += measure * t; } } } prob } pub fn directional_measure(&self, threshold: f64, manifold_dimension: f64) -> Result { check_argument( self.sample_size >= 0.0 && self.measure.total() >= 0.0, " cannot have negative samples or measure" )?; if self.sample_size == 0.0f32 || self.measure.total() == 0.0 { return Ok(DiVector::empty(self.measure.dimensions())); } let mut sum_of_factors = 0.0; for i in 0..self.measure.dimensions() { let mut t = if self.probability_mass.high_low_sum(i) > 0.0 { self.distance.high_low_sum(i) / self.probability_mass.high_low_sum(i) } else { 0.0 }; if t > 0.0 { t = f64::exp(f64::ln(t) * manifold_dimension) * self.probability_mass.high_low_sum(i); } sum_of_factors += t; } let density_factor = 1.0 / (threshold + sum_of_factors); let mut answer = self.measure.clone(); answer.scale(density_factor); Ok(answer) } pub fn directional_density(&self) -> Result { self.directional_measure(1e-3, self.measure.dimensions() as f64) } pub fn density(&self) -> Result { Ok(self.directional_density()?.total()) } } ================================================ FILE: Rust/src/common/divector.rs ================================================ use crate::samplerplustree::boundingbox::BoundingBox; use crate::util::check_argument; use crate::types::Result; #[repr(C)] #[derive(Clone)] pub struct DiVector { pub high: Vec, pub low: Vec, } impl DiVector { pub fn empty(dimension: usize) -> Self { DiVector { high: vec![0.0; dimension], low: vec![0.0; dimension], } } pub fn new(high: &[f64], low: &[f64]) -> Result { check_argument(high.len() == low.len(), " incorrect lengths")?; Ok(DiVector { high: Vec::from(high), low: Vec::from(low), }) } pub fn assign_as_probability_of_cut(&mut self, bounding_box: &BoundingBox, point: &[f32]) { let minsum: f64 = self .low .iter_mut() .zip(bounding_box.get_min_values()) .zip(point) .map(|((x, &y), &z)| { if y - z > 0.0 { *x = (y - z) as f64; *x } else { *x = 0.0; *x } }) .sum(); let maxsum: f64 = self .high .iter_mut() .zip(point) .zip(bounding_box.get_max_values()) .map(|((x, &y), &z)| { if y - z > 0.0 { *x = (y - z) as f64; *x } else { *x = 0.0; *x } }) .sum(); let sum = minsum + maxsum; if sum != 0.0 { self.scale(1.0 / (bounding_box.get_range_sum() + sum)); } } pub fn assign_as_probability_of_cut_with_missing_coordinates( &mut self, bounding_box: &BoundingBox, point: &[f32], missing_coordinates: &[bool], ) { let minsum: f64 = self .low .iter_mut() .zip(bounding_box.get_min_values()) .zip(point) .zip(missing_coordinates) .map(|(((x, &y), &z), &b)| { if !b && y - z > 0.0 { *x = (y - z) as f64; *x } else { *x = 0.0; *x } }) .sum(); let maxsum: f64 = self .high .iter_mut() .zip(point) .zip(bounding_box.get_max_values()) .zip(missing_coordinates) .map(|(((x, &y), &z), &b)| { if !b && y - z > 0.0 { *x = (y - z) as f64; *x } else { *x = 0.0; *x } }) .sum(); let sum = minsum + maxsum; if sum != 0.0 { self.scale(1.0 / (bounding_box.get_range_sum() + sum)); } } pub fn assign(&mut self, other: &DiVector) { for (x, &y) in self.high.iter_mut().zip(&other.high) { *x = y; } for (x, &y) in self.low.iter_mut().zip(&other.low) { *x = y; } } pub fn add_from(&mut self, other: &DiVector, factor: f64) { other.add_to_scaled(self, factor); } pub fn add_to(&self, other: &mut DiVector) { for (x, &y) in other.high.iter_mut().zip(&self.high) { *x += y; } for (x, &y) in other.low.iter_mut().zip(&self.low) { *x += y; } } pub fn add_to_scaled(&self, other: &mut DiVector, factor: f64) { for (x, &y) in other.high.iter_mut().zip(&self.high) { *x += y * factor; } for (x, &y) in other.low.iter_mut().zip(&self.low) { *x += y * factor; } } pub fn divide(&mut self, num: usize) { self.scale(1.0 / num as f64) } pub fn scale(&mut self, factor: f64) { for x in self.high.iter_mut() { *x *= factor; } for x in self.low.iter_mut() { *x *= factor; } } pub fn total(&self) -> f64 { self.high.iter().sum::() + self.low.iter().sum::() } pub fn normalize(&mut self, value: f64) { let current = self.total(); if current <= 0.0 { let v = value / (2.0 * self.high.len() as f64); for x in self.high.iter_mut() { *x = v; } for x in self.low.iter_mut() { *x = v; } } else { self.scale(value / current); } } pub fn dimensions(&self) -> usize { self.high.len() } pub fn high_low_sum(&self, index: usize) -> f64 { self.high[index] + self.low[index] } pub fn max_contribution(&self, base_dimension: usize) -> Result { self.max_gap_contribution(base_dimension,self.dimensions()) } pub fn max_gap_contribution(&self, base_dimension: usize, gap: usize) -> Result { check_argument(gap>0, "incorrect input")?; check_argument(base_dimension>0, "incorrect input")?; check_argument(self.dimensions()%base_dimension == 0, "incorrect input")?; let mut val = 0.0; let mut index = if gap * base_dimension > self.dimensions() {0} else { self.dimensions()/base_dimension - gap}; for i in 0..base_dimension { val += self.high_low_sum(index*base_dimension + i); } for j in (index+1)..(self.dimensions() / base_dimension) { let mut sum = 0.0; for i in 0..base_dimension { sum += self.high_low_sum(j * base_dimension + i); } if sum > val { val = sum; index = j; } } Ok(index) } } ================================================ FILE: Rust/src/common/intervalstoremanager.rs ================================================ use std::fmt::Debug; use crate::types::Result; use crate::util::check_argument; #[repr(C)] pub struct IntervalStoreManager { capacity: usize, last_in_use: usize, free_indices_start: Vec, free_indices_end: Vec, } impl> IntervalStoreManager where T: std::fmt::Display + std::cmp::PartialEq, usize: From, { pub fn new(size: usize) -> Self where >::Error: Debug, { IntervalStoreManager { capacity: size, last_in_use: 1, free_indices_start: vec![0.try_into().unwrap()], free_indices_end: vec![(size - 1).try_into().unwrap()], } } pub fn get_capacity(&self) -> usize { self.capacity } pub fn change_capacity(&mut self, new_capacity: usize) where >::Error: Debug, { if new_capacity > self.capacity { let start: T = self.capacity.try_into().unwrap(); let end: T = (new_capacity - 1).try_into().unwrap(); if self.free_indices_start.len() == self.last_in_use { self.free_indices_start.resize(self.last_in_use + 1, start); self.free_indices_end.resize(self.last_in_use + 1, end); } else { self.free_indices_start[self.last_in_use] = start; self.free_indices_end[self.last_in_use] = end; } self.last_in_use += 1; self.capacity = new_capacity; } } pub fn is_empty(&self) -> bool { self.last_in_use == 0 } pub fn get(&mut self) -> Result where >::Error: Debug, { check_argument(!self.is_empty(),"no more indices left in interval manager")?; let answer = self.free_indices_start[self.last_in_use - 1]; let new_value: usize = answer.into(); if answer == self.free_indices_end[self.last_in_use - 1] { self.last_in_use -= 1; } else { self.free_indices_start[self.last_in_use - 1] = (new_value + 1).try_into().unwrap(); } Ok(new_value) } pub fn release(&mut self, index: usize) -> Result<()> where >::Error: Debug, { let val: T = TryFrom::try_from(index).unwrap(); if self.last_in_use != 0 { let start: usize = self.free_indices_start[self.last_in_use - 1].into(); let end: usize = self.free_indices_end[self.last_in_use - 1].into(); if start == index + 1 { self.free_indices_start[self.last_in_use - 1] = val; return Ok(()); } else if end + 1 == index { self.free_indices_end[self.last_in_use - 1] = val; return Ok(()); } } if self.last_in_use < self.free_indices_start.len() { self.free_indices_start[self.last_in_use] = val; self.free_indices_end[self.last_in_use] = val; } else { self.free_indices_start.resize(self.last_in_use + 1, val); self.free_indices_end.resize(self.last_in_use + 1, val); } self.last_in_use += 1; Ok(()) } pub fn used(&self) -> usize { let mut answer = 0; for i in 0..self.last_in_use { let start: usize = self.free_indices_start[i].into(); let end: usize = self.free_indices_end[i].into(); answer += end - start + 1; } self.capacity - answer } pub fn get_size(&self) -> usize { self.free_indices_start.len() * 2 * std::mem::size_of::() + std::mem::size_of::>() } } ================================================ FILE: Rust/src/common/mod.rs ================================================ pub mod cluster; pub mod conditionalfieldsummarizer; pub mod directionaldensity; pub mod divector; pub mod intervalstoremanager; pub mod multidimdatawithkey; pub mod samplesummary; pub mod deviation; pub mod rangevector; pub mod descriptor; ================================================ FILE: Rust/src/common/multidimdatawithkey.rs ================================================ extern crate rand; extern crate rand_chacha; use std::f32::consts::PI; use rand::SeedableRng; use rand_chacha::ChaCha20Rng; use rand_core::RngCore; use crate::rand::Rng; use crate::util::check_argument; use crate::types::Result; pub struct MultiDimDataWithKey { pub data: Vec>, pub change_indices: Vec, pub labels: Vec, pub changes: Vec>, } impl MultiDimDataWithKey { pub fn multi_cosine( num: usize, period: &[usize], amplitude: &[f32], noise: f32, seed: u64, base_dimension: usize, ) -> Result { check_argument( period.len() == base_dimension, " need a period for each dimension " )?; check_argument( amplitude.len() == base_dimension, " need an amplitude for each dimension" )?; let mut rng = ChaCha20Rng::seed_from_u64(seed); let mut noiserng = ChaCha20Rng::seed_from_u64(seed + 1); let mut phase: Vec = Vec::new(); for i in 0..base_dimension { phase.push(rng.next_u64() as usize % period[i]); } let mut data: Vec> = Vec::new(); let mut change_indices: Vec = Vec::new(); let mut changes: Vec> = Vec::new(); for i in 0..num { let mut elem = vec![0.0; base_dimension]; let flag = noiserng.gen::() < 0.01; let mut new_change = vec![0.0; base_dimension]; let mut used: bool = false; for j in 0..base_dimension { elem[j] = amplitude[j] * (2.0 * PI * (i + phase[j]) as f32 / period[j] as f32).cos() + noise * noiserng.gen::(); if flag && noiserng.gen::() < 0.3 { let factor: f32 = 5.0 * (1.0 + noiserng.gen::()); let mut change: f32 = factor * noise; if noiserng.gen::() < 0.5 { change = -change; } elem[j] += change; new_change[j] = change; used = true; } } data.push(elem); if used { change_indices.push(i); changes.push(new_change); } } Ok(MultiDimDataWithKey { data, change_indices, labels: Vec::new(), changes, }) } pub fn mixture( num: usize, mean: &[Vec], scale: &[Vec], weight: &[f32], seed: u64, ) -> Result { let mut rng = ChaCha20Rng::seed_from_u64(seed); check_argument(num > 0, " number of elements cannot be 0")?; check_argument(mean.len() > 0, " cannot be null")?; let base_dimension = mean[0].len(); check_argument( mean.len() == scale.len(), " need scales and means to be 1-1" )?; check_argument( weight.len() == mean.len(), " need weights and means to be 1-1" )?; for i in 0..mean.len() { check_argument( mean[i].len() == base_dimension, " must have the same dimensions" )?; check_argument( scale[i].len() == base_dimension, "sclaes must have the same dimension as the mean" )?; check_argument(weight[i] >= 0.0, " weights cannot be negative")?; } let sum: f32 = weight.iter().sum(); let mut data = Vec::new(); let mut labels = Vec::new(); for _j in 0..num { let mut i = 0; let mut wt: f32 = sum * rng.gen::(); while wt > weight[i] { wt -= weight[i]; i += 1; } data.push(new_vec(&mean[i], &scale[i], &mut rng)); labels.push(i); } Ok(MultiDimDataWithKey { data, labels, change_indices: vec![], changes: vec![], }) } } fn next_element(mean: f32, scale: f32, rng: &mut ChaCha20Rng) -> f32 { let mut r: f32 = f64::sqrt(-2.0f64 * f64::ln(rng.gen::())) as f32; // the following is to discard inf being returned from ln() while r.is_infinite() { r = f64::sqrt(-2.0f64 * f64::ln(rng.gen::())) as f32; } let switch: f32 = rng.gen(); if 0.5 < switch { mean + scale * r * f32::cos(2.0 * PI * rng.gen::()) } else { mean + scale * r * f32::sin(2.0 * PI * rng.gen::()) } } pub fn new_vec(mean: &[f32], scale: &[f32], rng: &mut ChaCha20Rng) -> Vec { let dimensions = mean.len(); let mut answer = Vec::new(); for i in 0..dimensions { answer.push(next_element(mean[i], scale[i], rng)); } answer } ================================================ FILE: Rust/src/common/rangevector.rs ================================================ use crate::util::check_argument; use crate::types::Result; /** * A RangeVector is used when we want to track a quantity and its upper and * lower bounds */ #[repr(C)] #[derive(Clone)] pub struct RangeVector { pub values: Vec, pub upper: Vec, pub lower: Vec } impl RangeVector { pub fn new(dimensions: usize) -> Self { RangeVector { values: vec![0.0; dimensions], upper: vec![0.0; dimensions], lower: vec![0.0; dimensions] } } } impl RangeVector { pub fn new(dimensions: usize) -> Self { RangeVector { values: vec![0.0; dimensions], upper: vec![0.0; dimensions], lower: vec![0.0; dimensions] } } } impl RangeVector { pub fn from(values : Vec) -> Self { RangeVector{ values : values.clone(), upper : values.clone(), lower : values.clone() } } pub fn create(values: &[T], upper: &[T], lower:&[T]) -> Result { check_argument(values.len() == upper.len() && upper.len() == lower.len(), " incorrect lengths")?; for i in 0..values.len() { check_argument(values[i] <= upper[i], " incorrect upper bound")?; check_argument(lower[i] <= values [i], "incorrect lower bounds")?; } Ok(RangeVector{ values :Vec::from(values), upper : Vec::from(upper), lower : Vec::from(lower) }) } pub fn shift(&mut self, i:usize, shift: T) { self.values[i] += shift; self.upper[i] += shift; self.lower[i] += shift; // managing precision explicitly if self.upper[i] < self.values[i] { self.upper[i] = self.values[i]; } if self.lower[i] > self.values[i] { self.lower[i] = self.values[i]; } } pub fn cascaded_add(&mut self, base: &[T]) -> Result<()>{ check_argument(base.len() >0 , "must be of positive length")?; let horizon = self.values.len()/base.len(); check_argument(horizon * base.len() == self.values.len(), " incorrect function call")?; for j in 0..base.len() { self.shift(j,base[j]); } for i in 1..horizon { for j in 0..base.len() { self.shift(i * base.len() + j, self.values[(i-1)*base.len() + j]); } } Ok(()) } pub fn scale(&mut self, i:usize, scale: T) { self.values[i] *= scale; self.upper[i] *= scale; self.lower[i] *= scale; // managing precision explicitly if self.upper[i] < self.values[i] { self.upper[i] = self.values[i]; } if self.lower[i] > self.values[i] { self.lower[i] = self.values[i]; } } } ================================================ FILE: Rust/src/common/samplesummary.rs ================================================ use std::cmp::min; use std::ops::Index; use crate::types::Result; use crate::util::check_argument; use rayon::range; use crate::common::cluster::{Center, multi_cluster_as_weighted_obj, multi_cluster_as_weighted_ref, single_centroid_cluster_weighted_vec_with_distance_over_slices}; /// /// The goal of the summarization below is as follows: on being provided a collection of sampled weighted points /// represented by a slice &[(Vec,f32)] where each of the Vec has the same length/dimension /// and the f32 in the pair is the corresponding weight. /// The algorithm uses the philosophy of RCFs, in repeatedly using randomization. It proceeds as follows: /// 1. It uses an initial sampling which serves as a basis of efficiency as well as denoising, borrowing from /// https://en.wikipedia.org/wiki/CURE_algorithm, in that algorithm's robustness to outliers. /// 2. It uses a sampling mechanism to initialize some clusters based on https://en.wikipedia.org/wiki/Data_stream_clustering /// where the radom sampling achieves half of the the same effects as hierarchical compression. ///3. It repeatedly merges the most overlapping clusters, failing that, eliminates the least weighted cluster to achieve /// the same effect as hieararchical compression. /// /// The algorithm takes a distance function as an input, and tends to produce spherical (measured in the input /// distance function) clusters. These types of algorithms are unlikely to be useful for large number of output clusters. /// The output is the SampleSummary, which provides basic statistics of mean, median and deviation /// in addition it performs a grouping/clustering, assuming that the maximum number of clusters are not large /// the routine below bounds the number to be max_number_per_dimension times the dimension of Vec /// and a smaller number can also be provided in the summarize() function /// /// const MAX_NUMBER_PER_DIMENSION: usize = 5; const PHASE2_THRESHOLD: usize = 2; const LENGTH_BOUND: usize = 1000; const UPPER_FRACTION : f64 = 0.9; const LOWER_FRACTION : f64 = 0.1; #[repr(C)] pub struct SampleSummary { pub summary_points: Vec>, // a measure of comparison among the typical points; pub relative_weight: Vec, // number of samples, often the number of summary, but can handle weighted points // (possibly indicating confidence or othe measure) in the future pub total_weight: f32, // the global mean, median pub mean: Vec, pub median: Vec, // percentiles and bounds pub upper: Vec, pub lower : Vec, // This is the global deviation, pub deviation: Vec, } impl SampleSummary { pub fn new( total_weight: f32, summary_points: Vec>, relative_weight: Vec, median: Vec, mean: Vec, upper: Vec, lower: Vec, deviation: Vec, ) -> Self { SampleSummary { total_weight, summary_points: summary_points.clone(), relative_weight: relative_weight.clone(), median: median.clone(), mean: mean.clone(), upper: upper.clone(), lower: lower.clone(), deviation: deviation.clone(), } } pub fn add_typical(&mut self, summary_points: Vec>, relative_weight: Vec) { self.summary_points = summary_points.clone(); self.relative_weight = relative_weight.clone(); } pub fn pick(weighted_points : &[(f32,f32)], weight: f64, start: usize, initial_weight : f64) -> (usize,f64) { let mut running = initial_weight; let mut index = start; while index + 1 < weighted_points.len() && weighted_points[index].1 as f64 + running < weight { running += weighted_points[index].1 as f64; index += 1; } (index, running) } pub fn from_points(dimensions: usize,points: &[(Q, f32)], lower_fraction: f64, upper_fraction:f64) -> Result where Q: Index { check_argument(points.len() > 0, "cannot be empty list")?; check_argument(lower_fraction < 0.5, " has to be less than half")?; check_argument(upper_fraction > 0.5, "has to be larger than half")?; check_argument(dimensions > 0, " cannot have 0 dimensions")?; let total_weight: f64 = points.iter().map(|x| x.1 as f64).sum(); check_argument(total_weight > 0.0, "weights cannot be all zero")?; check_argument(total_weight.is_finite(), " cannot have infinite weights")?; let mut mean = vec![0.0f32; dimensions]; let mut deviation = vec![0.0f32; dimensions]; let mut sum_values_sq = vec![0.0f64; dimensions]; let mut sum_values = vec![0.0f64; dimensions]; for i in 0..points.len() { check_argument(points[i].1 >= 0.0, "point weights have to be non-negative")?; for j in 0..dimensions { check_argument( points[i].0[j].is_finite() && !points[i].0[j].is_nan(), " cannot have NaN or infinite values" )?; sum_values[j] += points[i].1 as f64 * points[i].0[j] as f64; sum_values_sq[j] += points[i].1 as f64 * points[i].0[j] as f64 * points[i].0[j] as f64; } } for j in 0..dimensions { mean[j] = (sum_values[j] / total_weight) as f32; let t: f64 = sum_values_sq[j] / total_weight - sum_values[j] * sum_values[j] / (total_weight * total_weight); deviation[j] = f64::sqrt(if t > 0.0 { t } else { 0.0 }) as f32; } let mut median = vec![0.0f32; dimensions]; let mut upper_vec = vec![0.0f32;dimensions]; let mut lower_vec = vec![0.0f32;dimensions]; let num = total_weight/2.0; let lower = total_weight * lower_fraction; let upper = total_weight * upper_fraction; for j in 0..dimensions { let mut y: Vec<(f32,f32)> = points.iter().map(|x| (x.0[j],x.1)).collect(); y.sort_by(|a, b| a.0.partial_cmp(&b.0).unwrap()); let first = Self::pick(&y,lower,0,0.0); lower_vec[j] = y[first.0].0; let second = Self::pick(&y,num,first.0,first.1); median[j] = y[second.0].0; let third = Self::pick(&y,upper,second.0,second.1); upper_vec[j] = y[third.0].0; } Ok(SampleSummary { summary_points: Vec::new(), relative_weight: Vec::new(), total_weight: total_weight as f32, mean, upper: upper_vec, lower: lower_vec, median, deviation, }) } pub fn from_references(dimensions: usize, points: &[(&Q, f32)], lower_fraction: f64, upper_fraction:f64) -> Result where Q:?Sized + Index { check_argument(points.len() > 0, "cannot be empty list")?; check_argument(lower_fraction < 0.5, " has to be less than half")?; check_argument(upper_fraction > 0.5, "has to be larger than half")?; check_argument(dimensions > 0, " cannot have 0 dimensions")?; let total_weight: f64 = points.iter().map(|x| x.1 as f64).sum(); check_argument(total_weight > 0.0, "weights cannot be all zero")?; check_argument(total_weight.is_finite(), " cannot have infinite weights")?; let mut mean = vec![0.0f32; dimensions]; let mut deviation = vec![0.0f32; dimensions]; let mut sum_values_sq = vec![0.0f64; dimensions]; let mut sum_values = vec![0.0f64; dimensions]; for i in 0..points.len() { check_argument(points[i].1 >= 0.0, "point weights have to be non-negative")?; for j in 0..dimensions { check_argument( points[i].0[j].is_finite() && !points[i].0[j].is_nan(), " cannot have NaN or infinite values" )?; sum_values[j] += points[i].1 as f64 * points[i].0[j] as f64; sum_values_sq[j] += points[i].1 as f64 * points[i].0[j] as f64 * points[i].0[j] as f64; } } for j in 0..dimensions { mean[j] = (sum_values[j] / total_weight) as f32; let t: f64 = sum_values_sq[j] / total_weight - sum_values[j] * sum_values[j] / (total_weight * total_weight); deviation[j] = f64::sqrt(if t > 0.0 { t } else { 0.0 }) as f32; } let mut median = vec![0.0f32; dimensions]; let mut upper_vec = vec![0.0f32;dimensions]; let mut lower_vec = vec![0.0f32;dimensions]; let num = total_weight/2.0; let lower = total_weight * lower_fraction; let upper = total_weight * upper_fraction; for j in 0..dimensions { let mut y: Vec<(f32,f32)> = points.iter().map(|x| (x.0[j],x.1)).collect(); y.sort_by(|a, b| a.0.partial_cmp(&b.0).unwrap()); let first = Self::pick(&y,lower,0,0.0); lower_vec[j] = y[first.0].0; let second = Self::pick(&y,num,first.0,first.1); median[j] = y[second.0].0; let third = Self::pick(&y,upper,second.0,second.1); upper_vec[j] = y[third.0].0; } Ok(SampleSummary { summary_points: Vec::new(), relative_weight: Vec::new(), total_weight: total_weight as f32, mean, upper: upper_vec, lower: lower_vec, median, deviation, }) } } pub fn summarize( points: &[(Vec, f32)], distance: fn(&[f32], &[f32]) -> f64, max_number: usize, parallel_enabled: bool, ) -> Result { let dimensions = points[0].0.len(); let mut summary = SampleSummary::from_points(dimensions,&points,LOWER_FRACTION,UPPER_FRACTION)?; if max_number > 0 { let max_allowed = min(dimensions * MAX_NUMBER_PER_DIMENSION, max_number); let mut list: Vec

= single_centroid_cluster_weighted_vec_with_distance_over_slices( &points, distance, max_allowed, parallel_enabled, )?; list.sort_by(|o1, o2| o2.weight().partial_cmp(&o1.weight()).unwrap()); // decreasing order let mut summary_points: Vec> = Vec::new(); let mut relative_weight: Vec = Vec::new(); let center_sum: f64 = list.iter().map(|x| x.weight()).sum(); for i in 0..list.len() { summary_points.push(list[i].representative().clone()); relative_weight.push((list[i].weight() / center_sum) as f32); } summary.add_typical(summary_points, relative_weight); } return Ok(summary); } pub fn multi_summarize_ref( points: &[(&[f32], f32)], distance: fn(&[f32], &[f32]) -> f64, number_of_representatives: usize, shrinkage : f32, max_number: usize, parallel_enabled: bool, ) -> Result { let dimensions = points[0].0.len(); let mut summary = SampleSummary::from_references(dimensions,points,LOWER_FRACTION,UPPER_FRACTION)?; if max_number > 0 { let max_allowed = min(dimensions * MAX_NUMBER_PER_DIMENSION, max_number); let mut list= multi_cluster_as_weighted_ref( &points, distance, number_of_representatives, shrinkage, false, max_allowed, parallel_enabled, )?; list.sort_by(|o1, o2| o2.weight().partial_cmp(&o1.weight()).unwrap()); // decreasing order let mut summary_points: Vec> = Vec::new(); let mut relative_weight: Vec = Vec::new(); let center_sum: f64 = list.iter().map(|x| x.weight()).sum(); for i in 0..list.len() { summary_points.push(Vec::from(list[i].representatives()[0].0)); relative_weight.push((list[i].weight() / center_sum) as f32); } summary.add_typical(summary_points, relative_weight); } return Ok(summary); } ================================================ FILE: Rust/src/errors.rs ================================================ use std::error; use std::fmt; /// Errors that can be returned by RCF operations. #[derive(Debug, PartialEq)] pub enum RCFError { InvalidArgument { msg: &'static str, }, } impl error::Error for RCFError {} impl fmt::Display for RCFError { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { match *self { RCFError::InvalidArgument { msg } => write!(f, "{}", msg), } } } ================================================ FILE: Rust/src/example.rs ================================================ extern crate rand; extern crate rand_chacha; extern crate rcflib; use rand::{Rng, SeedableRng}; use rand_chacha::ChaCha20Rng; use rcflib::{ common::multidimdatawithkey, rcf::{RCF}, }; use rcflib::rcf::{RCFBuilder, RCFOptionsBuilder}; fn main() { let shingle_size = 8; let base_dimension = 5; let data_size = 100000; let number_of_trees = 30; let capacity = 256; let initial_accept_fraction = 0.1; let _point_store_capacity = capacity * number_of_trees + 1; let time_decay = 0.1 / capacity as f64; let bounding_box_cache_fraction = 1.0; let random_seed = 17; let parallel_enabled: bool = false; let store_attributes: bool = false; let internal_shingling: bool = true; let internal_rotation = false; let noise = 5.0; let mut forest = RCFBuilder::::new(base_dimension,shingle_size) .tree_capacity(capacity).number_of_trees(number_of_trees).random_seed(random_seed) .store_attributes(store_attributes).parallel_enabled(parallel_enabled).internal_shingling(internal_shingling) .time_decay(time_decay).initial_accept_fraction(initial_accept_fraction) .internal_rotation(internal_rotation) .bounding_box_cache_fraction(bounding_box_cache_fraction).build_default().unwrap(); let mut rng = ChaCha20Rng::seed_from_u64(42); let mut amplitude = Vec::new(); for _i in 0..base_dimension { amplitude.push((1.0 + 0.2 * rng.gen::()) * 60.0); } let data_with_key = multidimdatawithkey::MultiDimDataWithKey::multi_cosine( data_size, &vec![60; base_dimension], &litude, noise, 0, base_dimension.into(), ).unwrap(); let mut score: f64 = 0.0; let _next_index = 0; let mut error = 0.0; let mut count = 0; for i in 0..data_with_key.data.len() { if i > 200 { let next_values = forest.extrapolate(1).unwrap().values; assert_eq!(next_values.len(), base_dimension); error += next_values .iter() .zip(&data_with_key.data[i]) .map(|(x, y)| ((x - y) as f64 * (x - y) as f64)) .sum::(); count += base_dimension; } let new_score = forest.score(&data_with_key.data[i]).unwrap(); //println!("{} {} score {}",y,i,new_score); /* if next_index < data_with_key.change_indices.len() && data_with_key.change_indices[next_index] == i { println!(" score at change {} position {} ", new_score, i); next_index += 1; } */ score += new_score; forest.update(&data_with_key.data[i], 0).unwrap(); } println!( "Average score {} ", (score / data_with_key.data.len() as f64) ); println!("Success! {}", forest.entries_seen()); println!("PointStore Size {} ", forest.point_store_size()); println!("Total size {} bytes (approx)", forest.size()); println!( " RMSE {}, noise {} ", f64::sqrt(error / count as f64), noise ); } ================================================ FILE: Rust/src/glad.rs ================================================ use rand::{Rng, SeedableRng}; use rand_chacha::ChaCha20Rng; use rand_core::RngCore; use crate::common::cluster::{multi_cluster_as_weighted_obj, MultiCenter, persist}; use crate::util::check_argument; use crate::trcf::basicthresholder::BasicThresholder; use crate::common::intervalstoremanager::IntervalStoreManager; use crate::types::Result; pub const DEFAULT_MAX_CLUSTERS :usize = 10; pub const SCORE_MAX : f32 = 10.0; pub const DEFAULT_IGNORE_SMALL_CLUSTER_REPRESENTATIVE : f32 = 0.005; //ignore clusters that are 10 or more times away from the closest pub const CLUSTER_COMPARISON_THRESHOLD : f64 = 10.0; #[repr(C)] pub struct GenericAnomalyDescriptor { pub representative_list: Vec<(T, f32)>, pub score: f64, pub threshold: f32, pub grade: f32, } #[repr(C)] pub struct GlobalLocalAnomalyDetector { capacity: usize, current_size: usize, random_seed: u64, heap: Vec<(f64,usize)>, object_list : Vec<(T,f32)>, time_decay: f64, most_recent_time_decay_update: u64, accumulated_decay: f64, interval_manager: IntervalStoreManager, basic_thresholder: BasicThresholder, last_cluster: u64, do_not_recluster_within : u64, entries_seen: u64, sequence_number: u64, last_mean: f32, evicted : Option<(T,f32)>, clusters: Vec>, max_allowed: usize, shrinkage: f32, is_compact: bool, number_of_representatives: usize, ignore_below: f32, initial_accept_fraction: f64, //global_distance : fn(&T,&T) -> f64 } impl GlobalLocalAnomalyDetector { pub fn new(capacity: usize, random_seed: u64, time_decay: f64, number_of_representatives: usize, shrinkage: f32, is_compact: bool) -> Result{ let mut basic_thresholder = BasicThresholder::new_adjustible(time_decay,false)?; basic_thresholder.set_absolute_threshold(1.2); if !is_compact { basic_thresholder.set_z_factor(2.5); } Ok(GlobalLocalAnomalyDetector{ capacity, current_size: 0, random_seed, heap: vec![], object_list: vec![], time_decay, most_recent_time_decay_update: 0, accumulated_decay: 0.0, interval_manager: IntervalStoreManager::new(capacity), basic_thresholder, last_cluster: 0, do_not_recluster_within: (capacity / 2) as u64, entries_seen: 0, sequence_number: 0, last_mean: -1.0, // forcing the first clustering evicted: Option::None, clusters: Vec::new(), max_allowed: 10, shrinkage, is_compact, number_of_representatives, ignore_below: DEFAULT_IGNORE_SMALL_CLUSTER_REPRESENTATIVE, initial_accept_fraction: 0.125, //global_distance: () }) } fn initial_accept_probability(&self, fill_fraction: f64) -> f64 { return if fill_fraction < self.initial_accept_fraction { 1.0 } else if self.initial_accept_fraction >= 1.0 { 0.0 } else { 1.0 - (fill_fraction - self.initial_accept_fraction) / (1.0 - self.initial_accept_fraction) }; } fn fill_fraction(&self) -> f64 { if self.current_size == self.capacity { return 1.0; }; self.current_size as f64 / self.capacity as f64 } fn compute_weight(&self, random_number: f64, weight: f32) -> f64 { f64::ln(-f64::ln(random_number) / weight as f64) - ((self.entries_seen - self.most_recent_time_decay_update) as f64 * self.time_decay - self.accumulated_decay) } fn swap_down(&mut self, start_index: usize) { let mut current: usize = start_index; while 2 * current + 1 < self.current_size { let mut max_index: usize = 2 * current + 1; if 2 * current + 2 < self.current_size && self.heap[2 * current + 2].0 > self.heap[max_index].0 { max_index = 2 * current + 2; } if self.heap[max_index].0 > self.heap[current].0 { self.swap_weights(current, max_index); current = max_index; } else { break; } } } fn swap_weights(&mut self, a: usize, b: usize) { let tmp = self.heap[a]; self.heap[a] = self.heap[b]; self.heap[b] = tmp; } fn evict_max(&mut self) -> (f64, usize) { let evicted_point = self.heap[0]; self.current_size -= 1; let current: usize = self.current_size.into(); self.heap[0] = self.heap[current]; self.heap[0] = self.heap[current]; self.swap_down(0); evicted_point } fn sample(&mut self, object: &T, weight: f32) -> Result { self.sequence_number += 1; self.entries_seen += 1; let mut initial = false; let mut rng = ChaCha20Rng::seed_from_u64(self.random_seed); self.random_seed = rng.next_u64(); let random_number: f64 = rng.gen(); let heap_weight = self.compute_weight(random_number, weight); if self.current_size < self.capacity { let other_random: f64 = rng.gen(); initial = other_random < self.initial_accept_probability(self.fill_fraction()); } if initial || (heap_weight < self.heap[0].0) { if !initial { let old_index = self.evict_max().1; self.evicted = Some(self.object_list[old_index].clone()); self.interval_manager.release(old_index)?; } let index = self.interval_manager.get()?; if index < self.object_list.len() { self.object_list[index] = (object.clone(), weight); } else { self.object_list.push((object.clone(), weight)); } if self.heap.len() == self.current_size { self.heap.push((heap_weight, index)); } else { self.heap[self.current_size] = (heap_weight, index); } let mut current = self.current_size; self.current_size += 1; while current > 0 { let tmp = (current - 1) / 2; if self.heap[tmp].0 < self.heap[current].0 { self.swap_weights(current, tmp); current = tmp; } else { break; } } return Ok(true); }; Ok(false) } pub fn set_z_factor(&mut self, z_factor : f32){ self.basic_thresholder.set_z_factor(z_factor); } pub fn score(&self, current: &T, local_distance: fn(&T, &T) -> f64, consider_occlusion: bool) -> Result> { if self.clusters.len() == 0 { return Ok(Vec::new()); } else { let mut candidate_list: Vec<(usize, (f64, &T), f64)> = Vec::new(); for j in 0..self.clusters.len() { let rad = self.clusters[j].average_radius(); let close = self.clusters[j].distance_to_point_and_ref(current, self.ignore_below, local_distance)?; candidate_list.push((j, close, rad)); } candidate_list.sort_by(|a, b| a.1.0.partial_cmp(&b.1.0) .expect("should not have NaN/Infinities")); if candidate_list[0].1.0 == 0.0 { return Ok(vec![(candidate_list[0].1.1.clone(), 0.0)]); } let mut index = 0; while index < candidate_list.len() { let head = candidate_list[index]; if consider_occlusion { for j in index + 1..candidate_list.len() { let occlude = (local_distance)(head.1.1, candidate_list[j].1.1); check_argument(occlude>=0.0, "distances cannot be negative")?; if candidate_list[j].2 > f64::sqrt(occlude * occlude + head.2 * head.2) { candidate_list.remove(j); } } } index += 1; } let mut answer = Vec::new(); let distance_threshold = candidate_list[0].1.0 * CLUSTER_COMPARISON_THRESHOLD; for head in &candidate_list { if head.1.0 < distance_threshold { let temp_measure = if head.2 > 0.0 && head.1.0 < SCORE_MAX as f64 * head.2 { (head.1.0 / head.2) as f32 } else { SCORE_MAX }; answer.push((head.1.1.clone(), temp_measure)); } } Ok(answer) } } pub fn process(&mut self, object: &T, weight: f32, global_distance: fn(&T, &T) -> f64, local_distance: fn(&T, &T) -> f64, consider_occlusion: bool) -> Result> { check_argument(weight >= 0.0, "weight cannot be negative")?; // recompute clusters first; this enables easier merges and deserialization if self.sequence_number > self.last_cluster + self.do_not_recluster_within { let current_mean = self.basic_thresholder.primary_mean() as f32; if f32::abs(current_mean - self.last_mean) > 0.1 || current_mean > 1.7f32 || self.sequence_number > self.last_cluster + 20 * self.do_not_recluster_within { self.last_cluster = self.sequence_number; self.last_mean = current_mean; let temp = multi_cluster_as_weighted_obj(&self.object_list, global_distance, 5, 0.1, self.is_compact, self.max_allowed, false)?; self.clusters = persist(&temp); } } let mut score_list = self.score(object, local_distance, consider_occlusion)?; let threshold = self.basic_thresholder.threshold(); let mut grade: f32 = 0.0; let score: f32 = if score_list.len() == 0 { 0.0 } else { score_list.iter().map(|a| a.1).min_by(|a, b| a.partial_cmp(b) .expect("should not contain NaN, corrupt state")) .expect("should be total order, corrupt state") }; if score_list.len() > 0 { if score < SCORE_MAX { // an exponential attribution let sum: f64 = score_list.iter().map(|a| if a.1 == SCORE_MAX { 0.0f64 } else { f64::exp(-(a.1 * a.1) as f64) } ).sum(); for mut item in &mut score_list { let t = if item.1 == f32::MAX { 0.0 } else { f64::min(1.0, f64::exp(-(item.1 * item.1) as f64) / sum) }; item.1 = t as f32; } } else { let y = score_list.len(); for mut item in &mut score_list { item.1 = 1.0 / (y as f32); } } grade = self.basic_thresholder.primary_grade(score); let other = self.basic_thresholder.z_factor(); self.basic_thresholder.update_both(score, f32::min(score, other)); } self.sample(object, weight)?; Ok(GenericAnomalyDescriptor { representative_list: score_list, score: score as f64, threshold, grade }) } pub fn clusters(&self) -> Vec> { self.clusters.clone() } } ================================================ FILE: Rust/src/lib.rs ================================================ pub mod common; pub mod errors; mod pointstore; pub mod rcf; mod samplerplustree; mod types; mod util; pub mod visitor; pub mod trcf; pub mod glad; extern crate rand; extern crate rand_chacha; use num::abs; pub fn l1distance(a: &[f32], b: &[f32]) -> f64 { a.iter() .zip(b) .map(|(&x, &y)| abs(x as f64 - y as f64)) .sum() } pub fn linfinitydistance(a: &[f32], b: &[f32]) -> f64 { let mut dist = 0.0; for i in 0..a.len() { let t = abs(a[i] as f64 - b[i] as f64); if dist < t { dist = t; }; } dist } pub fn l2distance(a: &[f32], b: &[f32]) -> f64 { f64::sqrt( a.iter() .zip(b) .map(|(&x, &y)| (abs(x as f64 - y as f64) * abs(x as f64 - y as f64))) .sum(), ) } ================================================ FILE: Rust/src/pointstore.rs ================================================ extern crate num; use std::{collections::HashMap, convert::TryFrom, fmt::Debug}; use std::hash::Hash; use std::ptr::hash; use crate::types::{Result}; use crate::{common::intervalstoremanager::IntervalStoreManager, types::Location}; use crate::errors::RCFError; use crate::util::check_argument; pub const MAX_ATTRIBUTES: usize = 10; pub trait PointStore where Label: Copy + Sync, Attributes: Copy + Sync + Hash + Eq + Send { fn shingled_point(&self, point: &[f32]) -> Result>; fn size(&self) -> usize; fn missing_indices(&self, look_ahead: usize, values: &[usize]) -> Result>; fn next_indices(&self, look_ahead: usize) -> Result>; fn copy(&self, index: usize) -> Result>; fn is_equal(&self, point: &[f32], index: usize) -> Result; fn reference_and_offset(&self, index: usize) -> Result<(&[f32], usize)>; fn entries_seen(&self) -> u64; fn add(&mut self, point: &[f32], label:Label) -> Result<(usize,usize,Option>)>; fn inc(&mut self, index: usize,attribute_index: usize) -> Result<()>; fn dec(&mut self, index: usize,attribute_index: usize) -> Result<()>; fn adjust_count(&mut self, result: &[((usize, usize),(usize,usize))]) -> Result<()>; fn compact(&mut self) -> Result<()>; fn label(&self, index: usize) -> Result