diff --git a/mzLib/Development/DeconvolutionDevelopment/StandardDeconvolutionTest.cs b/mzLib/Development/DeconvolutionDevelopment/StandardDeconvolutionTest.cs index 5f8702035..2b9547780 100644 --- a/mzLib/Development/DeconvolutionDevelopment/StandardDeconvolutionTest.cs +++ b/mzLib/Development/DeconvolutionDevelopment/StandardDeconvolutionTest.cs @@ -1,5 +1,6 @@ using System.Diagnostics.CodeAnalysis; using MassSpectrometry; +using MassSpectrometry.Deconvolution.Parameters; using NUnit.Framework; using UsefulProteomicsDatabases; @@ -47,13 +48,15 @@ static StandardDeconvolutionTest() List topDownDeconvolutionParametersToTest = [ new ClassicDeconvolutionParameters(1, 60, 4, 3), - new IsoDecDeconvolutionParameters() + new IsoDecDeconvolutionParameters(), + new FlashDeconvDeconvolutionParameters(1, 60, Polarity.Positive) ]; List bottomUpDeconvolutionParametersToTest = [ new ClassicDeconvolutionParameters(1, 12, 4, 3), - new IsoDecDeconvolutionParameters() + new IsoDecDeconvolutionParameters(), + new FlashDeconvDeconvolutionParameters(1, 60, Polarity.Positive) ]; diff --git a/mzLib/Development/DeconvolutionDevelopment/TestCases/SinglePeakDeconvolutionTestCase.cs b/mzLib/Development/DeconvolutionDevelopment/TestCases/SinglePeakDeconvolutionTestCase.cs index 4e63f2392..6d76dd8fc 100644 --- a/mzLib/Development/DeconvolutionDevelopment/TestCases/SinglePeakDeconvolutionTestCase.cs +++ b/mzLib/Development/DeconvolutionDevelopment/TestCases/SinglePeakDeconvolutionTestCase.cs @@ -1,4 +1,5 @@ using MassSpectrometry; +using MassSpectrometry.Deconvolution.Parameters; using MzLibUtil; using Readers; @@ -34,8 +35,11 @@ public SinglePeakDeconvolutionTestCase(DeconvolutionParameters deconParameters, .GetAllScansList() .First(p => p.OneBasedScanNumber == scanNumber).MassSpectrum; - // 8.5 was selected as this is the magic number found in Classic Deconvolution - RangeToDeconvolute = new MzRange(selectedIonMz - 8.5, selectedIonMz + 8.5); + if (deconParameters is FlashDeconvDeconvolutionParameters) + RangeToDeconvolute = null!; + else + // 8.5 was selected as this is the magic number found in Classic Deconvolution + RangeToDeconvolute = new MzRange(selectedIonMz - 8.5, selectedIonMz + 8.5); } /// diff --git a/mzLib/MassSpectrometry/Deconvolution/Algorithms/FlashDeconv2.cs b/mzLib/MassSpectrometry/Deconvolution/Algorithms/FlashDeconv2.cs new file mode 100644 index 000000000..2dc1b4a5d --- /dev/null +++ b/mzLib/MassSpectrometry/Deconvolution/Algorithms/FlashDeconv2.cs @@ -0,0 +1,432 @@ +using Chemistry; +using MzLibUtil; +using System; +using System.Collections.Generic; +using System.Linq; + + +namespace MassSpectrometry.Deconvolution.Algorithms +{ + internal class FlashDeconv2 : DeconvolutionAlgorithm + { + private static readonly ClassicDeconvolutionParameters ToEnvelopeDeconParams = new ClassicDeconvolutionParameters(1, 1, 10, 3); + private static readonly ClassicDeconvolutionAlgorithm ToEnvelopeDeconvoluter = new(ToEnvelopeDeconParams); + internal FlashDeconv2(DeconvolutionParameters deconParameters) : base(deconParameters) + { + + } + // Deconvolute method: Performs deconvolution of the input MzSpectrum within the specified MzRange. + // The method extracts isotopic envelopes by transforming, grouping, filtering, and summarizing spectral features. + internal override IEnumerable Deconvolute(MzSpectrum spectrum, MzRange range) + { + // 1. Log-transform the spectrum to linearize charge state spacing and filter low-intensity peaks. + var logTransformedSpectrum = LogTransformSpectrum(spectrum); + + // 3. Find groups of peaks that match expected charge state patterns in log(m/z) space. + var matchingGroups = FindMatchingGroups( + logTransformedSpectrum.XArray, + logTransformedSpectrum.YArray); + + // 4. Remove groups that are subsets of larger groups to avoid redundancy. + var filteredGroups = RemoveSubsetGroups( + matchingGroups.Select(g => (g.X, g.Y, g.ChargeState)).ToList()); + + // 5. Transform the filtered groups' X values back from log(m/z) to m/z space. + var expTransformedGroups = TransformGroupsToExpX(filteredGroups); + + // 6. Create neutral mass/intensity groups from the charge state groups. + var neutralMassIntensityGroups = CreateNeutralMassIntensityGroups(expTransformedGroups); + + // 7. Filter the neutral mass/intensity groups into likely correct and incorrect groups based on ppm tolerance. + FilterMassIntensityGroupsByPpmTolerance( + neutralMassIntensityGroups, + out var likelyCorrectGroups, + out var likelyIncorrectGroups); + + // 8. For each likely correct group, determine the most common neutral mass (mode) and sum the corresponding intensities. + var summarizedEnvelopes = GetMostCommonNeutralMassAndSummedIntensity(likelyCorrectGroups); + + var nms = new MzSpectrum( + summarizedEnvelopes.Select(x => x.mostCommonNeutralMass.ToMz(1)).ToArray(), + summarizedEnvelopes.Select(x => x.summedIntensity).ToArray(), + true); + + var envelopes = ToEnvelopeDeconvoluter.Deconvolute(nms, nms.Range).OrderByDescending(e=>e.TotalIntensity).ToList(); + return envelopes; + } + private MzSpectrum LogTransformSpectrum(MzSpectrum spectrum, double intensityThresholdForFilter = 0.01) + { + var filtered = spectrum.XArray + .Zip(spectrum.YArray, (x, y) => new { x, y }) + .Where(pair => pair.y > intensityThresholdForFilter) + .ToArray(); + + double[] xArray = filtered.Select(pair => Math.Log(pair.x)).ToArray(); + double[] yArray = filtered.Select(pair => pair.y).ToArray(); + + return new MzSpectrum(xArray, yArray, true); + } + private static List AllAcceptibleLogMzDifferencesForAdjacentValues(int lowValue = 1, int highValue = 30) + { + var a = Enumerable.Range(lowValue, highValue - lowValue + 1).ToArray(); + var b = a.Select(i => (double)i).ToArray(); + var k = b.Select(i => Math.Log(i)).ToArray(); + + List acceptibleLogMzDifferences = new List(); + acceptibleLogMzDifferences.Add(k[0]); + for (int i = 1; i < k.Length; i++) + { + acceptibleLogMzDifferences.Add(k[i] - k[i - 1] - Math.Log(1.00007898996332)); + } + return acceptibleLogMzDifferences; + } + + // Finds all groups in logTransformedXArray where the differences between consecutive elements + // (from high to low) match (within a tolerance) a subsequence of acceptibleLogMzDifferences. + // Returns a list of (X[], Y[], ChargeState[]) for each group found. + private static List<(double[] X, double[] Y, int[] ChargeState)> FindMatchingGroups( + double[] logTransformedXArray, + double[] yArray) + { + var results = new List<(double[], double[], int[])>(); + int logMzArrayLength = logTransformedXArray.Length; + + // Sort peaks by descending m/z (i.e., descending log(m/z)) + var sorted = logTransformedXArray + .Select((val, idx) => (val, idx)) + .OrderByDescending(x => x.val) + .ToArray(); + + var allExperimentalSortedLogMz = sorted.Select(x => x.val).ToArray(); + var sortedY = sorted.Select(x => yArray[x.idx]).ToArray(); + + // Iterate through each peak as a potential group start + for (int indexOfFirstPeakInPotentialSeries = 0; indexOfFirstPeakInPotentialSeries < logMzArrayLength - 1; indexOfFirstPeakInPotentialSeries++) + { + int minChargeState = 1; + int maxChargeState = 30; + for (int lowChargeState = minChargeState; lowChargeState < maxChargeState; lowChargeState++) + { + var allPotentialTargetMzsAndCharges = GetTargetLogMzsAndCharges(allExperimentalSortedLogMz[indexOfFirstPeakInPotentialSeries], lowChargeState, maxChargeState); + var indiciesOfFoundPotentialTargetMzs = FindMatchingSearchForIndices(allExperimentalSortedLogMz, allPotentialTargetMzsAndCharges.targetLogMzs, LogMzDependentTolerance(allExperimentalSortedLogMz[indexOfFirstPeakInPotentialSeries])); + if(indiciesOfFoundPotentialTargetMzs.Any() && indiciesOfFoundPotentialTargetMzs.Length > 1) + { + var longestSeriesOfConsecutiveChargesWithMinimumGap = LongestSubarrayWithMaxGap(SelectByIndices(allPotentialTargetMzsAndCharges.charges,indiciesOfFoundPotentialTargetMzs), 1); + if (longestSeriesOfConsecutiveChargesWithMinimumGap.Length > 1) + { + var indiciesOfLongestSeriesOfConsecutiveChargesInTargetArray = FindMatchingSearchForIndices(longestSeriesOfConsecutiveChargesWithMinimumGap, allPotentialTargetMzsAndCharges.charges, 0.1); + var groupX = FindMatchingValuesFromSearchIn(allExperimentalSortedLogMz,SelectByIndices(allPotentialTargetMzsAndCharges.targetLogMzs,indiciesOfLongestSeriesOfConsecutiveChargesInTargetArray), 0.01); + int[] indices = groupX + .Select(sf => Array.FindIndex(allExperimentalSortedLogMz, si => Math.Abs(si - sf) <= 0.0001)) + .Where(idx => idx != -1) + .ToArray(); + var z = RemoveDuplicates(indices); + var groupY = SelectByIndices(sortedY,z); + var charges = longestSeriesOfConsecutiveChargesWithMinimumGap; + results.Add((groupX, groupY, charges)); + + } + } + } + } + return results; + } + public static int[] RemoveDuplicates(int[] input) + { + return input.Distinct().ToArray(); + } + public static T[] SelectByIndices(T[] source, int[] indices) + { + T[] result = new T[indices.Length]; + for (int i = 0; i < indices.Length; i++) + { + result[i] = source[indices[i]]; + } + return result; + } + public static int[] LongestSubarrayWithMaxGap(int[] input, int maxDifference) + { + if (input == null || input.Length == 0) + return new int[0]; + + List current = new List { input[0] }; + List best = new List(current); + + for (int i = 1; i < input.Length; i++) + { + if (Math.Abs(input[i] - input[i - 1]) <= maxDifference) + { + current.Add(input[i]); + } + else + { + if (current.Count > best.Count) + best = new List(current); + current = new List { input[i] }; + } + } + + if (current.Count > best.Count) + best = current; + + return best.ToArray(); + } + public static double[] FindMatchingValuesFromSearchIn(double[] searchIn, double[] searchFor, double tolerance) + { + var matchedValues = new List(); + + for (int i = 0; i < searchFor.Length; i++) + { + double searchForValue = searchFor[i]; + double closestValue = double.NaN; + double smallestDiff = double.MaxValue; + + for (int j = 0; j < searchIn.Length; j++) + { + double diff = Math.Abs(searchIn[j] - searchForValue); + if (diff <= tolerance && diff < smallestDiff) + { + smallestDiff = diff; + closestValue = searchIn[j]; + } + } + + if (!double.IsNaN(closestValue)) + { + matchedValues.Add(closestValue); + } + } + + return matchedValues.ToArray(); + } + // Finds indices in searchIn that match values in searchFor within a specified tolerance. + // Returns an array of indices corresponding to searchFor values that were found in searchIn. + public static int[] FindMatchingSearchForIndices(T[] searchIn, T[] searchFor, double tolerance) where T : IConvertible + { + var matchedIndices = new List(); + + for (int i = 0; i < searchFor.Length; i++) + { + int closestIndex = -1; + double smallestDiff = double.MaxValue; + double searchForValue = Convert.ToDouble(searchFor[i]); + for (int j = 0; j < searchIn.Length; j++) + { + double searchInValue = Convert.ToDouble(searchIn[j]); + double diff = Math.Abs(searchInValue - searchForValue); + if (diff <= tolerance && diff < smallestDiff) + { + smallestDiff = diff; + closestIndex = i; // store index from searchFor + } + } + if (closestIndex != -1) + { + matchedIndices.Add(closestIndex); + } + } + + return matchedIndices.ToArray(); + } + public static (double[] targetLogMzs, int[] charges) GetTargetLogMzsAndCharges(double firstMz, int lowestCharge = 1, int highestCharge = 30) + { + double[] mzs = new double[highestCharge - lowestCharge + 1]; + int[] charges = Enumerable.Range(lowestCharge, highestCharge - lowestCharge + 1).ToArray(); + var logDiffs = AllAcceptibleLogMzDifferencesForAdjacentValues(lowestCharge, highestCharge); + + double previousMz = firstMz; + mzs[0] = firstMz; + for (int i = 1; i < mzs.Length; i++) + { + mzs[i] = previousMz - logDiffs[i]; + previousMz -= logDiffs[i]; + } + return (mzs, charges); + } + + // Removes any group from 'groups' where the double[] X is a subset of any other double[] X + private static List<(double[] X, double[] Y, int[] charges)> RemoveSubsetGroups(List<(double[] X, double[] Y, int[] charges)> groups) + { + // Sort groups by length of X (ascending) + var sortedGroups = groups + .Select((g, idx) => (g, idx)) + .OrderBy(x => x.g.X.Length) + .ToList(); + + var toRemove = new HashSet(); + int groupCount = sortedGroups.Count; + + for (int i = 0; i < groupCount; i++) + { + var (group, idx) = sortedGroups[i]; + var xArray = group.X; + + for (int j = i + 1; j < groupCount; j++) + { + var (otherGroup, otherIdx) = sortedGroups[j]; + var otherX = otherGroup.X; + + // Check if every value in xArray has a match in otherX within tolerance + bool isSubset = xArray.All(x => + otherX.Any(ox => Math.Abs(ox - x) <= LogMzDependentTolerance(x)) + ); + + if (isSubset && xArray.Length < otherX.Length) + { + toRemove.Add(idx); + break; + } + } + } + + // Return groups not marked for removal, preserving original order + return groups + .Where((g, idx) => !toRemove.Contains(idx)) + .ToList(); + } + // Creates new groups from filteredGroups where each value in double[] X is transformed by the inverse natural log (Math.Exp) + private static List<(double[] X, double[] Y, int[] chargeStates)> TransformGroupsToExpX(List<(double[] X, double[] Y, int[] charges)> filteredGroups) + { + return filteredGroups + .Select(g => (X: g.X.Select(Math.Exp).ToArray(), Y: g.Y, g.charges)) + .ToList(); + } + + // Filters mass/intensity groups into likely correct and likely incorrect groups based on neutral mass agreement. + // A group is likely correct if most neutralMass values are within a small ppm tolerance of each other. + // A group is likely incorrect if most neutralMass values differ by more than a larger ppm tolerance. + public static void FilterMassIntensityGroupsByPpmTolerance( + IEnumerable<(double[] neutralMass, double[] intensity)> massIntensityGroups, + out List<(double[] neutralMass, double[] intensity)> likelyCorrect, + out List<(double[] neutralMass, double[] intensity)> likelyIncorrect, + double correctPpmTolerance = 80, + double incorrectPpmTolerance = 85, + double correctFraction = 0.7) + { + // Initialize output lists + likelyCorrect = new List<(double[] neutralMass, double[] intensity)>(); + likelyIncorrect = new List<(double[] neutralMass, double[] intensity)>(); + + // Process each group + foreach (var group in massIntensityGroups) + { + var masses = group.neutralMass; + if (masses.Length < 2) + { + // Not enough data to judge, treat as correct by default + likelyCorrect.Add(group); + continue; + } + + int closeCount = 0; + int farCount = 0; + int totalPairs = 0; + + // Compare all pairs of neutralMass values in the group + for (int i = 0; i < masses.Length; i++) + { + for (int j = i + 1; j < masses.Length; j++) + { + // Calculate the ppm difference between the two masses + double ppm = Math.Abs(masses[i] - masses[j]) / ((masses[i] + masses[j]) / 2.0) * 1e6; + if (ppm <= correctPpmTolerance) + closeCount++; + if (ppm > incorrectPpmTolerance) + farCount++; + totalPairs++; + } + } + + // If most pairs are close, consider the group likely correct + if (totalPairs == 0 || (closeCount >= correctFraction * totalPairs && farCount < (1 - correctFraction) * totalPairs)) + likelyCorrect.Add(group); + // If most pairs are far apart, consider the group likely incorrect + else if (farCount > (1 - correctFraction) * totalPairs) + likelyIncorrect.Add(group); + // Otherwise, treat as incorrect (ambiguous case) + else + likelyIncorrect.Add(group); + } + } + // For each group, finds the most common neutral mass (mode) within a specified ppm tolerance + // and sums the intensities of the peaks that belong to this mode cluster. + // Returns a list of (mostCommonNeutralMass, summedIntensity) for all groups. + public static List<(double mostCommonNeutralMass, double summedIntensity)> GetMostCommonNeutralMassAndSummedIntensity( + IEnumerable<(double[] neutralMass, double[] intensity)> likelyCorrectGroups, + double ppmTolerance = 2) + { + var results = new List<(double mostCommonNeutralMass, double summedIntensity)>(); + + // Process each group individually + foreach (var group in likelyCorrectGroups) + { + var masses = group.neutralMass; + var intensities = group.intensity; + + // Cluster neutral masses: each cluster contains indices of masses within ppmTolerance + var clusters = new List>(); + + for (int i = 0; i < masses.Length; i++) + { + bool added = false; + // Try to add the mass to an existing cluster + for (int c = 0; c < clusters.Count; c++) + { + double refMass = masses[clusters[c][0]]; + double ppm = Math.Abs(masses[i] - refMass) / refMass * 1e6; + if (ppm <= ppmTolerance) + { + clusters[c].Add(i); + added = true; + break; + } + } + // If not close to any cluster, start a new cluster + if (!added) + { + clusters.Add(new List { i }); + } + } + + // Find the largest cluster (the mode) + var modeCluster = clusters.OrderByDescending(cl => cl.Count).First(); + // Calculate the average mass of the mode cluster as the representative value + double mostCommonNeutralMass = modeCluster.Select(idx => masses[idx]).Average(); + // Sum the intensities of the mode cluster + double summedIntensity = modeCluster.Select(idx => intensities[idx]).Sum(); + + // Add the result for this group + results.Add((mostCommonNeutralMass, summedIntensity)); + } + + return results.OrderBy(x => x.mostCommonNeutralMass).ToList(); + } + private static List<(double[] neutralMass, double[] intensity)> CreateNeutralMassIntensityGroups( + List<(double[] X, double[] Y, int[] ChargeState)> groups) + { + var result = new List<(double[] neutralMass, double[] intensity)>(); + + foreach (var group in groups) + { + int len = group.X.Length; + var neutralMass = new double[len]; + for (int i = 0; i < len; i++) + { + neutralMass[i] = group.X[i].ToMass(group.ChargeState[i]); + } + result.Add((neutralMass, group.Y)); + } + + return result; + } + private static double LogMzDependentTolerance(double logMz, double tolerance = 5000) + { + var m = Math.Exp(logMz); + var mPlus = m + m * tolerance / 1000000.0; + var lmPlus = Math.Log(mPlus); + var newT = lmPlus - logMz; + //return newT; + return 0.0001; + } + } +} diff --git a/mzLib/MassSpectrometry/Deconvolution/Deconvoluter.cs b/mzLib/MassSpectrometry/Deconvolution/Deconvoluter.cs index af32b78f9..476990fea 100644 --- a/mzLib/MassSpectrometry/Deconvolution/Deconvoluter.cs +++ b/mzLib/MassSpectrometry/Deconvolution/Deconvoluter.cs @@ -1,5 +1,6 @@ using System.Collections.Generic; using Chemistry; +using MassSpectrometry.Deconvolution.Algorithms; using MzLibUtil; namespace MassSpectrometry @@ -58,6 +59,7 @@ private static DeconvolutionAlgorithm CreateAlgorithm(DeconvolutionParameters pa { DeconvolutionType.ClassicDeconvolution => new ClassicDeconvolutionAlgorithm(parameters), DeconvolutionType.ExampleNewDeconvolutionTemplate => new ExampleNewDeconvolutionAlgorithmTemplate(parameters), + DeconvolutionType.FlashDeconv2 => new FlashDeconv2(parameters), DeconvolutionType.IsoDecDeconvolution => new IsoDecAlgorithm(parameters), _ => throw new MzLibException("DeconvolutionType not yet supported") }; diff --git a/mzLib/MassSpectrometry/Deconvolution/DeconvolutionType.cs b/mzLib/MassSpectrometry/Deconvolution/DeconvolutionType.cs index 8fa9d5804..fd8f0d5d5 100644 --- a/mzLib/MassSpectrometry/Deconvolution/DeconvolutionType.cs +++ b/mzLib/MassSpectrometry/Deconvolution/DeconvolutionType.cs @@ -4,6 +4,7 @@ public enum DeconvolutionType { ClassicDeconvolution, ExampleNewDeconvolutionTemplate, + FlashDeconv2, IsoDecDeconvolution, } } diff --git a/mzLib/MassSpectrometry/Deconvolution/Parameters/FlashDeconvDeconvolutionParameters.cs b/mzLib/MassSpectrometry/Deconvolution/Parameters/FlashDeconvDeconvolutionParameters.cs new file mode 100644 index 000000000..8959b76e5 --- /dev/null +++ b/mzLib/MassSpectrometry/Deconvolution/Parameters/FlashDeconvDeconvolutionParameters.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Runtime.InteropServices; +using System.Text; +using System.Threading.Tasks; + +namespace MassSpectrometry.Deconvolution.Parameters +{ + internal class FlashDeconvDeconvolutionParameters : DeconvolutionParameters + { + public override DeconvolutionType DeconvolutionType { get; protected set; } = DeconvolutionType.FlashDeconv2; + + public FlashDeconvDeconvolutionParameters(int minCharge, int maxCharge, Polarity polarity = Polarity.Positive) + : base(minCharge, maxCharge, polarity) + { + + } + } +} diff --git a/mzLib/Test/DataFiles/4734.304mZchargeOneProteoformSpectrum.txt b/mzLib/Test/DataFiles/4734.304mZchargeOneProteoformSpectrum.txt new file mode 100644 index 000000000..6b6090771 --- /dev/null +++ b/mzLib/Test/DataFiles/4734.304mZchargeOneProteoformSpectrum.txt @@ -0,0 +1,271 @@ +278.55257 5.82 +278.61156 14.79 +278.67052 20.59 +278.72946 20.46 +278.7884 16.12 +278.84732 10.65 +278.90623 6.1 +278.96515 3.1 +279.02406 1.42 +279.08297 0.59 +279.14188 0.23 +279.20079 0.08 +279.25971 0.03 +279.31863 0.01 +279.37756 0 +295.89915 5.82 +295.96183 14.79 +296.02448 20.59 +296.0871 20.46 +296.14971 16.12 +296.21232 10.65 +296.27492 6.1 +296.33752 3.1 +296.40011 1.42 +296.4627 0.59 +296.52529 0.23 +296.58789 0.08 +296.65049 0.03 +296.71309 0.01 +296.7757 0 +296.8383 0 +315.55861 5.82 +315.62547 14.79 +315.69229 20.59 +315.75909 20.46 +315.82588 16.12 +315.89266 10.65 +315.95943 6.1 +316.0262 3.1 +316.09297 1.42 +316.15973 0.59 +316.2265 0.23 +316.29326 0.08 +316.36003 0.03 +316.42681 0.01 +316.4936 0 +316.56037 0 +338.02656 5.82 +338.0982 14.79 +338.16979 20.59 +338.24136 20.46 +338.31292 16.12 +338.38447 10.65 +338.45601 6.1 +338.52755 3.1 +338.59909 1.42 +338.67062 0.59 +338.74215 0.23 +338.81369 0.08 +338.88523 0.03 +338.95677 0.01 +339.02834 0 +339.09988 0 +363.95112 5.82 +364.02827 14.79 +364.10537 20.59 +364.18245 20.46 +364.25951 16.12 +364.33656 10.65 +364.41361 6.1 +364.49065 3.1 +364.56769 1.42 +364.64472 0.59 +364.72176 0.23 +364.7988 0.08 +364.87584 0.03 +364.95289 0.01 +365.02996 0 +365.107 0 +394.19644 5.82 +394.28002 14.79 +394.36354 20.59 +394.44704 20.46 +394.53053 16.12 +394.614 10.65 +394.69747 6.1 +394.78093 3.1 +394.86439 1.42 +394.94784 0.59 +395.0313 0.23 +395.11476 0.08 +395.19822 0.03 +395.28169 0.01 +395.36518 0 +395.44865 0 +429.94091 5.82 +430.03208 14.79 +430.1232 20.59 +430.21429 20.46 +430.30537 16.12 +430.39643 10.65 +430.48748 6.1 +430.57853 3.1 +430.66958 1.42 +430.76062 0.59 +430.85167 0.23 +430.94271 0.08 +431.03376 0.03 +431.12482 0.01 +431.2159 0 +431.30695 0 +472.83428 5.82 +472.93456 14.79 +473.0348 20.59 +473.135 20.46 +473.23518 16.12 +473.33535 10.65 +473.43551 6.1 +473.53566 3.1 +473.63581 1.42 +473.73596 0.59 +473.83611 0.23 +473.93625 0.08 +474.03641 0.03 +474.13657 0.01 +474.23676 0 +474.33692 0 +525.2595 5.82 +525.37093 14.79 +525.4823 20.59 +525.59363 20.46 +525.70494 16.12 +525.81624 10.65 +525.92753 6.1 +526.03881 3.1 +526.15009 1.42 +526.26137 0.59 +526.37264 0.23 +526.48392 0.08 +526.59521 0.03 +526.7065 0.01 +526.81781 0 +526.9291 0 +590.79103 5.82 +590.91639 14.79 +591.04168 20.59 +591.16693 20.46 +591.29215 16.12 +591.41736 10.65 +591.54256 6.1 +591.66776 3.1 +591.79294 1.42 +591.91813 0.59 +592.04331 0.23 +592.1685 0.08 +592.2937 0.03 +592.4189 0.01 +592.54413 0 +592.66933 0 +675.04585 5.82 +675.18912 14.79 +675.3323 20.59 +675.47545 20.46 +675.61856 16.12 +675.76166 10.65 +675.90475 6.1 +676.04782 3.1 +676.19089 1.42 +676.33396 0.59 +676.47703 0.23 +676.6201 0.08 +676.76319 0.03 +676.90627 0.01 +677.0494 0 +677.19248 0 +787.38561 5.82 +787.55276 14.79 +787.71981 20.59 +787.88681 20.46 +788.05378 16.12 +788.22073 10.65 +788.38766 6.1 +788.55458 3.1 +788.7215 1.42 +788.88841 0.59 +789.05532 0.23 +789.22224 0.08 +789.38917 0.03 +789.55611 0.01 +789.72308 0 +789.89001 0 +944.66128 5.82 +944.86185 14.79 +945.06232 20.59 +945.26272 20.46 +945.46308 16.12 +945.66342 10.65 +945.86374 6.1 +946.06404 3.1 +946.26434 1.42 +946.46464 0.59 +946.66493 0.23 +946.86523 0.08 +947.06555 0.03 +947.26587 0.01 +947.46624 0 +947.66656 0 +1180.57478 5.82 +1180.8255 14.79 +1181.07607 20.59 +1181.32658 20.46 +1181.57703 16.12 +1181.82745 10.65 +1182.07785 6.1 +1182.32823 3.1 +1182.57861 1.42 +1182.82898 0.59 +1183.07935 0.23 +1183.32972 0.08 +1183.58012 0.03 +1183.83052 0.01 +1184.08099 0 +1184.33138 0 +1573.76394 5.82 +1574.09824 14.79 +1574.43234 20.59 +1574.76634 20.46 +1575.10028 16.12 +1575.43418 10.65 +1575.76804 6.1 +1576.10189 3.1 +1576.43572 1.42 +1576.76955 0.59 +1577.10337 0.23 +1577.4372 0.08 +1577.77106 0.03 +1578.10493 0.01 +1578.43889 0 +1578.77275 0 +2360.14228 5.82 +2360.64371 14.79 +2361.14487 20.59 +2361.64588 20.46 +2362.14678 16.12 +2362.64763 10.65 +2363.14842 6.1 +2363.64919 3.1 +2364.14994 1.42 +2364.65068 0.59 +2365.15142 0.23 +2365.65217 0.08 +2366.15296 0.03 +2366.65376 0.01 +2367.15469 0 +2367.65549 0 +4719.27727 5.82 +4720.28015 14.79 +4721.28247 20.59 +4722.28448 20.46 +4723.28629 16.12 +4724.28798 10.65 +4725.28957 6.1 +4726.29111 3.1 +4727.29261 1.42 +4728.29409 0.59 +4729.29557 0.23 +4730.29706 0.08 +4731.29864 0.03 +4732.30025 0.01 +4733.30211 0 +4734.30371 0 diff --git a/mzLib/Test/DataFiles/artificialProteoform.txt b/mzLib/Test/DataFiles/artificialProteoform.txt new file mode 100644 index 000000000..f99de8daa --- /dev/null +++ b/mzLib/Test/DataFiles/artificialProteoform.txt @@ -0,0 +1,109 @@ +749.91939 0.05 +749.97839 0.34 +750.03738 1.27 +750.09637 3.16 +750.15536 5.99 +750.21434 9.2 +750.27332 11.92 +750.3323 13.4 +750.39128 13.33 +750.45026 11.92 +750.50923 9.7 +750.56821 7.24 +750.62718 5.01 +750.68615 3.23 +750.74512 1.95 +750.80409 1.11 +750.86306 0.6 +750.92203 0.3 +750.981 0.15 +751.03997 0.07 +751.09894 0.03 +796.7264 0.05 +796.78908 0.34 +796.85176 1.27 +796.91444 3.16 +796.97711 5.99 +797.03978 9.2 +797.10245 11.92 +797.16512 13.4 +797.22778 13.33 +797.29044 11.92 +797.3531 9.7 +797.41576 7.24 +797.47842 5.01 +797.54108 3.23 +797.60373 1.95 +797.66639 1.11 +797.72904 0.6 +797.7917 0.3 +797.85435 0.15 +797.91701 0.07 +797.97967 0.03 +798.04234 0.01 +849.77434 0.05 +849.8412 0.34 +849.90806 1.27 +849.97492 3.16 +850.04177 5.99 +850.10862 9.2 +850.17546 11.92 +850.24231 13.4 +850.30915 13.33 +850.37599 11.92 +850.44283 9.7 +850.50966 7.24 +850.5765 5.01 +850.64333 3.23 +850.71017 1.95 +850.777 1.11 +850.84383 0.6 +850.91066 0.3 +850.97749 0.15 +851.04433 0.07 +851.11117 0.03 +851.17801 0.01 +910.40056 0.05 +910.4722 0.34 +910.54383 1.27 +910.61546 3.16 +910.68709 5.99 +910.75871 9.2 +910.83033 11.92 +910.90195 13.4 +910.97357 13.33 +911.04518 11.92 +911.11679 9.7 +911.1884 7.24 +911.26001 5.01 +911.33162 3.23 +911.40323 1.95 +911.47483 1.11 +911.54644 0.6 +911.61805 0.3 +911.68965 0.15 +911.76126 0.07 +911.83287 0.03 +911.9045 0.01 +980.35389 0.05 +980.43104 0.34 +980.50818 1.27 +980.58532 3.16 +980.66246 5.99 +980.73959 9.2 +980.81672 11.92 +980.89385 13.4 +980.97097 13.33 +981.0481 11.92 +981.12522 9.7 +981.20234 7.24 +981.27946 5.01 +981.35657 3.23 +981.43369 1.95 +981.5108 1.11 +981.58791 0.6 +981.66503 0.3 +981.74214 0.15 +981.81926 0.07 +981.89638 0.03 +981.97351 0.01 diff --git a/mzLib/Test/DataFiles/complexRealProteoform.txt b/mzLib/Test/DataFiles/complexRealProteoform.txt new file mode 100644 index 000000000..0098bde7e --- /dev/null +++ b/mzLib/Test/DataFiles/complexRealProteoform.txt @@ -0,0 +1,5028 @@ +700.0407715 133351.4969 +700.0427246 238710.8351 +700.0934245 337016.4593 +700.1322021 110397.0769 +700.1453247 368412.5711 +700.1948853 286599.0275 +700.2441406 275403.4769 +700.2515259 77706.88535 +700.2947998 181413.3189 +700.3098145 62755.99685 +700.3391724 84091.66514 +700.3449097 94353.19691 +700.3949585 97760.54363 +700.446228 117706.4686 +700.495697 113640.8645 +700.5879822 57846.38394 +700.6251221 69664.63441 +700.6416626 193269.2888 +701.0296631 127284.2534 +701.1473389 64110.14591 +701.4226074 106035.1099 +701.6256104 75707.0541 +701.8223877 88052.55225 +702.0927734 136351.6901 +702.5335083 92591.48224 +702.5921936 64767.97227 +702.7032776 100791.0032 +702.9229431 61875.65908 +703.043335 57721.4843 +703.3126221 65546.95553 +703.4009399 128396.964 +703.4563599 113126.3633 +703.474762 97687.20563 +703.4933472 68579.25249 +703.5556641 122005.1463 +703.7556152 57935.54444 +704.0002441 95567.31046 +704.2859497 75954.85486 +704.2963257 68155.24561 +704.3125 62799.08499 +704.4439087 80994.91047 +704.4846802 67886.14614 +704.5411682 191923.9866 +704.581604 382882.4243 +704.6219482 1177391.261 +704.6482544 72688.59905 +704.6660767 718814.2513 +704.699585 99346.08645 +704.7066243 298189.2615 +704.711792 65479.10886 +704.748291 615804.5911 +704.7578125 82031.13972 +704.7884521 118638.8799 +704.7911987 263299.9906 +704.8121643 108995.702 +704.8261414 67225.06745 +704.8720093 198092.0439 +704.9270935 171142.118 +704.9815674 156181.9228 +704.9962158 64342.65035 +705.035614 92239.27482 +705.0922852 137540.5319 +705.2506104 76265.53215 +705.256897 154476.1605 +705.3144328 367121.6234 +705.3253784 61436.24507 +705.366272 216844.0111 +705.4203491 198409.1331 +705.4268188 58926.65863 +705.4570313 69905.68976 +705.4771423 199035.904 +705.5321655 212909.2356 +705.5465902 295285.9585 +705.5897827 349807.173 +705.6026001 97120.81103 +705.6573181 253286.0277 +705.6975505 274523.5183 +705.7116089 170652.6008 +705.7531738 131630.884 +705.7668864 308802.777 +705.8667603 115504.7984 +705.8789063 72074.55857 +705.9187622 61597.20045 +705.9344482 91909.37729 +705.9977417 61068.17863 +706.0357971 138187.2373 +706.0872803 66509.9158 +706.0997314 107381.2398 +706.147583 536951.5636 +706.1980896 109953.196 +706.2026672 176618.5825 +706.2572632 616235.2386 +706.2693481 106268.1905 +706.3070984 57114.91699 +706.3128662 178398.4338 +706.3659973 82843.68002 +706.3754578 107763.0588 +706.424703 522012.5658 +706.4830322 158074.2043 +706.5326538 106028.5953 +706.59021 170780.1924 +706.6259155 85758.56657 +706.7584432 226827.7381 +706.8694458 71287.78274 +706.9260457 174121.0393 +706.9572144 157386.7173 +706.9718018 214888.7875 +706.9812012 71644.83731 +707.0324402 96974.59818 +707.0899048 99192.49095 +707.0917969 72146.89031 +707.1448771 296669.1662 +707.2020874 372243.5715 +707.3690796 128695.4302 +707.3885193 61630.95671 +707.4252625 60454.02655 +707.4852295 106406.2039 +707.5380249 587736.5984 +707.5890503 90481.37061 +707.5913696 489412.6874 +707.6467133 551787.6728 +707.7043213 396757.7679 +707.7569784 903442.5563 +707.8138224 852762.5556 +707.8670044 348257.3818 +707.8712158 104184.6813 +707.9257813 520841.9548 +707.9804688 107183.7468 +707.98172 309324.7954 +708.0369873 226917.044 +708.0882568 324469.0532 +708.1464844 192658.0212 +708.3691406 1189507.757 +708.4251709 3317036.668 +708.4801636 6337555.529 +708.480896 1039322.421 +708.5363159 8159850.785 +708.5917969 12692586.09 +708.6472778 14536540.68 +708.7034302 15730950.63 +708.7296143 62108.05291 +708.7588501 15884236.38 +708.81427 13812160.99 +708.8701019 9360674.025 +708.9257406 7442134.14 +708.9813843 5881308.246 +709.0366211 4673119.447 +709.0931396 2767758.193 +709.1491089 1036881.289 +709.2043457 976645.2806 +709.2585449 206151.8655 +709.3152466 86946.53317 +709.3689779 599344.8299 +709.3708496 228554.9443 +709.4238281 824805.6273 +709.4804688 2027668.981 +709.4812927 328427.6451 +709.5354004 1873975.676 +709.5915527 3041267.986 +709.6158447 59849.6346 +709.647583 1601889.299 +709.7034912 1902873.789 +709.7584839 1510790.87 +709.8133545 1260626.733 +709.8696289 769335.9101 +709.9255371 702723.2039 +709.9820964 277963.7971 +710.0366211 193193.6527 +710.2590332 129943.6051 +710.3684082 130268.36 +710.4869385 121858.4268 +710.6478882 75852.16651 +710.7051392 173135.4798 +710.7553101 79938.94302 +710.9242859 113264.3261 +710.9776306 82683.04807 +711.0308838 68897.94893 +711.0941162 108339.1236 +711.2733154 163557.6259 +711.4242859 125401.2112 +711.4753723 107752.1863 +711.5317688 125581.0645 +711.6452026 169412.6206 +711.9767863 175451.2301 +712.0941772 69505.72705 +712.1731567 92181.14336 +712.2385864 90937.44925 +712.3175354 124655.9722 +712.385437 129296.1459 +712.4447632 63791.14515 +712.4575806 95112.50078 +712.5038147 69475.99339 +712.5348816 104644.9829 +712.6786499 89717.54187 +712.7522583 124302.0366 +712.9245402 287774.909 +712.9822388 152358.1968 +713.1470744 132761.8844 +713.1771545 95067.47365 +713.2056478 154304.895 +713.3166809 120695.2705 +713.3700562 89208.01625 +713.3748169 73055.77567 +713.4563599 174382.8906 +713.5639648 93767.84104 +713.6838989 61511.29479 +713.7640381 61037.01507 +713.8127747 59777.57457 +713.9279582 236313.8975 +713.9847616 208023.4259 +714.0405273 69014.99591 +714.0414429 285363.2742 +714.0945892 412655.4095 +714.1525472 802633.0595 +714.2073364 468166.4563 +714.2628174 332841.6295 +714.3181152 524995.46 +714.3752747 169644.8225 +714.434845 74051.56798 +714.6185913 69710.24066 +714.6522827 81831.5887 +714.7255859 57441.43014 +714.9279785 124154.0746 +714.9440308 67818.86646 +714.984314 78980.42504 +715.1535645 67563.78555 +715.2071533 145021.9328 +715.4847107 62235.41099 +715.5388184 89673.42921 +715.5410767 78877.85289 +715.5578613 86693.06063 +715.6529236 165642.2011 +715.6904907 107184.1693 +715.7055969 56646.68934 +715.8169556 92034.31695 +715.8251953 99576.573 +715.9463501 62232.06967 +716.0411987 108530.4986 +716.2767944 228094.7536 +716.3167725 118787.5082 +716.5979919 104655.9063 +717.0406494 98213.89507 +717.1775513 112800.0662 +717.1854858 85573.35471 +717.2199402 82123.33006 +717.2530212 63226.23009 +717.4060059 119418.3586 +717.7888794 130629.9357 +718.2194214 98527.80178 +718.2745361 76013.7028 +718.3293762 132604.7031 +718.4425049 57328.25268 +718.4576416 155250.6596 +718.4798584 122118.3181 +718.9365845 82805.46148 +718.9697266 68532.07384 +718.9863281 69535.76757 +719.5097046 128934.4779 +719.6808472 145870.0848 +719.793457 92587.93291 +719.8482056 74271.71639 +720.1800537 67245.48866 +720.75354 80062.88489 +720.8174438 114317.8587 +720.9237976 58766.41458 +721.3552856 65019.61459 +721.3821716 75804.7503 +721.5109253 83168.85703 +721.6278992 77439.32688 +721.7217712 66607.10109 +721.8877258 199223.7157 +721.9443563 426742.4133 +722.0555115 164474.3988 +722.111084 85663.0298 +722.16922 108662.4437 +722.6871948 232125.0971 +722.7075806 75178.13864 +722.9085693 86334.42016 +723.0558472 98194.15621 +723.3187561 58804.12257 +723.4493408 129713.0923 +723.6331482 60619.91038 +723.6548462 71777.89168 +723.7085571 157507.3687 +723.7860718 115223.4066 +723.991394 107606.3657 +724.0722046 96654.39338 +724.3743591 57961.6626 +724.4585571 72470.98901 +724.7959595 100049.9493 +724.90625 124845.9555 +724.9430542 63672.47621 +725.000061 65967.62731 +725.0187073 259037.6203 +725.1287537 135827.5395 +725.2391764 294060.4795 +725.3458049 151716.2797 +725.4057617 71410.23821 +725.4294739 253156.5904 +725.5148315 167865.9848 +725.5510254 79039.23442 +725.5953369 57054.64086 +725.629364 92059.4709 +725.6868286 59326.84487 +725.7508545 87084.4178 +725.8465576 80058.6446 +725.9988403 57829.74252 +726.0269165 64585.57348 +726.1670125 203274.059 +726.2561035 68826.71975 +726.4407349 94616.44094 +726.4577942 89946.41798 +726.571228 119095.9077 +726.5934448 158655.3732 +726.6651001 78116.23706 +726.6835531 286292.9935 +726.7026978 66814.64039 +726.7960205 616575.7112 +726.9069621 228501.6617 +726.9248047 133125.8479 +727.0184326 426988.138 +727.1295776 156832.0664 +727.1343994 93610.08828 +727.3320923 76259.29459 +727.4674683 82044.4968 +727.9039917 72896.31581 +728.0031128 80624.71802 +728.09198 110326.0481 +728.2687988 94949.06375 +728.3225861 192502.1402 +728.4624023 79995.44225 +728.4806519 59780.37577 +728.9051819 56949.2216 +728.9527893 59124.43279 +729.0065104 224038.5278 +729.05896 388345.5381 +729.1074829 241783.1398 +729.1117859 363657.5927 +729.1248169 73756.47084 +729.1656494 1257857.956 +729.2167969 1245729.935 +729.2501221 119351.599 +729.2697754 1407627.378 +729.2976685 104768.7379 +729.3222351 349636.9821 +729.3752808 330253.4168 +729.3948059 59992.07885 +729.4270426 249604.0112 +729.4545695 202844.9754 +729.4790344 137020.4412 +729.4946899 68031.45014 +729.5320231 255382.6667 +729.5536092 153624.2028 +729.6054688 74516.20682 +729.7559814 72467.75726 +729.8261719 84512.1181 +730.3032227 94728.3149 +730.3248291 277410.3282 +730.4607544 75277.52297 +730.553894 126589.4154 +730.5980835 82392.94346 +730.7221985 167047.9792 +730.7550964 78236.84313 +730.8257751 94510.27703 +730.8859253 417141.1907 +730.9071045 71706.35041 +730.9703674 148260.7399 +730.9716797 381360.9464 +731.0074158 136724.5788 +731.0557861 1627006.159 +731.0964559 132083.0478 +731.1397095 1879635.003 +731.2050476 174038.7654 +731.2221985 956289.4702 +731.2637939 170581.0123 +731.3058268 419218.2047 +731.3233643 399527.3699 +731.3857218 467387.8893 +731.4395752 158710.4862 +731.4434814 405449.3386 +731.5002441 837408.31 +731.5590363 818914.3557 +731.6194153 513558.7513 +731.6750793 648327.092 +731.7361145 236166.6784 +731.7562256 66130.1656 +731.7937622 78197.49393 +731.8529968 134371.5622 +731.9016724 202094.9276 +731.9144897 133471.7982 +731.9490662 76967.44101 +731.9678345 73496.62491 +731.9941101 108522.8354 +732.13797 70668.42792 +732.1529236 57796.15988 +732.2364197 131991.4329 +732.2506104 108054.7764 +732.2637939 162059.8525 +732.3048096 247240.2766 +732.3237915 414046.1403 +732.3601278 199777.5501 +732.3864136 244322.6522 +732.414917 351581.5903 +732.4425964 226614.148 +732.4664612 262485.6525 +732.4993591 133409.8336 +732.5193685 843691.9124 +732.5576477 163125.924 +732.5724945 592845.2849 +732.6229706 472715.2249 +732.6768799 729130.537 +732.6942139 227154.6469 +732.7278137 213214.8922 +732.7430725 148235.8935 +732.7822876 201983.7974 +732.8357544 93676.72164 +732.8666687 66868.36767 +732.9926758 97246.91705 +733.0372925 59185.01144 +733.0953573 252151.1613 +733.1235352 345889.3849 +733.1443075 297454.0096 +733.2486572 134555.025 +733.2639465 87901.92627 +733.3543701 115700.2919 +733.3773499 164951.3413 +733.3889771 73704.96546 +733.4345093 124536.661 +733.4449463 81133.62097 +733.4646912 61958.60262 +733.4869792 337920.3447 +733.515625 175434.2551 +733.5435791 569635.4846 +733.5568848 61959.40507 +733.5961304 218512.6199 +733.65802 286040.3148 +733.7100525 373107.8259 +733.7215881 108180.6188 +733.7666321 108139.2141 +733.8052368 73843.26241 +733.819397 90966.43371 +733.8222046 158576.6768 +733.8360901 71909.13403 +733.855957 121293.2118 +733.878418 113677.8853 +733.9399719 66065.1135 +733.9560547 64092.55693 +733.9932861 153987.6374 +734.0367126 82948.80031 +734.149231 64448.10582 +734.2518921 120212.1921 +734.3768514 192460.6304 +734.3885498 78902.51729 +734.4298706 125219.2064 +734.4881897 171093.3412 +734.5161743 129842.9207 +734.5439758 124272.9029 +734.5571493 268958.8579 +734.5701904 158312.6606 +734.5724182 68959.98612 +734.6231079 762430.0848 +734.6766357 1075556.733 +734.6944987 301522.1272 +734.7294922 1277292.036 +734.7327881 257070.8216 +734.7827759 1867409.988 +734.8362223 778412.2583 +734.8680725 82064.15392 +734.8895874 1016943.993 +734.9394531 93058.24874 +734.9414978 433939.2192 +734.9519653 83011.00369 +734.9935303 148414.3131 +735.0429688 547738.8879 +735.0830688 618987.8176 +735.0999146 72186.05677 +735.1263733 238049.2824 +735.1694946 82754.66533 +735.1730347 496679.0864 +735.2166626 912197.5001 +735.2586873 1217743.326 +735.3006592 216854.7045 +735.3044434 619330.3089 +735.3466492 1389047.265 +735.3896484 1185502.705 +735.4272766 110822.9705 +735.4320984 270207.6583 +735.4760946 356038.8171 +735.5198975 79999.50981 +735.5210571 173526.6331 +735.5643005 138617.2027 +735.6490784 70765.37711 +735.6734924 73217.0199 +735.7793579 71968.47447 +735.8259277 64684.81551 +735.9956055 80432.9096 +736.0255941 223958.4193 +736.0443726 184566.0618 +736.1025391 92880.22843 +736.2597656 138706.5461 +736.2868958 96233.85055 +736.3788147 62749.96088 +736.4429321 59162.61822 +736.4633484 68635.69583 +736.5278727 409426.5739 +736.5463562 58260.1654 +736.5639954 145595.2101 +736.5713501 423869.6824 +736.5834045 116123.4312 +736.6239929 82982.34595 +736.638916 674782.149 +736.6760254 202139.5374 +736.6940308 385381.6508 +736.7258301 445057.3035 +736.7498169 976513.9859 +736.7520142 113443.0539 +736.7830811 222496.5171 +736.8081055 749454.1885 +736.8333618 355516.8803 +736.8610026 350658.8793 +736.8860474 810961.0194 +736.9173584 669363.5199 +736.9390564 595882.7379 +736.9707642 81317.33129 +736.9724426 85089.32392 +736.9930725 634076.0882 +737.047465 543991.1604 +737.0992432 554438.5212 +737.1015625 164640.5281 +737.1534017 580790.4673 +737.2062988 196146.7104 +737.2304077 86055.70228 +737.3059998 160188.8407 +737.3876953 212587.6641 +737.5196533 136249.1156 +737.6760254 65075.25841 +737.8375244 68000.66362 +737.8826904 76873.78288 +737.9252014 111549.167 +737.9978638 186991.3718 +738.1436157 79926.29586 +738.2636719 118835.1785 +738.8841858 69994.20275 +739.0281982 170504.5471 +739.2125854 72260.18712 +739.2288818 58439.57312 +739.3117676 75905.23848 +739.6211548 85373.87426 +739.6766968 57050.99349 +739.6893311 90814.56847 +739.7977905 99569.80566 +739.9165039 98413.32737 +740.0339966 66950.09085 +740.1789551 82340.10253 +740.4465332 308302.9504 +740.4614258 96363.42232 +740.5035197 276865.8881 +740.5630086 1450696.152 +740.622876 1307973.395 +740.6815796 2291893.811 +740.7405853 1415379.531 +740.741272 614603.1969 +740.7996826 3661238.312 +740.8017578 172695.6285 +740.8581543 2876643.387 +740.9164429 1650416.159 +740.975647 1525128.602 +741.0348511 1590321.338 +741.0935059 950324.0233 +741.1222534 88181.79103 +741.3146973 58808.09155 +741.3287354 64714.19144 +741.3377686 160018.8102 +741.3580322 102587.6039 +741.3760376 57225.0945 +741.385498 71263.98288 +741.4000854 90006.92633 +741.4040527 68598.4201 +741.4541626 427464.2847 +741.5059001 420144.7214 +741.5649414 151033.267 +741.6209717 142021.7909 +741.6563721 151296.0182 +741.6832275 204649.482 +741.7069702 104866.9391 +741.7368774 59976.17588 +741.7977905 207356.5795 +741.8574219 81965.01385 +741.9620361 73363.69221 +742.043335 78032.71617 +742.0548096 58994.81919 +742.0927734 97054.01377 +742.1209717 102406.3051 +742.1517334 292080.37 +742.3294678 71756.98443 +742.352417 65458.213 +742.4587402 70490.18726 +742.6742554 71912.40973 +742.8586731 63139.01299 +743.0299072 70652.43475 +743.0946655 66178.41713 +743.2664185 76980.88282 +743.3914998 406061.4516 +743.40979 80182.27006 +743.8568726 91561.479 +743.9053345 96793.0143 +743.975708 72453.4851 +743.994812 88673.19543 +744.0355225 155338.7878 +744.0561829 138376.3532 +744.0767822 104681.7511 +744.1518555 82658.71998 +744.1731567 109009.8242 +744.2080383 71407.36433 +744.2664185 132966.9944 +744.3272705 195525.4654 +744.3925476 68397.32524 +744.4564819 88572.47495 +744.5426636 161670.3401 +744.5632324 69189.93497 +744.5821533 72325.9813 +744.6327515 118424.7129 +744.6568604 134394.5075 +744.7868042 57142.63065 +744.7999268 79148.56559 +744.8942871 93165.16318 +745.0343323 296362.6148 +745.2094116 134067.3796 +745.211792 90428.64444 +745.3305054 63745.99168 +745.3323975 139618.5641 +745.3509521 58630.43314 +745.4671021 81491.04985 +745.5618286 79888.53344 +745.6238403 129137.3324 +745.6643066 60621.72735 +745.7351074 73999.26487 +745.8012695 99586.14032 +745.858429 66312.63826 +745.909729 63599.14722 +745.9162598 193648.1533 +745.9242554 102910.8735 +745.9465027 65346.12625 +745.9754639 410716.5857 +746.036438 255149.8812 +746.0868835 118208.0395 +746.0933228 838281.6996 +746.1036377 121346.0038 +746.1130371 59286.025 +746.1513672 858844.6891 +746.2130737 225013.9511 +746.2665609 267706.6257 +746.3279419 72083.49039 +746.3938293 178440.3513 +746.4485931 458267.0477 +746.4541016 100115.7784 +746.5115967 141379.6404 +746.5691528 752505.3347 +746.6266479 162990.8542 +746.6878052 894738.7906 +746.736145 65354.2987 +746.7423096 152011.1345 +746.8035278 72852.22661 +746.8128967 141789.3566 +746.8544922 184874.1241 +746.8695068 172774.1679 +746.9182587 600883.4993 +746.9726257 292242.312 +746.9859619 247020.102 +747.0361938 411671.1368 +747.0463562 297078.4391 +747.0944519 124324.4124 +747.1069946 297180.6993 +747.1462402 76251.70477 +747.1539001 143232.4869 +747.1644592 409982.0618 +747.2145081 184859.6847 +747.2232666 278239.9256 +747.2589111 79711.27846 +747.2647705 64855.23528 +747.2840576 232750.5946 +747.3276367 158594.5636 +747.3959961 146601.0734 +747.446106 219261.1783 +747.4570923 108877.1077 +747.5101013 104759.9456 +747.5155334 109815.8213 +747.567627 643912.5467 +747.6218872 927861.6108 +747.6844482 506986.3055 +747.7375488 186833.1697 +747.7429403 405175.5264 +747.8002014 197389.2619 +747.802063 270252.1035 +747.8589478 471153.7763 +747.8617554 253801.5773 +747.9178467 579707.7684 +748.0263062 59527.76827 +748.0363159 188351.6704 +748.0958049 180772.1108 +748.1535645 84876.23005 +748.2033691 99753.82035 +748.2569885 120282.1426 +748.2702026 106499.672 +748.2814026 77190.65346 +748.3300476 60568.66533 +748.3317261 72199.46399 +748.3519287 88696.63523 +748.5093079 157667.5816 +748.5551147 83973.97428 +748.5658976 250416.3039 +748.5997314 58960.11165 +748.62323 415094.1405 +748.6865234 460048.6021 +748.7180786 81394.03816 +748.7355042 61480.70286 +748.7440186 71354.59689 +748.8024292 272870.6096 +748.8652344 291491.4498 +748.9194946 507662.3904 +748.9794312 138698.924 +749.0161133 140876.0543 +749.0374756 590358.7205 +749.0649414 381623.6457 +749.0933431 653710.1034 +749.1539917 1023997.045 +749.2127228 860915.2019 +749.270752 122095.1262 +749.2746582 1058109.105 +749.3306885 267397.7109 +749.3317871 1287141.62 +749.389801 415659.3708 +749.3909912 425108.3505 +749.409668 62359.80115 +749.447937 1686515.107 +749.4533691 216364.9026 +749.5063273 720886.9498 +749.5671997 477785.5143 +749.6262004 615949.4956 +749.6611938 132646.3516 +749.6852824 581018.0574 +749.6977539 84534.6532 +749.7408447 466415.6645 +749.7542114 127917.8051 +749.7717896 66955.39453 +749.8526001 69955.71833 +749.8617554 169036.0763 +749.9456787 57591.60487 +749.9787598 2057586.291 +750.0372314 4016265.744 +750.0969035 8362182.925 +750.1555786 16509906.46 +750.2145386 26831016.07 +750.2736816 33627374.51 +750.3323975 34553943.02 +750.3911133 34505368.97 +750.4501139 25039654.41 +750.4508667 1289131.922 +750.5090942 23410351.46 +750.5678711 16427242.87 +750.6266479 11832358.96 +750.6859741 7449605.612 +750.7447917 4479253.761 +750.8039551 3211763.339 +750.8465576 102074.1343 +750.8627523 979201.5341 +750.9196777 295882.924 +750.9223633 390316.1983 +750.9793701 1173736.805 +751.0373291 983613.9953 +751.0962646 1601669.421 +751.1552979 2685413.214 +751.2138672 6173897.023 +751.2730103 4649261.34 +751.3314209 4786713.657 +751.390625 723374.4254 +751.3916219 3134901.771 +751.4186401 102956.1306 +751.4499512 2840064.918 +751.4520264 232514.5637 +751.5083618 3077310.866 +751.5681763 1009741.725 +751.6265869 886713.1656 +751.6847127 274634.4036 +751.744873 679315.0574 +751.8034058 162901.5688 +751.8329773 138771.9643 +751.8763123 58425.13998 +751.9144287 61645.44646 +751.9226685 58436.76488 +751.9369507 144238.4254 +751.9769084 231419.6958 +752.0167847 565518.07 +752.0367025 371200.5373 +752.0945231 787371.5465 +752.1520386 708415.1283 +752.1693726 148216.3768 +752.1713562 103981.0831 +752.2131958 842486.1364 +752.2457886 240376.8699 +752.2714844 835370.8947 +752.3256958 288141.2104 +752.3950195 178377.4679 +752.4014893 146145.3246 +752.4213257 58725.68877 +752.5630493 77212.00522 +752.604248 75834.85529 +752.6240845 94980.02072 +752.8147583 92227.82231 +752.8292236 100646.7669 +752.8598022 116474.9277 +752.9205017 134382.2228 +753.0365601 77690.59338 +753.0752563 82560.65651 +753.2127075 68591.46045 +753.2565918 134932.1373 +753.2688599 93330.59066 +753.2911987 91214.86414 +753.3243408 207379.8767 +753.3842468 83758.30936 +753.4444173 243331.9088 +753.4514771 92573.00333 +753.5024414 367242.9844 +753.5592346 56876.43662 +753.5639648 241178.6448 +753.6199951 75282.45968 +753.6242676 95582.63162 +753.679657 122640.4757 +753.6844482 252957.617 +753.7992554 62231.50753 +753.8578491 224812.2011 +753.9805908 87970.12138 +754.0755005 59761.74058 +754.1594238 118226.6879 +754.1912231 77160.71843 +754.3397827 74912.24299 +754.5068054 94959.12939 +754.6253357 64217.01998 +754.7072144 66456.32587 +754.7880859 77661.80187 +754.8067627 106406.4034 +754.8604126 687694.5756 +754.8924255 66825.66443 +754.9190063 354046.454 +754.9779663 159660.3378 +754.9817505 68885.10639 +755.0376587 323666.1586 +755.0966593 357623.5781 +755.1582031 241682.3142 +755.2183838 86334.7631 +755.2773743 111301.3822 +755.2859802 77469.68059 +755.3322144 70499.18784 +755.3634644 69791.65708 +755.4537964 100159.8193 +755.5460815 76891.93701 +755.6397095 69707.96502 +755.7245178 64997.96264 +755.7436523 68861.47386 +755.7921143 180829.4536 +755.8026123 98496.58426 +755.8647217 409135.1867 +755.9053345 97830.87225 +755.9199524 95107.64336 +755.9241943 160811.0413 +755.9824829 1621977.949 +756.0429688 2175708.319 +756.0987854 205489.36 +756.1022339 697362.2025 +756.1590373 537133.6583 +756.1612549 378586.6511 +756.1851807 92296.98605 +756.2198079 1520691.727 +756.236084 75859.0658 +756.2758789 967937.1638 +756.3377686 533678.8658 +756.3963928 433366.0658 +756.4545898 686228.2694 +756.7245483 158931.4746 +756.8066711 120786.7569 +756.8668213 193495.9506 +756.9231567 85899.80352 +756.985494 320625.5317 +757.0419108 334069.3858 +757.0715332 76756.59728 +757.1027832 166448.9101 +757.1608276 111125.0772 +757.2089844 78669.81773 +757.4058838 70388.45084 +757.4449158 65056.45949 +757.4711914 63580.23641 +757.4905396 65518.40528 +757.5616455 66148.77939 +757.6894531 124444.2023 +757.7479248 573217.0901 +757.7938232 80614.24364 +757.8970337 94333.23166 +758.0427246 403376.6728 +758.085968 77645.21964 +758.1907349 99595.00824 +758.2091064 87716.99197 +758.2521973 98302.15765 +758.2650146 76174.52464 +758.4901123 68251.67399 +758.5872192 88068.293 +758.6304932 131583.1204 +758.6663208 69655.16426 +758.7258911 59308.21413 +758.9277039 67456.23067 +759.092926 69023.86548 +759.1658325 77644.72119 +759.3811035 71103.30634 +759.4716187 95109.92481 +759.7131042 66701.57124 +759.7705688 143819.6113 +759.7724915 71449.79879 +759.8101807 87820.16381 +759.8231201 112470.7466 +759.9764404 82870.438 +760.2625732 106517.7837 +760.3525391 83252.354 +760.3889364 222924.0179 +760.4057312 181286.4577 +760.4696045 709479.9922 +760.539978 62599.7619 +760.6202393 110408.9743 +760.6235352 118684.0593 +760.6461487 85768.09265 +760.7486572 70813.98061 +760.8621216 86602.59697 +760.9370422 59464.04982 +761.0010986 144796.3833 +761.1195984 67509.08865 +761.1372986 65026.33918 +761.168335 104725.7768 +761.1902161 236158.5836 +761.2618713 262170.5882 +761.2776794 69473.06818 +761.3328247 183004.4685 +761.3539429 73096.3833 +761.4039307 843310.1108 +761.437561 96680.37612 +761.5444336 156643.3326 +761.6237183 119390.1062 +761.675354 98030.34076 +761.7363281 94628.25581 +761.8608398 75472.59738 +761.9254456 109067.759 +762.203064 101077.1625 +762.276001 135121.5541 +762.316864 124562.8476 +762.340332 80361.22313 +762.3810425 80823.95451 +762.4062195 169853.0763 +762.474762 162980.8412 +762.9509277 85158.88106 +763.1581421 76862.92222 +763.3474731 70659.0235 +763.3900757 72381.95505 +763.5159607 105097.0531 +763.6968079 60595.15659 +763.7362467 268609.4042 +763.8397827 125800.1222 +764.2338867 492360.9603 +764.2789917 58347.66517 +764.3396606 59329.90293 +764.3960266 169655.4696 +764.411438 331796.5197 +764.4699707 179702.2912 +764.5280965 157375.872 +764.6439514 118335.1009 +764.8236389 71061.66594 +764.8394775 62858.90316 +765.0930176 100739.93 +765.133606 111903.8385 +765.2199097 69573.50553 +765.5101318 61782.89944 +765.5550232 89231.11628 +765.6255493 73819.84344 +765.672821 108951.5141 +765.9032288 96573.15165 +766.0457764 96805.22558 +766.0857849 101096.321 +766.1030273 77369.22993 +766.1339722 68249.75259 +766.1511841 103784.373 +766.230835 62458.76777 +766.3601074 94999.44698 +766.4046021 108966.474 +766.4362183 119101.8306 +766.4936218 116181.3847 +766.5875244 73043.83577 +766.7507324 86814.16177 +766.8570251 162190.8923 +766.897583 89300.58501 +766.9536133 187045.22 +767.1064453 104193.4984 +767.1644287 104176.4609 +767.2189331 75498.10152 +767.2803345 88684.71141 +767.335968 117461.7831 +767.4418945 78808.08153 +767.4550781 117781.1162 +767.6551514 110402.3894 +767.6779785 94651.07313 +767.7244873 113415.628 +767.7719727 64899.70017 +767.7823486 102359.3681 +767.9539185 142228.2969 +768.0040894 74760.63514 +768.0466309 384405.3393 +768.0870972 61558.66455 +768.1634521 163056.6004 +768.2659607 67614.63775 +768.4072266 475995.0507 +768.4111938 73198.13358 +768.4266663 69600.31494 +768.4507446 140360.347 +768.4539795 80059.43126 +768.4967651 1581480.14 +768.5411377 1049797.63 +768.5892944 2519079.28 +768.6348267 1500933.773 +768.6798096 1892534.434 +768.6820068 161311.654 +768.7253825 1712776.213 +768.7518616 59088.49747 +768.7690226 1411051.816 +768.772644 545137.9505 +768.8156128 1425143.63 +768.8619995 1788889.962 +768.9063568 596259.7905 +768.9533691 280839.565 +768.9987793 443019.0086 +769.0032959 74985.82324 +769.1397705 75745.13835 +769.2225037 59979.6759 +769.3193054 111029.8838 +769.3955078 96097.73286 +769.4025269 86178.61856 +769.4499512 363718.7202 +769.4518127 184280.3091 +769.4832458 56867.32588 +769.5070394 446494.4049 +769.5325928 82301.79347 +769.5431213 67282.0735 +769.560791 342316.7332 +769.5647786 336062.0712 +769.5868327 303086.2452 +769.6174316 1356339.503 +769.6505127 80447.10902 +769.671814 2126344.168 +769.7285767 1821010.817 +769.7844727 639789.6683 +769.8398895 449464.0672 +769.8950195 571360.7863 +769.9506836 202778.5353 +769.9524231 244857.6011 +770.0068054 122668.3328 +770.0429382 130047.3763 +770.09611 186721.6324 +770.4533691 534994.2724 +770.6262817 68111.50512 +770.6693726 105655.0727 +770.7163086 122255.9479 +770.7730103 94778.16106 +770.8245239 87277.05224 +770.9200439 70604.20276 +771.0953064 106484.0819 +771.1598511 74955.0706 +771.2838745 94971.06134 +771.3346965 336968.4868 +771.3786621 122240.2001 +771.6368408 104343.8893 +771.7453613 62756.03762 +771.8977661 90465.3658 +771.9175415 74585.23859 +771.9720459 85524.79265 +772.1487427 117050.1411 +772.3119507 108190.764 +772.3379517 100035.5407 +772.4851074 100058.6596 +772.5570679 63949.40883 +772.6257629 109731.5921 +772.6513672 94902.92371 +772.6963501 119015.6111 +772.7163086 58080.9205 +772.7465515 61410.44823 +772.7677612 65796.53756 +772.8249512 68986.45979 +772.8796387 89082.8525 +772.9068909 104894.2863 +772.9890747 202086.7014 +773.0392456 57268.23655 +773.0469971 400223.3913 +773.0987854 123952.5074 +773.1037292 526796.8049 +773.1323853 92572.65448 +773.1587524 533854.5306 +773.2137451 702919.8808 +773.2697754 117402.3378 +773.2721354 429735.1104 +773.325175 530994.4198 +773.3443604 66476.42035 +773.3788045 166639.1495 +773.3829956 261322.4128 +773.3995972 74732.83349 +773.4197998 84297.17111 +773.467041 86863.41885 +773.4931641 198018.7696 +773.5279948 252988.5805 +773.5479736 118066.0065 +773.5960083 104059.9462 +773.6542664 151426.3295 +773.6759033 109661.1109 +773.7600708 102678.2344 +773.7798462 76235.02948 +773.8137512 178974.9485 +773.8701782 65784.41992 +773.9287415 134735.0428 +773.9837341 61005.07105 +774.0379028 370508.8115 +774.0464478 79891.84964 +774.0935059 173359.6563 +774.1013184 72962.88616 +774.1557617 187731.281 +774.1759033 93822.63349 +774.2125549 166339.7534 +774.2637634 150536.6384 +774.4853821 175113.0096 +774.5126343 118083.8534 +774.5565389 405202.2509 +774.5852966 70877.99398 +774.6271362 139932.8001 +774.6578979 144340.0116 +774.7376709 74696.35972 +774.7695923 98889.29958 +774.7861328 61721.83761 +774.8612061 93194.75924 +774.9130249 116763.8091 +775.0957947 67792.63225 +775.1282654 124791.0125 +775.1751099 58544.83846 +775.2143555 136982.5918 +775.2685852 60380.52403 +775.2844238 61769.4065 +775.3240967 917549.9612 +775.3449707 65236.32644 +775.3800049 454247.0827 +775.3815613 322491.3338 +775.4362793 1977693.413 +775.4805908 181955.1144 +775.4902344 217430.4634 +775.491394 1041742.049 +775.5476196 1299670.399 +775.5737305 60002.95335 +775.6025391 1271202.119 +775.6586914 2242103.297 +775.7143433 837067.2397 +775.7502441 109215.8164 +775.7694092 488231.4455 +775.7723389 134983.6753 +775.8060913 131431.2703 +775.8174438 83183.26292 +775.8273315 403836.343 +775.8519287 84203.70048 +775.8817749 494971.8895 +776.0349121 101103.4393 +776.0472412 71305.14832 +776.1056519 86961.77835 +776.1133423 70865.23794 +776.1566772 185933.6637 +776.2198486 142842.1462 +776.346283 65291.36085 +776.3999634 115217.8425 +776.4566854 232195.0536 +776.4947205 100708.2616 +776.5165405 807899.8737 +776.5464783 114968.8894 +776.5747681 792195.5858 +776.5981445 77294.59518 +776.6342773 2361918.143 +776.693868 1730423.422 +776.7151184 126447.0626 +776.7522583 1611776.328 +776.8094889 832327.5357 +776.812439 120331.2226 +776.8706055 253505.2253 +776.8712769 952969.2275 +776.9060822 779168.5471 +776.929484 528860.4109 +776.9337158 107482.645 +776.9683634 1115308.891 +776.987854 1208507.379 +777.0305176 219521.7214 +777.0309448 1023320.649 +777.0480042 179002.8454 +777.09375 1261159.901 +777.105957 228858.4837 +777.15625 1740990.732 +777.2174377 1901850.091 +777.2801819 469868.3145 +777.2815857 763929.7206 +777.3435059 1862187.958 +777.4064636 613459.4658 +777.4367065 80126.96314 +777.4585266 130798.8449 +777.4697876 385546.6407 +777.489624 79927.12184 +777.5151978 68453.49614 +777.5322876 244900.0882 +777.5491333 57209.23069 +777.5717773 95230.71982 +777.5996704 511852.5174 +777.6027222 194682.4267 +777.6274719 71642.63466 +777.6334229 60740.61599 +777.6587524 536368.3869 +777.6948853 475008.1667 +777.7138367 437219.2578 +777.7488403 139653.653 +777.7537231 100975.6692 +777.7695923 261333.3948 +777.7714844 234173.1146 +777.8259481 917814.9301 +777.8827515 770131.381 +777.9042358 497520.2094 +777.9390259 596422.0236 +777.9451294 63234.75102 +777.9660645 301266.4493 +777.9934082 583254.7685 +778.0295715 463663.5809 +778.0483398 558498.6638 +778.0899048 164562.2869 +778.0924377 210551.512 +778.1077271 103324.8234 +778.1567383 719405.2034 +778.1798096 66705.69838 +778.1824951 77113.07226 +778.2175598 444483.9077 +778.2807007 468032.1695 +778.281311 203795.3445 +778.3426717 648318.2182 +778.4046021 683074.8235 +778.4688721 82223.1157 +778.5483398 101060.7174 +778.5671387 116861.0227 +778.5934448 66367.72728 +778.6062317 130967.6136 +778.6615601 97512.42499 +778.7168579 129452.412 +778.7402344 392352.4124 +778.7671814 71032.11831 +778.7822876 57214.5336 +778.8276062 70980.08764 +778.8869934 161840.7446 +778.9435425 78860.49419 +779.0291748 72003.87647 +779.0534058 69459.24585 +779.0956726 57924.36636 +779.111969 113210.1944 +779.1564331 288530.8278 +779.2151794 102248.5709 +779.2831726 89536.31209 +779.3387451 128541.218 +779.3886108 60728.68189 +779.4051208 263475.1912 +779.4741211 104129.3565 +779.5410156 112152.8933 +779.607605 172004.1635 +779.6360474 222707.3689 +779.6576538 75669.90542 +779.6724243 869056.5441 +779.7362061 561306.2762 +779.791748 751470.6674 +779.8081665 89763.52519 +779.8521118 125124.0654 +779.8909912 59697.2558 +779.9086304 1056755.682 +779.9693604 1562642.822 +779.9897461 67561.51109 +780.02948 1116149.427 +780.0862793 427644.7791 +780.0994873 82158.81212 +780.146698 185707.9813 +780.2078654 565908.5745 +780.2658488 227938.9661 +780.3212891 65553.00914 +780.3753662 186839.3543 +780.4244995 116470.0267 +780.4412842 81062.27711 +780.5321045 97049.22246 +780.5536499 76285.3126 +780.5837097 127083.4843 +780.7385864 81206.70862 +780.7900391 81602.83204 +780.8397827 75978.20997 +780.9934998 58615.3994 +781.1481628 62690.88117 +781.1578979 156494.9889 +781.2067566 57819.14391 +781.2488403 64759.61042 +781.3451233 66974.48501 +781.3670349 56959.96516 +781.4067688 103016.864 +781.4697266 64508.1124 +782.0057373 95995.78784 +782.046936 163744.3524 +782.1536865 65297.86292 +782.1714478 156775.0036 +782.2803345 63781.73398 +782.3234253 434929.3822 +782.3830566 154112.0556 +782.5008545 123600.4074 +782.5585938 93024.32337 +782.697113 60774.5508 +782.7730713 64258.00426 +782.9685669 68168.25129 +783.026062 76232.38358 +783.0927734 59736.15097 +783.1991577 60459.11727 +783.2832031 345952.1199 +783.6584473 74879.79052 +783.6624146 92081.52026 +783.7164307 120910.4761 +783.7561035 84817.65043 +783.8239746 141007.5292 +783.8384094 214146.6206 +783.8555908 60312.69723 +783.8779297 191109.4402 +783.932312 268036.0929 +784.0377197 137484.8634 +784.0655823 91260.20747 +784.0876465 78178.41696 +784.344635 58228.07554 +784.3764648 57818.79758 +784.4074707 118224.9992 +784.4259338 62143.71563 +784.4762573 121887.5674 +784.5376282 66437.81336 +784.5455933 114107.2181 +784.5587158 71156.82471 +784.5709839 73516.0342 +784.6577759 148718.5483 +784.7164917 82000.44842 +784.7875061 65742.70163 +784.8373413 171023.9496 +784.9759521 62817.3855 +785.0116577 117795.0272 +785.0704956 148612.5849 +785.154541 81647.79315 +785.2468872 91062.86386 +785.3829956 61014.67893 +785.5969238 107909.0817 +785.6077881 72921.43291 +785.6373901 74477.14698 +785.7234497 69008.32202 +786.0053711 66324.50311 +786.053833 63492.17256 +786.2835693 68260.66631 +786.4733582 60344.24409 +786.5108643 84625.35042 +786.5973511 125006.5501 +786.6591797 292753.2477 +786.661377 220298.4768 +786.7236938 1739187.668 +786.7865397 2219433.726 +786.8484294 3447774.121 +786.9106445 4600234.657 +786.9112549 1726406.346 +786.9735107 5621480.864 +787.0365601 4179376.571 +787.0986328 4561165.788 +787.1015015 242781.3648 +787.130188 76613.50207 +787.1344401 158800.259 +787.1603394 310413.1704 +787.1618652 3704802.574 +787.2247925 2180905.418 +787.2869873 2110484.777 +787.3490194 908870.6074 +787.3741455 64804.35992 +787.4147339 275554.2348 +787.4748535 121420.0562 +787.5368347 189897.0442 +787.5977783 198633.0577 +787.7862854 149287.9636 +787.8479309 195723.611 +787.9092102 171792.2464 +787.9115601 164189.4758 +787.9744873 673295.6242 +788.0346069 286506.9584 +788.0575155 224932.2773 +788.098938 216202.5609 +788.1606445 89024.13685 +788.163147 238522.2901 +788.1756287 59423.11566 +788.2248535 58858.93364 +788.2385254 104608.7503 +788.3105469 81159.74774 +788.3471069 77114.02262 +788.4083252 162022.2483 +788.4727783 68907.89218 +788.5332642 76842.04884 +788.6234741 84259.91218 +788.7217407 100560.2496 +788.8361511 75933.48497 +788.8460388 72666.27474 +788.8526917 62842.0953 +788.9745178 99145.82357 +788.9880371 65900.05032 +789.0075684 127627.781 +789.0518799 90708.25338 +789.0990295 70699.33608 +789.1483765 76099.05994 +789.1611328 74224.37058 +789.1867065 77242.82274 +789.2229614 136708.8149 +789.285675 215057.729 +789.33255 74365.73094 +789.4718628 145377.0477 +789.5383911 89549.45701 +789.5609741 83135.28022 +789.6785278 62612.28391 +789.7002869 105576.3746 +789.7239075 96392.63642 +789.7856445 548627.4837 +789.8292236 105531.2932 +789.8479614 58314.47073 +789.9130249 68328.04367 +789.9648438 162795.2769 +790.0328369 153056.9662 +790.140625 79202.80993 +790.1625977 82371.08753 +790.2851766 164629.5135 +790.4102173 104503.3043 +790.4257507 87057.79039 +790.4671021 153331.8591 +790.4711304 98696.02407 +790.5374146 715227.7757 +790.5984904 455093.5422 +790.6560059 111740.4164 +790.6658325 89886.37829 +790.7197266 68834.49796 +790.7237549 90564.38441 +790.7414551 66009.03035 +790.7839966 82026.57128 +790.8493042 102727.6849 +790.9285278 94436.53335 +790.968811 69809.96461 +791.0289307 68650.59351 +791.0395508 191247.5647 +791.0976868 65497.16315 +791.1032715 74145.79761 +791.2262207 230733.85 +791.2607422 78541.01949 +791.4683228 179741.9725 +791.4749146 93597.27282 +791.5348511 78595.55139 +791.5426636 58293.28289 +791.5977173 57686.92194 +791.6588745 161071.3103 +791.726532 91244.39192 +791.7379761 60079.2081 +791.7874146 305509.9653 +791.8242798 62235.97643 +791.8330078 69044.10906 +791.8485107 61189.93235 +791.8560181 81824.8758 +791.9737549 151504.3819 +792.061554 57856.4038 +792.162323 121775.7101 +792.2247925 267609.5183 +792.2677917 65003.48229 +792.3140869 57074.13078 +792.3474731 155822.4126 +792.4095154 209181.2896 +792.413208 66571.82514 +792.46757 167397.0341 +792.4761353 164219.0088 +792.5326843 189710.3281 +792.5489502 80587.05753 +792.5797424 116697.1945 +792.5979004 793852.6558 +792.6038208 110100.4656 +792.6433716 59094.81979 +792.6609497 870094.682 +792.675415 71890.55758 +792.7248535 830887.5441 +792.7347412 108120.8454 +792.7481689 79765.21016 +792.7849935 583756.0084 +792.8114014 106048.7134 +792.8505859 66854.1554 +792.8508911 171148.4761 +792.9121094 81136.94114 +792.9533081 89855.24423 +792.9794006 115464.9965 +793.0382233 247465.8046 +793.1469116 85652.68311 +793.1595459 94948.94931 +793.166748 297571.949 +793.2040405 79860.70889 +793.227417 347141.3237 +793.2456055 163551.2981 +793.2891235 111948.1424 +793.2932129 99194.76862 +793.3265991 89874.70163 +793.3480225 726109.2376 +793.3552856 141758.3526 +793.4076538 79718.33746 +793.4135132 913111.5281 +793.430542 61977.62497 +793.4747314 773211.4463 +793.4870911 204435.9491 +793.5130615 111821.8971 +793.534668 447944.0059 +793.5985718 921468.5667 +793.6144104 414496.424 +793.6598206 194319.1523 +793.6647034 180496.5511 +793.6758423 529983.1314 +793.7240143 507116.2123 +793.7384033 599648.7223 +793.7869873 439500.1263 +793.8002319 571515.5646 +793.8397827 89773.44269 +793.8492737 159594.0887 +793.8631897 451111.5798 +793.9119873 596699.7469 +793.9248047 152645.7748 +793.9785156 161793.7474 +793.9860229 110816.659 +794.0401306 70799.02175 +794.0475464 248752.3958 +794.0967102 66283.52303 +794.1160278 139994.4592 +794.1300659 85572.69798 +794.1627502 378938.3535 +794.208313 64658.42404 +794.2229614 699222.225 +794.2879639 718366.5273 +794.347168 423084.9599 +794.3533325 282199.7499 +794.3845825 113608.4931 +794.4130249 972349.0403 +794.4365845 78277.38237 +794.4579468 177529.4356 +794.4752197 1203969.22 +794.513092 82299.78496 +794.5377808 883487.4554 +794.5413818 82965.84545 +794.5977173 113581.009 +794.6012573 871007.6982 +794.6159668 69632.62961 +794.6604614 148269.2996 +794.6652832 835053.7871 +794.6983643 87844.21727 +794.725769 168335.1086 +794.7896729 754479.0123 +794.9177856 77604.20278 +795.0061646 63688.1578 +795.039856 81858.92785 +795.0993652 104886.1025 +795.1026611 89032.64872 +795.1556091 142458.8813 +795.1625366 282824.153 +795.2240448 296872.9245 +795.2605591 76317.14809 +795.2850647 196252.961 +795.2929688 161917.8077 +795.3526408 310486.2602 +795.3886719 60273.75183 +795.4145508 901254.1481 +795.4282227 108361.9202 +795.4801636 589979.7008 +795.5372925 75935.13644 +795.5532837 57615.89315 +795.6027527 150657.7056 +795.6634216 77739.29709 +795.7259725 257991.3765 +795.7901001 110977.2326 +795.8488159 171102.7008 +795.8557129 249533.7766 +795.8765259 59497.77456 +795.9139404 927121.7925 +795.9702759 121321.6201 +795.9747314 877828.918 +796.0061646 79981.76088 +796.0397949 960879.9177 +796.0410767 217379.493 +796.1000163 1002284.44 +796.1021423 484150.0274 +796.1502075 81003.98447 +796.1625366 1859406.164 +796.1869507 57104.60417 +796.1965332 191746.4973 +796.2293091 1693919.907 +796.2588501 83089.16372 +796.289856 1332952.213 +796.3158569 67411.74949 +796.3295288 61402.11466 +796.3504639 241852.3202 +796.3511353 892281.1721 +796.4142761 964353.4432 +796.4368286 91766.60713 +796.4528503 63235.79511 +796.4772949 1372081.844 +796.506134 76436.476 +796.5380859 171569.84 +796.5417175 163557.3366 +796.5739136 63575.94739 +796.5973918 244948.3632 +796.6036682 235719.3313 +796.7276204 248784.8889 +796.7384644 72182.19841 +796.7906494 2205166.531 +796.8320313 298940.945 +796.8520508 5137064.792 +796.914978 14836822.83 +796.9777832 23448334.88 +797.0162354 104111.3186 +797.0402018 34330280.33 +797.1027222 46702760.15 +797.1652222 52086652.99 +797.2275391 47366796.01 +797.2902222 44726054.31 +797.2915649 2348648.242 +797.3325806 121730.2937 +797.3526611 36352782.38 +797.4157715 23305780.5 +797.4777222 18449160.85 +797.512146 265411.4785 +797.5402222 10960881.84 +797.541687 725186.3409 +797.6036987 7240553.423 +797.6472168 82553.46706 +797.6654663 3699060.45 +797.6943563 385673.8151 +797.7289632 1624032.597 +797.7889404 1764120.863 +797.7921753 141464.2342 +797.8530477 754203.2408 +797.8789368 141767.9305 +797.9139404 2708594.835 +797.9766846 3106340.717 +798.0387573 6380888.046 +798.1020142 3956894.862 +798.1645508 7374550.397 +798.2271729 6999208.159 +798.2895101 5184439.271 +798.2911377 373644.1695 +798.3520752 3912395.264 +798.4138184 3277015.494 +798.4772949 3925273.905 +798.4813843 96089.88667 +798.5287476 271810.2485 +798.5385132 1558615.059 +798.6070557 974090.4987 +798.6273804 197219.4628 +798.6659546 1228436.708 +798.713501 206062.2289 +798.7269897 820716.9438 +798.7611694 99637.08099 +798.7881317 294227.7509 +798.8535309 318625.8034 +798.885498 64849.1248 +798.9102783 59789.75961 +798.9145203 191309.9103 +798.9759033 323165.4325 +799.0404663 730140.3696 +799.0622253 193130.6268 +799.1016846 447189.1434 +799.1378174 65418.78565 +799.1598816 170645.0751 +799.1658325 92687.442 +799.2173462 166153.9996 +799.2270101 308944.1833 +799.2880249 635712.5082 +799.2930298 95258.32119 +799.3520508 883132.8272 +799.4135895 384477.1351 +799.4413452 61368.68371 +799.4772949 316950.5676 +799.5383504 530216.8084 +799.5995483 279291.705 +799.6013794 92305.14582 +799.659668 328700.1765 +799.6635742 144391.0801 +799.7128296 104213.5863 +799.7271729 102995.2806 +799.7588501 174106.5585 +799.7895813 84236.98597 +799.8468628 487364.3935 +799.8515625 120583.3638 +799.9133301 77400.74242 +799.9480286 65889.16894 +799.9837952 141223.1494 +800.0058899 67301.2395 +800.1055298 69536.1013 +800.2168884 134372.5785 +800.2247314 166446.6555 +800.279541 104960.9652 +800.2844035 483934.7053 +800.2913818 135824.8839 +800.31604 67976.63518 +800.3467611 503713.3901 +800.409729 989624.6146 +800.414917 135456.8941 +800.4703979 84040.50681 +800.4717407 844363.0477 +800.4906616 69149.42552 +800.5146484 61699.42416 +800.5350749 701539.6883 +800.5947876 630221.5105 +800.6381226 90544.15266 +800.6559448 855680.3253 +800.6635742 137960.7463 +800.7227783 790448.9312 +800.7842712 311622.734 +800.8486633 171959.0751 +800.8894653 91135.01535 +800.9151306 67609.39412 +800.9703979 103072.9888 +800.9742635 279081.257 +801.0396423 108404.0998 +801.1011047 208419.1541 +801.1395264 126308.0707 +801.1605835 62666.0338 +801.225708 73929.62836 +801.2636108 68857.099 +801.2862244 62557.59582 +801.3543091 108545.7443 +801.416748 81932.56376 +801.4743347 161652.274 +801.6382446 68213.06498 +801.6673584 976629.589 +801.7051697 80337.14669 +801.7263184 176745.465 +801.760498 64280.25397 +801.7624512 76895.68249 +801.7843628 411344.4199 +801.8083191 122770.7916 +801.8457235 196114.196 +801.8641357 83714.92125 +801.9154663 281951.5203 +801.9749349 350247.1066 +802.0381673 516226.0984 +802.0548096 56765.42037 +802.0760498 79843.03712 +802.1000061 214112.5046 +802.1021729 353621.079 +802.1368103 86775.99207 +802.1656189 535237.9033 +802.2059326 86950.36361 +802.2281901 759202.7621 +802.2906494 110274.3824 +802.2958171 428825.3808 +802.3439941 91602.89251 +802.3532715 515753.918 +802.3755493 76210.07729 +802.4187927 178800.8673 +802.4218445 275752.3068 +802.4716797 353675.4401 +802.4811401 229819.5261 +802.6070557 112379.7534 +802.6563314 269057.7758 +802.713501 84410.29101 +802.7300415 72913.35705 +802.7362671 57274.97429 +802.7631531 84922.42946 +802.8197327 123340.6272 +802.8495483 72839.28107 +802.8891602 74657.41911 +802.9001465 93719.89585 +802.9194946 167064.1706 +802.9770508 154499.8151 +802.986084 109616.7959 +802.9951782 62269.79368 +803.042627 692222.8901 +803.0613098 89328.38336 +803.0983276 85028.58844 +803.1054382 650362.4204 +803.1365967 58774.53314 +803.170166 798996.8571 +803.1710205 575663.6389 +803.2293701 85205.36212 +803.2334595 2657558.624 +803.2891846 268246.0738 +803.2958069 1088583.401 +803.3508301 151772.9617 +803.3562927 1405242.285 +803.4172974 559510.9466 +803.4223022 333908.0986 +803.4787598 191768.4059 +803.4841614 691268.0784 +803.5442505 898042.9212 +803.6074829 798558.9119 +803.6561279 82163.85634 +803.671814 156962.7614 +803.734965 229800.1868 +803.7559814 114673.505 +803.8422852 66956.90919 +803.8557434 113776.5518 +803.8861287 245612.7821 +803.9161377 67442.40309 +803.9821777 91198.97392 +804 198167.2421 +804.0115967 72727.94706 +804.0389404 60707.40088 +804.0434367 276978.2116 +804.0910645 106914.2866 +804.1037598 473370.211 +804.1722412 144204.1241 +804.2330933 615658.6433 +804.2749634 152983.711 +804.2938843 790797.8191 +804.312439 64318.72019 +804.3806763 71068.54948 +804.4169006 155680.3397 +804.425354 200031.0107 +804.5055237 128781.2947 +804.5453491 204110.3633 +804.585083 57803.91557 +804.6081848 71150.02636 +804.6596069 176821.1009 +804.6652222 140984.8483 +804.7398682 106940.9884 +804.8181152 78636.38239 +804.8267822 226627.1909 +804.859375 101822.1575 +804.8946533 84387.68434 +804.9167175 133504.0535 +804.9486287 420784.1207 +804.9788208 80367.54659 +804.9952393 1043210.462 +805.0442505 1755586.824 +805.0899658 299816.7583 +805.0912476 3319877.613 +805.1398315 2990271.784 +805.1633301 79544.87169 +805.1873779 3034153.91 +805.2352498 2868157.115 +805.2826335 2587594.806 +805.3294067 1780771.332 +805.3312378 286772.205 +805.35849 72302.07369 +805.3783773 1497823.733 +805.3969727 113459.2613 +805.4261475 2075142.565 +805.4720459 887652.4333 +805.5200806 154623.6866 +805.5234375 61473.26781 +805.5471191 133476.1791 +805.5571289 78898.06246 +805.5684001 246107.9919 +805.6172485 607551.6159 +805.6555786 64920.29704 +805.6657715 114057.622 +805.7348633 84817.01199 +805.7616882 77951.78894 +805.8043823 97411.46696 +805.8494568 68448.46189 +805.9031982 139667.4222 +805.9232178 63684.24854 +805.9484863 130871.0689 +805.9744873 63503.00209 +805.9968567 184988.174 +806.0413208 844040.8749 +806.0875854 106888.0083 +806.1054077 76134.32802 +806.1369324 90946.74773 +806.2337036 134514.9217 +806.2746735 301632.1033 +806.3296509 81487.84673 +806.3312378 92758.52786 +806.3513794 72527.65286 +806.4033813 67042.73702 +806.426178 119249.9972 +806.4974976 98078.0338 +806.5814209 57632.41889 +806.7279968 73564.65352 +806.8058472 214624.009 +806.8323975 61539.44172 +806.9546509 140142.9229 +806.9659424 65093.37489 +807.0254517 83670.36501 +807.0323792 77666.53424 +807.0974731 435900.2945 +807.1677246 114824.5411 +807.1971436 122421.627 +807.3554077 549155.8599 +807.4135437 112096.2629 +807.5128174 65152.34155 +807.6575317 83072.67435 +807.704834 161298.2173 +807.8033447 72914.21555 +807.8744507 77957.34283 +807.933431 366982.3261 +807.9960632 73427.22369 +808.056783 205146.3622 +808.1190186 229009.4188 +808.1855469 212621.8579 +808.227417 67309.52827 +808.2467346 187748.9952 +808.2746887 175645.9958 +808.3167725 90940.14717 +808.3513184 73601.07775 +808.4105225 90431.36701 +808.6313477 75194.74801 +808.7857971 59902.56788 +808.8852844 108194.9133 +808.9241943 87610.03452 +809.2226563 75520.14333 +809.3078613 65828.26003 +809.3251648 66692.60108 +809.3880005 94183.15235 +809.4332275 73609.68921 +809.475708 78922.14169 +809.578125 71003.96068 +809.5988159 83547.06344 +809.884491 124092.3368 +809.9973145 84244.40132 +810.0287476 78371.27693 +810.0513306 100411.6757 +810.0869446 58288.88942 +810.102417 75105.58898 +810.1417847 84879.18243 +810.1549683 72018.49899 +810.1724548 138671.0411 +810.2115784 88480.92113 +810.2419434 109955.6382 +810.3562317 59680.06694 +810.3875732 87372.59545 +810.5601807 129011.7568 +810.5953979 130369.7297 +810.6167603 66186.92488 +810.6723022 119665.5204 +810.8602295 73319.89987 +811.2888184 85042.41196 +811.3676147 122004.2056 +811.4318237 65977.45461 +811.4827881 85576.86975 +811.5559082 128571.5982 +811.6551514 67851.663 +811.8100586 68006.06387 +811.8131714 79507.56386 +811.9220276 126086.6917 +811.9371033 117493.7435 +811.9433899 77012.55694 +811.98526 230017.2974 +812.0467529 105241.221 +812.0596313 70612.95055 +812.0612793 118463.5149 +812.1099854 120217.0835 +812.1686707 108853.0331 +812.1734009 66127.36196 +812.2156372 96491.00294 +812.234436 380084.0599 +812.3135376 208046.0787 +812.3933105 68969.26838 +812.4181519 171770.3115 +812.4476929 107588.8589 +812.4844055 77352.58766 +812.5704346 113786.3515 +812.5900269 75448.19241 +812.6115723 61660.33471 +812.7327576 93130.97927 +812.7542928 206723.7887 +812.8624878 71349.25281 +812.9225159 64456.81088 +812.9859314 112696.8036 +813.0048218 76726.47197 +813.0471191 126254.8342 +813.2225342 84835.7823 +813.2783508 73009.10123 +813.2852173 75139.96278 +813.3551941 109851.3545 +813.5515137 57496.34698 +813.6343384 70326.52558 +813.6535645 245190.3082 +813.7435303 71588.26816 +813.7720337 90951.04496 +813.8140259 118217.3752 +813.8243713 69731.91764 +813.9256897 141611.2608 +813.9898682 150886.6938 +814.0001831 88696.90286 +814.0664368 76899.25327 +814.161499 146874.598 +814.18573 80138.10542 +814.3208618 118658.0916 +814.4243469 137198.5807 +814.5180969 149993.7375 +814.5985107 110216.2292 +814.601593 241809.2461 +814.6506348 80196.39148 +814.6519368 261631.6992 +814.677002 242117.5793 +814.6822815 114595.1536 +814.7106018 312030.261 +814.7116089 226331.9419 +814.7358704 97342.56824 +814.769043 2265328.87 +814.8293762 1165232.113 +814.850708 244754.9381 +814.8586426 77082.13119 +814.888855 1404377.576 +814.9168091 62684.98267 +814.9259644 99259.91543 +814.9321899 100678.7936 +814.9470825 1556193.452 +814.9818726 98176.93713 +815.005127 2222512.248 +815.0196533 82064.85892 +815.0454712 879985.4946 +815.0648193 1059428.624 +815.1053772 156789.3776 +815.1222534 1073926.328 +815.1672363 67292.6319 +815.1833089 973803.5189 +815.2147827 127011.335 +815.2678833 209686.3671 +815.3545227 202951.4795 +815.3952026 82562.38198 +815.4160767 86193.06304 +815.5192261 176707.66 +815.5733337 66815.91778 +815.5919495 61862.23703 +815.643219 277618.9597 +815.6968994 85424.76835 +815.714325 110400.3955 +815.7277222 64730.70447 +815.7664185 224473.314 +815.809021 96495.8432 +815.8146973 80361.15582 +815.8303833 57622.00217 +815.8946533 328459.006 +815.9155579 73837.09867 +815.9639587 76557.42891 +815.9868164 171483.5906 +816.1005554 70784.53199 +816.1494141 65951.76706 +816.2108154 81128.69543 +816.2268372 130072.9298 +816.2920532 93065.88414 +816.430542 87178.87337 +816.5353699 75898.62896 +816.6243896 63436.54521 +816.7653809 158552.9923 +816.809082 96354.78886 +816.8900757 81883.02764 +816.9881897 73587.7168 +817.0147095 358228.7152 +817.0396729 149603.5712 +817.1404419 108846.4192 +817.1421509 175016.9125 +817.225647 71283.85172 +817.2672526 260145.8951 +817.282959 72089.51095 +817.3039551 58533.93203 +817.3940552 329743.0621 +817.5177612 779134.8505 +817.5756836 92887.89476 +817.5838623 64624.609 +817.6399536 77673.42721 +817.6424561 91841.75124 +817.7445068 62529.64689 +817.7522583 118527.4027 +817.7683919 335593.2389 +817.803894 63852.11202 +817.8146667 78359.73382 +817.8951416 102660.8975 +817.9229126 104614.1763 +817.9754639 115744.5243 +818.0194397 117860.7582 +818.0499878 89289.18055 +818.2735901 130402.0475 +818.2966919 195693.3679 +818.3443909 162934.2159 +818.3640137 72336.57331 +818.4014893 243902.4296 +818.4288025 96934.1031 +818.4610596 359896.8634 +818.5200195 527866.7017 +818.5505371 68499.84646 +818.5790405 105339.7182 +818.581604 260820.8523 +818.6365153 803004.6638 +818.6687012 67154.79402 +818.6963043 624260.8469 +818.7290039 60055.28816 +818.7554321 480494.2763 +818.8155518 267844.4318 +818.8586121 204593.1999 +818.8742065 229026.9919 +818.8905029 69846.83087 +818.9293823 101256.956 +818.9326782 81419.50411 +819.0488281 60977.28686 +819.0686646 101198.3006 +819.1358948 118879.2923 +819.1824951 81765.81535 +819.2266235 232955.6649 +819.2529297 66959.81744 +819.2684937 103122.1359 +819.3327026 213322.142 +819.3881836 131398.7279 +819.3919067 406014.8077 +819.4175618 255292.6058 +819.4331055 91359.09369 +819.4526367 243155.7791 +819.5072021 81830.96588 +819.5174764 313051.7051 +819.5395813 164600.8248 +819.5692749 165712.1542 +819.6066284 660953.5603 +819.6271973 187557.762 +819.666687 737469.9987 +819.6846313 61432.26425 +819.7449748 503227.407 +819.8190104 281683.6533 +819.8539429 147897.071 +819.8942261 255165.1456 +819.9275513 143673.9044 +819.9763794 430636.1607 +820.0497131 70742.97759 +820.0516052 339281.4744 +820.0983276 114433.6449 +820.1286621 119596.0301 +820.2052307 173614.8929 +820.2548218 134559.1649 +820.2828674 193020.4964 +820.3572998 96286.9457 +820.4371338 99605.67626 +820.4899292 291248.6723 +820.5879822 60109.06025 +820.6345825 80819.84847 +820.7267151 131579.5455 +820.7406006 119734.3829 +820.752655 74585.47017 +820.7933044 58350.31255 +820.8165283 438696.7154 +820.8654785 124608.614 +820.8747559 762228.9517 +820.8955078 160308.0573 +820.9298706 506358.9607 +820.9320068 1644541.581 +820.9713135 88617.41054 +820.9907837 549268.5238 +820.991333 2246588.485 +821.0505371 1556821.646 +821.0512085 254763.6571 +821.1078339 1381918.783 +821.1414795 144416.6259 +821.1669922 2356693.878 +821.2028809 69971.34557 +821.2259725 1531666.651 +821.2858887 1406809.83 +821.2988892 60844.41063 +821.3071594 59020.09049 +821.3434041 799745.9474 +821.3934937 166068.7745 +821.4041748 615579.0675 +821.4320679 77157.05634 +821.4603271 177092.5016 +821.5146891 259742.6796 +821.5834961 93243.83106 +821.638916 120406.5073 +821.7648315 239580.9204 +821.8694458 89146.24204 +821.877594 67013.53314 +821.8943481 92569.11585 +821.9408569 80264.79097 +821.9888306 169354.0764 +822.0245361 78901.6169 +822.2077942 98216.48819 +822.2252197 82252.17708 +822.2312927 99994.82165 +822.2770691 59877.6778 +822.3577576 111355.9341 +822.3656616 100496.3286 +822.4022827 123961.8379 +822.4252319 127892.3154 +822.5780945 97095.37368 +822.6134033 83602.87596 +822.6380005 120444.7656 +822.7446899 59643.88483 +822.7921143 80648.96023 +822.8145142 123790.6652 +822.8763428 92628.80838 +822.8856201 76259.98247 +822.9319458 71177.10378 +822.9884949 107963.424 +823.0314941 74001.43529 +823.1083374 496242.3326 +823.1654053 272735.9652 +823.2227783 170288.1634 +823.2400513 93448.26833 +823.2842407 1202427.689 +823.3048248 201970.6234 +823.3435262 562976.1526 +823.4031982 779498.4819 +823.428009 85084.49119 +823.4561462 63156.50229 +823.4625244 687092.2954 +823.486145 67968.82106 +823.5198364 127414.6551 +823.5220947 770574.668 +823.5521851 87854.09506 +823.5789948 773013.5299 +823.6397095 897216.8814 +823.6731262 61852.2212 +823.6994324 585738.3769 +823.7268982 88528.37229 +823.756073 422084.2668 +823.8158569 310086.393 +823.876709 235587.1173 +823.8962402 68519.3478 +823.9954224 88763.39616 +824.0458984 207648.8162 +824.0597534 61187.66657 +824.1078491 160299.2342 +824.1625977 109891.9917 +824.2146606 65713.78143 +824.2344666 64046.42215 +824.3646545 71486.46769 +824.4036865 112246.3133 +824.4205933 83257.32964 +824.4256897 96776.01842 +824.4573364 61031.51429 +824.5015869 57138.8104 +824.5491943 69841.09392 +824.5868225 64129.95456 +824.7444763 102167.7359 +824.7634583 279994.1959 +824.8250122 441010.0664 +824.8577677 275180.3206 +824.9230957 576227.5948 +824.9336243 183370.4961 +824.9855194 747274.0865 +825.0084229 76222.2039 +825.0484619 2705280 +825.1120199 2321694.839 +825.1348877 58852.56406 +825.1741943 5002346.536 +825.2363078 2794694.317 +825.2415161 151226.6383 +825.2605591 76830.69513 +825.2990723 2745204.533 +825.3623047 2367824.543 +825.4242554 1924893.369 +825.4873454 586193.9783 +825.5385132 74212.80979 +825.5486043 963001.187 +825.5743408 179123.2383 +825.6058757 177673.632 +825.6126709 148348.8633 +825.6956787 118928.5373 +825.7540283 114799.5044 +825.8739624 89081.12704 +825.9240723 79190.21726 +825.9547729 78296.57818 +825.98703 73452.63657 +826.0488892 229257.1407 +826.093689 64934.70618 +826.1108398 213782.7571 +826.1113281 98266.86752 +826.1727905 195344.2997 +826.2360535 158627.2452 +826.2966919 249680.1888 +826.3173523 250622.6908 +826.3605042 107453.05 +826.3762207 253085.3712 +826.4246521 119658.4938 +826.4314575 82214.55451 +826.4455566 59142.44438 +826.4835815 169214.7494 +826.5064087 606013.6161 +826.5275269 140221.1284 +826.5407104 107546.0526 +826.5697327 107875.3054 +826.5939331 98418.89537 +826.6121216 104795.089 +826.6289673 722413.8441 +826.6523438 99180.94652 +826.6661987 78100.18698 +826.6933594 113054.4904 +826.7177124 92094.96043 +826.7592468 67629.33839 +826.8205566 735303.7936 +826.8618164 566108.9075 +826.9104919 66717.49437 +826.9605103 81111.6277 +827.089447 139162.5135 +827.1104126 126479.1614 +827.1476746 219386.9348 +827.2026978 266735.8117 +827.2260742 157598.2125 +827.2397766 135669.2862 +827.2599487 307800.9876 +827.3044434 89306.19159 +827.3163452 266648.7439 +827.343689 97305.09844 +827.3701579 464621.582 +827.4242859 414314.98 +827.4807739 120473.1739 +827.5929871 140689.1447 +827.6311035 61745.90702 +827.6519775 161024.4292 +827.7030029 118357.9742 +827.7357788 66868.92578 +827.9475708 112114.2927 +828.0334167 186530.6535 +828.1489258 146805.359 +828.2879028 128918.49 +828.313385 94889.50184 +828.3545227 117873.7332 +828.4048462 524699.3711 +828.4671631 858600.1295 +828.5084839 63264.32186 +828.5282389 289147.3325 +828.5312805 256627.1886 +828.5659485 226812.6334 +828.5934296 466751.238 +828.6326497 505082.288 +828.6546021 1019579.401 +828.6973877 1679035.245 +828.7183634 778788.1012 +828.7634481 1396607.308 +828.7793884 114967.6819 +828.7839966 220608.4138 +828.828186 215995.7572 +828.837443 1342539.464 +828.8418579 173162.1053 +828.8991496 2437923.909 +828.9669189 2370223.681 +829.0345337 1705785.945 +829.0985962 1393612.164 +829.1675415 576432.2431 +829.2332458 716659.3089 +829.2999878 117909.7157 +829.3018188 133618.7924 +829.3548584 117271.7355 +829.3662415 388798.5725 +829.4282227 66760.04713 +829.5151978 91406.53795 +829.5629883 75452.21839 +829.6268005 174191.9811 +829.6357422 132054.7235 +829.6982117 197050.3932 +829.7655029 198459.686 +829.8303223 210639.2146 +829.8328857 161072.5572 +829.8551025 91301.9965 +829.8973236 1011015.638 +829.9662628 822442.3852 +830.0289307 67590.39298 +830.0321503 776985.3355 +830.098348 660540.3372 +830.164917 615988.8619 +830.1734009 103542.8479 +830.2328796 252494.0492 +830.2981873 323680.1216 +830.3015747 59373.49764 +830.3640137 269743.6281 +830.387146 123359.9555 +830.4351807 248998.0719 +830.4837646 85503.42932 +830.4962158 214459.1527 +830.5662537 69227.73416 +830.5960693 183299.9375 +830.739502 120175.7945 +830.8672078 144618.6693 +830.8955078 174004.6591 +830.9019775 70904.99106 +830.9847412 90261.97971 +830.9916382 77454.43459 +831.0316569 363553.3461 +831.0951233 181843.152 +831.1622925 130357.0345 +831.2791748 93834.9385 +831.2985229 56804.24543 +831.3425903 74856.18446 +831.3623047 328415.7775 +831.4073486 97960.17172 +831.4428101 112886.6841 +831.4659424 75902.02432 +831.4962769 90313.2887 +831.5374146 84363.78903 +831.5654602 68892.25823 +831.5935669 69897.40947 +831.6312866 86131.50051 +831.7578735 215878.127 +831.7755127 72886.94199 +831.8255615 557187.6223 +831.8980408 127892.2037 +831.9028931 243245.6673 +831.9821472 115954.6356 +832.0578003 167001.7812 +832.1157227 72153.94845 +832.1251221 107942.4436 +832.3668213 63330.96841 +832.4277344 77749.94017 +832.4353027 90846.76477 +832.5930176 68407.21113 +832.6274414 87815.26979 +832.6731262 75074.73272 +832.7763367 60673.49459 +832.8745422 135478.0439 +832.8948975 94122.42085 +832.9013062 87872.79763 +833.2293701 104931.7848 +833.3660583 72501.6745 +833.6138916 117856.2589 +833.6938477 136951.7736 +833.7597961 213570.2783 +833.8253174 193636.8516 +833.8866577 222225.9 +833.8978882 138111.3983 +833.9054565 412428.0119 +833.947998 189219.5431 +833.980011 59783.82697 +833.9846497 108604.7896 +834.0121765 227796.0497 +834.043396 57214.10529 +834.1040039 65480.86444 +834.1127319 106591.2936 +834.135437 379716.8985 +834.1990356 97218.83231 +834.289917 190753.8226 +834.2964172 60850.71849 +834.328186 86679.59973 +834.3665009 278232.6214 +834.4450073 102709.6144 +834.4944763 107869.6153 +834.5190735 191028.0954 +834.607666 88870.06313 +834.6819763 63626.70415 +834.7297974 95264.99055 +834.7373047 74798.26251 +834.7658539 160352.7868 +834.776001 87617.23256 +834.8692627 112350.7592 +834.8779907 64849.93017 +834.9099731 80532.97111 +834.9463704 145956.5974 +834.9683838 98288.36593 +834.9820557 90695.59002 +835.0108032 81589.81148 +835.0126343 77090.09196 +835.0375671 58308.57473 +835.0764771 160632.5282 +835.1100159 121912.0501 +835.1502075 113475.2909 +835.1541748 121386.1179 +835.1931763 67742.30927 +835.2929077 270589.0821 +835.3651123 191468.0239 +835.4014893 75496.28663 +835.4365234 253127.7217 +835.5023193 66669.57721 +835.5271606 80378.53469 +835.5456238 85862.92707 +835.5693054 64057.63508 +835.6356201 142473.276 +835.6757202 76817.03148 +835.9803467 67897.84611 +836.0117188 85113.3232 +836.2972717 148263.2916 +836.4370931 262800.3668 +836.5813904 123964.8406 +836.6730957 86098.45268 +836.7739868 71799.49219 +836.8346863 57578.3725 +836.9033203 81189.65994 +836.9448242 58855.28129 +836.9770203 67437.03906 +837.0403442 98156.6854 +837.2943726 57916.8996 +837.3470459 80074.5262 +837.4400635 92989.41018 +837.5045776 124284.3939 +837.5281677 66553.8375 +837.7333984 70362.28234 +837.967041 570531.1657 +838.0382996 58772.61932 +838.0423279 69811.62097 +838.0676575 154733.7903 +838.096344 60172.84804 +838.1729431 66550.95329 +838.2218018 116893.7478 +838.2427368 97245.07984 +838.2982178 111203.225 +838.3054199 118074.7244 +838.3700562 82236.84367 +838.4616089 69344.6294 +838.5302734 134720.6212 +838.5645752 82238.48236 +838.5758057 94879.09144 +838.6118774 212406.8057 +838.6361694 93001.67813 +838.6921997 58692.52197 +838.750061 78250.59629 +838.842041 78614.96364 +838.9702148 163919.3992 +839.0076294 74859.53138 +839.0373535 876051.9252 +839.0787659 70153.64236 +839.1041412 1485704.075 +839.1700439 127563.7226 +839.1715088 2466105.815 +839.237561 3254520.656 +839.305481 5329937.593 +839.3712565 4335150.568 +839.4384155 5329383.341 +839.5047404 4445865.634 +839.5717163 2879273.391 +839.6388753 2047414.053 +839.7057088 1488018.206 +839.7720947 1097689.842 +839.8383179 630554.6932 +839.8576965 65541.69147 +839.9048157 127030.4492 +840.0408936 74977.71983 +840.1042175 154974.9581 +840.1110229 57043.37573 +840.1734619 241240.9325 +840.2365112 180905.3205 +840.3052368 216573.6581 +840.3683675 348768.1014 +840.4385579 539695.5383 +840.5048828 569569.3871 +840.5716553 698077.115 +840.5990601 77377.4666 +840.6376587 514367.1024 +840.7014771 89660.8962 +840.775528 245097.5508 +840.9044495 183968.2686 +840.9717407 88290.3592 +841.0175476 63927.91595 +841.1027832 106994.0381 +841.1983032 195490.6408 +841.2234497 85408.53922 +841.2355957 189832.4695 +841.2937622 110789.8991 +841.3677979 97369.35271 +841.4320374 62379.59866 +841.4842529 177215.6696 +841.5755615 149900.3699 +841.6394043 129409.8213 +841.6797485 89483.30183 +841.7588501 88259.20673 +841.8261108 69339.43028 +841.8386841 85037.09942 +841.9068604 56998.50684 +841.9941711 156713.8161 +842.1691895 172439.0632 +842.2959595 64471.03911 +842.3637085 79433.81529 +842.4416199 121086.0397 +842.4971313 116985.4214 +842.5079956 95618.16083 +842.5465393 117567.4552 +842.6454468 82950.70854 +842.6550903 64927.31894 +842.7025146 152712.887 +842.7429199 84055.34019 +842.7636108 340483.7395 +842.788269 89237.85504 +842.8067322 76612.82562 +842.8369141 71448.1097 +842.9042969 158204.9659 +842.9681244 292430.5031 +843.0100098 69651.07962 +843.0368652 511211.3479 +843.0991211 442161.2045 +843.108429 84439.26642 +843.1645101 225740.1792 +843.1989136 76685.64511 +843.2363586 70349.09168 +843.2431641 62440.46703 +843.2978312 220350.5726 +843.3727722 110162.7089 +843.4390259 636054.4073 +843.4412842 97670.58967 +843.4965515 69141.95664 +843.5085144 61319.69213 +843.5686646 100574.7863 +843.6690674 113227.7001 +843.7432251 290937.5175 +843.7647298 151703.8271 +843.7896729 72301.40255 +843.8352356 88213.60916 +843.8539734 75186.80586 +843.8798828 177489.0401 +843.9067383 229286.7924 +843.9458008 136081.835 +843.9675293 96068.47893 +843.9734192 183022.2353 +844.0027161 88349.78332 +844.0130005 71755.01044 +844.0378418 198827.8381 +844.1055298 153118.1656 +844.1486816 69645.84805 +844.1729126 172201.1683 +844.1942444 110246.9249 +844.2366536 197934.0564 +844.244751 78616.13858 +844.3063049 183799.9428 +844.3711243 110754.6972 +844.3988647 79482.80787 +844.434845 71494.4427 +844.4466553 167988.784 +844.4967041 165869.2171 +844.5468953 379018.701 +844.5727234 198060.8849 +844.6196594 91374.76534 +844.6324463 573254.117 +844.6427917 110755.1861 +844.7009888 604769.1665 +844.7238159 71767.94779 +844.7466431 180927.4404 +844.7652283 96265.32443 +844.7740479 132038.6096 +844.8369751 62286.08116 +844.8469543 99762.44861 +845.0404663 482001.028 +845.0435181 77514.8004 +845.0534058 79191.8277 +845.0952962 268847.0822 +845.1182861 92849.44535 +845.1462097 222497.3326 +845.1548767 71584.70058 +845.1705933 80760.0099 +845.1960144 431453.8919 +845.2294922 112001.3825 +845.2489624 2184921.016 +845.2983805 1725466.194 +845.3049316 188545.5683 +845.3267212 65832.50639 +845.3468831 2164451.199 +845.3693848 185981.9213 +845.3728638 98463.43671 +845.3962199 2443760.079 +845.4484253 2199562.007 +845.4968262 3682823.905 +845.5123901 185825.0579 +845.5484823 1669428.431 +845.5732015 418346.4942 +845.5974731 1858947.82 +845.6470744 1237661.815 +845.6973114 509908.4103 +845.7035522 79459.1974 +845.7473755 712106.1075 +845.7694397 213199.4514 +845.7977905 188861.4221 +845.8255005 84230.82397 +845.8439941 302376.427 +845.8790283 86921.08572 +845.8990173 225583.4213 +845.9041748 389084.2149 +845.9747721 616579.5735 +846.0397949 193101.7688 +846.0452881 626750.9727 +846.0960999 143487.1533 +846.1077576 220350.9023 +846.1138306 70984.87155 +846.1452637 78967.72164 +846.1705933 133012.2948 +846.1734924 246232.2433 +846.1950684 443763.5217 +846.2371826 421469.2688 +846.2428589 1161415.313 +846.2982178 191505.1039 +846.3094482 858562.5077 +846.3186646 195096.1326 +846.3524984 187333.7126 +846.3725179 735745.7828 +846.3885498 273091.0353 +846.3958435 141343.4042 +846.4394531 965182.8596 +846.4538574 516491.2925 +846.5037638 733182.3749 +846.5170288 379223.0117 +846.5695801 153066.9046 +846.5712891 100411.9624 +846.5863647 506881.8792 +846.604248 74127.2415 +846.6376953 85551.20925 +846.6455078 86743.07328 +846.6514282 517351.9707 +846.6970825 88639.08618 +846.701355 611627.5776 +846.7183838 345047.2158 +846.7885437 309278.3421 +846.8475647 474820.2879 +846.90802 73866.23322 +846.9202881 138551.7476 +846.9642334 71207.56498 +846.9749756 189185.4775 +846.9856567 278229.4236 +847.039856 113770.3108 +847.0421143 155786.2464 +847.1074707 937583.5139 +847.1533203 89052.12033 +847.171875 957945.3017 +847.192688 337448.2393 +847.2405396 1498870.278 +847.242981 303478.7631 +847.3059814 971646.3492 +847.3704224 178413.352 +847.3723755 1374546.373 +847.4124756 67885.72984 +847.4396362 914491.5485 +847.4420776 353307.3584 +847.4681396 158958.1297 +847.5066528 959545.3846 +847.573822 317681.4228 +847.5878601 131328.4146 +847.6414795 730769.0732 +847.7076416 129817.9197 +847.7763977 115843.255 +847.8389282 84112.75316 +847.9074097 660324.3256 +847.9298706 85149.77646 +847.9437256 67513.49961 +848.0222168 76193.76082 +848.105896 885589.8537 +848.1682129 104597.9378 +848.1729736 182639.94 +848.2404785 66660.79646 +848.3070679 974859.7725 +848.3706055 107319.7596 +848.3736572 893221.1741 +848.381958 89230.84248 +848.4437052 497132.8635 +848.5103149 692746.1983 +848.5670776 156317.6191 +848.5737915 77715.79438 +848.6714478 67944.49158 +848.7005615 87239.74592 +848.7087402 60994.39124 +848.7561442 221439.3262 +848.7747803 591076.8369 +848.8392944 128159.3679 +848.9047241 711844.007 +848.9735107 1411289.317 +849.0401306 267739.0914 +849.0412598 419229.7502 +849.1072388 1758347.346 +849.1125488 114359.6569 +849.175354 1283939.26 +849.2379761 1277872.032 +849.2426147 403558.7034 +849.2626953 71342.18776 +849.3078613 1252975.7 +849.3122559 61507.80416 +849.3535156 71446.11475 +849.3705444 102095.9593 +849.3736572 1218589.353 +849.4406738 188863.386 +849.442688 1311331.681 +849.5083618 969294.5125 +849.5119019 139570.9118 +849.5341187 78139.7756 +849.5770264 830104.2853 +849.6438599 418032.3284 +849.7085571 64019.95179 +849.7770386 713475.7883 +849.8428752 2059606.897 +849.9087524 7445599.819 +849.9750977 17887197.59 +850.0423584 30079816.39 +850.1088562 39562153.41 +850.175354 51800140.98 +850.2421265 63924613.38 +850.3088379 56756421.63 +850.3754883 50307778.28 +850.4420776 36261109.38 +850.5089111 25926259.89 +850.5753784 19773558.55 +850.6423136 13044214.92 +850.7093506 7842165.316 +850.7757568 3903920.781 +850.8426514 2270691.284 +850.909729 1466396.59 +850.9299316 101741.5376 +850.9741821 2295679.317 +851.0422974 1737031.767 +851.1078491 4035299.417 +851.1747559 3708074.019 +851.2402344 701505.3317 +851.2413127 5042616.318 +851.2806396 73484.09468 +851.2809448 62740.57701 +851.3076172 7947499.309 +851.374939 9306040.224 +851.4416504 6861443.455 +851.5081787 2859363.646 +851.5749512 3365994.487 +851.6421305 2691020.761 +851.7097168 2197142.136 +851.7747955 896633.445 +851.8396606 70837.32451 +851.8424683 1022085.562 +851.9099731 785573.8878 +851.9749756 604050.8245 +852.0374756 177543.0333 +852.0430298 245524.5109 +852.0877686 153648.4922 +852.1073405 501462.0215 +852.1695557 79127.42469 +852.1724854 1088341.745 +852.2423706 1126716.596 +852.2698975 116282.8563 +852.3074463 482185.6863 +852.3745321 739919.3358 +852.4072266 100311.2872 +852.4404297 259766.5776 +852.4442749 701066.3352 +852.5103149 678952.9389 +852.5736084 647830.2408 +852.6392822 106320.7744 +852.7080688 237190.3725 +852.7449341 97526.83448 +852.7746582 284334.8586 +852.8306885 132765.6956 +852.9063721 142623.2841 +853.0400391 61832.32067 +853.178833 942953.2031 +853.2431946 127515.4208 +853.3051758 95987.58464 +853.3111572 89459.36555 +853.338562 88126.23583 +853.4428101 144788.9354 +853.4671631 83993.35795 +853.4865723 69454.83182 +853.5009155 100654.9383 +853.5678711 230497.588 +853.6348267 1169735.104 +853.7000122 94434.89487 +853.7026367 1316108.067 +853.7679443 1655029.447 +853.7767944 95640.2921 +853.8348389 1348168.415 +853.8426514 90386.50484 +853.8997192 158684.7698 +853.9012451 749956.1156 +853.9683685 680615.7806 +853.9744263 91483.18767 +854.0358887 653756.8742 +854.1007385 239340.4955 +854.105835 247873.0249 +854.1730957 124083.7723 +854.2363892 150644.5671 +854.3042603 431464.9273 +854.3502808 113582.2662 +854.3782349 96684.40221 +854.3816528 74927.04803 +854.4466858 109499.5045 +854.5064697 198228.4222 +854.6427002 116779.375 +854.6757813 76258.97107 +854.7018433 72384.23951 +854.7537842 62459.0181 +854.7731934 138987.4466 +854.8487549 92737.75006 +854.8687744 71234.6166 +854.9036865 223825.8276 +854.9337769 68839.75848 +854.9411621 79034.57679 +854.9665833 71584.00909 +855.0999756 80551.64285 +855.1240234 127380.4477 +855.2385864 164131.2859 +855.2792969 75889.38497 +855.3062744 598522.42 +855.3690796 110319.4748 +855.3742879 1279301.556 +855.4394531 99213.84039 +855.4412638 595615.5281 +855.5052287 440340.6269 +855.5739136 422633.7119 +855.640564 307431.6196 +855.6424561 302581.8416 +855.7074382 490263.4109 +855.7324829 95805.8942 +855.7792664 240981.7188 +855.8081055 91842.27371 +855.8419189 80094.02007 +855.8800049 128310.753 +855.9140625 72866.80996 +855.9469604 254509.9962 +855.9788818 83320.74112 +855.9857788 123959.7616 +856.0309448 107310.7118 +856.0448608 121444.7838 +856.0901489 62685.63806 +856.1123962 123300.0673 +856.1605225 68375.22544 +856.1725464 84559.20135 +856.3165283 83125.8085 +856.4371338 141145.8191 +856.4484863 188266.5096 +856.4925537 56692.11836 +856.5095215 169676.4241 +856.5131226 285508.8988 +856.5756022 719495.4923 +856.5811157 503129.6591 +856.6387329 276442.2572 +856.6458588 1246439.213 +856.7105408 264309.6222 +856.7123617 1214224.721 +856.7745361 895767.5385 +856.7815552 962359.3787 +856.8443298 1421482.07 +856.9143066 3322443.159 +856.9775696 213139.3658 +856.9819132 1280085.054 +857.0490112 3324202.647 +857.1148885 448142.4054 +857.1627502 106760.8655 +857.1802979 98822.09448 +857.2460632 74304.73516 +857.3164673 76565.29121 +857.3608398 83263.72864 +857.4277344 77743.25972 +857.4533285 462216.6437 +857.503418 58977.48436 +857.5265503 67047.94122 +857.531189 74409.60028 +857.5975342 114405.5805 +857.6555176 75629.78662 +857.7156067 140303.9542 +857.7756042 117671.4383 +857.8109741 71895.30279 +857.8463745 353414.1804 +857.9088745 177485.3844 +857.9153442 241448.2064 +857.9430542 86042.01479 +857.9776611 92492.37747 +858.0482788 131837.0212 +858.1121216 174068.2322 +858.2366333 77677.60627 +858.2600098 74001.14772 +858.4477539 80095.18899 +858.4555054 76759.58188 +858.5097656 92100.75555 +858.5324707 80155.3938 +858.5782471 716857.1026 +858.5819702 91722.06363 +858.6470947 554270.8326 +858.7803345 107733.7192 +858.7821045 106853.9448 +858.8236389 121048.3686 +858.8478088 213237.7133 +858.8720093 56958.21746 +858.9790649 90472.04984 +859.2078857 94172.50614 +859.2352905 61469.37885 +859.3366089 69796.96299 +859.4459534 102971.7878 +859.6599731 120865.9932 +859.7081299 65886.43033 +859.7268066 105921.6048 +859.7982788 132164.3599 +859.9770508 98345.01841 +860.2055054 64440.08666 +860.3391724 73746.74519 +860.3640137 86044.93952 +860.4367065 70040.74044 +860.5100098 96135.45861 +860.5581665 64384.41591 +860.6120605 90464.51191 +860.6848755 73655.36269 +860.7581787 78213.81014 +860.9663696 74755.68109 +861.4396973 98053.2491 +861.4525757 90394.35508 +861.5165405 82336.97361 +861.5962524 223546.2695 +861.6350708 73300.01416 +861.6604004 105990.1532 +861.728597 473591.9691 +861.7943726 164445.1131 +861.8599854 141069.4535 +861.8624268 198413.8529 +861.9268494 165408.5687 +861.9960327 224309.3516 +862.0636292 76655.23239 +862.1303711 180620.1064 +862.1316528 82302.17894 +862.1871338 57057.92595 +862.2767944 79322.08138 +862.3199463 71500.87714 +862.444397 83668.8231 +862.5819702 84225.52297 +862.6142883 125202.6436 +862.6387329 80668.58896 +862.7930298 90949.58871 +863.0150757 75019.82413 +863.1091614 112297.7762 +863.2252808 112193.913 +863.246521 81016.08989 +863.3173828 126446.5365 +863.322998 77997.64184 +863.4592285 102920.4152 +863.5088501 77202.69485 +863.5432129 112960.5147 +863.5615234 108688.3601 +863.6117554 74948.17272 +863.6281128 146403.8389 +863.6322021 60376.48448 +863.7103271 113144.2655 +863.8250732 88927.95809 +863.8792419 122245.6091 +864.0461731 100730.7565 +864.1860962 80326.6605 +864.3076172 106836.7998 +864.4523926 100849.8902 +864.5054932 96488.67784 +864.6296387 435979.9292 +864.7159424 103266.2676 +864.7618713 273863.8569 +864.8347168 81290.56183 +864.9572754 81903.34908 +865.1447754 82996.39228 +865.1881104 73215.97867 +865.243042 80740.93932 +865.37854 124475.1143 +865.4014893 61724.69587 +865.4411316 314339.7279 +865.5062052 316207.4689 +865.5395508 64325.36508 +865.5661011 857607.9924 +865.6101074 85235.71946 +865.6301473 826998.8748 +865.6310425 293371.8937 +865.6934204 2143052.427 +865.7362671 111084.3391 +865.7557983 944696.8602 +865.7838135 57605.42892 +865.8185425 1183147.292 +865.8799845 725269.2082 +865.8824768 481276.0243 +865.9437408 1068809.59 +866.0068359 721394.2212 +866.0469666 117177.4325 +866.0706787 872525.5566 +866.0744019 165902.2281 +866.1144409 118286.1008 +866.1347656 119757.327 +866.1862183 116984.515 +866.1937256 86469.13172 +866.246521 86952.00244 +866.2535706 245193.8585 +866.2652283 142419.4904 +866.3174438 706432.7091 +866.3549805 88946.79751 +866.3684082 66525.75933 +866.3805542 69836.52712 +866.3970947 128019.1695 +866.4562378 65012.48482 +866.5322876 82199.25733 +866.5852661 74981.18912 +866.6195068 85048.28763 +866.6568604 86281.02884 +866.7338257 88113.87367 +866.8517456 74268.51665 +866.8816528 85898.57875 +866.9147339 445838.5832 +866.979187 109215.5059 +867.046936 67556.95021 +867.1904297 88973.60673 +867.2670288 75351.32372 +867.3575439 58255.01534 +867.6841431 71239.6584 +867.7515259 92882.46629 +867.807312 76842.40217 +867.854126 99109.23763 +867.9224243 84052.97356 +868.1264038 75538.63014 +868.2036743 96523.47558 +868.4533081 86134.30463 +868.5169067 67788.58686 +868.5369873 78474.86553 +868.6107788 69123.27057 +868.6714478 66349.21346 +868.7158813 126440.3938 +868.8005371 153348.9092 +868.8717041 125190.5432 +868.8962402 70660.78737 +868.9838867 57733.72917 +869.0279541 88016.48262 +869.0482788 564127.6345 +869.1799622 345005.1742 +869.1867065 63636.49593 +869.2441711 247324.9529 +869.2601318 81011.08214 +869.3126526 287733.5291 +869.3359375 73561.12626 +869.3671265 125438.5369 +869.3805542 257892.4699 +869.4086304 82244.56703 +869.4268799 91892.75283 +869.4491577 65972.38091 +869.4869385 72051.71582 +869.4926758 162952.6199 +869.5322876 72040.59767 +869.5523682 496012.0168 +869.5754089 185567.3476 +869.6151326 418063.7631 +869.6543579 61299.38353 +869.6762695 780542.5086 +869.7379456 374926.3743 +869.7972412 80765.77515 +869.804657 310271.0985 +869.8633728 293948.313 +869.8878174 65753.66106 +869.925415 255272.628 +869.989502 246179.5335 +869.9912109 110526.5474 +870.0537415 129459.0581 +870.2272949 81448.13346 +870.3202515 120417.1354 +870.3400879 68116.59173 +870.387146 77899.09029 +870.4174194 139118.1906 +870.453949 167926.1252 +870.4778442 73119.28905 +870.4819946 167578.0492 +870.5414429 281917.0457 +870.6058044 247660.9035 +870.616394 83719.98135 +870.6665039 896665.8693 +870.7284546 319715.998 +870.7921753 343620.9129 +870.8548584 182354.4298 +870.917572 330319.9962 +870.9807129 81118.71592 +871.0061035 95634.90766 +871.0553589 110442.9548 +871.0652466 124418.3038 +871.1061401 66506.77894 +871.1868896 67271.1125 +871.2143555 354546.0033 +871.3793335 205475.2785 +871.4943848 63598.70541 +871.549469 94266.5312 +871.6038818 68369.48906 +871.6600342 90359.89371 +871.9904175 152128.4926 +872.0042114 99577.90154 +872.0534058 552584.4683 +872.1087646 307685.3385 +872.111145 740620.1213 +872.1781006 1292306.149 +872.2210083 64213.60125 +872.2385864 1815902.448 +872.2418823 311540.1354 +872.29776 236896.6707 +872.3017578 1346573.675 +872.3357544 84544.07597 +872.3598633 248987.8499 +872.3645935 527828.1114 +872.4268188 927421.9475 +872.4883423 1503227.502 +872.4928589 135989.2454 +872.5390015 108134.2536 +872.5518799 1091970.192 +872.6160156 500807.6779 +872.6822205 95558.29761 +872.8040466 170684.0423 +872.9225464 79564.32609 +873.0446167 84729.79145 +873.1224976 89632.86646 +873.2400513 79357.03467 +873.2771606 59716.24819 +873.282959 79062.38614 +873.4523926 99548.83916 +873.6593018 57824.6926 +873.7960815 68061.29091 +873.8432007 91694.67126 +873.9122314 65041.95458 +873.9249268 141333.7879 +873.9487305 107047.9962 +873.9789734 241109.8723 +874.0445862 170533.6134 +874.1139832 208059.6876 +874.1799316 76544.74423 +874.185791 85205.12791 +874.2485962 136121.1622 +874.3126221 182060.5076 +874.3880005 78700.84556 +874.4246826 80412.78238 +874.4428101 78175.61252 +874.4849854 86779.39211 +874.5180664 58476.56405 +874.5494995 113427.1942 +874.5518799 145815.8213 +874.6080322 85259.11101 +874.6143799 103241.8704 +874.6465454 82763.09407 +874.6727295 817606.2009 +874.7333374 615568.8485 +874.7416382 435882.6115 +874.8023682 1013330.885 +874.8661499 1029621.995 +874.9270935 935054.9647 +874.9873047 215062.3201 +874.9910278 584847.143 +875.0476074 79805.22955 +875.0543213 949083.8166 +875.1166077 543453.621 +875.1589355 221736.6554 +875.1817627 360066.9873 +875.1953125 112538.6402 +875.2162781 106689.6835 +875.2419434 307190.2743 +875.2797852 122343.6058 +875.3060913 115487.2197 +875.3677979 127601.7924 +875.3907471 75936.68447 +875.4732666 74376.73572 +875.5217896 74721.58041 +875.5501709 81322.23544 +875.6258545 80694.59068 +875.6611328 102750.9155 +875.6849365 114183.4389 +875.7444458 261825.5642 +875.8020325 277496.8167 +875.8602295 152803.054 +875.8637085 324063.4678 +875.9177856 222997.9377 +875.9225464 343843.0348 +875.979248 92746.73716 +875.992981 82056.62037 +876.0389404 393053.4376 +876.0961914 653026.6421 +876.119751 98888.30153 +876.1236572 59061.66428 +876.1571655 255831.4855 +876.1872559 113232.7304 +876.2184143 285672.1347 +876.2488403 109593.1797 +876.2720337 125741.7944 +876.3132324 133356.4749 +876.3641968 173469.2501 +876.3820801 84950.42484 +876.4364624 168870.7117 +876.4626465 68388.36635 +876.5651245 206470.3156 +876.6137695 130653.6927 +876.6641235 324942.2519 +876.6878662 99712.90841 +876.7079468 131425.5965 +876.7132568 130470.3932 +876.7697144 118711.3568 +876.919281 146667.3618 +876.9788208 76224.84204 +876.9851685 84439.53831 +877.0373535 75091.8705 +877.0457153 142797.7324 +877.0657349 101627.4471 +877.1175537 82653.95735 +877.1733398 117056.2331 +877.2332764 71320.86553 +877.3632813 99659.83734 +877.4260864 70755.34031 +877.465271 66839.34616 +877.524353 109543.6054 +877.6602173 75342.54992 +877.7664185 159095.8491 +877.8460388 76901.89632 +878.0751343 64929.71823 +878.081665 111305.4193 +878.1196289 76390.08719 +878.2539368 112691.3493 +878.2855835 175784.3755 +878.3824463 259391.9498 +878.4608765 159350.4054 +878.5333252 114908.856 +878.5493164 72525.43195 +878.5512695 76582.65779 +878.5828247 135874.7511 +878.6109619 62963.87696 +878.7663269 109639.4124 +878.7816162 65991.07814 +878.890686 58925.84919 +878.9195557 122269.7475 +878.9274292 85616.85211 +879.0529785 469347.428 +879.1824341 82807.15389 +879.2128296 75938.37113 +879.3861084 80920.70819 +879.4656372 67603.09511 +879.7128296 68140.57446 +879.7299805 69353.95427 +879.7857056 929088.3145 +879.8511963 643377.0631 +879.9172363 2238739.811 +879.9215088 110349.7057 +879.984436 4422772.571 +880.0512492 3356611.412 +880.117981 4790018.184 +880.1849365 4758361.611 +880.2522583 4198032.917 +880.3189494 2358141.393 +880.3859863 2155171.783 +880.4519043 1837166.727 +880.5170898 1090493.773 +880.5501099 57404.37701 +880.5843811 259981.126 +880.6519165 603881.5858 +880.7171631 216071.628 +880.8479614 90264.24135 +880.8517456 87452.8054 +880.9155884 106418.5363 +880.9839478 203667.1979 +881.052002 620788.7147 +881.1170959 163280.5062 +881.1468506 93290.1306 +881.1782837 65699.57193 +881.1841838 343551.6221 +881.2514954 331169.2757 +881.2980957 85979.99007 +881.3093262 60377.10256 +881.3171387 356744.7785 +881.3856964 604016.6189 +881.4075928 58508.08044 +881.4489746 82229.76728 +881.4526978 82376.76722 +881.4724121 111226.0232 +881.5391541 138412.0245 +881.5853271 58373.63301 +881.6054688 169446.875 +881.6746216 300013.2346 +881.6975708 61631.10171 +881.7406006 133784.1804 +881.7421265 80994.44108 +881.8053996 278330.4602 +881.8726807 180382.9029 +882.0109863 171777.4102 +882.0556641 57761.6626 +882.0644531 170955.4077 +882.119751 71638.27243 +882.1513672 66001.8767 +882.2158813 169109.931 +882.2504883 64923.03941 +882.3285522 79603.46511 +882.390625 80147.62609 +882.7072754 58246.72039 +882.7852173 120377.3877 +883.1832275 83701.75996 +883.3070679 69076.85496 +883.3244629 91747.75232 +883.4215088 95155.16022 +883.4942017 133456.6253 +883.6453247 65840.14299 +883.6978556 394518.9218 +883.7609863 1088265.702 +883.8303833 320732.7727 +883.8335571 845231.4397 +883.8444824 86710.90786 +883.8967285 741861.2227 +883.9622803 720780.4411 +884.0326843 188239.5273 +884.0992432 630289.1689 +884.1338501 109973.6491 +884.1611938 79819.3067 +884.2183228 83032.83292 +884.3007813 78095.97735 +884.3359375 92581.84472 +884.4705811 90370.48613 +884.4717407 71124.35777 +884.6760254 169069.2043 +884.7216187 74799.53894 +884.8858643 208010.6236 +884.9647827 91521.33064 +885.1731567 100854.1733 +885.2539063 69563.18258 +885.3878174 96853.38795 +885.4678345 85201.1051 +885.5574951 83986.69279 +885.5793457 66696.56344 +885.803894 76637.37408 +886.0356445 100816.5981 +886.046875 106898.2129 +886.1082153 93421.48295 +886.3260498 82115.22876 +886.4662679 337412.2772 +886.5011597 91191.77835 +886.5265503 90498.9662 +886.5700073 149304.6567 +886.6259766 77024.99114 +886.6337891 104877.7202 +886.6977539 102176.402 +886.7237549 66208.25947 +886.7667847 91611.165 +887.0058594 63961.52297 +887.0375366 65013.54539 +887.100708 136386.2729 +887.1507568 65588.27387 +887.1791382 77813.5066 +887.1984253 87464.96306 +887.2484131 86665.43833 +887.2891846 110074.1693 +887.4542236 74661.75642 +887.6395874 118715.4114 +887.6761169 295019.2245 +887.694458 74105.39006 +887.7487793 775412.0444 +887.819397 162510.2086 +887.822998 567235.18 +887.8900757 181059.2363 +887.8918864 1566370.001 +887.9607544 230893.064 +887.9644165 2062646.343 +888.0340576 1926867.487 +888.0570679 737420.8887 +888.1050008 2095714.503 +888.1382751 409655.1163 +888.1758881 1870655.949 +888.2230835 71584.07915 +888.2489217 1343429.498 +888.2540283 84424.10024 +888.3222351 709869.3539 +888.3638306 105373.9954 +888.3895874 283688.4956 +888.3925171 599370.7384 +888.4632874 462206.0022 +888.5344238 114179.5351 +888.5574341 61240.45819 +888.6097412 147723.5895 +888.6543884 191197.0934 +888.7460022 360897.2784 +888.8355713 311698.3333 +888.8903198 701832.9868 +888.9256185 439715.7982 +888.9629517 516064.2416 +888.9951782 83555.80989 +889.0338745 382382.454 +889.0523071 101801.813 +889.1065063 1016534.063 +889.1242676 78534.38232 +889.1367188 574600.5287 +889.1747742 1182902.186 +889.2162476 118074.1369 +889.2221069 59170.08898 +889.24941 1211294.537 +889.2765503 143929.2974 +889.3182983 701765.0824 +889.34552 223402.6448 +889.3884888 1055015.451 +889.4103394 165286.5541 +889.4608765 996751.0345 +889.4788208 181835.7022 +889.5368042 131065.4922 +889.550293 147311.8757 +889.5532227 82470.14979 +889.5755615 1142695.686 +889.6079102 123224.6837 +889.6260376 769192.6524 +889.6793213 1565479.625 +889.682373 372687.1646 +889.7332153 2710143.116 +889.7480469 101720.1686 +889.7849121 2154115.336 +889.8386993 1855890.213 +889.8903198 2555225.759 +889.8917542 447351.1593 +889.9425049 2610564.386 +889.9960327 2502807.2 +890.0484009 570424.832 +890.0513102 626503.7349 +890.1004639 1305613.136 +890.1018372 282299.0046 +890.1549988 925192.5768 +890.1776123 83203.58306 +890.2061157 195925.2866 +890.247406 248118.5922 +890.2631836 158362.8295 +890.3170776 72769.01724 +890.3910522 164892.3764 +890.4193115 66570.21486 +890.4607544 90810.88794 +890.4620056 159251.7838 +890.4736938 71249.96938 +890.5255127 159217.0691 +890.5336914 109821.3698 +890.605896 63059.74404 +890.6246338 195393.4104 +890.6356201 101259.9909 +890.6805725 149493.3557 +890.7311401 818099.861 +890.7868958 196816.3668 +890.8388672 112373.9853 +890.8907471 76268.76156 +890.8910522 67905.62473 +890.9989014 107550.192 +891.2072754 79886.50447 +891.5447388 82315.15667 +891.6730957 85654.35351 +891.7322388 92950.9994 +891.743042 181836.7424 +891.78125 127061.6059 +891.8659668 67844.53681 +892.094635 143328.8582 +892.117981 72019.5113 +892.1430664 89576.54173 +892.182251 75332.83686 +892.2957764 130085.1318 +892.3160095 140422.949 +892.322998 67232.98066 +892.4607544 91276.27734 +892.4738464 128342.7627 +892.6934814 90963.81465 +892.8640747 77362.2887 +892.9644775 82810.42666 +893.0936279 64569.04767 +893.1459045 68925.74796 +893.3811035 81417.28915 +893.5512695 134272.4154 +893.5692139 60761.82995 +893.6082764 76071.95716 +893.6257324 72163.34502 +893.6640015 72264.99028 +893.6938477 170557.8714 +893.9560547 64808.03724 +893.9788208 98765.54313 +894.3780518 103342.9344 +894.3970947 79026.62721 +894.8916626 81192.79722 +894.9031982 76491.28916 +894.9997559 110657.5366 +895.0483398 78248.35731 +895.0564575 81195.36196 +895.1034546 506793.4986 +895.2650146 73517.18622 +895.3751221 83331.53692 +895.6271973 59161.08801 +895.6685181 136753.4234 +895.838623 86138.02131 +896.0084839 87149.48917 +896.1425476 75413.12432 +896.2497559 95382.89142 +896.3766479 86463.50627 +896.4582825 112112.5432 +896.479126 82786.41761 +896.6091919 89542.9345 +896.6958008 81292.23554 +896.9707642 85831.63006 +897.1065674 81178.28892 +897.1137085 116496.0556 +897.1497803 74896.15177 +897.2370605 66746.05747 +897.3755493 85735.85983 +897.6652222 76251.40888 +897.6826782 68818.44118 +898.0023193 77787.74865 +898.1077271 89944.16027 +898.1604004 77609.01294 +898.3223267 116577.2618 +898.3743896 76310.83362 +898.677063 117862.6753 +898.7183228 76308.74103 +898.824707 179805.5976 +898.8965454 737682.8462 +898.9038696 72300.22165 +898.9680023 1092120.388 +899.0006714 74604.6516 +899.039978 2557865.468 +899.0698242 77330.61487 +899.1112061 4920685.483 +899.1564026 98666.19418 +899.1831665 4749647.142 +899.2341614 204121.0494 +899.2540283 6335629.693 +899.3259481 3710471.236 +899.3537598 83642.07835 +899.3971558 3074975.013 +899.4683838 3576855.07 +899.4725342 191250.0153 +899.5404663 837020.2984 +899.5426636 1836530.24 +899.6105957 134125.1265 +899.6118774 1273374.914 +899.682902 1225311.658 +899.7061768 57260.19375 +899.7554321 1391267.371 +899.8300781 429427.8104 +899.8995972 88615.65355 +900.0096436 64800.84281 +900.0382385 172762.6302 +900.144165 65141.1872 +900.1845093 650620.9333 +900.2224121 81871.24023 +900.2503052 113157.2991 +900.2530823 208070.8615 +900.3231812 241515.6628 +900.3612061 66100.14887 +900.3972778 613187.002 +900.4378662 117062.8104 +900.4683838 510286.6907 +900.4713745 124312.01 +900.5438232 150205.5558 +900.5678101 88821.68883 +900.6089478 75987.19821 +900.6126099 155854.8053 +900.7485962 97416.99155 +900.8093872 178143.9224 +900.8140259 85314.4057 +900.9290771 76010.63804 +900.9694824 98793.61669 +900.9785767 497764.6893 +901.0614624 137924.6863 +901.1134033 67229.83104 +901.1448771 337654.3949 +901.2266846 254133.7244 +901.2572632 89922.28899 +901.3102417 124365.456 +901.312439 529133.3934 +901.395401 633219.2579 +901.4752197 266555.1649 +901.5100708 79322.94603 +901.5377197 65383.81856 +901.5527344 83358.22908 +901.5628662 93459.69813 +901.5842285 134258.9809 +901.6105957 71280.51771 +901.6112671 74766.03793 +901.6832581 178993.5953 +901.8861287 339624.3338 +901.9836426 63492.49631 +902.032959 77086.74663 +902.1046753 102976.9785 +902.4591064 104399.5101 +902.465271 73901.30442 +902.6920776 80110.4661 +902.7366638 74574.61632 +902.7987061 67346.99223 +902.822876 91475.38532 +902.8620605 85757.18638 +902.8770142 74128.69774 +902.92453 202512.3668 +902.9577026 109986.819 +903.0378113 166426.9648 +903.0488281 540771.6752 +903.1101379 243180.5474 +903.1126506 746584.4612 +903.1749573 178063.4963 +903.1816406 91737.0447 +903.2373657 652102.28 +903.2553711 79817.74354 +903.297699 162015.867 +903.3152466 86459.38695 +903.3980408 254451.6375 +903.4686584 277440.0551 +903.4852295 219123.6063 +903.5374959 317471.3944 +903.5668335 133318.3294 +903.6053467 65656.98504 +903.6480103 892316.2848 +903.6514893 95848.72344 +903.7265625 110950.8294 +903.744751 77715.13908 +903.8188477 71869.4962 +903.8230591 227497.5643 +903.8635864 138919.3824 +903.8932495 194011.1069 +903.9393921 74461.75592 +903.9826355 107866.4801 +904.0093994 102605.4623 +904.0814209 136608.8827 +904.1136475 90472.12812 +904.1783142 183944.87 +904.2538452 431796.8368 +904.2625732 84758.97643 +904.3047485 84118.47275 +904.3286743 73644.29399 +904.3970642 165558.5223 +904.4725952 66302.80659 +904.5765991 109509.3399 +904.6431885 79054.47474 +904.7563477 165265.925 +904.8267212 123620.1485 +904.874054 183662.1998 +904.9769897 108366.6656 +905.0101929 115719.8764 +905.1160889 74588.34531 +905.1439209 136386.2484 +905.1870728 160971.6969 +905.3273926 122486.3001 +905.4682312 124631.6184 +905.5398254 163439.9439 +905.6069336 114665.5695 +905.6165771 512819.2839 +905.645874 88214.18118 +905.6878052 99581.5427 +905.690918 66130.25146 +905.7528687 646469.3785 +905.8219604 832069.3449 +905.8875732 156725.8513 +905.8917236 117240.0325 +905.9161377 65332.76317 +905.9685669 244507.3525 +905.9755249 124202.2275 +906.0354919 133995.2462 +906.0437927 206278.8757 +906.1282959 99187.53634 +906.1876831 126850.5328 +906.2168579 242392.8692 +906.2531738 85492.96273 +906.2752686 76819.03292 +906.3063049 130744.1428 +906.3267822 291339.0476 +906.3352661 84219.73692 +906.3966064 307951.0183 +906.4038696 693253.1885 +906.4746094 630864.1168 +906.544047 393296.9606 +906.5826416 92073.35794 +906.6100464 84136.17313 +906.6235352 166786.4815 +906.6834106 345244.603 +906.699646 165633.7036 +906.7346802 99601.78729 +906.7548523 127452.001 +906.7645874 482609.0605 +906.8183594 80413.33094 +906.8262634 394704.904 +906.8460388 280632.2382 +906.8962708 257472.4952 +906.9013672 120060.4849 +906.9130249 595359.9184 +906.9695435 689910.1089 +906.9851074 475512.4286 +906.9988098 98362.27317 +907.039856 101996.2952 +907.041626 145324.7113 +907.0563354 551124.3008 +907.1085815 78289.42699 +907.118103 87978.25991 +907.1276245 544154.9271 +907.1779785 139720.8363 +907.1858521 115529.7532 +907.1978149 345056.663 +907.21875 75557.61121 +907.2480774 99531.08619 +907.2550659 85625.20967 +907.270752 202715.5917 +907.2837524 86002.99157 +907.3438721 233803.791 +907.3843384 93988.09521 +907.3984985 188483.161 +907.4103394 72428.65277 +907.4663391 164311.0185 +907.4942017 83963.28464 +907.5401001 245389.5529 +907.543457 260215.5718 +907.6066895 104643.5663 +907.6164144 592182.7907 +907.6573486 70133.85446 +907.6806641 167069.8121 +907.6866455 1380377.014 +907.755249 1038617.09 +907.7618408 86875.4436 +907.8284302 1231301.479 +907.8469238 83242.87723 +907.8979492 836661.6973 +907.9707031 556958.8483 +908.0380859 150853.3298 +908.0444031 183546.9957 +908.1132813 570135.5969 +908.1599121 122943.7995 +908.1851196 477735.6045 +908.2422485 96189.48045 +908.2523804 287717.2418 +908.329834 513035.9426 +908.3963928 129746.2954 +908.4707031 90352.33311 +908.5444946 78282.85156 +908.5762939 84763.77334 +908.6088257 59937.60372 +908.6119995 131474.6436 +908.6857503 651589.658 +908.7541504 744818.6653 +908.824646 753008.3089 +908.8965454 436278.1224 +908.9053955 101168.5177 +908.93927 67791.67571 +908.9690552 140227.8525 +908.9745483 133075.2676 +909.0375366 161783.0431 +909.0427856 150040.5502 +909.1862183 645382.2465 +909.2564697 286562.523 +909.3298645 117922.0538 +909.3322754 96499.40205 +909.3935547 74478.27065 +909.4019775 590503.154 +909.4692688 175590.1869 +909.473938 123795.2559 +909.5428467 889933.0654 +909.6123657 794183.3012 +909.6866455 1685912.274 +909.757019 1581185.523 +909.8286865 1061952.556 +909.865509 99983.14349 +909.9002075 84996.29595 +909.9011841 1261433.957 +909.9694214 857322.8461 +910.0436605 799759.4832 +910.0863647 78974.96248 +910.1140137 183730.0309 +910.1895752 467981.2456 +910.2555237 141763.4963 +910.3966675 170733.9066 +910.402832 126932.0796 +910.47229 2554151 +910.5438843 5693575.284 +910.6160278 16253904.19 +910.6875 26722278.93 +910.7589722 38505676.62 +910.8300171 47525944.01 +910.8310547 2508309.207 +910.9014282 52544016.7 +910.9731038 50651251.54 +911.0446777 40429796.43 +911.116394 32445722.66 +911.1876628 23507574.05 +911.2590942 15670757.59 +911.2608643 1144156.575 +911.3305969 3511652.773 +911.3309937 11057431.42 +911.4020386 6660518.17 +911.4749756 3134671.607 +911.4938965 123765.4894 +911.5177612 58353.13451 +911.5466309 2463608.083 +911.5691528 76995.55328 +911.5708618 74319.37421 +911.6174927 1533340.533 +911.6865845 1835310.241 +911.7573853 2656885.656 +911.8285116 2983349.439 +911.8341064 173669.282 +911.9006348 1281079.663 +911.901001 4630666.696 +911.9728638 4727880.023 +912.043457 7707190.927 +912.1148071 5953140.483 +912.1867269 4787087.786 +912.258667 3400706.827 +912.329895 3950531.344 +912.3996582 98438.30383 +912.4009399 2662095.343 +912.4703369 232020.587 +912.4730021 1513350.351 +912.5440063 416862.4727 +912.6154175 536400.9633 +912.6847534 532363.3979 +912.7587891 105056.9918 +912.7634277 129813.9828 +912.8302002 106966.8949 +912.8310547 193607.0461 +912.9000244 84818.13623 +912.9031372 110961.9749 +912.9423218 113435.063 +912.9710693 469332.2472 +913.0042725 82235.89527 +913.0311279 74614.47208 +913.0421753 126379.3774 +913.1150513 766325.8447 +913.1854045 453621.1177 +913.2592163 655123.8999 +913.3283081 598381.366 +913.3318481 144798.1875 +913.3999634 553764.267 +913.401123 88992.14875 +913.4741516 217409.0358 +913.5783081 104941.1579 +913.6817017 101381.5455 +913.755188 86100.3988 +913.835144 170543.8229 +913.9401245 67271.69159 +913.9751587 103464.5373 +914.0446777 86112.36312 +914.1158447 79369.50482 +914.1807861 88375.32582 +914.3265381 133299.1843 +914.3330688 83233.87053 +914.3948364 627929.1242 +914.4647827 983082.2701 +914.5371094 1204221.489 +914.6107178 1106809.423 +914.6131592 402772.6201 +914.6790975 1532016.736 +914.6819458 165496.0144 +914.7490845 435157.018 +914.7512207 1578808.42 +914.8239899 967295.5868 +914.8950195 562307.7241 +914.9666748 996227.8011 +915.0386963 826851.3899 +915.1144613 613532.9392 +915.1824036 118885.5166 +915.2541504 545089.624 +915.3018799 81259.65357 +915.3269043 111082.1725 +915.371521 94933.20506 +915.4044495 160845.5947 +915.5394287 85284.17576 +915.5757446 83853.72965 +915.6103516 108807.767 +915.6793518 175553.88 +915.6826172 89893.97218 +915.7335815 81544.68621 +915.7588501 61772.52279 +915.8041382 88888.54766 +915.9744263 73606.37652 +916.0375977 152458.1407 +916.1164551 142840.6829 +916.1785889 94274.421 +916.2573242 163531.545 +916.2918701 71346.66189 +916.3262329 287427.7528 +916.3972473 189813.1294 +916.4042969 189229.2107 +916.4701538 193234.8887 +916.4715576 633494.9698 +916.5435181 693929.2155 +916.6131388 591646.5881 +916.6870575 556754.9391 +916.7593994 1955978.033 +916.8320007 590238.4658 +916.9022013 426589.0988 +916.9761658 195629.4647 +917.0431824 76860.32122 +917.0824585 74936.85928 +917.147522 103646.1063 +917.4708252 72420.80965 +917.4799194 84424.98196 +917.538269 119921.69 +917.5456543 216294.722 +917.6066895 173814.0394 +917.6159973 222031.4358 +917.6878459 770821.6595 +917.6928101 296363.7085 +917.7221069 79067.18936 +917.7579346 199952.2785 +917.7630005 922404.8636 +917.8352356 1328729.375 +917.9042358 1334110.875 +917.9763916 1422665.454 +918.0508423 2965136.162 +918.0510864 84188.84879 +918.1179077 614124.255 +918.1875 107060.0027 +918.1948853 277483.5078 +918.2628784 385993.2149 +918.3347778 236448.3674 +918.4086914 63764.80943 +918.6142578 158987.0172 +918.6925354 62530.12802 +918.7630005 97997.51403 +918.9064941 191419.8029 +918.9785461 163995.1147 +919.0491028 304156.0355 +919.1220703 179813.111 +919.1931763 304732.4016 +919.2236938 67320.7471 +919.3364258 226634.5142 +919.3971558 80115.90073 +919.4754639 126589.6646 +919.5402222 80811.26389 +919.5524902 95762.18846 +919.6233521 116843.3313 +919.6959839 70764.01026 +919.8362427 128410.9891 +919.9001465 115569.4203 +919.9075724 297478.8834 +919.979126 122848.7001 +920.0504761 88027.42446 +920.1196289 129417.8292 +920.1218465 248938.1249 +920.480896 104728.828 +920.5897217 65560.56097 +920.5997925 63588.81659 +920.6233521 122290.2387 +920.7281799 125646.0439 +920.7943115 67004.01511 +921.1680298 76959.56067 +921.1804199 61856.91106 +921.4775696 129446.3704 +921.5560303 94819.94827 +921.602478 79065.42361 +921.6952515 65393.33598 +921.8306274 111414.1237 +921.8696289 86498.08293 +922.3814087 91069.36802 +922.4855957 89776.95603 +922.5388184 116397.5204 +922.6949768 154699.5881 +922.7474976 82568.5475 +922.751709 195893.8618 +922.8021851 74566.34724 +922.8599243 220884.9299 +923.0673828 175128.3305 +923.0721436 82213.83714 +923.1141357 61589.77614 +923.1364136 746370.1429 +923.2060343 1256261.614 +923.2753906 1801205.502 +923.3372803 1477994.856 +923.3424683 143599.1432 +923.4060059 2123977.863 +923.4693909 272307.8202 +923.4712219 464353.0483 +923.5391846 1987698.321 +923.5690918 88198.34207 +923.6035767 997318.1795 +923.6697998 177724.5707 +923.6726685 139659.4209 +923.737915 88608.06637 +923.8029175 548050.1777 +923.8735352 192157.7877 +923.9388224 251666.5633 +924.0574951 65489.94335 +924.15448 67849.8723 +924.1774292 76659.64152 +924.2199097 67207.8711 +924.2349243 79803.34625 +924.3708496 120646.4427 +924.5834351 67838.02006 +924.6140747 60932.93039 +924.7686157 95503.86998 +925.6433716 87718.50029 +925.6665039 74594.31715 +925.7214966 104387.5173 +925.8027344 82814.44867 +925.8222046 65978.69915 +925.9754639 63061.97022 +926.0620117 66127.81396 +926.2546387 72798.96759 +926.4403076 74366.57156 +926.6260376 302456.0692 +926.6854248 78707.95547 +926.6934814 145487.4543 +926.7539063 67064.21528 +926.7838135 110175.9229 +926.9406738 85983.39171 +927.3182983 132222.8445 +927.3851318 180716.2572 +927.3930054 185486.9763 +927.4556274 286512.6247 +927.5201721 222859.7318 +927.5213013 219274.3951 +927.5845337 215357.2888 +927.6223145 82451.11502 +927.6558431 750189.7678 +927.6951599 115681.3358 +927.7227173 541601.2473 +927.7851868 393979.0423 +927.7908936 143930.5686 +927.8366699 297833.4817 +927.8425903 95897.06201 +927.9064331 155717.0422 +927.9259644 225309.4951 +927.9783325 86628.41497 +927.9899292 72016.28371 +927.9961853 156945.3244 +928.0176392 62396.35905 +928.050293 84247.53105 +928.053894 544943.9433 +928.0921631 63745.30002 +928.1972961 149630.9879 +928.375 159836.8651 +928.4483643 130814.9077 +928.508728 235764.0078 +928.5111084 154489.8352 +928.5785522 318769.5604 +928.6421509 359965.6686 +928.7055664 158416.2541 +928.7155151 93688.70021 +928.778717 247864.2398 +928.8086548 97647.92318 +928.8468323 158496.2681 +928.8889771 65788.61097 +928.9171143 162897.01 +928.9783936 106873.2913 +928.9813843 80080.54275 +929.2299194 97568.22124 +929.263916 89450.27931 +929.416626 117000.6632 +929.479126 171320.9396 +929.5430298 336735.0356 +929.605072 348892.3322 +929.6439209 60954.35849 +929.6697388 216214.8342 +929.7293091 83319.59325 +929.7666626 103327.3115 +929.789978 124131.0194 +929.8557129 100858.848 +929.8815918 81769.33971 +929.9136353 126367.8329 +929.9256592 179840.6109 +929.9849854 88023.95965 +930.1188354 75644.74288 +930.1250305 130673.1115 +930.1898804 1091088.729 +930.1965332 127641.5754 +930.255127 754573.8415 +930.2893677 82867.747 +930.3203125 262957.8106 +930.3222046 772524.6286 +930.3887126 642407.6814 +930.3921814 396332.0458 +930.4171753 215838.7185 +930.4505615 151082.4875 +930.4537201 785547.0799 +930.4781799 486875.9635 +930.5231934 1174174.383 +930.5406494 400313.3471 +930.543396 203917.56 +930.5879517 426341.552 +930.6056519 423641.1374 +930.6548157 243036.4853 +930.6668701 620075.597 +930.7256063 920314.2497 +930.7892151 810590.9658 +930.8538818 463974.6361 +930.9162598 316174.5787 +930.979187 87359.95419 +930.9841309 355855.7578 +931.0469666 220690.1543 +931.0539551 76092.68159 +931.1098022 119535.6329 +931.1229553 152826.7106 +931.1654358 74277.67117 +931.1932373 151440.3199 +931.2645264 938550.3029 +931.3032227 128675.2905 +931.3340454 170014.4606 +931.4093628 1037099.825 +931.4459635 300181.8351 +931.4743652 136011.6698 +931.5495605 72128.06469 +931.555603 68866.68086 +931.5889893 331640.6468 +931.6237793 76932.77886 +931.6351929 61312.72837 +931.6572266 75014.17225 +931.7301025 140664.3409 +931.7315063 1319707.633 +931.7923279 120509.5196 +931.8779907 1014533.694 +932.0190633 423182.7577 +932.097229 62162.86143 +932.162618 311035.0448 +932.1868591 141396.0414 +932.2219238 68186.38652 +932.2573242 65161.81999 +932.2808228 85043.40931 +932.3051758 165072.2412 +932.4495239 107026.6377 +932.5578613 72044.89791 +932.5927124 80107.1143 +932.78479 125397.2222 +932.8505859 64398.90616 +932.8878174 66460.28546 +932.9176941 179868.5969 +932.9873199 640997.4813 +933.0522257 357441.3297 +933.1203003 97861.8055 +933.1235657 644918.9039 +933.1880188 311244.1124 +933.1921387 248531.2364 +933.2549133 696830.0875 +933.3201294 74061.81541 +933.3231812 551708.1698 +933.3892517 475938.787 +933.4161987 105261.1539 +933.4570923 321773.3923 +933.4769592 121999.8402 +933.5232544 126608.706 +933.5582886 129301.4402 +933.5870056 333801.5934 +933.6576538 120487.2591 +933.7323303 308199.8415 +933.836853 70703.83932 +933.8759155 619203.8227 +933.987793 84196.15944 +934.0178833 1469647.751 +934.0540161 74137.21495 +934.161967 592122.9949 +934.2312012 71521.01198 +934.3043823 1505059.864 +934.4476929 982620.7742 +934.5320435 233388.3169 +934.5892334 76294.78965 +934.5936279 1237141.659 +934.6569214 70846.19048 +934.6662598 88262.79833 +934.7382202 1239359.069 +934.7960205 139329.7868 +934.8247375 116385.3476 +934.8788452 63380.72159 +934.9095459 121158.7354 +934.9967651 100596.1057 +935.0493164 84683.51881 +935.057312 76776.75895 +935.1304321 78556.29611 +935.1606445 72995.96091 +935.199585 270464.0242 +935.2648926 80127.49932 +935.3376465 87776.61197 +935.4088745 83603.30362 +935.5204468 83548.15047 +935.6658325 94826.12537 +935.696228 105020.4078 +935.7290649 153252.7725 +935.7703857 85448.75894 +935.7836914 127294.6468 +935.8269958 75706.87037 +935.9903564 98119.74653 +936.0161133 82154.91452 +936.2629395 91002.3032 +936.302124 81998.53327 +936.3268433 69364.36215 +936.3436279 75025.57612 +936.4176636 90053.00833 +936.4750366 69326.11954 +936.5470581 90846.69632 +936.5901489 83223.25462 +936.6205444 111495.4864 +936.6898193 100041.3853 +936.7142029 150257.3991 +936.7327881 106769.1391 +936.7930908 89523.41591 +936.9024658 86742.41459 +936.9968872 87145.08618 +937.0223083 143519.3432 +937.1541748 72163.16319 +937.1974487 104762.9849 +937.298645 78004.73544 +937.3250732 90587.27713 +937.4061279 79756.68849 +937.4963379 90923.37017 +937.5012817 71320.37641 +937.5298462 100275.4256 +937.5917969 84118.27728 +937.6134644 66274.36538 +937.7279053 81225.21983 +937.878479 85869.06795 +937.9547729 87739.52292 +937.9760132 85208.82133 +938.0247803 73836.74573 +938.1035156 152339.8199 +938.1587219 138379.2267 +938.3023071 283079.7344 +938.4447632 113820.907 +938.4752197 76572.395 +938.4942627 77082.29889 +938.5498352 103318.2412 +938.5575562 99784.13411 +938.5901489 747668.3948 +938.7346598 376407.8586 +938.7672424 104457.4847 +938.8397217 112669.9875 +938.8423462 72559.10441 +938.8783264 206951.1658 +938.883728 91037.52196 +938.9110718 90252.79942 +938.9384766 141380.3967 +938.9661255 77900.02689 +938.9946899 861330.9974 +939.0481873 505258.6507 +939.0517578 230870.5518 +939.1060791 1876131.315 +939.1604004 547561.6664 +939.1623535 2425126.043 +939.2167358 1916111.233 +939.273763 1767937.52 +939.3280334 1107980.777 +939.3842163 1518394.178 +939.4393921 333757.7696 +939.4435221 794939.8608 +939.4960327 1368005.585 +939.5518188 1284469.435 +939.6068115 175504.3515 +939.6868896 75709.77842 +939.7765198 127813.3922 +939.8770752 170618.5803 +939.9785767 76632.96994 +940.0489807 211786.3149 +940.0792847 58467.99211 +940.1624146 67323.8014 +940.196228 72668.43776 +940.2620239 69888.06162 +940.3859253 77762.78855 +940.6251831 66095.03246 +940.6828003 97251.13282 +940.699585 75482.00237 +940.7325439 76850.924 +940.8065186 139442.1318 +940.8408813 109329.8162 +940.8721313 208256.5348 +941.0271912 243949.2702 +941.1101379 221163.1723 +941.1975911 333733.3343 +941.229187 73738.609 +941.2692871 73794.03433 +941.277832 1407758.148 +941.2811279 91628.60153 +941.3422241 92051.759 +941.3621216 116279.7553 +941.4443054 269610.6597 +941.4842529 82074.3302 +941.5263062 128721.2381 +941.6118774 71526.84889 +941.772583 82988.73292 +941.8676758 526613.8561 +941.9580688 846419.3204 +942.049174 295950.6849 +942.1400757 557063.3303 +942.2319336 78533.99181 +942.4975586 73475.09233 +942.5493774 126070.3527 +942.6253052 1112769.167 +942.6969604 884531.4089 +942.7313232 89236.3641 +942.7682495 3540473.647 +942.7717285 100831.9258 +942.840271 3834707.86 +942.9118042 3738600.637 +942.9823608 5078781.447 +943.0541992 4604544.651 +943.1262817 4699351.596 +943.1505127 57814.64029 +943.1972046 1710873.871 +943.2700195 2388282.963 +943.3391724 437356.7797 +943.3423462 217407.1642 +943.4130656 718718.2629 +943.4465942 57357.05923 +943.482666 774342.0893 +943.5496826 73993.00955 +943.5564575 92771.16808 +943.7767334 69602.23283 +943.8375854 110310.1578 +943.9086914 77480.249 +943.979248 86901.50409 +944.052887 205488.2773 +944.0760498 65567.00458 +944.1263428 908421.5448 +944.1975098 156983.157 +944.2112427 91168.10518 +944.2574463 186638.9526 +944.2698364 160620.1516 +944.3403015 205079.3966 +944.4110718 153342.1642 +944.4371948 379535.1661 +944.482666 259762.3577 +944.5030212 164652.0477 +944.5280151 77688.7545 +944.5742798 771204.7587 +944.6137695 344252.4236 +944.6952515 73798.38989 +944.7223206 194670.3886 +944.7865906 158893.8198 +944.8644714 146253.189 +944.9484863 96566.70353 +945.0043945 60012.47641 +945.0346069 65366.0059 +945.0516357 88576.41033 +945.0863647 72637.32258 +945.1858521 76179.87548 +945.4074707 67756.16924 +945.4486694 88689.76152 +945.6403198 78725.69964 +945.7290039 82701.31887 +945.7542114 62482.50396 +945.9560547 96027.26197 +946.1977844 77626.63979 +946.3145142 105633.6955 +946.4595947 65885.54427 +946.6738892 433097.4184 +946.6890869 79526.09705 +946.7492065 142937.6849 +946.765625 110492.6448 +946.8179321 824453.8525 +946.8882141 68699.46421 +946.8916321 224092.8848 +946.9597778 113459.9389 +946.9613037 217854.4452 +947.0338745 459716.4407 +947.0993652 73474.85155 +947.1030579 206895.7688 +947.1748047 220979.6339 +947.1901245 65095.16847 +947.87677 79513.15321 +948.0953674 81237.59823 +948.1194763 74307.60448 +948.12323 71440.97342 +948.1615601 76920.4265 +948.3196411 84293.94887 +948.8687134 122232.099 +948.9584351 90400.21069 +949.0318604 100124.233 +949.2126465 100737.3799 +949.3701782 116908.883 +949.4000854 158660.1815 +949.4560547 78389.42304 +949.4960938 77222.56134 +949.5236816 65919.65477 +949.6748657 102387.0192 +949.8861084 89946.05157 +949.916626 60783.71331 +950.0345459 116245.9973 +950.107605 103027.8838 +950.1236572 70258.10838 +950.2893066 72839.44267 +950.4163208 503479.4764 +950.6886597 93010.14639 +950.8145752 78291.95071 +950.8677979 73231.98054 +950.9613037 80928.80424 +951 62588.80208 +951.0559692 90972.3842 +951.1641846 100781.6119 +951.2506104 85967.97648 +951.4464722 64830.20523 +951.5045166 109058.9291 +951.5751648 121226.1834 +951.875 121997.6012 +951.9365845 116082.7812 +952.1867065 60999.81554 +952.2437134 62872.75215 +952.3104858 66327.27519 +952.3419189 76667.28321 +952.4954834 94127.42981 +952.6538696 141746.9474 +952.7265015 402799.3918 +952.796875 539807.4328 +952.8666382 300136.2671 +952.9398193 362835.9108 +952.9577026 90654.34787 +953.0132446 130066.0178 +953.0836792 210340.1415 +953.2268677 155067.0349 +953.2954712 142119.9299 +953.4447021 62516.40796 +953.4940186 60508.65065 +953.5973511 100966.6463 +953.784729 62673.22662 +954.0020752 108469.7654 +954.324707 56878.03973 +954.8063965 77647.43944 +954.921814 76365.66015 +955.4869995 74153.42334 +955.7967529 131791.8286 +955.8831787 217649.151 +955.957255 390303.8561 +956.0363159 814443.5404 +956.1133219 1238365.442 +956.1906128 320841.0664 +956.1908569 1438489.811 +956.2670288 1755459.596 +956.3436483 1303708.945 +956.4219564 1759183.42 +956.4974365 1215010.27 +956.5761414 572932.8029 +956.6536255 474446.6522 +956.7332764 199621.9865 +956.8102417 89950.29794 +957.0244141 64376.21744 +957.2646484 148208.2747 +957.3057251 81517.22557 +957.3394775 89075.36133 +957.3440552 455625.7034 +957.4201355 460445.1628 +957.4983114 434192.8677 +957.5730896 472492.8132 +957.6524963 532519.5275 +957.7306519 197043.8512 +957.7311401 266961.365 +957.8050537 241858.325 +957.8839722 269859.0255 +957.9899902 68197.52538 +958.1908569 90106.618 +958.2658691 121949.3597 +958.3049927 140088.4054 +958.3446045 118086.8794 +958.428772 57591.44631 +958.4890137 147194.347 +958.651886 147756.613 +958.7265015 176611.254 +958.8048706 194094.7492 +958.8832397 206684.9653 +959.0306396 99308.99828 +959.4175415 70332.97876 +959.7720947 61457.43313 +960.1135864 78684.76099 +960.1262817 73404.93878 +960.1963501 83905.56648 +960.334259 147827.6661 +960.3781128 58264.55468 +960.3964233 93973.9427 +960.4923706 114029.0298 +960.5023804 65774.31571 +960.5496216 77180.17584 +960.5922852 140172.6964 +960.7456665 97884.61213 +960.8004761 75133.63749 +960.8424072 107514.4215 +960.8774414 91883.1465 +960.9568481 128733.5281 +961.5695801 126804.0387 +961.9776611 88424.76998 +962.0140991 85368.17055 +962.1355286 81170.53828 +962.2061768 84263.357 +962.3624878 68680.51387 +962.6920166 80387.93117 +962.9200439 61723.73438 +962.9625854 101249.6788 +962.982666 281313.2535 +963.0503845 202633.9356 +963.0509644 115709.0586 +963.119812 78227.27799 +963.1791382 134500.6 +963.2486979 699782.3496 +963.3173421 518278.7488 +963.3869019 328651.0063 +963.4528809 116238.0564 +963.6013794 60436.7541 +963.8136597 72928.61633 +964.1676636 104739.7017 +964.2535095 89052.22221 +964.277771 65774.99048 +964.2947388 88656.80261 +964.3623657 120623.8104 +964.3912964 73675.88391 +964.4671021 59570.60035 +964.5046387 75613.6863 +964.5926514 87434.10043 +964.8393555 111958.3193 +964.8596802 95203.764 +964.923645 103135.5726 +965.1842651 98733.35887 +965.7700806 67413.58114 +966.0596924 133307.6095 +966.2016602 116348.8034 +966.6478271 71668.17412 +966.9651489 154322.8475 +967.1888428 70957.43357 +967.1969604 132447.7114 +967.2241821 70732.05514 +967.329071 69884.16907 +967.3341064 121152.9961 +967.3855591 68878.76105 +967.416748 92197.31019 +967.7382507 107911.6739 +967.8861084 61995.89953 +967.9648438 113915.958 +968.0426025 612126.6775 +968.1186523 1002145.383 +968.1966553 2665055.399 +968.2252808 73520.68954 +968.2724406 3182297.739 +968.3504639 268829.7918 +968.3513794 2096997.622 +968.3952026 108350.4022 +968.4276733 4282287.987 +968.5036214 1289414.368 +968.5150146 245696.4177 +968.5800171 739288.9032 +968.5812378 886858.5975 +968.6099854 156623.6763 +968.6589966 1217052.824 +968.6967367 642335.4416 +968.7360229 1033930.64 +968.7860107 380986.1591 +968.8128662 275690.6096 +968.8759155 173386.7091 +968.8868103 203916.959 +968.8909912 85425.41607 +968.9682617 507957.1185 +968.9725952 230518.5732 +969.0559692 89199.50062 +969.2716064 84834.76782 +969.413269 57373.19957 +969.4246826 199541.9989 +969.5047607 186888.4802 +969.5750122 79144.61076 +969.5826416 100247.9166 +969.6566772 99924.99813 +969.7183838 75914.04331 +969.7833252 155530.5127 +969.8379517 64084.33589 +969.8704834 99721.74002 +969.8736572 114224.2382 +969.942688 80577.04601 +969.9680481 228819.8057 +970.0152588 68497.70895 +970.0578308 175260.0082 +970.0940552 68711.024 +970.1449585 77068.65765 +970.2418213 109455.3626 +970.4260254 417006.3682 +970.6237793 67576.04296 +970.7366943 69343.60325 +970.920166 74440.75332 +971.1923218 91844.10087 +971.3320923 60982.28888 +971.4449463 94393.87137 +971.4944153 177835.7204 +971.5762329 527687.4267 +971.7151489 87151.41736 +971.7902222 88036.82257 +971.9528809 59111.40431 +972.2674561 154028.5576 +972.5039063 91504.84729 +972.6452026 61513.26115 +972.6511841 124838.7151 +972.7407837 85898.03292 +972.9945679 71397.07983 +973.1270142 73217.51598 +973.2462158 116759.8931 +973.3061829 93332.66334 +973.3567505 86801.68578 +973.3944702 133857.6422 +973.5033569 140765.3067 +973.5510254 129133.3717 +973.6258545 91436.65523 +973.7060547 81849.24969 +973.7380981 112488.1808 +973.7875671 209573.1041 +973.8543091 275346.112 +973.8859863 66749.81414 +973.9046631 193762.4747 +973.9251099 57373.07121 +973.9592896 80386.44496 +973.9634399 261158.213 +974.0133667 101942.5276 +974.0448303 102989.2833 +974.0545044 132639.6942 +974.1253052 95545.68607 +974.1748657 89526.02246 +974.2368774 170746.0453 +974.3490601 57320.72298 +974.4233398 109547.3386 +974.4992065 87631.23974 +974.5040894 194929.5101 +974.5855103 98819.27797 +974.6233521 96218.42793 +974.7400513 75559.94977 +974.7505493 63615.05806 +975.0217285 57464.94063 +975.0413208 99219.12886 +975.0646057 156780.17 +975.1932983 180319.8787 +975.2832031 93487.16489 +975.5126343 60636.76381 +975.5878296 114067.3552 +975.644165 74052.68429 +975.7080688 73794.66184 +975.7401123 72437.32013 +975.7557373 82958.63389 +975.7653809 82379.93027 +975.829834 60661.20508 +975.8704224 130605.3306 +975.894104 81919.67571 +975.9781494 186666.8893 +976.0389404 94579.21939 +976.09729 61839.03742 +976.1245728 121208.6947 +976.1979574 425973.9221 +976.2753601 223464.5441 +976.2819214 62484.38527 +976.3477783 192355.2961 +976.3539124 172452.8157 +976.3667603 238175.76 +976.4287415 131119.7756 +976.4423218 132162.6329 +976.5247803 318711.286 +976.5813599 628479.5371 +976.5965576 424288.7875 +976.6567383 259037.3227 +976.6761475 359970.2876 +976.7537231 492039.6229 +976.8287964 253919.7142 +976.9063721 237654.7666 +976.963501 81197.90493 +976.9838867 149060.093 +977.0471191 83296.65717 +977.0515137 80855.22088 +977.1148071 73689.12686 +977.135376 63363.05561 +977.1957397 416442.3042 +977.2778015 152318.8538 +977.3499756 118947.4758 +977.3560486 216247.3029 +977.4180908 206998.2519 +977.4266968 208759.3437 +977.4318848 108455.7279 +977.4993896 149909.3198 +977.504364 356533.6884 +977.5144348 283159.2576 +977.5819092 585552.743 +977.6590576 95091.58307 +977.6636658 76346.54617 +977.7191772 85033.26625 +977.7383118 300019.2872 +977.8187866 270894.9402 +977.8905029 90813.47573 +977.8919067 108141.5424 +977.9675293 277705.4172 +978.1105347 75919.64185 +978.2442322 121403.3324 +978.4283752 83530.07261 +978.5085449 604223.848 +978.5807495 218077.3062 +978.5831604 120591.7977 +978.6568604 59694.56687 +978.678833 80946.73809 +978.7141724 80251.0318 +979.0460409 259886.9146 +979.0606689 70271.73198 +979.0908203 83936.12993 +979.2033081 74404.66862 +979.2718506 68993.11792 +979.3533936 498811.4743 +979.361084 83113.35105 +979.4276123 171684.91 +979.4313354 115446.2473 +979.5024414 1158676.865 +979.5116882 205953.7377 +979.579071 146040.7665 +979.5863647 315978.9684 +979.6579285 285636.347 +979.6615601 193560.9846 +979.7371826 1016742.798 +979.8140259 1052869.019 +979.8225098 78738.11126 +979.888916 136146.6775 +979.8919067 571309.0334 +979.9440308 59777.42888 +979.9703674 171372.5492 +980.0158691 73975.38195 +980.0483398 77209.77242 +980.0895996 87713.06334 +980.1245728 58652.06139 +980.1773682 88872.46777 +980.1990356 113632.0022 +980.2767334 87760.99124 +980.3308716 126255.5234 +980.3518372 132885.9931 +980.4294739 265359.0778 +980.4338074 322833.4972 +980.5061035 3679991.825 +980.5851644 7942852.945 +980.6621094 17251387.48 +980.7393188 22987250.97 +980.8165894 25818876.82 +980.8933105 28609843.79 +980.9703369 29635074.81 +980.972168 1681139.282 +981.047526 23497363.65 +981.1245422 18356254 +981.2017059 13051163.66 +981.2789307 9690577.786 +981.3557129 7104821.669 +981.4327087 2837723.253 +981.5089722 2489378.782 +981.5110168 552906.143 +981.5873006 1211299.808 +981.6592102 214572.2157 +981.6610107 117015.9211 +981.738444 608781.2216 +981.7418518 260567.2637 +981.8141479 1256101.881 +981.8921021 1176807.702 +981.9703979 3566064.174 +981.9716492 575651.427 +982.0465332 2666334.326 +982.1231079 5167157.452 +982.2003784 5280918.281 +982.2026672 571790.2521 +982.2778931 3467744.364 +982.3546143 2838956.118 +982.4307251 433430.4449 +982.4324951 1695270.536 +982.5078278 1142476.865 +982.5854085 948702.7546 +982.6121826 86765.11393 +982.6641032 876030.6806 +982.7020264 218956.7002 +982.7404785 945980.4645 +982.7929484 811549.6667 +982.8845093 593109.458 +982.9758911 1237799.907 +983.0672404 935640.3219 +983.1219482 207047.6576 +983.1547852 703874.6072 +983.1922607 86880.78732 +983.2495728 924119.6576 +983.2781372 173899.7293 +983.3374634 137717.6857 +983.342041 126748.2058 +983.3533936 92107.8742 +983.4325765 323350.2905 +983.5828247 87739.09833 +983.664856 68370.57758 +983.7307129 77696.41723 +983.7417603 93998.70298 +983.8166809 126882.1395 +983.8899536 108641.5657 +983.9681396 167826.2837 +984.4937134 84187.30359 +984.5759888 91994.79802 +984.5852661 76566.96161 +984.6624146 100320.4102 +984.733785 620536.4748 +984.809082 1413990.289 +984.8173218 93667.71494 +984.8860474 1248546.995 +984.9637451 1626626.514 +985.0384827 356500.7807 +985.0441284 551452.4367 +985.1166382 1118252.379 +985.1974487 821261.2613 +985.270813 145184.0053 +985.2711792 843962.5378 +985.3450928 87167.55626 +985.3524475 213648.3612 +985.4000854 73160.12887 +985.4284058 810900.6547 +985.4313354 176564.1402 +985.5009155 77108.718 +985.5198975 194005.5022 +985.6099854 130985.9371 +985.6118774 93201.08381 +985.7927246 206270.4353 +985.885498 261567.837 +985.9762268 306784.4717 +986.0672302 183955.6564 +986.2492676 105236.6298 +986.2701416 132031.1554 +986.4330444 76943.32607 +986.5811768 82530.49842 +986.6595459 228570.0179 +986.7397461 104447.1486 +986.791687 121734.5278 +986.8137817 820633.3883 +986.8924561 437575.9769 +986.9691162 83438.14293 +986.9716187 465948.4404 +987.0470886 309567.8062 +987.1228027 515611.6272 +987.1999512 93551.39731 +987.2022705 319001.8255 +987.2776489 272747.3612 +987.3098755 61773.15301 +987.3569336 91961.00087 +987.4316101 230158.3742 +987.5079956 97827.98373 +987.6843262 88143.26782 +987.8235474 155239.0065 +987.9682007 113647.2072 +988.1201172 89933.36396 +988.1253662 194387.1243 +988.197876 93155.65941 +988.2032166 273383.4921 +988.282486 1230138.203 +988.3567505 243018.8288 +988.3630066 530506.2445 +988.4292603 173247.6815 +988.436971 864644.7071 +988.5099487 177452.8895 +988.5142619 1247381.208 +988.5852051 84393.87032 +988.5916748 614850.7716 +988.6332397 70275.39095 +988.6656799 619382.2079 +988.6711426 84983.59034 +988.7460632 393825.7468 +988.8178711 110013.2003 +988.8218994 259745.5014 +988.9331665 87692.98324 +989.0039673 118188.9601 +989.0751648 204136.6562 +989.1473389 1386306.619 +989.1899414 72576.6743 +989.2198792 212804.4362 +989.2229004 355048.2981 +989.2908325 132931.5968 +989.2931519 275593.5759 +989.3607788 75002.71652 +989.3639323 392726.6546 +989.4345093 990425.5858 +989.5057373 735962.3118 +989.5767822 96273.2875 +989.5944824 153325.6337 +989.6448975 133352.4594 +989.7745972 94626.37155 +989.8452759 93614.59432 +989.9049683 97126.37903 +990.0545654 161063.2079 +990.184021 88168.79453 +990.2681885 70121.89771 +990.326416 73726.24761 +990.3744507 66005.99327 +990.5118713 299270.5105 +990.6582642 87436.95785 +990.6679688 78161.73318 +990.6709595 92543.28692 +990.7766724 128581.638 +990.8911743 113564.8647 +991.112915 106549.4418 +991.2457886 93885.56447 +991.3104858 209828.2945 +991.3803101 195835.4161 +991.4452515 256298.0455 +991.508667 243641.1129 +991.5801086 262908.2947 +991.6463623 350169.3256 +991.7806396 92467.64576 +991.8985596 75316.81102 +992.3147583 141673.3152 +992.3757935 97831.39184 +992.4328003 92689.28437 +992.4445801 183695.1572 +992.5081177 138685.9332 +992.5117188 171054.6716 +992.5315552 66576.19134 +992.5764771 210252.0815 +992.6395874 128196.2474 +992.6450806 419418.5131 +992.7102966 472660.1148 +992.7763672 231843.5369 +992.840271 75296.38541 +992.8435669 329932.2621 +992.9098206 353536.5722 +992.9776611 147207.185 +993.0461426 112237.0741 +993.0604248 72868.75145 +993.5701294 94686.22492 +993.6303711 138195.8851 +993.6991577 88176.66358 +993.7041626 137902.092 +993.7682495 80401.11189 +993.7740479 310137.2063 +993.8441772 393235.7462 +993.9176025 283736.5861 +993.9874878 284657.3694 +994.0164795 77643.6843 +994.0628052 171791.422 +994.1091309 81440.00052 +994.1314087 142842.4238 +994.1425781 129258.9666 +994.1698914 313012.9433 +994.1716919 92354.65092 +994.229187 958950.0591 +994.28125 76884.35345 +994.2970276 245155.2972 +994.3464152 798563.0651 +994.4076538 729446.873 +994.464325 328355.8867 +994.5123901 95283.32212 +994.5230713 694016.2494 +994.5808716 81503.06631 +994.611145 139073.6711 +994.6416016 164306.3978 +994.6986694 85399.47273 +994.701416 87695.21892 +994.7578328 566429.5088 +994.832428 299539.6115 +994.9032288 199037.1606 +994.9758606 377618.0733 +995.0367432 111639.3525 +995.0553589 81667.22292 +995.116333 700777.4531 +995.1937256 176166.2657 +995.6098022 183615.6878 +996.3703003 82453.07786 +996.4724121 70557.81864 +996.623291 83661.44397 +996.6317749 247580.2427 +996.6999817 285044.46 +996.7020264 58783.46026 +996.772644 1068627.205 +996.840271 169240.0861 +996.8493042 100766.3072 +996.8891602 61228.16397 +996.9161377 780454.9167 +996.9880371 856983.8979 +997.0568237 835849.8644 +997.131073 160347.8646 +997.4009399 75536.09128 +998.1056519 130683.5886 +998.2733765 135979.1603 +998.383728 82550.5301 +998.4316406 163045.1099 +998.7686768 84633.97164 +999.0526123 67025.64791 +999.0740967 100748.8817 +999.1351929 85136.08261 +999.1494751 107277.398 +999.2077637 87820.36054 +999.2744141 100626.1668 +999.2860107 105282.9926 +999.4128418 67601.53841 +999.4829102 124728.3381 +999.5239258 90095.3799 +999.5572103 567632.6542 +999.5925903 183964.0619 +999.6317749 186189.5967 +999.7004395 432557.1148 +999.7695923 77220.18067 +999.7735901 459876.1238 +999.8446655 440956.173 +999.9190674 311700.7214 +999.9503784 64046.98945 +999.9867554 83622.15131 +999.9935913 179762.1913 diff --git a/mzLib/Test/DataFiles/groupOne.txt b/mzLib/Test/DataFiles/groupOne.txt new file mode 100644 index 000000000..2a13d7d77 --- /dev/null +++ b/mzLib/Test/DataFiles/groupOne.txt @@ -0,0 +1,20 @@ +5.629606803 +5.690018687 +5.754344433 +5.823124472 +5.897019573 +5.976849364 +6.063647781 +6.158744968 +6.263892426 +6.381462368 +6.514780614 +6.668718103 +6.850826429 +7.073756701 +7.361225443 +7.766477184 +8.459410946 + + + diff --git a/mzLib/Test/DataFiles/mZchargeIsdProteoformSpectrum.txt b/mzLib/Test/DataFiles/mZchargeIsdProteoformSpectrum.txt new file mode 100644 index 000000000..65675d9bb --- /dev/null +++ b/mzLib/Test/DataFiles/mZchargeIsdProteoformSpectrum.txt @@ -0,0 +1,321 @@ +652.1062622 14791511 +652.1843872 15777977 +652.2619629 12510912 +654.6260986 35857808 +654.6976318 17019866 +654.7689819 58401964 +654.8408813 17852938 +654.9125977 24100300 +654.9840088 43632200 +655.0553589 11371328 +686.6240234 16165475 +686.9586792 16593962 +688.125 11880116 +694.7825928 14090113 +694.9509888 20133478 +695.1173706 13285802 +703.9019775 12461640 +704.7507324 37480212 +704.8270264 99390960 +704.9040527 196929520 +704.9813843 205038048 +705.0584106 216720800 +705.135437 194496240 +705.2125854 175232784 +705.2897339 77919256 +705.3666992 46488860 +705.4436035 29242636 +705.5209961 26947722 +705.5986938 16427214 +706.1982422 11080248 +706.2821655 12748066 +706.3659668 47850260 +706.4500122 40054140 +706.5325928 67995528 +706.616333 35629640 +706.7004395 20429342 +706.7835083 17969934 +706.8673096 20062544 +728.9408569 14439953 +740.8353271 11235500 +742.6777954 17243934 +745.6409912 12479834 +747.4984131 11575700 +749.0438232 23281046 +757.8538208 12505314 +757.9447632 21257164 +758.1276855 11820129 +758.3103027 14328651 +759.9786377 11005764 +760.0609741 18189090 +762.1434937 11668699 +762.2275391 14396652 +762.3121338 21642906 +762.3925171 11500500 +762.4784546 39131144 +763.3118896 13305679 +763.3951416 96977440 +763.4788818 209215088 +763.5622559 441102752 +763.6459351 538729600 +763.7293701 529424096 +763.8128662 529209760 +763.8963013 387044672 +763.9797363 255423120 +764.0632935 149476256 +764.1466064 123608304 +764.2303467 51593104 +764.3141479 25435398 +764.3988647 17598750 +766.810791 14824811 +767.395813 12650237 +769.0342407 12382877 +770.3064575 27754690 +770.3978271 51835572 +770.4894409 58468732 +770.5800781 81938424 +770.6712646 78644464 +770.7628174 70329216 +770.8540649 65044148 +770.9442139 35971556 +771.0361938 29594470 +775.6743774 15051393 +807.1268921 15495139 +807.2271729 19016620 +807.3311157 13728924 +810.4194336 15431202 +813.5164185 15593410 +821.510437 18139466 +822.5216675 12376154 +823.6451416 16088220 +823.8479004 11607829 +824.0491943 12932330 +827.7038574 13450537 +829.0652466 11655231 +829.3533936 12048255 +831.2487183 13768692 +831.3383179 25317686 +831.430603 25168942 +831.5231934 13422528 +831.6106567 30301890 +831.7035522 15527160 +831.9451294 14737640 +832.0310669 11419004 +832.2820435 12942895 +832.3642578 16365947 +832.4492798 22646906 +832.5310669 20778018 +832.6118774 27616368 +832.7034302 175091600 +832.7945557 390131200 +832.8856812 679944000 +832.9765625 938835328 +833.067749 998247296 +833.1587524 813055424 +833.249939 606076608 +833.3409424 466874912 +833.4324341 285712384 +833.5231934 183555184 +833.6140747 95987464 +833.6390991 19815506 +833.7053833 60650176 +833.7391357 29628664 +833.7962036 12741188 +833.8392944 26158728 +834.0409546 12154892 +834.8637085 17209890 +835.6144409 12692775 +837.1587524 12439526 +841.3508301 13633599 +847.2357178 21948614 +847.3374023 52061788 +847.4373169 113795312 +847.5375366 116287720 +847.6377563 94660336 +847.7381592 110085296 +847.8383179 53907308 +847.9389038 50920328 +848.0391235 35309804 +848.1390381 23392410 +848.2385254 11658939 +880.1010132 11031067 +882.545105 14608120 +882.876709 12186769 +884.4719849 11524440 +884.5491943 11662939 +884.7793579 17057504 +889.4751587 11065309 +895.2036743 11228434 +906.0585938 12135037 +907.4880371 14630877 +907.5750732 11108846 +907.6681519 23772416 +907.7602539 24345732 +907.9425049 28968842 +910.6669312 16106784 +910.767395 12278432 +911.8818359 11383207 +912.3660889 14737892 +914.4701538 29620690 +914.5755005 17544100 +914.675354 11240959 +915.7723389 39999744 +915.8731689 222605408 +915.9729004 412246240 +916.0733643 762322048 +916.1735229 1026340800 +916.2737427 1082594944 +916.3739014 1014323712 +916.4740601 739157568 +916.5742798 498369120 +916.6743164 291857824 +916.7748413 188167024 +916.8751831 117580344 +916.9754639 70711832 +917.0756226 25078434 +917.2769775 12474187 +919.0739746 11021077 +919.1721802 15845738 +920.2737427 13563339 +920.3719482 11964774 +920.5733643 17651826 +925.9292603 14415217 +926.265564 13939547 +939.2338257 18766556 +939.4569702 12185814 +939.6793823 11179960 +939.7905273 12244200 +941.2626953 15180531 +941.3739014 51759820 +941.4849854 77929688 +941.5965576 112870408 +941.7078247 103599488 +941.819397 83906080 +941.9309692 55268604 +942.0427856 51183468 +942.1533203 27848450 +962.6824951 11372412 +971.7062988 13641426 +971.7822266 15977763 +971.963562 13805373 +987.1569824 12016832 +990.2660522 11219212 +998.3360596 15937494 +998.4350586 18611508 +998.5353394 21832878 +1011.849854 13059040 +1012.000488 11478013 +1013.073853 11128338 +1013.39856 11485724 +1013.430176 11829362 +1015.861023 13310678 +1015.967102 17252948 +1016.083618 12420421 +1016.301453 15093334 +1017.41394 36325524 +1017.524536 147668368 +1017.635864 351822240 +1017.747375 539698944 +1017.858643 749279872 +1017.970032 749514176 +1018.081238 782189312 +1018.192688 591090176 +1018.304016 416631296 +1018.415283 254472576 +1018.526794 150140800 +1018.638062 53780984 +1018.749817 42996092 +1018.860474 15006449 +1019.316589 13885022 +1020.413757 11598293 +1020.522095 13371313 +1022.523926 15260003 +1022.632446 13317767 +1022.858093 14804771 +1023.079773 14507239 +1024.522949 11077033 +1026.127075 11983496 +1041.544189 13642404 +1041.797485 12919102 +1042.045776 12486296 +1056.762329 17558964 +1058.793823 22123338 +1058.918823 36936348 +1059.044922 45328056 +1059.170288 45771124 +1059.295776 72356728 +1059.42041 66609620 +1059.545898 45001452 +1059.670898 24331772 +1059.797119 12413246 +1108.927124 13418942 +1109.148926 23383042 +1109.259888 23009692 +1109.37146 23561716 +1109.483276 11169070 +1109.594849 13394675 +1139.715332 11020316 +1144.462524 22193462 +1144.588623 87274048 +1144.714355 244496144 +1144.8396 365660672 +1144.964966 512584864 +1145.09021 467546016 +1145.215576 489267584 +1145.34082 424338944 +1145.466187 298426016 +1145.591431 178730336 +1145.716797 129730256 +1145.841675 55048588 +1145.967041 32855116 +1147.962158 20271546 +1149.711548 12111152 +1149.911011 11534112 +1150.337158 14552064 +1150.588135 19291796 +1153.212769 13544599 +1153.592651 12651138 +1158.454224 12133183 +1164.498291 13553955 +1173.736694 13800931 +1207.728882 13037666 +1208.014404 11209534 +1210.050781 32828162 +1210.193237 39712004 +1210.336792 57466416 +1210.478271 43402044 +1210.622681 31703184 +1210.765381 16897226 +1210.909424 20464378 +1247.668457 11514443 +1247.790771 17587218 +1248.04126 12786497 +1307.816162 17374346 +1307.957153 53373336 +1308.100952 98420952 +1308.244629 183928032 +1308.387451 285638368 +1308.530518 214158640 +1308.67395 237021504 +1308.817017 201713328 +1308.960449 122110488 +1309.103271 86130056 +1309.247314 36729992 +1309.390137 34622996 +1311.812012 12297507 +1314.241455 14163676 +1317.385986 11304500 +1411.894043 17241924 +1412.057373 12331733 +1412.391357 11083990 +1412.559326 11050775 +1525.782104 19463104 +1525.949341 19889274 +1526.117065 42322040 +1526.284546 56104124 +1526.452148 62879176 +1526.618164 46504852 +1526.786011 33689204 +1526.953491 24218252 +1527.115112 11749816 +1527.289063 12503161 diff --git a/mzLib/Test/DataFiles/mZchargeTwoProteoformSpectrum - Copy.txt b/mzLib/Test/DataFiles/mZchargeTwoProteoformSpectrum - Copy.txt new file mode 100644 index 000000000..2e8cf6e64 --- /dev/null +++ b/mzLib/Test/DataFiles/mZchargeTwoProteoformSpectrum - Copy.txt @@ -0,0 +1,361 @@ +278.55257 5.82 +278.61156 14.79 +278.67052 20.59 +278.72946 20.46 +278.7884 16.12 +278.84732 10.65 +278.90623 6.1 +278.96515 3.1 +279.02406 1.42 +279.08297 0.59 +279.14188 0.23 +279.20079 0.08 +279.25971 0.03 +279.31863 0.01 +279.37756 0 +295.89915 5.82 +295.96183 14.79 +296.02448 20.59 +296.0871 20.46 +296.14971 16.12 +296.21232 10.65 +296.27492 6.1 +296.33752 3.1 +296.40011 1.42 +296.4627 0.59 +296.52529 0.23 +296.58789 0.08 +296.65049 0.03 +296.71309 0.01 +296.7757 0 +296.8383 0 +315.55861 5.82 +315.62547 14.79 +315.69229 20.59 +315.75909 20.46 +315.82588 16.12 +315.89266 10.65 +315.95943 6.1 +316.0262 3.1 +316.09297 1.42 +316.15973 0.59 +316.2265 0.23 +316.29326 0.08 +316.36003 0.03 +316.42681 0.01 +316.4936 0 +316.56037 0 +338.02656 5.82 +338.0982 14.79 +338.16979 20.59 +338.24136 20.46 +338.31292 16.12 +338.38447 10.65 +338.45601 6.1 +338.52755 3.1 +338.59909 1.42 +338.67062 0.59 +338.74215 0.23 +338.81369 0.08 +338.88523 0.03 +338.95677 0.01 +339.02834 0 +339.09988 0 +363.95112 5.82 +364.02827 14.79 +364.10537 20.59 +364.18245 20.46 +364.25951 16.12 +364.33656 10.65 +364.41361 6.1 +364.49065 3.1 +364.56769 1.42 +364.64472 0.59 +364.72176 0.23 +364.7988 0.08 +364.87584 0.03 +364.95289 0.01 +365.02996 0 +365.107 0 +394.19644 5.82 +394.28002 14.79 +394.36354 20.59 +394.44704 20.46 +394.53053 16.12 +394.614 10.65 +394.69747 6.1 +394.78093 3.1 +394.86439 1.42 +394.94784 0.59 +395.0313 0.23 +395.11476 0.08 +395.19822 0.03 +395.28169 0.01 +395.36518 0 +395.44865 0 +429.94091 5.82 +430.03208 14.79 +430.1232 20.59 +430.21429 20.46 +430.30537 16.12 +430.39643 10.65 +430.48748 6.1 +430.57853 3.1 +430.66958 1.42 +430.76062 0.59 +430.85167 0.23 +430.94271 0.08 +431.03376 0.03 +431.12482 0.01 +431.2159 0 +431.30695 0 +472.83428 5.82 +472.93456 14.79 +473.0348 20.59 +473.135 20.46 +473.23518 16.12 +473.33535 10.65 +473.43551 6.1 +473.53566 3.1 +473.63581 1.42 +473.73596 0.59 +473.83611 0.23 +473.93625 0.08 +474.03641 0.03 +474.13657 0.01 +474.23676 0 +474.33692 0 +525.2595 5.82 +525.37093 14.79 +525.4823 20.59 +525.59363 20.46 +525.70494 16.12 +525.81624 10.65 +525.92753 6.1 +526.03881 3.1 +526.15009 1.42 +526.26137 0.59 +526.37264 0.23 +526.48392 0.08 +526.59521 0.03 +526.7065 0.01 +526.81781 0 +526.9291 0 +590.79103 5.82 +590.91639 14.79 +591.04168 20.59 +591.16693 20.46 +591.29215 16.12 +591.41736 10.65 +591.54256 6.1 +591.66776 3.1 +591.79294 1.42 +591.91813 0.59 +592.04331 0.23 +592.1685 0.08 +592.2937 0.03 +592.4189 0.01 +592.54413 0 +592.66933 0 +675.04585 5.82 +675.18912 14.79 +675.3323 20.59 +675.47545 20.46 +675.61856 16.12 +675.76166 10.65 +675.90475 6.1 +676.04782 3.1 +676.19089 1.42 +676.33396 0.59 +676.47703 0.23 +676.6201 0.08 +676.76319 0.03 +676.90627 0.01 +677.0494 0 +677.19248 0 +787.38561 5.82 +787.55276 14.79 +787.71981 20.59 +787.88681 20.46 +788.05378 16.12 +788.22073 10.65 +788.38766 6.1 +788.55458 3.1 +788.7215 1.42 +788.88841 0.59 +789.05532 0.23 +789.22224 0.08 +789.38917 0.03 +789.55611 0.01 +789.72308 0 +789.89001 0 +803.56107 10.92 +803.72822 28.46 +803.89527 40.42 +804.06228 40.9 +804.22926 32.78 +804.39621 21.98 +804.56314 12.78 +804.73007 6.6 +804.89699 3.06 +805.06391 1.3 +805.23083 0.5 +805.39775 0.18 +805.56468 0.06 +805.7316 0.02 +805.89858 0 +944.66128 5.82 +944.86185 14.79 +945.06232 20.59 +945.26272 20.46 +945.46308 16.12 +945.66342 10.65 +945.86374 6.1 +946.06404 3.1 +946.26434 1.42 +946.46464 0.59 +946.66493 0.23 +946.86523 0.08 +947.06555 0.03 +947.26587 0.01 +947.46624 0 +947.66656 0 +964.07183 10.92 +964.27241 28.46 +964.47287 40.42 +964.67328 40.9 +964.87365 32.78 +965.07399 21.98 +965.27432 12.78 +965.47463 6.6 +965.67494 3.06 +965.87524 1.3 +966.07554 0.5 +966.27584 0.18 +966.47616 0.06 +966.67647 0.02 +966.87684 0 +1180.57478 5.82 +1180.8255 14.79 +1181.07607 20.59 +1181.32658 20.46 +1181.57703 16.12 +1181.82745 10.65 +1182.07785 6.1 +1182.32823 3.1 +1182.57861 1.42 +1182.82898 0.59 +1183.07935 0.23 +1183.32972 0.08 +1183.58012 0.03 +1183.83052 0.01 +1184.08099 0 +1184.33138 0 +1204.83797 10.92 +1205.08869 28.46 +1205.33927 40.42 +1205.58978 40.9 +1205.84024 32.78 +1206.09067 21.98 +1206.34108 12.78 +1206.59147 6.6 +1206.84185 3.06 +1207.09223 1.3 +1207.3426 0.5 +1207.59298 0.18 +1207.84338 0.06 +1208.09377 0.02 +1208.34423 0 +1573.76394 5.82 +1574.09824 14.79 +1574.43234 20.59 +1574.76634 20.46 +1575.10028 16.12 +1575.43418 10.65 +1575.76804 6.1 +1576.10189 3.1 +1576.43572 1.42 +1576.76955 0.59 +1577.10337 0.23 +1577.4372 0.08 +1577.77106 0.03 +1578.10493 0.01 +1578.43889 0 +1578.77275 0 +1606.11486 10.92 +1606.44916 28.46 +1606.78327 40.42 +1607.11729 40.9 +1607.45123 32.78 +1607.78514 21.98 +1608.11901 12.78 +1608.45287 6.6 +1608.78671 3.06 +1609.12055 1.3 +1609.45438 0.5 +1609.78822 0.18 +1610.12208 0.06 +1610.45593 0.02 +1610.78988 0 +2360.14228 5.82 +2360.64371 14.79 +2361.14487 20.59 +2361.64588 20.46 +2362.14678 16.12 +2362.64763 10.65 +2363.14842 6.1 +2363.64919 3.1 +2364.14994 1.42 +2364.65068 0.59 +2365.15142 0.23 +2365.65217 0.08 +2366.15296 0.03 +2366.65376 0.01 +2367.15469 0 +2367.65549 0 +2408.66866 10.92 +2409.1701 28.46 +2409.67127 40.42 +2410.17229 40.9 +2410.67321 32.78 +2411.17407 21.98 +2411.67488 12.78 +2412.17566 6.6 +2412.67643 3.06 +2413.17718 1.3 +2413.67793 0.5 +2414.17869 0.18 +2414.67948 0.06 +2415.18026 0.02 +2415.68119 0 +4719.27727 5.82 +4720.28015 14.79 +4721.28247 20.59 +4722.28448 20.46 +4723.28629 16.12 +4724.28798 10.65 +4725.28957 6.1 +4726.29111 3.1 +4727.29261 1.42 +4728.29409 0.59 +4729.29557 0.23 +4730.29706 0.08 +4731.29864 0.03 +4732.30025 0.01 +4733.30211 0 +4734.30371 0 +4816.33004 10.92 +4817.33292 28.46 +4818.33526 40.42 +4819.3373 40.9 +4820.33915 32.78 +4821.34086 21.98 +4822.34249 12.78 +4823.34405 6.6 +4824.34558 3.06 +4825.34708 1.3 +4826.34858 0.5 +4827.3501 0.18 +4828.35168 0.06 +4829.35324 0.02 +4830.3551 0 diff --git a/mzLib/Test/DataFiles/realProteoform.txt b/mzLib/Test/DataFiles/realProteoform.txt new file mode 100644 index 000000000..17df1432d --- /dev/null +++ b/mzLib/Test/DataFiles/realProteoform.txt @@ -0,0 +1,90 @@ +749.9240112 156298.8594 +749.9501343 139790.25 +749.9787598 2066609.875 +750.0374756 3639797.5 +750.0968628 8900816 +750.1559448 15474265 +750.2145386 26948684 +750.2736816 33774848 +750.3323975 34705480 +750.3911743 33152168 +750.4499512 25488384 +750.5090942 23513018 +750.5679321 13117025 +750.6266479 11884250 +750.6859741 7482276 +750.7445068 4289492 +750.803772 2898692 +750.8615112 1146101.375 +796.7658691 154576.4219 +796.7879639 1368636.875 +796.8526001 4312996.5 +796.9151611 14421381 +796.9777832 23551168 +797.0404053 31410252 +797.1027222 46907576 +797.1652222 52315080 +797.2275391 47574524 +797.2903442 42334948 +797.3527222 32748108 +797.4155273 18204132 +797.4777222 18530070 +797.5402222 11008951 +797.6032715 6725230.5 +797.6654663 3715282.75 +797.7280884 1937752.25 +849.7770386 716604.75 +849.8425293 2802352.25 +849.9088745 7074799.5 +849.975708 15420585 +850.0423584 30211732 +850.1087646 43633644 +850.1756592 49231340 +850.2421265 64204956 +850.3088379 57005328 +850.3754883 50528404 +850.4420776 38188320 +850.5089111 26039960 +850.5754395 18437936 +850.6426392 14466685 +850.7086792 6142188 +850.7757568 3921041.5 +910.4036865 194957.8906 +910.4709473 2036419.875 +910.5455322 5376291.5 +910.6160278 16325186 +910.6875 26839470 +910.7589722 38674544 +910.8303833 46177272 +910.9017334 49162812 +910.9732666 54604092 +911.0446167 44007372 +911.116394 32588014 +911.187561 26988278 +911.2590942 15739482 +911.3309937 11105924 +911.4020386 6689728 +911.4744873 3116884.75 +911.5460205 1640594.25 +911.5691528 386666.0938 +980.2767334 440729.3438 +980.4364624 794954.625 +980.5061035 3696130.5 +980.5852661 9402138 +980.6624146 15423864 +980.7393188 23088062 +980.8165894 25932106 +980.8934937 27471186 +980.9703369 29765040 +981.0474854 22285964 +981.1242065 17899596 +981.2017212 15557095 +981.2789307 9733076 +981.3557129 7135980 +981.4328003 2579324.75 +981.5089722 2500296 +981.588501 1112381.125 +981.6584473 620994.0625 +981.7386475 559062.875 +981.8156738 748040.5625 +981.8912964 1100108.875 diff --git a/mzLib/Test/Test.csproj b/mzLib/Test/Test.csproj index cc8cf91bd..174a92892 100644 --- a/mzLib/Test/Test.csproj +++ b/mzLib/Test/Test.csproj @@ -295,12 +295,33 @@ Always + + Always + + + Always + + + Always + Always Always + + Always + + + Always + + + Always + + + Always + PreserveNewest diff --git a/mzLib/Test/TestDeconvolution.cs b/mzLib/Test/TestDeconvolution.cs index dfcc74f50..d11a67834 100644 --- a/mzLib/Test/TestDeconvolution.cs +++ b/mzLib/Test/TestDeconvolution.cs @@ -14,6 +14,7 @@ using Proteomics; using Proteomics.ProteolyticDigestion; using Test.FileReadingTests; +using MassSpectrometry.Deconvolution.Parameters; namespace Test { @@ -386,7 +387,100 @@ public void TestNegativeModeIsoDecDeconvolution(double expectedMz, int expectedC } #endregion + #region FlashDeconv + + [Test] + public static void TestIsdDataProteoformFlashDeconvRealData() + { + string realSequence = "MLMPKEDRNKIHQYLFQEGVVVAKKDFNQAKHEEIDTKNLYVIKALQSLTSKGYVKTQFSWQYYYYTLTEEGVEYLREYLNLPEHIVPGTYIQERNPTQRPQRRY"; + MsDataScan[] Scans1 = new MsDataScan[1]; + + //txt file, not mgf, because it's an MS1. Most intense proteoform has mass of ~14037.9 Da + string Ms1SpectrumPath = Path.Combine(TestContext.CurrentContext.TestDirectory, + @"DataFiles\realProteoform.txt"); + + string[] spectrumLines = File.ReadAllLines(Ms1SpectrumPath); + + int mzIntensityPairsCount = spectrumLines.Length; + double[] ms1mzs = new double[mzIntensityPairsCount]; + double[] ms1intensities = new double[mzIntensityPairsCount]; + + for (int i = 0; i < mzIntensityPairsCount; i++) + { + string[] pair = spectrumLines[i].Split('\t'); + ms1mzs[i] = Convert.ToDouble(pair[0], CultureInfo.InvariantCulture); + ms1intensities[i] = Convert.ToDouble(pair[1], CultureInfo.InvariantCulture); + } + + MzSpectrum spectrum1 = new MzSpectrum(ms1mzs, ms1intensities, true); + double selectedIonMz = 850.2421265; // This is the monoisotopic mass of the most abundant proteoform + int selectedIonChargeStateGuess = 15; // This is the charge state of the most abundant proteoform + double selectedIonIntensity = 64204956; // This is the intensity of the most abundant proteoform + double isolationMz = 850.2421265; // This is the isolation m/z of the most abundant proteoform + Scans1[0] = new MsDataScan(spectrum1, 1, 1, true, Polarity.Positive, 1.0, new MzRange(ms1mzs.Min(), ms1mzs.Max()), + "first spectrum", MZAnalyzerType.Unknown, spectrum1.SumOfAllY, null, null, null, selectedIonMz, + selectedIonChargeStateGuess, selectedIonIntensity, isolationMz, 4); + + var myMsDataFile1 = new FakeMsDataFile(Scans1); + + MsDataScan scan1 = myMsDataFile1.GetAllScansList()[0]; + + // The ones marked 2 are for checking an overload method + + DeconvolutionParameters deconParameters = new FlashDeconvDeconvolutionParameters(10, 21); + var isolatedMasses = Deconvoluter.Deconvolute(scan1, deconParameters); + + List monoIsotopicMasses = isolatedMasses.Select(m => m.MonoisotopicMass).ToList(); + + Assert.That(monoIsotopicMasses[0], Is.EqualTo(12730.499718360948).Within(0.01)); + } + [Test] + public static void TestIsdDataProteoformFlashDeconvArtificialData() + { + string realSequence = "MLMPKEDRNKIHQYLFQEGVVVAKKDFNQAKHEEIDTKNLYVIKALQSLTSKGYVKTQFSWQYYYYTLTEEGVEYLREYLNLPEHIVPGTYIQERNPTQRPQRRY"; + MsDataScan[] Scans1 = new MsDataScan[1]; + + //txt file, not mgf, because it's an MS1. Most intense proteoform has mass of ~14037.9 Da + string Ms1SpectrumPath = Path.Combine(TestContext.CurrentContext.TestDirectory, + @"DataFiles\artificialProteoform.txt"); + + string[] spectrumLines = File.ReadAllLines(Ms1SpectrumPath); + + int mzIntensityPairsCount = spectrumLines.Length; + double[] ms1mzs = new double[mzIntensityPairsCount]; + double[] ms1intensities = new double[mzIntensityPairsCount]; + + for (int i = 0; i < mzIntensityPairsCount; i++) + { + string[] pair = spectrumLines[i].Split('\t'); + ms1mzs[i] = Convert.ToDouble(pair[0], CultureInfo.InvariantCulture); + ms1intensities[i] = Convert.ToDouble(pair[1], CultureInfo.InvariantCulture); + } + + MzSpectrum spectrum1 = new MzSpectrum(ms1mzs, ms1intensities, true); + double selectedIonMz = 850.2421265; // This is the monoisotopic mass of the most abundant proteoform + int selectedIonChargeStateGuess = 15; // This is the charge state of the most abundant proteoform + double selectedIonIntensity = 13.4; // This is the intensity of the most abundant proteoform + double isolationMz = 850.2421265; // This is the isolation m/z of the most abundant proteoform + Scans1[0] = new MsDataScan(spectrum1, 1, 1, true, Polarity.Positive, 1.0, new MzRange(ms1mzs.Min(), ms1mzs.Max()), + "first spectrum", MZAnalyzerType.Unknown, spectrum1.SumOfAllY, null, null, null, selectedIonMz, + selectedIonChargeStateGuess, selectedIonIntensity, isolationMz, 4); + + var myMsDataFile1 = new FakeMsDataFile(Scans1); + + MsDataScan scan1 = myMsDataFile1.GetAllScansList()[0]; + + // The ones marked 2 are for checking an overload method + + DeconvolutionParameters deconParameters = new FlashDeconvDeconvolutionParameters(10, 21); + var isolatedMasses = Deconvoluter.Deconvolute(scan1, deconParameters); + + List monoIsotopicMasses = isolatedMasses.Select(m => m.MonoisotopicMass).ToList(); + + Assert.That(monoIsotopicMasses[0], Is.EqualTo(12730.505755140946).Within(0.01)); + } + #endregion [Test] public static void TestExampleNewDeconvolutionInDeconvoluter() { diff --git a/mzLib/Test/TestFlashDeconv2Deconvolution.cs b/mzLib/Test/TestFlashDeconv2Deconvolution.cs new file mode 100644 index 000000000..0d53f2621 --- /dev/null +++ b/mzLib/Test/TestFlashDeconv2Deconvolution.cs @@ -0,0 +1,255 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics.CodeAnalysis; +using System.Globalization; +using System.IO; +using System.Linq; +using MassSpectrometry; +using MassSpectrometry.Deconvolution.Algorithms; +using MassSpectrometry.Deconvolution.Parameters; +using MzLibUtil; +using NUnit.Framework; +using Test.FileReadingTests; + +namespace Test +{ + [TestFixture] + [ExcludeFromCodeCoverage] + public sealed class TestFlashDeconv2Deconvolution + { + private FlashDeconv2 _flashDeconv2; + + [SetUp] + public void Setup() + { + var deconParams = new FlashDeconvDeconvolutionParameters(1,60); + _flashDeconv2 = new FlashDeconv2(deconParams); + } + [Test] + public void FlashDeconvWithArticialMs1Spectrum() + { + MsDataScan[] Scans = new MsDataScan[1]; + double selectedIonMz = 850.24; + int selectedIonChargeStateGuess = 15; + double selectedIonIntensity = 13.4; + double isolationMz = 850.24; // This is the isolation m/z for the selected ion, which is the most intense proteoform in this test case. + + string Ms1SpectrumPath = Path.Combine(TestContext.CurrentContext.TestDirectory, @"DataFiles\artificialProteoform.txt"); + string[] spectrumLines = File.ReadAllLines(Ms1SpectrumPath); + + int mzIntensityPairsCount = spectrumLines.Length; + double[] ms1mzs = new double[mzIntensityPairsCount]; + double[] ms1intensities = new double[mzIntensityPairsCount]; + + for (int i = 0; i < mzIntensityPairsCount; i++) + { + string[] pair = spectrumLines[i].Split('\t'); + ms1mzs[i] = Convert.ToDouble(pair[0], CultureInfo.InvariantCulture); + ms1intensities[i] = Convert.ToDouble(pair[1], CultureInfo.InvariantCulture); + } + + MzSpectrum spectrum = new MzSpectrum(ms1mzs, ms1intensities, false); + + Scans[0] = new MsDataScan(spectrum, 1, 1, false, Polarity.Positive, 1.0, new MzRange(740, 990), "first spectrum", MZAnalyzerType.Unknown, spectrum.SumOfAllY, null, null, null, selectedIonMz, selectedIonChargeStateGuess, selectedIonIntensity, isolationMz, 4); + + var myMsDataFile = new FakeMsDataFile(Scans); + + MsDataScan scan = myMsDataFile.GetAllScansList()[0]; + + DeconvolutionParameters deconParameters = new FlashDeconvDeconvolutionParameters(13, 17); + + FlashDeconv2 alg = new FlashDeconv2(deconParameters); + List allMasses = alg.Deconvolute(scan.MassSpectrum, new MzRange((double)scan.MassSpectrum.FirstX, (double)scan.MassSpectrum.LastX)).ToList(); + + Assert.That(allMasses.Count, Is.EqualTo(1)); + Assert.That(allMasses[0].Charge, Is.EqualTo(1)); + Assert.That(allMasses[0].MonoisotopicMass, Is.EqualTo(12730.5057551409).Within(0.01)); + Assert.That(allMasses[0].MostAbundantObservedIsotopicMass, Is.EqualTo(12738.53003).Within(0.01)); + Assert.That(allMasses[0].Score, Is.EqualTo(5111.138226).Within(0.01)); + Assert.That(allMasses[0].TotalIntensity, Is.EqualTo(499.45).Within(0.01)); + } + [Test] + public void FlashDeconvWithRealMs1Spectrum() + { + MsDataScan[] Scans = new MsDataScan[1]; + double selectedIonMz = 850.24; + int selectedIonChargeStateGuess = 15; + double selectedIonIntensity = 13.4; + double isolationMz = 850.24; // This is the isolation m/z for the selected ion, which is the most intense proteoform in this test case. + + string Ms1SpectrumPath = Path.Combine(TestContext.CurrentContext.TestDirectory, @"DataFiles\realProteoform.txt"); + string[] spectrumLines = File.ReadAllLines(Ms1SpectrumPath); + + int mzIntensityPairsCount = spectrumLines.Length; + double[] ms1mzs = new double[mzIntensityPairsCount]; + double[] ms1intensities = new double[mzIntensityPairsCount]; + + for (int i = 0; i < mzIntensityPairsCount; i++) + { + string[] pair = spectrumLines[i].Split('\t'); + ms1mzs[i] = Convert.ToDouble(pair[0], CultureInfo.InvariantCulture); + ms1intensities[i] = Convert.ToDouble(pair[1], CultureInfo.InvariantCulture); + } + + MzSpectrum spectrum = new MzSpectrum(ms1mzs, ms1intensities, false); + + Scans[0] = new MsDataScan(spectrum, 1, 1, false, Polarity.Positive, 1.0, new MzRange(740, 990), "first spectrum", MZAnalyzerType.Unknown, spectrum.SumOfAllY, null, null, null, selectedIonMz, selectedIonChargeStateGuess, selectedIonIntensity, isolationMz, 4); + + var myMsDataFile = new FakeMsDataFile(Scans); + + MsDataScan scan = myMsDataFile.GetAllScansList()[0]; + + DeconvolutionParameters deconParameters = new FlashDeconvDeconvolutionParameters(13, 17); + + FlashDeconv2 alg = new FlashDeconv2(deconParameters); + List allMasses = alg.Deconvolute(scan.MassSpectrum, new MzRange((double)scan.MassSpectrum.FirstX, (double)scan.MassSpectrum.LastX)).ToList(); + + Assert.That(allMasses.Count, Is.EqualTo(1)); + Assert.That(allMasses[0].Charge, Is.EqualTo(1)); + Assert.That(allMasses[0].MonoisotopicMass, Is.EqualTo(12730.499718360948).Within(0.01)); + Assert.That(allMasses[0].MostAbundantObservedIsotopicMass, Is.EqualTo(12738.532541223694).Within(0.01)); + Assert.That(allMasses[0].Score, Is.EqualTo(91500544022.111084).Within(0.01)); + Assert.That(allMasses[0].TotalIntensity, Is.EqualTo(1602985825.25).Within(0.01)); + } + [Test] + public void FlashDeconvWithComplexRealMs1Spectrum() + { + MsDataScan[] Scans = new MsDataScan[1]; + double selectedIonMz = 850.24; + int selectedIonChargeStateGuess = 15; + double selectedIonIntensity = 13.4; + double isolationMz = 850.24; // This is the isolation m/z for the selected ion, which is the most intense proteoform in this test case. + + string Ms1SpectrumPath = Path.Combine(TestContext.CurrentContext.TestDirectory, @"DataFiles\complexRealProteoform.txt"); + string[] spectrumLines = File.ReadAllLines(Ms1SpectrumPath); + + int mzIntensityPairsCount = spectrumLines.Length; + double[] ms1mzs = new double[mzIntensityPairsCount]; + double[] ms1intensities = new double[mzIntensityPairsCount]; + + for (int i = 0; i < mzIntensityPairsCount; i++) + { + string[] pair = spectrumLines[i].Split('\t'); + ms1mzs[i] = Convert.ToDouble(pair[0], CultureInfo.InvariantCulture); + ms1intensities[i] = Convert.ToDouble(pair[1], CultureInfo.InvariantCulture); + } + + MzSpectrum spectrum = new MzSpectrum(ms1mzs, ms1intensities, false); + + Scans[0] = new MsDataScan(spectrum, 1, 1, false, Polarity.Positive, 1.0, new MzRange(500, 1600), "first spectrum", MZAnalyzerType.Unknown, spectrum.SumOfAllY, null, null, null, selectedIonMz, selectedIonChargeStateGuess, selectedIonIntensity, isolationMz, 4); + + var myMsDataFile = new FakeMsDataFile(Scans); + + MsDataScan scan = myMsDataFile.GetAllScansList()[0]; + + DeconvolutionParameters deconParameters = new FlashDeconvDeconvolutionParameters(1, 30); + + FlashDeconv2 alg = new FlashDeconv2(deconParameters); + List allMasses = alg.Deconvolute(scan.MassSpectrum, new MzRange((double)scan.MassSpectrum.FirstX, (double)scan.MassSpectrum.LastX)).ToList(); + + Assert.That(allMasses.Count, Is.EqualTo(35)); + Assert.That(allMasses[0].Peaks.Count, Is.EqualTo(18)); + Assert.That(allMasses[0].Charge, Is.EqualTo(1)); + Assert.That(allMasses[0].MonoisotopicMass, Is.EqualTo(12730.50351573763).Within(0.1)); + Assert.That(allMasses[0].MostAbundantObservedIsotopicMass, Is.EqualTo(12738.530050296922).Within(0.1)); + Assert.That(allMasses[0].Score, Is.EqualTo(91987565022.501816).Within(1)); + Assert.That(allMasses[0].TotalIntensity, Is.EqualTo(1566665103.9698696).Within(10)); + } + [Test] + // Tests that LogTransformSpectrum filters out low-intensity peaks and applies log transform to X values. + public void LogTransformSpectrum_FiltersAndTransformsCorrectly() + { + var x = new[] { 100.0, 200.0, 300.0 }; + var y = new[] { 0.005, 0.02, 0.5 }; + var spectrum = new MzSpectrum(x, y, false); + + var result = _flashDeconv2.GetType() + .GetMethod("LogTransformSpectrum", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance) + .Invoke(_flashDeconv2, new object[] { spectrum, 0.01 }) as MzSpectrum; + + Assert.That(result.XArray.Length, Is.EqualTo(2)); + Assert.That(result.YArray.Length, Is.EqualTo(2)); + Assert.That(result.XArray, Is.All.GreaterThan(0)); + } + + + + [Test] + // Tests that FilterMassIntensityGroupsByPpmTolerance separates groups into likely correct and incorrect based on ppm tolerance. + public void FilterMassIntensityGroupsByPpmTolerance_FiltersCorrectly() + { + var groups = new List<(double[] neutralMass, double[] intensity)> + { + (new double[] { 1000, 1000.01 }, new double[] { 10, 20 }), + (new double[] { 1000, 2000 }, new double[] { 10, 20 }) + }; + + FlashDeconv2.FilterMassIntensityGroupsByPpmTolerance( + groups, + out var likelyCorrect, + out var likelyIncorrect, + correctPpmTolerance: 20_000, // Large tolerance to force first group as correct + incorrectPpmTolerance: 10); + + Assert.That(likelyCorrect.Count, Is.EqualTo(1)); + Assert.That(likelyIncorrect.Count, Is.EqualTo(1)); + } + + [Test] + // Tests that GetMostCommonNeutralMassAndSummedIntensity finds the mode cluster and sums the correct intensities. + public void GetMostCommonNeutralMassAndSummedIntensity_ReturnsExpected() + { + var groups = new List<(double[] neutralMass, double[] intensity)> + { + (new double[] { 1000, 1000.01, 2000 }, new double[] { 10, 20, 30 }) + }; + + var result = FlashDeconv2.GetMostCommonNeutralMassAndSummedIntensity(groups, ppmTolerance: 20); + + Assert.That(result.Count, Is.EqualTo(1)); + Assert.That(result[0].summedIntensity, Is.EqualTo(30)); // Only 2000 is outside 20 ppm, so 10+20=30 + } + + [Test] + // Tests that CreateNeutralMassIntensityGroups creates a group with the expected number of neutral masses. + public void CreateNeutralMassIntensityGroups_CreatesExpectedGroups() + { + var groups = new List<(double[] X, double[] Y, int[] ChargeState)> + { + (new double[] { Math.Log(100) }, new double[] { 10 }, new int[] { 1 }) + }; + + var result = typeof(FlashDeconv2) + .GetMethod("CreateNeutralMassIntensityGroups", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Static) + .Invoke(null, new object[] { groups }) as List<(double[] neutralMass, double[] intensity)>; + + Assert.That(result.Count, Is.EqualTo(1)); + Assert.That(result[0].neutralMass.Length, Is.EqualTo(1)); + } + + [Test] + // Tests that LogMzDependentTolerance returns a positive tolerance value for a given log(m/z). + public void LogMzDependentTolerance_ReturnsExpectedTolerance() + { + double logMz = Math.Log(1000); + var result = typeof(FlashDeconv2) + .GetMethod("LogMzDependentTolerance", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Static) + .Invoke(null, new object[] { logMz, 250.0 }); + + Assert.That(result, Is.TypeOf()); + Assert.That((double)result, Is.GreaterThan(0)); + } + + [Test] + // Tests that Deconvolute returns an empty result when given an empty spectrum. + public void Deconvolute_ReturnsEmptyListForEmptySpectrum() + { + var spectrum = new MzSpectrum(new double[0], new double[0], false); + var range = new MzRange(0, 1000); + + var result = _flashDeconv2.Deconvolute(spectrum, range); + + Assert.That(result, Is.Empty); + } + } +}