From 20efaeda62dfbb42e1e0ab1f3ff0ac4028d9fca5 Mon Sep 17 00:00:00 2001 From: Gunj Joshi Date: Tue, 18 Aug 2026 12:30:10 +0530 Subject: [PATCH 01/32] feat: add `fft/base/fftpack/generic/decompose` Ref: https://github.com/stdlib-js/metr-issue-tracker/issues/1165 --- type: pre_commit_static_analysis_report description: Results of running static analysis checks when committing changes. report: - task: lint_filenames status: passed - task: lint_editorconfig status: passed - task: lint_markdown_pkg_readmes status: passed - task: lint_markdown_docs status: na - task: lint_markdown status: na - task: lint_package_json status: passed - task: lint_repl_help status: passed - task: lint_javascript_src status: passed - task: lint_javascript_cli status: na - task: lint_javascript_examples status: passed - task: lint_javascript_tests status: passed - task: lint_javascript_benchmarks status: passed - task: lint_python status: na - task: lint_r status: na - task: lint_c_src status: na - task: lint_c_examples status: na - task: lint_c_benchmarks status: na - task: lint_c_tests_fixtures status: na - task: lint_shell status: na - task: lint_typescript_declarations status: passed - task: lint_typescript_tests status: passed - task: lint_license_headers status: passed --- --- .../base/fftpack/generic/decompose/README.md | 142 +++++++++++++ .../generic/decompose/benchmark/benchmark.js | 107 ++++++++++ .../fftpack/generic/decompose/docs/repl.txt | 55 +++++ .../generic/decompose/docs/types/index.d.ts | 50 +++++ .../generic/decompose/docs/types/test.ts | 162 +++++++++++++++ .../generic/decompose/examples/index.js | 35 ++++ .../fftpack/generic/decompose/lib/index.js | 54 +++++ .../fftpack/generic/decompose/lib/main.js | 196 ++++++++++++++++++ .../fftpack/generic/decompose/package.json | 64 ++++++ .../fftpack/generic/decompose/test/test.js | 128 ++++++++++++ 10 files changed, 993 insertions(+) create mode 100644 lib/node_modules/@stdlib/fft/base/fftpack/generic/decompose/README.md create mode 100644 lib/node_modules/@stdlib/fft/base/fftpack/generic/decompose/benchmark/benchmark.js create mode 100644 lib/node_modules/@stdlib/fft/base/fftpack/generic/decompose/docs/repl.txt create mode 100644 lib/node_modules/@stdlib/fft/base/fftpack/generic/decompose/docs/types/index.d.ts create mode 100644 lib/node_modules/@stdlib/fft/base/fftpack/generic/decompose/docs/types/test.ts create mode 100644 lib/node_modules/@stdlib/fft/base/fftpack/generic/decompose/examples/index.js create mode 100644 lib/node_modules/@stdlib/fft/base/fftpack/generic/decompose/lib/index.js create mode 100644 lib/node_modules/@stdlib/fft/base/fftpack/generic/decompose/lib/main.js create mode 100644 lib/node_modules/@stdlib/fft/base/fftpack/generic/decompose/package.json create mode 100644 lib/node_modules/@stdlib/fft/base/fftpack/generic/decompose/test/test.js diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/generic/decompose/README.md b/lib/node_modules/@stdlib/fft/base/fftpack/generic/decompose/README.md new file mode 100644 index 000000000000..a53419508ac9 --- /dev/null +++ b/lib/node_modules/@stdlib/fft/base/fftpack/generic/decompose/README.md @@ -0,0 +1,142 @@ + + +# decompose + +> Factorize a sequence length into a product of integers. + + + +
+ +
+ + + + + +
+ +## Usage + +```javascript +var decompose = require( '@stdlib/fft/base/fftpack/generic/decompose' ); +``` + +#### decompose( N, M, initial, si, oi, out, so, oo ) + +Factorizes a sequence length into a product of integers. + +```javascript +var initial = [ 3, 4, 2, 5 ]; // as found in FFTPACK +var N = 630; +var factors = [ 0, 0, 0, 0, 0, 0, 0 ]; + +var numFactors = decompose( N, 4, initial, 1, 0, factors, 1, 0 ); +// returns 5 + +console.log( factors ); +// => [ 630, 5, 2, 3, 3, 5, 7 ] +``` + +The function accepts the following arguments: + +- **N**: length of the sequence. +- **M**: number of trial divisors. +- **initial**: array of initial trial divisors. +- **si**: stride length for `initial`. +- **oi**: starting index for `initial`. +- **out**: output array for storing factorization results. +- **so**: stride length for `out`. +- **oo**: starting index for `out`. + +The function returns the number of factors into which `N` was decomposed. + +
+ + + + + +
+ +## Notes + +- Factorization results are stored in the output array as follows: + + ```text + [ sequence_length | number_of_factors | integer_factors | unused_storage ] + ``` + +
+ + + +
+ +## Examples + + + +```javascript +var decompose = require( '@stdlib/fft/base/fftpack/generic/decompose' ); + +var initial = [ 3, 4, 2, 5 ]; // as found in FFTPACK +var factors = [ 0, 0, 0, 0 ]; + +var nf = decompose( 12, 4, initial, 1, 0, factors, 1, 0 ); + +console.log( 'Sequence length: %d', 12 ); +console.log( 'Number of factors: %d', nf ); + +console.log( 'Factors:' ); +var j; +for ( j = 0; j < nf; j++ ) { + console.log( ' %d', factors[ j+2 ] ); +} +``` + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/generic/decompose/benchmark/benchmark.js b/lib/node_modules/@stdlib/fft/base/fftpack/generic/decompose/benchmark/benchmark.js new file mode 100644 index 000000000000..604afa551b4e --- /dev/null +++ b/lib/node_modules/@stdlib/fft/base/fftpack/generic/decompose/benchmark/benchmark.js @@ -0,0 +1,107 @@ +/* +* @license Apache-2.0 +* +* Copyright (c) 2026 The Stdlib Authors. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +'use strict'; + +// MODULES // + +var bench = require( '@stdlib/bench' ); +var format = require( '@stdlib/string/format' ); +var isnan = require( '@stdlib/math/base/assert/is-nan' ); +var floor = require( '@stdlib/math/base/special/floor' ); +var log2 = require( '@stdlib/math/base/special/log2' ); +var zeros = require( '@stdlib/array/zeros' ); +var pkg = require( './../package.json' ).name; +var decompose = require( './../lib' ); + + +// VARIABLES // + +var initial = [ 3, 4, 2, 5 ]; // as found in FFTPACK + + +// FUNCTIONS // + +/** +* Creates a benchmark function. +* +* @private +* @param {PositiveInteger} N - sequence length +* @returns {Function} benchmark function +*/ +function createBenchmark( N ) { + var factors = zeros( 2 + floor( log2( N ) ) ); + return benchmark; + + /** + * Benchmark function. + * + * @private + * @param {Benchmark} b - benchmark instance + */ + function benchmark( b ) { + var d; + var i; + + b.tic(); + for ( i = 0; i < b.iterations; i++ ) { + d = decompose( N, 4, initial, 1, 0, factors, 1, 0 ); + if ( isnan( d ) ) { + b.fail( 'should not return NaN' ); + } + } + b.toc(); + if ( isnan( d ) ) { + b.fail( 'should not return NaN' ); + } + b.pass( 'benchmark finished' ); + b.end(); + } +} + + +// MAIN // + +/** +* Main execution sequence. +* +* @private +*/ +function main() { + var lengths; + var N; + var f; + var i; + + lengths = [ + 12, + 24, + 36, + 48, + 60, + 120 + ]; + + for ( i = 0; i < lengths.length; i++ ) { + N = lengths[ i ]; + f = createBenchmark( N ); + bench( format( '%s:N=%d', pkg, N ), f ); + } +} + +main(); diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/generic/decompose/docs/repl.txt b/lib/node_modules/@stdlib/fft/base/fftpack/generic/decompose/docs/repl.txt new file mode 100644 index 000000000000..964ed8270c71 --- /dev/null +++ b/lib/node_modules/@stdlib/fft/base/fftpack/generic/decompose/docs/repl.txt @@ -0,0 +1,55 @@ + +{{alias}}( N, M, initial, si, oi, out, so, oo ) + Factorizes a sequence length into a product of integers. + + Factorization results are stored in the output array sequentially, where + the first element contains the sequence length N, the second element + contains the number of factors into which N was decomposed, and subsequent + elements contain the individual integer factors. + + Any remaining array space remains as unused storage. + + Parameters + ---------- + N: integer + Length of the sequence. + + M: integer + Number of trial divisors. + + initial: ArrayLikeObject + Array of initial trial divisors. + + si: integer + Stride length for `initial`. + + oi: integer + Starting index for `initial`. + + out: ArrayLikeObject + Output array for storing factorization results. + + so: integer + Stride length for `out`. + + oo: integer + Starting index for `out`. + + Returns + ------- + numFactors: integer + Number of factors into which N was decomposed. + + Examples + -------- + > var N = 630; + > var initial = [ 3, 4, 2, 5 ]; + > var factors = [ 0, 0, 0, 0, 0, 0, 0 ]; + > var numFactors = {{alias}}( N, 4, initial, 1, 0, factors, 1, 0 ) + 5 + > factors + [ 630, 5, 2, 3, 3, 5, 7 ] + + See Also + -------- + diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/generic/decompose/docs/types/index.d.ts b/lib/node_modules/@stdlib/fft/base/fftpack/generic/decompose/docs/types/index.d.ts new file mode 100644 index 000000000000..686266a120ed --- /dev/null +++ b/lib/node_modules/@stdlib/fft/base/fftpack/generic/decompose/docs/types/index.d.ts @@ -0,0 +1,50 @@ +/* +* @license Apache-2.0 +* +* Copyright (c) 2026 The Stdlib Authors. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +// TypeScript Version: 4.1 + +/// + +import { Collection } from '@stdlib/types/array'; + +/** +* Factorizes a sequence length into a product of integers. +* +* @param N - length of the sequence +* @param M - number of trial divisors +* @param initial - array of initial trial divisors +* @param si - stride length for `initial` +* @param oi - starting index for `initial` +* @param out - output array for storing factorization results +* @param so - stride length for `out` +* @param oo - starting index for `out` +* @returns number of factors into which `N` was decomposed +* +* @example +* var initial = new Float64Array( [ 3, 4, 2, 5 ] ); +* var factors = new Float64Array( 4 ); +* +* var numFactors = decompose( 12, 4, initial, 1, 0, factors, 1, 0 ); +* // returns 2 +*/ +declare function decompose( N: number, M: number, initial: Collection, si: number, oi: number, out: Collection, so: number, oo: number ): number; + + +// EXPORTS // + +export = decompose; diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/generic/decompose/docs/types/test.ts b/lib/node_modules/@stdlib/fft/base/fftpack/generic/decompose/docs/types/test.ts new file mode 100644 index 000000000000..011b915a8882 --- /dev/null +++ b/lib/node_modules/@stdlib/fft/base/fftpack/generic/decompose/docs/types/test.ts @@ -0,0 +1,162 @@ +/* +* @license Apache-2.0 +* +* Copyright (c) 2026 The Stdlib Authors. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +import decompose = require( './index' ); + +// TESTS // + +// The function returns a number... +{ + const initial = [ 3, 4, 2, 5 ]; + const out = [ 0, 0, 0, 0, 0, 0, 0 ]; + + decompose( 12, 4, initial, 1, 0, out, 1, 0 ); // $ExpectType number +} + +// The compiler throws an error if the function is provided a first argument which is not a number... +{ + const initial = [ 3, 4, 2, 5 ]; + const out = [ 0, 0, 0, 0, 0, 0, 0 ]; + + decompose( '12', 4, initial, 1, 0, out, 1, 0 ); // $ExpectError + decompose( true, 4, initial, 1, 0, out, 1, 0 ); // $ExpectError + decompose( false, 4, initial, 1, 0, out, 1, 0 ); // $ExpectError + decompose( null, 4, initial, 1, 0, out, 1, 0 ); // $ExpectError + decompose( void 0, 4, initial, 1, 0, out, 1, 0 ); // $ExpectError + decompose( [], 4, initial, 1, 0, out, 1, 0 ); // $ExpectError + decompose( {}, 4, initial, 1, 0, out, 1, 0 ); // $ExpectError + decompose( ( x: number ): number => x, 4, initial, 1, 0, out, 1, 0 ); // $ExpectError +} + +// The compiler throws an error if the function is provided a second argument which is not a number... +{ + const initial = [ 3, 4, 2, 5 ]; + const out = [ 0, 0, 0, 0, 0, 0, 0 ]; + + decompose( 12, '4', initial, 1, 0, out, 1, 0 ); // $ExpectError + decompose( 12, true, initial, 1, 0, out, 1, 0 ); // $ExpectError + decompose( 12, false, initial, 1, 0, out, 1, 0 ); // $ExpectError + decompose( 12, null, initial, 1, 0, out, 1, 0 ); // $ExpectError + decompose( 12, void 0, initial, 1, 0, out, 1, 0 ); // $ExpectError + decompose( 12, [], initial, 1, 0, out, 1, 0 ); // $ExpectError + decompose( 12, {}, initial, 1, 0, out, 1, 0 ); // $ExpectError + decompose( 12, ( x: number ): number => x, initial, 1, 0, out, 1, 0 ); // $ExpectError +} + +// The compiler throws an error if the function is provided a third argument which is not an array of numbers... +{ + const out = [ 0, 0, 0, 0, 0, 0, 0 ]; + + decompose( 12, 4, '4,2,3,5', 1, 0, out, 1, 0 ); // $ExpectError + decompose( 12, 4, 5, 1, 0, out, 1, 0 ); // $ExpectError + decompose( 12, 4, true, 1, 0, out, 1, 0 ); // $ExpectError + decompose( 12, 4, false, 1, 0, out, 1, 0 ); // $ExpectError + decompose( 12, 4, null, 1, 0, out, 1, 0 ); // $ExpectError + decompose( 12, 4, void 0, 1, 0, out, 1, 0 ); // $ExpectError + decompose( 12, 4, {}, 1, 0, out, 1, 0 ); // $ExpectError + decompose( 12, 4, ( x: number ): number => x, 1, 0, out, 1, 0 ); // $ExpectError +} + +// The compiler throws an error if the function is provided a fourth argument which is not a number... +{ + const initial = [ 3, 4, 2, 5 ]; + const out = [ 0, 0, 0, 0, 0, 0, 0 ]; + + decompose( 12, 4, initial, '1', 0, out, 1, 0 ); // $ExpectError + decompose( 12, 4, initial, true, 0, out, 1, 0 ); // $ExpectError + decompose( 12, 4, initial, false, 0, out, 1, 0 ); // $ExpectError + decompose( 12, 4, initial, null, 0, out, 1, 0 ); // $ExpectError + decompose( 12, 4, initial, void 0, 0, out, 1, 0 ); // $ExpectError + decompose( 12, 4, initial, [], 0, out, 1, 0 ); // $ExpectError + decompose( 12, 4, initial, {}, 0, out, 1, 0 ); // $ExpectError + decompose( 12, 4, initial, ( x: number ): number => x, 0, out, 1, 0 ); // $ExpectError +} + +// The compiler throws an error if the function is provided a fifth argument which is not a number... +{ + const initial = [ 3, 4, 2, 5 ]; + const out = [ 0, 0, 0, 0, 0, 0, 0 ]; + + decompose( 12, 4, initial, 1, '0', out, 1, 0 ); // $ExpectError + decompose( 12, 4, initial, 1, true, out, 1, 0 ); // $ExpectError + decompose( 12, 4, initial, 1, false, out, 1, 0 ); // $ExpectError + decompose( 12, 4, initial, 1, null, out, 1, 0 ); // $ExpectError + decompose( 12, 4, initial, 1, void 0, out, 1, 0 ); // $ExpectError + decompose( 12, 4, initial, 1, [], out, 1, 0 ); // $ExpectError + decompose( 12, 4, initial, 1, {}, out, 1, 0 ); // $ExpectError + decompose( 12, 4, initial, 1, ( x: number ): number => x, out, 1, 0 ); // $ExpectError +} + +// The compiler throws an error if the function is provided a sixth argument which is not an array... +{ + const initial = [ 3, 4, 2, 5 ]; + + decompose( 12, 4, initial, 1, 0, 123, 1, 0 ); // $ExpectError + decompose( 12, 4, initial, 1, 0, true, 1, 0 ); // $ExpectError + decompose( 12, 4, initial, 1, 0, false, 1, 0 ); // $ExpectError + decompose( 12, 4, initial, 1, 0, null, 1, 0 ); // $ExpectError + decompose( 12, 4, initial, 1, 0, void 0, 1, 0 ); // $ExpectError + decompose( 12, 4, initial, 1, 0, {}, 1, 0 ); // $ExpectError + decompose( 12, 4, initial, 1, 0, ( x: number ): number => x, 1, 0 ); // $ExpectError +} + +// The compiler throws an error if the function is provided a seventh argument which is not a number... +{ + const initial = [ 3, 4, 2, 5 ]; + const out = [ 0, 0, 0, 0, 0, 0, 0 ]; + + decompose( 12, 4, initial, 1, 0, out, '1', 0 ); // $ExpectError + decompose( 12, 4, initial, 1, 0, out, true, 0 ); // $ExpectError + decompose( 12, 4, initial, 1, 0, out, false, 0 ); // $ExpectError + decompose( 12, 4, initial, 1, 0, out, null, 0 ); // $ExpectError + decompose( 12, 4, initial, 1, 0, out, void 0, 0 ); // $ExpectError + decompose( 12, 4, initial, 1, 0, out, [], 0 ); // $ExpectError + decompose( 12, 4, initial, 1, 0, out, {}, 0 ); // $ExpectError + decompose( 12, 4, initial, 1, 0, out, ( x: number ): number => x, 0 ); // $ExpectError +} + +// The compiler throws an error if the function is provided an eighth argument which is not a number... +{ + const initial = [ 3, 4, 2, 5 ]; + const out = [ 0, 0, 0, 0, 0, 0, 0 ]; + + decompose( 12, 4, initial, 1, 0, out, 1, '0' ); // $ExpectError + decompose( 12, 4, initial, 1, 0, out, 1, true ); // $ExpectError + decompose( 12, 4, initial, 1, 0, out, 1, false ); // $ExpectError + decompose( 12, 4, initial, 1, 0, out, 1, null ); // $ExpectError + decompose( 12, 4, initial, 1, 0, out, 1, void 0 ); // $ExpectError + decompose( 12, 4, initial, 1, 0, out, 1, [] ); // $ExpectError + decompose( 12, 4, initial, 1, 0, out, 1, {} ); // $ExpectError + decompose( 12, 4, initial, 1, 0, out, 1, ( x: number ): number => x ); // $ExpectError +} + +// The compiler throws an error if the function is provided an unsupported number of arguments... +{ + const initial = [ 3, 4, 2, 5 ]; + const out = [ 0, 0, 0, 0, 0, 0, 0 ]; + + decompose(); // $ExpectError + decompose( 12 ); // $ExpectError + decompose( 12, 4 ); // $ExpectError + decompose( 12, 4, initial ); // $ExpectError + decompose( 12, 4, initial, 1 ); // $ExpectError + decompose( 12, 4, initial, 1, 0 ); // $ExpectError + decompose( 12, 4, initial, 1, 0, out ); // $ExpectError + decompose( 12, 4, initial, 1, 0, out, 1 ); // $ExpectError + decompose( 12, 4, initial, 1, 0, out, 1, 0, 123 ); // $ExpectError +} diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/generic/decompose/examples/index.js b/lib/node_modules/@stdlib/fft/base/fftpack/generic/decompose/examples/index.js new file mode 100644 index 000000000000..11005ed1d37f --- /dev/null +++ b/lib/node_modules/@stdlib/fft/base/fftpack/generic/decompose/examples/index.js @@ -0,0 +1,35 @@ +/** +* @license Apache-2.0 +* +* Copyright (c) 2026 The Stdlib Authors. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +'use strict'; + +var decompose = require( './../lib' ); + +var initial = [ 3, 4, 2, 5 ]; // as found in FFTPACK +var factors = [ 0, 0, 0, 0 ]; + +var nf = decompose( 12, 4, initial, 1, 0, factors, 1, 0 ); + +console.log( 'Sequence length: %d', 12 ); +console.log( 'Number of factors: %d', nf ); + +console.log( 'Factors:' ); +var j; +for ( j = 0; j < nf; j++ ) { + console.log( ' %d', factors[ j+2 ] ); +} diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/generic/decompose/lib/index.js b/lib/node_modules/@stdlib/fft/base/fftpack/generic/decompose/lib/index.js new file mode 100644 index 000000000000..2bdd0c85aa14 --- /dev/null +++ b/lib/node_modules/@stdlib/fft/base/fftpack/generic/decompose/lib/index.js @@ -0,0 +1,54 @@ +/** +* @license Apache-2.0 +* +* Copyright (c) 2026 The Stdlib Authors. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +'use strict'; + +/** +* Factorize a sequence length into a product of integers. +* +* @module @stdlib/fft/base/fftpack/generic/decompose +* +* @example +* var decompose = require( '@stdlib/fft/base/fftpack/generic/decompose' ); +* +* var N = 630; +* var initial = [ 3, 4, 2, 5 ]; // as found in FFTPACK +* var factors = [ 0, 0, 0, 0, 0, 0, 0 ]; +* +* var numFactors = decompose( N, 4, initial, 1, 0, factors, 1, 0 ); +* // returns 5 +* +* @example +* var decompose = require( '@stdlib/fft/base/fftpack/generic/decompose' ); +* +* var N = 12; +* var initial = [ 3, 4, 2, 5 ]; // as found in FFTPACK +* var factors = [ 0, 0, 0, 0 ]; +* +* var numFactors = decompose( N, 4, initial, 1, 0, factors, 1, 0 ); +* // returns 2 +*/ + +// MODULES // + +var main = require( './main.js' ); + + +// EXPORTS // + +module.exports = main; diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/generic/decompose/lib/main.js b/lib/node_modules/@stdlib/fft/base/fftpack/generic/decompose/lib/main.js new file mode 100644 index 000000000000..921f8db5ecaa --- /dev/null +++ b/lib/node_modules/@stdlib/fft/base/fftpack/generic/decompose/lib/main.js @@ -0,0 +1,196 @@ +/** +* @license Apache-2.0 +* +* Copyright (c) 2026 The Stdlib Authors. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +* +* ## Notice +* +* The original C code and copyright notice are from the [PFFFT library]{@link https://github.com/marton78/pffft/blob/0b4ee12c4ba45a4a8e567550c16d96d1679f50ce/src/fftpack.c}. The implementation follows the original, but has been modified for JavaScript. +* +* ```text +* Copyright (c) 2004 the University Corporation for Atmospheric +* Research ("UCAR"). All rights reserved. Developed by NCAR's +* Computational and Information Systems Laboratory, UCAR, +* www.cisl.ucar.edu. +* +* Redistribution and use of the Software in source and binary forms, +* with or without modification, is permitted provided that the +* following conditions are met: +* +* - Neither the names of NCAR's Computational and Information Systems +* Laboratory, the University Corporation for Atmospheric Research, +* nor the names of its sponsors or contributors may be used to +* endorse or promote products derived from this Software without +* specific prior written permission. +* +* - Redistributions of source code must retain the above copyright +* notices, this list of conditions, and the disclaimer below. +* +* - Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions, and the disclaimer below in the +* documentation and/or other materials provided with the +* distribution. +* +* THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +* EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO THE WARRANTIES OF +* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +* NONINFRINGEMENT. IN NO EVENT SHALL THE CONTRIBUTORS OR COPYRIGHT +* HOLDERS BE LIABLE FOR ANY CLAIM, INDIRECT, INCIDENTAL, SPECIAL, +* EXEMPLARY, OR CONSEQUENTIAL DAMAGES OR OTHER LIABILITY, WHETHER IN AN +* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE +* SOFTWARE. +* ``` +*/ + +'use strict'; + +// MODULES // + +var floor = require( '@stdlib/math/base/special/floor' ); + + +// MAIN // + +/** +* Factorizes a sequence length into a product of integers. +* +* ## Notes +* +* - Factorization results are stored in the output array as follows: +* +* ```text +* [ sequence_length | number_of_factors | integer_factors | unused_storage ] +* ``` +* +* @param {NonNegativeInteger} N - length of the sequence +* @param {NonNegativeInteger} M - number of trial divisors +* @param {Collection} initial - strided array of initial trial divisors +* @param {integer} si - stride length for `initial` +* @param {NonNegativeInteger} oi - starting index for `initial` +* @param {Collection} out - output array for storing factorization results +* @param {integer} so - stride length for `out` +* @param {NonNegativeInteger} oo - starting index for `out` +* @returns {NonNegativeInteger} number of factors into which `N` was decomposed +* +* @example +* var N = 630; +* var initial = [ 3, 4, 2, 5 ]; // as found in FFTPACK +* var factors = [ 0, 0, 0, 0, 0, 0, 0 ]; +* +* var numFactors = decompose( N, 4, initial, 1, 0, factors, 1, 0 ); +* // returns 5 +* +* var f = factors.slice(); +* // returns [ 630, 5, 2, 3, 3, 5, 7 ] +* +* @example +* var N = 8; +* var initial = [ 3, 4, 2, 5 ]; // as found in FFTPACK +* var factors = [ 0, 0, 0, 0 ]; +* +* var numFactors = decompose( N, 4, initial, 1, 0, factors, 1, 0 ); +* // returns 2 +* +* var f = factors.slice(); +* // returns [ 8, 2, 2, 4 ] +*/ +function decompose( N, M, initial, si, oi, out, so, oo ) { + var divisor; + var ntrials; + var nl; + var nf; + var nq; + var nr; + var ib; + var i; + var j; + + if ( N === 0 ) { + out[ oo ] = N; + out[ oo+so ] = 0; + return 0; + } + + // Resolve the number of trial divisors: + ntrials = M; + + // Initialize a variable for storing a trial divisor: + divisor = 0; + + // Initialize a variable for storing a sub-sequence length: + nl = N; + + // Initialize a variable for keeping track of the number of factors into which `N` decomposes: + nf = 0; + + j = 0; + do { + if ( j < ntrials ) { + divisor = initial[ oi + (j * si) ]; + } else { + divisor += 2; + } + j += 1; + while ( true ) { + // Compute the integer quotient: + nq = floor( nl / divisor ); + + // Compute the remainder: + nr = nl - ( divisor * nq ); + + // If the divisor did not evenly divide the current sub-sequence length, try a new divisor... + if ( nr !== 0 ) { + break; + } + // We found a new factor: + nf += 1; + + // Update the sub-sequence length: + nl = nq; + + // Store the factor in the output array: + out[ oo+((nf+1)*so) ] = divisor; + + // When the divisor is `2` and we've already found other factors, shift the other factors right to make room for the most recent `2` factor... + if ( divisor === 2 && nf !== 1 ) { + for ( i = 2; i <= nf; i++ ) { + ib = nf - i + 2; + out[ oo+((ib+1)*so) ] = out[ oo + (ib*so) ]; + } + out[ oo+(2*so) ] = 2; + } + // If we cannot further divide the sequence length into smaller sub-sequences, we're done... + if ( nl === 1 ) { + break; + } + } + } while ( nl !== 1 ); + + // Store the sequence length: + out[ oo ] = N; + + // Store the number of factors: + out[ oo+so ] = nf; + + // Return the number of factors: + return nf; +} + + +// EXPORTS // + +module.exports = decompose; diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/generic/decompose/package.json b/lib/node_modules/@stdlib/fft/base/fftpack/generic/decompose/package.json new file mode 100644 index 000000000000..74b6c1d0d0e4 --- /dev/null +++ b/lib/node_modules/@stdlib/fft/base/fftpack/generic/decompose/package.json @@ -0,0 +1,64 @@ +{ + "name": "@stdlib/fft/base/fftpack/generic/decompose", + "version": "0.0.0", + "description": "Factorize a sequence length into a product of integers.", + "license": "Apache-2.0", + "author": { + "name": "The Stdlib Authors", + "url": "https://github.com/stdlib-js/stdlib/graphs/contributors" + }, + "contributors": [ + { + "name": "The Stdlib Authors", + "url": "https://github.com/stdlib-js/stdlib/graphs/contributors" + } + ], + "main": "./lib", + "directories": { + "benchmark": "./benchmark", + "doc": "./docs", + "example": "./examples", + "lib": "./lib", + "test": "./test" + }, + "types": "./docs/types", + "scripts": {}, + "homepage": "https://github.com/stdlib-js/stdlib", + "repository": { + "type": "git", + "url": "git://github.com/stdlib-js/stdlib.git" + }, + "bugs": { + "url": "https://github.com/stdlib-js/stdlib/issues" + }, + "dependencies": {}, + "devDependencies": {}, + "engines": { + "node": ">=0.10.0", + "npm": ">2.7.0" + }, + "os": [ + "aix", + "darwin", + "freebsd", + "linux", + "macos", + "openbsd", + "sunos", + "win32", + "windows" + ], + "keywords": [ + "stdlib", + "fft", + "fftpack", + "decompose", + "factorization", + "factorize", + "factor", + "prime", + "sequence", + "product" + ], + "__stdlib__": {} +} diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/generic/decompose/test/test.js b/lib/node_modules/@stdlib/fft/base/fftpack/generic/decompose/test/test.js new file mode 100644 index 000000000000..d5088dbe227b --- /dev/null +++ b/lib/node_modules/@stdlib/fft/base/fftpack/generic/decompose/test/test.js @@ -0,0 +1,128 @@ +/** +* @license Apache-2.0 +* +* Copyright (c) 2026 The Stdlib Authors. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +'use strict'; + +// MODULES // + +var tape = require( 'tape' ); +var decompose = require( './../lib' ); + + +// VARIABLES // + +var INITIAL = [ 3, 4, 2, 5 ]; // as found in FFTPACK + + +// TESTS // + +tape( 'main export is a function', function test( t ) { + t.ok( true, __filename ); + t.strictEqual( typeof decompose, 'function', 'main export is a function' ); + t.end(); +}); + +tape( 'the function has an arity of 8', function test( t ) { + t.strictEqual( decompose.length, 8, 'returns expected value' ); + t.end(); +}); + +tape( 'the function correctly factorizes a sequence length into a product of integers', function test( t ) { + var factors; + var nf; + + factors = [ 0, 0, 0, 0, 0, 0, 0 ]; + nf = decompose( 630, 4, INITIAL, 1, 0, factors, 1, 0 ); + + t.strictEqual( nf, 5, 'returns expected value' ); + t.strictEqual( factors[ 0 ], 630, 'returns expected value' ); + t.strictEqual( factors[ 1 ], 5, 'returns expected value' ); + t.strictEqual( factors[ 2 ], 2, 'returns expected value' ); + t.strictEqual( factors[ 3 ], 3, 'returns expected value' ); + t.strictEqual( factors[ 4 ], 3, 'returns expected value' ); + t.strictEqual( factors[ 5 ], 5, 'returns expected value' ); + t.strictEqual( factors[ 6 ], 7, 'returns expected value' ); + + factors = [ 0, 0, 0, 0 ]; + nf = decompose( 8, 4, INITIAL, 1, 0, factors, 1, 0 ); + + t.strictEqual( nf, 2, 'returns expected value' ); + t.strictEqual( factors[ 0 ], 8, 'returns expected value' ); + t.strictEqual( factors[ 1 ], 2, 'returns expected value' ); + t.strictEqual( factors[ 2 ], 2, 'returns expected value' ); + t.strictEqual( factors[ 3 ], 4, 'returns expected value' ); + + t.end(); +}); + +tape( 'the function correctly factorizes prime numbers', function test( t ) { + var primesList; + var factors; + var nf; + var i; + + // First 10 prime numbers: + primesList = [ 2, 3, 5, 7, 11, 13, 17, 19, 23, 29 ]; + + for ( i = 0; i < primesList.length; i++ ) { + factors = [ 0, 0, 0 ]; + nf = decompose( primesList[ i ], 4, INITIAL, 1, 0, factors, 1, 0 ); + + t.strictEqual( nf, 1, 'returns expected value for ' + primesList[ i ] ); + t.strictEqual( factors[ 0 ], primesList[ i ], 'returns expected value' ); + t.strictEqual( factors[ 1 ], 1, 'returns expected value' ); + t.strictEqual( factors[ 2 ], primesList[ i ], 'returns expected value' ); + } + + t.end(); +}); + +tape( 'the function returns expected results when provided a sequence length of 0', function test( t ) { + var factors; + var nf; + + factors = [ 0, 0 ]; + nf = decompose( 0, 4, INITIAL, 1, 0, factors, 1, 0 ); + + t.strictEqual( nf, 0, 'returns expected value' ); + t.strictEqual( factors[ 0 ], 0, 'returns expected value' ); + t.strictEqual( factors[ 1 ], 0, 'returns expected value' ); + + t.end(); +}); + +tape( 'the function correctly handles stride and offset parameters', function test( t ) { + var expected; + var factors; + var so; + var oo; + var nf; + + factors = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ]; + + so = 2; + oo = 1; + nf = decompose( 12, 4, INITIAL, 1, 0, factors, so, oo ); + + expected = [ 0, 12, 0, 2, 0, 3, 0, 4, 0, 0, 0 ]; + + t.strictEqual( nf, 2, 'returns expected value' ); + t.deepEqual( factors, expected, 'returns expected value' ); + + t.end(); +}); From 45d5ac3f3dd7868803effd37af219f7fcd0ac992 Mon Sep 17 00:00:00 2001 From: Gunj Joshi Date: Tue, 18 Aug 2026 12:33:11 +0530 Subject: [PATCH 02/32] remove: remove `decompose` from namespace This commit removes the `decompose` symbol from the `@stdlib/fft/base/fftpack` namespace due to a package migration. BREAKING CHANGE: remove `decompose` To migrate, users should access the same symbol via the `@stdlib/fft/base/fftpack/generic` namespace. Ref: https://github.com/stdlib-js/metr-issue-tracker/issues/1165 --- type: pre_commit_static_analysis_report description: Results of running static analysis checks when committing changes. report: - task: lint_filenames status: passed - task: lint_editorconfig status: passed - task: lint_markdown_pkg_readmes status: na - task: lint_markdown_docs status: na - task: lint_markdown status: na - task: lint_package_json status: na - task: lint_repl_help status: na - task: lint_javascript_src status: passed - task: lint_javascript_cli status: na - task: lint_javascript_examples status: na - task: lint_javascript_tests status: na - task: lint_javascript_benchmarks status: na - task: lint_python status: na - task: lint_r status: na - task: lint_c_src status: na - task: lint_c_examples status: na - task: lint_c_benchmarks status: na - task: lint_c_tests_fixtures status: na - task: lint_shell status: na - task: lint_typescript_declarations status: passed - task: lint_typescript_tests status: passed - task: lint_license_headers status: passed --- --- .../fft/base/fftpack/docs/types/index.d.ts | 23 ------------------- .../@stdlib/fft/base/fftpack/lib/index.js | 9 -------- 2 files changed, 32 deletions(-) diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/docs/types/index.d.ts b/lib/node_modules/@stdlib/fft/base/fftpack/docs/types/index.d.ts index a628f4d39fce..4c2fc99b4194 100644 --- a/lib/node_modules/@stdlib/fft/base/fftpack/docs/types/index.d.ts +++ b/lib/node_modules/@stdlib/fft/base/fftpack/docs/types/index.d.ts @@ -23,7 +23,6 @@ import cffti = require( '@stdlib/fft/base/fftpack/cffti' ); import cosqi = require( '@stdlib/fft/base/fftpack/cosqi' ); import costi = require( '@stdlib/fft/base/fftpack/costi' ); -import decompose = require( '@stdlib/fft/base/fftpack/decompose' ); import rffti = require( '@stdlib/fft/base/fftpack/rffti' ); import sinqi = require( '@stdlib/fft/base/fftpack/sinqi' ); import sinti = require( '@stdlib/fft/base/fftpack/sinti' ); @@ -138,28 +137,6 @@ interface Namespace { */ costi: typeof costi; - /** - * Factorizes a sequence length into a product of integers. - * - * @param N - length of the sequence - * @param M - number of trial divisors - * @param initial - array of initial trial divisors - * @param si - stride length for `initial` - * @param oi - starting index for `initial` - * @param out - output array for storing factorization results - * @param so - stride length for `out` - * @param oo - starting index for `out` - * @returns number of factors into which `N` was decomposed - * - * @example - * var initial = new Float64Array( [ 3, 4, 2, 5 ] ); - * var factors = new Float64Array( 4 ); - * - * var numFactors = ns.decompose( 12, 4, initial, 1, 0, factors, 1, 0 ); - * // returns 2 - */ - decompose: typeof decompose; - /** * Initializes a workspace array for performing a real-valued Fourier transform. * diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/lib/index.js b/lib/node_modules/@stdlib/fft/base/fftpack/lib/index.js index 0c5488fd1d9d..7369d79be20c 100644 --- a/lib/node_modules/@stdlib/fft/base/fftpack/lib/index.js +++ b/lib/node_modules/@stdlib/fft/base/fftpack/lib/index.js @@ -67,15 +67,6 @@ setReadOnly( ns, 'cosqi', require( '@stdlib/fft/base/fftpack/cosqi' ) ); */ setReadOnly( ns, 'costi', require( '@stdlib/fft/base/fftpack/costi' ) ); -/** -* @name decompose -* @memberof ns -* @readonly -* @type {Function} -* @see {@link module:@stdlib/fft/base/fftpack/decompose} -*/ -setReadOnly( ns, 'decompose', require( '@stdlib/fft/base/fftpack/decompose' ) ); - /** * @name rffti * @memberof ns From 47268120a4184152fa78d49b47b97e3bd5738bcd Mon Sep 17 00:00:00 2001 From: Gunj Joshi Date: Tue, 18 Aug 2026 12:50:36 +0530 Subject: [PATCH 03/32] refactor: update paths Ref: https://github.com/stdlib-js/metr-issue-tracker/issues/1165 --- type: pre_commit_static_analysis_report description: Results of running static analysis checks when committing changes. report: - task: lint_filenames status: passed - task: lint_editorconfig status: passed - task: lint_markdown_pkg_readmes status: na - task: lint_markdown_docs status: na - task: lint_markdown status: na - task: lint_package_json status: na - task: lint_repl_help status: na - task: lint_javascript_src status: passed - task: lint_javascript_cli status: na - task: lint_javascript_examples status: na - task: lint_javascript_tests status: na - task: lint_javascript_benchmarks status: na - task: lint_python status: na - task: lint_r status: na - task: lint_c_src status: na - task: lint_c_examples status: na - task: lint_c_benchmarks status: na - task: lint_c_tests_fixtures status: na - task: lint_shell status: na - task: lint_typescript_declarations status: passed - task: lint_typescript_tests status: na - task: lint_license_headers status: passed --- --- lib/node_modules/@stdlib/fft/base/fftpack/cffti/lib/cffti1.js | 2 +- lib/node_modules/@stdlib/fft/base/fftpack/rffti/lib/rffti1.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/cffti/lib/cffti1.js b/lib/node_modules/@stdlib/fft/base/fftpack/cffti/lib/cffti1.js index 46959d31a6b3..339bb68645e2 100644 --- a/lib/node_modules/@stdlib/fft/base/fftpack/cffti/lib/cffti1.js +++ b/lib/node_modules/@stdlib/fft/base/fftpack/cffti/lib/cffti1.js @@ -65,7 +65,7 @@ var sincos = require( '@stdlib/math/base/special/sincos' ).assign; var TWO_PI = require( '@stdlib/constants/float64/two-pi' ); var floor = require( '@stdlib/math/base/special/floor' ); -var decompose = require( '@stdlib/fft/base/fftpack/decompose' ); +var decompose = require( '@stdlib/fft/base/fftpack/generic/decompose' ); // VARIABLES // diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/rffti/lib/rffti1.js b/lib/node_modules/@stdlib/fft/base/fftpack/rffti/lib/rffti1.js index ba401e085efc..cafc381f7dd5 100644 --- a/lib/node_modules/@stdlib/fft/base/fftpack/rffti/lib/rffti1.js +++ b/lib/node_modules/@stdlib/fft/base/fftpack/rffti/lib/rffti1.js @@ -63,7 +63,7 @@ var sincos = require( '@stdlib/math/base/special/sincos' ).assign; var TWO_PI = require( '@stdlib/constants/float64/two-pi' ); var floor = require( '@stdlib/math/base/special/floor' ); -var decompose = require( '@stdlib/fft/base/fftpack/decompose' ); +var decompose = require( '@stdlib/fft/base/fftpack/generic/decompose' ); // VARIABLES // From 05e0c4a4a273f7bf6faad2252e92705cc98efce4 Mon Sep 17 00:00:00 2001 From: Gunj Joshi Date: Tue, 18 Aug 2026 12:54:02 +0530 Subject: [PATCH 04/32] remove: remove `fft/base/fftpack/decompose` This commit removes `@stdlib/fft/base/fftpack/decompose` in favor of `@stdlib/fft/base/fftpack/generic/decompose`. BREAKING CHANGE: remove `fft/base/fftpack/decompose` To migrate, users should update their require/import paths to use `@stdlib/fft/base/fftpack/generic/decompose` which provides the same API and implementation. Ref: https://github.com/stdlib-js/metr-issue-tracker/issues/1165 --- type: pre_commit_static_analysis_report description: Results of running static analysis checks when committing changes. report: - task: lint_filenames status: passed - task: lint_editorconfig status: passed - task: lint_markdown_pkg_readmes status: na - task: lint_markdown_docs status: na - task: lint_markdown status: na - task: lint_package_json status: na - task: lint_repl_help status: na - task: lint_javascript_src status: na - task: lint_javascript_cli status: na - task: lint_javascript_examples status: na - task: lint_javascript_tests status: na - task: lint_javascript_benchmarks status: na - task: lint_python status: na - task: lint_r status: na - task: lint_c_src status: na - task: lint_c_examples status: na - task: lint_c_benchmarks status: na - task: lint_c_tests_fixtures status: na - task: lint_shell status: na - task: lint_typescript_declarations status: passed - task: lint_typescript_tests status: na - task: lint_license_headers status: passed --- --- .../fft/base/fftpack/decompose/README.md | 142 ------------- .../fftpack/decompose/benchmark/benchmark.js | 107 ---------- .../fft/base/fftpack/decompose/docs/repl.txt | 55 ----- .../fftpack/decompose/docs/types/index.d.ts | 50 ----- .../base/fftpack/decompose/docs/types/test.ts | 162 --------------- .../base/fftpack/decompose/examples/index.js | 35 ---- .../fft/base/fftpack/decompose/lib/index.js | 54 ----- .../fft/base/fftpack/decompose/lib/main.js | 196 ------------------ .../fft/base/fftpack/decompose/package.json | 64 ------ .../fft/base/fftpack/decompose/test/test.js | 128 ------------ 10 files changed, 993 deletions(-) delete mode 100644 lib/node_modules/@stdlib/fft/base/fftpack/decompose/README.md delete mode 100644 lib/node_modules/@stdlib/fft/base/fftpack/decompose/benchmark/benchmark.js delete mode 100644 lib/node_modules/@stdlib/fft/base/fftpack/decompose/docs/repl.txt delete mode 100644 lib/node_modules/@stdlib/fft/base/fftpack/decompose/docs/types/index.d.ts delete mode 100644 lib/node_modules/@stdlib/fft/base/fftpack/decompose/docs/types/test.ts delete mode 100644 lib/node_modules/@stdlib/fft/base/fftpack/decompose/examples/index.js delete mode 100644 lib/node_modules/@stdlib/fft/base/fftpack/decompose/lib/index.js delete mode 100644 lib/node_modules/@stdlib/fft/base/fftpack/decompose/lib/main.js delete mode 100644 lib/node_modules/@stdlib/fft/base/fftpack/decompose/package.json delete mode 100644 lib/node_modules/@stdlib/fft/base/fftpack/decompose/test/test.js diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/decompose/README.md b/lib/node_modules/@stdlib/fft/base/fftpack/decompose/README.md deleted file mode 100644 index af5c32205bfc..000000000000 --- a/lib/node_modules/@stdlib/fft/base/fftpack/decompose/README.md +++ /dev/null @@ -1,142 +0,0 @@ - - -# decompose - -> Factorize a sequence length into a product of integers. - - - -
- -
- - - - - -
- -## Usage - -```javascript -var decompose = require( '@stdlib/fft/base/fftpack/decompose' ); -``` - -#### decompose( N, M, initial, si, oi, out, so, oo ) - -Factorizes a sequence length into a product of integers. - -```javascript -var initial = [ 3, 4, 2, 5 ]; // as found in FFTPACK -var N = 630; -var factors = [ 0, 0, 0, 0, 0, 0, 0 ]; - -var numFactors = decompose( N, 4, initial, 1, 0, factors, 1, 0 ); -// returns 5 - -console.log( factors ); -// => [ 630, 5, 2, 3, 3, 5, 7 ] -``` - -The function accepts the following arguments: - -- **N**: length of the sequence. -- **M**: number of trial divisors. -- **initial**: array of initial trial divisors. -- **si**: stride length for `initial`. -- **oi**: starting index for `initial`. -- **out**: output array for storing factorization results. -- **so**: stride length for `out`. -- **oo**: starting index for `out`. - -The function returns the number of factors into which `N` was decomposed. - -
- - - - - -
- -## Notes - -- Factorization results are stored in the output array as follows: - - ```text - [ sequence_length | number_of_factors | integer_factors | unused_storage ] - ``` - -
- - - -
- -## Examples - - - -```javascript -var decompose = require( '@stdlib/fft/base/fftpack/decompose' ); - -var initial = [ 3, 4, 2, 5 ]; // as found in FFTPACK -var factors = [ 0, 0, 0, 0 ]; - -var nf = decompose( 12, 4, initial, 1, 0, factors, 1, 0 ); - -console.log( 'Sequence length: %d', 12 ); -console.log( 'Number of factors: %d', nf ); - -console.log( 'Factors:' ); -var j; -for ( j = 0; j < nf; j++ ) { - console.log( ' %d', factors[ j+2 ] ); -} -``` - -
- - - - - -
- -
- - - - - - - - - - - - - - diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/decompose/benchmark/benchmark.js b/lib/node_modules/@stdlib/fft/base/fftpack/decompose/benchmark/benchmark.js deleted file mode 100644 index 604afa551b4e..000000000000 --- a/lib/node_modules/@stdlib/fft/base/fftpack/decompose/benchmark/benchmark.js +++ /dev/null @@ -1,107 +0,0 @@ -/* -* @license Apache-2.0 -* -* Copyright (c) 2026 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench' ); -var format = require( '@stdlib/string/format' ); -var isnan = require( '@stdlib/math/base/assert/is-nan' ); -var floor = require( '@stdlib/math/base/special/floor' ); -var log2 = require( '@stdlib/math/base/special/log2' ); -var zeros = require( '@stdlib/array/zeros' ); -var pkg = require( './../package.json' ).name; -var decompose = require( './../lib' ); - - -// VARIABLES // - -var initial = [ 3, 4, 2, 5 ]; // as found in FFTPACK - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} N - sequence length -* @returns {Function} benchmark function -*/ -function createBenchmark( N ) { - var factors = zeros( 2 + floor( log2( N ) ) ); - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var d; - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - d = decompose( N, 4, initial, 1, 0, factors, 1, 0 ); - if ( isnan( d ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( d ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var lengths; - var N; - var f; - var i; - - lengths = [ - 12, - 24, - 36, - 48, - 60, - 120 - ]; - - for ( i = 0; i < lengths.length; i++ ) { - N = lengths[ i ]; - f = createBenchmark( N ); - bench( format( '%s:N=%d', pkg, N ), f ); - } -} - -main(); diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/decompose/docs/repl.txt b/lib/node_modules/@stdlib/fft/base/fftpack/decompose/docs/repl.txt deleted file mode 100644 index 964ed8270c71..000000000000 --- a/lib/node_modules/@stdlib/fft/base/fftpack/decompose/docs/repl.txt +++ /dev/null @@ -1,55 +0,0 @@ - -{{alias}}( N, M, initial, si, oi, out, so, oo ) - Factorizes a sequence length into a product of integers. - - Factorization results are stored in the output array sequentially, where - the first element contains the sequence length N, the second element - contains the number of factors into which N was decomposed, and subsequent - elements contain the individual integer factors. - - Any remaining array space remains as unused storage. - - Parameters - ---------- - N: integer - Length of the sequence. - - M: integer - Number of trial divisors. - - initial: ArrayLikeObject - Array of initial trial divisors. - - si: integer - Stride length for `initial`. - - oi: integer - Starting index for `initial`. - - out: ArrayLikeObject - Output array for storing factorization results. - - so: integer - Stride length for `out`. - - oo: integer - Starting index for `out`. - - Returns - ------- - numFactors: integer - Number of factors into which N was decomposed. - - Examples - -------- - > var N = 630; - > var initial = [ 3, 4, 2, 5 ]; - > var factors = [ 0, 0, 0, 0, 0, 0, 0 ]; - > var numFactors = {{alias}}( N, 4, initial, 1, 0, factors, 1, 0 ) - 5 - > factors - [ 630, 5, 2, 3, 3, 5, 7 ] - - See Also - -------- - diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/decompose/docs/types/index.d.ts b/lib/node_modules/@stdlib/fft/base/fftpack/decompose/docs/types/index.d.ts deleted file mode 100644 index 686266a120ed..000000000000 --- a/lib/node_modules/@stdlib/fft/base/fftpack/decompose/docs/types/index.d.ts +++ /dev/null @@ -1,50 +0,0 @@ -/* -* @license Apache-2.0 -* -* Copyright (c) 2026 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -// TypeScript Version: 4.1 - -/// - -import { Collection } from '@stdlib/types/array'; - -/** -* Factorizes a sequence length into a product of integers. -* -* @param N - length of the sequence -* @param M - number of trial divisors -* @param initial - array of initial trial divisors -* @param si - stride length for `initial` -* @param oi - starting index for `initial` -* @param out - output array for storing factorization results -* @param so - stride length for `out` -* @param oo - starting index for `out` -* @returns number of factors into which `N` was decomposed -* -* @example -* var initial = new Float64Array( [ 3, 4, 2, 5 ] ); -* var factors = new Float64Array( 4 ); -* -* var numFactors = decompose( 12, 4, initial, 1, 0, factors, 1, 0 ); -* // returns 2 -*/ -declare function decompose( N: number, M: number, initial: Collection, si: number, oi: number, out: Collection, so: number, oo: number ): number; - - -// EXPORTS // - -export = decompose; diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/decompose/docs/types/test.ts b/lib/node_modules/@stdlib/fft/base/fftpack/decompose/docs/types/test.ts deleted file mode 100644 index 011b915a8882..000000000000 --- a/lib/node_modules/@stdlib/fft/base/fftpack/decompose/docs/types/test.ts +++ /dev/null @@ -1,162 +0,0 @@ -/* -* @license Apache-2.0 -* -* Copyright (c) 2026 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -import decompose = require( './index' ); - -// TESTS // - -// The function returns a number... -{ - const initial = [ 3, 4, 2, 5 ]; - const out = [ 0, 0, 0, 0, 0, 0, 0 ]; - - decompose( 12, 4, initial, 1, 0, out, 1, 0 ); // $ExpectType number -} - -// The compiler throws an error if the function is provided a first argument which is not a number... -{ - const initial = [ 3, 4, 2, 5 ]; - const out = [ 0, 0, 0, 0, 0, 0, 0 ]; - - decompose( '12', 4, initial, 1, 0, out, 1, 0 ); // $ExpectError - decompose( true, 4, initial, 1, 0, out, 1, 0 ); // $ExpectError - decompose( false, 4, initial, 1, 0, out, 1, 0 ); // $ExpectError - decompose( null, 4, initial, 1, 0, out, 1, 0 ); // $ExpectError - decompose( void 0, 4, initial, 1, 0, out, 1, 0 ); // $ExpectError - decompose( [], 4, initial, 1, 0, out, 1, 0 ); // $ExpectError - decompose( {}, 4, initial, 1, 0, out, 1, 0 ); // $ExpectError - decompose( ( x: number ): number => x, 4, initial, 1, 0, out, 1, 0 ); // $ExpectError -} - -// The compiler throws an error if the function is provided a second argument which is not a number... -{ - const initial = [ 3, 4, 2, 5 ]; - const out = [ 0, 0, 0, 0, 0, 0, 0 ]; - - decompose( 12, '4', initial, 1, 0, out, 1, 0 ); // $ExpectError - decompose( 12, true, initial, 1, 0, out, 1, 0 ); // $ExpectError - decompose( 12, false, initial, 1, 0, out, 1, 0 ); // $ExpectError - decompose( 12, null, initial, 1, 0, out, 1, 0 ); // $ExpectError - decompose( 12, void 0, initial, 1, 0, out, 1, 0 ); // $ExpectError - decompose( 12, [], initial, 1, 0, out, 1, 0 ); // $ExpectError - decompose( 12, {}, initial, 1, 0, out, 1, 0 ); // $ExpectError - decompose( 12, ( x: number ): number => x, initial, 1, 0, out, 1, 0 ); // $ExpectError -} - -// The compiler throws an error if the function is provided a third argument which is not an array of numbers... -{ - const out = [ 0, 0, 0, 0, 0, 0, 0 ]; - - decompose( 12, 4, '4,2,3,5', 1, 0, out, 1, 0 ); // $ExpectError - decompose( 12, 4, 5, 1, 0, out, 1, 0 ); // $ExpectError - decompose( 12, 4, true, 1, 0, out, 1, 0 ); // $ExpectError - decompose( 12, 4, false, 1, 0, out, 1, 0 ); // $ExpectError - decompose( 12, 4, null, 1, 0, out, 1, 0 ); // $ExpectError - decompose( 12, 4, void 0, 1, 0, out, 1, 0 ); // $ExpectError - decompose( 12, 4, {}, 1, 0, out, 1, 0 ); // $ExpectError - decompose( 12, 4, ( x: number ): number => x, 1, 0, out, 1, 0 ); // $ExpectError -} - -// The compiler throws an error if the function is provided a fourth argument which is not a number... -{ - const initial = [ 3, 4, 2, 5 ]; - const out = [ 0, 0, 0, 0, 0, 0, 0 ]; - - decompose( 12, 4, initial, '1', 0, out, 1, 0 ); // $ExpectError - decompose( 12, 4, initial, true, 0, out, 1, 0 ); // $ExpectError - decompose( 12, 4, initial, false, 0, out, 1, 0 ); // $ExpectError - decompose( 12, 4, initial, null, 0, out, 1, 0 ); // $ExpectError - decompose( 12, 4, initial, void 0, 0, out, 1, 0 ); // $ExpectError - decompose( 12, 4, initial, [], 0, out, 1, 0 ); // $ExpectError - decompose( 12, 4, initial, {}, 0, out, 1, 0 ); // $ExpectError - decompose( 12, 4, initial, ( x: number ): number => x, 0, out, 1, 0 ); // $ExpectError -} - -// The compiler throws an error if the function is provided a fifth argument which is not a number... -{ - const initial = [ 3, 4, 2, 5 ]; - const out = [ 0, 0, 0, 0, 0, 0, 0 ]; - - decompose( 12, 4, initial, 1, '0', out, 1, 0 ); // $ExpectError - decompose( 12, 4, initial, 1, true, out, 1, 0 ); // $ExpectError - decompose( 12, 4, initial, 1, false, out, 1, 0 ); // $ExpectError - decompose( 12, 4, initial, 1, null, out, 1, 0 ); // $ExpectError - decompose( 12, 4, initial, 1, void 0, out, 1, 0 ); // $ExpectError - decompose( 12, 4, initial, 1, [], out, 1, 0 ); // $ExpectError - decompose( 12, 4, initial, 1, {}, out, 1, 0 ); // $ExpectError - decompose( 12, 4, initial, 1, ( x: number ): number => x, out, 1, 0 ); // $ExpectError -} - -// The compiler throws an error if the function is provided a sixth argument which is not an array... -{ - const initial = [ 3, 4, 2, 5 ]; - - decompose( 12, 4, initial, 1, 0, 123, 1, 0 ); // $ExpectError - decompose( 12, 4, initial, 1, 0, true, 1, 0 ); // $ExpectError - decompose( 12, 4, initial, 1, 0, false, 1, 0 ); // $ExpectError - decompose( 12, 4, initial, 1, 0, null, 1, 0 ); // $ExpectError - decompose( 12, 4, initial, 1, 0, void 0, 1, 0 ); // $ExpectError - decompose( 12, 4, initial, 1, 0, {}, 1, 0 ); // $ExpectError - decompose( 12, 4, initial, 1, 0, ( x: number ): number => x, 1, 0 ); // $ExpectError -} - -// The compiler throws an error if the function is provided a seventh argument which is not a number... -{ - const initial = [ 3, 4, 2, 5 ]; - const out = [ 0, 0, 0, 0, 0, 0, 0 ]; - - decompose( 12, 4, initial, 1, 0, out, '1', 0 ); // $ExpectError - decompose( 12, 4, initial, 1, 0, out, true, 0 ); // $ExpectError - decompose( 12, 4, initial, 1, 0, out, false, 0 ); // $ExpectError - decompose( 12, 4, initial, 1, 0, out, null, 0 ); // $ExpectError - decompose( 12, 4, initial, 1, 0, out, void 0, 0 ); // $ExpectError - decompose( 12, 4, initial, 1, 0, out, [], 0 ); // $ExpectError - decompose( 12, 4, initial, 1, 0, out, {}, 0 ); // $ExpectError - decompose( 12, 4, initial, 1, 0, out, ( x: number ): number => x, 0 ); // $ExpectError -} - -// The compiler throws an error if the function is provided an eighth argument which is not a number... -{ - const initial = [ 3, 4, 2, 5 ]; - const out = [ 0, 0, 0, 0, 0, 0, 0 ]; - - decompose( 12, 4, initial, 1, 0, out, 1, '0' ); // $ExpectError - decompose( 12, 4, initial, 1, 0, out, 1, true ); // $ExpectError - decompose( 12, 4, initial, 1, 0, out, 1, false ); // $ExpectError - decompose( 12, 4, initial, 1, 0, out, 1, null ); // $ExpectError - decompose( 12, 4, initial, 1, 0, out, 1, void 0 ); // $ExpectError - decompose( 12, 4, initial, 1, 0, out, 1, [] ); // $ExpectError - decompose( 12, 4, initial, 1, 0, out, 1, {} ); // $ExpectError - decompose( 12, 4, initial, 1, 0, out, 1, ( x: number ): number => x ); // $ExpectError -} - -// The compiler throws an error if the function is provided an unsupported number of arguments... -{ - const initial = [ 3, 4, 2, 5 ]; - const out = [ 0, 0, 0, 0, 0, 0, 0 ]; - - decompose(); // $ExpectError - decompose( 12 ); // $ExpectError - decompose( 12, 4 ); // $ExpectError - decompose( 12, 4, initial ); // $ExpectError - decompose( 12, 4, initial, 1 ); // $ExpectError - decompose( 12, 4, initial, 1, 0 ); // $ExpectError - decompose( 12, 4, initial, 1, 0, out ); // $ExpectError - decompose( 12, 4, initial, 1, 0, out, 1 ); // $ExpectError - decompose( 12, 4, initial, 1, 0, out, 1, 0, 123 ); // $ExpectError -} diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/decompose/examples/index.js b/lib/node_modules/@stdlib/fft/base/fftpack/decompose/examples/index.js deleted file mode 100644 index 11005ed1d37f..000000000000 --- a/lib/node_modules/@stdlib/fft/base/fftpack/decompose/examples/index.js +++ /dev/null @@ -1,35 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2026 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -var decompose = require( './../lib' ); - -var initial = [ 3, 4, 2, 5 ]; // as found in FFTPACK -var factors = [ 0, 0, 0, 0 ]; - -var nf = decompose( 12, 4, initial, 1, 0, factors, 1, 0 ); - -console.log( 'Sequence length: %d', 12 ); -console.log( 'Number of factors: %d', nf ); - -console.log( 'Factors:' ); -var j; -for ( j = 0; j < nf; j++ ) { - console.log( ' %d', factors[ j+2 ] ); -} diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/decompose/lib/index.js b/lib/node_modules/@stdlib/fft/base/fftpack/decompose/lib/index.js deleted file mode 100644 index 5e7183ef5062..000000000000 --- a/lib/node_modules/@stdlib/fft/base/fftpack/decompose/lib/index.js +++ /dev/null @@ -1,54 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2026 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -/** -* Factorize a sequence length into a product of integers. -* -* @module @stdlib/fft/base/fftpack/decompose -* -* @example -* var decompose = require( '@stdlib/fft/base/fftpack/decompose' ); -* -* var N = 630; -* var initial = [ 3, 4, 2, 5 ]; // as found in FFTPACK -* var factors = [ 0, 0, 0, 0, 0, 0, 0 ]; -* -* var numFactors = decompose( N, 4, initial, 1, 0, factors, 1, 0 ); -* // returns 5 -* -* @example -* var decompose = require( '@stdlib/fft/base/fftpack/decompose' ); -* -* var N = 12; -* var initial = [ 3, 4, 2, 5 ]; // as found in FFTPACK -* var factors = [ 0, 0, 0, 0 ]; -* -* var numFactors = decompose( N, 4, initial, 1, 0, factors, 1, 0 ); -* // returns 2 -*/ - -// MODULES // - -var main = require( './main.js' ); - - -// EXPORTS // - -module.exports = main; diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/decompose/lib/main.js b/lib/node_modules/@stdlib/fft/base/fftpack/decompose/lib/main.js deleted file mode 100644 index 921f8db5ecaa..000000000000 --- a/lib/node_modules/@stdlib/fft/base/fftpack/decompose/lib/main.js +++ /dev/null @@ -1,196 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2026 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -* -* -* ## Notice -* -* The original C code and copyright notice are from the [PFFFT library]{@link https://github.com/marton78/pffft/blob/0b4ee12c4ba45a4a8e567550c16d96d1679f50ce/src/fftpack.c}. The implementation follows the original, but has been modified for JavaScript. -* -* ```text -* Copyright (c) 2004 the University Corporation for Atmospheric -* Research ("UCAR"). All rights reserved. Developed by NCAR's -* Computational and Information Systems Laboratory, UCAR, -* www.cisl.ucar.edu. -* -* Redistribution and use of the Software in source and binary forms, -* with or without modification, is permitted provided that the -* following conditions are met: -* -* - Neither the names of NCAR's Computational and Information Systems -* Laboratory, the University Corporation for Atmospheric Research, -* nor the names of its sponsors or contributors may be used to -* endorse or promote products derived from this Software without -* specific prior written permission. -* -* - Redistributions of source code must retain the above copyright -* notices, this list of conditions, and the disclaimer below. -* -* - Redistributions in binary form must reproduce the above copyright -* notice, this list of conditions, and the disclaimer below in the -* documentation and/or other materials provided with the -* distribution. -* -* THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -* EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO THE WARRANTIES OF -* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -* NONINFRINGEMENT. IN NO EVENT SHALL THE CONTRIBUTORS OR COPYRIGHT -* HOLDERS BE LIABLE FOR ANY CLAIM, INDIRECT, INCIDENTAL, SPECIAL, -* EXEMPLARY, OR CONSEQUENTIAL DAMAGES OR OTHER LIABILITY, WHETHER IN AN -* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE -* SOFTWARE. -* ``` -*/ - -'use strict'; - -// MODULES // - -var floor = require( '@stdlib/math/base/special/floor' ); - - -// MAIN // - -/** -* Factorizes a sequence length into a product of integers. -* -* ## Notes -* -* - Factorization results are stored in the output array as follows: -* -* ```text -* [ sequence_length | number_of_factors | integer_factors | unused_storage ] -* ``` -* -* @param {NonNegativeInteger} N - length of the sequence -* @param {NonNegativeInteger} M - number of trial divisors -* @param {Collection} initial - strided array of initial trial divisors -* @param {integer} si - stride length for `initial` -* @param {NonNegativeInteger} oi - starting index for `initial` -* @param {Collection} out - output array for storing factorization results -* @param {integer} so - stride length for `out` -* @param {NonNegativeInteger} oo - starting index for `out` -* @returns {NonNegativeInteger} number of factors into which `N` was decomposed -* -* @example -* var N = 630; -* var initial = [ 3, 4, 2, 5 ]; // as found in FFTPACK -* var factors = [ 0, 0, 0, 0, 0, 0, 0 ]; -* -* var numFactors = decompose( N, 4, initial, 1, 0, factors, 1, 0 ); -* // returns 5 -* -* var f = factors.slice(); -* // returns [ 630, 5, 2, 3, 3, 5, 7 ] -* -* @example -* var N = 8; -* var initial = [ 3, 4, 2, 5 ]; // as found in FFTPACK -* var factors = [ 0, 0, 0, 0 ]; -* -* var numFactors = decompose( N, 4, initial, 1, 0, factors, 1, 0 ); -* // returns 2 -* -* var f = factors.slice(); -* // returns [ 8, 2, 2, 4 ] -*/ -function decompose( N, M, initial, si, oi, out, so, oo ) { - var divisor; - var ntrials; - var nl; - var nf; - var nq; - var nr; - var ib; - var i; - var j; - - if ( N === 0 ) { - out[ oo ] = N; - out[ oo+so ] = 0; - return 0; - } - - // Resolve the number of trial divisors: - ntrials = M; - - // Initialize a variable for storing a trial divisor: - divisor = 0; - - // Initialize a variable for storing a sub-sequence length: - nl = N; - - // Initialize a variable for keeping track of the number of factors into which `N` decomposes: - nf = 0; - - j = 0; - do { - if ( j < ntrials ) { - divisor = initial[ oi + (j * si) ]; - } else { - divisor += 2; - } - j += 1; - while ( true ) { - // Compute the integer quotient: - nq = floor( nl / divisor ); - - // Compute the remainder: - nr = nl - ( divisor * nq ); - - // If the divisor did not evenly divide the current sub-sequence length, try a new divisor... - if ( nr !== 0 ) { - break; - } - // We found a new factor: - nf += 1; - - // Update the sub-sequence length: - nl = nq; - - // Store the factor in the output array: - out[ oo+((nf+1)*so) ] = divisor; - - // When the divisor is `2` and we've already found other factors, shift the other factors right to make room for the most recent `2` factor... - if ( divisor === 2 && nf !== 1 ) { - for ( i = 2; i <= nf; i++ ) { - ib = nf - i + 2; - out[ oo+((ib+1)*so) ] = out[ oo + (ib*so) ]; - } - out[ oo+(2*so) ] = 2; - } - // If we cannot further divide the sequence length into smaller sub-sequences, we're done... - if ( nl === 1 ) { - break; - } - } - } while ( nl !== 1 ); - - // Store the sequence length: - out[ oo ] = N; - - // Store the number of factors: - out[ oo+so ] = nf; - - // Return the number of factors: - return nf; -} - - -// EXPORTS // - -module.exports = decompose; diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/decompose/package.json b/lib/node_modules/@stdlib/fft/base/fftpack/decompose/package.json deleted file mode 100644 index b56ddcebca1c..000000000000 --- a/lib/node_modules/@stdlib/fft/base/fftpack/decompose/package.json +++ /dev/null @@ -1,64 +0,0 @@ -{ - "name": "@stdlib/fft/base/fftpack/decompose", - "version": "0.0.0", - "description": "Factorize a sequence length into a product of integers.", - "license": "Apache-2.0", - "author": { - "name": "The Stdlib Authors", - "url": "https://github.com/stdlib-js/stdlib/graphs/contributors" - }, - "contributors": [ - { - "name": "The Stdlib Authors", - "url": "https://github.com/stdlib-js/stdlib/graphs/contributors" - } - ], - "main": "./lib", - "directories": { - "benchmark": "./benchmark", - "doc": "./docs", - "example": "./examples", - "lib": "./lib", - "test": "./test" - }, - "types": "./docs/types", - "scripts": {}, - "homepage": "https://github.com/stdlib-js/stdlib", - "repository": { - "type": "git", - "url": "git://github.com/stdlib-js/stdlib.git" - }, - "bugs": { - "url": "https://github.com/stdlib-js/stdlib/issues" - }, - "dependencies": {}, - "devDependencies": {}, - "engines": { - "node": ">=0.10.0", - "npm": ">2.7.0" - }, - "os": [ - "aix", - "darwin", - "freebsd", - "linux", - "macos", - "openbsd", - "sunos", - "win32", - "windows" - ], - "keywords": [ - "stdlib", - "fft", - "fftpack", - "decompose", - "factorization", - "factorize", - "factor", - "prime", - "sequence", - "product" - ], - "__stdlib__": {} -} diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/decompose/test/test.js b/lib/node_modules/@stdlib/fft/base/fftpack/decompose/test/test.js deleted file mode 100644 index d5088dbe227b..000000000000 --- a/lib/node_modules/@stdlib/fft/base/fftpack/decompose/test/test.js +++ /dev/null @@ -1,128 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2026 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var decompose = require( './../lib' ); - - -// VARIABLES // - -var INITIAL = [ 3, 4, 2, 5 ]; // as found in FFTPACK - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof decompose, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function has an arity of 8', function test( t ) { - t.strictEqual( decompose.length, 8, 'returns expected value' ); - t.end(); -}); - -tape( 'the function correctly factorizes a sequence length into a product of integers', function test( t ) { - var factors; - var nf; - - factors = [ 0, 0, 0, 0, 0, 0, 0 ]; - nf = decompose( 630, 4, INITIAL, 1, 0, factors, 1, 0 ); - - t.strictEqual( nf, 5, 'returns expected value' ); - t.strictEqual( factors[ 0 ], 630, 'returns expected value' ); - t.strictEqual( factors[ 1 ], 5, 'returns expected value' ); - t.strictEqual( factors[ 2 ], 2, 'returns expected value' ); - t.strictEqual( factors[ 3 ], 3, 'returns expected value' ); - t.strictEqual( factors[ 4 ], 3, 'returns expected value' ); - t.strictEqual( factors[ 5 ], 5, 'returns expected value' ); - t.strictEqual( factors[ 6 ], 7, 'returns expected value' ); - - factors = [ 0, 0, 0, 0 ]; - nf = decompose( 8, 4, INITIAL, 1, 0, factors, 1, 0 ); - - t.strictEqual( nf, 2, 'returns expected value' ); - t.strictEqual( factors[ 0 ], 8, 'returns expected value' ); - t.strictEqual( factors[ 1 ], 2, 'returns expected value' ); - t.strictEqual( factors[ 2 ], 2, 'returns expected value' ); - t.strictEqual( factors[ 3 ], 4, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function correctly factorizes prime numbers', function test( t ) { - var primesList; - var factors; - var nf; - var i; - - // First 10 prime numbers: - primesList = [ 2, 3, 5, 7, 11, 13, 17, 19, 23, 29 ]; - - for ( i = 0; i < primesList.length; i++ ) { - factors = [ 0, 0, 0 ]; - nf = decompose( primesList[ i ], 4, INITIAL, 1, 0, factors, 1, 0 ); - - t.strictEqual( nf, 1, 'returns expected value for ' + primesList[ i ] ); - t.strictEqual( factors[ 0 ], primesList[ i ], 'returns expected value' ); - t.strictEqual( factors[ 1 ], 1, 'returns expected value' ); - t.strictEqual( factors[ 2 ], primesList[ i ], 'returns expected value' ); - } - - t.end(); -}); - -tape( 'the function returns expected results when provided a sequence length of 0', function test( t ) { - var factors; - var nf; - - factors = [ 0, 0 ]; - nf = decompose( 0, 4, INITIAL, 1, 0, factors, 1, 0 ); - - t.strictEqual( nf, 0, 'returns expected value' ); - t.strictEqual( factors[ 0 ], 0, 'returns expected value' ); - t.strictEqual( factors[ 1 ], 0, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function correctly handles stride and offset parameters', function test( t ) { - var expected; - var factors; - var so; - var oo; - var nf; - - factors = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ]; - - so = 2; - oo = 1; - nf = decompose( 12, 4, INITIAL, 1, 0, factors, so, oo ); - - expected = [ 0, 12, 0, 2, 0, 3, 0, 4, 0, 0, 0 ]; - - t.strictEqual( nf, 2, 'returns expected value' ); - t.deepEqual( factors, expected, 'returns expected value' ); - - t.end(); -}); From 541fbc498f7e11249119db6e5fee2bbd1d6eba71 Mon Sep 17 00:00:00 2001 From: Gunj Joshi Date: Tue, 18 Aug 2026 13:25:22 +0530 Subject: [PATCH 05/32] feat: add `fft/base/fftpack/generic/cffti` Ref: https://github.com/stdlib-js/metr-issue-tracker/issues/1165 --- type: pre_commit_static_analysis_report description: Results of running static analysis checks when committing changes. report: - task: lint_filenames status: passed - task: lint_editorconfig status: passed - task: lint_markdown_pkg_readmes status: passed - task: lint_markdown_docs status: na - task: lint_markdown status: na - task: lint_package_json status: passed - task: lint_repl_help status: passed - task: lint_javascript_src status: passed - task: lint_javascript_cli status: na - task: lint_javascript_examples status: passed - task: lint_javascript_tests status: passed - task: lint_javascript_benchmarks status: passed - task: lint_python status: na - task: lint_r status: na - task: lint_c_src status: na - task: lint_c_examples status: na - task: lint_c_benchmarks status: na - task: lint_c_tests_fixtures status: passed - task: lint_shell status: na - task: lint_typescript_declarations status: passed - task: lint_typescript_tests status: passed - task: lint_license_headers status: passed --- --- .../fft/base/fftpack/generic/cffti/README.md | 167 ++++++++++ .../generic/cffti/benchmark/benchmark.js | 101 +++++++ .../base/fftpack/generic/cffti/docs/repl.txt | 54 ++++ .../generic/cffti/docs/types/index.d.ts | 62 ++++ .../fftpack/generic/cffti/docs/types/test.ts | 94 ++++++ .../fftpack/generic/cffti/examples/index.js | 41 +++ .../base/fftpack/generic/cffti/lib/cffti1.js | 202 +++++++++++++ .../base/fftpack/generic/cffti/lib/index.js | 53 ++++ .../base/fftpack/generic/cffti/lib/main.js | 176 +++++++++++ .../base/fftpack/generic/cffti/package.json | 64 ++++ .../cffti/test/fixtures/c/fftpack/Makefile | 137 +++++++++ .../cffti/test/fixtures/c/fftpack/large.json | 1 + .../cffti/test/fixtures/c/fftpack/medium.json | 1 + .../cffti/test/fixtures/c/fftpack/runner.c | 286 ++++++++++++++++++ .../cffti/test/fixtures/c/fftpack/small.json | 1 + .../base/fftpack/generic/cffti/test/test.js | 231 ++++++++++++++ 16 files changed, 1671 insertions(+) create mode 100644 lib/node_modules/@stdlib/fft/base/fftpack/generic/cffti/README.md create mode 100644 lib/node_modules/@stdlib/fft/base/fftpack/generic/cffti/benchmark/benchmark.js create mode 100644 lib/node_modules/@stdlib/fft/base/fftpack/generic/cffti/docs/repl.txt create mode 100644 lib/node_modules/@stdlib/fft/base/fftpack/generic/cffti/docs/types/index.d.ts create mode 100644 lib/node_modules/@stdlib/fft/base/fftpack/generic/cffti/docs/types/test.ts create mode 100644 lib/node_modules/@stdlib/fft/base/fftpack/generic/cffti/examples/index.js create mode 100644 lib/node_modules/@stdlib/fft/base/fftpack/generic/cffti/lib/cffti1.js create mode 100644 lib/node_modules/@stdlib/fft/base/fftpack/generic/cffti/lib/index.js create mode 100644 lib/node_modules/@stdlib/fft/base/fftpack/generic/cffti/lib/main.js create mode 100644 lib/node_modules/@stdlib/fft/base/fftpack/generic/cffti/package.json create mode 100644 lib/node_modules/@stdlib/fft/base/fftpack/generic/cffti/test/fixtures/c/fftpack/Makefile create mode 100644 lib/node_modules/@stdlib/fft/base/fftpack/generic/cffti/test/fixtures/c/fftpack/large.json create mode 100644 lib/node_modules/@stdlib/fft/base/fftpack/generic/cffti/test/fixtures/c/fftpack/medium.json create mode 100644 lib/node_modules/@stdlib/fft/base/fftpack/generic/cffti/test/fixtures/c/fftpack/runner.c create mode 100644 lib/node_modules/@stdlib/fft/base/fftpack/generic/cffti/test/fixtures/c/fftpack/small.json create mode 100644 lib/node_modules/@stdlib/fft/base/fftpack/generic/cffti/test/test.js diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/generic/cffti/README.md b/lib/node_modules/@stdlib/fft/base/fftpack/generic/cffti/README.md new file mode 100644 index 000000000000..3060aa1c21c6 --- /dev/null +++ b/lib/node_modules/@stdlib/fft/base/fftpack/generic/cffti/README.md @@ -0,0 +1,167 @@ + + +# cffti + +> Initialize a workspace array for performing a complex-valued Fourier transform. + + + +
+ +
+ + + + + +
+ +## Usage + +```javascript +var cffti = require( '@stdlib/fft/base/fftpack/generic/cffti' ); +``` + +#### cffti( N, workspace, strideW, offsetW ) + +Initializes a workspace array for performing a complex-valued Fourier transform. + +```javascript +var Float64Array = require( '@stdlib/array/float64' ); + +var N = 8; +var workspace = new Float64Array( ( 4*N ) + 34 ); + +var out = cffti( N, workspace, 1, 0 ); +// returns + +var bool = ( out === workspace ); +// returns true + +var twiddleFactors = workspace.slice( 2*N, 4*N ); +// returns [ 1, 0, ~0.707, ~0.707, ~0, 1, ~-0.707, ~0.707, 1, 0, 1, 0, 1, 0, ~0, -1 ] + +var factors = workspace.slice( 4*N, ( 4*N ) + 4 ); +// returns [ 8, 2, 2, 4 ] +``` + +The function accepts the following arguments: + +- **N**: length of the sequence to transform. +- **workspace**: workspace array. +- **strideW**: stride length for `workspace`. +- **offsetW**: starting index for `workspace`. + +
+ + + + + +
+ +## Notes + +- The workspace array is divided into three sections: + + ```text + size = 2N 2N 2+ceil(log2(N)/2) + ↓ ↓ ↓ + | scratch / workspace | twiddle factors | radix factor table | + ↑ ↑ ↑ + i = 0 ... 2N ... 4N ... + ``` + + - **scratch/workspace**: used as a scratch space when performing transforms. This section is not updated during initialization. + - **twiddle factors**: a table of reusable complex-exponential constants stored as cosine/sine pairs. + - **radix factor table**: a table containing the sequence length `N`, the number of factors into which `N` was decomposed, and the individual integer radix factors. + +- In general, a workspace array should have `4N + 34` indexed elements (as `log2(N)/2 ≤ 32` for all `2^64`). During initialization, only the sections for storing twiddle factors and the factorization of `N` are updated. + +- The radix factor table is comprised as follows: + + ```text + | sequence_length | number_of_factors | integer_factors | + ``` + +- If `N` equals `1`, the function returns early without modifying the workspace, as a single data point is its own Fourier transform. + +
+ + + +
+ +## Examples + + + +```javascript +var Float64Array = require( '@stdlib/array/float64' ); +var zeroTo = require( '@stdlib/array/zero-to' ); +var logEach = require( '@stdlib/console/log-each' ); +var cffti = require( '@stdlib/fft/base/fftpack/generic/cffti' ); + +var N = 8; +var workspace = new Float64Array( ( 4*N ) + 34 ); + +cffti( N, workspace, 1, 0 ); +console.log( 'Sequence length: %d', N ); + +console.log( 'Twiddle factors:' ); +var idx = zeroTo( 2*N, 'generic' ); +logEach( ' workspace[ %d ] = %d', idx, workspace.slice( 2*N, 4*N ) ); + +console.log( 'Factorization:' ); +var nf = workspace[ (4*N)+1 ]; + +console.log( ' number of factors: %d', nf ); +idx = zeroTo( nf, 'generic' ); +logEach( ' factor[ %d ]: %d', idx, workspace.slice( (4*N)+2, (4*N)+2+nf ) ); +``` + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/generic/cffti/benchmark/benchmark.js b/lib/node_modules/@stdlib/fft/base/fftpack/generic/cffti/benchmark/benchmark.js new file mode 100644 index 000000000000..1ee1d688b1ad --- /dev/null +++ b/lib/node_modules/@stdlib/fft/base/fftpack/generic/cffti/benchmark/benchmark.js @@ -0,0 +1,101 @@ +/* +* @license Apache-2.0 +* +* Copyright (c) 2026 The Stdlib Authors. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +'use strict'; + +// MODULES // + +var bench = require( '@stdlib/bench' ); +var format = require( '@stdlib/string/format' ); +var isnan = require( '@stdlib/math/base/assert/is-nan' ); +var Float64Array = require( '@stdlib/array/float64' ); +var pkg = require( './../package.json' ).name; +var cffti = require( './../lib' ); + + +// FUNCTIONS // + +/** +* Creates a benchmark function. +* +* @private +* @param {PositiveInteger} N - sequence length +* @returns {Function} benchmark function +*/ +function createBenchmark( N ) { + var workspace = new Float64Array( ( 4*N ) + 34 ); + return benchmark; + + /** + * Benchmark function. + * + * @private + * @param {Benchmark} b - benchmark instance + */ + function benchmark( b ) { + var i; + + b.tic(); + for ( i = 0; i < b.iterations; i++ ) { + cffti( N, workspace, 1, 0 ); + if ( isnan( workspace[ ( 2*N ) + 1 ] ) ) { + b.fail( 'should not return NaN' ); + } + } + b.toc(); + if ( isnan( workspace[ ( 2*N ) + 1 ] ) ) { + b.fail( 'should not return NaN' ); + } + b.pass( 'benchmark finished' ); + b.end(); + } +} + + +// MAIN // + +/** +* Main execution sequence. +* +* @private +*/ +function main() { + var lengths; + var N; + var f; + var i; + + lengths = [ + 8, + 16, + 32, + 64, + 128, + 256, + 512, + 1024 + ]; + + for ( i = 0; i < lengths.length; i++ ) { + N = lengths[ i ]; + f = createBenchmark( N ); + bench( format( '%s:N=%d', pkg, N ), f ); + } +} + +main(); diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/generic/cffti/docs/repl.txt b/lib/node_modules/@stdlib/fft/base/fftpack/generic/cffti/docs/repl.txt new file mode 100644 index 000000000000..2dad84296235 --- /dev/null +++ b/lib/node_modules/@stdlib/fft/base/fftpack/generic/cffti/docs/repl.txt @@ -0,0 +1,54 @@ + +{{alias}}( N, workspace, strideW, offsetW ) + Initializes a workspace array for performing a complex-valued Fourier + transform. + + The workspace array is divided into three sections: + + 1. scratch/workspace: the section ranges from indices 0 to 2N-1 and is used + while performing transforms. This section is not updated during + initialization. + + 2. twiddle factors: the section ranges from indices 2N to 4N-1 and stores a + table of reusable complex exponential constants as cosine/sine pairs. + + 3. radix factor table: the section starts at index 4N and stores the + sequence length N, the number of factors into which N was decomposed, and + the individual integer radix factors. + + Any remaining array space remains as unused storage. + + Parameters + ---------- + N: integer + Length of the sequence. + + workspace: ArrayLikeObject + Workspace array. + + strideW: integer + Stride length for `workspace`. + + offsetW: integer + Starting index for `workspace`. + + Returns + ------- + out: ArrayLikeObject + Workspace array. + + Examples + -------- + > var N = 8; + > var workspace = new {{alias:@stdlib/array/float64}}( ( 4*N ) + 34 ); + > var out = {{alias}}( N, workspace, 1, 0 ) + + > var bool = ( out === workspace ) + true + > var twiddleFactors = workspace.slice( 2*N, 4*N ) + + > var factors = workspace.slice( 4*N, ( 4*N ) + 4 ) + [ 8, 2, 2, 4 ] + + See Also + -------- diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/generic/cffti/docs/types/index.d.ts b/lib/node_modules/@stdlib/fft/base/fftpack/generic/cffti/docs/types/index.d.ts new file mode 100644 index 000000000000..08dfaf307ff6 --- /dev/null +++ b/lib/node_modules/@stdlib/fft/base/fftpack/generic/cffti/docs/types/index.d.ts @@ -0,0 +1,62 @@ +/* +* @license Apache-2.0 +* +* Copyright (c) 2026 The Stdlib Authors. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +// TypeScript Version: 4.1 + +/// + +import { Collection } from '@stdlib/types/array'; + +/** +* Initializes a workspace array for performing a complex-valued Fourier transform. +* +* ## Notes +* +* - The workspace array should have a length of at least `( 4*N ) + 34` elements. +* - For single-point sequences (N=1), the function returns immediately as the FFT is the identity operation. +* +* @param N - length of the sequence +* @param workspace - workspace array +* @param strideW - stride length for `workspace` +* @param offsetW - starting index for `workspace` +* @returns workspace array +* +* @example +* var Float64Array = require( '@stdlib/array/float64' ); +* +* var N = 8; +* var workspace = new Float64Array( ( 4*N ) + 34 ); +* +* var out = cffti( N, workspace, 1, 0 ); +* // returns +* +* var bool = ( out === workspace ); +* // returns true +* +* var twiddleFactors = workspace.slice( 2*N, 4*N ); +* // returns [ 1, 0, ~0.707, ~0.707, ~0, 1, ~-0.707, ~0.707, 1, 0, 1, 0, 1, 0, ~0, -1 ] +* +* var factors = workspace.slice( 4*N, ( 4*N ) + 4 ); +* // returns [ 8, 2, 2, 4 ] +*/ +declare function cffti>( N: number, workspace: T, strideW: number, offsetW: number ): T; + + +// EXPORTS // + +export = cffti; diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/generic/cffti/docs/types/test.ts b/lib/node_modules/@stdlib/fft/base/fftpack/generic/cffti/docs/types/test.ts new file mode 100644 index 000000000000..85634675ec83 --- /dev/null +++ b/lib/node_modules/@stdlib/fft/base/fftpack/generic/cffti/docs/types/test.ts @@ -0,0 +1,94 @@ +/* +* @license Apache-2.0 +* +* Copyright (c) 2026 The Stdlib Authors. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +import cffti = require( './index' ); + + +// TESTS // + +// The function returns a collection... +{ + const workspace = new Float64Array( ( 4*8 ) + 34 ); + + cffti( 8, workspace, 1, 0 ); // $ExpectType Float64Array +} + +// The compiler throws an error if the function is provided a first argument which is not a number... +{ + const workspace = new Float64Array( ( 4*8 ) + 34 ); + + cffti( '8', workspace, 1, 0 ); // $ExpectError + cffti( true, workspace, 1, 0 ); // $ExpectError + cffti( false, workspace, 1, 0 ); // $ExpectError + cffti( null, workspace, 1, 0 ); // $ExpectError + cffti( void 0, workspace, 1, 0 ); // $ExpectError + cffti( [], workspace, 1, 0 ); // $ExpectError + cffti( {}, workspace, 1, 0 ); // $ExpectError + cffti( ( x: number ): number => x, workspace, 1, 0 ); // $ExpectError +} + +// The compiler throws an error if the function is provided a second argument which is not a collection... +{ + cffti( 8, '50', 1, 0 ); // $ExpectError + cffti( 8, 50, 1, 0 ); // $ExpectError + cffti( 8, true, 1, 0 ); // $ExpectError + cffti( 8, false, 1, 0 ); // $ExpectError + cffti( 8, null, 1, 0 ); // $ExpectError + cffti( 8, void 0, 1, 0 ); // $ExpectError + cffti( 8, {}, 1, 0 ); // $ExpectError + cffti( 8, ( x: number ): number => x, 1, 0 ); // $ExpectError +} + +// The compiler throws an error if the function is provided a third argument which is not a number... +{ + const workspace = new Float64Array( ( 4*8 ) + 34 ); + + cffti( 8, workspace, '1', 0 ); // $ExpectError + cffti( 8, workspace, true, 0 ); // $ExpectError + cffti( 8, workspace, false, 0 ); // $ExpectError + cffti( 8, workspace, null, 0 ); // $ExpectError + cffti( 8, workspace, void 0, 0 ); // $ExpectError + cffti( 8, workspace, [], 0 ); // $ExpectError + cffti( 8, workspace, {}, 0 ); // $ExpectError + cffti( 8, workspace, ( x: number ): number => x, 0 ); // $ExpectError +} + +// The compiler throws an error if the function is provided a fourth argument which is not a number... +{ + const workspace = new Float64Array( ( 4*8 ) + 34 ); + + cffti( 8, workspace, 1, '0' ); // $ExpectError + cffti( 8, workspace, 1, true ); // $ExpectError + cffti( 8, workspace, 1, false ); // $ExpectError + cffti( 8, workspace, 1, null ); // $ExpectError + cffti( 8, workspace, 1, void 0 ); // $ExpectError + cffti( 8, workspace, 1, [] ); // $ExpectError + cffti( 8, workspace, 1, {} ); // $ExpectError + cffti( 8, workspace, 1, ( x: number ): number => x ); // $ExpectError +} + +// The compiler throws an error if the function is provided an unsupported number of arguments... +{ + const workspace = new Float64Array( ( 4*8 ) + 34 ); + + cffti(); // $ExpectError + cffti( 8 ); // $ExpectError + cffti( 8, workspace ); // $ExpectError + cffti( 8, workspace, 1 ); // $ExpectError + cffti( 8, workspace, 1, 0, 123 ); // $ExpectError +} diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/generic/cffti/examples/index.js b/lib/node_modules/@stdlib/fft/base/fftpack/generic/cffti/examples/index.js new file mode 100644 index 000000000000..a9ad8e9b86f7 --- /dev/null +++ b/lib/node_modules/@stdlib/fft/base/fftpack/generic/cffti/examples/index.js @@ -0,0 +1,41 @@ +/** +* @license Apache-2.0 +* +* Copyright (c) 2026 The Stdlib Authors. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +'use strict'; + +var Float64Array = require( '@stdlib/array/float64' ); +var zeroTo = require( '@stdlib/array/zero-to' ); +var logEach = require( '@stdlib/console/log-each' ); +var cffti = require( './../lib' ); + +var N = 8; +var workspace = new Float64Array( ( 4*N ) + 34 ); + +cffti( N, workspace, 1, 0 ); +console.log( 'Sequence length: %d', N ); + +console.log( 'Twiddle factors:' ); +var idx = zeroTo( 2*N, 'generic' ); +logEach( ' workspace[ %d ] = %d', idx, workspace.slice( 2*N, 4*N ) ); + +console.log( 'Factorization:' ); +var nf = workspace[ (4*N)+1 ]; + +console.log( ' number of factors: %d', nf ); +idx = zeroTo( nf, 'generic' ); +logEach( ' factor[ %d ]: %d', idx, workspace.slice( (4*N)+2, (4*N)+2+nf ) ); diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/generic/cffti/lib/cffti1.js b/lib/node_modules/@stdlib/fft/base/fftpack/generic/cffti/lib/cffti1.js new file mode 100644 index 000000000000..339bb68645e2 --- /dev/null +++ b/lib/node_modules/@stdlib/fft/base/fftpack/generic/cffti/lib/cffti1.js @@ -0,0 +1,202 @@ +/** +* @license Apache-2.0 +* +* Copyright (c) 2026 The Stdlib Authors. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +* +* ## Notice +* +* The original C code and copyright notice are from the [PFFFT library]{@link https://github.com/marton78/pffft/blob/0b4ee12c4ba45a4a8e567550c16d96d1679f50ce/src/fftpack.c}. The implementation follows the original, but has been modified for JavaScript. +* +* ```text +* Copyright (c) 2004 the University Corporation for Atmospheric +* Research ("UCAR"). All rights reserved. Developed by NCAR's +* Computational and Information Systems Laboratory, UCAR, +* www.cisl.ucar.edu. +* +* Redistribution and use of the Software in source and binary forms, +* with or without modification, is permitted provided that the +* following conditions are met: +* +* - Neither the names of NCAR's Computational and Information Systems +* Laboratory, the University Corporation for Atmospheric Research, +* nor the names of its sponsors or contributors may be used to +* endorse or promote products derived from this Software without +* specific prior written permission. +* +* - Redistributions of source code must retain the above copyright +* notices, this list of conditions, and the disclaimer below. +* +* - Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions, and the disclaimer below in the +* documentation and/or other materials provided with the +* distribution. +* +* THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +* EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO THE WARRANTIES OF +* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +* NONINFRINGEMENT. IN NO EVENT SHALL THE CONTRIBUTORS OR COPYRIGHT +* HOLDERS BE LIABLE FOR ANY CLAIM, INDIRECT, INCIDENTAL, SPECIAL, +* EXEMPLARY, OR CONSEQUENTIAL DAMAGES OR OTHER LIABILITY, WHETHER IN AN +* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE +* SOFTWARE. +* ``` +*/ + +/* eslint-disable max-len */ + +'use strict'; + +// MODULES // + +var sincos = require( '@stdlib/math/base/special/sincos' ).assign; +var TWO_PI = require( '@stdlib/constants/float64/two-pi' ); +var floor = require( '@stdlib/math/base/special/floor' ); +var decompose = require( '@stdlib/fft/base/fftpack/generic/decompose' ); + + +// VARIABLES // + +// Define a list of initial trial factors for FFT factorization: +var TRIAL_FACTORS = [ 3, 4, 2, 5 ]; + + +// MAIN // + +/** +* Initializes the working arrays for applying a Fourier transform to a complex-valued sequence. +* +* @private +* @param {NonNegativeInteger} N - length of the sequence +* @param {Collection} twiddles - array of twiddle factors +* @param {integer} strideT - stride length for `twiddles` +* @param {NonNegativeInteger} offsetT - starting index for `twiddles` +* @param {Collection} factors - array containing a radix factorization +* @param {integer} strideF - stride length for `factors` +* @param {NonNegativeInteger} offsetF - starting index for `factors` +* @returns {void} +*/ +function cffti1( N, twiddles, strideT, offsetT, factors, strideF, offsetF ) { + var factor; + var argld; + var argh; + var fidx; + var Mt; + var nf; + var fi; + var l2; + var l1; + var ld; + var st; + var it; + var i1; + var M; + var m; + var k; + var j; + var i; + + // Decompose the sequence length into its radix factors: + nf = decompose( N, 4, TRIAL_FACTORS, 1, 0, factors, strideF, offsetF ); + + // Compute the master angular step (i.e., the basic angle that generates all twiddles): + argh = TWO_PI / N; + + // Define where the first computed twiddle pair should be written: + i = 0; + + // Initialize a running product of factors already processed: + l1 = 1; + + // Compute the index of the first radix factor: + fidx = offsetF + ( 2*strideF ); + + // Compute the stride length for each cosine/sine pair: + st = 2 * strideT; + + // Generate twiddle factors... + for ( k = 0; k < nf; k++ ) { + // Resolve the next radix factor: + factor = factors[ fidx ]; + + // Compute the length of the transform after including the current radix: + l2 = factor * l1; + + // Compute the number of the "butterfly wings" (at this stage, the data is viewed as a `factor`-point transform of sub-vectors of length `l1`; `M` describes how many such vectors fit in the full array of length `N`): + M = floor( N / l2 ); + + // Initialize a running offset used to step the angle: + ld = 0; + + // Compute the total number of twiddle factors for the current column: + Mt = ( 2 * M ) + 2; // two twiddles per harmonic, including the trivial first harmonic + + // Iterate over each butterfly column within the current radix... + for ( j = 1; j < factor; j++ ) { + // Store the index of the first twiddle pair for this column: + i1 = i; + + // Seed the first twiddle factor for this column with trivial cosine: + it = offsetT + ( i*strideT ); + twiddles[ it ] = 1.0; + + // Seed the first twiddle factor for this column with trivial sine: + twiddles[ it+strideT ] = 0.0; + + // Advance to the next column: + ld += l1; + + // Compute the angle step for this column: + argld = ld * argh; // 2π ⋅ j ⋅ li / N, which is the j-th column's base angle + + // Initialize a counter which counts from `1` to `M-1` (i.e., all non-trivial harmonics): + fi = 1.0; + + // Compute the index of the sine term: + it += 3 * strideT; + + // Iterate over each non-trivial harmonic in the column (note: we skip the `m=0` and `m=1` (i.e., the first cosine/sine pair, the first harmonic `W_N^0 = cos(0) + j sin(0) = 1 + j⋅0` is trivial and hard-coded by transform kernels)... + for ( m = 3; m < Mt; m += 2 ) { + // Compute `(cos(fi*argld), sin(fi*argld))`: + sincos( fi*argld, twiddles, -strideT, it ); // note: `sincos` returns the sine and cosine, in that order, so we need to use a negative stride when assigning the values to `twiddles` to ensure that cosine comes before sine in the twiddles table + + // Update for the next harmonic: + fi += 1.0; + + // Resolve the index of the next sine term: + it += st; + } + // Advance `i` by the number of twiddle factors we have just written: + i += 2 * M; + + // For radices greater than 5, copy the last-written twiddle pair back to the start of this column's block, overwriting the trivial `(1, 0)` seed so that the transform kernel can use it as a wrap-around twiddle: + if ( factor > 5 ) { + twiddles[ offsetT+(i1*strideT) ] = twiddles[ offsetT+(i*strideT) ]; + twiddles[ offsetT+((i1+1)*strideT) ] = twiddles[ offsetT+((i+1)*strideT) ]; + } + } + // Update the running product of factors already processed: + l1 = l2; + + // Resolve the index of the next radix factor: + fidx += strideF; + } +} + + +// EXPORTS // + +module.exports = cffti1; diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/generic/cffti/lib/index.js b/lib/node_modules/@stdlib/fft/base/fftpack/generic/cffti/lib/index.js new file mode 100644 index 000000000000..4b6e42abdc68 --- /dev/null +++ b/lib/node_modules/@stdlib/fft/base/fftpack/generic/cffti/lib/index.js @@ -0,0 +1,53 @@ +/** +* @license Apache-2.0 +* +* Copyright (c) 2026 The Stdlib Authors. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +'use strict'; + +/** +* Initialize a workspace array for performing a complex-valued Fourier transform. +* +* @module @stdlib/fft/base/fftpack/generic/cffti +* +* @example +* var Float64Array = require( '@stdlib/array/float64' ); +* var cffti = require( '@stdlib/fft/base/fftpack/generic/cffti' ); +* +* var N = 8; +* var workspace = new Float64Array( ( 4*N ) + 34 ); +* +* var out = cffti( N, workspace, 1, 0 ); +* // returns +* +* var bool = ( out === workspace ); +* // returns true +* +* var twiddleFactors = workspace.slice( 2*N, 4*N ); +* // returns [ 1, 0, ~0.707, ~0.707, ~0, 1, ~-0.707, ~0.707, 1, 0, 1, 0, 1, 0, ~0, -1 ] +* +* var factors = workspace.slice( 4*N, ( 4*N ) + 4 ); +* // returns [ 8, 2, 2, 4 ] +*/ + +// MODULES // + +var main = require( './main.js' ); + + +// EXPORTS // + +module.exports = main; diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/generic/cffti/lib/main.js b/lib/node_modules/@stdlib/fft/base/fftpack/generic/cffti/lib/main.js new file mode 100644 index 000000000000..2dcad0db7e22 --- /dev/null +++ b/lib/node_modules/@stdlib/fft/base/fftpack/generic/cffti/lib/main.js @@ -0,0 +1,176 @@ +/** +* @license Apache-2.0 +* +* Copyright (c) 2026 The Stdlib Authors. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +* +* ## Notice +* +* The original C code and copyright notice are from the [PFFFT library]{@link https://github.com/marton78/pffft/blob/0b4ee12c4ba45a4a8e567550c16d96d1679f50ce/src/fftpack.c}. The implementation follows the original, but has been modified for JavaScript. +* +* ```text +* Copyright (c) 2004 the University Corporation for Atmospheric +* Research ("UCAR"). All rights reserved. Developed by NCAR's +* Computational and Information Systems Laboratory, UCAR, +* www.cisl.ucar.edu. +* +* Redistribution and use of the Software in source and binary forms, +* with or without modification, is permitted provided that the +* following conditions are met: +* +* - Neither the names of NCAR's Computational and Information Systems +* Laboratory, the University Corporation for Atmospheric Research, +* nor the names of its sponsors or contributors may be used to +* endorse or promote products derived from this Software without +* specific prior written permission. +* +* - Redistributions of source code must retain the above copyright +* notices, this list of conditions, and the disclaimer below. +* +* - Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions, and the disclaimer below in the +* documentation and/or other materials provided with the +* distribution. +* +* THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +* EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO THE WARRANTIES OF +* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +* NONINFRINGEMENT. IN NO EVENT SHALL THE CONTRIBUTORS OR COPYRIGHT +* HOLDERS BE LIABLE FOR ANY CLAIM, INDIRECT, INCIDENTAL, SPECIAL, +* EXEMPLARY, OR CONSEQUENTIAL DAMAGES OR OTHER LIABILITY, WHETHER IN AN +* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE +* SOFTWARE. +* ``` +*/ + +'use strict'; + +// MODULES // + +var cffti1 = require( './cffti1.js' ); + + +// MAIN // + +/** +* Initializes a workspace array for performing a complex-valued Fourier transform. +* +* ## Notes +* +* The workspace array is divided into three sections: +* +* ```text +* size = 2N 2N 2+ceil(log2(N)/2) +* ↓ ↓ ↓ +* | scratch / workspace | twiddle factors | radix factor table | +* ↑ ↑ ↑ +* i = 0 ... 2N ... 4N ... +* ``` +* +* where +* +* - **scratch/workspace**: used as a scratch space when performing transforms. This section is not updated during initialization. +* - **twiddle factors**: a table of reusable complex-exponential constants stored as cosine/sine pairs. +* - **radix factor table**: a table containing the radix factorization of `N`. +* +* In general, a workspace array should have `4N + 34` indexed elements (as `log2(N)/2 ≤ 32` for all `2^64`). During initialization, only the sections for storing twiddle factors and the factorization of `N` are updated. +* +* > Note: FFTPACK only requires `4N+15`, but we increase that number here to accommodate larger workspace arrays, where `N` may exceed `2^30` indexed elements. +* +* The first two sections each contain `2N` elements, while the last section contains the sequence length, the number of integer factors, and, at most, `ceil(log2(N)/2)` integer radix factors. +* +* The factorization section is comprised as follows: +* +* ```text +* | sequence_length | number_of_factors | integer_factors | +* ``` +* +* The sequence length and number of factors (`nf`) comprise a single element each. Only the first `nf` elements in the integer factors section are written to, with the rest being unused. +* +* As for twiddle factors, these are small, reusable complex-exponential constants that appear inside each "butterfly" stage of a Cooley–Tukey–style FFT. Every arithmetic step in an FFT multiplies one intermediate value by some +* +* ```tex +* W_N^k +* ``` +* +* where `W_N^k` is an N-th root of unity. Formally, in a forward FFT, +* +* ```tex +* W_N^k = e^{-2\pi ik/N} +* ``` +* +* In a backward FFT, +* +* ```tex +* W_N^k = e^{+2\pi ik/N} +* ``` +* +* As may be observed, `W_N^k` for forward and backward FFTs is the same, except the sign of the exponent is flipped. As a consequence, both forward and backward FFT callers can reuse the same set of twiddle factors, with those performing a forward transform (e.g., `cfftf`) multiplying with `(cos,-sin)` and those performing a backward transform (e.g., `cfftb`) multiplying with `(cos,+sin)`. +* +* Because these constants only depend on the transform length `N` (and **not** on the input data), we can pre-compute and store them once, then "twiddle" them (i.e., reuse them with different indices) as we proceed through the factorization. +* +* > As a quick aside regarding the name "twiddle", early FFT papers (notably Gentleman & Sande, 1966) described how you "twiddle" one branch of each butterfly by a complex rotation before adding/subtracting. The coefficients themselves inherited the nickname "twiddle factors," and the term stuck. +* +* By reusing the workspace array when computing multiple transforms of the same length `N`, every subsequent `*f` (forward) or `*b` (backward) call can simply look up the pre-stored twiddle factors instead of recomputing sine and cosine on-the-fly. +* +* In short, twiddle factors are cached roots of unity that allow each stage of the algorithm to rotate data quickly and predictably. +* +* @param {NonNegativeInteger} N - length of the sequence to transform +* @param {Collection} workspace - workspace array +* @param {integer} strideW - stride length for `workspace` +* @param {NonNegativeInteger} offsetW - starting index for `workspace` +* @returns {Collection} workspace array +* +* @example +* var Float64Array = require( '@stdlib/array/float64' ); +* +* var N = 8; +* var workspace = new Float64Array( ( 4*N ) + 34 ); +* +* var out = cffti( N, workspace, 1, 0 ); +* // returns +* +* var bool = ( out === workspace ); +* // returns true +* +* var twiddleFactors = workspace.slice( 2*N, 4*N ); +* // returns [ 1, 0, ~0.707, ~0.707, ~0, 1, ~-0.707, ~0.707, 1, 0, 1, 0, 1, 0, ~0, -1 ] +* +* var factors = workspace.slice( 4*N, ( 4*N ) + 4 ); +* // returns [ 8, 2, 2, 4 ] +*/ +function cffti( N, workspace, strideW, offsetW ) { + var offsetT; + var offsetF; + + // When a sub-sequence is a single data point, the FFT is the identity, so no initialization necessary... + if ( N === 1 ) { + return workspace; + } + // Resolve the starting indices for storing twiddle factors and factorization results: + offsetT = offsetW + ( 2*N*strideW ); // index offset for twiddle factors + offsetF = offsetT + ( 2*N*strideW ); // index offset for factorization results + + // Initialize a provided workspace array: + cffti1( N, workspace, strideW, offsetT, workspace, strideW, offsetF ); + + return workspace; +} + + +// EXPORTS // + +module.exports = cffti; diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/generic/cffti/package.json b/lib/node_modules/@stdlib/fft/base/fftpack/generic/cffti/package.json new file mode 100644 index 000000000000..a600802c408f --- /dev/null +++ b/lib/node_modules/@stdlib/fft/base/fftpack/generic/cffti/package.json @@ -0,0 +1,64 @@ +{ + "name": "@stdlib/fft/base/fftpack/generic/cffti", + "version": "0.0.0", + "description": "Initialize a workspace array for performing a complex-valued Fourier transform.", + "license": "Apache-2.0", + "author": { + "name": "The Stdlib Authors", + "url": "https://github.com/stdlib-js/stdlib/graphs/contributors" + }, + "contributors": [ + { + "name": "The Stdlib Authors", + "url": "https://github.com/stdlib-js/stdlib/graphs/contributors" + } + ], + "main": "./lib", + "directories": { + "benchmark": "./benchmark", + "doc": "./docs", + "example": "./examples", + "lib": "./lib", + "test": "./test" + }, + "types": "./docs/types", + "scripts": {}, + "homepage": "https://github.com/stdlib-js/stdlib", + "repository": { + "type": "git", + "url": "git://github.com/stdlib-js/stdlib.git" + }, + "bugs": { + "url": "https://github.com/stdlib-js/stdlib/issues" + }, + "dependencies": {}, + "devDependencies": {}, + "engines": { + "node": ">=0.10.0", + "npm": ">2.7.0" + }, + "os": [ + "aix", + "darwin", + "freebsd", + "linux", + "macos", + "openbsd", + "sunos", + "win32", + "windows" + ], + "keywords": [ + "stdlib", + "fft", + "fftpack", + "cffti", + "fourier", + "transform", + "twiddle", + "workspace", + "initialization", + "complex" + ], + "__stdlib__": {} +} diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/generic/cffti/test/fixtures/c/fftpack/Makefile b/lib/node_modules/@stdlib/fft/base/fftpack/generic/cffti/test/fixtures/c/fftpack/Makefile new file mode 100644 index 000000000000..7ce16281940d --- /dev/null +++ b/lib/node_modules/@stdlib/fft/base/fftpack/generic/cffti/test/fixtures/c/fftpack/Makefile @@ -0,0 +1,137 @@ +#/ +# @license Apache-2.0 +# +# Copyright (c) 2026 The Stdlib Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +#/ + +# VARIABLES # + +ifndef VERBOSE + QUIET := @ +endif + +# Specify the path to FFTPACK: +FFTPACK ?= + +# Specify a list of FFTPACK source files: +FFTPACK_SRC ?= + +# Determine the OS: +# +# [1]: https://en.wikipedia.org/wiki/Uname#Examples +# [2]: http://stackoverflow.com/a/27776822/2225624 +OS ?= $(shell uname) +ifneq (, $(findstring MINGW,$(OS))) + OS := WINNT +else +ifneq (, $(findstring MSYS,$(OS))) + OS := WINNT +else +ifneq (, $(findstring CYGWIN,$(OS))) + OS := WINNT +endif +endif +endif + +# Define the program used for compiling C source files: +ifdef C_COMPILER + CC := $(C_COMPILER) +else + CC := gcc +endif + +# Define the command-line options when compiling C files: +CFLAGS ?= \ + -std=c99 \ + -O3 \ + -Wall \ + -pedantic + +# Determine whether to generate [position independent code][1]: +# +# [1]: https://gcc.gnu.org/onlinedocs/gcc/Code-Gen-Options.html#Code-Gen-Options +# [2]: http://stackoverflow.com/questions/5311515/gcc-fpic-option +ifeq ($(OS), WINNT) + fPIC ?= +else + fPIC ?= -fPIC +endif + +# List of C targets: +c_targets := runner.out + + +# RULES # + +#/ +# Compiles C source files. +# +# @param {string} [C_COMPILER] - C compiler +# @param {string} [CFLAGS] - C compiler flags +# @param {(string|void)} [fPIC] - flag indicating whether to generate position independent code +# +# @example +# make +# +# @example +# make all +#/ +all: $(c_targets) + +.PHONY: all + +#/ +# Compiles C source files. +# +# @private +# @param {string} CC - C compiler +# @param {string} CFLAGS - C compiler flags +# @param {(string|void)} fPIC - flag indicating whether to generate position independent code +#/ +$(c_targets): %.out: %.c + $(QUIET) $(CC) $(CFLAGS) -DFFTPACK_DOUBLE_PRECISION $(fPIC) -o $@ $(FFTPACK_SRC) $< -lm + +#/ +# Generates test fixtures. +# +# @example +# make run +#/ +run: $(c_targets) + $(QUIET) ./$< + +.PHONY: run + +#/ +# Removes generated files. +# +# @example +# make clean +#/ +clean: + $(QUIET) -rm -f *.o *.out + +.PHONY: clean + +#/ +# Removes generated test fixtures. +# +# @example +# make clean-fixtures +#/ +clean-fixtures: + $(QUIET) -rm -f *.json + +.PHONY: clean-fixtures diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/generic/cffti/test/fixtures/c/fftpack/large.json b/lib/node_modules/@stdlib/fft/base/fftpack/generic/cffti/test/fixtures/c/fftpack/large.json new file mode 100644 index 000000000000..e701c6bce28d --- /dev/null +++ b/lib/node_modules/@stdlib/fft/base/fftpack/generic/cffti/test/fixtures/c/fftpack/large.json @@ -0,0 +1 @@ +{"lengths":[277,422,587,637,805,534,382,840,479,367],"offsets":[0,554,1398,2572,3846,5456,6524,7288,8968,9926],"twiddles":[0.99974275225183129,0.022681034366480814,0.99897114136013299,0.045350399442927798,0.99768556431523392,0.067996431943104299,0.99588668254073376,0.090607480585279038,0.993575421553204,0.11317191208675818,0.99075297048601352,0.13567811714915681,0.9874207814775251,0.15811451643133065,0.98358056892397661,0.180469566506895,0.97923430859743155,0.20273176580326555,0.97438423662925411,0.22488966051916581,0.96903284835962877,0.24693185051755615,0.9631828970537194,0.2688469951909529,0.95683739248512656,0.29062381929612002,0.94999959938737299,0.31225111875513101,0.94267303577421213,0.33371776641981604,0.93486147112962681,0.35501271779663041,0.92656892446844585,0.37612501672899584,0.91779966226857979,0.39704380103419434,0.90855819627593648,0.41775830809191211,0.89884928118314866,0.438257880381559,0.88867791218330605,0.45853197096551523,0.87804932239995059,0.478570148915483,0.86696898019465829,0.49836210467915221,0.85544258635359149,0.51789765538441879,0.84347607115447065,0.53716675007842629,0.83107559131547237,0.55615947489873618,0.81824752682762625,0.57486605817396541,0.80499847767233823,0.59327687545126695,0.79133526042572921,0.6113824544480676,0.7772649047515382,0.62917347992551487,0.76279464978439138,0.64664079848112566,0.7479319404053002,0.66377542325816985,0.73268442341130358,0.68056853856936828,0.71705994358122516,0.6970115044325238,0.70106653963957044,0.71309586101575329,0.68471244012063814,0.72881333299003348,0.66800605913497768,0.7441558337868196,0.65095599204036603,0.75911546975854927,0.63357101101953583,0.77368454423988797,0.61586006056692622,0.78785556150762937,0.59783225288678077,0.8016212306372108,0.57949686320495974,0.81497446925386086,0.56086332499687819,0.82790840717644987,0.54194122513402487,0.84041638995216661,0.5227402989515606,0.85249198228020484,0.50327042523953147,0.86412897132269617,0.48354162116027699,0.87532136990118736,0.46356403709464361,0.8860634195770164,0.44334795141966132,0.89634959361400368,0.42290376522036316,0.90617459982193271,0.40224199693847473,0.91553338327935807,0.38137327696072398,0.92442112893433959,0.36030834214955321,0.93283326408176526,0.33905803031905396,0.9407654607159871,0.31763327465895846,0.94821363775756073,0.29604509810956386,0.95517396315294245,0.27430460769047932,0.96164285584606313,0.25242298878611319,0.96761698762076609,0.23041149939084479,0.97309328481315849,0.20828146431683547,0.97806892989299832,0.18604426936746435,0.98254136291330063,0.16371135547938448,0.98650828282741887,0.14129421283621096,0.98996764867292275,0.11880437495687492,0.99291768062166474,0.096253412761678356,0.99535686089549313,0.07365292861910859,0.99728393454714215,0.051014550376472456,0.99869791010589704,0.028349925377419719,0.9995980600877008,0.0056707144694390236,0.99998392136944192,-0.017011413995597215,0.99985529542722851,-0.03968479016474661,0.99921224843852874,-0.062337748688082922,0.99805511124812207,-0.084958634720467621,0.99638447919788176,-0.10753580991791345,0.99420121182047372,-0.13005765842546152,0.99150643239713077,-0.1525125928534857,0.98830152737972987,-0.17488906023935183,0.98458814567746877,-0.19717554799136633,0.98036819780850926,-0.21936058981195117,0.97564385491702499,-0.24143277159700385,0.97041754765615662,-0.26338073730840184,0.96469196493745224,-0.28519319481663241,0.95847005254743478,-0.30685892171054396,0.95175501163200726,-0.32836677107122425,0.94455029704947857,-0.34970567720704177,0.93685961559305364,-0.37086466134689239,0.92868692408370579,-0.39183283728872936,0.92003642733440949,-0.41259941700046437,0.9109125759867831,-0.43315371617036103,0.90132006422125455,-0.45348515970406617,0.89126382734192555,-0.47358328716544773,0.88074903923738068,-0.49343775815844237,0.86978110971874445,-0.51303835764714123,0.85836568173635874,-0.53237500121138237,0.84650862847650921,-0.55143774023513759,0.83421605033969759,-0.57021676702503177,0.82149427180201362,-0.58870241985635507,0.80834983816122086,-0.60688518794397928,0.79478951216922888,-0.62475571633561255,0.78082027055268977,-0.64230481072487999,0.76644930042350234,-0.65952344218175396,0.75168399558107568,-0.67640275179789611,0.736531952708254,-0.69293405524452811,0.72100096746285525,-0.70910884724047785,0.70509903046684208,-0.72491880592810942,0.68883432319518167,-0.74035579715488098,0.6722152137665145,-0.75541187865832871,0.65525025263779524,-0.77007930415232706,0.63794816820511979,-0.7843505273125162,0.62031786231300623,-0.79821820565885326,0.60236840567443495,-0.81167520433328466,0.58410903320400775,-0.82471459977059747,0.56554913926662753,-0.83732968326056456,0.54669827284413719,-0.84951396439954452,0.52756613262241303,-0.86126117442976513,0.5081625620014345,-0.87256526946457158,0.48849754403089851,-0.88342043359797784,0.46858119627398714,-0.89382108189692544,0.44842376560192443,-0.90376186327470565,0.42803562292200886,-0.91323766324406963,0.40742725784182793,-0.92224360654860893,0.38660927327240185,-0.93077505967105278,0.36559237997303529,-0.93882763321719265,0.34438739104067728,-0.94639718417420526,0.32300521634663348,-0.95347981804221371,0.30145685692348584,-0.96007189083799105,0.27975339930511056,-0.96617001096977195,0.25790600982270817,-0.97177104098221256,0.23592592885977368,-0.9768720991705967,0.21382446506897157,-0.98147056106345998,0.19161298955388473,-0.98556406077286829,0.16930293001863223,-0.98915049221165696,0.14690576488836884,-0.99222801017700279,0.1244330174036844,-0.99479503129977276,0.10189624969195009,-0.99685023485916002,0.079307056818655589,-0.99839256346218952,0.056677060821799664,-0.99942122358774077,0.034017904732405728,-0.9999356859948122,0.011341246584232138,-0.9999356859948122,-0.011341246584231893,-0.99942122358774077,-0.034017904732405485,-0.99839256346218941,-0.056677060821799866,-0.99685023485916002,-0.079307056818655339,-0.99479503129977276,-0.10189624969194984,-0.99222801017700279,-0.12443301740368416,-0.98915049221165707,-0.14690576488836862,-0.98556406077286829,-0.16930293001863242,-0.98147056106345998,-0.19161298955388451,-0.97687209917059681,-0.21382446506897132,-0.97177104098221256,-0.23592592885977343,-0.96617001096977195,-0.25790600982270795,-0.96007189083799094,-0.27975339930511078,-0.95347981804221382,-0.30145685692348556,-0.94639718417420526,-0.32300521634663326,-0.93882763321719276,-0.34438739104067706,-0.93077505967105278,-0.36559237997303506,-0.92224360654860882,-0.38660927327240208,-0.91323766324406974,-0.40742725784182771,-0.90376186327470576,-0.42803562292200864,-0.89382108189692555,-0.44842376560192421,-0.88342043359797795,-0.46858119627398692,-0.87256526946457147,-0.48849754403089868,-0.86126117442976524,-0.50816256200143428,-0.84951396439954463,-0.52756613262241281,-0.83732968326056467,-0.54669827284413697,-0.82471459977059725,-0.56554913926662775,-0.81167520433328444,-0.58410903320400798,-0.79821820565885349,-0.60236840567443473,-0.78435052731251642,-0.62031786231300601,-0.77007930415232717,-0.63794816820511957,-0.75541187865832859,-0.65525025263779535,-0.74035579715488087,-0.67221521376651461,-0.72491880592810964,-0.68883432319518145,-0.70910884724047807,-0.70509903046684186,-0.69293405524452822,-0.72100096746285514,-0.676402751797896,-0.73653195270825411,-0.65952344218175374,-0.7516839955810759,-0.6423048107248801,-0.76644930042350212,-0.62475571633561267,-0.78082027055268965,-0.6068851879439795,-0.79478951216922877,-0.58870241985635519,-0.80834983816122064,-0.57021676702503188,-0.82149427180201351,-0.55143774023513814,-0.83421605033969726,-0.53237500121138226,-0.84650862847650921,-0.51303835764714112,-0.85836568173635885,-0.49343775815844221,-0.86978110971874456,-0.47358328716544795,-0.88074903923738057,-0.45348515970406639,-0.89126382734192544,-0.43315371617036125,-0.90132006422125444,-0.4125994170004646,-0.91091257598678299,-0.39183283728872981,-0.92003642733440927,-0.37086466134689283,-0.92868692408370568,-0.34970567720704138,-0.93685961559305386,-0.32836677107122408,-0.94455029704947868,-0.3068589217105438,-0.95175501163200726,-0.28519319481663247,-0.95847005254743478,-0.26338073730840189,-0.96469196493745224,-0.2414327715970041,-0.97041754765615651,-0.21936058981195142,-0.97564385491702499,-0.19717554799136655,-0.98036819780850926,-0.17488906023935227,-0.98458814567746866,-0.15251259285348617,-0.98830152737972976,-0.13005765842546133,-0.99150643239713077,-0.10753580991791326,-0.99420121182047372,-0.084958634720467427,-0.99638447919788187,-0.062337748688082943,-0.99805511124812207,-0.039684790164746631,-0.99921224843852874,-0.017011413995597458,-0.99985529542722851,0.005670714469438779,-0.99998392136944192,0.028349925377419476,-0.9995980600877008,0.051014550376471984,-0.99869791010589704,0.073652928619108132,-0.99728393454714215,0.096253412761678564,-0.99535686089549302,0.11880437495687511,-0.99291768062166474,0.14129421283621119,-0.98996764867292275,0.16371135547938445,-0.98650828282741887,0.18604426936746432,-0.98254136291330063,0.20828146431683522,-0.97806892989299832,0.23041149939084454,-0.97309328481315849,0.25242298878611297,-0.96761698762076609,0.27430460769047887,-0.96164285584606335,0.29604509810956342,-0.95517396315294256,0.31763327465895863,-0.94821363775756073,0.33905803031905413,-0.9407654607159871,0.36030834214955343,-0.93283326408176526,0.38137327696072393,-0.92442112893433959,0.40224199693847473,-0.91553338327935818,0.42290376522036294,-0.90617459982193282,0.4433479514196611,-0.89634959361400379,0.46356403709464339,-0.88606341957701651,0.48354162116027655,-0.87532136990118747,0.50327042523953103,-0.8641289713226965,0.52274029895156071,-0.85249198228020473,0.54194122513402498,-0.8404163899521665,0.5608633249968783,-0.82790840717644976,0.57949686320495974,-0.81497446925386086,0.59783225288678066,-0.8016212306372108,0.6158600605669261,-0.78785556150762948,0.63357101101953572,-0.77368454423988808,0.65095599204036581,-0.75911546975854949,0.66800605913497735,-0.74415583378681993,0.68471244012063781,-0.72881333299003392,0.70106653963957055,-0.71309586101575317,0.71705994358122538,-0.69701150443252369,0.73268442341130358,-0.68056853856936828,0.7479319404053002,-0.66377542325816985,0.76279464978439127,-0.64664079848112577,0.77726490475153809,-0.62917347992551509,0.79133526042572899,-0.61138245444806771,0.80499847767233801,-0.59327687545126717,0.81824752682762603,-0.57486605817396585,0.83107559131547204,-0.55615947489873674,0.84347607115447076,-0.53716675007842607,0.85544258635359161,-0.51789765538441856,0.86696898019465829,-0.49836210467915215,0.87804932239995059,-0.47857014891548305,0.88867791218330605,-0.45853197096551535,0.89884928118314855,-0.43825788038155922,0.90855819627593626,-0.41775830809191239,0.91779966226857956,-0.39704380103419473,0.92656892446844574,-0.37612501672899629,0.93486147112962692,-0.35501271779663007,0.94267303577421224,-0.33371776641981588,0.94999959938737299,-0.31225111875513084,0.95683739248512656,-0.29062381929612002,0.9631828970537194,-0.26884699519095295,0.96903284835962877,-0.24693185051755626,0.97438423662925411,-0.22488966051916606,0.97923430859743155,-0.20273176580326588,0.98358056892397649,-0.18046956650689538,0.9874207814775251,-0.15811451643133115,0.99075297048601363,-0.13567811714915651,0.993575421553204,-0.11317191208675799,0.99588668254073376,-0.090607480585278927,0.99768556431523392,-0.067996431943104271,0.99897114136013299,-0.045350399442927861,0.99974275225183129,-0.022681034366480966,0.99974275225183129,-0.022681034366480966,1,0,0.99988915992369387,0.014888514603201883,0.99955666426582046,0.029773728718214355,0.99900258673406805,0.044652342588500739,0.99822705015642832,0.059521057920667614,0.9972302264539683,0.074376578615630989,0.99601233660271837,0.089215611499296063,0.99457365058468661,0.10403486705258858,0.99291448732800902,0.11883106014067589,0.99103521463624977,0.13360091074121613,0.98893624910686573,0.14834114467147413,0.98661805603885588,0.16304849431414264,0.98408114932961332,0.17771969934170845,0.98132609136100457,0.19235150743920196,0.97835349287470041,0.20694067502517111,0.97516401283678711,0.22148396797071904,0.97175835829168611,0.23597816231644603,0.96813728420541678,0.25042004498713755,0.96430159329823517,0.26480641450403913,0.96025213586668701,0.27913408169456078,0.95598980959511359,0.29339987039925308,0.95151555935665333,0.30760061817589884,0.94683037700378203,0.32173317700056375,0.94193530114843849,0.33579441396545079,0.93683141693178551,0.34978121197340356,0.93151985578365515,0.36369047042890512,0.92600179517173331,0.37751910592541849,0.92027845834053856,0.39126405292891614,0.91435111404025304,0.40492226445744889,0.90822107624546589,0.4184907127566006,0.901889703863891,0.4319663899706816,0.89535840043512416,0.44534630880951054,0.88862861381950609,0.45862750321063728,0.881701835877161,0.47180702899686006,0.87457960213728003,0.48488196452889126,0.86726349145772574,0.49784941135302685,0.85975512567502999,0.5107064948436757,0.85205616924486549,0.52345036484060758,0.84416832887306859,0.53607819628077658,0.8360933531372966,0.54858718982458188,0.82783303209940295,0.5609745724764259,0.81938919690861611,0.57323759819943165,0.81076371939560976,0.58537354852418555,0.80195851165755527,0.59737973315136728,0.79297552563424789,0.6092534905481366,0.78381675267539996,0.62099218853814164,0.77448422309919895,0.63259322488502057,0.76498000574222558,0.64405402786926547,0.75530620750083388,0.65537205685832167,0.74546497286409441,0.66654480286979578,0.73545848343840337,0.67756978912764676,0.72528895746386357,0.68844457161123862,0.71495864932254527,0.69916673959713049,0.70446984903873378,0.70973391619348702,0.69382488177127655,0.72014375886698767,0.68302610729814217,0.73039395996211987,0.6720759194933037,0.7404822472127407,0.6609767457960648,0.75040638424579276,0.64973104667294479,0.76016417107706391,0.63834131507224134,0.76975344459888029,0.62681007587139403,0.77917207905962416,0.6151398853172686,0.78841798653497097,0.60333333045948812,0.79748911739074035,0.59139302857693532,0.80638346073725997,0.57932162659755382,0.81509904487513929,0.56712180051157657,0.8236339377323566,0.55479625477831218,0.83198624729256088,0.5423477217266196,0.84015412201449391,0.52977896094920607,0.84813575124244089,0.51709275869087845,0.85592936560761657,0.50429192723088934,0.86353323742039911,0.49137930425951065,0.87094568105332448,0.47835775224897326,0.87816505331475692,0.46523015781891408,0.88518975381315179,0.45199943109646973,0.89201822531183061,0.43866850507115929,0.89864895407418932,0.42524033494469843,0.90508047019926396,0.41171789747589016,0.9113113479475784,0.39810419032073624,0.91734020605720268,0.3844022313679164,0.92316570804995068,0.37061505806978229,0.9287865625276519,0.356745726769015,0.93420152345842777,0.34279731202109381,0.93940939045291261,0.32877290591272873,0.94440900903035652,0.31467561737640609,0.94919927087455014,0.30050857150120014,0.95377911407951688,0.28627490884000245,0.95814752338491604,0.27197778471332407,0.96230353040110617,0.25762036850982328,0.9662462138238177,0.24320584298371525,0.96997469963838767,0.22873740354921834,0.97348816131351179,0.21421825757219431,0.97678581998446978,0.19965162365913958,0.97986694462578405,0.18504073094368279,0.98273085221327394,0.1703888183707509,0.98537690787546839,0.15569913397855917,0.98780452503434435,0.14097493417858548,0.99001316553535967,0.12621948303368855,0.99200233976675101,0.1114360515345301,0.99377160676807097,0.096627916874460942,0.99532057432794097,0.081798361723032467,0.99664889907099574,0.066950673498293783,0.99775628653400372,0.052088143638036294,0.9986424912311429,0.037214066870148048,0.99930731670842088,0.022331740482236712,0.99975061558722433,0.0074444635906871703,0.99997228959699025,-0.0074444635906872701,0.99997228959699025,-0.022331740482236809,0.99975061558722433,-0.037214066870148152,0.99930731670842088,-0.052088143638036391,0.9986424912311429,-0.066950673498293672,0.99775628653400372,-0.081798361723032342,0.99664889907099574,-0.096627916874460817,0.99532057432794097,-0.11143605153453019,0.99377160676807097,-0.12621948303368866,0.9920023397667509,-0.14097493417858556,0.99001316553535967,-0.15569913397855925,0.98780452503434435,-0.17038881837075098,0.98537690787546839,-0.18504073094368287,0.98273085221327394,-0.19965162365913966,0.97986694462578405,-0.21421825757219443,0.97678581998446978,-0.22873740354921823,0.9734881613135119,-0.24320584298371511,0.96997469963838778,-0.25762036850982339,0.9662462138238177,-0.27197778471332418,0.96230353040110617,-0.28627490884000256,0.95814752338491604,-0.30050857150120019,0.95377911407951688,-0.3146756173764062,0.94919927087455014,-0.32877290591272879,0.94440900903035652,-0.34279731202109393,0.93940939045291261,-0.35674572676901511,0.93420152345842766,-0.37061505806978234,0.9287865625276519,-0.38440223136791629,0.9231657080499508,-0.39810419032073613,0.91734020605720268,-0.41171789747589027,0.9113113479475784,-0.42524033494469854,0.90508047019926385,-0.43866850507115912,0.89864895407418932,-0.45199943109646978,0.8920182253118305,-0.46523015781891397,0.8851897538131519,-0.47835775224897337,0.87816505331475692,-0.49137930425951093,0.87094568105332437,-0.50429192723088934,0.86353323742039911,-0.51709275869087856,0.85592936560761657,-0.52977896094920596,0.84813575124244101,-0.54234772172661982,0.8401541220144938,-0.55479625477831207,0.83198624729256088,-0.56712180051157668,0.8236339377323566,-0.57932162659755371,0.8150990448751394,-0.59139302857693543,0.80638346073725997,-0.603333330459488,0.79748911739074047,-0.61513988531726871,0.78841798653497097,-0.62681007587139426,0.77917207905962405,-0.63834131507224146,0.76975344459888029,-0.64973104667294501,0.7601641710770638,-0.6609767457960648,0.75040638424579276,-0.67207591949330381,0.74048224721274059,-0.68302610729814206,0.73039395996211998,-0.69382488177127666,0.72014375886698756,-0.70446984903873378,0.70973391619348714,-0.71495864932254538,0.69916673959713038,-0.72528895746386379,0.6884445716112384,-0.73545848343840337,0.67756978912764687,-0.74546497286409463,0.66654480286979567,-0.75530620750083388,0.65537205685832178,-0.76498000574222569,0.64405402786926536,-0.77448422309919895,0.63259322488502057,-0.78381675267540007,0.62099218853814153,-0.79297552563424778,0.60925349054813671,-0.80195851165755538,0.59737973315136716,-0.81076371939560965,0.58537354852418555,-0.81938919690861622,0.57323759819943165,-0.82783303209940318,0.56097457247642568,-0.8360933531372966,0.54858718982458199,-0.8441683288730687,0.53607819628077635,-0.85205616924486549,0.52345036484060758,-0.8597551256750301,0.51070649484367558,-0.86726349145772563,0.4978494113530269,-0.87457960213728003,0.48488196452889115,-0.88170183587716089,0.47180702899686017,-0.8886286138195062,0.45862750321063717,-0.89535840043512405,0.44534630880951065,-0.901889703863891,0.43196638997068154,-0.908221076245466,0.41849071275660038,-0.91435111404025304,0.40492226445744889,-0.92027845834053856,0.39126405292891597,-0.92600179517173331,0.37751910592541849,-0.93151985578365515,0.36369047042890501,-0.93683141693178551,0.34978121197340362,-0.94193530114843849,0.33579441396545062,-0.94683037700378192,0.32173317700056386,-0.95151555935665333,0.30760061817589879,-0.95598980959511348,0.29339987039925325,-0.96025213586668701,0.27913408169456072,-0.96430159329823528,0.26480641450403891,-0.96813728420541678,0.25042004498713755,-0.97175835829168622,0.23597816231644583,-0.97516401283678711,0.22148396797071906,-0.97835349287470053,0.20694067502517097,-0.98132609136100457,0.19235150743920201,-0.98408114932961332,0.17771969934170831,-0.98661805603885588,0.16304849431414278,-0.98893624910686573,0.14834114467147402,-0.99103521463624977,0.1336009107412163,-0.99291448732800902,0.11883106014067585,-0.99457365058468661,0.10403486705258834,-0.99601233660271837,0.089215611499296063,-0.9972302264539683,0.074376578615630781,-0.99822705015642832,0.059521057920667648,-0.99900258673406805,0.044652342588500579,-0.99955666426582046,0.029773728718214439,-0.99988915992369387,0.014888514603201761,0.99955666426582046,0.029773728718214355,0.99822705015642832,0.059521057920667614,0.99601233660271837,0.089215611499296063,0.99291448732800902,0.11883106014067589,0.98893624910686573,0.14834114467147413,0.98408114932961332,0.17771969934170845,0.97835349287470041,0.20694067502517111,0.97175835829168611,0.23597816231644603,0.96430159329823517,0.26480641450403913,0.95598980959511359,0.29339987039925308,0.94683037700378203,0.32173317700056375,0.93683141693178551,0.34978121197340356,0.92600179517173331,0.37751910592541849,0.91435111404025304,0.40492226445744889,0.901889703863891,0.4319663899706816,0.88862861381950609,0.45862750321063728,0.87457960213728003,0.48488196452889126,0.85975512567502999,0.5107064948436757,0.84416832887306859,0.53607819628077658,0.82783303209940295,0.5609745724764259,0.81076371939560976,0.58537354852418555,0.79297552563424789,0.6092534905481366,0.77448422309919895,0.63259322488502057,0.75530620750083388,0.65537205685832167,0.73545848343840337,0.67756978912764676,0.71495864932254527,0.69916673959713049,0.69382488177127655,0.72014375886698767,0.6720759194933037,0.7404822472127407,0.64973104667294479,0.76016417107706391,0.62681007587139403,0.77917207905962416,0.60333333045948812,0.79748911739074035,0.57932162659755382,0.81509904487513929,0.55479625477831218,0.83198624729256088,0.52977896094920607,0.84813575124244089,0.50429192723088934,0.86353323742039911,0.47835775224897326,0.87816505331475692,0.45199943109646973,0.89201822531183061,0.42524033494469843,0.90508047019926396,0.39810419032073624,0.91734020605720268,0.37061505806978229,0.9287865625276519,0.34279731202109381,0.93940939045291261,0.31467561737640609,0.94919927087455014,0.28627490884000245,0.95814752338491604,0.25762036850982328,0.9662462138238177,0.22873740354921834,0.97348816131351179,0.19965162365913958,0.97986694462578405,0.1703888183707509,0.98537690787546839,0.14097493417858548,0.99001316553535967,0.1114360515345301,0.99377160676807097,0.081798361723032467,0.99664889907099574,0.052088143638036294,0.9986424912311429,0.022331740482236712,0.99975061558722433,-0.0074444635906872701,0.99997228959699025,-0.037214066870148152,0.99930731670842088,-0.066950673498293672,0.99775628653400372,-0.096627916874460817,0.99532057432794097,-0.12621948303368866,0.9920023397667509,-0.15569913397855925,0.98780452503434435,-0.18504073094368287,0.98273085221327394,-0.21421825757219443,0.97678581998446978,-0.24320584298371511,0.96997469963838778,-0.27197778471332418,0.96230353040110617,-0.30050857150120019,0.95377911407951688,-0.32877290591272879,0.94440900903035652,-0.35674572676901511,0.93420152345842766,-0.38440223136791629,0.9231657080499508,-0.41171789747589027,0.9113113479475784,-0.43866850507115912,0.89864895407418932,-0.46523015781891397,0.8851897538131519,-0.49137930425951093,0.87094568105332437,-0.51709275869087856,0.85592936560761657,-0.54234772172661982,0.8401541220144938,-0.56712180051157668,0.8236339377323566,-0.59139302857693543,0.80638346073725997,-0.61513988531726871,0.78841798653497097,-0.63834131507224146,0.76975344459888029,-0.6609767457960648,0.75040638424579276,-0.68302610729814206,0.73039395996211998,-0.70446984903873378,0.70973391619348714,-0.72528895746386379,0.6884445716112384,-0.74546497286409463,0.66654480286979567,-0.76498000574222569,0.64405402786926536,-0.78381675267540007,0.62099218853814153,-0.80195851165755538,0.59737973315136716,-0.81938919690861622,0.57323759819943165,-0.8360933531372966,0.54858718982458199,-0.85205616924486549,0.52345036484060758,-0.86726349145772563,0.4978494113530269,-0.88170183587716089,0.47180702899686017,-0.89535840043512405,0.44534630880951065,-0.908221076245466,0.41849071275660038,-0.92027845834053856,0.39126405292891597,-0.93151985578365515,0.36369047042890501,-0.94193530114843849,0.33579441396545062,-0.95151555935665333,0.30760061817589879,-0.96025213586668701,0.27913408169456072,-0.96813728420541678,0.25042004498713755,-0.97516401283678711,0.22148396797071906,-0.98132609136100457,0.19235150743920201,-0.98661805603885588,0.16304849431414278,-0.99103521463624977,0.1336009107412163,-0.99457365058468661,0.10403486705258834,-0.9972302264539683,0.074376578615630781,-0.99900258673406805,0.044652342588500579,-0.99988915992369387,0.014888514603201761,-0.99988915992369387,-0.014888514603201961,-0.99900258673406805,-0.04465234258850078,-0.9972302264539683,-0.074376578615630975,-0.99457365058468661,-0.10403486705258853,-0.99103521463624977,-0.13360091074121605,-0.98661805603885588,-0.16304849431414253,-0.98132609136100457,-0.19235150743920176,-0.97516401283678711,-0.22148396797071926,-0.96813728420541678,-0.25042004498713771,-0.9602521358666869,-0.27913408169456094,-0.95151555935665333,-0.30760061817589895,-0.94193530114843849,-0.33579441396545079,-0.93151985578365515,-0.36369047042890518,-0.92027845834053856,-0.39126405292891614,-0.90822107624546589,-0.41849071275660055,-0.89535840043512416,-0.44534630880951043,-0.881701835877161,-0.47180702899685995,-0.86726349145772563,-0.49784941135302707,-0.85205616924486538,-0.5234503648406077,-0.83609335313729649,-0.5485871898245821,-0.81938919690861611,-0.57323759819943176,-0.80195851165755527,-0.59737973315136739,-0.78381675267539996,-0.62099218853814175,-0.76498000574222558,-0.64405402786926547,-0.74546497286409441,-0.66654480286979578,-0.72528895746386368,-0.68844457161123851,-0.70446984903873389,-0.70973391619348691,-0.68302610729814217,-0.73039395996211987,-0.66097674579606469,-0.75040638424579287,-0.63834131507224123,-0.7697534445988804,-0.61513988531726882,-0.78841798653497075,-0.59139302857693532,-0.80638346073726008,-0.56712180051157679,-0.82363393773235649,-0.54234772172661971,-0.84015412201449391,-0.51709275869087801,-0.8559293656076169,-0.49137930425951076,-0.87094568105332448,-0.46523015781891375,-0.88518975381315201,-0.4386685050711594,-0.89864895407418921,-0.41171789747588988,-0.91131134794757862,-0.38440223136791651,-0.92316570804995068,-0.35674572676901495,-0.93420152345842777,-0.32877290591272906,-0.94440900903035641,-0.30050857150120003,-0.95377911407951688,-0.2719777847133244,-0.96230353040110617,-0.24320584298371514,-0.96997469963838778,-0.21421825757219401,-0.97678581998446989,-0.1850407309436829,-0.98273085221327383,-0.15569913397855883,-0.98780452503434446,-0.12621948303368868,-0.9920023397667509,-0.096627916874460623,-0.99532057432794097,-0.066950673498293908,-0.99775628653400372,-0.037214066870147951,-0.99930731670842088,-0.0074444635906875146,-0.99997228959699025,0.022331740482236909,-0.99975061558722433,0.052088143638036932,-0.9986424912311429,0.081798361723032439,-0.99664889907099574,0.11143605153453051,-0.99377160676807097,0.14097493417858545,-0.99001316553535967,0.17038881837075132,-0.98537690787546828,0.19965162365913955,-0.97986694462578405,0.22873740354921854,-0.97348816131351179,0.25762036850982306,-0.96624621382381781,0.28627490884000262,-0.95814752338491604,0.31467561737640587,-0.94919927087455025,0.34279731202109398,-0.93940939045291261,0.3706150580697829,-0.92878656252765168,0.39810419032073624,-0.91734020605720268,0.42524033494469882,-0.90508047019926374,0.45199943109646967,-0.89201822531183061,0.47835775224897364,-0.87816505331475669,0.50429192723088923,-0.86353323742039911,0.52977896094920629,-0.84813575124244078,0.55479625477831196,-0.83198624729256099,0.57932162659755404,-0.81509904487513918,0.603333330459488,-0.79748911739074058,0.62681007587139415,-0.77917207905962416,0.64973104667294523,-0.76016417107706347,0.6720759194933037,-0.7404822472127407,0.69382488177127688,-0.72014375886698734,0.71495864932254527,-0.69916673959713049,0.73545848343840359,-0.67756978912764665,0.75530620750083377,-0.65537205685832178,0.77448422309919918,-0.63259322488502034,0.79297552563424767,-0.60925349054813682,0.81076371939560987,-0.58537354852418533,0.82783303209940284,-0.56097457247642613,0.84416832887306859,-0.53607819628077646,0.85975512567503032,-0.51070649484367525,0.87457960213728003,-0.48488196452889126,0.88862861381950631,-0.45862750321063689,0.901889703863891,-0.43196638997068165,0.91435111404025315,-0.40492226445744861,0.9260017951717332,-0.3775191059254186,0.93683141693178562,-0.34978121197340328,0.94683037700378192,-0.32173317700056397,0.95598980959511359,-0.29339987039925292,0.96430159329823517,-0.26480641450403947,0.97175835829168611,-0.23597816231644594,0.97835349287470053,-0.20694067502517063,0.98408114932961332,-0.17771969934170845,0.98893624910686584,-0.14834114467147372,0.99291448732800902,-0.11883106014067597,0.99601233660271837,-0.089215611499295744,0.99822705015642832,-0.059521057920667773,0.99955666426582046,-0.029773728718214116,0.99955666426582046,-0.029773728718214116,0.99994271388216194,0.0107036888023113,0.99977086209204657,0.021406151259066541,0.99948446431909743,0.032106161165214808,0.99908355337654797,0.042802492596699403,0.99856817519766083,0.053493920050914689,0.99793838883046648,0.064179218587114673,0.99719426643099685,0.074857163966757179,0.99633589325501903,0.085526532793767651,0.99536336764826661,0.096186102654706326,0.99427680103517269,0.10683465225882288,0.9930763179061034,0.11747096157798248,0.99176205580309473,0.12809381198644709,0.99033416530409402,0.13870198640049611,0.98879281000570807,0.14929426941787055,0.9871381665044594,0.15986944745702417,0.9853704243765532,0.17042630889616633,0.98348978615615712,0.18096364421208025,0.98149646731219664,0.19148024611870074,0.97939069622366803,0.20197490970543558,0.97717271415347273,0.21244643257521501,0.97484277522077534,0.22289361498225291,0.97240114637188835,0.23331525996950439,0.96984810734968752,0.24371017350580382,0.96718395066156149,0.25407716462266772,0.96440898154589816,0.26441504555074652,0.96152351793711321,0.27472263185591023,0.95852789042922304,0.28499874257495139,0.95542244223796857,0.29524220035089094,0.95220752916149187,0.30545183156787037,0.94888351953957162,0.31562646648561571,0.94545079421142153,0.32576493937345724,0.94190974647205694,0.33586608864388989,0.93826078202723417,0.34592875698565889,0.93450431894696728,0.35595179149635542,0.93064078761762981,0.36593404381450728,0.92667063069264355,0.37587437025114945,0.92259430304176371,0.3857716319208585,0.91841227169896233,0.39562469487223806,0.91412501580892003,0.40543243021783743,0.90973302657212929,0.41519371426349122,0.90523680718861577,0.42490742863706316,0.90063687280028637,0.43457246041658087,0.89593375043190804,0.4441877022577454,0.89112797893072515,0.45375205252080242,0.88622010890472269,0.46326441539675955,0.88121070265954204,0.47272370103293559,0.87610033413405597,0.48212882565782716,0.87088958883461165,0.49147871170527935,0.86557906376794758,0.50077228793794426,0.86016936737279326,0.51000848957001554,0.8546611194501591,0.51918625838922294,0.84905495109232398,0.52830454287807449,0.84335150461053054,0.5373622983343308,0.83755143346139316,0.54635848699069878,0.83165540217203038,0.55529207813373171,0.82566408626392873,0.56416204822191962,0.8195781721755464,0.5729673810029593,0.81339835718366671,0.58170706763018809,0.80712534932350932,0.59038010677816977,0.80075986730760906,0.5989855047574193,0.79430264044347176,0.60752227562825123,0.78775440855001544,0.61598944131374145,0.78111592187280798,0.62438603171178753,0.77438794099810937,0.6327110848062556,0.76757123676573003,0.6409636467772003,0.76066659018071392,0.6491427721101467,0.75367479232385659,0.65724752370441952,0.74659664426107031,0.66527697298050903,0.7394329569516026,0.67323019998646039,0.73218455115512449,0.68110629350327456,0.7248522573376931,0.68890435114930926,0.71743691557660361,0.69662347948366576,0.70993937546414021,0.7042627941085533,0.70236049601023531,0.71182141977061653,0.69470114554405205,0.71929849046121441,0.68696220161449706,0.7266931495156419,0.67914455088967818,0.73400454971127893,0.67124908905531677,0.74123185336465902,0.66327672071212662,0.74837423242744505,0.65522835927217282,0.75543086858129938,0.64710492685421883,0.76240095333164171,0.6389073541780782,0.76928368810027925,0.63063658045797943,0.77607828431690218,0.6222935532949585,0.78278396350943125,0.61387922856828991,0.78939995739320967,0.60539457032596911,0.79592550795902706,0.59684055067426001,0.80235986755996591,0.58821814966631791,0.80870229899706181,0.57952835518990342,0.81495207560376526,0.57077216285419718,0.82110848132919789,0.56195057587573105,0.82717081082019228,0.55306460496344756,0.83313836950210485,0.5441152682028999,0.83901047365839621,0.53510359093960891,0.84478645050896484,0.52603060566158577,0.85046563828722976,0.5168973518810378,0.85604738631595079,0.50770487601526992,0.86153105508177674,0.49845423126679339,0.86691601630851767,0.48914647750265822,0.87220165302912689,0.47978268113302275,0.87738735965638814,0.47036391498897123,0.88247254205229964,0.46089125819959809,0.88745661759614558,0.4513657960683693,0.89233901525124815,0.44178861994877749,0.89711917563039234,0.43216082711930187,0.90179655105991663,0.4224835206576914,0.9063706056424613,0.41275780931458317,0.91084081531836625,0.40298480738646897,0.91520666792571526,0.39316563458802883,0.91946766325901452,0.38330141592384315,0.92362331312650237,0.3733932815594973,0.9276731414060827,0.36344236669209684,0.93161668409987564,0.35344981142020482,0.93545348938737816,0.3434167606132193,0.93918311767723062,0.33334436378020171,0.94280514165758156,0.32323377493817568,0.9463191463450461,0.31308615247990912,0.94972472913225081,0.30290265904119379,0.95302149983396189,0.29268446136763987,0.95620908073178978,0.28243273018099918,0.95928710661746464,0.27214864004503386,0.96225522483467896,0.26183336923094236,0.96511309531949308,0.25148809958236323,0.96786039063929641,0.24111401637996929,0.97049679603032168,0.23071230820566585,0.97302200943370953,0.22028416680641333,0.97543574153011448,0.20983078695768556,0.97773771577285407,0.1993533663265826,0.97992766841959278,0.18885310533461006,0.98200534856255983,0.17833120702014474,0.9839705181572963,0.16778887690060057,0.9858229520499282,0.15722732283430829,0.98756243800296306,0.14664775488212956,0.98918877671960614,0.13605138516881687,0.99070178186659497,0.12543942774413883,0.99210128009554699,0.11481309844378218,0.99338711106282152,0.10417361475005174,0.99455912744788977,0.093522195652381138,0.99561719497021428,0.082860061507669322,0.9965611924046337,0.072188433900462326,0.99739101159525123,0.061508535502993171,0.99810655746782717,0.050821589935098506,0.99870774804067119,0.040128821624024362,0.99919451443403517,0.029431455664141494,0.9995668008780052,0.018730717676584206,0.99982456471889114,0.008027833668826893,0.99996777642411339,-0.0026759701057814918,0.99999641958558683,-0.013379467288512477,0.99991049092160023,-0.024081431555763842,0.99971000027719292,-0.034780636759563582,0.99939497062302618,-0.045475857068051767,0.99896543805275173,-0.056165867105926158,0.99842145177887653,-0.066849442094837536,0.99776307412712406,-0.077525357993714641,0.99699038052929401,-0.088192391639004608,0.99610345951461909,-0.098849320884814879,0.99510241269962307,-0.1094949247429363,0.99398735477647737,-0.12012798352273499,0.99275841349986127,-0.130747278970894,0.99141572967232428,-0.14135159441099274,0.98995945712815436,-0.1519397148829037,0.98838976271575274,-0.1625104272819923,0.98670682627851736,-0.17306252049810653,0.9849108406342385,-0.18359478555433559,0.9830020115530067,-0.19410601574552544,0.98098055773363713,-0.20459500677653292,0.9788467107786134,-0.2150605569002059,0.97660071516755165,-0.22550146705506927,0.97424282822919028,-0.23591654100270373,0.97177332011190742,-0.24630458546480255,0.96919247375276896,-0.2566644102598874,0.96650058484511236,-0.26699482843967054,0.96369796180466771,-0.27729465642504519,0.96078492573422292,-0.28756271414169221,0.95776181038683272,-0.29779782515528314,0.95462896212758153,-0.3079988168062664,0.95138673989389821,-0.3181645203442226,0.94803551515443285,-0.32829377106177016,0.94457567186649583,-0.33838540842800885,0.94100760643206793,-0.3484382762214836,0.93733172765238304,-0.35845122266265655,0.93354845668109088,-0.36842310054586846,0.92965822697600486,-0.37835276737077594,0.92566148424943961,-0.38823908547325153,0.92155868641714478,-0.3980809221557276,0.91735030354584035,-0.40787714981697254,0.91303681779936063,-0.41762664608128164,0.90861872338341121,-0.42732829392707128,0.90409652648894667,-0.43698098181485806,0.89947074523417525,-0.44658360381461043,0.89474190960519728,-0.45613505973245788,0.88991056139528257,-0.46563425523674123,0.88497725414279738,-0.47508010198339473,0.87994255306778257,-0.48447151774063879,0.87480703500719625,-0.49380742651297393,0.86957128834882413,-0.50308675866446007,0.86423591296386615,-0.5123084510412671,0.85880152013820843,-0.52147144709348292,0.85326873250238633,-0.53057469699616366,0.84763818396024915,-0.53961715776961638,0.84191051961633123,-0.54859779339889436,0.83608639570194188,-0.55751557495249571,0.83016647949997846,-0.5663694807002505,0.8241514492684755,-0.57515849623038284,0.81804199416289425,-0.58388161456573429,0.81183881415716463,-0.59253783627913448,0.80554261996348875,-0.60112616960790966,0.7991541329509112,-0.60964563056750931,0.7926740850626719,-0.61809524306424479,0.78610321873234434,-0.62647403900712173,0.7794422867987747,-0.63478105841875665,0.77269205241982597,-0.6430153495453641,0.76585328898494209,-0.65117596896579977,0.75892678002653979,-0.65926198169965244,0.75191331913023529,-0.66727246131436568,0.74481370984392359,-0.675206490031381,0.73762876558571289,-0.68306315883129054,0.73035930955073003,-0.6908415675579852,0.72300617461680494,-0.69854082502178649,0.71557020324904663,-0.70616004910155405,0.70805224740331907,-0.71369836684575083,0.70045316842863092,-0.72115491457245984,0.69277383696844963,-0.72852883796833767,0.68501513286094906,-0.73581929218649489,0.67717794503820461,-0.74302544194329312,0.66926317142434644,-0.7501464616140433,0.66127171883268276,-0.75718153532760202,0.65320450286180309,-0.7641298570598456,0.64506244779067701,-0.77099063072601914,0.63684648647275677,-0.77776307027194502,0.62855756022909903,-0.7844463997640837,0.62019661874051479,-0.79103985347843364,0.6117646199387623,-0.79754267598826134,0.6032625298967963,-0.80395412225065421,0.59469132271808056,-0.81027345769187975,0.58605198042498374,-0.81649995829154864,0.57734549284626735,-0.82263291066556665,0.56857285750367814,-0.82867161214786911,0.55973507949765988,-0.83461537087092674,0.55083317139219701,-0.84046350584501384,0.54186815309880354,-0.84621534703623214,0.53284105175966801,-0.85187023544327722,0.52375290162997234,-0.85742752317294169,0.51460474395939515,-0.86288657351434606,0.50539762687281298,-0.86824676101188802,0.49613260525021469,-0.87350747153690267,0.48681074060584067,-0.8786681023580234,0.47743310096656477,-0.88372806221023981,0.4680007607495254,-0.88868677136263907,0.45851480063902889,-0.89354366168482768,0.44897630746273259,-0.89829817671202294,0.43938637406712477,-0.90294977170880852,0.42974609919231443,-0.90749791373154653,0.4200565873461462,-0.9119420816894368,0.41031894867765573,-0.91628176640422077,0.40053429884987496,-0.92051647066851872,0.39070375891201009,-0.92464570930279555,0.38082845517099961,-0.9286690092109493,0.37090951906247116,-0.9325859094345148,0.3609480870211102,-0.93639596120547652,0.35094530035045585,-0.94009872799768479,0.3409023050921407,-0.94369378557687023,0.33082025189458414,-0.94718072204924852,0.32070029588116106,-0.95055913790871238,0.3105435965178569,-0.95382864608260376,0.30035131748042482,-0.95698887197606164,0.2901246265210608,-0.96003945351494036,0.27986469533461111,-0.96298004118729241,0.26957269942433065,-0.96581029808341434,0.25924981796719987,-0.96852989993444594,0.24889723367882599,-0.97113853514952297,0.23851613267793595,-0.97363590485147677,0.22810770435048022,-0.97602172291107725,0.21767314121336212,-0.97829571597981557,0.20721363877780816,-0.98045762352122179,0.19673039541239729,-0.9825071978407155,0.18622461220575856,-0.98444420411398481,0.17569749282896155,-0.98626842041389051,0.16515024339760845,-0.9879796377358927,0.15458407233364685,-0.98957766002199721,0.1440001902269181,-0.99106230418321795,0.13339980969645682,-0.99243340012055403,0.12278414525156028,-0.99369079074447886,0.11215441315263672,-0.99483433199293736,0.10151183127185734,-0.99586389284785226,0.090857618953621558,-0.99677935535013451,0.080192996874854067,-0.99758061461319858,0.069519186905149064,-0.9982675788349793,0.058837411966777518,-0.9988401693084501,0.048148895894575987,-0.99929832043064015,0.037454863295726483,-0.99964197971015123,0.026756539409452249,-0.99987110777317134,0.016055149966638919,-0.99998567836798591,0.0053519210493998002,-0.99998567836798591,-0.0053519210493991115,-0.99987110777317134,-0.016055149966638677,-0.99964197971015123,-0.026756539409452006,-0.99929832043064015,-0.03745486329572624,-0.9988401693084501,-0.048148895894575744,-0.99826757883497941,-0.058837411966777275,-0.99758061461319858,-0.069519186905148384,-0.99677935535013451,-0.080192996874853831,-0.99586389284785226,-0.090857618953621322,-0.99483433199293736,-0.10151183127185709,-0.99369079074447886,-0.11215441315263648,-0.99243340012055403,-0.12278414525156005,-0.99106230418321795,-0.13339980969645657,-0.98957766002199721,-0.1440001902269174,-0.98797963773589281,-0.15458407233364663,-0.98626842041389051,-0.16515024339760823,-0.98444420411398481,-0.17569749282896133,-0.9825071978407155,-0.18622461220575834,-0.98045762352122179,-0.19673039541239704,-0.97829571597981568,-0.20721363877780791,-0.97602172291107747,-0.21767314121336145,-0.97363590485147677,-0.22810770435047997,-0.97113853514952297,-0.23851613267793573,-0.96852989993444605,-0.24889723367882574,-0.96581029808341445,-0.25924981796719965,-0.96298004118729252,-0.26957269942433038,-0.96003945351494036,-0.27986469533461089,-0.95698887197606186,-0.29012462652106014,-0.95382864608260387,-0.3003513174804246,-0.95055913790871249,-0.31054359651785668,-0.94718072204924864,-0.32070029588116078,-0.94369378557687034,-0.33082025189458386,-0.9400987279976849,-0.34090230509214048,-0.93639596120547663,-0.35094530035045557,-0.93258590943451503,-0.36094808702110953,-0.92866900921094941,-0.37090951906247094,-0.92464570930279566,-0.38082845517099939,-0.92051647066851883,-0.39070375891200987,-0.91628176640422088,-0.40053429884987474,-0.91194208168943691,-0.4103189486776555,-0.90749791373154665,-0.42005658734614598,-0.90294977170880886,-0.42974609919231382,-0.89829817671202306,-0.43938637406712455,-0.89354366168482779,-0.44897630746273237,-0.88868677136263918,-0.45851480063902866,-0.88372806221023992,-0.46800076074952518,-0.87866810235802351,-0.47743310096656455,-0.87350747153690278,-0.48681074060584045,-0.86824676101188836,-0.49613260525021408,-0.86288657351434617,-0.50539762687281276,-0.8574275231729418,-0.51460474395939493,-0.85187023544327733,-0.52375290162997212,-0.84621534703623225,-0.53284105175966778,-0.84046350584501395,-0.54186815309880343,-0.83461537087092685,-0.55083317139219679,-0.82867161214786944,-0.55973507949765933,-0.82263291066556676,-0.56857285750367792,-0.81649995829154876,-0.57734549284626713,-0.81027345769187986,-0.58605198042498352,-0.80395412225065432,-0.59469132271808034,-0.79754267598826156,-0.60326252989679618,-0.79103985347843375,-0.61176461993876208,-0.78444639976408415,-0.62019661874051424,-0.77776307027194524,-0.62855756022909881,-0.77099063072601925,-0.63684648647275666,-0.76412985705984582,-0.64506244779067679,-0.75718153532760224,-0.65320450286180298,-0.75014646161404352,-0.66127171883268254,-0.74302544194329323,-0.66926317142434621,-0.73581929218649533,-0.67717794503820417,-0.72852883796833778,-0.68501513286094884,-0.72115491457246006,-0.69277383696844952,-0.71369836684575105,-0.70045316842863081,-0.70616004910155417,-0.70805224740331885,-0.6985408250217866,-0.71557020324904641,-0.69084156755798531,-0.72300617461680472,-0.6830631588312911,-0.73035930955072959,-0.67520649003138122,-0.73762876558571266,-0.66727246131436591,-0.74481370984392348,-0.65926198169965267,-0.75191331913023518,-0.65117596896579988,-0.75892678002653957,-0.64301534954536388,-0.76585328898494232,-0.6347810584187572,-0.77269205241982553,-0.62647403900712195,-0.77944228679877448,-0.61809524306424535,-0.78610321873234401,-0.60964563056750953,-0.79267408506267167,-0.6011261696079101,-0.79915413295091087,-0.5925378362791347,-0.80554261996348853,-0.58388161456573417,-0.81183881415716475,-0.5751584962303834,-0.81804199416289392,-0.56636948070025073,-0.82415144926847539,-0.55751557495249626,-0.83016647949997813,-0.54859779339889458,-0.83608639570194165,-0.53961715776961694,-0.8419105196163309,-0.53057469699616389,-0.84763818396024904,-0.5214714470934827,-0.85326873250238644,-0.51230845104126765,-0.8588015201382081,-0.50308675866446029,-0.86423591296386604,-0.49380742651297455,-0.8695712883488238,-0.48447151774063901,-0.87480703500719614,-0.47508010198339534,-0.87994255306778224,-0.46563425523674146,-0.88497725414279726,-0.45613505973245771,-0.88991056139528268,-0.44658360381461104,-0.89474190960519695,-0.43698098181485828,-0.89947074523417514,-0.42732829392707189,-0.90409652648894634,-0.41762664608128186,-0.9086187233834111,-0.40787714981697321,-0.91303681779936041,-0.39808092215572805,-0.91735030354584024,-0.38823908547325153,-0.92155868641714478,-0.37835276737077633,-0.92566148424943939,-0.36842310054586846,-0.92965822697600486,-0.35845122266265722,-0.93354845668109065,-0.34843827622148382,-0.93733172765238293,-0.33838540842800952,-0.94100760643206771,-0.3282937710617706,-0.94457567186649571,-0.3181645203442226,-0.94803551515443274,-0.30799881680626684,-0.9513867398938981,-0.29779782515528319,-0.95462896212758153,-0.28756271414169288,-0.95776181038683261,-0.27729465642504542,-0.96078492573422281,-0.26699482843967121,-0.9636979618046676,-0.25666441025988784,-0.96650058484511225,-0.24630458546480258,-0.96919247375276896,-0.23591654100270418,-0.97177332011190731,-0.22550146705506929,-0.97424282822919028,-0.21506055690020656,-0.97660071516755143,-0.20459500677653317,-0.9788467107786134,-0.19410601574552611,-0.98098055773363702,-0.18359478555433603,-0.98300201155300659,-0.17306252049810655,-0.9849108406342385,-0.16251042728199275,-0.98670682627851736,-0.1519397148829037,-0.98838976271575274,-0.14135159441099343,-0.98995945712815436,-0.13074727897089425,-0.99141572967232428,-0.12012798352273479,-0.99275841349986127,-0.10949492474293678,-0.99398735477647737,-0.098849320884814892,-0.99510241269962307,-0.088192391639005066,-0.99610345951461909,-0.077525357993714669,-0.99699038052929401,-0.06684944209483823,-0.99776307412712406,-0.056165867105926401,-0.99842145177887653,-0.045475857068051566,-0.99896543805275173,-0.034780636759564047,-0.99939497062302618,-0.024081431555763862,-0.99971000027719292,-0.013379467288512943,-0.99991049092160023,-0.0026759701057817368,-0.99999641958558683,0.0080278336688262043,-0.99996777642411339,0.01873071767658396,-0.99982456471889114,0.029431455664141692,-0.9995668008780052,0.040128821624023897,-0.99919451443403517,0.050821589935098485,-0.99870774804067119,0.061508535502992706,-0.99810655746782717,0.072188433900462076,-0.99739101159525123,0.082860061507668642,-0.9965611924046337,0.093522195652380902,-0.99561719497021428,0.10417361475005193,-0.99455912744788977,0.11481309844378172,-0.99338711106282152,0.1254394277441388,-0.99210128009554699,0.13605138516881643,-0.99070178186659497,0.14664775488212931,-0.98918877671960614,0.15722732283430763,-0.98756243800296317,0.16778887690060032,-0.98582295204992831,0.17833120702014493,-0.9839705181572963,0.18885310533460958,-0.98200534856255994,0.19935336632658257,-0.97992766841959278,0.20983078695768509,-0.97773771577285418,0.22028416680641311,-0.97543574153011448,0.23071230820566518,-0.97302200943370964,0.24111401637996904,-0.9704967960303218,0.2514880995823634,-0.9678603906392963,0.26183336923094186,-0.9651130953194933,0.27214864004503381,-0.96225522483467896,0.28243273018099874,-0.95928710661746475,0.29268446136763959,-0.9562090807317899,0.30290265904119312,-0.95302149983396212,0.3130861524799089,-0.94972472913225081,0.32323377493817584,-0.9463191463450461,0.33334436378020127,-0.94280514165758178,0.3434167606132193,-0.93918311767723062,0.35344981142020437,-0.93545348938737838,0.36344236669209656,-0.93161668409987575,0.37339328155949669,-0.92767314140608303,0.38330141592384293,-0.92362331312650248,0.393165634588029,-0.91946766325901452,0.40298480738646852,-0.91520666792571548,0.41275780931458311,-0.91084081531836625,0.42248352065769101,-0.90637060564246141,0.43216082711930165,-0.90179655105991674,0.44178861994877683,-0.89711917563039256,0.45136579606836907,-0.89233901525124826,0.46089125819959809,-0.88745661759614558,0.47036391498897084,-0.88247254205229986,0.47978268113302275,-0.87738735965638814,0.48914647750265783,-0.87220165302912711,0.49845423126679317,-0.86691601630851778,0.50770487601526937,-0.86153105508177708,0.51689735188103758,-0.8560473863159509,0.52603060566158577,-0.85046563828722976,0.53510359093960858,-0.84478645050896506,0.5441152682028999,-0.83901047365839621,0.553064604963447,-0.83313836950210518,0.56195057587573094,-0.82717081082019228,0.57077216285419663,-0.82110848132919834,0.5795283551899032,-0.81495207560376537,0.58821814966631802,-0.80870229899706181,0.59684055067425956,-0.80235986755996624,0.60539457032596911,-0.79592550795902706,0.61387922856828947,-0.78939995739321012,0.62229355329495839,-0.78278396350943136,0.63063658045797888,-0.77607828431690262,0.63890735417807787,-0.76928368810027947,0.64710492685421883,-0.76240095333164171,0.65522835927217249,-0.75543086858129971,0.66327672071212662,-0.74837423242744505,0.67124908905531633,-0.74123185336465947,0.67914455088967807,-0.73400454971127904,0.68696220161449661,-0.72669314951564234,0.69470114554405182,-0.71929849046121475,0.70236049601023542,-0.71182141977061641,0.70993937546413988,-0.70426279410855364,0.71743691557660361,-0.69662347948366576,0.72485225733769265,-0.68890435114930959,0.73218455115512437,-0.68110629350327478,0.73943295695160205,-0.67323019998646094,0.74659664426106997,-0.66527697298050925,0.7536747923238567,-0.65724752370441952,0.76066659018071359,-0.64914277211014704,0.76757123676573003,-0.64096364677720041,0.77438794099810904,-0.63271108480625604,0.78111592187280787,-0.62438603171178775,0.787754408550015,-0.615989441313742,0.79430264044347154,-0.60752227562825145,0.80075986730760906,-0.5989855047574193,0.80712534932350899,-0.5903801067781701,0.81339835718366671,-0.58170706763018809,0.81957817217554618,-0.57296738100295985,0.82566408626392862,-0.56416204822191984,0.83165540217203004,-0.55529207813373227,0.83755143346139294,-0.546358486990699,0.84335150461053054,-0.53736229833433069,0.84905495109232376,-0.52830454287807493,0.85466111945015899,-0.51918625838922305,0.86016936737279293,-0.51000848957001599,0.86557906376794747,-0.50077228793794448,0.87088958883461132,-0.49147871170527996,0.87610033413405575,-0.4821288256578275,0.88121070265954204,-0.47272370103293554,0.88622010890472247,-0.46326441539676,0.89112797893072515,-0.45375205252080247,0.89593375043190782,-0.4441877022577459,0.90063687280028637,-0.43457246041658104,0.90523680718861543,-0.42490742863706382,0.90973302657212907,-0.4151937142634915,0.91412501580892014,-0.40543243021783743,0.91841227169896211,-0.3956246948722385,0.9225943030417636,-0.38577163192085862,0.92667063069264333,-0.37587437025114995,0.93064078761762969,-0.3659340438145075,0.93450431894696695,-0.35595179149635608,0.93826078202723395,-0.34592875698565922,0.94190974647205705,-0.33586608864388989,0.94545079421142142,-0.32576493937345768,0.94888351953957151,-0.31562646648561576,0.95220752916149165,-0.30545183156787092,0.95542244223796846,-0.29524220035089116,0.95852789042922282,-0.28499874257495211,0.9615235179371131,-0.27472263185591062,0.96440898154589827,-0.26441504555074652,0.96718395066156138,-0.25407716462266816,0.96984810734968752,-0.2437101735058039,0.97240114637188824,-0.23331525996950497,0.97484277522077534,-0.22289361498225313,0.97717271415347262,-0.21244643257521573,0.97939069622366792,-0.20197490970543591,0.98149646731219664,-0.19148024611870071,0.98348978615615701,-0.18096364421208075,0.9853704243765532,-0.17042630889616645,0.98713816650445929,-0.15986944745702478,0.98879281000570807,-0.1492942694178708,0.99033416530409391,-0.13870198640049686,0.99176205580309462,-0.12809381198644743,0.9930763179061034,-0.11747096157798247,0.99427680103517269,-0.10683465225882337,0.99536336764826661,-0.096186102654706437,0.99633589325501892,-0.085526532793768276,0.99719426643099685,-0.074857163966757415,0.99793838883046648,-0.064179218587115408,0.99856817519766083,-0.053493920050915057,0.99908355337654797,-0.042802492596699389,0.99948446431909743,-0.032106161165215301,0.99977086209204657,-0.021406151259066655,0.99994271388216194,-0.010703688802311925,0.99994271388216194,-0.010703688802311925,0.62348980185873359,0.7818314824680298,0.99995135397538404,0.0098635532540870628,0.99980542063440758,0.019726146862865328,0.99956221417522439,0.029586821274391859,0.99922175825988935,0.039444617123446338,0.99878408601205604,0.049298575324869712,0.99824924001375437,0.059147737166875519,0.99761727230124764,0.068991144404324925,0.99688824435996948,0.078827839351956377,0.99606222711854231,0.088656864977560756,0.9951393009418763,0.098477264995092989,0.99411955562335041,0.1082880839577111,0.99300309037607637,0.11808836735073357,0.99179001382324605,0.12787716168450602,0.99048044398756319,0.13765351458716821,0.98907450827976051,0.14741647489731227,0.98757234348620426,0.15716509275652302,0.98597409575558559,0.16689841970179176,0.98427992058470115,0.17661550875779414,0.98248998280332522,0.18631541452902331,0.98060445655817252,0.19599719329176948,0.9786235252959552,0.2056599030859366,0.97654738174553546,0.21530260380668764,0.97437622789917355,0.22492435729590934,0.97211027499287639,0.23452422743348758,0.96974974348584586,0.24410128022838426,0.96729486303902945,0.2536545839095074,0.96474587249277644,0.26318320901636488,0.96210301984360058,0.27268622848949375,0.9593665622200519,0.2821627177606556,0.9565367658577002,0.29161175484278956,0.9536139060732326,0.30103242041971484,0.95059826723766705,0.31042379793557223,0.94749014274868559,0.31978497368399805,0.94428983500208918,0.32911503689702065,0.94099765536237645,0.33841307983367042,0.93761392413245104,0.3476781978682964,0.93413897052245853,0.35690948957857843,0.93057313261775643,0.366106056833229,0.92691675734602175,0.37526700487937414,0.92317020044349751,0.38439144242960538,0.91933382642038219,0.39347848174869549,0.9154080085253663,0.40252723873996754,0.91139312870931766,0.41153683303131094,0.90728957758812101,0.42050638806083429,0.90309775440467399,0.4294350311621481,0.89881806699004418,0.43832189364926821,0.89445093172379031,0.4471661109011319,0.88999677349345152,0.45596682244571901,0.88545602565320991,0.46472317204376856,0.88082912998172769,0.4734343077720844,0.87611653663916633,0.48209938210642039,0.8713187041233893,0.49071755200393796,0.86643609922535414,0.49928797898522681,0.86146919698369673,0.50780982921588336,0.85641848063851467,0.51628227358763545,0.85128444158435124,0.52470448779900802,0.84606757932238663,0.53307565243552146,0.84076840141184128,0.54139495304941387,0.83538742342059302,0.54966158023888012,0.82992516887501755,0.55787472972682095,0.82438216920905316,0.56603360243909195,0.81875896371249612,0.57413740458224771,0.81305609947853252,0.58218534772077069,0.80727413135051007,0.59017664885378129,0.80141362186795662,0.59811053049121599,0.79547514121184937,0.60598622072947195,0.78945926714914039,0.61380295332650703,0.78336658497654543,0.62155996777638822,0.77719768746359841,0.62925650938328392,0.7709531747949796,0.63689182933488919,0.76463365451212317,0.64446518477527948,0.75823974145410744,0.65197583887718435,0.75177205769783673,0.65942306091367509,0.74523123249751722,0.66680612632925873,0.73861790222343648,0.67412431681037144,0.73193271030004903,0.68137692035526465,0.72517630714337644,0.68856323134327713,0.7183493500977276,0.69568255060348638,0.71145250337174326,0.70273418548273259,0.70448643797377475,0.70971744991300789,0.69745183164659963,0.71663166447820548,0.69034936880148301,0.72347615648022157,0.6831797404515898,0.73025026000440307,0.67594364414475439,0.73695331598433678,0.66864178389561468,0.74358467226597003,0.66127487011711783,0.7501436836710611,0.65384361955140158,0.75662971205994944,0.64634875520006208,0.76304212639364166,0.63879100625381058,0.76938030279520686,0.63117110802152976,0.77564362461047431,-0.22252093395631434,0.97492791218182362,0.99980542063440758,0.019726146862865328,0.99922175825988935,0.039444617123446338,0.99824924001375437,0.059147737166875519,0.99688824435996948,0.078827839351956377,0.9951393009418763,0.098477264995092989,0.99300309037607637,0.11808836735073357,0.99048044398756319,0.13765351458716821,0.98757234348620426,0.15716509275652302,0.98427992058470115,0.17661550875779414,0.98060445655817252,0.19599719329176948,0.97654738174553546,0.21530260380668764,0.97211027499287639,0.23452422743348758,0.96729486303902945,0.2536545839095074,0.96210301984360058,0.27268622848949375,0.9565367658577002,0.29161175484278956,0.95059826723766705,0.31042379793557223,0.94428983500208918,0.32911503689702065,0.93761392413245104,0.3476781978682964,0.93057313261775643,0.366106056833229,0.92317020044349751,0.38439144242960538,0.9154080085253663,0.40252723873996754,0.90728957758812101,0.42050638806083429,0.89881806699004418,0.43832189364926821,0.88999677349345152,0.45596682244571901,0.88082912998172769,0.4734343077720844,0.8713187041233893,0.49071755200393796,0.86146919698369673,0.50780982921588336,0.85128444158435124,0.52470448779900802,0.84076840141184128,0.54139495304941387,0.82992516887501755,0.55787472972682095,0.81875896371249612,0.57413740458224771,0.80727413135051007,0.59017664885378129,0.79547514121184937,0.60598622072947195,0.78336658497654543,0.62155996777638822,0.7709531747949796,0.63689182933488919,0.75823974145410744,0.65197583887718435,0.74523123249751722,0.66680612632925873,0.73193271030004903,0.68137692035526465,0.7183493500977276,0.69568255060348638,0.70448643797377475,0.70971744991300789,0.69034936880148301,0.72347615648022157,0.67594364414475439,0.73695331598433678,0.66127487011711783,0.7501436836710611,0.64634875520006208,0.76304212639364166,0.63117110802152976,0.77564362461047431,0.61574783509543918,0.78794327433850198,0.60008493852311318,0.79993628906164238,0.58418851365750835,0.81161800159350284,0.56806474673115581,0.82298386589365635,0.55171991244873453,0.83402945883677315,0.53516037154521534,0.84475048193391822,0.51839256831052494,0.8551427630053462,0.50142302808169537,0.86520225780414106,0.48425835470347067,0.8749250515900705,0.46690522795836398,0.88430736065304139,0.44937040096716135,0.89334553378556314,0.43166069756088615,0.90203605370364726,0.413783009625246,0.91037553841558905,0.39574429441859421,0.9183607425380993,0.37755157186445287,0.92598855855927342,0.35921192181964789,0.93325601804790692,0.34073248131912093,0.9401602928086864,0.32212044179849053,0.94669869598280598,0.30338304629544116,0.95286868309358252,0.28452758663103245,0.95866785303666058,0.26556140057202332,0.96409394901442325,0.24649186897531572,0.96914485941424455,0.22732641291563049,0.97381861863024177,0.20807249079753021,0.97811340782820866,0.18873759545291671,0.98202755565343036,0.16932925122512985,0.98555953888110526,0.14985501104078355,0.98870798300912222,0.13032245347047913,0.99147166279295895,0.11073917977953723,0.99384950272249739,0.091112810969899899,0.99584057744056764,0.071450984814350818,0.99744411210305883,0.051761352884209272,0.99865948268045623,0.03205157757165511,0.99948621620068789,0.012329329107840686,0.99992399093318618,-0.0073977174220457012,0.99997263651409163,-0.027121885065606463,0.99963213401255169,-0.046835497990787969,0.99890261593808782,-0.066530884472996751,0.99778436618902822,-0.086200379880619418,0.99627781994202647,-0.10583632965778009,0.99438356348270851,-0.12543109230317789,0.99210233397751446,-0.14497704234384406,0.98943501918682419,-0.16446657330266054,0.98638265711947748,-0.18389210065848827,0.98294643562882322,-0.20324606479774882,0.97912769195045712,-0.90096886790241926,0.43388373911755784,0.99956221417522439,0.029586821274391859,0.99824924001375437,0.059147737166875519,0.99606222711854231,0.088656864977560756,0.99300309037607637,0.11808836735073357,0.98907450827976051,0.14741647489731227,0.98427992058470115,0.17661550875779414,0.9786235252959552,0.20565990308593662,0.97211027499287639,0.23452422743348758,0.96474587249277644,0.26318320901636488,0.9565367658577002,0.29161175484278956,0.94749014274868559,0.31978497368399811,0.93761392413245104,0.3476781978682964,0.92691675734602175,0.37526700487937414,0.9154080085253663,0.4025272387399676,0.90309775440467399,0.42943503116214815,0.88999677349345152,0.45596682244571901,0.87611653663916622,0.4820993821064205,0.86146919698369673,0.50780982921588336,0.84606757932238663,0.53307565243552146,0.82992516887501755,0.55787472972682095,0.81305609947853252,0.58218534772077069,0.79547514121184926,0.60598622072947206,0.77719768746359841,0.62925650938328392,0.75823974145410744,0.65197583887718435,0.73861790222343637,0.67412431681037155,0.7183493500977276,0.69568255060348638,0.69745183164659952,0.71663166447820548,0.67594364414475427,0.73695331598433678,0.65384361955140158,0.75662971205994944,0.63117110802152965,0.77564362461047442,0.60794596096345843,0.79397840559313515,0.58418851365750835,0.81161800159350284,0.55991956745100624,0.82854696788140991,0.53516037154521512,0.84475048193391833,0.50993260439013577,0.86021435641350075,0.48425835470347067,0.8749250515900705,0.45816010213036873,0.88886968719598602,0.43166069756088615,0.90203605370364726,0.40478334312239378,0.9144126230158125,0.37755157186445287,0.92598855855927342,0.34998922715394376,0.93675372477305108,0.32212044179849053,0.94669869598280598,0.29396961691645768,0.9558147646536912,0.2655614005720231,0.96409394901442336,0.23692066619403279,0.97152900004589449,0.20807249079753021,0.97811340782820866,0.17904213302703359,0.98384140724058267,0.14985501104078355,0.98870798300912222,0.12053668025532301,0.99270887409805397,0.091112810969899677,0.99584057744056775,0.061609165890280405,0.99810035100600181,0.03205157757165511,0.99948621620068789,0.0024659258003844574,0.99999695960035151,-0.027121885065606685,0.99963213401255169,-0.056685948777951994,0.99839205886823013,-0.08620037988061964,0.99627781994202647,-0.11563933637448305,0.99329126840160498,-0.14497704234384406,0.98943501918682419,-0.17418781052509302,0.98471244872017039,-0.20324606479774901,0.97912769195045712,-0.23212636257818506,0.97268563873238145,-0.26080341709643418,0.96539192954510622,-0.28925211953656782,0.9572529505536157,-0.31744756102126248,0.94827582801717125,-0.34536505442130772,0.93846842204976033,-0.37298015597095618,0.9278393197380036,-0.40026868667019105,0.9163978276225454,-0.42720675345517467,0.9041539635495105,-0.45377077011833572,0.89111844789916261,-0.47993747795978653,0.87730269419944185,-0.50568396615197864,0.8627187991326053,-0.53098769179977512,0.84737953194371352,-0.5558264996783715,0.83129832326024167,-0.58017864163178023,0.8144892533326038,-0.60402279561490058,0.7969670397058839,-0.62733808436249838,0.77874702433357068,-0.65010409366874455,0.75984516014457859,-0.6723008902613169,0.7402779970753155,-0.69390903925440872,0.72006266757902637,-0.71490962116536172,0.69921687162510526,-0.73528424848003138,0.67775886120150097,-0.75501508175237031,0.65570742433379658,-0.774084845224143,0.63308186863494564,-0.79247684195109047,0.60990200440007269,-0.81017496842229975,0.58618812726114256,-0.82716372865998222,0.56196100041667951,-0.84342824778731318,0.53724183645209778,-0.85895428505245097,0.51205227876656578,-0.87372824629733603,0.48641438262265813,-0.88773719586035138,0.46035059583539173,-0.90096886790241915,-0.43388373911755801,0.99922175825988935,0.039444617123446338,0.99688824435996948,0.078827839351956377,0.99300309037607637,0.11808836735073357,0.98757234348620426,0.15716509275652302,0.98060445655817252,0.19599719329176948,0.97211027499287639,0.23452422743348758,0.96210301984360058,0.27268622848949375,0.95059826723766705,0.31042379793557223,0.93761392413245104,0.3476781978682964,0.92317020044349751,0.38439144242960538,0.90728957758812101,0.42050638806083429,0.88999677349345152,0.45596682244571901,0.8713187041233893,0.49071755200393796,0.85128444158435124,0.52470448779900802,0.82992516887501755,0.55787472972682095,0.80727413135051007,0.59017664885378129,0.78336658497654543,0.62155996777638822,0.75823974145410744,0.65197583887718435,0.73193271030004903,0.68137692035526465,0.70448643797377475,0.70971744991300789,0.67594364414475439,0.73695331598433678,0.64634875520006208,0.76304212639364166,0.61574783509543918,0.78794327433850198,0.58418851365750835,0.81161800159350284,0.55171991244873453,0.83402945883677315,0.51839256831052494,0.8551427630053462,0.48425835470347067,0.8749250515900705,0.44937040096716135,0.89334553378556314,0.413783009625246,0.91037553841558905,0.37755157186445287,0.92598855855927342,0.34073248131912093,0.9401602928086864,0.30338304629544116,0.95286868309358252,0.26556140057202332,0.96409394901442325,0.22732641291563049,0.97381861863024177,0.18873759545291671,0.98202755565343036,0.14985501104078355,0.98870798300912222,0.11073917977953723,0.99384950272249739,0.071450984814350818,0.99744411210305883,0.03205157757165511,0.99948621620068789,-0.0073977174220457012,0.99997263651409163,-0.046835497990787969,0.99890261593808782,-0.086200379880619418,0.99627781994202647,-0.12543109230317789,0.99210233397751446,-0.16446657330266054,0.98638265711947748,-0.20324606479774882,0.97912769195045712,-0.24170920715055957,0.97034873070388872,-0.2797961331154229,0.9600594376879259,-0.31744756102126248,0.94827582801717125,-0.35460488704253568,0.93501624268541483,-0.39121027641512146,0.92030132001817988,-0.42720675345517423,0.90415396354951072,-0.46253829024083548,0.886599306373,-0.49714989381876667,0.86766467202254416,-0.53098769179977512,0.84737953194371352,-0.56399901621029636,0.82577545962193488,-0.59613248546922526,0.80288608143888252,-0.62733808436249838,0.77874702433357068,-0.65756724189094717,0.75339586034961237,-0.68677290687025805,0.72687204815495265,-0.71490962116536172,0.69921687162510526,-0.7419335904452703,0.67047337558548126,-0.76780275234822981,0.64068629881283001,-0.79247684195109047,0.60990200440007269,-0.81591745444099639,0.57816840759291277,-0.8380881048918406,0.54553490121054871,-0.85895428505245075,0.51205227876656623,-0.87848351705811156,0.47777265540967345,-0.89664540398182457,0.44274938680733444,-0.91341167714662341,0.40703698609855177,-0.92875624012530233,0.37069103904506756,-0.94265520935907376,0.33376811751304364,-0.95508695133193333,0.29632569141988568,-0.96603211624286955,0.2584220392832679,-0.97547366812351066,0.22011615751158065,-0.98339691135432661,0.18146766857699681,-0.98978951353811884,0.14253672821407859,-0.99464152469519274,0.10338393178836994,-0.99794539275033634,0.064070219980712786,-0.99969597528750109,0.024656783934081519,-0.99989054755388718,-0.014795029989418538,-0.9985288067009761,-0.054223815693150684,-0.99561287225590978,-0.093568202923522317,-0.99114728282248155,-0.13276695279176906,-0.9851389890168738,-0.17175905309127606,-0.97759734264913944,-0.21048381326206805,-0.96853408216726333,-0.24888095885466366,-0.95796331438646254,-0.28689072534626076,-0.94590149253216116,-0.32445395116322723,-0.93236739063081686,-0.36151216976511563,-0.91738207428845864,-0.39800770064686569,-0.22252093395631459,-0.97492791218182362,0.99878408601205604,0.049298575324869712,0.9951393009418763,0.098477264995092989,0.98907450827976051,0.14741647489731227,0.98060445655817252,0.19599719329176948,0.96974974348584586,0.24410128022838426,0.9565367658577002,0.29161175484278956,0.94099765536237645,0.33841307983367042,0.92317020044349751,0.38439144242960538,0.90309775440467399,0.4294350311621481,0.88082912998172769,0.4734343077720844,0.85641848063851467,0.51628227358763545,0.82992516887501755,0.55787472972682095,0.80141362186795662,0.59811053049121599,0.7709531747949796,0.63689182933488919,0.73861790222343648,0.67412431681037144,0.70448643797377475,0.70971744991300789,0.66864178389561468,0.74358467226597003,0.63117110802152976,0.77564362461047431,0.59216553258938587,0.80581634508933175,0.55171991244873453,0.83402945883677315,0.50993260439013577,0.86021435641350075,0.46690522795836398,0.88430736065304139,0.42274241833115461,0.90624988151366237,0.37755157186445287,0.92598855855927342,0.3314425849229507,0.94347539072282782,0.28452758663103245,0.95866785303666058,0.23692066619403301,0.97152900004589449,0.18873759545291671,0.98202755565343036,0.14009554734707616,0.9901379891780353,0.091112810969899899,0.99584057744056764,0.041908503910045233,0.99912145272735575,-0.0073977174220457012,0.99997263651409163,-0.056685948777951994,0.99839205886823013,-0.10583632965778009,0.99438356348270851,-0.15472933479028111,0.98795689832874645,-0.20324606479774882,0.97912769195045712,-0.25126853533885218,0.96791741545891608,-0.29867996402625796,0.95435333031811298,-0.34536505442130749,0.93846842204976044,-0.39121027641512146,0.92030132001817988,-0.43610414231429423,0.89989620349033239,-0.47993747795978653,0.87730269419944185,-0.52260368821969871,0.85257573567347544,-0.56399901621029636,0.82577545962193488,-0.60402279561490058,0.7969670397058839,-0.64257769548705412,0.76622053304681592,-0.679569956942641,0.7336107098597846,-0.71490962116536172,0.69921687162510526,-0.74851074817110119,0.66312265824079519,-0.78029162579918521,0.62541584462472988,-0.81017496842229952,0.586188127261143,-0.8380881048918406,0.54553490121054871,-0.86396315526164691,0.50355502812536734,-0.88773719586035116,0.46035059583539212,-0.90935241231092623,0.41602667008774724,-0.92875624012530233,0.37069103904506756,-0.94590149253216127,0.32445395116322706,-0.96074647522704626,0.27742784708606044,-0.97325508776573832,0.22972708620906004,-0.98339691135432661,0.18146766857699681,-0.99114728282248155,0.13276695279176887,-0.99648735460004345,0.083743370616468929,-0.99940414055107041,0.034516138969708281,-0.99989054755388718,-0.014795029989418538,-0.99794539275033634,-0.064070219980712995,-0.99357340642228675,-0.11318960221863705,-0.98678522048840134,-0.16203372681530576,-0.97759734264913944,-0.21048381326206805,-0.96603211624286955,-0.25842203928326812,-0.95211766591071423,-0.30573182735975263,-0.93588782920225999,-0.35229812822534484,-0.91738207428845864,-0.39800770064686569,-0.89664540398182446,-0.44274938680733467,-0.87372824629733603,-0.48641438262265829,-0.84868633182017839,-0.52889650233444552,-0.82158055817854647,-0.57009243673550691,-0.79247684195109036,-0.60990200440007281,-0.76144595836913465,-0.6482283953077882,-0.72856336920348974,-0.68497840626902939,-0.6939090392544085,-0.72006266757902648,-0.65756724189094706,-0.75339586034961248,-0.61962635411262756,-0.78489692399008204,-0.58017864163178001,-0.81448925333260391,-0.53932003449919885,-0.84210088492281199,-0.49714989381876645,-0.86766467202254427,-0.45377077011833589,-0.8911184478991625,-0.40928815396449059,-0.91240517700435009,-0.36381021942763564,-0.93147309367475328,-0.3174475610212627,-0.94827582801717125,-0.27031292475512003,-0.96277251867215907,0.62348980185873404,-0.78183148246802936,0.99824924001375437,0.059147737166875519,0.99300309037607637,0.11808836735073357,0.98427992058470115,0.17661550875779414,0.97211027499287639,0.23452422743348758,0.9565367658577002,0.29161175484278956,0.93761392413245104,0.3476781978682964,0.9154080085253663,0.4025272387399676,0.88999677349345152,0.45596682244571901,0.86146919698369673,0.50780982921588336,0.82992516887501755,0.55787472972682095,0.79547514121184926,0.60598622072947206,0.75823974145410744,0.65197583887718435,0.7183493500977276,0.69568255060348638,0.67594364414475427,0.73695331598433678,0.63117110802152965,0.77564362461047442,0.58418851365750835,0.81161800159350284,0.53516037154521512,0.84475048193391833,0.48425835470347067,0.8749250515900705,0.43166069756088615,0.90203605370364726,0.37755157186445287,0.92598855855927342,0.32212044179849053,0.94669869598280598,0.2655614005720231,0.96409394901442336,0.20807249079753021,0.97811340782820866,0.14985501104078355,0.98870798300912222,0.091112810969899677,0.99584057744056775,0.03205157757165511,0.99948621620068789,-0.027121885065606685,0.99963213401255169,-0.08620037988061964,0.99627781994202647,-0.14497704234384406,0.98943501918682419,-0.20324606479774901,0.97912769195045712,-0.26080341709643418,0.96539192954510622,-0.31744756102126248,0.94827582801717125,-0.37298015597095618,0.9278393197380036,-0.42720675345517467,0.9041539635495105,-0.47993747795978653,0.87730269419944185,-0.53098769179977512,0.84737953194371352,-0.58017864163178023,0.8144892533326038,-0.62733808436249838,0.77874702433357068,-0.6723008902613169,0.7402779970753155,-0.71490962116536172,0.69921687162510526,-0.75501508175237031,0.65570742433379658,-0.79247684195109047,0.60990200440007269,-0.82716372865998222,0.56196100041667951,-0.85895428505245097,0.51205227876656578,-0.88773719586035138,0.46035059583539173,-0.91341167714662341,0.40703698609855177,-0.93588782920225999,0.35229812822534468,-0.95508695133193333,0.29632569141988568,-0.97094181742605201,0.23931566428755768,-0.98339691135432661,0.18146766857699637,-0.99240862135660779,0.12298426020055173,-0.99794539275033634,0.064070219980712786,-0.99998783841989403,0.0049318366059690408,-0.99852880670097599,-0.054223815693151128,-0.99357340642228675,-0.11318960221863705,-0.98513898901687369,-0.17175905309127651,-0.97325508776573832,-0.22972708620906024,-0.95796331438646254,-0.28689072534626076,-0.93931721332894857,-0.34304981087873881,-0.91738207428845842,-0.39800770064686608,-0.89223470359244195,-0.45157195850197263,-0.8639631552616468,-0.50355502812536757,-0.83266642268720614,-0.55377488976053346,-0.79845409200330364,-0.6020556975589384,-0.76144595836913431,-0.64822839530778853,-0.72177160650376249,-0.69213130838373282,-0.67956995694264077,-0.73361070985978472,-0.63498877960457922,-0.77252135878322936,-0.58818417637242504,-0.80872700873971803,-0.53932003449919885,-0.84210088492281199,-0.48856745275360902,-0.87252612803849605,-0.43610414231429406,-0.8998962034903325,-0.38211380451057864,-0.92411527441247898,-0.32678548758860476,-0.94509853724438586,-0.27031292475512003,-0.96277251867215907,-0.2128938558167818,-0.97707533289683624,-0.15472933479028048,-0.98795689832874656,-0.096023025907681567,-0.99537911294919823,-0.036980490482046983,-0.99931598772545771,0.022191532869602116,-0.99975373761186681,0.081285852125688993,-0.99669082981845514,0.1400955473470768,-0.99013798917803519,0.19841469521137087,-0.98011816059298629,0.25603909005754738,-0.9666664286932195,0.31276695891614897,-0.94982989498664649,0.36839966802136948,-0.92966751293230887,0.42274241833115478,-0.90624988151366226,0.47560492761993434,-0.87965899803482772,0.52680209675563672,-0.84998797100539303,0.57615465782799968,-0.81734069411910515,0.62348980185873359,0.7818314824680298,0.99761727230124764,0.068991144404324925,0.99048044398756319,0.13765351458716821,0.97862352529595531,0.20565990308593657,0.96210301984360058,0.27268622848949375,0.94099765536237645,0.33841307983367042,0.91540800852536641,0.40252723873996749,0.88545602565320991,0.46472317204376851,0.85128444158435124,0.52470448779900802,0.81305609947853252,0.58218534772077069,0.7709531747949796,0.63689182933488919,0.72517630714337655,0.68856323134327702,0.67594364414475439,0.73695331598433667,-0.22252093395631434,0.97492791218182362,0.99048044398756319,0.13765351458716821,0.96210301984360058,0.27268622848949375,0.91540800852536641,0.40252723873996749,0.85128444158435124,0.52470448779900802,0.7709531747949796,0.63689182933488919,0.67594364414475439,0.73695331598433667,0.56806474673115581,0.82298386589365635,0.44937040096716135,0.89334553378556314,0.32212044179849075,0.94669869598280587,0.18873759545291671,0.98202755565343036,0.051761352884209494,0.99865948268045612,-0.086200379880619196,0.99627781994202647,-0.90096886790241903,0.43388373911755823,0.9786235252959552,0.2056599030859366,0.9154080085253663,0.40252723873996754,0.81305609947853252,0.58218534772077069,0.67594364414475439,0.73695331598433678,0.50993260439013577,0.86021435641350075,0.32212044179849053,0.94669869598280598,0.12053668025532301,0.99270887409805397,-0.086200379880619418,0.99627781994202647,-0.28925211953656765,0.95725295055361581,-0.47993747795978653,0.87730269419944185,-0.65010409366874422,0.75984516014457881,-0.79247684195109047,0.60990200440007269,-0.90096886790241915,-0.43388373911755801,0.96210301984360058,0.27268622848949375,0.85128444158435124,0.52470448779900802,0.67594364414475439,0.73695331598433667,0.44937040096716135,0.89334553378556314,0.18873759545291671,0.98202755565343036,-0.086200379880619196,0.99627781994202647,-0.35460488704253545,0.93501624268541483,-0.59613248546922526,0.80288608143888252,-0.79247684195109025,0.60990200440007303,-0.92875624012530233,0.37069103904506756,-0.99464152469519262,0.10338393178837038,-0.98513898901687391,-0.17175905309127565,-0.22252093395631459,-0.97492791218182362,0.94099765536237645,0.33841307983367042,0.7709531747949796,0.63689182933488919,0.50993260439013577,0.86021435641350075,0.18873759545291671,0.98202755565343036,-0.15472933479028111,0.98795689832874645,-0.47993747795978653,0.87730269419944185,-0.74851074817110119,0.66312265824079519,-0.92875624012530233,0.37069103904506756,-0.99940414055107041,0.034516138969708281,-0.95211766591071423,-0.30573182735975263,-0.79247684195109036,-0.60990200440007281,-0.53932003449919885,-0.84210088492281199,0.62348980185873337,-0.78183148246802991,0.9154080085253663,0.40252723873996754,0.67594364414475439,0.73695331598433678,0.32212044179849053,0.94669869598280598,-0.086200379880619418,0.99627781994202647,-0.47993747795978653,0.87730269419944185,-0.79247684195109047,0.60990200440007269,-0.97094181742605201,0.23931566428755768,-0.9851389890168738,-0.17175905309127606,-0.83266642268720636,-0.55377488976053313,-0.53932003449919885,-0.84210088492281199,-0.15472933479028134,-0.98795689832874645,0.25603909005754738,-0.9666664286932195,0.88545602565320991,0.46472317204376856,0.56806474673115581,0.82298386589365635,0.12053668025532301,0.99270887409805397,-0.35460488704253568,0.93501624268541483,-0.74851074817110119,0.66312265824079519,-0.97094181742605201,0.23931566428755768,-0.97094181742605201,-0.23931566428755788,-0.74851074817110097,-0.6631226582407953,-0.3546048870425359,-0.93501624268541472,0.1205366802553232,-0.99270887409805397,0.56806474673115559,-0.82298386589365657,0.88545602565321002,-0.4647231720437684,0.88545602565321002,-0.4647231720437684,1,0,0.99996953958783819,0.0078051198893316596,0.99987816020702636,0.015609764284325717,0.99972586742447145,0.023413457719612077,0.99951267051797554,0.031215724787753894,0.99923858247566988,0.039016090168209783,0.99890361999522392,0.046814078656290746,0.99850780348282797,0.054609215192110018,0.99805115705195047,0.062401024889524127,0.99753370852186818,0.070189033065063328,0.99695548941597223,0.077972765266849736,0.99631653495984718,0.085751747303501297,0.9956168840791253,0.093525505273019935,0.99485657939711469,0.10129356559166208,0.9940356672322036,0.10905545502278971,0.99315419759503776,0.11681070070570036,0.99221222418547395,0.12455883018443421,0.99120980438930895,0.13229937143655646,0.99014699927478289,0.14003185290191328,0.98902387358885957,0.14775580351135981,0.98784049575328148,0.15547075271545779,0.98659693786040203,0.16317623051314215,0.98529327566879288,0.17087176748035368,0.98392958859862967,0.17855689479863665,0.98250595972685262,0.18623114428369983,0.98102247578210622,0.19389404841393854,0.97947922713945534,0.20154514035891644,0.97787630781487922,0.20918395400780526,0.97621381545954455,0.21681002399778068,0.97449185135385608,0.22442288574237254,0.97271052040128658,0.23202207545976791,0.97086993112198605,0.23960713020106503,0.9689701956461706,0.24717758787847646,0.96701142970729137,0.25473298729348004,0.9649937526349841,0.2622728681649153,0.96291728734779936,0.26979677115702427,0.96078216034571384,0.27730423790743447,0.95858850170242471,0.28479481105508297,0.95633644505742488,0.29226803426807896,0.95402612760786143,0.29972345227150388,0.95165769010017798,0.30716061087514734,0.94923127682153974,0.3145790570011765,0.94674703559104378,0.32197833871173831,0.94420511775071381,0.32935800523649139,0.94160567815627993,0.33671760700006798,0.93894887516774506,0.34405669564946184,0.9362348706397372,0.35137482408134268,0.93346382991164956,0.35867154646929394,0.9306359217975676,0.36594641829097291,0.92775131857598447,0.37319899635519133,0.92481019597930647,0.38042883882891515,0.92181273318314672,0.38763550526418095,0.91875911279540934,0.39481855662492904,0.91564952084516571,0.40197755531374929,0.91248414677132084,0.40911206519854021,0.90926318341107237,0.41622165163907859,0.90598682698816357,0.42330588151349785,0.9026552771009283,0.43036432324467422,0.89926873671013197,0.43739654682651907,0.89582741212660699,0.44440212385017502,0.89233151299868352,0.45138062753011482,0.8887812522994184,0.45833163273014188,0.8851768463136197,0.46525471598928947,0.88151851462467168,0.4721494555476185,0.87780648010115614,0.47901543137191172,0.8740409688832762,0.48585222518126203,0.87022221036907943,0.49265942047255484,0.86635043720048233,0.49943660254584177,0.86242588524909791,0.50618335852960417,0.8584487936018661,0.51289927740590613,0.85441940454648857,0.51958395003543356,0.85033796355666802,0.52623696918241958,0.84620471927715391,0.53285792953945343,0.842019923508595,0.53944642775217233,0.83778383119219912,0.54600206244383431,0.83349670039420209,0.55252443423976982,0.829158792290146,0.55901314579171257,0.82477037114896856,0.56546780180200595,0.82033170431690305,0.57188800904768511,0.81584306220119185,0.57827337640443233,0.81130471825361261,0.58462351487040465,0.80671694895381985,0.59093803758993202,0.80208003379250103,0.59721655987708544,0.79739425525435015,0.60345869923911133,0.7926598988008583,0.60966407539973444,0.7878772528529232,0.61583231032232377,0.78304660877327859,0.62196302823292315,0.7781682608487438,0.62805585564314381,0.77324250627229552,0.63411042137291751,0.76826964512496321,0.64012635657310901,0.76324998035754721,0.64610329474798678,0.75818381777216282,0.65204087177755032,0.75307146600361097,0.65793872593971259,0.74791323650057562,0.66379649793233619,0.74270944350665025,0.66961383089512272,0.73746040404119351,0.67539037043135264,0.73216643788001656,0.68112576462947561,0.72682786753590201,0.68681966408454942,0.72144501823895568,0.69247172191952555,0.71601821791679421,0.69808159380638179,0.71054779717456662,0.70364893798709804,0.70503408927481381,0.70917341529447775,0.69947743011716623,0.71465468917280939,0.69387815821788024,0.72009242569836984,0.68823661468921538,0.7254862935997678,0.68255314321865412,0.73083596427812403,0.67682809004796329,0.7361411118270913,0.67106180395210147,0.74140141305270746,0.66525463621797076,0.74661654749308592,0.65940694062301664,0.7517861974379374,0.65351907341367499,0.75691004794792605,0.64759139328366988,0.76198778687385482,0.64162426135216111,0.76701910487568281,0.63561804114174469,0.77200369544136982,0.62957309855630716,0.77694125490554966,0.62348980185873359,0.7818314824680298,0.61736852164847345,0.78667408021211582,0.61120963083896296,0.79146875312276133,0.60501350463490744,0.79621520910454024,0.59878052050942254,0.8009131589994416,0.59251105818103944,0.80556231660448518,0.58620549959057111,0.81016239868915718,0.57986422887784472,0.81471312501266513,0.57348763235829925,0.81921421834101016,0.56707609849945118,0.82366540446387615,0.56063001789722844,0.82806641221133548,0.55414978325217479,0.83241697347036814,0.54763578934552681,0.83671682320119622,0.54108843301516274,0.84096569945342936,0.53450811313142732,0.84516334338202415,0.5278952305728325,0.84930949926305199,0.5212501882016346,0.85340391450927877,0.51457339083929277,0.85744633968555284,0.50786524524180598,0.86143652852399999,0.50112616007493382,0.86537423793902701,0.49435654588929973,0.86925922804213052,0.4875568150953804,0.87309126215651078,0.48072738193838083,0.8768701068314908,0.47386866247299869,0.880595531856738,0.46698107453807763,0.8842673102762888,0.4600650377311522,0.88788521840237522,0.45312097338288571,0.89144903582905188,0.44614930453140245,0.89495854544562337,0.4391504558965158,0.89841353344987096,0.43212485385385385,0.90181378936107726,0.42507292640888444,0.90515910603284944,0.41799510317084054,0.90844927966573807,0.41089181532654828,0.91168410981965331,0.40376349561415853,0.91486339942607575,0.39661057829678426,0.91798695480006165,0.38943349913604464,0.92105458565204279,0.38223269536551846,0.92406610509941911,0.37500860566410704,0.92702132967794348,0.36776167012931027,0.92992007935289811,0.36049233025041466,0.93276217753006363,0.35320102888159788,0.93554745106647619,0.3458882102149497,0.93827573028097599,0.33855431975341144,0.94094684896454428,0.33119980428363549,0.94356064439042897,0.32382511184876678,0.94611695732405821,0.31643069172114757,0.94861563203274069,1,0,0.99987816020702636,0.015609764284325717,0.99951267051797554,0.031215724787753894,0.99890361999522392,0.046814078656290746,0.99805115705195047,0.062401024889524127,0.99695548941597223,0.077972765266849736,0.9956168840791253,0.093525505273019935,0.9940356672322036,0.10905545502278971,0.99221222418547395,0.12455883018443421,0.99014699927478289,0.14003185290191328,0.98784049575328148,0.15547075271545779,0.98529327566879288,0.17087176748035368,0.98250595972685262,0.18623114428369983,0.97947922713945534,0.20154514035891644,0.97621381545954455,0.21681002399778068,0.97271052040128658,0.23202207545976791,0.9689701956461706,0.24717758787847646,0.9649937526349841,0.2622728681649153,0.96078216034571384,0.27730423790743447,0.95633644505742488,0.29226803426807896,0.95165769010017798,0.30716061087514734,0.94674703559104378,0.32197833871173831,0.94160567815627993,0.33671760700006798,0.9362348706397372,0.35137482408134268,0.9306359217975676,0.36594641829097291,0.92481019597930647,0.38042883882891515,0.91875911279540934,0.39481855662492904,0.91248414677132084,0.40911206519854021,0.90598682698816357,0.42330588151349785,0.89926873671013197,0.43739654682651907,0.89233151299868352,0.45138062753011482,0.8851768463136197,0.46525471598928947,0.87780648010115614,0.47901543137191172,0.87022221036907943,0.49265942047255484,0.86242588524909791,0.50618335852960417,0.85441940454648857,0.51958395003543356,0.84620471927715391,0.53285792953945343,0.83778383119219912,0.54600206244383431,0.829158792290146,0.55901314579171257,0.82033170431690305,0.57188800904768511,0.81130471825361261,0.58462351487040465,0.80208003379250103,0.59721655987708544,0.7926598988008583,0.60966407539973444,0.78304660877327859,0.62196302823292315,0.77324250627229552,0.63411042137291751,0.76324998035754721,0.64610329474798678,0.75307146600361097,0.65793872593971259,0.74270944350665025,0.66961383089512272,0.73216643788001656,0.68112576462947561,0.72144501823895568,0.69247172191952555,0.71054779717456662,0.70364893798709804,0.69947743011716623,0.71465468917280939,0.68823661468921538,0.7254862935997678,0.67682809004796329,0.7361411118270913,0.66525463621797076,0.74661654749308592,0.65351907341367499,0.75691004794792605,0.64162426135216111,0.76701910487568281,0.62957309855630716,0.77694125490554966,0.61736852164847345,0.78667408021211582,0.60501350463490744,0.79621520910454024,0.59251105818103944,0.80556231660448518,0.57986422887784472,0.81471312501266513,0.56707609849945118,0.82366540446387615,0.55414978325217479,0.83241697347036814,0.54108843301516274,0.84096569945342936,0.5278952305728325,0.84930949926305199,0.51457339083929277,0.85744633968555284,0.50112616007493382,0.86537423793902701,0.4875568150953804,0.87309126215651078,0.47386866247299869,0.880595531856738,0.4600650377311522,0.88788521840237522,0.44614930453140245,0.89495854544562337,0.43212485385385385,0.90181378936107726,0.41799510317084054,0.90844927966573807,0.40376349561415853,0.91486339942607575,0.38943349913604464,0.92105458565204279,0.37500860566410704,0.92702132967794348,0.36049233025041466,0.93276217753006363,0.3458882102149497,0.93827573028097599,0.33119980428363549,0.94356064439042897,0.31643069172114757,0.94861563203274069,0.30158447145872003,0.95343946141061542,0.28666476121715928,0.95803095705530783,0.27167519662527945,0.96238900011306017,0.25661943033397372,0.96651252861774473,0.24150113112613825,0.97040053774964274,0.2263239830226641,0.97405208008029887,0.21109168438471704,0.9774662658033898,0.19580794701252194,0.98064226295155232,0.18047649524087386,0.98357929759911622,0.16510106503159228,0.98627665405069487,0.14968540306314429,0.98873367501558473,0.13423326581765554,0.9909497617679347,0.11874841866553196,0.99292437429264246,0.10323463494791607,0.9946570314169455,0.087695695057200637,0.99614731092767328,0.07213538551582431,0.9973948496741315,0.056557498053573324,0.99839934365659522,0.040965828683614432,0.99916054810038646,0.025364176777483698,0.99967827751552174,0.0097563441392581555,0.99995240574191147,-0.0058538659208676007,0.99998286598010289,-0.021462649513369569,0.99976965080755786,-0.037066203096324787,0.99931281218046131,-0.052660724402256852,0.99861246142106075,-0.068242413364670879,0.99766876919053915,-0.083807473044052172,0.99648196544742873,-0.099352110553102779,0.99505233939157389,-0.11487253798099081,0.99338023939366027,-0.13036497331638691,0.99146607291032285,-0.14582564136906326,0.98931030638485784,-0.16125077468983048,0.98691346513355949,-0.17663661448858736,0.98427613321771146,-0.19197941155026255,0.98139895330126314,-0.20727542714842073,0.97828262649422515,-0.22252093395631434,0.97492791218182362,-0.23771221695515685,0.97133562783945304,-0.25284557433939708,0.96750664883347459,-0.2679173184187737,0.9634419082079072,-0.28292377651692985,0.95914239645706323,-0.29786129186636973,0.95460916128418616,-0.31272622449953785,0.94984330734614575,-0.32751495213580506,0.94484599598425634,-0.34222387106414442,0.93961844494128133,-0.35684939702128138,0.93416192806469478,-0.37138796606510666,0.92847777499626949,-0.38583603544313533,0.92256737084807183,-0.40019008445580362,0.91643215586493731,-0.41444661531439153,0.91007362507351286,-0.42860215399336249,0.90349332791794867,-0.44265325107691206,0.89669286788233138,-0.4565964825995209,0.88967390209994668,-0.47042845088030488,0.88243814094946993,-0.48414578535096053,0.87498734763818253,-0.49774514337710363,0.86732333777231341,-0.51122321107280133,0.85944797891461355,-0.52457670410809809,0.85136319012926842,-0.53780236850934027,0.84307094151426176,-0.55089698145210242,0.83457325372130275,-0.56385735204652476,0.8258721974634341,-0.57668032211486708,0.81696989301044209,-0.58936276696109235,0.80786850967218982,-0.60190159613229177,0.79857026527000086,-0.61429375417176468,0.78907742559622096,-0.6265362213635709,0.77939230386209135,-0.6386260144683743,0.76951726013406596,-0.65056018745039679,0.75945470075871191,-0.66233583219530745,0.74920707777633111,-0.67395007921887073,0.73877688832344901,-0.68540009836618077,0.72816667402431268,-0.69668309950131269,0.71737902037154955,-0.70779633318722146,0.70641655609613496,-0.71873709135572461,0.69528195252682412,-0.72950270796740069,0.68397792293920512,-0.74009055966125192,0.67250722189452727,-0.75049806639396133,0.6608726445684715,-0.76072269206859755,0.64907702607002338,-0.77076194515260965,0.63712324075061455,-0.7806133792849631,0.62501420150370213,-0.79027459387226739,0.61275285905495613,-0.79974323467375208,0.60034220124322746,1,0,0.99972586742447145,0.023413457719612077,0.99890361999522392,0.046814078656290746,0.99753370852186818,0.070189033065063328,0.9956168840791253,0.093525505273019935,0.99315419759503776,0.11681070070570036,0.99014699927478289,0.14003185290191328,0.98659693786040203,0.16317623051314215,0.98250595972685262,0.18623114428369983,0.97787630781487922,0.20918395400780526,0.97271052040128658,0.23202207545976791,0.96701142970729137,0.25473298729348004,0.96078216034571384,0.27730423790743447,0.95402612760786143,0.29972345227150382,0.94674703559104378,0.32197833871173831,0.93894887516774506,0.34405669564946184,0.9306359217975676,0.36594641829097291,0.92181273318314672,0.38763550526418089,0.91248414677132084,0.40911206519854021,0.9026552771009283,0.43036432324467422,0.89233151299868352,0.45138062753011482,0.88151851462467168,0.47214945554761845,0.87022221036907943,0.49265942047255484,0.8584487936018661,0.51289927740590613,0.84620471927715391,0.53285792953945343,0.83349670039420209,0.55252443423976982,0.82033170431690317,0.571888009047685,0.80671694895381985,0.59093803758993202,0.7926598988008583,0.60966407539973444,0.7781682608487438,0.62805585564314381,0.76324998035754721,0.64610329474798678,0.74791323650057562,0.66379649793233619,0.73216643788001656,0.68112576462947561,0.71601821791679432,0.69808159380638168,0.69947743011716634,0.71465468917280928,0.68255314321865412,0.73083596427812403,0.66525463621797076,0.74661654749308592,0.64759139328366988,0.76198778687385482,0.62957309855630716,0.77694125490554966,0.61120963083896296,0.79146875312276133,0.59251105818103944,0.80556231660448518,0.57348763235829936,0.81921421834101005,0.5541497832521749,0.83241697347036814,0.53450811313142754,0.84516334338202403,0.51457339083929277,0.85744633968555284,0.49435654588929973,0.86925922804213052,0.47386866247299869,0.880595531856738,0.45312097338288571,0.89144903582905188,0.43212485385385385,0.90181378936107726,0.41089181532654828,0.91168410981965331,0.38943349913604464,0.92105458565204279,0.36776167012931049,0.929920079352898,0.34588821021494992,0.93827573028097588,0.32382511184876678,0.94611695732405821,0.30158447145872003,0.95343946141061542,0.27917848281287255,0.96023922786683868,0.25661943033397372,0.96651252861774473,0.23391968236433874,0.97225592423114959,0.21109168438471704,0.9774662658033898,0.18814795219086924,0.9821406966857561,0.16510106503159228,0.98627665405069487,0.14196365871195626,0.98987187029691637,0.11874841866553196,0.99292437429264246,0.095468072999410208,0.99543249245630883,0.07213538551582431,0.9973948496741315,0.048763148714202016,0.99881037005403417,0.02536417677748392,0.99967827751552174,0.0019512985465534784,0.99999809621517888,-0.021462649513369347,0.99976965080755786,-0.044864830350514862,0.9989930665413147,-0.068242413364670879,0.99766876919053915,-0.091582581441755032,0.99579748482131858,-0.11487253798099081,0.99338023939366027,-0.13809951391083816,0.99041835819899371,-0.16125077468983026,0.98691346513355949,-0.18431362728847897,0.9828674818080837,-0.20727542714842073,0.97828262649422515,-0.23012358511498635,0.97316141290837543,-0.25284557433939708,0.96750664883347459,-0.27542893714679856,0.96132143457960251,-0.29786129186636973,0.95460916128418616,-0.32013033961976178,0.94737350905275797,-0.3422238710641442,0.93961844494128144,-0.3641297730861624,0.93134822078115331,-0.38583603544313511,0.92256737084807183,-0.40733075734785257,0.9132807093760521,-0.4286021539933621,0.9034933279179489,-0.44963856301416955,0.89321059255393553,-0.47042845088030488,0.88243814094946993,-0.49096041922075651,0.87118187926435842,-0.51122321107280133,0.85944797891461355,-0.53120571705380315,0.84724287318888369,-0.55089698145210242,0.83457325372130275,-0.57028620823364873,0.82144606682270227,-0.58936276696109235,0.80786850967218982,-0.60811619862208033,0.79384802637118812,-0.6265362213635709,0.77939230386209135,-0.64461273612901293,0.76450926771378491,-0.66233583219530745,0.74920707777633111,-0.67969579260651336,0.73349412370720712,-0.69668309950131269,0.71737902037154955,-0.71328843933132535,0.70087060311892257,-0.72950270796740047,0.68397792293920545,-0.74531701569109554,0.66671024150024816,-0.76072269206859722,0.64907702607002371,-0.77571129070441969,0.63108794432605297,-0.79027459387226739,0.61275285905495613,-0.8044046170205289,0.59408182274502919,-0.8180936131499289,0.5750850720748143,-0.83133407706093632,0.55577302230068815,-0.84411874946860521,0.53615626154653651,-0.85644062098258655,0.51624554499865816,-0.86829293595013357,0.49605178900906832,-0.87966919615999017,0.47558606511044527,-0.89056316440513372,0.45485959394599418,-0.90096886790241903,0.43388373911755823,-0.91088060156724604,0.41267000095535417,-0.92029293114145994,0.39123001021273923,-0.9292006961727648,0.36957552168947733,-0.93759901284402025,0.34771840778698898,-0.94548327665086784,0.32567065199912998,-0.95284916492622052,0.30344434234205825,-0.9596926392102304,0.28105166472679455,-0.96600994746443525,0.25850489627811502,-0.97179762612887111,0.23581639860342812,-0.97705250202102034,0.21299861101533965,-0.98177169407555853,0.19006404371160748,-0.98595261492394082,0.16702527091623967,-0.98959297231296683,0.1438949239854822,-0.99269077036154263,0.12068568448248951,-0.99524431065495322,0.097410277224464034,-0.99725219317604397,0.074081463306081133,-0.99871331707280109,0.050712033103028645,-0.99962688126191068,0.027314799259486072,-0.99999238486796449,0.0039025896634018484,-0.99980962749807278,-0.019511759586594138,-0.99907870935173249,-0.042915411218772549,-0.99780003116589178,-0.06629553382653687,-0.99597429399523907,-0.089639308903433371,-0.99360249882784013,-0.11293393787109285,-0.99068594603633076,-0.1361666490962464,-0.98722623466496773,-0.15932470489296385,-0.98322526155292866,-0.18239540850628647,-0.97868522029434113,-0.20536611107341182,-0.97360860003561167,-0.22822421855862798,-0.96799818411071314,-0.25095719865818122,-0.96185704851518039,-0.2735525876713028,-0.95518856021964815,-0.29599799733362325,-0.94799637532385916,-0.31828112160922251,-0.9402844370521517,-0.34038974343760453,-0.93205697359152728,-0.36231174143188205,-0.92331849577348291,-0.38403509652451412,-0.91407379460087945,-0.40554789855693896,-0.90432793862120209,-0.42683835280950017,-0.89408627114765127,-0.44789478646808178,-0.88335440732959192,-0.46870565502390243,-0.87213823107396082,-0.48925954860297055,-0.86044389181932768,-0.50954519822171729,-0.84827780116436979,-0.52955148196539104,-0.83564662935261846,-0.54926743108581222,-0.82255730161539464,-0.56868223601515877,1,0,0.99951267051797554,0.031215724787753894,0.99805115705195047,0.062401024889524127,0.9956168840791253,0.093525505273019935,0.99221222418547395,0.12455883018443421,0.98784049575328148,0.15547075271545779,0.98250595972685262,0.18623114428369983,0.97621381545954455,0.21681002399778068,0.9689701956461706,0.24717758787847646,0.96078216034571384,0.27730423790743447,0.95165769010017798,0.30716061087514734,0.94160567815627993,0.33671760700006798,0.9306359217975676,0.36594641829097291,0.91875911279540934,0.39481855662492904,0.90598682698816357,0.42330588151349785,0.89233151299868352,0.45138062753011482,0.87780648010115614,0.47901543137191172,0.86242588524909791,0.50618335852960417,0.84620471927715391,0.53285792953945343,0.829158792290146,0.55901314579171257,0.81130471825361261,0.58462351487040465,0.7926598988008583,0.60966407539973444,0.77324250627229552,0.63411042137291751,0.75307146600361097,0.65793872593971259,0.73216643788001656,0.68112576462947561,0.71054779717456662,0.70364893798709804,0.68823661468921538,0.7254862935997678,0.66525463621797076,0.74661654749308592,0.64162426135216111,0.76701910487568281,0.61736852164847345,0.78667408021211582,0.59251105818103944,0.80556231660448518,0.56707609849945118,0.82366540446387615,0.54108843301516274,0.84096569945342936,0.51457339083929277,0.85744633968555284,0.4875568150953804,0.87309126215651078,0.4600650377311522,0.88788521840237522,0.43212485385385385,0.90181378936107726,0.40376349561415853,0.91486339942607575,0.37500860566410704,0.92702132967794348,0.3458882102149497,0.93827573028097599,0.31643069172114757,0.94861563203274069,0.28666476121715928,0.95803095705530783,0.25661943033397372,0.96651252861774473,0.2263239830226641,0.97405208008029887,0.19580794701252194,0.98064226295155232,0.16510106503159228,0.98627665405069487,0.13423326581765554,0.9909497617679347,0.10323463494791607,0.9946570314169455,0.07213538551582431,0.9973948496741315,0.040965828683614432,0.99916054810038646,0.0097563441392581555,0.99995240574191147,-0.021462649513369569,0.99976965080755786,-0.052660724402256852,0.99861246142106075,-0.083807473044052172,0.99648196544742873,-0.11487253798099081,0.99338023939366027,-0.14582564136906326,0.98931030638485784,-0.17663661448858736,0.98427613321771146,-0.20727542714842073,0.97828262649422515,-0.23771221695515685,0.97133562783945304,-0.2679173184187737,0.9634419082079072,-0.29786129186636973,0.95460916128418616,-0.32751495213580506,0.94484599598425634,-0.35684939702128138,0.93416192806469478,-0.38583603544313533,0.92256737084807183,-0.41444661531439153,0.91007362507351286,-0.44265325107691206,0.89669286788233138,-0.47042845088030488,0.88243814094946993,-0.49774514337710363,0.86732333777231341,-0.52457670410809809,0.85136319012926842,-0.55089698145210242,0.83457325372130275,-0.57668032211486708,0.81696989301044209,-0.60190159613229177,0.79857026527000086,-0.6265362213635709,0.77939230386209135,-0.65056018745039679,0.75945470075871191,-0.67395007921887073,0.73877688832344901,-0.69668309950131269,0.71737902037154955,-0.71873709135572461,0.69528195252682412,-0.74009055966125192,0.67250722189452727,-0.76072269206859755,0.64907702607002338,-0.7806133792849631,0.62501420150370213,-0.79974323467375208,0.60034220124322746,-0.8180936131499289,0.5750850720748143,-0.83564662935261813,0.54926743108581277,-0.85238517507723155,0.52291444167144341,-0.86829293595013357,0.49605178900906832,-0.88335440732959158,0.46870565502390305,-0.8975549094175137,0.44090269287056838,-0.91088060156724604,0.41267000095535417,-0.92331849577348279,0.38403509652451434,-0.93485646933114164,0.35502588884433794,-0.94548327665086784,0.32567065199912998,-0.95518856021964804,0.29599799733362347,-0.96396286069585324,0.26603684556667523,-0.97179762612887111,0.23581639860342812,-0.97868522029434102,0.20536611107341252,-0.98461893013686896,0.17471566162232732,-0.98959297231296683,0.1438949239854822,-0.99360249882784013,0.11293393787109353,-0.99664360176052946,0.081862879681813452,-0.99871331707280109,0.050712033103028201,-0.99980962749807267,0.019511759586594384,-0.99993146450756099,-0.011707531241224875,-0.99907870935173249,-0.042915411218772993,-0.99725219317604397,-0.074081463306080897,-0.99445369621085911,-0.10517531123110767,-0.99068594603633076,-0.1361666490962464,-0.98595261492394093,-0.167025270916239,-0.9802583162572881,-0.19772110005871041,-0.97360860003561167,-0.22822421855862798,-0.96600994746443547,-0.25850489627811435,-0.95746976463860267,-0.28853361988319276,-0.94799637532385905,-0.31828112160922295,-0.93759901284402036,-0.34771840778698876,-0.92628781108162983,-0.37681678710164018,-0.91407379460087945,-0.40554789855693896,-0.90096886790241915,-0.43388373911755801,-0.88698580382052883,-0.4617966910024911,-0.87213823107396082,-0.48925954860297055,-0.85644062098258689,-0.5162455449986576,-0.83990827336279672,-0.54272837804626139,-0.82255730161539464,-0.56868223601515877,-0.80440461702052934,-0.59408182274502863,-0.78546791225496271,-0.61890238230098149,-0.76576564414774373,-0.64311972310215393,-0.74531701569109576,-0.66671024150024794,-0.7241419573240464,-0.68965094478504052,-0.70226110750704729,-0.71191947359443364,-0.67969579260651347,-0.7334941237072069,-0.65646800610888956,-0.75435386719723185,-0.63260038718449996,-0.77447837292852839,-0.60811619862208055,-0.7938480263711879,-0.58303930415549077,-0.81244394871885228,-0.55739414520471309,-0.83024801528911052,-0.53120571705380337,-0.84724287318888358,-0.50449954448901302,-0.86341195822757655,-0.47730165692082804,-0.87873951106151593,-0.44963856301416971,-0.89321059255393542,-0.42153722485148765,-0.90681109833553886,-0.39302503165392377,-0.91952777255145057,-0.36412977308616284,-0.93134822078115309,-0.33487961217098638,-0.9422609221188204,-0.30530305783993028,-0.95225524040227161,-0.275428937146799,-0.96132143457960229,-0.24528636717111912,-0.96945066820338777,-0.21490472663891694,-0.97663501804320552,-0.18431362728847966,-0.98286748180808348,-0.15354288500900931,-0.9881419849713452,-0.12262249078029902,-0.99245338669120142,-0.091582581441755712,-0.99579748482131858,-0.060453410319259465,-0.99817102000647728,-0.029265317738488224,-0.99957167885933285,0.0019512985465525673,-0.99999809621517888,0.033166012980974317,-0.99944985646251705,0.064348401863541502,-0.99792749394813662,0.095468072999410181,-0.99543249245630883,0.12649469532214952,-0.99196728376260301,0.1573980284561885,-0.98753524526373482,0.18814795219086902,-0.9821406966857561,0.21871449583737929,-0.97578889587379558,0.24906786743995424,-0.96848603366745223,0.27917848281287228,-0.9602392278668388,0.62348980185873359,0.7818314824680298,0.99923858247566988,0.039016090168209783,0.99695548941597223,0.077972765266849736,0.99315419759503776,0.11681070070570036,0.98784049575328148,0.15547075271545779,0.98102247578210622,0.19389404841393854,0.97271052040128658,0.23202207545976791,0.96291728734779936,0.26979677115702427,0.95165769010017798,0.30716061087514734,0.93894887516774506,0.34405669564946184,0.92481019597930647,0.38042883882891515,0.90926318341107237,0.41622165163907865,0.89233151299868352,0.45138062753011482,0.8740409688832762,0.48585222518126203,0.85441940454648857,0.51958395003543356,0.83349670039420209,0.55252443423976993,0.81130471825361261,0.58462351487040465,0.7878772528529232,0.61583231032232377,0.76324998035754721,0.64610329474798678,0.73746040404119351,0.67539037043135264,0.71054779717456662,0.70364893798709804,0.68255314321865412,0.73083596427812403,0.65351907341367499,0.75691004794792605,-0.22252093395631434,0.97492791218182362,0.99695548941597223,0.077972765266849736,0.98784049575328148,0.15547075271545779,0.97271052040128658,0.23202207545976791,0.95165769010017798,0.30716061087514734,0.92481019597930647,0.38042883882891515,0.89233151299868352,0.45138062753011482,0.85441940454648857,0.51958395003543356,0.81130471825361261,0.58462351487040465,0.76324998035754721,0.64610329474798678,0.71054779717456662,0.70364893798709804,0.65351907341367499,0.75691004794792605,0.59251105818103944,0.80556231660448518,0.5278952305728325,0.84930949926305199,0.4600650377311522,0.88788521840237522,0.38943349913604441,0.9210545856520429,0.31643069172114757,0.94861563203274069,0.24150113112613825,0.97040053774964274,0.16510106503159228,0.98627665405069487,0.087695695057200637,0.99614731092767328,0.0097563441392581555,0.99995240574191147,-0.068242413364670879,0.99766876919053915,-0.14582564136906348,0.98931030638485784,-0.90096886790241903,0.43388373911755823,0.99315419759503776,0.11681070070570036,0.97271052040128658,0.23202207545976791,0.93894887516774506,0.34405669564946184,0.89233151299868352,0.45138062753011482,0.83349670039420209,0.55252443423976982,0.76324998035754721,0.64610329474798678,0.68255314321865412,0.73083596427812403,0.59251105818103944,0.80556231660448518,0.49435654588929973,0.86925922804213052,0.38943349913604464,0.92105458565204279,0.27917848281287255,0.96023922786683868,0.16510106503159228,0.98627665405069487,0.048763148714202016,0.99881037005403417,-0.068242413364670879,0.99766876919053915,-0.18431362728847897,0.9828674818080837,-0.29786129186636973,0.95460916128418616,-0.40733075734785257,0.9132807093760521,-0.51122321107280133,0.85944797891461355,-0.60811619862208033,0.79384802637118812,-0.69668309950131269,0.71737902037154955,-0.77571129070441969,0.63108794432605297,-0.84411874946860521,0.53615626154653651,-0.90096886790241915,-0.43388373911755801,0.98784049575328148,0.15547075271545779,0.95165769010017798,0.30716061087514734,0.89233151299868352,0.45138062753011482,0.81130471825361261,0.58462351487040465,0.71054779717456662,0.70364893798709804,0.59251105818103944,0.80556231660448518,0.4600650377311522,0.88788521840237522,0.31643069172114757,0.94861563203274069,0.16510106503159228,0.98627665405069487,0.0097563441392581555,0.99995240574191147,-0.14582564136906348,0.98931030638485784,-0.29786129186636973,0.95460916128418616,-0.44265325107691206,0.89669286788233138,-0.57668032211486708,0.81696989301044209,-0.69668309950131302,0.71737902037154921,-0.79974323467375208,0.60034220124322746,-0.88335440732959158,0.46870565502390305,-0.94548327665086784,0.32567065199912998,-0.98461893013686896,0.17471566162232732,-0.99980962749807267,0.019511759586594384,-0.99068594603633076,-0.1361666490962464,-0.95746976463860256,-0.28853361988319315,-0.22252093395631459,-0.97492791218182362,0.98102247578210622,0.19389404841393854,0.92481019597930647,0.38042883882891515,0.83349670039420209,0.55252443423976993,0.71054779717456662,0.70364893798709804,0.56063001789722844,0.82806641221133548,0.38943349913604441,0.9210545856520429,0.20345601305263375,0.97908408768232291,0.0097563441392581555,0.99995240574191147,-0.18431362728847919,0.98286748180808359,-0.37138796606510666,0.92847777499626949,-0.54436625660126459,0.83884764926291955,-0.69668309950131302,0.71737902037154921,-0.82255730161539453,0.56868223601515899,-0.91721130150545305,0.3984010898462414,-0.97705250202102045,0.21299861101533921,-0.99980962749807267,0.019511759586594384,-0.98461893013686896,-0.17471566162232707,-0.93205697359152717,-0.36231174143188244,-0.84411874946860543,-0.53615626154653628,-0.7241419573240464,-0.68965094478504052,-0.57668032211486719,-0.81696989301044198,-0.4073307573478524,-0.9132807093760521,0.62348980185873337,-0.78183148246802991,0.97271052040128658,0.23202207545976791,0.89233151299868352,0.45138062753011482,0.76324998035754721,0.64610329474798678,0.59251105818103944,0.80556231660448518,0.38943349913604464,0.92105458565204279,0.16510106503159228,0.98627665405069487,-0.068242413364670879,0.99766876919053915,-0.29786129186636973,0.95460916128418616,-0.51122321107280133,0.85944797891461355,-0.69668309950131269,0.71737902037154955,-0.84411874946860521,0.53615626154653651,-0.94548327665086784,0.32567065199912998,-0.99524431065495322,0.097410277224464034,-0.99068594603633076,-0.1361666490962464,-0.93205697359152728,-0.36231174143188205,-0.82255730161539464,-0.56868223601515877,-0.66816330823684966,-0.74401464604266265,-0.47730165692082804,-0.87873951106151593,-0.26038937794686107,-0.96550368816097576,-0.029265317738488224,-0.99957167885933285,0.20345601305263331,-0.97908408768232302,0.425072926408884,-0.90515910603284966,0.96291728734779936,0.26979677115702427,0.85441940454648857,0.51958395003543356,0.68255314321865412,0.73083596427812403,0.4600650377311522,0.88788521840237522,0.20345601305263375,0.97908408768232291,-0.068242413364670879,0.99766876919053915,-0.33487961217098616,0.94226092211882051,-0.57668032211486708,0.81696989301044209,-0.77571129070441969,0.63108794432605297,-0.91721130150545305,0.3984010898462414,-0.99068594603633076,0.13616664909624665,-0.99068594603633076,-0.1361666490962464,-0.91721130150545316,-0.39840108984624117,-0.7757112907044198,-0.63108794432605275,-0.57668032211486719,-0.81696989301044198,-0.33487961217098638,-0.9422609221188204,-0.06824241336467135,-0.99766876919053915,0.20345601305263331,-0.97908408768232302,0.46006503773115159,-0.88788521840237555,0.68255314321865423,-0.73083596427812403,0.85441940454648857,-0.51958395003543356,0.96291728734779924,-0.26979677115702438,0.96291728734779924,-0.26979677115702438,1,0,0.99993077830706578,0.01176599312534808,0.99972312281154851,0.02353035732676978,0.9993770622619782,0.035291463905852472,0.99889264456814908,0.047047684615179775,0.99826993679448672,0.05879739188375168,0.99750902515076378,0.070538959042310959,0.99661001498016466,0.082270760548544791,0.99557303074470116,0.093991172212130283,0.99439821600798195,0.10569857141959299,0.99308573341533701,0.11739133735894691,0.99163576467130043,0.12906785124408524,0.99004851051445431,0.14072649653889052,0.98832419068963862,0.15236565918103356,0.98646304391752804,0.16398372780542952,0.98446532786158336,0.17557909396732074,0.98233131909237936,0.18715015236495539,0.98006131304931554,0.19869530106183081,0.9776556239997144,0.21021294170847107,0.97511458499531334,0.22170147976370788,0.9724385478261558,0.2331593247154341,0.96962788297188818,0.24458489030079991,0.96668297955046933,0.25597659472582024,0.96360424526430011,0.26733286088436353,0.96039210634377925,0.27865211657649214,0.95704700748829474,0.28993279472612249,0.95356941180465826,0.3011733335979766,0.9499598007429908,0.31237217701379411,0.94621867403006965,0.32352777456777476,0.94234654960014363,0.33463858184122169,0.93834396352322946,0.34570306061635631,0.93421146993089599,0.35671967908927404,0.92994964093954802,0.36768691208201276,0.92555906657122111,0.37860324125370332,0.92104035467189682,0.38946715531077392,0.91639413082735022,0.40027715021617871,0.91162103827654184,0.41103172939762178,0.90672173782256549,0.42172940395474767,0.9016969077411644,0.43236869286526974,0.89654724368682848,0.44294812319000798,0.89127345859648555,0.45346623027680771,0.88587628259079965,0.46392155796331092,0.88035646287309133,0.47431265877855222,0.87471476362589162,0.48463809414335202,0.86895196590514645,0.49489643456947768,0.86306886753208412,0.50508625985754729,0.85706628298276299,0.51520615929364655,0.85094504327531206,0.525254731844633,0.84470599585488204,0.5352305863520993,0.83835000447632246,0.5451323417249706,0.83187794908460022,0.55495862713070709,0.82529072569297746,0.56470808218508672,0.81858924625896379,0.57437935714054134,0.81177443855806253,0.58397111307302041,0.80484724605532576,0.59348202206735623,0.79780862777473815,0.60291076740110494,0.79065955816644617,0.61225604372683828,0.78340102697185254,0.62151655725285937,0.77603403908659196,0.63069102592232107,0.76855961442141096,0.63977817959071726,0.76097878776096783,0.64877676020172603,0.75329260862057279,0.65768552196137975,0.74550214110089064,0.66650323151053648,0.73760846374062228,0.67522866809563054,0.72961266936718838,0.68386062373767786,0.72151586494543474,0.6923979033995129,0.71331917142438017,0.70083932515123293,0.70502372358202881,0.70918372033382926,0.69663066986826705,0.71742993372097985,0.68814117224586879,0.72557682367898269,0.67955640602962941,0.73362326232480757,0.6708775597236506,0.74156813568224433,0.66210583485680041,0.74941034383612515,0.65324244581636937,0.75714880108460036,0.64428861967994644,0.76478243608944707,0.63524559604553854,0.77231019202438889,0.62611462685995611,0.77973102672140604,0.61689697624548923,0.78704391281501707,0.60759392032489901,0.79424783788451092,0.59820674704474586,0.8013418045941092,0.58873675599708242,0.80832483083104145,0.57918525823953348,0.815195949841512,0.56955357611378876,0.82195421036454008,0.5598430430625333,0.82859867676365651,0.55005500344484137,0.83512842915643559,0.54019081235005861,0.84154256354184709,0.53025183541019894,0.8478401919254096,0.52023944861088223,0.85402044244212627,0.5101550381008374,0.86008245947719053,0.50000000000000011,0.8660254037844386,0.48977574020622838,0.87184845260253863,0.47948367420066645,0.87755079976889605,0.46912522685177932,0.88313165583126196,0.45870183221809069,0.88859024815702692,0.44821493334964546,0.89392582104018725,0.43766598208823071,0.89913763580596739,0.42705643886637601,0.90422497091308496,0.41638777250516767,0.90918712205364227,0.4056614600108997,0.9140234022506345,0.39487898637059127,0.91873314195305611,0.38404184434640154,0.92331568912859607,0.37315153426896508,0.92777040935390764,0.36220956382968261,0.93209668590243955,0.35121744787198944,0.93629391982981836,0.34017670818163692,0.94036153005676781,0.32908887327601,0.94429895344955572,0.31795547819251524,0.94810564489795601,0.30677806427606386,0.95178107739071549,0.29555817896568415,0.95532474208851548,0.28429737558028706,0.95873614839441679,0.27299721310362135,0.96201482402177985,0.2616592559684407,0.96516031505964961,0.25028507383991994,0.96817218603559663,0.2388762413983446,0.97105001997600504,0.22743433812110633,0.97379341846380041,0.21596094806403604,0.97640200169360714,0.20445765964210019,0.97887540852433064,0.19292606540949694,0.98121329652915457,0.18136776183917588,0.98341534204294778,0.16978434910181864,0.98548124020707351,0.15817743084430405,0.98741070501159522,0.14654861396769558,0.98920346933487213,0.13489950840477491,0.99085928498054154,0.12323172689715887,0.99237792271187897,0.11154688477202455,0.99375917228353505,0.099846599718479548,0.9950028424706423,0.088132491563601825,0.99610876109528901,0.076406182048187235,0.99707677505035652,0.06466929460222838,0.99790675032071519,0.052923454120163069,0.99859857200177837,0.041170286735917723,0.99915214431541022,0.029411419597779261,0.99956739062318523,0.017648480643128704,0.99984425343699856,0.0058830983730622562,0.99998269442702503,-0.0058830983730621339,0.99998269442702503,-0.017648480643128583,0.99984425343699856,-0.02941141959777914,0.99956739062318523,-0.041170286735917598,0.99915214431541022,-0.052923454120162944,0.99859857200177837,-0.064669294602228256,0.99790675032071519,-0.076406182048186888,0.99707677505035652,-0.0881324915636017,0.99610876109528912,-0.099846599718479201,0.9950028424706423,-0.11154688477202444,0.99375917228353505,-0.12323172689715853,0.99237792271187897,-0.13489950840477477,0.99085928498054154,-0.14654861396769547,0.98920346933487213,-0.15817743084430391,0.98741070501159522,-0.16978434910181853,0.98548124020707351,-0.18136776183917575,0.98341534204294778,-0.19292606540949681,0.98121329652915457,-0.20445765964210005,0.97887540852433064,-0.21596094806403593,0.97640200169360714,-0.22743433812110622,0.97379341846380041,-0.23887624139834449,0.97105001997600504,-0.25028507383991977,0.96817218603559663,-0.26165925596844058,0.96516031505964961,-0.27299721310362102,0.96201482402177985,-0.28429737558028695,0.95873614839441679,-0.29555817896568382,0.95532474208851559,-0.30677806427606374,0.9517810773907156,-0.31795547819251513,0.94810564489795601,-0.32908887327600989,0.94429895344955583,-0.34017670818163681,0.94036153005676781,-0.35121744787198933,0.93629391982981847,-0.3622095638296825,0.93209668590243955,-0.37315153426896497,0.92777040935390775,-0.38404184434640143,0.92331568912859618,-0.39487898637059116,0.91873314195305622,-0.40566146001089959,0.91402340225063461,-0.41638777250516756,0.90918712205364238,-0.42705643886637568,0.90422497091308507,-0.4376659820882306,0.89913763580596751,-0.44821493334964535,0.89392582104018725,-0.45870183221809036,0.88859024815702703,-0.46912522685177899,0.88313165583126219,-0.47948367420066634,0.87755079976889616,-0.48977574020622827,0.87184845260253874,-0.49999999999999983,0.86602540378443871,-0.51015503810083751,0.86008245947719053,-0.52023944861088223,0.85402044244212638,-0.53025183541019882,0.8478401919254096,-0.54019081235005828,0.84154256354184731,-0.55005500344484137,0.83512842915643559,-0.55984304306253319,0.82859867676365651,-0.56955357611378854,0.82195421036454019,-0.57918525823953315,0.81519594984151222,-0.58873675599708242,0.80832483083104156,-0.59820674704474575,0.80134180459410931,-0.60759392032489878,0.79424783788451103,-0.616896976245489,0.78704391281501729,-0.62611462685995611,0.77973102672140604,-0.63524559604553854,0.772310192024389,-0.64428861967994633,0.76478243608944729,-0.65324244581636948,0.75714880108460025,-0.66210583485680041,0.74941034383612515,-0.67087755972365049,0.74156813568224456,-0.67955640602962919,0.73362326232480779,-0.68814117224586879,0.72557682367898269,-0.69663066986826694,0.71742993372097996,-0.70502372358202869,0.70918372033382948,-0.71331917142437995,0.70083932515123326,-0.72151586494543474,0.6923979033995129,-0.72961266936718827,0.68386062373767798,-0.73760846374062217,0.67522866809563065,-0.74550214110089041,0.6665032315105367,-0.75329260862057279,0.65768552196137975,-0.76097878776096772,0.64877676020172614,-0.76855961442141085,0.63977817959071748,-0.77603403908659196,0.63069102592232107,-0.78340102697185243,0.62151655725285937,-0.79065955816644617,0.61225604372683828,-0.79780862777473793,0.60291076740110527,-0.80484724605532576,0.59348202206735623,-0.81177443855806242,0.58397111307302052,-0.81858924625896368,0.57437935714054156,-0.82529072569297723,0.56470808218508706,-0.83187794908460022,0.5549586271307072,-0.83835000447632235,0.54513234172497071,-0.84470599585488193,0.53523058635209952,-0.85094504327531195,0.52525473184463323,-0.85706628298276299,0.51520615929364655,-0.86306886753208412,0.5050862598575474,-0.86895196590514623,0.49489643456947791,-0.87471476362589173,0.48463809414335196,-0.88035646287309133,0.47431265877855228,-0.88587628259079965,0.46392155796331108,-0.89127345859648544,0.45346623027680799,-0.89654724368682859,0.44294812319000798,-0.9016969077411644,0.4323686928652698,-0.90672173782256549,0.42172940395474784,-0.91162103827654173,0.41103172939762206,-0.91639413082735022,0.40027715021617871,-0.92104035467189682,0.38946715531077403,-0.925559066571221,0.37860324125370354,-0.92994964093954791,0.3676869120820131,-0.93421146993089599,0.3567196790892741,-0.93834396352322946,0.34570306061635642,-0.94234654960014352,0.33463858184122192,-0.94621867403006954,0.32352777456777509,-0.9499598007429908,0.31237217701379416,-0.95356941180465815,0.30117333359797677,-0.95704700748829463,0.28993279472612277,-0.96039210634377925,0.27865211657649214,-0.96360424526430011,0.26733286088436364,-0.96668297955046933,0.25597659472582041,-0.96962788297188807,0.24458489030080022,-0.9724385478261558,0.23315932471543407,-0.97511458499531334,0.22170147976370796,-0.9776556239997144,0.2102129417084713,-0.98006131304931543,0.19869530106183114,-0.98233131909237936,0.18715015236495539,-0.98446532786158336,0.17557909396732085,-0.98646304391752793,0.16398372780542975,-0.9883241906896385,0.15236565918103392,-0.99004851051445431,0.14072649653889058,-0.99163576467130043,0.12906785124408537,-0.99308573341533701,0.11739133735894719,-0.99439821600798195,0.10569857141959295,-0.99557303074470116,0.093991172212130353,-0.99661001498016466,0.082270760548544972,-0.99750902515076378,0.070538959042311264,-0.99826993679448672,0.058797391883751653,-0.99889264456814908,0.047047684615179865,-0.9993770622619782,0.03529146390585268,-0.99972312281154851,0.023530357326770113,-0.99993077830706578,0.011765993125348085,1,0,0.99972312281154851,0.02353035732676978,0.99889264456814908,0.047047684615179775,0.99750902515076378,0.070538959042310959,0.99557303074470116,0.093991172212130283,0.99308573341533701,0.11739133735894691,0.99004851051445431,0.14072649653889052,0.98646304391752804,0.16398372780542952,0.98233131909237936,0.18715015236495539,0.9776556239997144,0.21021294170847107,0.9724385478261558,0.2331593247154341,0.96668297955046933,0.25597659472582024,0.96039210634377925,0.27865211657649214,0.95356941180465826,0.3011733335979766,0.94621867403006965,0.32352777456777476,0.93834396352322946,0.34570306061635631,0.92994964093954802,0.36768691208201276,0.92104035467189682,0.38946715531077392,0.91162103827654184,0.41103172939762178,0.9016969077411644,0.43236869286526974,0.89127345859648555,0.45346623027680771,0.88035646287309133,0.47431265877855222,0.86895196590514645,0.49489643456947768,0.85706628298276299,0.51520615929364655,0.84470599585488204,0.5352305863520993,0.83187794908460022,0.55495862713070709,0.81858924625896379,0.57437935714054134,0.80484724605532576,0.59348202206735623,0.79065955816644617,0.61225604372683828,0.77603403908659196,0.63069102592232107,0.76097878776096783,0.64877676020172603,0.74550214110089064,0.66650323151053648,0.72961266936718838,0.68386062373767786,0.71331917142438017,0.70083932515123293,0.69663066986826705,0.71742993372097985,0.67955640602962941,0.73362326232480757,0.66210583485680041,0.74941034383612515,0.64428861967994644,0.76478243608944707,0.62611462685995611,0.77973102672140604,0.60759392032489901,0.79424783788451092,0.58873675599708242,0.80832483083104145,0.56955357611378876,0.82195421036454008,0.55005500344484137,0.83512842915643559,0.53025183541019894,0.8478401919254096,0.5101550381008374,0.86008245947719053,0.48977574020622838,0.87184845260253863,0.46912522685177932,0.88313165583126196,0.44821493334964546,0.89392582104018725,0.42705643886637601,0.90422497091308496,0.4056614600108997,0.9140234022506345,0.38404184434640154,0.92331568912859607,0.36220956382968261,0.93209668590243955,0.34017670818163692,0.94036153005676781,0.31795547819251524,0.94810564489795601,0.29555817896568415,0.95532474208851548,0.27299721310362135,0.96201482402177985,0.25028507383991994,0.96817218603559663,0.22743433812110633,0.97379341846380041,0.20445765964210019,0.97887540852433064,0.18136776183917588,0.98341534204294778,0.15817743084430405,0.98741070501159522,0.13489950840477491,0.99085928498054154,0.11154688477202455,0.99375917228353505,0.088132491563601825,0.99610876109528901,0.06466929460222838,0.99790675032071519,0.041170286735917723,0.99915214431541022,0.017648480643128704,0.99984425343699856,-0.0058830983730621339,0.99998269442702503,-0.02941141959777914,0.99956739062318523,-0.052923454120162944,0.99859857200177837,-0.076406182048186888,0.99707677505035652,-0.099846599718479201,0.9950028424706423,-0.12323172689715853,0.99237792271187897,-0.14654861396769547,0.98920346933487213,-0.16978434910181853,0.98548124020707351,-0.19292606540949681,0.98121329652915457,-0.21596094806403593,0.97640200169360714,-0.23887624139834449,0.97105001997600504,-0.26165925596844058,0.96516031505964961,-0.28429737558028695,0.95873614839441679,-0.30677806427606374,0.9517810773907156,-0.32908887327600989,0.94429895344955583,-0.35121744787198933,0.93629391982981847,-0.37315153426896497,0.92777040935390775,-0.39487898637059116,0.91873314195305622,-0.41638777250516756,0.90918712205364238,-0.4376659820882306,0.89913763580596751,-0.45870183221809036,0.88859024815702703,-0.47948367420066634,0.87755079976889616,1,0,0.99889264456814908,0.047047684615179775,0.99557303074470116,0.093991172212130283,0.99004851051445431,0.14072649653889052,0.98233131909237936,0.18715015236495539,0.9724385478261558,0.2331593247154341,0.96039210634377925,0.27865211657649214,0.94621867403006965,0.32352777456777476,0.92994964093954802,0.36768691208201276,0.91162103827654184,0.41103172939762178,0.89127345859648555,0.45346623027680771,0.86895196590514645,0.49489643456947768,0.84470599585488204,0.5352305863520993,0.81858924625896379,0.57437935714054134,0.79065955816644617,0.61225604372683828,0.76097878776096783,0.64877676020172603,0.72961266936718838,0.68386062373767786,0.69663066986826705,0.71742993372097985,0.66210583485680041,0.74941034383612515,0.62611462685995611,0.77973102672140604,0.58873675599708242,0.80832483083104145,0.55005500344484137,0.83512842915643559,0.5101550381008374,0.86008245947719053,0.46912522685177932,0.88313165583126196,0.42705643886637601,0.90422497091308496,0.38404184434640154,0.92331568912859607,0.34017670818163692,0.94036153005676781,0.29555817896568415,0.95532474208851548,0.25028507383991994,0.96817218603559663,0.20445765964210019,0.97887540852433064,0.15817743084430405,0.98741070501159522,0.11154688477202455,0.99375917228353505,0.06466929460222838,0.99790675032071519,0.017648480643128704,0.99984425343699856,-0.02941141959777914,0.99956739062318523,-0.076406182048186888,0.99707677505035652,-0.12323172689715853,0.99237792271187897,-0.16978434910181853,0.98548124020707351,-0.21596094806403593,0.97640200169360714,-0.26165925596844058,0.96516031505964961,-0.30677806427606374,0.9517810773907156,-0.35121744787198933,0.93629391982981847,-0.39487898637059116,0.91873314195305622,-0.4376659820882306,0.89913763580596751,-0.47948367420066634,0.87755079976889616,-0.52023944861088223,0.85402044244212638,-0.55984304306253319,0.82859867676365651,-0.59820674704474575,0.80134180459410931,-0.63524559604553854,0.772310192024389,-0.67087755972365049,0.74156813568224456,-0.70502372358202869,0.70918372033382948,-0.73760846374062217,0.67522866809563065,-0.76855961442141085,0.63977817959071748,-0.79780862777473793,0.60291076740110527,-0.82529072569297723,0.56470808218508706,-0.85094504327531195,0.52525473184463323,-0.87471476362589173,0.48463809414335196,-0.89654724368682859,0.44294812319000798,-0.91639413082735022,0.40027715021617871,-0.93421146993089599,0.3567196790892741,-0.9499598007429908,0.31237217701379416,-0.96360424526430011,0.26733286088436364,-0.97511458499531334,0.22170147976370796,-0.98446532786158336,0.17557909396732085,-0.99163576467130043,0.12906785124408537,-0.99661001498016466,0.082270760548544972,-0.9993770622619782,0.03529146390585268,-0.99993077830706578,-0.01176599312534784,-0.99826993679448672,-0.05879739188375141,-0.99439821600798206,-0.1056985714195927,-0.98832419068963862,-0.15236565918103326,-0.98006131304931554,-0.19869530106183048,-0.96962788297188829,-0.24458489030079955,-0.95704700748829474,-0.28993279472612254,-0.94234654960014363,-0.33463858184122169,-0.92555906657122111,-0.37860324125370332,-0.9067217378225656,-0.42172940395474762,-0.88587628259079976,-0.46392155796331086,-0.86306886753208423,-0.50508625985754718,-0.83835000447632246,-0.54513234172497049,-0.81177443855806264,-0.5839711130730203,-0.78340102697185265,-0.62151655725285915,-0.7532926086205729,-0.65768552196137964,-0.72151586494543496,-0.69239790339951268,-0.68814117224586902,-0.72557682367898246,-0.65324244581636959,-0.75714880108460014,-0.61689697624548923,-0.78704391281501718,-0.57918525823953371,-0.81519594984151178,-0.5401908123500585,-0.8415425635418472,0.99750902515076378,0.070538959042310959,0.99004851051445431,0.14072649653889052,0.9776556239997144,0.21021294170847107,0.96039210634377925,0.27865211657649214,0.93834396352322946,0.34570306061635631,0.91162103827654184,0.41103172939762178,0.88035646287309133,0.47431265877855222,0.84470599585488204,0.5352305863520993,0.80484724605532576,0.59348202206735623,0.76097878776096783,0.64877676020172603,0.71331917142438017,0.70083932515123293,0.66210583485680041,0.74941034383612515,0.60759392032489901,0.79424783788451092,0.55005500344484137,0.83512842915643559,0.48977574020622838,0.87184845260253863,0.42705643886637601,0.90422497091308496,0.36220956382968261,0.93209668590243955,0.29555817896568415,0.95532474208851548,0.22743433812110633,0.97379341846380041,0.15817743084430405,0.98741070501159522,0.088132491563601825,0.99610876109528901,0.017648480643128704,0.99984425343699856,-0.052923454120162944,0.99859857200177837,-0.12323172689715853,0.99237792271187897,-0.19292606540949681,0.98121329652915457,-0.26165925596844058,0.96516031505964961,-0.32908887327600989,0.94429895344955583,-0.39487898637059116,0.91873314195305622,-0.45870183221809036,0.88859024815702703,-0.52023944861088223,0.85402044244212638,-0.57918525823953315,0.81519594984151222,-0.63524559604553854,0.772310192024389,-0.68814117224586879,0.72557682367898269,-0.73760846374062217,0.67522866809563065,-0.78340102697185243,0.62151655725285937,-0.82529072569297723,0.56470808218508706,-0.86306886753208412,0.5050862598575474,-0.89654724368682859,0.44294812319000798,-0.925559066571221,0.37860324125370354,-0.9499598007429908,0.31237217701379416,-0.96962788297188807,0.24458489030080022,-0.98446532786158336,0.17557909396732085,-0.99439821600798195,0.10569857141959295,-0.9993770622619782,0.03529146390585268,-0.9993770622619782,-0.035291463905852437,-0.99439821600798206,-0.1056985714195927,-0.98446532786158336,-0.1755790939673206,-0.96962788297188829,-0.24458489030079955,-0.94995980074299091,-0.31237217701379394,-0.92555906657122111,-0.37860324125370332,-0.8965472436868287,-0.44294812319000776,-0.86306886753208423,-0.50508625985754718,-0.82529072569297768,-0.5647080821850865,-0.78340102697185265,-0.62151655725285915,-0.73760846374062228,-0.67522866809563042,-0.68814117224586902,-0.72557682367898246,-0.63524559604553898,-0.77231019202438844,-0.57918525823953371,-0.81519594984151178,-0.52023944861088234,-0.85402044244212627,-0.45870183221809058,-0.88859024815702692,-0.39487898637059116,-0.91873314195305622,-0.3290888732760105,-0.94429895344955561,-0.26165925596844103,-0.9651603150596495,-0.19292606540949706,-0.98121329652915446,-0.12323172689715878,-0.99237792271187897,-0.052923454120162965,-0.99859857200177837,0.017648480643128014,-0.99984425343699868,0.088132491563601353,-0.99610876109528912,0.1581774308443038,-0.98741070501159522,0.22743433812110631,-0.97379341846380041,0.29555817896568415,-0.95532474208851548,0.362209563829682,-0.93209668590243977,0.42705643886637557,-0.90422497091308507,0.48977574020622816,-0.87184845260253874,0.55005500344484126,-0.83512842915643559,0.60759392032489912,-0.79424783788451081,0.66210583485679997,-0.74941034383612559,0.71331917142437995,-0.70083932515123326,0.76097878776096761,-0.64877676020172625,0.80484724605532565,-0.59348202206735634,0.84470599585488215,-0.53523058635209919,0.88035646287309111,-0.47431265877855278,0.91162103827654173,-0.41103172939762217,0.93834396352322946,-0.34570306061635653,0.96039210634377925,-0.27865211657649225,0.9776556239997144,-0.21021294170847099,0.99004851051445431,-0.14072649653889113,0.99750902515076378,-0.070538959042311389,0.99750902515076378,-0.070538959042311389,1,0,0.99986473257459929,0.01644738743767395,0.99945896689295011,0.032890325283841379,0.99878281272881042,0.04932436515076534,0.99783645300544621,0.065745061057922369,0.99662014374614405,0.082147970634795162,0.99513421400494795,0.098528656322688646,0.99337906577763868,0.11488268657524421,0.99135517389298011,0.13120563705732749,0.98906308588426128,0.14749309184196516,0.98650342184116968,0.16374064460500715,0.9836768742420352,0.17994389981719078,0.98058420776649102,0.19609847393328481,0.9772262590886005,0.21219999657799091,0.97360393665050837,0.22824411172828274,0.96971822041667499,0.24422647889186186,0.96557016160876175,0.26014277428141225,0.96116088242123943,0.2759886919843354,0.95649157571779531,0.29175994512764963,0.9515635047086215,0.30745226703773904,0.94637800260867355,0.32306141239463682,0.94093647227698807,0.33858315838053277,0.93524038583716163,0.35401330582219237,0.92929128427908936,0.36934768032697968,0.92309077704207365,0.38458213341217595,0.91664054157941477,0.39971254362728864,0.90994232290460131,0.41473481766904779,0.90299793311922305,0.42964489148878665,0.89580925092273433,0.44443873139190909,0.88837822110420095,0.45911233512914401,0.88070685401616589,0.47366173297929381,0.87279722503077994,0.48808298882318168,0.86465147397834041,0.50237220120850967,0.85627180456839302,0.51652550440533695,0.8476604837935513,0.53053906945189488,0.83881984131619636,0.54440910519045427,0.82975226883822173,0.55813185929296616,0.82046021945399483,0.57170361927619673,0.81094620698670961,0.58512071350608397,0.80121280530830929,0.5983795121910418,0.79126264764316478,0.61147642836394667,0.78109842585569544,0.62440791885253555,0.7707228897221261,0.63717048523795838,0.76013884618657657,0.64976067480122246,0.74934915860168583,0.66217508145727255,0.73835674595397449,0.67441034667645627,0.72716458207415846,0.68646316039312294,0.71577569483262293,0.69833026190111214,0.70419316532027854,0.71000844073588787,0.69242012701501909,0.72149453754308135,0.68045976493400573,0.73278544493320674,0.66831531477200956,0.7438781083223176,0.65599006202604337,0.75476952675837927,0.64348734110651984,0.76545675373312982,0.63081053443517754,0.77593689797921439,0.61796307153001773,0.78620712425237294,0.60494842807750093,0.7962646540984728,0.59177012499225168,0.80610676660517788,0.57843172746452909,0.81573079913804947,0.56493684399571797,0.82513414806088214,0.55128912542210429,0.83431426944007814,0.53749226392719618,0.84326867973286979,0.52354999204285979,0.85199495645920431,0.50946608163953877,0.8604907388571098,0.49524434290583336,0.86875372852136257,0.48088862331770965,0.87678169002528672,0.46640280659762445,0.88457245152551467,0.45179081166384322,0.892123905349546,0.43705659157023491,0.89943400856594746,0.42220413243683458,0.90650078353703578,0.40723745237145775,0.91332231845389866,0.39216060038266271,0.91989676785360508,0.37697765528435323,0.92622235311846768,0.36169272459231572,0.93229736295722043,0.34630994341299487,0.93812015386798309,0.33083347332480184,0.94368915058288538,0.31526750125226255,0.94900284649423183,0.29961623833330969,0.95405980406209201,0.28388391878002167,0.95885865520320468,0.2680747987331214,0.96339810166109241,0.25219315511054247,0.96767691535728484,0.23624328445037235,0.97169393872355736,0.22022950174849087,0.97544808501509273,0.20415613929121182,0.97893833860448398,0.18802754548324924,0.98216375525649724,0.17184808367132301,0.98512346238351967,0.15562213096372005,0.98781665928162543,0.13935407704613564,0.99024261734719321,0.12304832299410902,0.99240068027401984,0.10670928008237961,0.99429026423087352,0.0903413685914842,0.99591085801944024,0.073949016611915497,0.99726202321262125,0.057536658846171006,0.99834339427314256,0.041108735409009951,0.99915467865244567,0.024669690626248176,0.99969565686983219,0.0082239718324137318,0.99996618257184056,-0.0082239718324136103,0.99996618257184056,-0.024669690626248054,0.99969565686983219,-0.041108735409009611,0.99915467865244567,-0.057536658846170881,0.99834339427314256,-0.073949016611915372,0.99726202321262125,-0.090341368591483853,0.99591085801944024,-0.10670928008237948,0.99429026423087352,-0.12304832299410867,0.99240068027401995,-0.13935407704613553,0.99024261734719321,-0.15562213096371993,0.98781665928162543,-0.17184808367132268,0.98512346238351978,-0.1880275454832491,0.98216375525649724,-0.20415613929121149,0.97893833860448409,-0.22022950174849076,0.97544808501509273,-0.23624328445037224,0.97169393872355736,-0.25219315511054213,0.96767691535728495,-0.26807479873312123,0.96339810166109241,-0.28388391878002134,0.95885865520320468,-0.29961623833330958,0.95405980406209201,-0.31526750125226244,0.94900284649423194,-0.33083347332480151,0.94368915058288549,-0.34630994341299476,0.93812015386798309,-0.36169272459231561,0.93229736295722054,-0.3769776552843529,0.92622235311846779,-0.39216060038266259,0.91989676785360519,-0.40723745237145748,0.91332231845389877,-0.42220413243683447,0.90650078353703589,-0.43705659157023496,0.89943400856594746,-0.45179081166384288,0.89212390534954622,-0.46640280659762434,0.88457245152551467,-0.48088862331770954,0.87678169002528683,-0.49524434290583308,0.86875372852136279,-0.50946608163953877,0.86049073885710992,-0.52354999204285968,0.85199495645920442,-0.53749226392719596,0.8432686797328699,-0.55128912542210418,0.83431426944007825,-0.56493684399571786,0.82513414806088226,-0.57843172746452876,0.81573079913804969,-0.59177012499225157,0.8061067666051781,-0.60494842807750093,0.79626465409847291,-0.61796307153001784,0.78620712425237294,-0.63081053443517721,0.77593689797921461,-0.64348734110651973,0.76545675373312994,-0.65599006202604337,0.75476952675837927,-0.66831531477200934,0.74387810832231793,-0.68045976493400562,0.73278544493320685,-0.69242012701501898,0.72149453754308146,-0.70419316532027831,0.71000844073588809,-0.71577569483262271,0.69833026190111236,-0.72716458207415835,0.68646316039312305,-0.73835674595397449,0.67441034667645627,-0.74934915860168561,0.66217508145727277,-0.76013884618657657,0.64976067480122257,-0.7707228897221261,0.63717048523795838,-0.78109842585569533,0.62440791885253577,-0.79126264764316467,0.61147642836394689,-0.80121280530830929,0.59837951219104191,-0.81094620698670938,0.58512071350608419,-0.82046021945399472,0.57170361927619695,-0.82975226883822162,0.55813185929296627,-0.83881984131619614,0.54440910519045471,-0.84766048379355119,0.53053906945189511,-0.85627180456839291,0.51652550440533707,-0.86465147397834041,0.50237220120850967,-0.87279722503077972,0.48808298882318202,-0.88070685401616577,0.47366173297929398,-0.88837822110420095,0.45911233512914407,-0.89580925092273422,0.44443873139190937,-0.90299793311922294,0.42964489148878687,-0.90994232290460131,0.41473481766904785,-0.91664054157941466,0.39971254362728903,-0.92309077704207354,0.38458213341217617,-0.92929128427908925,0.36934768032697979,-0.93524038583716163,0.35401330582219237,-0.94093647227698796,0.33858315838053304,-0.94637800260867344,0.32306141239463698,-0.9515635047086215,0.30745226703773904,-0.95649157571779519,0.29175994512764997,-0.96116088242123943,0.27598869198433557,-0.96557016160876163,0.2601427742814123,-0.96971822041667488,0.24422647889186222,-0.97360393665050837,0.22824411172828296,-0.9772262590886005,0.21219999657799099,-0.98058420776649091,0.19609847393328522,-0.9836768742420352,0.17994389981719108,-0.98650342184116968,0.16374064460500729,-0.98906308588426128,0.14749309184196516,-0.99135517389298011,0.1312056370573278,-0.99337906577763868,0.11488268657524439,-0.99513421400494795,0.098528656322688687,-0.99662014374614405,0.082147970634795509,-0.99783645300544621,0.065745061057922577,-0.99878281272881042,0.049324365150765423,-0.99945896689295011,0.032890325283841775,-0.99986473257459929,0.01644738743767421,0.99945896689295011,0.032890325283841379,0.99783645300544621,0.065745061057922369,0.99513421400494795,0.098528656322688646,0.99135517389298011,0.13120563705732749,0.98650342184116968,0.16374064460500715,0.98058420776649102,0.19609847393328481,0.97360393665050837,0.22824411172828274,0.96557016160876175,0.26014277428141225,0.95649157571779531,0.29175994512764963,0.94637800260867355,0.32306141239463682,0.93524038583716163,0.35401330582219237,0.92309077704207365,0.38458213341217595,0.90994232290460131,0.41473481766904779,0.89580925092273433,0.44443873139190909,0.88070685401616589,0.47366173297929381,0.86465147397834041,0.50237220120850967,0.8476604837935513,0.53053906945189488,0.82975226883822173,0.55813185929296616,0.81094620698670961,0.58512071350608397,0.79126264764316478,0.61147642836394667,0.7707228897221261,0.63717048523795838,0.74934915860168583,0.66217508145727255,0.72716458207415846,0.68646316039312294,0.70419316532027854,0.71000844073588787,0.68045976493400573,0.73278544493320674,0.65599006202604337,0.75476952675837927,0.63081053443517754,0.77593689797921439,0.60494842807750093,0.7962646540984728,0.57843172746452909,0.81573079913804947,0.55128912542210429,0.83431426944007814,0.52354999204285979,0.85199495645920431,0.49524434290583336,0.86875372852136257,0.46640280659762445,0.88457245152551467,0.43705659157023491,0.89943400856594746,0.40723745237145775,0.91332231845389866,0.37697765528435323,0.92622235311846768,0.34630994341299487,0.93812015386798309,0.31526750125226255,0.94900284649423183,0.28388391878002167,0.95885865520320468,0.25219315511054247,0.96767691535728484,0.22022950174849087,0.97544808501509273,0.18802754548324924,0.98216375525649724,0.15562213096372005,0.98781665928162543,0.12304832299410902,0.99240068027401984,0.0903413685914842,0.99591085801944024,0.057536658846171006,0.99834339427314256,0.024669690626248176,0.99969565686983219,-0.0082239718324136103,0.99996618257184056,-0.041108735409009611,0.99915467865244567,-0.073949016611915372,0.99726202321262125,-0.10670928008237948,0.99429026423087352,-0.13935407704613553,0.99024261734719321,-0.17184808367132268,0.98512346238351978,-0.20415613929121149,0.97893833860448409,-0.23624328445037224,0.97169393872355736,-0.26807479873312123,0.96339810166109241,-0.29961623833330958,0.95405980406209201,-0.33083347332480151,0.94368915058288549,-0.36169272459231561,0.93229736295722054,-0.39216060038266259,0.91989676785360519,-0.42220413243683447,0.90650078353703589,-0.45179081166384288,0.89212390534954622,-0.48088862331770954,0.87678169002528683,-0.50946608163953877,0.86049073885710992,-0.53749226392719596,0.8432686797328699,-0.56493684399571786,0.82513414806088226,-0.59177012499225157,0.8061067666051781,-0.61796307153001784,0.78620712425237294,-0.64348734110651973,0.76545675373312994,-0.66831531477200934,0.74387810832231793,-0.69242012701501898,0.72149453754308146,-0.71577569483262271,0.69833026190111236,-0.73835674595397449,0.67441034667645627,-0.76013884618657657,0.64976067480122257,-0.78109842585569533,0.62440791885253577,-0.80121280530830929,0.59837951219104191,-0.82046021945399472,0.57170361927619695,-0.83881984131619614,0.54440910519045471,-0.85627180456839291,0.51652550440533707,-0.87279722503077972,0.48808298882318202,-0.88837822110420095,0.45911233512914407,-0.90299793311922294,0.42964489148878687,-0.91664054157941466,0.39971254362728903,-0.92929128427908925,0.36934768032697979,-0.94093647227698796,0.33858315838053304,-0.9515635047086215,0.30745226703773904,-0.96116088242123943,0.27598869198433557,-0.96971822041667488,0.24422647889186222,-0.9772262590886005,0.21219999657799099,-0.9836768742420352,0.17994389981719108,-0.98906308588426128,0.14749309184196516,-0.99337906577763868,0.11488268657524439,-0.99662014374614405,0.082147970634795509,-0.99878281272881042,0.049324365150765423,-0.99986473257459929,0.01644738743767421,-0.99986473257459929,-0.016447387437673964,-0.99878281272881042,-0.04932436515076518,-0.99662014374614405,-0.082147970634794829,-0.99337906577763868,-0.11488268657524414,-0.98906308588426128,-0.14749309184196494,-0.98367687424203532,-0.17994389981719039,-0.97722625908860061,-0.21219999657799077,-0.96971822041667499,-0.24422647889186155,-0.96116088242123943,-0.27598869198433534,-0.95156350470862161,-0.30745226703773881,-0.94093647227698818,-0.33858315838053238,-0.92929128427908936,-0.36934768032697957,-0.91664054157941488,-0.39971254362728842,-0.90299793311922305,-0.42964489148878665,-0.88837822110420106,-0.45911233512914384,-0.87279722503078006,-0.48808298882318141,-0.85627180456839302,-0.51652550440533684,-0.83881984131619658,-0.54440910519045405,-0.82046021945399494,-0.57170361927619673,-0.80121280530830941,-0.59837951219104168,-0.78109842585569567,-0.62440791885253522,-0.76013884618657668,-0.64976067480122235,-0.73835674595397471,-0.67441034667645605,-0.71577569483262315,-0.6983302619011118,-0.6924201270150192,-0.72149453754308124,-0.66831531477200989,-0.74387810832231738,-0.64348734110651984,-0.76545675373312982,-0.61796307153001762,-0.78620712425237305,-0.59177012499225212,-0.80610676660517766,-0.56493684399571809,-0.82513414806088203,-0.53749226392719618,-0.84326867973286979,-0.50946608163953933,-0.86049073885710958,-0.48088862331770976,-0.87678169002528672,-0.45179081166384311,-0.89212390534954611,-0.42220413243683508,-0.90650078353703556,-0.39216060038266304,-0.91989676785360497,-0.36169272459231583,-0.93229736295722043,-0.33083347332480234,-0.94368915058288516,-0.29961623833331003,-0.9540598040620919,-0.26807479873312151,-0.9633981016610923,-0.23624328445037227,-0.97169393872355736,-0.20415613929121215,-0.97893833860448387,-0.17184808367132312,-0.98512346238351967,-0.13935407704613556,-0.99024261734719321,-0.10670928008238016,-0.99429026423087341,-0.073949016611915844,-0.99726202321262114,-0.041108735409009854,-0.99915467865244567,-0.008223971832414299,-0.99996618257184056,0.024669690626247708,-0.99969565686983219,0.057536658846170756,-0.99834339427314256,0.090341368591484172,-0.99591085801944024,0.12304832299410833,-0.99240068027401995,0.1556221309637198,-0.98781665928162543,0.18802754548324921,-0.98216375525649724,0.22022950174849021,-0.97544808501509284,0.25219315511054197,-0.96767691535728495,0.28388391878002139,-0.95885865520320468,0.31526750125226188,-0.94900284649423206,0.34630994341299443,-0.93812015386798331,0.37697765528435301,-0.92622235311846779,0.40723745237145692,-0.913322318453899,0.43705659157023447,-0.89943400856594768,0.46640280659762423,-0.88457245152551478,0.49524434290583336,-0.86875372852136257,0.52354999204285924,-0.85199495645920464,0.55128912542210406,-0.83431426944007836,0.57843172746452898,-0.81573079913804947,0.60494842807750038,-0.79626465409847325,0.63081053443517709,-0.77593689797921472,0.65599006202604326,-0.75476952675837938,0.68045976493400517,-0.7327854449332073,0.7041931653202782,-0.7100084407358882,0.72716458207415824,-0.68646316039312316,0.74934915860168583,-0.66217508145727255,0.77072288972212577,-0.63717048523795883,0.79126264764316456,-0.61147642836394689,0.81094620698670961,-0.58512071350608397,0.8297522688382214,-0.55813185929296671,0.84766048379355108,-0.53053906945189522,0.8646514739783403,-0.50237220120850978,0.88070685401616555,-0.47366173297929448,0.89580925092273422,-0.44443873139190948,0.9099423229046012,-0.41473481766904796,0.92309077704207332,-0.38458213341217673,0.9352403858371614,-0.35401330582219287,0.94637800260867344,-0.32306141239463709,0.95649157571779531,-0.29175994512764969,0.96557016160876152,-0.26014277428141286,0.97360393665050837,-0.22824411172828307,0.98058420776649102,-0.19609847393328489,0.98650342184116957,-0.16374064460500784,0.99135517389298011,-0.13120563705732791,0.99513421400494795,-0.098528656322688812,0.99783645300544621,-0.065745061057923146,0.99945896689295011,-0.032890325283841892,0.99945896689295011,-0.032890325283841892,1,0,0.99997202506126981,0.0074799127577329146,0.99988810181027343,0.014959407015263619,0.99974823494250653,0.022438064295804937,0.99955243228350332,0.029915466169398455,0.9993007047883985,0.037391194276325625,0.9989930665413147,0.044864830350514924,0.99862953475457383,0.052335956242943835,0.99821012976773515,0.059804153945034168,0.99773487504645608,0.067269005612039648,0.99720379718118013,0.074730093586424254,0.99661692588564876,0.082187000421230089,0.99597429399523907,0.089639308903433496,0.99527593746512644,0.097086602077288128,0.99452189536827329,0.10452846326765347,0.9937122098932426,0.11196447610330786,0.99284692634183735,0.11939422454024434,0.99192609312656621,0.12681729288494831,0.99094976176793481,0.13423326581765546,0.98991798689156296,0.14164172841558906,0.98883082622512852,0.14904226617617444,0.98768834059513777,0.15643446504023087,0.98649059392352145,0.16381791141513771,0.98523765322405921,0.17119219219797502,0.98392958859862967,0.17855689479863665,0.98256647323328827,0.1859116071629146,0.98114838339417265,0.19325591779555326,0.97967539842323559,0.20058941578327277,0.97814760073380569,0.20791169081775934,0.9765650758059764,0.21522233321862205,0.97492791218182362,0.22252093395631439,0.97323620146045142,0.22980708467501954,0.9714900382928674,0.2370803777154975,0.96968952037668688,0.24434040613789401,0.96783474845066653,0.2515867637445085,0.96592582628906831,0.25881904510252079,0.96396286069585324,0.26603684556667512,0.96194596149870593,0.27323976130192001,0.95987524154288906,0.28042738930600281,0.95775081668493045,0.28759932743201727,0.95557280578614068,0.29475517441090421,0.95334133070596261,0.30189452987390208,0.95105651629515353,0.3090169943749474,0.94871849038879974,0.31612216941302435,0.94632738379916415,0.32320965745446001,0.94388333030836757,0.33027906195516704,0.9413864666609032,0.33732998738282999,0.9388369325559861,0.34436203923903508,0.9362348706397372,0.35137482408134268,0.93358042649720174,0.35836794954530027,0.93087374864420425,0.36534102436639504,0.92811498851903895,0.37229365840194517,0.9253043004739967,0.37922546265292839,0.92244184176672928,0.38613604928574635,0.91952777255145068,0.39302503165392361,0.91656225586997619,0.39989202431974097,0.91354545764260087,0.40673664307580021,0.91047754665881597,0.41355850496652063,0.90735869456786489,0.42035722830956551,0.90418907586913999,0.42713243271719681,0.90096886790241915,0.43388373911755812,0.89769825083794341,0.44061076977588376,0.89437740766633678,0.44731314831563262,0.8910065241883679,0.45399049973954675,0.88758578900455409,0.46064245045063229,0.88411539350460977,0.46726862827306198,0.880595531856738,0.47386866247299864,0.87702640099676654,0.48044218377933767,0.87340820061712976,0.4869888244043673,0.86974113315569546,0.49350821806434686,0.8660254037844386,0.5,0.86226122039796249,0.50646380699692295,0.8584487936018661,0.51289927740590613,0.85458833670096157,0.51930605116316897,0.85068006568733956,0.52568376981050469,0.84672419922828424,0.53203207651533657,0.84272095865403918,0.53835061609068235,0.83867056794542405,0.54463903501502708,0.83457325372130264,0.55089698145210253,0.83042924522590378,0.55712410527057243,0.82623877431599491,0.56332005806362206,0.82200207544790993,0.56948449316845196,0.81771938566443125,0.57561706568567361,0.81339094458152772,0.58171743249860586,0.80901699437494745,0.58778525229247314,0.80459777976666824,0.59382018557350169,0.80013354801120629,0.59982189468791369,0.79562454888178102,0.6057900438408198,0.79107103465634121,0.61172429911500636,0.78647326010344987,0.61762432848961779,0.7818314824680298,0.62348980185873348,0.77714596145697079,0.6293203910498375,0.77241695922459952,0.63511576984217877,0.76764474035801111,0.64087561398502413,0.76282957186226652,0.64659960121579974,0.75797172314545291,0.65228741127812118,0.75307146600361097,0.65793872593971259,0.74812907460552702,0.6635532290102113,0.74314482547739424,0.66913060635885824,0.73811899748734067,0.67467054593207432,0.73305187182982634,0.68017273777091947,0.72794373200991092,0.68563687402843421,0.72279486382739155,0.69106264898686465,0.71760555536081183,0.69644975907476692,0.71237609695134474,0.70179790288399135,0.70710678118654757,0.70710678118654746,0.70179790288399135,0.71237609695134485,0.69644975907476681,0.71760555536081183,0.69106264898686465,0.72279486382739155,0.6856368740284341,0.72794373200991103,0.68017273777091936,0.73305187182982634,0.67467054593207432,0.73811899748734056,0.66913060635885824,0.74314482547739424,0.66355322901021119,0.74812907460552702,0.65793872593971259,0.75307146600361086,0.65228741127812118,0.75797172314545302,0.64659960121579962,0.76282957186226652,0.64087561398502413,0.76764474035801111,0.63511576984217877,0.77241695922459952,0.62932039104983739,0.7771459614569709,0.62348980185873359,0.7818314824680298,0.61762432848961768,0.78647326010344998,0.61172429911500636,0.79107103465634121,0.60579004384081991,0.79562454888178102,0.59982189468791369,0.80013354801120629,0.59382018557350158,0.80459777976666835,0.58778525229247314,0.80901699437494745,0.58171743249860575,0.81339094458152783,0.5756170656856735,0.81771938566443136,0.56948449316845207,0.82200207544790993,0.56332005806362195,0.82623877431599491,0.55712410527057232,0.83042924522590378,0.55089698145210253,0.83457325372130264,0.54463903501502708,0.83867056794542405,0.53835061609068224,0.84272095865403918,0.53203207651533657,0.84672419922828412,0.52568376981050469,0.85068006568733956,0.51930605116316886,0.85458833670096168,0.51289927740590613,0.8584487936018661,0.50646380699692284,0.86226122039796249,0.49999999999999989,0.86602540378443871,0.49350821806434686,0.86974113315569535,0.48698882440436725,0.87340820061712976,0.48044218377933751,0.87702640099676665,0.47386866247299869,0.880595531856738,0.46726862827306198,0.88411539350460977,0.46064245045063223,0.88758578900455409,0.45399049973954686,0.8910065241883679,0.44731314831563262,0.89437740766633689,0.44061076977588365,0.89769825083794341,0.43388373911755818,0.90096886790241915,0.42713243271719675,0.90418907586913999,0.4203572283095654,0.90735869456786489,0.41355850496652069,0.91047754665881586,0.40673664307580021,0.91354545764260087,0.39989202431974086,0.91656225586997619,0.39302503165392366,0.91952777255145057,0.3861360492857463,0.92244184176672928,0.37922546265292834,0.9253043004739967,0.37229365840194523,0.92811498851903895,0.36534102436639498,0.93087374864420425,0.35836794954530016,0.93358042649720174,0.35137482408134274,0.9362348706397372,0.34436203923903508,0.9388369325559861,0.33732998738282988,0.9413864666609032,0.33027906195516715,0.94388333030836757,0.32320965745446001,0.94632738379916426,0.31612216941302423,0.94871849038879974,0.30901699437494745,0.95105651629515353,0.30189452987390203,0.95334133070596272,0.2947551744109041,0.95557280578614079,0.28759932743201733,0.95775081668493045,0.28042738930600275,0.95987524154288906,0.2732397613019199,0.96194596149870593,0.26603684556667517,0.96396286069585324,0.25881904510252074,0.96592582628906831,0.25158676374450839,0.96783474845066653,0.24434040613789407,0.96968952037668688,0.23708037771549748,0.9714900382928674,0.22980708467501942,0.97323620146045142,0.22252093395631445,0.97492791218182362,0.21522233321862203,0.9765650758059764,0.20791169081775923,0.97814760073380569,0.20058941578327283,0.97967539842323559,0.19325591779555323,0.98114838339417265,0.18591160716291449,0.98256647323328827,0.17855689479863671,0.98392958859862967,0.17119219219797499,0.98523765322405921,0.1638179114151376,0.98649059392352145,0.15643446504023092,0.98768834059513777,0.14904226617617444,0.98883082622512852,0.14164172841558895,0.98991798689156296,0.13423326581765554,0.9909497617679347,0.12681729288494828,0.99192609312656621,0.11939422454024425,0.99284692634183735,0.11196447610330791,0.9937122098932426,0.10452846326765346,0.99452189536827329,0.097086602077288031,0.99527593746512644,0.089639308903433551,0.99597429399523907,0.082187000421230075,0.99661692588564876,0.074730093586424171,0.99720379718118013,0.067269005612039717,0.99773487504645608,0.059804153945034154,0.99821012976773515,0.052335956242943744,0.99862953475457383,0.044864830350514986,0.99899306654131459,0.037391194276325604,0.99930070478839861,0.029915466169398369,0.99955243228350332,0.022438064295804999,0.99974823494250653,0.014959407015263606,0.99988810181027343,0.007479912757732827,0.99997202506126981,6.123233995736766e-17,1,-0.0074799127577329268,0.9999720250612697,-0.014959407015263704,0.99988810181027343,-0.022438064295804874,0.99974823494250653,-0.029915466169398466,0.99955243228350332,-0.037391194276325708,0.9993007047883985,-0.044864830350514862,0.9989930665413147,-0.052335956242943842,0.99862953475457383,-0.059804153945034251,0.99821012976773515,-0.067269005612039592,0.99773487504645608,-0.074730093586424268,0.99720379718118013,-0.082187000421230172,0.99661692588564876,-0.08963930890343344,0.99597429399523907,-0.097086602077288128,0.99527593746512644,-0.10452846326765355,0.99452189536827329,-0.1119644761033078,0.9937122098932426,-0.11939422454024434,0.99284692634183735,-0.12681729288494839,0.99192609312656621,-0.13423326581765541,0.99094976176793481,-0.14164172841558903,0.98991798689156296,-0.14904226617617453,0.98883082622512852,-0.15643446504023081,0.98768834059513777,-0.16381791141513771,0.98649059392352145,-0.17119219219797507,0.98523765322405921,-0.1785568947986366,0.98392958859862967,-0.18591160716291458,0.98256647323328827,-0.19325591779555334,0.98114838339417265,-0.20058941578327272,0.97967539842323559,-0.20791169081775934,0.97814760073380569,-0.21522233321862211,0.9765650758059764,-0.22252093395631434,0.97492791218182362,-0.22980708467501951,0.97323620146045142,-0.23708037771549759,0.9714900382928674,-0.24434040613789396,0.96968952037668688,-0.2515867637445085,0.96783474845066653,-0.25881904510252085,0.96592582628906831,-0.26603684556667506,0.96396286069585335,-0.27323976130192001,0.96194596149870593,-0.28042738930600281,0.95987524154288906,-0.28759932743201722,0.95775081668493056,-0.29475517441090421,0.95557280578614068,-0.30189452987390208,0.95334133070596261,-0.30901699437494734,0.95105651629515364,-0.31612216941302435,0.94871849038879974,-0.32320965745446006,0.94632738379916415,-0.33027906195516699,0.94388333030836757,-0.33732998738282999,0.9413864666609032,-0.34436203923903513,0.9388369325559861,-0.35137482408134263,0.9362348706397372,-0.35836794954530027,0.93358042649720174,-0.3653410243663951,0.93087374864420425,-0.37229365840194512,0.92811498851903895,-0.37922546265292839,0.9253043004739967,-0.38613604928574641,0.92244184176672928,-0.39302503165392355,0.91952777255145068,-0.39989202431974097,0.91656225586997619,-0.40673664307580026,0.91354545764260087,-0.41355850496652058,0.91047754665881597,-0.42035722830956568,0.90735869456786478,-0.42713243271719681,0.90418907586913999,-0.43388373911755806,0.90096886790241915,-0.44061076977588393,0.8976982508379433,-0.44731314831563268,0.89437740766633678,-0.45399049973954675,0.8910065241883679,-0.46064245045063251,0.88758578900455398,-0.46726862827306204,0.88411539350460977,-0.47386866247299858,0.880595531856738,-0.48044218377933784,0.87702640099676643,-0.4869888244043673,0.87340820061712965,-0.4935082180643468,0.86974113315569546,-0.50000000000000022,0.8660254037844386,-0.50646380699692295,0.86226122039796249,-0.51289927740590613,0.85844879360186621,-0.51930605116316919,0.85458833670096146,-0.5256837698105048,0.85068006568733956,-0.53203207651533646,0.84672419922828424,-0.53835061609068258,0.84272095865403907,-0.5446390350150272,0.83867056794542405,-0.55089698145210242,0.83457325372130275,-0.55712410527057254,0.83042924522590367,-0.56332005806362206,0.82623877431599491,-0.56948449316845196,0.82200207544790993,-0.57561706568567372,0.81771938566443125,-0.58171743249860586,0.81339094458152772,-0.58778525229247303,0.80901699437494745,-0.5938201855735018,0.80459777976666813,-0.5998218946879138,0.80013354801120629,-0.6057900438408198,0.79562454888178102,-0.61172429911500648,0.7910710346563411,-0.61762432848961779,0.78647326010344987,-0.62348980185873348,0.78183148246802991,-0.62932039104983761,0.77714596145697079,-0.63511576984217877,0.77241695922459952,-0.64087561398502413,0.76764474035801122,-0.64659960121579985,0.76282957186226641,-0.65228741127812118,0.75797172314545291,-0.65793872593971259,0.75307146600361097,-0.66355322901021141,0.74812907460552691,-0.66913060635885824,0.74314482547739424,-0.67467054593207432,0.73811899748734067,-0.68017273777091958,0.73305187182982623,-0.68563687402843421,0.72794373200991092,-0.69106264898686465,0.72279486382739155,-0.69644975907476703,0.71760555536081172,-0.70179790288399146,0.71237609695134474,-0.70710678118654746,0.70710678118654757,-0.71237609695134496,0.70179790288399124,-0.71760555536081194,0.69644975907476681,-0.72279486382739144,0.69106264898686476,-0.72794373200991114,0.68563687402843398,-0.73305187182982634,0.68017273777091936,-0.73811899748734056,0.67467054593207443,-0.74314482547739436,0.66913060635885802,-0.74812907460552702,0.66355322901021119,-0.75307146600361086,0.6579387259397127,-0.75797172314545314,0.65228741127812095,-0.76282957186226652,0.64659960121579962,-0.76764474035801111,0.64087561398502424,-0.77241695922459963,0.63511576984217855,-0.7771459614569709,0.62932039104983739,-0.78183148246802969,0.62348980185873359,-0.78647326010344998,0.61762432848961757,-0.79107103465634121,0.61172429911500636,-0.79562454888178091,0.60579004384081991,-0.8001335480112064,0.59982189468791358,-0.80459777976666835,0.59382018557350158,-0.80901699437494734,0.58778525229247325,-0.81339094458152794,0.58171743249860564,-0.81771938566443136,0.5756170656856735,-0.82200207544790982,0.56948449316845207,-0.82623877431599502,0.56332005806362184,-0.83042924522590378,0.55712410527057232,-0.83457325372130264,0.55089698145210264,-0.83867056794542416,0.54463903501502697,-0.84272095865403918,0.53835061609068235,-0.84672419922828412,0.53203207651533668,-0.85068006568733967,0.52568376981050458,-0.85458833670096168,0.51930605116316886,-0.8584487936018661,0.51289927740590624,-0.8622612203979626,0.50646380699692273,-0.86602540378443871,0.49999999999999994,-0.86974113315569535,0.49350821806434697,-0.87340820061712987,0.48698882440436708,-0.87702640099676654,0.48044218377933756,-0.880595531856738,0.47386866247299875,-0.88411539350460988,0.46726862827306181,-0.88758578900455409,0.46064245045063223,-0.89100652418836779,0.45399049973954686,-0.89437740766633689,0.44731314831563246,-0.89769825083794341,0.4406107697758837,-0.90096886790241903,0.43388373911755823,-0.9041890758691401,0.42713243271719659,-0.90735869456786489,0.42035722830956546,-0.91047754665881586,0.41355850496652075,-0.91354545764260098,0.40673664307580004,-0.91656225586997619,0.39989202431974091,-0.91952777255145057,0.39302503165392372,-0.92244184176672939,0.38613604928574613,-0.9253043004739967,0.37922546265292839,-0.92811498851903884,0.37229365840194528,-0.93087374864420436,0.36534102436639482,-0.93358042649720174,0.35836794954530021,-0.9362348706397372,0.3513748240813428,-0.93883693255598621,0.34436203923903491,-0.9413864666609032,0.33732998738282993,-0.94388333030836757,0.33027906195516721,-0.94632738379916426,0.32320965745445984,-0.94871849038879974,0.31612216941302429,-0.95105651629515353,0.30901699437494751,-0.95334133070596272,0.30189452987390186,-0.95557280578614079,0.29475517441090421,-0.95775081668493045,0.28759932743201738,-0.95987524154288906,0.28042738930600258,-0.96194596149870593,0.27323976130191996,-0.96396286069585324,0.26603684556667523,-0.96592582628906831,0.25881904510252057,-0.96783474845066653,0.25158676374450845,-0.96968952037668688,0.24434040613789415,-0.97149003829286751,0.23708037771549734,-0.97323620146045142,0.22980708467501948,-0.97492791218182362,0.2225209339563145,-0.9765650758059764,0.21522233321862186,-0.97814760073380569,0.20791169081775931,-0.97967539842323548,0.20058941578327288,-0.98114838339417265,0.19325591779555309,-0.98256647323328827,0.18591160716291455,-0.98392958859862967,0.17855689479863676,-0.98523765322405921,0.17119219219797482,-0.98649059392352145,0.16381791141513766,-0.98768834059513766,0.15643446504023098,-0.98883082622512852,0.14904226617617428,-0.98991798689156296,0.141641728415589,-0.9909497617679347,0.1342332658176556,-0.99192609312656621,0.12681729288494811,-0.99284692634183735,0.1193942245402443,-0.9937122098932426,0.11196447610330798,-0.9945218953682734,0.10452846326765329,-0.99527593746512644,0.097086602077288101,-0.99597429399523907,0.08963930890343362,-0.99661692588564876,0.082187000421229908,-0.99720379718118013,0.074730093586424226,-0.99773487504645608,0.067269005612039773,-0.99821012976773515,0.059804153945033994,-0.99862953475457383,0.052335956242943807,-0.99899306654131459,0.044864830350515049,-0.99930070478839861,0.037391194276325444,-0.99955243228350332,0.029915466169398428,-0.99974823494250653,0.022438064295805058,-0.99988810181027343,0.014959407015263444,-0.99997202506126981,0.0074799127577328886,1,0,0.99988810181027343,0.014959407015263619,0.99955243228350332,0.029915466169398455,0.9989930665413147,0.044864830350514924,0.99821012976773515,0.059804153945034168,0.99720379718118013,0.074730093586424254,0.99597429399523907,0.089639308903433496,0.99452189536827329,0.10452846326765347,0.99284692634183735,0.11939422454024434,0.99094976176793481,0.13423326581765546,0.98883082622512852,0.14904226617617444,0.98649059392352145,0.16381791141513771,0.98392958859862967,0.17855689479863665,0.98114838339417265,0.19325591779555326,0.97814760073380569,0.20791169081775934,0.97492791218182362,0.22252093395631439,0.9714900382928674,0.2370803777154975,0.96783474845066653,0.2515867637445085,0.96396286069585324,0.26603684556667512,0.95987524154288906,0.28042738930600281,0.95557280578614068,0.29475517441090421,0.95105651629515353,0.3090169943749474,0.94632738379916415,0.32320965745446001,0.9413864666609032,0.33732998738282999,0.9362348706397372,0.35137482408134268,0.93087374864420425,0.36534102436639504,0.9253043004739967,0.37922546265292839,0.91952777255145068,0.39302503165392361,0.91354545764260087,0.40673664307580021,0.90735869456786489,0.42035722830956551,0.90096886790241915,0.43388373911755812,0.89437740766633678,0.44731314831563262,0.88758578900455409,0.46064245045063229,0.880595531856738,0.47386866247299864,0.87340820061712976,0.4869888244043673,0.8660254037844386,0.5,0.8584487936018661,0.51289927740590613,0.85068006568733956,0.52568376981050469,0.84272095865403918,0.53835061609068235,0.83457325372130264,0.55089698145210253,0.82623877431599491,0.56332005806362206,0.81771938566443125,0.57561706568567361,0.80901699437494745,0.58778525229247314,0.80013354801120629,0.59982189468791369,0.79107103465634121,0.61172429911500636,0.7818314824680298,0.62348980185873348,0.77241695922459952,0.63511576984217877,0.76282957186226652,0.64659960121579974,0.75307146600361097,0.65793872593971259,0.74314482547739424,0.66913060635885824,0.73305187182982634,0.68017273777091947,0.72279486382739155,0.69106264898686465,0.71237609695134474,0.70179790288399135,0.70179790288399135,0.71237609695134485,0.69106264898686465,0.72279486382739155,0.68017273777091936,0.73305187182982634,0.66913060635885824,0.74314482547739424,0.65793872593971259,0.75307146600361086,0.64659960121579962,0.76282957186226652,0.63511576984217877,0.77241695922459952,0.62348980185873359,0.7818314824680298,0.61172429911500636,0.79107103465634121,0.59982189468791369,0.80013354801120629,0.58778525229247314,0.80901699437494745,0.5756170656856735,0.81771938566443136,0.56332005806362195,0.82623877431599491,0.55089698145210253,0.83457325372130264,0.53835061609068224,0.84272095865403918,0.52568376981050469,0.85068006568733956,0.51289927740590613,0.8584487936018661,0.49999999999999989,0.86602540378443871,0.48698882440436725,0.87340820061712976,0.47386866247299869,0.880595531856738,0.46064245045063223,0.88758578900455409,0.44731314831563262,0.89437740766633689,0.43388373911755818,0.90096886790241915,0.4203572283095654,0.90735869456786489,0.40673664307580021,0.91354545764260087,0.39302503165392366,0.91952777255145057,0.37922546265292834,0.9253043004739967,0.36534102436639498,0.93087374864420425,0.35137482408134274,0.9362348706397372,0.33732998738282988,0.9413864666609032,0.32320965745446001,0.94632738379916426,0.30901699437494745,0.95105651629515353,0.2947551744109041,0.95557280578614079,0.28042738930600275,0.95987524154288906,0.26603684556667517,0.96396286069585324,0.25158676374450839,0.96783474845066653,0.23708037771549748,0.9714900382928674,0.22252093395631445,0.97492791218182362,0.20791169081775923,0.97814760073380569,0.19325591779555323,0.98114838339417265,0.17855689479863671,0.98392958859862967,0.1638179114151376,0.98649059392352145,0.14904226617617444,0.98883082622512852,0.13423326581765554,0.9909497617679347,0.11939422454024425,0.99284692634183735,0.10452846326765346,0.99452189536827329,0.089639308903433551,0.99597429399523907,0.074730093586424171,0.99720379718118013,0.059804153945034154,0.99821012976773515,0.044864830350514986,0.99899306654131459,0.029915466169398369,0.99955243228350332,0.014959407015263606,0.99988810181027343,6.123233995736766e-17,1,-0.014959407015263704,0.99988810181027343,-0.029915466169398466,0.99955243228350332,-0.044864830350514862,0.9989930665413147,-0.059804153945034251,0.99821012976773515,-0.074730093586424268,0.99720379718118013,-0.08963930890343344,0.99597429399523907,-0.10452846326765355,0.99452189536827329,-0.11939422454024434,0.99284692634183735,-0.13423326581765541,0.99094976176793481,-0.14904226617617453,0.98883082622512852,-0.16381791141513771,0.98649059392352145,-0.1785568947986366,0.98392958859862967,-0.19325591779555334,0.98114838339417265,-0.20791169081775934,0.97814760073380569,-0.22252093395631434,0.97492791218182362,-0.23708037771549759,0.9714900382928674,-0.2515867637445085,0.96783474845066653,-0.26603684556667506,0.96396286069585335,-0.28042738930600281,0.95987524154288906,-0.29475517441090421,0.95557280578614068,-0.30901699437494734,0.95105651629515364,-0.32320965745446006,0.94632738379916415,-0.33732998738282999,0.9413864666609032,-0.35137482408134263,0.9362348706397372,-0.3653410243663951,0.93087374864420425,-0.37922546265292839,0.9253043004739967,-0.39302503165392355,0.91952777255145068,-0.40673664307580026,0.91354545764260087,-0.42035722830956568,0.90735869456786478,-0.43388373911755806,0.90096886790241915,-0.44731314831563268,0.89437740766633678,-0.46064245045063251,0.88758578900455398,-0.47386866247299858,0.880595531856738,-0.4869888244043673,0.87340820061712965,1,0,0.99955243228350332,0.029915466169398455,0.99821012976773515,0.059804153945034168,0.99597429399523907,0.089639308903433496,0.99284692634183735,0.11939422454024434,0.98883082622512852,0.14904226617617444,0.98392958859862967,0.17855689479863665,0.97814760073380569,0.20791169081775934,0.9714900382928674,0.2370803777154975,0.96396286069585324,0.26603684556667512,0.95557280578614068,0.29475517441090421,0.94632738379916415,0.32320965745446001,0.9362348706397372,0.35137482408134268,0.9253043004739967,0.37922546265292839,0.91354545764260087,0.40673664307580021,0.90096886790241915,0.43388373911755812,0.88758578900455409,0.46064245045063229,0.87340820061712976,0.4869888244043673,0.8584487936018661,0.51289927740590613,0.84272095865403918,0.53835061609068235,0.82623877431599491,0.56332005806362206,0.80901699437494745,0.58778525229247314,0.79107103465634121,0.61172429911500636,0.77241695922459952,0.63511576984217877,0.75307146600361097,0.65793872593971259,0.73305187182982634,0.68017273777091947,0.71237609695134474,0.70179790288399135,0.69106264898686465,0.72279486382739155,0.66913060635885824,0.74314482547739424,0.64659960121579962,0.76282957186226652,0.62348980185873359,0.7818314824680298,0.59982189468791369,0.80013354801120629,0.5756170656856735,0.81771938566443136,0.55089698145210253,0.83457325372130264,0.52568376981050469,0.85068006568733956,0.49999999999999989,0.86602540378443871,0.47386866247299869,0.880595531856738,0.44731314831563262,0.89437740766633689,0.4203572283095654,0.90735869456786489,0.39302503165392366,0.91952777255145057,0.36534102436639498,0.93087374864420425,0.33732998738282988,0.9413864666609032,0.30901699437494745,0.95105651629515353,0.28042738930600275,0.95987524154288906,0.25158676374450839,0.96783474845066653,0.22252093395631445,0.97492791218182362,0.19325591779555323,0.98114838339417265,0.1638179114151376,0.98649059392352145,0.13423326581765554,0.9909497617679347,0.10452846326765346,0.99452189536827329,0.074730093586424171,0.99720379718118013,0.044864830350514986,0.99899306654131459,0.014959407015263606,0.99988810181027343,-0.014959407015263704,0.99988810181027343,-0.044864830350514862,0.9989930665413147,-0.074730093586424268,0.99720379718118013,-0.10452846326765355,0.99452189536827329,-0.13423326581765541,0.99094976176793481,-0.16381791141513771,0.98649059392352145,-0.19325591779555334,0.98114838339417265,-0.22252093395631434,0.97492791218182362,-0.2515867637445085,0.96783474845066653,-0.28042738930600281,0.95987524154288906,-0.30901699437494734,0.95105651629515364,-0.33732998738282999,0.9413864666609032,-0.3653410243663951,0.93087374864420425,-0.39302503165392355,0.91952777255145068,-0.42035722830956568,0.90735869456786478,-0.44731314831563268,0.89437740766633678,-0.47386866247299858,0.880595531856738,-0.50000000000000022,0.8660254037844386,-0.5256837698105048,0.85068006568733956,-0.55089698145210242,0.83457325372130275,-0.57561706568567372,0.81771938566443125,-0.5998218946879138,0.80013354801120629,-0.62348980185873348,0.78183148246802991,-0.64659960121579985,0.76282957186226641,-0.66913060635885824,0.74314482547739424,-0.69106264898686465,0.72279486382739155,-0.71237609695134496,0.70179790288399124,-0.73305187182982634,0.68017273777091936,-0.75307146600361086,0.6579387259397127,-0.77241695922459963,0.63511576984217855,-0.79107103465634121,0.61172429911500636,-0.80901699437494734,0.58778525229247325,-0.82623877431599502,0.56332005806362184,-0.84272095865403918,0.53835061609068235,-0.8584487936018661,0.51289927740590624,-0.87340820061712987,0.48698882440436708,-0.88758578900455409,0.46064245045063223,-0.90096886790241903,0.43388373911755823,-0.91354545764260098,0.40673664307580004,-0.9253043004739967,0.37922546265292839,-0.9362348706397372,0.3513748240813428,-0.94632738379916426,0.32320965745445984,-0.95557280578614079,0.29475517441090421,-0.96396286069585324,0.26603684556667523,-0.97149003829286751,0.23708037771549734,-0.97814760073380569,0.20791169081775931,-0.98392958859862967,0.17855689479863676,-0.98883082622512852,0.14904226617617428,-0.99284692634183735,0.1193942245402443,-0.99597429399523907,0.08963930890343362,-0.99821012976773515,0.059804153945033994,-0.99955243228350332,0.029915466169398428,-1,1.2246467991473532e-16,-0.99955243228350332,-0.029915466169398629,-0.99821012976773515,-0.059804153945034196,-0.99597429399523907,-0.089639308903433371,-0.99284692634183724,-0.11939422454024451,-0.98883082622512852,-0.14904226617617447,-0.98392958859862967,-0.17855689479863651,-0.97814760073380558,-0.20791169081775951,-0.9714900382928674,-0.23708037771549753,-0.96396286069585335,-0.26603684556667495,-0.95557280578614068,-0.29475517441090437,-0.94632738379916415,-0.32320965745446001,-0.9362348706397372,-0.35137482408134257,-0.9253043004739967,-0.37922546265292856,-0.91354545764260087,-0.40673664307580021,-0.90096886790241915,-0.43388373911755801,-0.88758578900455398,-0.46064245045063246,-0.87340820061712976,-0.48698882440436725,-0.85844879360186621,-0.51289927740590602,-0.84272095865403907,-0.53835061609068247,-0.82623877431599491,-0.56332005806362206,-0.80901699437494745,-0.58778525229247303,-0.7910710346563411,-0.61172429911500648,-0.77241695922459952,-0.63511576984217877,-0.75307146600361108,-0.65793872593971248,-0.73305187182982623,-0.68017273777091947,-0.71237609695134485,-0.70179790288399135,-0.69106264898686476,-0.72279486382739144,-0.66913060635885813,-0.74314482547739436,-0.64659960121579929,-0.76282957186226685,-0.62348980185873359,-0.78183148246802969,-0.59982189468791358,-0.8001335480112064,-0.57561706568567317,-0.81771938566443159,-0.55089698145210264,-0.83457325372130253,-0.52568376981050458,-0.85068006568733967,1,0,0.9989930665413147,0.044864830350514924,0.99597429399523907,0.089639308903433496,0.99094976176793481,0.13423326581765546,0.98392958859862967,0.17855689479863665,0.97492791218182362,0.22252093395631439,0.96396286069585324,0.26603684556667512,0.95105651629515353,0.3090169943749474,0.9362348706397372,0.35137482408134268,0.91952777255145068,0.39302503165392361,0.90096886790241915,0.43388373911755812,0.880595531856738,0.47386866247299864,0.8584487936018661,0.51289927740590613,0.83457325372130264,0.55089698145210253,0.80901699437494745,0.58778525229247314,0.7818314824680298,0.62348980185873348,0.75307146600361097,0.65793872593971259,0.72279486382739155,0.69106264898686465,0.69106264898686465,0.72279486382739155,0.65793872593971259,0.75307146600361086,0.62348980185873359,0.7818314824680298,0.58778525229247314,0.80901699437494745,0.55089698145210253,0.83457325372130264,0.51289927740590613,0.8584487936018661,0.47386866247299869,0.880595531856738,0.43388373911755818,0.90096886790241915,0.39302503165392366,0.91952777255145057,0.35137482408134274,0.9362348706397372,0.30901699437494745,0.95105651629515353,0.26603684556667517,0.96396286069585324,0.22252093395631445,0.97492791218182362,0.17855689479863671,0.98392958859862967,0.13423326581765554,0.9909497617679347,0.089639308903433551,0.99597429399523907,0.044864830350514986,0.99899306654131459,1,0,0.99597429399523907,0.089639308903433496,0.98392958859862967,0.17855689479863665,0.96396286069585324,0.26603684556667512,0.9362348706397372,0.35137482408134268,0.90096886790241915,0.43388373911755812,0.8584487936018661,0.51289927740590613,0.80901699437494745,0.58778525229247314,0.75307146600361097,0.65793872593971259,0.69106264898686465,0.72279486382739155,0.62348980185873359,0.7818314824680298,0.55089698145210253,0.83457325372130264,0.47386866247299869,0.880595531856738,0.39302503165392366,0.91952777255145057,0.30901699437494745,0.95105651629515353,0.22252093395631445,0.97492791218182362,0.13423326581765554,0.9909497617679347,0.044864830350514986,0.99899306654131459,-0.044864830350514862,0.9989930665413147,-0.13423326581765541,0.99094976176793481,-0.22252093395631434,0.97492791218182362,-0.30901699437494734,0.95105651629515364,-0.39302503165392355,0.91952777255145068,-0.47386866247299858,0.880595531856738,-0.55089698145210242,0.83457325372130275,-0.62348980185873348,0.78183148246802991,-0.69106264898686465,0.72279486382739155,-0.75307146600361086,0.6579387259397127,-0.80901699437494734,0.58778525229247325,-0.8584487936018661,0.51289927740590624,-0.90096886790241903,0.43388373911755823,-0.9362348706397372,0.3513748240813428,-0.96396286069585324,0.26603684556667523,-0.98392958859862967,0.17855689479863676,-0.99597429399523907,0.08963930890343362,1,0,0.99094976176793481,0.13423326581765546,0.96396286069585324,0.26603684556667512,0.91952777255145068,0.39302503165392361,0.8584487936018661,0.51289927740590613,0.7818314824680298,0.62348980185873348,0.69106264898686465,0.72279486382739155,0.58778525229247314,0.80901699437494745,0.47386866247299869,0.880595531856738,0.35137482408134274,0.9362348706397372,0.22252093395631445,0.97492791218182362,0.089639308903433551,0.99597429399523907,-0.044864830350514862,0.9989930665413147,-0.1785568947986366,0.98392958859862967,-0.30901699437494734,0.95105651629515364,-0.43388373911755806,0.90096886790241915,-0.55089698145210242,0.83457325372130275,-0.65793872593971259,0.75307146600361097,-0.75307146600361086,0.6579387259397127,-0.83457325372130264,0.55089698145210264,-0.90096886790241903,0.43388373911755823,-0.95105651629515353,0.30901699437494751,-0.98392958859862967,0.17855689479863676,-0.99899306654131459,0.044864830350515049,-0.99597429399523907,-0.089639308903433371,-0.97492791218182362,-0.22252093395631428,-0.9362348706397372,-0.35137482408134257,-0.88059553185673811,-0.47386866247299853,-0.80901699437494745,-0.58778525229247303,-0.72279486382739166,-0.69106264898686454,-0.62348980185873359,-0.78183148246802969,-0.51289927740590624,-0.8584487936018661,-0.39302503165392377,-0.91952777255145057,-0.26603684556667528,-0.96396286069585324,-0.13423326581765566,-0.9909497617679347,1,0,0.98392958859862967,0.17855689479863665,0.9362348706397372,0.35137482408134268,0.8584487936018661,0.51289927740590613,0.75307146600361097,0.65793872593971259,0.62348980185873359,0.7818314824680298,0.47386866247299869,0.880595531856738,1,0,0.9362348706397372,0.35137482408134268,0.75307146600361097,0.65793872593971259,0.47386866247299869,0.880595531856738,0.13423326581765554,0.9909497617679347,-0.22252093395631434,0.97492791218182362,-0.55089698145210242,0.83457325372130275,1,0,0.8584487936018661,0.51289927740590613,0.47386866247299869,0.880595531856738,-0.044864830350514862,0.9989930665413147,-0.55089698145210242,0.83457325372130275,-0.90096886790241903,0.43388373911755823,-0.99597429399523907,-0.089639308903433371,1,0,0.75307146600361097,0.65793872593971259,0.13423326581765554,0.9909497617679347,-0.55089698145210242,0.83457325372130275,-0.96396286069585324,0.26603684556667523,-0.90096886790241915,-0.43388373911755801,-0.39302503165392377,-0.91952777255145057,0.62348980185873359,0.7818314824680298,-0.22252093395631434,0.97492791218182362,-0.90096886790241903,0.43388373911755823,-0.90096886790241915,-0.43388373911755801,-0.22252093395631459,-0.97492791218182362,0.62348980185873337,-0.78183148246802991,0.62348980185873337,-0.78183148246802991,0.99991396949206668,0.013116920927498298,0.9996558927707635,0.026231584944256769,0.99922581424103318,0.039341735527861937,0.99862380790262451,0.052445116932486234,0.99784997733735958,0.065539474577013895,0.99690445569131159,0.078622555432966465,0.99578740565189539,0.091692108412161216,0.99449901941987573,0.10474588475403562,0.99303951867629636,0.11778163841257142,0.99140915454433787,0.13079712644275152,0.98960820754610923,0.14379010938648346,0.98763698755438023,0.15675835165792279,0.9854958337392653,0.16969962192813032,0.9831851145098649,0.1826116935089967,0.98070522745087718,0.19549234473636881,0.97805659925418853,0.20833935935231149,0.97523968564545738,0.22115052688643899,0.9722549713057006,0.23392364303625099,0.96910296978789967,0.24665651004640698,0.96578422342863779,0.25934693708687429,0.96229930325478485,0.2719927406298846,0.95864880888524628,0.28459174482563371,0.95483336842779165,0.29714178187666096,0.95085363837098202,0.30964069241084213,0.94671030347121388,0.32208632585293345,0.94240407663489922,0.33447654079460182,0.93793569879580208,0.34680920536287746,0.93330593878755252,0.35908219758696658,0.9285155932113609,0.37129340576335929,0.92356548629895352,0.38344072881917174,0.91845646977075412,0.39552207667365902,0.91318942268933689,0.40753537059783618,0.90776525130817309,0.41947854357214676,0.90218488891570081,0.43134954064211606,0.89644929567474241,0.44314631927192888,0.89055945845729723,0.45486684969587032,0.88451639067474042,0.46650911526756905,0.87832113210345342,0.47807111280698383,0.87197474870591973,0.48955085294507261,0.86547833244731376,0.50094636046608532,0.85883300110761629,0.51225567464742161,0.85203989808928871,0.5234768495969947,0.84510019222053689,0.53460795458804344,0.83801507755420279,0.54564707439133542,0.83078577316231317,0.55659230960470307,0.82341352292632575,0.56744177697985665,0.8158995953231053,0.57819360974641787,0.80824528320666855,0.58884595793311867,0.80045190358573393,0.59939698868610858,0.79252079739711589,0.60984488658431779,0.78445332927500255,0.62018785395182041,0.7762508873161541,0.63042411116714381,0.7679148828410669,0.64055189696947312,0.75944675015113894,0.65056946876169464,0.75084794628188356,0.66047510291022915,0.74211995075222936,0.67026709504160253,0.73326426530995403,0.67994376033570103,0.72428241367329094,0.68950343381566415,0.71517594126875683,0.69894447063436138,0.7059464149652448,0.70826524635740695,0.69659542280442643,0.71746415724266133,0.68712457372751234,0.72653962051617282,0.67753549729841589,0.73549007464451088,0.6678298434233686,0.74431397960344592,0.65800928206703591,0.7530098171429267,0.64807550296518113,0.76157609104831248,0.63803021533392801,0.77001132739781264,0.62787514757567098,0.77831407481609216,0.6176120469816847,0.7864829047239954,0.60724267943148336,0.79451641158435027,0.59676882908898143,0.80241321314380543,0.5861922980955091,0.81017195067066217,0.57551490625973323,0.81779128918865995,0.56473849074453997,0.82526991770667324,0.55386490575093028,0.8326065494442817,0.54289602219898436,0.83979992205317566,0.5318337274059487,0.84684879783435663,0.52067992476150382,0.85375196395109676,0.50943653340026285,0.86050823263762144,0.49810548787156578,0.86711644140347688,0.48668873780661681,0.8735754532335499,0.47518824758302985,0.87988415678370357,0.46360599598683611,0.88604146657199612,0.45194397587201085,0.89204632316545052,0.44020419381758247,0.89789769336234082,0.42838866978237694,0.90359457036996715,0.41649943675746315,0.90913597397788415,0.40453854041635301,0.91452095072655759,0.39250803876302148,0.91974857407141786,0.38041000177780476,0.9248179445422815,0.36824651106123618,0.92972818989811579,0.35601965947588532,0.93447846527711631,0.34373155078625639,0.93906795334207593,0.33138429929681396,0.94349586442101563,0.3189800294881921,0.94776143664305734,0.30652087565165559,0.95186393606951103,0.29400898152187016,0.95580265682015797,0.28144649990804999,0.9595769211947045,0.26883559232354376,0.96318607978938808,0.25617842861392098,0.96662951160871458,0.2434771865836281,0.96990662417230722,0.23073405162127106,0.97301685361684909,0.21795121632359729,0.97595966479310226,0.2051308801182333,0.97873455135798648,0.1922752488852508,0.98134103586170029,0.17938653457761911,0.98377866982987217,0.16646695484061499,0.98604703384072534,0.15351873263025301,0.98814573759724378,0.14054409583079991,0.99007441999432699,0.12754527687144432,0.99183274918092246,0.11452451234218106,0.99342042261712415,0.10148404260898279,0.99483716712622783,0.088426111428318965,0.99608273894173394,0.075352965561093443,0.99715692374929066,0.062266854386065155,0.99805953672356873,0.049170029512816155,0.99879042256006278,0.036064744394339217,0.99934945550181342,0.022953253939304599,0.99973653936104478,0.0098378141240799619,0.99995160753571477,-0.0032793183954367691,0.99999462302097475,-0.016395886672099253,0.99986557841553669,-0.02950963385584468,0.99956449592294638,-0.042618303582011248,0.99909142734776357,-0.055719640359568758,0.99844645408664767,-0.06881138995920251,0.9976296871143534,-0.081891299801176473,0.99664126696463551,-0.09495711934291623,0.99548136370606921,-0.10800660046623786,0.9941501769127874,-0.12103749786416299,0.99264793563014209,-0.13404756942724788,0.9909748983352944,-0.14703457662936245,0.98913135289274101,-0.15999628491285489,0.98711761650478336,-0.17293046407303014,0.98493403565695015,-0.18583488864188294,0.98258098605838029,-0.19870733827101233,0.98005887257717816,-0.21154559811365892,0.97736812917075122,-0.22434745920579174,0.97450921881114372,-0.23711071884618654,0.97148263340537622,-0.24983318097542404,0.96828889371080828,-0.2625126565537455,0.96492854924553628,-0.27514696393770277,0.96140217819384233,-0.28773392925553204,0.9577103873067121,-0.30027138678119458,0.95385381179743589,-0.31275717930701169,0.94983311523231373,-0.32518915851483771,0.94564898941648101,-0.33756518534570101,0.94130215427487607,-0.3498831303678524,0.93679335772836925,-0.36214087414315838,0.93212337556507463,-0.37433630759177222,0.92729301130686737,-0.38646733235502628,0.9223030960711287,-0.39853186115647599,0.91715448842774316,-0.41052781816103984,0.91184807425137238,-0.42245313933216949,0.90638476656902978,-0.43430577278699001,0.90076550540298528,-0.44608367914934771,0.89499125760902365,-0.45778483190070945,0.88906301671008625,-0.46940721772884614,0.88298180272532434,-0.48094883687424567,0.87674866199459367,-0.49240770347419238,0.87036466699842074,-0.50378184590445885,0.86383091617346974,-0.51506930711854382,0.85714853372354505,-0.52626814498440433,0.8503186694261593,-0.537376432618621,0.84334249843470155,-0.54839225871793829,0.83622122107624008,-0.55931372788812705,0.82895606264499089,-0.57013896097010741,0.82154827319149437,-0.58086609536327849,0.81399912730752888,-0.59149328534599854,0.80630992390680467,-0.6020187023931638,0.79848198600146969,-0.61244053549082456,0.79051666047447222,-0.62275699144779095,0.78241531784781415,-0.63296629520417125,0.77417935204673727,-0.64306669013678908,0.76581018015988467,-0.6530564383614319,0.7573092421954728,-0.66293382103187226,0.74867800083352365,-0.67269713863561353,0.73991794117419418,-0.68234471128631091,0.73103057048224807,-0.69187487901281286,0.72201741792771557,-0.70128600204477942,0.71288003432278113,-0.71057646109482109,0.70361999185495017,-0.71974465763711637,0.69423888381653631,-0.72878901418245368,0.68473832433051918,-0.73770797454965842,0.67511994807281506,-0.74650000413334927,0.66538540999101381,-0.75516359016798462,0.65553638501962663,-0.76369724198815048,0.64557456779189515,-0.77209949128504518,0.6355016723482122,-0.78036889235911922,0.6253194318412002,-0.78850402236882333,0.61502959823750436,-0.79650348157542417,0.60463394201634757,-0.80436589358384358,0.59413425186490032,-0.81208990557948457,0.5835323343705161,-0.81967418856099661,0.57283001370988917,-0.82711743756894518,0.56202913133518451,-0.83441837191034507,0.55113154565719524,-0.84157573537901609,0.54013913172558448,-0.84858829647172906,0.52905378090625987,-0.85545484860009879,0.51787740055594433,-0.86217421029819064,0.50661191369399461,-0.86874522542580435,0.49525925867152487,-0.87516676336740218,0.48382138883789083,-0.88143771922664227,0.47230027220459536,-0.88755701401648923,0.46069789110667037,-0.89352359484486521,0.44901624186159356,-0.89933643509581129,0.43725733442580189,-0.904994534606129,0.42542319204885382,-0.91049691983746872,0.41351585092530863,-0.91584264404383797,0.40153735984437594,-0.92103078743449907,0.38948977983740041,-0.92606045733222975,0.37737518382323648,-0.930930788326918,0.36519565625158107,-0.93564094242446538,0.35295329274432097,-0.9401901091909729,0.34065019973495742,-0.94457750589218525,0.32828849410617278,-0.94880237762816921,0.31587030282559492,-0.95286399746320183,0.30339776257983081,-0.95676166655084816,0.29087301940682558,-0.96049471425420585,0.27829822832661266,-0.96406249826129442,0.26567555297052037,-0.96746440469557327,0.2530071652088931,-0.97069984822156541,0.24029524477739847,-0.97376827214557127,0.22754197890197911,-0.97666914851145303,0.21474956192251804,-0.97940197819147634,0.20192019491527566,-0.98196629097219035,0.1890560853141722,-0.98436164563533302,0.17615944653097385,-0.98658763003374772,0.16323249757445044,-0.9886438611622973,0.15027746266857236,-0.99052998522376512,0.13729657086980571,-0.99224567768972916,0.12429205568358019,-0.99379064335640066,0.11126615467998918,-0.99516461639541753,0.098221109108792809,-0.99636736039958307,0.085159163513783637,-0.99739866842354197,0.072082565346589952,-0.99825836301938797,0.058993564579976454,-0.99894629626719555,0.045894413320711293,-0.99946234980047133,0.032787365422068018,-0.9998064348265201,0.019674676096022633,-0.99997849214172274,0.0065586015252213246,-0.99997849214172274,-0.0065586015252210791,-0.9998064348265201,-0.019674676096022834,-0.99946234980047133,-0.03278736542206822,-0.99894629626719555,-0.045894413320711494,-0.99825836301938797,-0.058993564579976204,-0.99739866842354197,-0.072082565346590147,-0.99636736039958307,-0.085159163513783845,-0.99516461639541753,-0.098221109108793017,-0.99379064335640066,-0.11126615467998938,-0.99224567768972916,-0.12429205568357996,-0.99052998522376512,-0.1372965708698059,-0.9886438611622973,-0.15027746266857256,-0.98658763003374772,-0.16323249757445063,-0.98436164563533313,-0.1761594465309736,-0.98196629097219035,-0.1890560853141724,-0.97940197819147634,-0.20192019491527585,-0.97666914851145292,-0.21474956192251823,-0.97376827214557116,-0.2275419789019793,-0.97069984822156552,-0.24029524477739825,-0.96746440469557315,-0.25300716520889327,-0.96406249826129431,-0.26567555297052059,-0.96049471425420585,-0.27829822832661283,-0.95676166655084827,-0.29087301940682536,-0.95286399746320172,-0.30339776257983103,-0.9488023776281691,-0.31587030282559508,-0.94457750589218525,-0.32828849410617295,-0.9401901091909729,-0.34065019973495764,-0.93564094242446538,-0.35295329274432075,-0.93093078832691789,-0.36519565625158124,-0.92606045733222964,-0.37737518382323665,-0.92103078743449895,-0.38948977983740063,-0.91584264404383797,-0.40153735984437611,-0.91049691983746861,-0.41351585092530885,-0.90499453460612889,-0.42542319204885398,-0.89933643509581118,-0.43725733442580206,-0.8935235948448651,-0.44901624186159378,-0.88755701401648934,-0.46069789110667014,-0.88143771922664216,-0.47230027220459553,-0.87516676336740207,-0.483821388837891,-0.86874522542580424,-0.49525925867152504,-0.86217421029819052,-0.50661191369399472,-0.8554548486000989,-0.51787740055594411,-0.84858829647172906,-0.52905378090625998,-0.84157573537901598,-0.5401391317255847,-0.83441837191034496,-0.55113154565719535,-0.8271174375689454,-0.56202913133518428,-0.8196741885609965,-0.57283001370988929,-0.81208990557948446,-0.58353233437051633,-0.80436589358384347,-0.59413425186490043,-0.79650348157542405,-0.60463394201634768,-0.78850402236882355,-0.61502959823750425,-0.7803688923591191,-0.62531943184120031,-0.77209949128504507,-0.63550167234821242,-0.76369724198815037,-0.64557456779189537,-0.75516359016798473,-0.65553638501962641,-0.74650000413334916,-0.66538540999101392,-0.73770797454965831,-0.67511994807281517,-0.72878901418245357,-0.6847383243305194,-0.71974465763711626,-0.69423888381653642,-0.71057646109482131,-0.70361999185494994,-0.70128600204477931,-0.71288003432278124,-0.69187487901281275,-0.72201741792771579,-0.68234471128631069,-0.73103057048224818,-0.67269713863561365,-0.73991794117419396,-0.66293382103187237,-0.74867800083352343,-0.65305643836143212,-0.75730924219547258,-0.64306669013678919,-0.76581018015988445,-0.63296629520417069,-0.77417935204673771,-0.62275699144779084,-0.78241531784781426,-0.61244053549082444,-0.79051666047447233,-0.60201870239316357,-0.7984819860014698,-0.59149328534599843,-0.80630992390680478,-0.58086609536327838,-0.81399912730752899,-0.57013896097010763,-0.82154827319149426,-0.55931372788812728,-0.82895606264499078,-0.5483922587179384,-0.83622122107623986,-0.53737643261862045,-0.84334249843470188,-0.52626814498440422,-0.85031866942615941,-0.51506930711854371,-0.85714853372354516,-0.50378184590445863,-0.86383091617346985,-0.49240770347419222,-0.87036466699842086,-0.4809488368742455,-0.87674866199459378,-0.46940721772884636,-0.88298180272532423,-0.45778483190070968,-0.88906301671008614,-0.44608367914934793,-0.89499125760902354,-0.43430577278698945,-0.9007655054029855,-0.42245313933216933,-0.90638476656902989,-0.41052781816103967,-0.91184807425137238,-0.39853186115647576,-0.91715448842774328,-0.38646733235502612,-0.92230309607112881,-0.37433630759177222,-0.92729301130686737,-0.36214087414315838,-0.93212337556507463,-0.34988313036785262,-0.93679335772836914,-0.33756518534570129,-0.94130215427487596,-0.32518915851483732,-0.94564898941648112,-0.3127571793070113,-0.94983311523231384,-0.30027138678119419,-0.953853811797436,-0.28773392925553187,-0.9577103873067121,-0.27514696393770255,-0.96140217819384233,-0.26251265655374556,-0.96492854924553628,-0.24983318097542406,-0.96828889371080828,-0.23711071884618679,-0.97148263340537622,-0.22434745920579197,-0.97450921881114372,-0.21154559811365828,-0.97736812917075144,-0.19870733827101192,-0.98005887257717816,-0.18583488864188252,-0.9825809860583804,-0.17293046407302995,-0.98493403565695026,-0.1599962849128547,-0.98711761650478336,-0.14703457662936248,-0.98913135289274101,-0.13404756942724791,-0.9909748983352944,-0.12103749786416322,-0.99264793563014209,-0.1080066004662381,-0.9941501769127874,-0.094957119342916466,-0.9954813637060691,-0.081891299801176043,-0.99664126696463551,-0.068811389959202093,-0.9976296871143534,-0.055719640359568563,-0.99844645408664767,-0.042618303582011047,-0.99909142734776357,-0.029509633855844705,-0.99956449592294638,-0.016395886672099277,-0.99986557841553669,-0.0032793183954370141,-0.99999462302097475,0.0098378141240797173,-0.99995160753571477,0.022953253939304353,-0.99973653936104478,0.03606474439433964,-0.99934945550181342,0.049170029512816578,-0.99879042256006278,0.06226685438606535,-0.99805953672356873,0.075352965561093652,-0.99715692374929066,0.088426111428318951,-0.99608273894173394,0.10148404260898276,-0.99483716712622783,0.11452451234218103,-0.99342042261712415,0.1275452768714441,-0.99183274918092246,0.14054409583079966,-0.99007441999432699,0.15351873263025342,-0.98814573759724367,0.16646695484061541,-0.98604703384072534,0.1793865345776193,-0.98377866982987217,0.19227524888525099,-0.98134103586170018,0.20513088011823349,-0.97873455135798637,0.21795121632359726,-0.97595966479310226,0.23073405162127103,-0.97301685361684909,0.24347718658362785,-0.96990662417230722,0.25617842861392076,-0.96662951160871469,0.26883559232354415,-0.96318607978938797,0.28144649990805037,-0.95957692119470428,0.29400898152187033,-0.95580265682015786,0.30652087565165581,-0.95186393606951103,0.31898002948819232,-0.94776143664305734,0.33138429929681396,-0.94349586442101574,0.34373155078625633,-0.93906795334207593,0.3560196594758851,-0.93447846527711642,0.36824651106123596,-0.9297281898981159,0.38041000177780515,-0.92481794454228139,0.39250803876302187,-0.91974857407141775,0.40453854041635318,-0.91452095072655748,0.41649943675746331,-0.90913597397788404,0.42838866978237711,-0.90359457036996715,0.44020419381758247,-0.89789769336234082,0.45194397587201079,-0.89204632316545052,0.46360599598683588,-0.88604146657199623,0.47518824758302963,-0.87988415678370369,0.4866887378066172,-0.87357545323354968,0.49810548787156617,-0.86711644140347666,0.50943653340026329,-0.86050823263762122,0.52067992476150393,-0.85375196395109665,0.53183372740594892,-0.84684879783435651,0.54289602219898425,-0.83979992205317566,0.55386490575093028,-0.8326065494442817,0.56473849074453986,-0.82526991770667324,0.57551490625973301,-0.81779128918866018,0.58619229809550955,-0.81017195067066183,0.59676882908898177,-0.80241321314380509,0.60724267943148358,-0.79451641158435016,0.61761204698168493,-0.78648290472399529,0.62787514757567109,-0.77831407481609194,0.63803021533392812,-0.77001132739781264,0.64807550296518113,-0.76157609104831248,0.65800928206703579,-0.75300981714292681,0.66782984342336849,-0.74431397960344614,0.67753549729841633,-0.73549007464451055,0.68712457372751268,-0.72653962051617249,0.69659542280442666,-0.71746415724266122,0.70594641496524502,-0.70826524635740684,0.71517594126875694,-0.69894447063436127,0.72428241367329094,-0.68950343381566404,0.73326426530995403,-0.67994376033570103,0.74211995075222925,-0.67026709504160265,0.75084794628188334,-0.66047510291022937,0.75944675015113872,-0.65056946876169486,0.76791488284106724,-0.64055189696947279,0.77625088731615444,-0.63042411116714359,0.78445332927500266,-0.62018785395182019,0.79252079739711612,-0.60984488658431768,0.80045190358573393,-0.59939698868610858,0.80824528320666855,-0.58884595793311867,0.81589959532310519,-0.57819360974641798,0.82341352292632553,-0.56744177697985687,0.83078577316231295,-0.55659230960470341,0.83801507755420301,-0.54564707439133509,0.84510019222053712,-0.53460795458804311,0.85203989808928882,-0.52347684959699436,0.8588330011076164,-0.5122556746474215,0.86547833244731376,-0.50094636046608521,0.87197474870591973,-0.48955085294507261,0.87832113210345342,-0.47807111280698394,0.8845163906747403,-0.46650911526756922,0.89055945845729712,-0.4548668496958706,0.89644929567474263,-0.44314631927192849,0.90218488891570103,-0.43134954064211567,0.9077652513081732,-0.41947854357214648,0.91318942268933689,-0.40753537059783601,0.91845646977075412,-0.39552207667365896,0.92356548629895341,-0.38344072881917174,0.9285155932113609,-0.37129340576335934,0.93330593878755241,-0.35908219758696674,0.93793569879580196,-0.34680920536287774,0.94240407663489945,-0.33447654079460132,0.9467103034712141,-0.32208632585293306,0.95085363837098213,-0.3096406924108418,0.95483336842779165,-0.29714178187666079,0.95864880888524628,-0.28459174482563365,0.96229930325478485,-0.27199274062988454,0.96578422342863768,-0.2593469370868744,0.96910296978789956,-0.24665651004640715,0.97225497130570049,-0.23392364303625127,0.97523968564545749,-0.22115052688643849,0.97805659925418864,-0.20833935935231107,0.98070522745087718,-0.19549234473636851,0.98318511450986501,-0.18261169350899648,0.9854958337392653,-0.16969962192813018,0.98763698755438023,-0.15675835165792276,0.98960820754610923,-0.14379010938648351,0.99140915454433787,-0.13079712644275168,0.99303951867629625,-0.11778163841257168,0.99449901941987573,-0.1047458847540351,0.99578740565189539,-0.091692108412160786,0.99690445569131159,-0.078622555432966132,0.99784997733735958,-0.065539474577013646,0.99862380790262451,-0.052445116932486095,0.99922581424103318,-0.039341735527861896,0.9996558927707635,-0.026231584944256817,0.99991396949206668,-0.013116920927498445,0.99991396949206668,-0.013116920927498445,0.99985344960120259,0.017119559590581007,0.99941384135884914,0.034234101424591538,0.99868130412246603,0.051338609216169589,0.99765605259930157,0.068428069620438958,0.9963383872913949,0.085497473702924709,0.99472869440749889,0.10254181840767579,0.99282744574988147,0.11955610802366474,0.99063519857604077,0.13653535564903463,0.98815259543537182,0.1534745846527639,0.98538036398083539,0.17036883013332091,0.98231931675568185,0.18721314037388051,0.9789703509552945,0.20400257829367635,0.97533444816422032,0.22073222289506286,0.97141267406846765,0.23739717070586397,0.96720617814315168,0.25399253721658438,0.96271619331558322,0.27051345831206353,0.95794403560389663,0.28695509169715128,0.95289110373132324,0.30331261831598866,0.94755887871622513,0.31958124376447705,0.94194892343800729,0.33575619969552173,0.9360628821790361,0.35183274521663827,0.92990248014269938,0.36780616827951174,0.92346952294774742,0.38367178706110228,0.91676589609906489,0.39942495133589057,0.90979356443502801,0.41506104383886294,0.90255457155160856,0.43057548161883569,0.89505103920339446,0.44596371738172108,0.88728516668170176,0.46122124082334359,0.87925923016996066,0.47634357995141308,0.870975582076564,0.49132630239626957,0.86243665034537509,0.50616501671001446,0.85364493774409489,0.52085537365364709,0.84460302113069918,0.53539306747183024,0.83531355069815894,0.54977383715491057,0.82577924919766743,0.56399346768782399,0.81600291114059875,0.57804779128551997,0.80598740197943508,0.59193268861454218,0.79573565726789974,0.60564409000040909,0.78525068180054469,0.61917797662043805,0.77453554873204189,0.63253038168166653,0.76359339867644016,0.64569739158352124,0.75242743878664831,0.65867514706489783,0.74104094181441571,0.6714598443353138,0.72943724515108699,0.68404773618980208,0.71761974984940902,0.69643513310722027,0.70559191962668033,0.70861840433165169,0.69335727984953266,0.72059397893658317,0.68091941650064292,0.73235834687154622,0.66828197512767906,0.74390805999091592,0.65544865977478695,0.75523973306456504,0.6424232318969324,0.76635004477007773,0.62920950925741537,0.77723573866623141,0.61581136480888088,0.78789362414746278,0.60223272555815277,0.79832057737903672,0.58847757141522594,0.80851354221264449,0.57454993402675059,0.81846953108216347,0.56045389559435388,0.82818562587931521,0.54619358767814352,0.837658978808965,0.5317731899857433,0.84688681322381354,0.51719692914721893,0.85586642443823358,0.50246907747624769,0.86459518052101625,0.48759395171790154,0.87307052306679145,0.4725759117834043,0.8812899679458992,0.45741935947223938,0.88925110603248969,0.44212873718197787,0.89695160391063999,0.4267085266062085,0.90438920455828009,0.41116324742095056,0.91156172800872803,0.39549745595993163,0.91846707198963962,0.37971574387912432,0.92510321253918648,0.36382273681092675,0.93146820459928048,0.34782309300838654,0.93756018258567231,0.33172150197986383,0.9433773609347551,0.3155226831145313,0.94891803462691504,0.29923138429911883,0.95418057968627357,0.2828523805263029,0.95916345365667655,0.26639047249515285,0.96386519605378906,0.24985048520404307,0.96828442879316423,0.23323726653644053,0.97241985659416141,0.21655568583998708,0.97627026735959388,0.19981063249929043,0.97983453253099495,0.18300701450284013,0.9831116074194004,0.16614975700447379,0.98610053151154642,0.14924380087980924,0.98880042875139762,0.13229410127807054,0.99121050779691977,0.11530562616973034,0.99333006225202225,0.098283354890392402,0.99515847087360376,0.081232276681346027,0.9966951977536388,0.064157389227213896,0.99793979247625342,0.047063697191127456,0.99889189024974168,0.029956210747856746,0.99955121201348662,0.012839944115322698,0.99991756451975344,-0.0042800859150723992,0.99999084039033059,-0.021398861448872014,0.99977101814800173,-0.038511364959313565,0.99925816222284147,-0.055612580757968856,0.99845242293333059,-0.072697496464847897,0.99735403644229736,-0.089761104477529718,0.99596332468769855,-0.1067984034388962,0.99428069528825846,-0.12380439970303309,0.99230664142399627,-0.14077410879887106,0.99004174169167414,-0.15770255689113935,0.9874866599352099,-0.17458478223820034,0.98464214505110448,-0.19141583664633918,0.98150903076893892,-0.20819078692008491,0.97808823540700851,-0.22490471630813225,0.97438076160316223,-0.24155272594444682,0.970387696020929,-0.25812993628412612,0.96611020903101574,-0.27463148853359715,0.96154955436827105,-0.29105254607473457,0.95670706876421396,-0.30738829588247529,0.95158417155523756,-0.32363394993552153,0.94618236426659974,-0.33978474661971309,0.94050323017232507,-0.35583595212365965,0.93454843383114639,-0.37178286182622605,0.92831972059862078,-0.38762080167545893,0.92181891611556477,-0.40334512955855634,0.91504792577295724,-0.4189512366624743,0.90800873415346806,-0.434434548824773,0.90070340444977559,-0.4497905278743084,0.89313407785984233,-0.46501467296137322,0.88530297295932936,-0.48010252187690017,0.8772123850513287,-0.49504965236033732,0.86886468549360962,-0.50985168339581854,0.86026232100357036,-0.52450427649624143,0.85140781294110424,-0.53900313697488134,0.84230375656958656,-0.5533440152041682,0.8329528202952009,-0.56752270786125403,0.82335774488482816,-0.58153505916001247,0.81352134266272369,-0.59537696206910184,0.80344649668622448,-0.6090443595157391,0.79313615990072173,-0.62253324557483203,0.78259335427415044,-0.63583966664311731,0.77182116991124927,-0.64895972259796708,0.76082276414784644,-0.66188956794051634,0.74960136062544369,-0.67462541292278266,0.7381602483463634,-0.68716352465844388,0.72650278070973984,-0.69950022821694924,0.71463237452863548,-0.71163190770064644,0.70255250902856969,-0.72355500730460276,0.69026672482775542,-0.73526603235881427,0.67777862289934099,-0.74676155035249725,0.66509186351596172,-0.75803819194015853,0.65221016517691233,-0.76909265192915488,0.63913730351825015,-0.77992169024844638,0.62587711020615422,-0.79052213289826456,0.61243347181386043,-0.80089087288041416,0.59881032868250395,-0.81102487110893573,0.58501167376620289,-0.82092115730086612,0.57104155146171864,-0.8305768308468291,0.55690405642304119,-0.83998906166120713,0.54260333236124236,-0.84915509101164122,0.52814357082995078,-0.85807223232761842,0.51352900999680406,-0.86673787198790608,0.49876393340123953,-0.87514947008660848,0.48385266869898358,-0.8833045611776138,0.46879958639361352,-0.89120075499721885,0.45360909855555936,-0.89883573716471721,0.4382856575289219,-0.90620726986074562,0.42283375462648876,-0.91331319248319165,0.40725791881332457,-0.92015142228046698,0.39156271537932935,-0.92671995496196391,0.3757527446011481,-0.93301686528551453,0.35983264039382534,-0.93904030762168045,0.34380706895260293,-0.94478851649470863,0.32768072738525172,-0.9502598070999938,0.31145834233534747,-0.95545257579789566,0.29514466859688721,-0.96036530058376723,0.27874448772065485,-0.96499654153405523,0.26226260661274686,-0.96934494122834325,0.24570385612566134,-0.97340922514721284,0.22907308964237327,-0.97718820204580548,0.21237518165380354,-0.98068076430297835,0.19561502633010125,-0.98388588824594803,0.17879753608616053,-0.98680263445033045,0.16192764014178498,-0.9894301480154869,0.1450102830769312,-0.99176765881509554,0.12805042338244813,-0.99381448172287679,0.11105303200673884,-0.99557001681340374,0.094023090898773518,-0.99703374953794111,0.076965591547873413,-0.99820525087526002,0.059885533520703284,-0.99908417745738398,0.042787922995893839,-0.99967027167023081,0.025677771296726427,-0.99996336172911915,0.0085600934223119315,-0.99996336172911915,-0.008560093422312131,-0.99967027167023081,-0.025677771296726628,-0.99908417745738398,-0.042787922995893596,-0.99820525087526002,-0.059885533520703485,-0.99703374953794111,-0.076965591547873621,-0.99557001681340374,-0.094023090898773712,-0.99381448172287679,-0.11105303200673905,-0.99176765881509554,-0.12805042338244788,-0.9894301480154869,-0.1450102830769314,-0.98680263445033045,-0.16192764014178518,-0.98388588824594803,-0.17879753608616072,-0.98068076430297835,-0.19561502633010147,-0.97718820204580548,-0.21237518165380329,-0.97340922514721284,-0.22907308964237305,-0.96934494122834325,-0.24570385612566153,-0.96499654153405523,-0.26226260661274703,-0.96036530058376723,-0.27874448772065502,-0.95545257579789578,-0.29514466859688698,-0.95025980709999391,-0.31145834233534725,-0.94478851649470852,-0.32768072738525195,-0.93904030762168034,-0.3438070689526031,-0.93301686528551442,-0.35983264039382551,-0.92671995496196402,-0.37575274460114783,-0.92015142228046709,-0.39156271537932913,-0.91331319248319154,-0.40725791881332474,-0.90620726986074562,-0.42283375462648892,-0.8988357371647171,-0.43828565752892212,-0.89120075499721896,-0.45360909855555914,-0.88330456117761391,-0.4687995863936133,-0.87514947008660837,-0.48385266869898375,-0.86673787198790597,-0.4987639334012397,-0.85807223232761831,-0.51352900999680418,-0.84915509101164133,-0.52814357082995067,-0.83998906166120724,-0.54260333236124214,-0.83057683084682898,-0.5569040564230413,-0.82092115730086601,-0.57104155146171875,-0.81102487110893562,-0.585011673766203,-0.80089087288041394,-0.59881032868250406,-0.79052213289826467,-0.61243347181386021,-0.77992169024844626,-0.62587711020615433,-0.76909265192915477,-0.63913730351825038,-0.75803819194015842,-0.65221016517691255,-0.74676155035249725,-0.66509186351596183,-0.73526603235881438,-0.67777862289934088,-0.72355500730460265,-0.69026672482775564,-0.71163190770064633,-0.7025525090285698,-0.69950022821694913,-0.71463237452863559,-0.68716352465844377,-0.72650278070973984,-0.67462541292278289,-0.73816024834636329,-0.66188956794051623,-0.74960136062544391,-0.64895972259796686,-0.76082276414784666,-0.63583966664311742,-0.77182116991124905,-0.62253324557483181,-0.78259335427415055,-0.60904435951573888,-0.79313615990072184,-0.59537696206910196,-0.80344649668622437,-0.58153505916001236,-0.81352134266272391,-0.56752270786125425,-0.82335774488482805,-0.55334401520416798,-0.83295282029520101,-0.53900313697488123,-0.84230375656958667,-0.52450427649624165,-0.85140781294110413,-0.50985168339581843,-0.86026232100357047,-0.49504965236033749,-0.86886468549360951,-0.4801025218769,-0.87721238505132881,-0.46501467296137305,-0.88530297295932947,-0.44979052787430862,-0.89313407785984222,-0.43443454882477284,-0.90070340444977559,-0.41895123666247452,-0.90800873415346794,-0.40334512955855634,-0.91504792577295724,-0.38762080167545854,-0.92181891611556488,-0.37178286182622611,-0.92831972059862078,-0.35583595212365948,-0.9345484338311465,-0.33978474661971331,-0.94050323017232496,-0.32363394993552153,-0.94618236426659963,-0.3073882958824749,-0.95158417155523767,-0.29105254607473463,-0.95670706876421396,-0.27463148853359698,-0.96154955436827116,-0.25812993628412634,-0.96611020903101574,-0.24155272594444685,-0.970387696020929,-0.22490471630813183,-0.97438076160316234,-0.20819078692008494,-0.97808823540700851,-0.19141583664633899,-0.98150903076893903,-0.17458478223820059,-0.98464214505110437,-0.15770255689113938,-0.9874866599352099,-0.14077410879887065,-0.99004174169167425,-0.12380439970303311,-0.99230664142399627,-0.10679840343889599,-0.99428069528825858,-0.089761104477529968,-0.99596332468769855,-0.072697496464847702,-0.99735403644229736,-0.055612580757968433,-0.99845242293333059,-0.038511364959313593,-0.99925816222284147,-0.021398861448871816,-0.99977101814800173,-0.0042800859150726438,-0.99999084039033059,0.012839944115322898,-0.99991756451975344,0.029956210747857166,-0.99955121201348651,0.047063697191127428,-0.99889189024974168,0.064157389227214104,-0.99793979247625342,0.081232276681345778,-0.99669519775363891,0.09828335489039261,-0.99515847087360365,0.11530562616973075,-0.99333006225202225,0.13229410127807051,-0.99121050779691977,0.14924380087980943,-0.98880042875139762,0.16614975700447354,-0.98610053151154642,0.18300701450284032,-0.9831116074194004,0.19981063249929085,-0.97983453253099495,0.21655568583998705,-0.97627026735959388,0.23323726653644072,-0.9724198565941613,0.24985048520404285,-0.96828442879316423,0.26639047249515307,-0.96386519605378895,0.28285238052630329,-0.95916345365667643,0.29923138429911883,-0.95418057968627357,0.31552268311453169,-0.94891803462691493,0.33172150197986361,-0.94337736093475522,0.34782309300838671,-0.93756018258567231,0.36382273681092714,-0.93146820459928037,0.37971574387912432,-0.92510321253918648,0.39549745595993202,-0.91846707198963951,0.41116324742095034,-0.91156172800872803,0.42670852660620867,-0.90438920455827998,0.44212873718197743,-0.89695160391064011,0.45741935947223938,-0.88925110603248969,0.47257591178340463,-0.88128996794589898,0.48759395171790132,-0.87307052306679156,0.50246907747624781,-0.86459518052101614,0.51719692914721849,-0.8558664244382338,0.5317731899857433,-0.84688681322381354,0.54619358767814374,-0.83765897880896489,0.56045389559435377,-0.82818562587931532,0.57454993402675081,-0.81846953108216336,0.58847757141522572,-0.80851354221264471,0.60223272555815277,-0.79832057737903672,0.6158113648088811,-0.78789362414746267,0.62920950925741537,-0.77723573866623152,0.64242323189693262,-0.76635004477007762,0.65544865977478672,-0.75523973306456527,0.66828197512767906,-0.74390805999091592,0.68091941650064325,-0.73235834687154588,0.69335727984953266,-0.72059397893658317,0.70559191962668055,-0.70861840433165157,0.71761974984940879,-0.69643513310722049,0.72943724515108699,-0.68404773618980208,0.74104094181441593,-0.67145984433531347,0.7524274387866482,-0.65867514706489794,0.76359339867644027,-0.64569739158352102,0.77453554873204167,-0.63253038168166686,0.78525068180054469,-0.61917797662043805,0.79573565726789997,-0.60564409000040875,0.80598740197943497,-0.59193268861454229,0.81600291114059886,-0.57804779128551986,0.82577924919766721,-0.56399346768782432,0.83531355069815905,-0.54977383715491057,0.84460302113069941,-0.53539306747182991,0.85364493774409489,-0.5208553736536472,0.8624366503453752,-0.50616501671001435,0.87097558207656378,-0.4913263023962699,0.87925923016996066,-0.47634357995141302,0.88728516668170199,-0.4612212408233432,0.89505103920339446,-0.44596371738172119,0.90255457155160868,-0.43057548161883547,0.9097935644350279,-0.41506104383886322,0.91676589609906489,-0.39942495133589045,0.92346952294774753,-0.38367178706110189,0.92990248014269938,-0.36780616827951185,0.93606288217903622,-0.35183274521663804,0.94194892343800718,-0.33575619969552201,0.94755887871622513,-0.319581243764477,0.95289110373132335,-0.30331261831598827,0.95794403560389652,-0.28695509169715139,0.96271619331558334,-0.2705134583120633,0.96720617814315157,-0.25399253721658466,0.97141267406846765,-0.23739717070586389,0.97533444816422044,-0.22073222289506242,0.9789703509552945,-0.20400257829367643,0.98231931675568196,-0.18721314037388026,0.98538036398083539,-0.17036883013332116,0.98815259543537182,-0.15347458465276381,0.99063519857604077,-0.13653535564903418,0.99282744574988147,-0.11955610802366483,0.99472869440749889,-0.10254181840767551,0.9963383872913949,-0.085497473702924959,0.99765605259930157,-0.068428069620438861,0.99868130412246603,-0.051338609216169125,0.99941384135884914,-0.034234101424591615,0.99985344960120259,-0.017119559590580719,0.99985344960120259,-0.017119559590580719]} diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/generic/cffti/test/fixtures/c/fftpack/medium.json b/lib/node_modules/@stdlib/fft/base/fftpack/generic/cffti/test/fixtures/c/fftpack/medium.json new file mode 100644 index 000000000000..7ee633c728ff --- /dev/null +++ b/lib/node_modules/@stdlib/fft/base/fftpack/generic/cffti/test/fixtures/c/fftpack/medium.json @@ -0,0 +1 @@ +{"lengths":[20,124,61,43,33,117,92,31,67,48],"offsets":[0,40,288,410,496,562,796,980,1042,1176],"twiddles":[1,0,0.95105651629515353,0.3090169943749474,0.80901699437494745,0.58778525229247314,0.58778525229247314,0.80901699437494745,0.30901699437494745,0.95105651629515353,1,0,0.80901699437494745,0.58778525229247314,0.30901699437494745,0.95105651629515353,-0.30901699437494734,0.95105651629515364,-0.80901699437494734,0.58778525229247325,1,0,0.58778525229247314,0.80901699437494745,-0.30901699437494734,0.95105651629515364,-0.95105651629515353,0.30901699437494751,-0.80901699437494745,-0.58778525229247303,1,0,1,0,1,0,1,0,0.30901699437494723,-0.95105651629515364,1,0,0.99871650717105276,0.050649168838712712,0.99486932339189516,0.10116832198743217,0.98846832432811138,0.15142777750457667,0.97952994125249448,0.20129852008866006,0.96807711886620429,0.25065253225872053,0.95413925640004882,0.29936312297335793,0.93775213214708042,0.34730525284482028,0.9189578116202306,0.39435585511331855,0.89780453957074169,0.44039415155763428,0.87434661614458209,0.48530196253108104,0.84864425749475092,0.5289640103269625,0.82076344120727629,0.57126821509479231,0.79077573693769854,0.6121059825476628,0.75875812269279097,0.65137248272222226,0.72479278722911999,0.68896691907568652,0.68896691907568663,0.72479278722911999,0.65137248272222226,0.75875812269279086,0.61210598254766291,0.79077573693769854,0.57126821509479231,0.82076344120727629,0.52896401032696239,0.84864425749475092,0.48530196253108099,0.87434661614458209,0.44039415155763428,0.89780453957074169,0.39435585511331855,0.9189578116202306,0.34730525284482028,0.93775213214708042,0.29936312297335799,0.95413925640004882,0.25065253225872053,0.96807711886620429,0.20129852008866012,0.97952994125249448,0.1514277775045767,0.98846832432811138,0.10116832198743222,0.99486932339189516,0.050649168838712767,0.99871650717105276,1,0,0.99486932339189516,0.10116832198743217,0.97952994125249448,0.20129852008866006,0.95413925640004882,0.29936312297335793,0.9189578116202306,0.39435585511331855,0.87434661614458209,0.48530196253108104,0.82076344120727629,0.57126821509479231,0.75875812269279097,0.65137248272222226,0.68896691907568663,0.72479278722911999,0.61210598254766291,0.79077573693769854,0.52896401032696239,0.84864425749475092,0.44039415155763428,0.89780453957074169,0.34730525284482028,0.93775213214708042,0.25065253225872053,0.96807711886620429,0.1514277775045767,0.98846832432811138,0.050649168838712767,0.99871650717105276,-0.050649168838712642,0.99871650717105276,-0.15142777750457659,0.98846832432811138,-0.25065253225872042,0.96807711886620429,-0.34730525284482017,0.93775213214708053,-0.44039415155763439,0.89780453957074158,-0.5289640103269625,0.84864425749475092,-0.61210598254766291,0.79077573693769854,-0.68896691907568663,0.72479278722911999,-0.75875812269279097,0.65137248272222226,-0.82076344120727629,0.57126821509479231,-0.87434661614458209,0.48530196253108104,-0.9189578116202306,0.39435585511331861,-0.95413925640004882,0.29936312297335804,-0.97952994125249448,0.20129852008866017,-0.99486932339189516,0.10116832198743228,1,0,0.98846832432811138,0.15142777750457667,0.95413925640004882,0.29936312297335793,0.89780453957074169,0.44039415155763434,0.82076344120727629,0.57126821509479231,0.72479278722911999,0.68896691907568652,0.6121059825476628,0.79077573693769865,0.48530196253108099,0.87434661614458209,0.34730525284482028,0.93775213214708042,0.20129852008866012,0.97952994125249448,0.050649168838712767,0.99871650717105276,-0.1011683219874321,0.99486932339189516,-0.25065253225872064,0.96807711886620429,-0.39435585511331867,0.9189578116202306,-0.5289640103269625,0.84864425749475092,-0.65137248272222203,0.75875812269279108,-0.75875812269279097,0.65137248272222226,-0.84864425749475103,0.52896401032696228,-0.9189578116202306,0.39435585511331861,-0.96807711886620429,0.25065253225872042,-0.99486932339189516,0.10116832198743228,-0.99871650717105276,-0.050649168838712802,-0.97952994125249448,-0.20129852008865992,-0.93775213214708042,-0.34730525284482033,-0.87434661614458198,-0.48530196253108121,-0.79077573693769854,-0.6121059825476628,-0.68896691907568641,-0.72479278722912011,-0.57126821509479231,-0.82076344120727629,-0.44039415155763423,-0.89780453957074169,-0.29936312297335765,-0.95413925640004893,-0.15142777750457703,-0.98846832432811138,0.97952994125249448,0.20129852008866006,0.9189578116202306,0.39435585511331855,0.82076344120727629,0.57126821509479231,0.68896691907568663,0.72479278722911999,0.52896401032696239,0.84864425749475092,0.34730525284482028,0.93775213214708042,0.1514277775045767,0.98846832432811138,-0.050649168838712642,0.99871650717105276,-0.25065253225872042,0.96807711886620429,-0.44039415155763439,0.89780453957074158,-0.61210598254766291,0.79077573693769854,-0.75875812269279097,0.65137248272222226,-0.87434661614458209,0.48530196253108104,-0.95413925640004882,0.29936312297335804,-0.99486932339189516,0.10116832198743228,-0.99486932339189516,-0.10116832198743204,-0.95413925640004893,-0.29936312297335776,-0.8743466161445822,-0.48530196253108082,-0.75875812269279108,-0.65137248272222203,-0.61210598254766269,-0.79077573693769865,-0.44039415155763423,-0.89780453957074169,-0.25065253225872047,-0.96807711886620429,-0.050649168838712663,-0.99871650717105276,0.15142777750457667,-0.98846832432811138,0.34730525284482028,-0.93775213214708042,0.52896401032696239,-0.84864425749475103,0.68896691907568652,-0.72479278722911999,0.82076344120727629,-0.57126821509479242,0.9189578116202306,-0.39435585511331872,0.97952994125249448,-0.20129852008866028,0.97952994125249448,-0.20129852008866028,0.99469987561458906,0.1028209971373604,0.97885568509535781,0.2045520661262008,0.95263538080338261,0.30411483232751785,0.91631690448700476,0.40045390565126643,0.87028524103015525,0.4925480679538643,0.81502833751681136,0.57942109820456367,0.75113193087051988,0.66015212067123175,0.67927333889729313,0.73388536643219904,0.60021428054836834,0.79983924473971935,0.51479280150983087,0.85731462807633219,0.42391439070986076,0.90570226308047141,0.32854238191083485,0.94448922878366126,0.22968774213179574,0.97326437370038243,0.12839835514655099,0.99172267413610149,0.025747913654988658,0.99966846751431304,-0.07717546212664618,0.9970175264485267,-0.17928075881073544,0.98379795157351635,-0.27948563485160915,0.96014987367160187,-0.376727893635185,0.92632396825149499,-0.46997674302731968,0.88267879832554763,-0.55824372202686456,0.82967701355261902,-0.64059317869817511,0.76788044603660011,-0.71615218831439309,0.69794415476634386,-0.78411980657671032,0.62060948182742304,-0.84377555982318564,0.53669619399160051,-0.89448708222879547,0.44709379298511426,-0.93571681904049353,0.35275208654909501,-0.96702772479132038,0.25467112024122879,-0.98808789609107706,0.15389057670406214,-0.99867408988483053,0.051478754770346732,-0.99867408988483053,-0.051478754770346045,-0.98808789609107717,-0.15389057670406148,-0.96702772479132038,-0.25467112024122857,-0.93571681904049386,-0.35275208654909435,-0.89448708222879569,-0.44709379298511365,-0.84377555982318597,-0.53669619399159996,-0.78411980657671065,-0.62060948182742248,-0.71615218831439353,-0.69794415476634331,-0.64059317869817523,-0.7678804460366,-0.55824372202686545,-0.82967701355261847,-0.46997674302732068,-0.88267879832554708,-0.37672789363518561,-0.92632396825149477,-0.27948563485160982,-0.96014987367160165,-0.17928075881073591,-0.98379795157351635,-0.07717546212664643,-0.9970175264485267,0.025747913654987745,-0.99966846751431315,0.12839835514655029,-0.9917226741361016,0.22968774213179508,-0.97326437370038266,0.3285423819108344,-0.94448922878366137,0.42391439070986053,-0.90570226308047153,0.51479280150982998,-0.85731462807633274,0.60021428054836767,-0.79983924473971979,0.67927333889729269,-0.73388536643219959,0.75113193087051955,-0.66015212067123208,0.81502833751681114,-0.57942109820456389,0.87028524103015514,-0.49254806795386452,0.91631690448700442,-0.40045390565126726,0.95263538080338228,-0.30411483232751857,0.9788556850953577,-0.20455206612620136,0.99469987561458906,-0.1028209971373608,0.99469987561458906,-0.1028209971373608,0.98934336807511025,0.14560116773500487,0.95760059990840596,0.28809909936523759,0.90544823749314662,0.42445669887581505,0.83399781788987792,0.55176774077044588,0.74477218274378187,0.66731881122223946,0.63967302155889127,0.76864713977853205,0.52094034048793025,0.85359308903734643,0.39110472049015599,0.92034618356915943,0.25293338239168067,0.96748369705742532,0.1093712083778743,0.99400097523994591,-0.036522023057658948,0.99933284837023939,-0.18163685097943635,0.98336567682946618,-0.32288040477144619,0.94643977315760941,-0.45724232330463849,0.88934214888251895,-0.58185891555795299,0.81328974073556526,-0.69407419522063396,0.71990347375799579,-0.79149648842925402,0.61117371409784937,-0.87204940814380771,0.48941784781108544,-0.93401610873254792,0.35723088980113288,-0.97607587755592717,0.21743017558155681,-0.99733228366355164,0.072995314660907556,-0.99733228366355164,-0.072995314660907751,-0.97607587755592717,-0.217430175581557,-0.93401610873254803,-0.35723088980113266,-0.8720494081438076,-0.4894178478110856,-0.79149648842925413,-0.61117371409784926,-0.69407419522063374,-0.71990347375799602,-0.58185891555795288,-0.81328974073556537,-0.45724232330463871,-0.88934214888251883,-0.32288040477144575,-0.94643977315760952,-0.18163685097943616,-0.98336567682946618,-0.036522023057658747,-0.99933284837023939,0.10937120837787428,-0.99400097523994591,0.25293338239168045,-0.96748369705742532,0.39110472049015638,-0.92034618356915932,0.52094034048793048,-0.85359308903734632,0.63967302155889127,-0.76864713977853205,0.74477218274378176,-0.66731881122223957,0.83399781788987826,-0.55176774077044544,0.90544823749314673,-0.42445669887581478,0.95760059990840596,-0.28809909936523742,0.98934336807511014,-0.14560116773500492,0.98934336807511014,-0.14560116773500492,1,0,0.98192869726270671,0.18925124436041019,0.92836793301607268,0.37166245566032752,0.84125353283118121,0.54064081745559756,0.7237340381050702,0.69007901148211193,0.58005690957119826,0.81457595205033562,0.41541501300188644,0.90963199535451833,0.23575893550942728,0.97181156832354165,0.047581915823742403,0.99886733918300796,-0.142314838273285,0.9898214418809328,-0.32706796331742144,0.94500081871466857,1,0,0.92836793301607268,0.37166245566032752,0.7237340381050702,0.69007901148211193,0.41541501300188644,0.90963199535451833,0.047581915823742403,0.99886733918300796,-0.32706796331742144,0.94500081871466857,-0.6548607339452851,0.75574957435425827,-0.88883544865492337,0.45822652172741052,-0.99547192257308459,0.09505604330418288,-0.95949297361449748,-0.28173255684142939,-0.78605309474278773,-0.61815898622060494,0.84125353283118121,0.54064081745559756,0.41541501300188644,0.90963199535451833,-0.142314838273285,0.9898214418809328,-0.6548607339452851,0.75574957435425827,-0.95949297361449726,0.28173255684143006,-0.95949297361449748,-0.28173255684142939,-0.65486073394528521,-0.75574957435425816,-0.14231483827328523,-0.98982144188093268,0.41541501300188605,-0.90963199535451855,0.84125353283118076,-0.54064081745559822,0.84125353283118076,-0.54064081745559822,1,0,0.99855837056414176,0.053676629703121592,0.99423763884742788,0.10719849578744782,0.98705026263791285,0.16041128085776024,0.97701696500181712,0.21316155867941614,0.96416667453356242,0.26529723654590076,0.94853644194714548,0.31666799380147248,0.93017133324933832,0.36712571525452753,0.90912429980272369,0.4165249182320398,0.88545602565320991,0.46472317204376856,0.85923475256221682,0.51158150864680996,0.83053608324801165,0.55696482332643937,0.79944276340350118,0.60074226423797883,0.76604444311897801,0.64278760968653925,0.73043741839770315,0.68297963205684165,0.69272435350959938,0.72120244734381456,0.65301398498358509,0.75734584927617976,0.61142080809201205,0.7913056270696619,0.56806474673115581,0.82298386589365635,0.52307080764957758,0.85228922918503347,0.47656872002130779,0.8791372219950947,0.42869256140305423,0.90345043461038221,0.37958037115389626,0.92515876574492362,0.32937375243207967,0.94419962466038454,0.27821746391645275,0.96051811163137224,0.22625900242972208,0.97406717623555461,0.17364817766693041,0.98480775301220802,0.12053668025532301,0.99270887409805397,0.067077644391002403,0.99774775851562514,0.013425206313397397,0.99990987785672103,-0.040265940109415123,0.99918899817156959,-0.093840989403179392,0.99558719794291872,-0.14714547083171609,0.98911486209323163,-0.20002569377604434,0.97979065204226767,-0.25232919086422184,0.96764145190137818,-0.3039051575742468,0.95270229095965342,-0.35460488704253568,0.93501624268541483,-0.40428219882430499,0.91463430053425454,-0.45279386036963715,0.89161523092170292,1,0,0.99423763884742788,0.10719849578744782,0.97701696500181712,0.21316155867941614,0.94853644194714548,0.31666799380147248,0.90912429980272369,0.4165249182320398,0.85923475256221682,0.51158150864680996,0.79944276340350118,0.60074226423797883,0.73043741839770315,0.68297963205684165,0.65301398498358509,0.75734584927617976,0.56806474673115581,0.82298386589365635,0.47656872002130779,0.8791372219950947,0.37958037115389626,0.92515876574492362,0.27821746391645275,0.96051811163137224,0.17364817766693041,0.98480775301220802,0.067077644391002403,0.99774775851562514,-0.040265940109415123,0.99918899817156959,-0.14714547083171609,0.98911486209323163,-0.25232919086422184,0.96764145190137818,-0.35460488704253568,0.93501624268541483,-0.45279386036963715,0.89161523092170292,-0.54576451019450467,0.83793860121858121,-0.63244537559537717,0.77460496182765459,-0.71183748366934074,0.70234421535547731,-0.78302586241762218,0.6219891468387041,-0.8451900855437946,0.53446582612780125,-0.89761372763901404,0.44078293518918576,-0.93969262078590832,0.34202014332566888,-0.97094181742605201,0.23931566428755768,-0.99100117924590847,0.13385313867526169,-0.99963952767088537,0.02684799281006094,-0.99675730813421004,-0.080466568716725834,-0.98238773741566476,-0.18685377538420497,-0.95669642082742523,-0.29108754417871296,-0.91997944365882423,-0.39196660986007492,-0.87265995887561421,-0.48832836920991113,-0.81528331039954449,-0.57906227971087887,-0.74851074817110097,-0.6631226582407953,-0.67311180742757026,-0.7395407322802372,-0.58995544002312317,-0.80743580474680665,1,0,0.98705026263791285,0.16041128085776024,0.94853644194714548,0.31666799380147248,0.88545602565320991,0.46472317204376851,0.79944276340350118,0.60074226423797883,0.69272435350959949,0.72120244734381445,0.56806474673115581,0.82298386589365635,0.42869256140305423,0.90345043461038221,0.27821746391645275,0.96051811163137224,0.12053668025532323,0.99270887409805397,-0.040265940109414901,0.9991889981715697,-0.20002569377604434,0.97979065204226767,-0.35460488704253545,0.93501624268541483,1,0,0.94853644194714548,0.31666799380147248,0.79944276340350118,0.60074226423797883,0.56806474673115581,0.82298386589365635,0.27821746391645275,0.96051811163137224,-0.040265940109414901,0.9991889981715697,-0.35460488704253545,0.93501624268541483,-0.63244537559537717,0.77460496182765459,-0.8451900855437946,0.53446582612780125,-0.9709418174260519,0.2393156642875581,-0.99675730813421004,-0.08046656871672539,-0.91997944365882423,-0.39196660986007492,-0.7485107481711013,-0.66312265824079497,0.88545602565320991,0.46472317204376856,0.56806474673115581,0.82298386589365635,0.12053668025532301,0.99270887409805397,-0.35460488704253568,0.93501624268541483,-0.74851074817110119,0.66312265824079519,-0.97094181742605201,0.23931566428755768,-0.97094181742605201,-0.23931566428755788,-0.74851074817110097,-0.6631226582407953,-0.3546048870425359,-0.93501624268541472,0.1205366802553232,-0.99270887409805397,0.56806474673115559,-0.82298386589365657,0.88545602565321002,-0.4647231720437684,0.88545602565321002,-0.4647231720437684,1,0,0.99766876919053915,0.068242413364670976,0.99068594603633076,0.13616664909624659,0.97908408768232291,0.20345601305263378,0.96291728734779936,0.26979677115702427,0.94226092211882051,0.33487961217098611,0.91721130150545305,0.39840108984624145,0.88788521840237522,0.46006503773115215,0.85441940454648857,0.51958395003543356,0.81696989301044209,0.57668032211486708,0.77571129070441991,0.63108794432605275,0.73083596427812414,0.68255314321865401,0.68255314321865412,0.73083596427812403,0.63108794432605286,0.7757112907044198,0.57668032211486708,0.81696989301044198,0.51958395003543356,0.85441940454648857,0.4600650377311522,0.88788521840237522,0.39840108984624156,0.91721130150545294,0.33487961217098627,0.9422609221188204,0.26979677115702444,0.96291728734779924,0.20345601305263397,0.9790840876823228,0.13616664909624659,0.99068594603633076,0.068242413364671003,0.99766876919053915,1,0,0.99068594603633076,0.13616664909624659,0.96291728734779936,0.26979677115702427,0.91721130150545305,0.39840108984624145,0.85441940454648857,0.51958395003543356,0.77571129070441991,0.63108794432605275,0.68255314321865412,0.73083596427812403,0.57668032211486708,0.81696989301044198,0.4600650377311522,0.88788521840237522,0.33487961217098627,0.9422609221188204,0.20345601305263397,0.9790840876823228,0.068242413364671003,0.99766876919053915,-0.068242413364670879,0.99766876919053915,-0.20345601305263364,0.97908408768232291,-0.33487961217098616,0.94226092211882051,-0.46006503773115209,0.88788521840237522,-0.57668032211486708,0.81696989301044209,-0.68255314321865401,0.73083596427812425,-0.77571129070441969,0.63108794432605297,-0.85441940454648835,0.51958395003543389,-0.91721130150545283,0.39840108984624178,-0.96291728734779924,0.26979677115702427,-0.99068594603633076,0.13616664909624665,1,0,0.97908408768232291,0.20345601305263378,0.91721130150545305,0.39840108984624145,0.81696989301044209,0.57668032211486708,0.68255314321865412,0.73083596427812403,0.51958395003543356,0.85441940454648857,0.33487961217098627,0.9422609221188204,0.13616664909624659,0.99068594603633076,-0.068242413364670879,0.99766876919053915,-0.26979677115702411,0.96291728734779936,-0.46006503773115209,0.88788521840237522,-0.63108794432605286,0.7757112907044198,-0.77571129070441969,0.63108794432605297,-0.88788521840237522,0.46006503773115226,-0.96291728734779924,0.26979677115702427,-0.99766876919053915,0.068242413364671295,-0.99068594603633076,-0.1361666490962464,-0.94226092211882051,-0.33487961217098611,-0.85441940454648879,-0.51958395003543323,-0.73083596427812425,-0.6825531432186539,-0.57668032211486719,-0.81696989301044198,-0.39840108984624184,-0.91721130150545283,-0.20345601305263367,-0.97908408768232291,0.96291728734779936,0.26979677115702427,0.85441940454648857,0.51958395003543356,0.68255314321865412,0.73083596427812403,0.4600650377311522,0.88788521840237522,0.20345601305263397,0.9790840876823228,-0.068242413364670879,0.99766876919053915,-0.33487961217098616,0.94226092211882051,-0.57668032211486708,0.81696989301044209,-0.77571129070441969,0.63108794432605297,-0.91721130150545283,0.39840108984624178,-0.99068594603633076,0.13616664909624665,-0.99068594603633076,-0.1361666490962464,-0.91721130150545316,-0.39840108984624117,-0.7757112907044198,-0.63108794432605275,-0.57668032211486719,-0.81696989301044198,-0.33487961217098638,-0.9422609221188204,-0.06824241336467135,-0.99766876919053915,0.20345601305263331,-0.97908408768232302,0.46006503773115159,-0.88788521840237555,0.68255314321865357,-0.73083596427812458,0.85441940454648857,-0.51958395003543356,0.96291728734779924,-0.26979677115702438,0.96291728734779924,-0.26979677115702438,0.97952994125249448,0.20129852008866006,0.9189578116202306,0.39435585511331855,0.82076344120727629,0.57126821509479231,0.68896691907568663,0.72479278722911999,0.52896401032696239,0.84864425749475092,0.34730525284482028,0.93775213214708042,0.1514277775045767,0.98846832432811138,-0.050649168838712642,0.99871650717105276,-0.25065253225872042,0.96807711886620429,-0.44039415155763439,0.89780453957074158,-0.61210598254766291,0.79077573693769854,-0.75875812269279097,0.65137248272222226,-0.87434661614458209,0.48530196253108104,-0.95413925640004882,0.29936312297335804,-0.99486932339189516,0.10116832198743228,-0.99486932339189516,-0.10116832198743204,-0.95413925640004893,-0.29936312297335776,-0.8743466161445822,-0.48530196253108082,-0.75875812269279108,-0.65137248272222203,-0.61210598254766269,-0.79077573693769865,-0.44039415155763423,-0.89780453957074169,-0.25065253225872047,-0.96807711886620429,-0.050649168838712663,-0.99871650717105276,0.15142777750457667,-0.98846832432811138,0.34730525284482028,-0.93775213214708042,0.52896401032696239,-0.84864425749475103,0.68896691907568652,-0.72479278722911999,0.82076344120727629,-0.57126821509479242,0.9189578116202306,-0.39435585511331872,0.97952994125249448,-0.20129852008866028,0.97952994125249448,-0.20129852008866028,0.99560598202189809,0.093641489534350766,0.98246254287557611,0.18646005429168117,0.96068518757684018,0.27764000138750056,0.93046529630708663,0.36638003816824616,0.89206844255738649,0.45190031399993386,0.84583205925909744,0.53344927362357031,0.79216247341112933,0.61031026184979209,0.73153133526366898,0.68180782155043773,0.66447147343882174,0.74731362960007708,0.59157221241352231,0.80625201860222984,0.51347419351484191,0.85810503587514431,0.43086374494097046,0.90241699523858832,0.34446685028433299,0.93879848160038637,0.25504276856167651,0.96692977315025064,0.16337736181853024,0.98656365108654653,0.070276188945293,0.99752757218401011,-0.023442573603260443,0.99972518510981589,-0.11695532197208247,0.99313717716255423,-0.20944026276614447,0.97782144399294513,-0.30008463500034077,0.95391258081477903,-0.3880918526722496,0.9216206995773375,-0.47268850518856537,0.88122958249402839,-0.55313115412519942,0.83309418815409153,-0.62871286659088466,0.7776375321337522,-0.69876942777884166,0.71534696952012755,-0.76268517811038183,0.6467699120171988,-0.81989842367342458,0.57250901727207193,-0.86990637240879021,0.49321689269790747,-0.91226955266489684,0.40959036033650631,-0.94661567529043411,0.32236433316115382,-0.97264290532481312,0.23230535663498308,-0.99012251453465094,0.14020487228188577,-0.99890089148571137,0.046872262469940307,-0.99890089148571148,-0.046872262469940064,-0.99012251453465094,-0.14020487228188555,-0.97264290532481301,-0.23230535663498328,-0.94661567529043422,-0.32236433316115359,-0.91226955266489673,-0.40959036033650648,-0.86990637240879032,-0.49321689269790725,-0.81989842367342447,-0.57250901727207204,-0.76268517811038194,-0.64676991201719869,-0.69876942777884177,-0.71534696952012733,-0.62871286659088488,-0.77763753213375197,-0.5531311541251992,-0.83309418815409164,-0.47268850518856559,-0.88122958249402827,-0.38809185267224983,-0.92162069957733739,-0.3000846350003406,-0.95391258081477903,-0.20944026276614491,-0.97782144399294502,-0.11695532197208272,-0.99313717716255412,-0.023442573603260467,-0.99972518510981589,0.070276188945293194,-0.99752757218401011,0.16337736181852977,-0.98656365108654653,0.25504276856167624,-0.96692977315025064,0.34446685028433294,-0.93879848160038637,0.43086374494097068,-0.9024169952385882,0.51347419351484169,-0.85810503587514442,0.59157221241352231,-0.80625201860222984,0.66447147343882185,-0.74731362960007697,0.73153133526366876,-0.68180782155043806,0.79216247341112922,-0.61031026184979231,0.84583205925909744,-0.53344927362357031,0.8920684425573866,-0.45190031399993358,0.93046529630708652,-0.36638003816824649,0.96068518757684018,-0.27764000138750067,0.98246254287557622,-0.18646005429168103,0.99560598202189809,-0.093641489534351252,0.99560598202189809,-0.093641489534351252,1,0,0.99144486137381038,0.13052619222005157,0.96592582628906831,0.25881904510252074,0.92387953251128674,0.38268343236508978,0.86602540378443871,0.49999999999999994,0.79335334029123528,0.60876142900872054,0.70710678118654757,0.70710678118654746,0.60876142900872066,0.79335334029123517,0.50000000000000011,0.8660254037844386,0.38268343236508984,0.92387953251128674,0.25881904510252096,0.9659258262890682,0.13052619222005171,0.99144486137381038,6.123233995736766e-17,1,-0.13052619222005138,0.99144486137381049,-0.25881904510252063,0.96592582628906831,-0.3826834323650895,0.92387953251128685,1,0,0.96592582628906831,0.25881904510252074,0.86602540378443871,0.49999999999999994,0.70710678118654757,0.70710678118654746,0.50000000000000011,0.8660254037844386,0.25881904510252096,0.9659258262890682,6.123233995736766e-17,1,-0.25881904510252063,0.96592582628906831,-0.49999999999999983,0.86602540378443871,-0.70710678118654746,0.70710678118654757,-0.86602540378443849,0.50000000000000033,-0.9659258262890682,0.25881904510252102,-1,1.2246467991473532e-16,-0.96592582628906842,-0.25881904510252035,-0.86602540378443882,-0.49999999999999978,-0.70710678118654791,-0.70710678118654713,1,0,0.92387953251128674,0.38268343236508978,0.70710678118654757,0.70710678118654746,0.38268343236508984,0.92387953251128674,1,0,0.70710678118654757,0.70710678118654746,6.123233995736766e-17,1,-0.70710678118654746,0.70710678118654757,1,0,0.38268343236508984,0.92387953251128674,-0.70710678118654746,0.70710678118654757,-0.92387953251128685,-0.38268343236508967,1,0,1,0,1,0,-1.8369701987210297e-16,-1]} diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/generic/cffti/test/fixtures/c/fftpack/runner.c b/lib/node_modules/@stdlib/fft/base/fftpack/generic/cffti/test/fixtures/c/fftpack/runner.c new file mode 100644 index 000000000000..e8569c7ef55e --- /dev/null +++ b/lib/node_modules/@stdlib/fft/base/fftpack/generic/cffti/test/fixtures/c/fftpack/runner.c @@ -0,0 +1,286 @@ +/** +* @license Apache-2.0 +* +* Copyright (c) 2026 The Stdlib Authors. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +/** +* Generate FFTPACK test fixtures. +* +* ## Notes +* +* - Run this script from the directory in which fixtures should be written. +* +*/ + +#include +#include +#include + +/** +* Define prototypes for external functions. +*/ +extern void cffti( int n, double *wsave ); + +/** +* Generates a random number on the interval [0,1]. +* +* @return random number +*/ +double rand_double( void ) { + int r = rand(); + return (double)r / ( (double)RAND_MAX + 1.0 ); +} + +/** +* Generates an array of pseudorandom integers drawn from a uniform distribution. +* +* ## Notes +* +* - WARNING: the method used here is not particularly robust, as some integer values may be sampled more frequently than others. +* +* +* @param out output array +* @param len array length +* @param a lower bound (inclusive) +* @param b upper bound (exclusive) +*/ +void rand_array_i32( int *out, const unsigned int len, const int a, const int b ) { + unsigned int i; + unsigned int r; + double delta; + + delta = (double)b - (double)a; + + for ( i = 0; i < len; i++ ) { + r = (unsigned int)( delta * rand_double() ); // truncation + out[ i ] = (int)( a + r ); + } +} + +/** +* Writes an array of doubles to a file as a series of comma-separated values. +* +* @param f file to write to +* @param x array of doubles +* @param len array length +*/ +void write_array_f64( FILE *f, const double *x, const unsigned int len ) { + unsigned int i; + + for ( i = 0; i < len; i++ ) { + fprintf( f, "%.17g", x[ i ] ); + if ( i < len-1 ) { + fprintf( f, "," ); + } + } +} + +/** +* Writes an array of integers to a file as a series of comma-separated values. +* +* @param f file to write to +* @param x array of integers +* @param len array length +*/ +void write_array_i32( FILE *f, const int *x, const unsigned int len ) { + unsigned int i; + + for ( i = 0; i < len; i++ ) { + fprintf( f, "%d", x[ i ] ); + if ( i < len-1 ) { + fprintf( f, "," ); + } + } +} + +/** +* Writes a named array of doubles to a file as JSON. +* +* @param f file to write to +* @param name array name +* @param x data +* @param len array length +*/ +void write_named_array_f64( FILE *f, const char *name, const double *x, const unsigned int len ) { + fprintf( f, "\"%s\":[", name ); + write_array_f64( f, x, len ); + fprintf( f, "]" ); +} + +/** +* Writes a named array of integers to a file as JSON. +* +* @param f file to write to +* @param name array name +* @param x data +* @param len array length +*/ +void write_named_array_i32( FILE *f, const char *name, const int *x, const unsigned int len ) { + fprintf( f, "\"%s\":[", name ); + write_array_i32( f, x, len ); + fprintf( f, "]" ); +} + +/** +* Writes data to a file as JSON. +* +* ## Notes +* +* - This function SHOULD be tailored to the input data (e.g., input types, output types, number of arguments, etc) and may vary from use case to use case. +* +* +* @param f file to write to +* @param lengths sequence lengths +* @param offsets twiddle offsets +* @param twiddles twiddle factors +* @param num number of sequence lengths +* @param total total number of twiddle values +*/ +void write_data_as_json( FILE *f, const int *lengths, const int *offsets, const double *twiddles, const unsigned int num, const unsigned int total ) { + fprintf( f, "{" ); + write_named_array_i32( f, "lengths", lengths, num ); + fprintf( f, "," ); + write_named_array_i32( f, "offsets", offsets, num ); + fprintf( f, "," ); + write_named_array_f64( f, "twiddles", twiddles, total ); + fprintf( f, "}\n" ); +} + +/** +* Generates test fixtures. +* +* @param lengths sequence lengths +* @param offsets twiddle offsets into flat output array +* @param num number of sequence lengths +* @param total total number of twiddle values +* @param name output filename +*/ +void generate( const int *lengths, const int *offsets, const unsigned int num, const unsigned int total, const char *name ) { + unsigned int i; + unsigned int j; + double *twiddles; + double *wsave; + FILE *f; + int off; + int n; + + // Allocate an output array: + twiddles = (double*) malloc( total * sizeof(double) ); + if ( twiddles == NULL ) { + printf( "Error allocating memory.\n" ); + exit( 1 ); + } + + // Generate fixture data: + for ( i = 0; i < num; i++ ) { + n = lengths[ i ]; + wsave = (double*) calloc( 4*n + 15, sizeof(double) ); + if ( wsave == NULL ) { + printf( "Error allocating memory.\n" ); + exit( 1 ); + } + cffti( n, wsave ); + + // Copy twiddle region into flat array (2*N values starting at wsave[2*n]): + off = offsets[ i ]; + for ( j = 0; j < (unsigned int)( 2 * n ); j++ ) { + twiddles[ off + j ] = wsave[ ( 2 * n ) + j ]; + } + free( wsave ); + } + // Open a new file: + f = fopen( name, "w" ); + if ( f == NULL ) { + printf( "Error opening file.\n" ); + exit( 1 ); + } + + // Write data as JSON: + write_data_as_json( f, lengths, offsets, twiddles, num, total ); + + // Close the file: + fclose( f ); + + // Free allocated memory: + free( twiddles ); +} + +/** +* Computes offsets into a flat twiddle array for each sequence length. +* +* @param offsets output array of offsets +* @param lengths sequence lengths +* @param num number of sequence lengths +* @return total number of twiddle values +*/ +unsigned int compute_offsets( int *offsets, const int *lengths, const unsigned int num ) { + unsigned int total; + unsigned int i; + + total = 0; + for ( i = 0; i < num; i++ ) { + offsets[ i ] = total; + total += 2 * lengths[ i ]; + } + return total; +} + +/** +* Main execution sequence. +*/ +int main( void ) { + unsigned int total; + unsigned int num; + int *lengths; + int *offsets; + + // Use the current time to seed the random number generator: + srand( time( NULL ) ); + + // Define the number of sequence lengths per range: + num = 10; + + // Allocate arrays: + lengths = (int*) malloc( num * sizeof(int) ); + if ( lengths == NULL ) { + printf( "Error allocating memory.\n" ); + exit( 1 ); + } + offsets = (int*) malloc( num * sizeof(int) ); + if ( offsets == NULL ) { + printf( "Error allocating memory.\n" ); + exit( 1 ); + } + + // Generate fixture data: + rand_array_i32( lengths, num, 2, 16 ); + total = compute_offsets( offsets, lengths, num ); + generate( lengths, offsets, num, total, "small.json" ); + + rand_array_i32( lengths, num, 16, 128 ); + total = compute_offsets( offsets, lengths, num ); + generate( lengths, offsets, num, total, "medium.json" ); + + rand_array_i32( lengths, num, 128, 1024 ); + total = compute_offsets( offsets, lengths, num ); + generate( lengths, offsets, num, total, "large.json" ); + + // Free allocated memory: + free( lengths ); + free( offsets ); + + return 0; +} diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/generic/cffti/test/fixtures/c/fftpack/small.json b/lib/node_modules/@stdlib/fft/base/fftpack/generic/cffti/test/fixtures/c/fftpack/small.json new file mode 100644 index 000000000000..69a1ad3bbb33 --- /dev/null +++ b/lib/node_modules/@stdlib/fft/base/fftpack/generic/cffti/test/fixtures/c/fftpack/small.json @@ -0,0 +1 @@ +{"lengths":[2,12,6,4,15,3,3,2,2,6],"offsets":[0,4,28,40,48,78,84,90,94,98],"twiddles":[1,0,-1,1.2246467991473532e-16,1,0,0.86602540378443871,0.49999999999999994,0.50000000000000011,0.8660254037844386,6.123233995736766e-17,1,1,0,0.50000000000000011,0.8660254037844386,-0.49999999999999983,0.86602540378443871,-1,1.2246467991473532e-16,1,0,1,0,1,0,-1.8369701987210297e-16,-1,1,0,0.50000000000000011,0.8660254037844386,-0.49999999999999983,0.86602540378443871,1,0,1,0,-0.50000000000000044,-0.86602540378443837,1,0,1,0,1,0,-1.8369701987210297e-16,-1,1,0,0.91354545764260087,0.40673664307580015,0.66913060635885824,0.74314482547739424,0.30901699437494745,0.95105651629515353,-0.10452846326765333,0.9945218953682734,1,0,0.66913060635885824,0.74314482547739424,-0.10452846326765333,0.9945218953682734,-0.80901699437494734,0.58778525229247325,-0.97814760073380569,-0.20791169081775907,1,0,1,0,1,0,1,0,0.30901699437494723,-0.95105651629515364,1,0,1,0,-0.50000000000000044,-0.86602540378443837,1,0,1,0,-0.50000000000000044,-0.86602540378443837,1,0,-1,1.2246467991473532e-16,1,0,-1,1.2246467991473532e-16,1,0,0.50000000000000011,0.8660254037844386,-0.49999999999999983,0.86602540378443871,1,0,1,0,-0.50000000000000044,-0.86602540378443837]} diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/generic/cffti/test/test.js b/lib/node_modules/@stdlib/fft/base/fftpack/generic/cffti/test/test.js new file mode 100644 index 000000000000..57300092cd89 --- /dev/null +++ b/lib/node_modules/@stdlib/fft/base/fftpack/generic/cffti/test/test.js @@ -0,0 +1,231 @@ +/** +* @license Apache-2.0 +* +* Copyright (c) 2026 The Stdlib Authors. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +'use strict'; + +// MODULES // + +var tape = require( 'tape' ); +var Float64Array = require( '@stdlib/array/float64' ); +var isAlmostSameValue = require( '@stdlib/number/float64/base/assert/is-almost-same-value' ); +var cffti = require( './../lib' ); + + +// FIXTURES // + +var small = require( './fixtures/c/fftpack/small.json' ); +var medium = require( './fixtures/c/fftpack/medium.json' ); +var large = require( './fixtures/c/fftpack/large.json' ); + + +// TESTS // + +tape( 'main export is a function', function test( t ) { + t.ok( true, __filename ); + t.strictEqual( typeof cffti, 'function', 'main export is a function' ); + t.end(); +}); + +tape( 'the function has an arity of 4', function test( t ) { + t.strictEqual( cffti.length, 4, 'returns expected value' ); + t.end(); +}); + +tape( 'the function returns a reference to the workspace array', function test( t ) { + var workspace; + var out; + var N; + + N = 8; + workspace = new Float64Array( (4*N)+34 ); + out = cffti( N, workspace, 1, 0 ); + + t.strictEqual( out, workspace, 'same reference' ); + t.end(); +}); + +tape( 'the function correctly initializes twiddle factors (small sequence lengths)', function test( t ) { + var workspace; + var expected; + var lengths; + var offsets; + var ulps; + var off; + var y; + var e; + var N; + var i; + var k; + + lengths = small.lengths; + offsets = small.offsets; + expected = small.twiddles; + + ulps = 1; + for ( k = 0; k < lengths.length; k++ ) { + N = lengths[ k ]; + off = offsets[ k ]; + workspace = new Float64Array( (4*N)+34 ); + cffti( N, workspace, 1, 0 ); + + t.strictEqual( workspace[ (2*N)-1 ], 0.0, 'returns expected value' ); + for ( i = 0; i < 2*N; i++ ) { + y = workspace[ (2*N)+i ]; + e = expected[ off+i ]; + t.strictEqual( isAlmostSameValue( y, e, ulps ), true, 'within '+ulps+' ULPs. N: '+N+'. y: '+y+'. E: '+e ); + } + } + t.end(); +}); + +tape( 'the function correctly initializes twiddle factors (medium sequence lengths)', function test( t ) { + var workspace; + var expected; + var lengths; + var offsets; + var ulps; + var off; + var y; + var e; + var N; + var i; + var k; + + lengths = medium.lengths; + offsets = medium.offsets; + expected = medium.twiddles; + + ulps = 1; + for ( k = 0; k < lengths.length; k++ ) { + N = lengths[ k ]; + off = offsets[ k ]; + workspace = new Float64Array( (4*N)+34 ); + cffti( N, workspace, 1, 0 ); + + t.strictEqual( workspace[ (2*N)-1 ], 0.0, 'returns expected value' ); + for ( i = 0; i < 2*N; i++ ) { + y = workspace[ (2*N)+i ]; + e = expected[ off+i ]; + t.strictEqual( isAlmostSameValue( y, e, ulps ), true, 'within '+ulps+' ULPs. N: '+N+'. y: '+y+'. E: '+e ); + } + } + t.end(); +}); + +tape( 'the function correctly initializes twiddle factors (large sequence lengths)', function test( t ) { + var workspace; + var expected; + var lengths; + var offsets; + var ulps; + var off; + var y; + var e; + var N; + var i; + var k; + + lengths = large.lengths; + offsets = large.offsets; + expected = large.twiddles; + + ulps = 1; + for ( k = 0; k < lengths.length; k++ ) { + N = lengths[ k ]; + off = offsets[ k ]; + workspace = new Float64Array( (4*N)+34 ); + cffti( N, workspace, 1, 0 ); + + t.strictEqual( workspace[ (2*N)-1 ], 0.0, 'returns expected value' ); + for ( i = 0; i < 2*N; i++ ) { + y = workspace[ (2*N)+i ]; + e = expected[ off+i ]; + t.strictEqual( isAlmostSameValue( y, e, ulps ), true, 'within '+ulps+' ULPs. N: '+N+'. y: '+y+'. E: '+e ); + } + } + t.end(); +}); + +tape( 'the function does not modify the scratch region of the workspace', function test( t ) { + var workspace; + var N; + var i; + + N = 8; + workspace = new Float64Array( (4*N)+34 ); + + for ( i = 0; i < workspace.length; i++ ) { + workspace[ i ] = i + 1.0; + } + cffti( N, workspace, 1, 0 ); + for ( i = 0; i < 2*N; i++ ) { + t.strictEqual( workspace[ i ], i + 1.0, 'returns expected value' ); + } + t.end(); +}); + +tape( 'the function does not modify the workspace when N is 1', function test( t ) { + var workspace; + var expected; + var N; + var i; + + N = 1; + workspace = new Float64Array( (4*N)+34 ); + for ( i = 0; i < workspace.length; i++ ) { + workspace[ i ] = i + 1.0; + } + expected = new Float64Array( workspace ); + + cffti( N, workspace, 1, 0 ); + + t.deepEqual( workspace, expected, 'returns expected value' ); + t.end(); +}); + +tape( 'the function correctly handles stride and offset parameters', function test( t ) { + var workspace; + var expected; + var stride; + var offset; + var nf; + var N; + var i; + + N = 8; + stride = 2; + offset = 3; + workspace = new Float64Array( offset+(((4*N)+34)*stride ) ); + + cffti( N, workspace, stride, offset ); + + t.strictEqual( workspace[ offset+(4*N*stride) ], N, 'returns expected value' ); + + nf = workspace[ offset+(((4*N)+1)*stride) ]; + t.strictEqual( nf, 2, 'returns expected value' ); + t.strictEqual( workspace[ offset+(((4*N)+2)*stride) ], 2, 'returns expected value' ); + t.strictEqual( workspace[ offset+(((4*N)+3)*stride) ], 4, 'returns expected value' ); + + expected = new Float64Array( (4*N)+34 ); + cffti( N, expected, 1, 0 ); + + for ( i = 0; i < 2*N; i++ ) { + t.strictEqual( workspace[ offset+(((2*N)+i)*stride) ], expected[ (2*N)+i ], 'returns expected value' ); + } + t.end(); +}); From 0e812dbe94379e9fd1ef12c9a6cf5ba44b50c4c1 Mon Sep 17 00:00:00 2001 From: Gunj Joshi Date: Tue, 18 Aug 2026 13:25:51 +0530 Subject: [PATCH 06/32] remove: remove `cffti` from namespace This commit removes the `cffti` symbol from the `@stdlib/fft/base/fftpack` namespace due to a package migration. BREAKING CHANGE: remove `cffti` To migrate, users should access the same symbol via the `@stdlib/fft/base/fftpack/generic` namespace. Ref: https://github.com/stdlib-js/metr-issue-tracker/issues/1165 --- type: pre_commit_static_analysis_report description: Results of running static analysis checks when committing changes. report: - task: lint_filenames status: passed - task: lint_editorconfig status: passed - task: lint_markdown_pkg_readmes status: na - task: lint_markdown_docs status: na - task: lint_markdown status: na - task: lint_package_json status: na - task: lint_repl_help status: na - task: lint_javascript_src status: passed - task: lint_javascript_cli status: na - task: lint_javascript_examples status: na - task: lint_javascript_tests status: na - task: lint_javascript_benchmarks status: na - task: lint_python status: na - task: lint_r status: na - task: lint_c_src status: na - task: lint_c_examples status: na - task: lint_c_benchmarks status: na - task: lint_c_tests_fixtures status: na - task: lint_shell status: na - task: lint_typescript_declarations status: passed - task: lint_typescript_tests status: passed - task: lint_license_headers status: passed --- --- .../fft/base/fftpack/docs/types/index.d.ts | 34 ------------------- .../@stdlib/fft/base/fftpack/lib/index.js | 9 ----- 2 files changed, 43 deletions(-) diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/docs/types/index.d.ts b/lib/node_modules/@stdlib/fft/base/fftpack/docs/types/index.d.ts index 4c2fc99b4194..0d2f03ce3dca 100644 --- a/lib/node_modules/@stdlib/fft/base/fftpack/docs/types/index.d.ts +++ b/lib/node_modules/@stdlib/fft/base/fftpack/docs/types/index.d.ts @@ -20,7 +20,6 @@ /* eslint-disable max-lines */ -import cffti = require( '@stdlib/fft/base/fftpack/cffti' ); import cosqi = require( '@stdlib/fft/base/fftpack/cosqi' ); import costi = require( '@stdlib/fft/base/fftpack/costi' ); import rffti = require( '@stdlib/fft/base/fftpack/rffti' ); @@ -31,39 +30,6 @@ import sinti = require( '@stdlib/fft/base/fftpack/sinti' ); * Interface describing the `fftpack` namespace. */ interface Namespace { - /** - * Initializes a workspace array for performing a complex-valued Fourier transform. - * - * ## Notes - * - * - The workspace array should have a length of at least `( 4*N ) + 34` elements. - * - For single-point sequences (N=1), the function returns immediately as the FFT is the identity operation. - * - * @param N - length of the sequence - * @param workspace - workspace array - * @param strideW - stride length for `workspace` - * @param offsetW - starting index for `workspace` - * @returns workspace array - * - * @example - * var Float64Array = require( '@stdlib/array/float64' ); - * - * var N = 8; - * var workspace = new Float64Array( ( 4*N ) + 34 ); - * - * var out = ns.cffti( N, workspace, 1, 0 ); - * // returns - * - * var bool = ( out === workspace ); - * // returns true - * - * var twiddleFactors = workspace.slice( 2*N, 4*N ); - * // returns [ 1, 0, ~0.707, ~0.707, ~0, 1, ~-0.707, ~0.707, 1, 0, 1, 0, 1, 0, ~0, -1 ] - * - * var factors = workspace.slice( 4*N, ( 4*N ) + 4 ); - * // returns [ 8, 2, 2, 4 ] - */ - cffti: typeof cffti; /** * Initializes a workspace array for performing a quarter-wave cosine transform. diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/lib/index.js b/lib/node_modules/@stdlib/fft/base/fftpack/lib/index.js index 7369d79be20c..9bc8ac037c87 100644 --- a/lib/node_modules/@stdlib/fft/base/fftpack/lib/index.js +++ b/lib/node_modules/@stdlib/fft/base/fftpack/lib/index.js @@ -40,15 +40,6 @@ var setReadOnly = require( '@stdlib/utils/define-read-only-property' ); */ var ns = {}; -/** -* @name cffti -* @memberof ns -* @readonly -* @type {Function} -* @see {@link module:@stdlib/fft/base/fftpack/cffti} -*/ -setReadOnly( ns, 'cffti', require( '@stdlib/fft/base/fftpack/cffti' ) ); - /** * @name cosqi * @memberof ns From 70147c5e97b7d60377db931e94f86285510733ab Mon Sep 17 00:00:00 2001 From: Gunj Joshi Date: Tue, 18 Aug 2026 13:26:25 +0530 Subject: [PATCH 07/32] refactor: update paths Ref: https://github.com/stdlib-js/metr-issue-tracker/issues/1165 --- type: pre_commit_static_analysis_report description: Results of running static analysis checks when committing changes. report: - task: lint_filenames status: passed - task: lint_editorconfig status: passed - task: lint_markdown_pkg_readmes status: passed - task: lint_markdown_docs status: na - task: lint_markdown status: na - task: lint_package_json status: na - task: lint_repl_help status: na - task: lint_javascript_src status: na - task: lint_javascript_cli status: na - task: lint_javascript_examples status: na - task: lint_javascript_tests status: na - task: lint_javascript_benchmarks status: na - task: lint_python status: na - task: lint_r status: na - task: lint_c_src status: na - task: lint_c_examples status: na - task: lint_c_benchmarks status: na - task: lint_c_tests_fixtures status: na - task: lint_shell status: na - task: lint_typescript_declarations status: passed - task: lint_typescript_tests status: na - task: lint_license_headers status: passed --- --- lib/node_modules/@stdlib/fft/base/fftpack/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/README.md b/lib/node_modules/@stdlib/fft/base/fftpack/README.md index 7161ddc48a11..b2db94ae2fd6 100644 --- a/lib/node_modules/@stdlib/fft/base/fftpack/README.md +++ b/lib/node_modules/@stdlib/fft/base/fftpack/README.md @@ -43,7 +43,7 @@ var o = ns;
-- [`cffti( N, workspace, strideW, offsetW )`][@stdlib/fft/base/fftpack/cffti]: initialize a workspace array for performing a complex-valued Fourier transform. +- [`cffti( N, workspace, strideW, offsetW )`][@stdlib/fft/base/fftpack/generic/cffti]: initialize a workspace array for performing a complex-valued Fourier transform. - [`cosqi( N, workspace, strideW, offsetW )`][@stdlib/fft/base/fftpack/cosqi]: initialize a workspace array for performing a quarter-wave cosine transform. - [`costi( N, workspace, strideW, offsetW )`][@stdlib/fft/base/fftpack/costi]: initialize a workspace array for performing a cosine transform. - [`decompose( N, M, initial, si, oi, out, so, oo )`][@stdlib/fft/base/fftpack/decompose]: factorize a sequence length into a product of integers. @@ -92,7 +92,7 @@ console.log( objectKeys( ns ) ); -[@stdlib/fft/base/fftpack/cffti]: https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/fft/base/fftpack/cffti +[@stdlib/fft/base/fftpack/generic/cffti]: https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/fft/base/fftpack/generic/cffti [@stdlib/fft/base/fftpack/cosqi]: https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/fft/base/fftpack/cosqi From bde9665d3dd2ddd6ac4f99aea9b1c8838a5b5f6d Mon Sep 17 00:00:00 2001 From: Gunj Joshi Date: Tue, 18 Aug 2026 13:26:33 +0530 Subject: [PATCH 08/32] remove: remove `fft/base/fftpack/cffti` This commit removes `@stdlib/fft/base/fftpack/cffti` in favor of `@stdlib/fft/base/fftpack/generic/cffti`. BREAKING CHANGE: remove `fft/base/fftpack/cffti` To migrate, users should update their require/import paths to use `@stdlib/fft/base/fftpack/generic/cffti` which provides the same API and implementation. Ref: https://github.com/stdlib-js/metr-issue-tracker/issues/1165 --- type: pre_commit_static_analysis_report description: Results of running static analysis checks when committing changes. report: - task: lint_filenames status: passed - task: lint_editorconfig status: passed - task: lint_markdown_pkg_readmes status: na - task: lint_markdown_docs status: na - task: lint_markdown status: na - task: lint_package_json status: na - task: lint_repl_help status: na - task: lint_javascript_src status: na - task: lint_javascript_cli status: na - task: lint_javascript_examples status: na - task: lint_javascript_tests status: na - task: lint_javascript_benchmarks status: na - task: lint_python status: na - task: lint_r status: na - task: lint_c_src status: na - task: lint_c_examples status: na - task: lint_c_benchmarks status: na - task: lint_c_tests_fixtures status: na - task: lint_shell status: na - task: lint_typescript_declarations status: passed - task: lint_typescript_tests status: na - task: lint_license_headers status: passed --- --- .../@stdlib/fft/base/fftpack/cffti/README.md | 167 ---------- .../base/fftpack/cffti/benchmark/benchmark.js | 101 ------- .../fft/base/fftpack/cffti/docs/repl.txt | 54 ---- .../base/fftpack/cffti/docs/types/index.d.ts | 62 ---- .../fft/base/fftpack/cffti/docs/types/test.ts | 94 ------ .../fft/base/fftpack/cffti/examples/index.js | 41 --- .../fft/base/fftpack/cffti/lib/cffti1.js | 202 ------------- .../fft/base/fftpack/cffti/lib/index.js | 53 ---- .../fft/base/fftpack/cffti/lib/main.js | 176 ----------- .../fft/base/fftpack/cffti/package.json | 64 ---- .../cffti/test/fixtures/c/fftpack/Makefile | 137 --------- .../cffti/test/fixtures/c/fftpack/large.json | 1 - .../cffti/test/fixtures/c/fftpack/medium.json | 1 - .../cffti/test/fixtures/c/fftpack/runner.c | 286 ------------------ .../cffti/test/fixtures/c/fftpack/small.json | 1 - .../fft/base/fftpack/cffti/test/test.js | 231 -------------- 16 files changed, 1671 deletions(-) delete mode 100644 lib/node_modules/@stdlib/fft/base/fftpack/cffti/README.md delete mode 100644 lib/node_modules/@stdlib/fft/base/fftpack/cffti/benchmark/benchmark.js delete mode 100644 lib/node_modules/@stdlib/fft/base/fftpack/cffti/docs/repl.txt delete mode 100644 lib/node_modules/@stdlib/fft/base/fftpack/cffti/docs/types/index.d.ts delete mode 100644 lib/node_modules/@stdlib/fft/base/fftpack/cffti/docs/types/test.ts delete mode 100644 lib/node_modules/@stdlib/fft/base/fftpack/cffti/examples/index.js delete mode 100644 lib/node_modules/@stdlib/fft/base/fftpack/cffti/lib/cffti1.js delete mode 100644 lib/node_modules/@stdlib/fft/base/fftpack/cffti/lib/index.js delete mode 100644 lib/node_modules/@stdlib/fft/base/fftpack/cffti/lib/main.js delete mode 100644 lib/node_modules/@stdlib/fft/base/fftpack/cffti/package.json delete mode 100644 lib/node_modules/@stdlib/fft/base/fftpack/cffti/test/fixtures/c/fftpack/Makefile delete mode 100644 lib/node_modules/@stdlib/fft/base/fftpack/cffti/test/fixtures/c/fftpack/large.json delete mode 100644 lib/node_modules/@stdlib/fft/base/fftpack/cffti/test/fixtures/c/fftpack/medium.json delete mode 100644 lib/node_modules/@stdlib/fft/base/fftpack/cffti/test/fixtures/c/fftpack/runner.c delete mode 100644 lib/node_modules/@stdlib/fft/base/fftpack/cffti/test/fixtures/c/fftpack/small.json delete mode 100644 lib/node_modules/@stdlib/fft/base/fftpack/cffti/test/test.js diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/cffti/README.md b/lib/node_modules/@stdlib/fft/base/fftpack/cffti/README.md deleted file mode 100644 index 8fce3a2870a4..000000000000 --- a/lib/node_modules/@stdlib/fft/base/fftpack/cffti/README.md +++ /dev/null @@ -1,167 +0,0 @@ - - -# cffti - -> Initialize a workspace array for performing a complex-valued Fourier transform. - - - -
- -
- - - - - -
- -## Usage - -```javascript -var cffti = require( '@stdlib/fft/base/fftpack/cffti' ); -``` - -#### cffti( N, workspace, strideW, offsetW ) - -Initializes a workspace array for performing a complex-valued Fourier transform. - -```javascript -var Float64Array = require( '@stdlib/array/float64' ); - -var N = 8; -var workspace = new Float64Array( ( 4*N ) + 34 ); - -var out = cffti( N, workspace, 1, 0 ); -// returns - -var bool = ( out === workspace ); -// returns true - -var twiddleFactors = workspace.slice( 2*N, 4*N ); -// returns [ 1, 0, ~0.707, ~0.707, ~0, 1, ~-0.707, ~0.707, 1, 0, 1, 0, 1, 0, ~0, -1 ] - -var factors = workspace.slice( 4*N, ( 4*N ) + 4 ); -// returns [ 8, 2, 2, 4 ] -``` - -The function accepts the following arguments: - -- **N**: length of the sequence to transform. -- **workspace**: workspace array. -- **strideW**: stride length for `workspace`. -- **offsetW**: starting index for `workspace`. - -
- - - - - -
- -## Notes - -- The workspace array is divided into three sections: - - ```text - size = 2N 2N 2+ceil(log2(N)/2) - ↓ ↓ ↓ - | scratch / workspace | twiddle factors | radix factor table | - ↑ ↑ ↑ - i = 0 ... 2N ... 4N ... - ``` - - - **scratch/workspace**: used as a scratch space when performing transforms. This section is not updated during initialization. - - **twiddle factors**: a table of reusable complex-exponential constants stored as cosine/sine pairs. - - **radix factor table**: a table containing the sequence length `N`, the number of factors into which `N` was decomposed, and the individual integer radix factors. - -- In general, a workspace array should have `4N + 34` indexed elements (as `log2(N)/2 ≤ 32` for all `2^64`). During initialization, only the sections for storing twiddle factors and the factorization of `N` are updated. - -- The radix factor table is comprised as follows: - - ```text - | sequence_length | number_of_factors | integer_factors | - ``` - -- If `N` equals `1`, the function returns early without modifying the workspace, as a single data point is its own Fourier transform. - -
- - - -
- -## Examples - - - -```javascript -var Float64Array = require( '@stdlib/array/float64' ); -var zeroTo = require( '@stdlib/array/zero-to' ); -var logEach = require( '@stdlib/console/log-each' ); -var cffti = require( '@stdlib/fft/base/fftpack/cffti' ); - -var N = 8; -var workspace = new Float64Array( ( 4*N ) + 34 ); - -cffti( N, workspace, 1, 0 ); -console.log( 'Sequence length: %d', N ); - -console.log( 'Twiddle factors:' ); -var idx = zeroTo( 2*N, 'generic' ); -logEach( ' workspace[ %d ] = %d', idx, workspace.slice( 2*N, 4*N ) ); - -console.log( 'Factorization:' ); -var nf = workspace[ (4*N)+1 ]; - -console.log( ' number of factors: %d', nf ); -idx = zeroTo( nf, 'generic' ); -logEach( ' factor[ %d ]: %d', idx, workspace.slice( (4*N)+2, (4*N)+2+nf ) ); -``` - -
- - - - - -
- -
- - - - - - - - - - - - - - diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/cffti/benchmark/benchmark.js b/lib/node_modules/@stdlib/fft/base/fftpack/cffti/benchmark/benchmark.js deleted file mode 100644 index 1ee1d688b1ad..000000000000 --- a/lib/node_modules/@stdlib/fft/base/fftpack/cffti/benchmark/benchmark.js +++ /dev/null @@ -1,101 +0,0 @@ -/* -* @license Apache-2.0 -* -* Copyright (c) 2026 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench' ); -var format = require( '@stdlib/string/format' ); -var isnan = require( '@stdlib/math/base/assert/is-nan' ); -var Float64Array = require( '@stdlib/array/float64' ); -var pkg = require( './../package.json' ).name; -var cffti = require( './../lib' ); - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} N - sequence length -* @returns {Function} benchmark function -*/ -function createBenchmark( N ) { - var workspace = new Float64Array( ( 4*N ) + 34 ); - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - cffti( N, workspace, 1, 0 ); - if ( isnan( workspace[ ( 2*N ) + 1 ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( workspace[ ( 2*N ) + 1 ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var lengths; - var N; - var f; - var i; - - lengths = [ - 8, - 16, - 32, - 64, - 128, - 256, - 512, - 1024 - ]; - - for ( i = 0; i < lengths.length; i++ ) { - N = lengths[ i ]; - f = createBenchmark( N ); - bench( format( '%s:N=%d', pkg, N ), f ); - } -} - -main(); diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/cffti/docs/repl.txt b/lib/node_modules/@stdlib/fft/base/fftpack/cffti/docs/repl.txt deleted file mode 100644 index 2dad84296235..000000000000 --- a/lib/node_modules/@stdlib/fft/base/fftpack/cffti/docs/repl.txt +++ /dev/null @@ -1,54 +0,0 @@ - -{{alias}}( N, workspace, strideW, offsetW ) - Initializes a workspace array for performing a complex-valued Fourier - transform. - - The workspace array is divided into three sections: - - 1. scratch/workspace: the section ranges from indices 0 to 2N-1 and is used - while performing transforms. This section is not updated during - initialization. - - 2. twiddle factors: the section ranges from indices 2N to 4N-1 and stores a - table of reusable complex exponential constants as cosine/sine pairs. - - 3. radix factor table: the section starts at index 4N and stores the - sequence length N, the number of factors into which N was decomposed, and - the individual integer radix factors. - - Any remaining array space remains as unused storage. - - Parameters - ---------- - N: integer - Length of the sequence. - - workspace: ArrayLikeObject - Workspace array. - - strideW: integer - Stride length for `workspace`. - - offsetW: integer - Starting index for `workspace`. - - Returns - ------- - out: ArrayLikeObject - Workspace array. - - Examples - -------- - > var N = 8; - > var workspace = new {{alias:@stdlib/array/float64}}( ( 4*N ) + 34 ); - > var out = {{alias}}( N, workspace, 1, 0 ) - - > var bool = ( out === workspace ) - true - > var twiddleFactors = workspace.slice( 2*N, 4*N ) - - > var factors = workspace.slice( 4*N, ( 4*N ) + 4 ) - [ 8, 2, 2, 4 ] - - See Also - -------- diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/cffti/docs/types/index.d.ts b/lib/node_modules/@stdlib/fft/base/fftpack/cffti/docs/types/index.d.ts deleted file mode 100644 index 08dfaf307ff6..000000000000 --- a/lib/node_modules/@stdlib/fft/base/fftpack/cffti/docs/types/index.d.ts +++ /dev/null @@ -1,62 +0,0 @@ -/* -* @license Apache-2.0 -* -* Copyright (c) 2026 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -// TypeScript Version: 4.1 - -/// - -import { Collection } from '@stdlib/types/array'; - -/** -* Initializes a workspace array for performing a complex-valued Fourier transform. -* -* ## Notes -* -* - The workspace array should have a length of at least `( 4*N ) + 34` elements. -* - For single-point sequences (N=1), the function returns immediately as the FFT is the identity operation. -* -* @param N - length of the sequence -* @param workspace - workspace array -* @param strideW - stride length for `workspace` -* @param offsetW - starting index for `workspace` -* @returns workspace array -* -* @example -* var Float64Array = require( '@stdlib/array/float64' ); -* -* var N = 8; -* var workspace = new Float64Array( ( 4*N ) + 34 ); -* -* var out = cffti( N, workspace, 1, 0 ); -* // returns -* -* var bool = ( out === workspace ); -* // returns true -* -* var twiddleFactors = workspace.slice( 2*N, 4*N ); -* // returns [ 1, 0, ~0.707, ~0.707, ~0, 1, ~-0.707, ~0.707, 1, 0, 1, 0, 1, 0, ~0, -1 ] -* -* var factors = workspace.slice( 4*N, ( 4*N ) + 4 ); -* // returns [ 8, 2, 2, 4 ] -*/ -declare function cffti>( N: number, workspace: T, strideW: number, offsetW: number ): T; - - -// EXPORTS // - -export = cffti; diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/cffti/docs/types/test.ts b/lib/node_modules/@stdlib/fft/base/fftpack/cffti/docs/types/test.ts deleted file mode 100644 index 85634675ec83..000000000000 --- a/lib/node_modules/@stdlib/fft/base/fftpack/cffti/docs/types/test.ts +++ /dev/null @@ -1,94 +0,0 @@ -/* -* @license Apache-2.0 -* -* Copyright (c) 2026 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -import cffti = require( './index' ); - - -// TESTS // - -// The function returns a collection... -{ - const workspace = new Float64Array( ( 4*8 ) + 34 ); - - cffti( 8, workspace, 1, 0 ); // $ExpectType Float64Array -} - -// The compiler throws an error if the function is provided a first argument which is not a number... -{ - const workspace = new Float64Array( ( 4*8 ) + 34 ); - - cffti( '8', workspace, 1, 0 ); // $ExpectError - cffti( true, workspace, 1, 0 ); // $ExpectError - cffti( false, workspace, 1, 0 ); // $ExpectError - cffti( null, workspace, 1, 0 ); // $ExpectError - cffti( void 0, workspace, 1, 0 ); // $ExpectError - cffti( [], workspace, 1, 0 ); // $ExpectError - cffti( {}, workspace, 1, 0 ); // $ExpectError - cffti( ( x: number ): number => x, workspace, 1, 0 ); // $ExpectError -} - -// The compiler throws an error if the function is provided a second argument which is not a collection... -{ - cffti( 8, '50', 1, 0 ); // $ExpectError - cffti( 8, 50, 1, 0 ); // $ExpectError - cffti( 8, true, 1, 0 ); // $ExpectError - cffti( 8, false, 1, 0 ); // $ExpectError - cffti( 8, null, 1, 0 ); // $ExpectError - cffti( 8, void 0, 1, 0 ); // $ExpectError - cffti( 8, {}, 1, 0 ); // $ExpectError - cffti( 8, ( x: number ): number => x, 1, 0 ); // $ExpectError -} - -// The compiler throws an error if the function is provided a third argument which is not a number... -{ - const workspace = new Float64Array( ( 4*8 ) + 34 ); - - cffti( 8, workspace, '1', 0 ); // $ExpectError - cffti( 8, workspace, true, 0 ); // $ExpectError - cffti( 8, workspace, false, 0 ); // $ExpectError - cffti( 8, workspace, null, 0 ); // $ExpectError - cffti( 8, workspace, void 0, 0 ); // $ExpectError - cffti( 8, workspace, [], 0 ); // $ExpectError - cffti( 8, workspace, {}, 0 ); // $ExpectError - cffti( 8, workspace, ( x: number ): number => x, 0 ); // $ExpectError -} - -// The compiler throws an error if the function is provided a fourth argument which is not a number... -{ - const workspace = new Float64Array( ( 4*8 ) + 34 ); - - cffti( 8, workspace, 1, '0' ); // $ExpectError - cffti( 8, workspace, 1, true ); // $ExpectError - cffti( 8, workspace, 1, false ); // $ExpectError - cffti( 8, workspace, 1, null ); // $ExpectError - cffti( 8, workspace, 1, void 0 ); // $ExpectError - cffti( 8, workspace, 1, [] ); // $ExpectError - cffti( 8, workspace, 1, {} ); // $ExpectError - cffti( 8, workspace, 1, ( x: number ): number => x ); // $ExpectError -} - -// The compiler throws an error if the function is provided an unsupported number of arguments... -{ - const workspace = new Float64Array( ( 4*8 ) + 34 ); - - cffti(); // $ExpectError - cffti( 8 ); // $ExpectError - cffti( 8, workspace ); // $ExpectError - cffti( 8, workspace, 1 ); // $ExpectError - cffti( 8, workspace, 1, 0, 123 ); // $ExpectError -} diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/cffti/examples/index.js b/lib/node_modules/@stdlib/fft/base/fftpack/cffti/examples/index.js deleted file mode 100644 index a9ad8e9b86f7..000000000000 --- a/lib/node_modules/@stdlib/fft/base/fftpack/cffti/examples/index.js +++ /dev/null @@ -1,41 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2026 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -var Float64Array = require( '@stdlib/array/float64' ); -var zeroTo = require( '@stdlib/array/zero-to' ); -var logEach = require( '@stdlib/console/log-each' ); -var cffti = require( './../lib' ); - -var N = 8; -var workspace = new Float64Array( ( 4*N ) + 34 ); - -cffti( N, workspace, 1, 0 ); -console.log( 'Sequence length: %d', N ); - -console.log( 'Twiddle factors:' ); -var idx = zeroTo( 2*N, 'generic' ); -logEach( ' workspace[ %d ] = %d', idx, workspace.slice( 2*N, 4*N ) ); - -console.log( 'Factorization:' ); -var nf = workspace[ (4*N)+1 ]; - -console.log( ' number of factors: %d', nf ); -idx = zeroTo( nf, 'generic' ); -logEach( ' factor[ %d ]: %d', idx, workspace.slice( (4*N)+2, (4*N)+2+nf ) ); diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/cffti/lib/cffti1.js b/lib/node_modules/@stdlib/fft/base/fftpack/cffti/lib/cffti1.js deleted file mode 100644 index 339bb68645e2..000000000000 --- a/lib/node_modules/@stdlib/fft/base/fftpack/cffti/lib/cffti1.js +++ /dev/null @@ -1,202 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2026 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -* -* -* ## Notice -* -* The original C code and copyright notice are from the [PFFFT library]{@link https://github.com/marton78/pffft/blob/0b4ee12c4ba45a4a8e567550c16d96d1679f50ce/src/fftpack.c}. The implementation follows the original, but has been modified for JavaScript. -* -* ```text -* Copyright (c) 2004 the University Corporation for Atmospheric -* Research ("UCAR"). All rights reserved. Developed by NCAR's -* Computational and Information Systems Laboratory, UCAR, -* www.cisl.ucar.edu. -* -* Redistribution and use of the Software in source and binary forms, -* with or without modification, is permitted provided that the -* following conditions are met: -* -* - Neither the names of NCAR's Computational and Information Systems -* Laboratory, the University Corporation for Atmospheric Research, -* nor the names of its sponsors or contributors may be used to -* endorse or promote products derived from this Software without -* specific prior written permission. -* -* - Redistributions of source code must retain the above copyright -* notices, this list of conditions, and the disclaimer below. -* -* - Redistributions in binary form must reproduce the above copyright -* notice, this list of conditions, and the disclaimer below in the -* documentation and/or other materials provided with the -* distribution. -* -* THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -* EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO THE WARRANTIES OF -* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -* NONINFRINGEMENT. IN NO EVENT SHALL THE CONTRIBUTORS OR COPYRIGHT -* HOLDERS BE LIABLE FOR ANY CLAIM, INDIRECT, INCIDENTAL, SPECIAL, -* EXEMPLARY, OR CONSEQUENTIAL DAMAGES OR OTHER LIABILITY, WHETHER IN AN -* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE -* SOFTWARE. -* ``` -*/ - -/* eslint-disable max-len */ - -'use strict'; - -// MODULES // - -var sincos = require( '@stdlib/math/base/special/sincos' ).assign; -var TWO_PI = require( '@stdlib/constants/float64/two-pi' ); -var floor = require( '@stdlib/math/base/special/floor' ); -var decompose = require( '@stdlib/fft/base/fftpack/generic/decompose' ); - - -// VARIABLES // - -// Define a list of initial trial factors for FFT factorization: -var TRIAL_FACTORS = [ 3, 4, 2, 5 ]; - - -// MAIN // - -/** -* Initializes the working arrays for applying a Fourier transform to a complex-valued sequence. -* -* @private -* @param {NonNegativeInteger} N - length of the sequence -* @param {Collection} twiddles - array of twiddle factors -* @param {integer} strideT - stride length for `twiddles` -* @param {NonNegativeInteger} offsetT - starting index for `twiddles` -* @param {Collection} factors - array containing a radix factorization -* @param {integer} strideF - stride length for `factors` -* @param {NonNegativeInteger} offsetF - starting index for `factors` -* @returns {void} -*/ -function cffti1( N, twiddles, strideT, offsetT, factors, strideF, offsetF ) { - var factor; - var argld; - var argh; - var fidx; - var Mt; - var nf; - var fi; - var l2; - var l1; - var ld; - var st; - var it; - var i1; - var M; - var m; - var k; - var j; - var i; - - // Decompose the sequence length into its radix factors: - nf = decompose( N, 4, TRIAL_FACTORS, 1, 0, factors, strideF, offsetF ); - - // Compute the master angular step (i.e., the basic angle that generates all twiddles): - argh = TWO_PI / N; - - // Define where the first computed twiddle pair should be written: - i = 0; - - // Initialize a running product of factors already processed: - l1 = 1; - - // Compute the index of the first radix factor: - fidx = offsetF + ( 2*strideF ); - - // Compute the stride length for each cosine/sine pair: - st = 2 * strideT; - - // Generate twiddle factors... - for ( k = 0; k < nf; k++ ) { - // Resolve the next radix factor: - factor = factors[ fidx ]; - - // Compute the length of the transform after including the current radix: - l2 = factor * l1; - - // Compute the number of the "butterfly wings" (at this stage, the data is viewed as a `factor`-point transform of sub-vectors of length `l1`; `M` describes how many such vectors fit in the full array of length `N`): - M = floor( N / l2 ); - - // Initialize a running offset used to step the angle: - ld = 0; - - // Compute the total number of twiddle factors for the current column: - Mt = ( 2 * M ) + 2; // two twiddles per harmonic, including the trivial first harmonic - - // Iterate over each butterfly column within the current radix... - for ( j = 1; j < factor; j++ ) { - // Store the index of the first twiddle pair for this column: - i1 = i; - - // Seed the first twiddle factor for this column with trivial cosine: - it = offsetT + ( i*strideT ); - twiddles[ it ] = 1.0; - - // Seed the first twiddle factor for this column with trivial sine: - twiddles[ it+strideT ] = 0.0; - - // Advance to the next column: - ld += l1; - - // Compute the angle step for this column: - argld = ld * argh; // 2π ⋅ j ⋅ li / N, which is the j-th column's base angle - - // Initialize a counter which counts from `1` to `M-1` (i.e., all non-trivial harmonics): - fi = 1.0; - - // Compute the index of the sine term: - it += 3 * strideT; - - // Iterate over each non-trivial harmonic in the column (note: we skip the `m=0` and `m=1` (i.e., the first cosine/sine pair, the first harmonic `W_N^0 = cos(0) + j sin(0) = 1 + j⋅0` is trivial and hard-coded by transform kernels)... - for ( m = 3; m < Mt; m += 2 ) { - // Compute `(cos(fi*argld), sin(fi*argld))`: - sincos( fi*argld, twiddles, -strideT, it ); // note: `sincos` returns the sine and cosine, in that order, so we need to use a negative stride when assigning the values to `twiddles` to ensure that cosine comes before sine in the twiddles table - - // Update for the next harmonic: - fi += 1.0; - - // Resolve the index of the next sine term: - it += st; - } - // Advance `i` by the number of twiddle factors we have just written: - i += 2 * M; - - // For radices greater than 5, copy the last-written twiddle pair back to the start of this column's block, overwriting the trivial `(1, 0)` seed so that the transform kernel can use it as a wrap-around twiddle: - if ( factor > 5 ) { - twiddles[ offsetT+(i1*strideT) ] = twiddles[ offsetT+(i*strideT) ]; - twiddles[ offsetT+((i1+1)*strideT) ] = twiddles[ offsetT+((i+1)*strideT) ]; - } - } - // Update the running product of factors already processed: - l1 = l2; - - // Resolve the index of the next radix factor: - fidx += strideF; - } -} - - -// EXPORTS // - -module.exports = cffti1; diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/cffti/lib/index.js b/lib/node_modules/@stdlib/fft/base/fftpack/cffti/lib/index.js deleted file mode 100644 index a9430dc9c9a9..000000000000 --- a/lib/node_modules/@stdlib/fft/base/fftpack/cffti/lib/index.js +++ /dev/null @@ -1,53 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2026 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -/** -* Initialize a workspace array for performing a complex-valued Fourier transform. -* -* @module @stdlib/fft/base/fftpack/cffti -* -* @example -* var Float64Array = require( '@stdlib/array/float64' ); -* var cffti = require( '@stdlib/fft/base/fftpack/cffti' ); -* -* var N = 8; -* var workspace = new Float64Array( ( 4*N ) + 34 ); -* -* var out = cffti( N, workspace, 1, 0 ); -* // returns -* -* var bool = ( out === workspace ); -* // returns true -* -* var twiddleFactors = workspace.slice( 2*N, 4*N ); -* // returns [ 1, 0, ~0.707, ~0.707, ~0, 1, ~-0.707, ~0.707, 1, 0, 1, 0, 1, 0, ~0, -1 ] -* -* var factors = workspace.slice( 4*N, ( 4*N ) + 4 ); -* // returns [ 8, 2, 2, 4 ] -*/ - -// MODULES // - -var main = require( './main.js' ); - - -// EXPORTS // - -module.exports = main; diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/cffti/lib/main.js b/lib/node_modules/@stdlib/fft/base/fftpack/cffti/lib/main.js deleted file mode 100644 index 2dcad0db7e22..000000000000 --- a/lib/node_modules/@stdlib/fft/base/fftpack/cffti/lib/main.js +++ /dev/null @@ -1,176 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2026 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -* -* -* ## Notice -* -* The original C code and copyright notice are from the [PFFFT library]{@link https://github.com/marton78/pffft/blob/0b4ee12c4ba45a4a8e567550c16d96d1679f50ce/src/fftpack.c}. The implementation follows the original, but has been modified for JavaScript. -* -* ```text -* Copyright (c) 2004 the University Corporation for Atmospheric -* Research ("UCAR"). All rights reserved. Developed by NCAR's -* Computational and Information Systems Laboratory, UCAR, -* www.cisl.ucar.edu. -* -* Redistribution and use of the Software in source and binary forms, -* with or without modification, is permitted provided that the -* following conditions are met: -* -* - Neither the names of NCAR's Computational and Information Systems -* Laboratory, the University Corporation for Atmospheric Research, -* nor the names of its sponsors or contributors may be used to -* endorse or promote products derived from this Software without -* specific prior written permission. -* -* - Redistributions of source code must retain the above copyright -* notices, this list of conditions, and the disclaimer below. -* -* - Redistributions in binary form must reproduce the above copyright -* notice, this list of conditions, and the disclaimer below in the -* documentation and/or other materials provided with the -* distribution. -* -* THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -* EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO THE WARRANTIES OF -* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -* NONINFRINGEMENT. IN NO EVENT SHALL THE CONTRIBUTORS OR COPYRIGHT -* HOLDERS BE LIABLE FOR ANY CLAIM, INDIRECT, INCIDENTAL, SPECIAL, -* EXEMPLARY, OR CONSEQUENTIAL DAMAGES OR OTHER LIABILITY, WHETHER IN AN -* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE -* SOFTWARE. -* ``` -*/ - -'use strict'; - -// MODULES // - -var cffti1 = require( './cffti1.js' ); - - -// MAIN // - -/** -* Initializes a workspace array for performing a complex-valued Fourier transform. -* -* ## Notes -* -* The workspace array is divided into three sections: -* -* ```text -* size = 2N 2N 2+ceil(log2(N)/2) -* ↓ ↓ ↓ -* | scratch / workspace | twiddle factors | radix factor table | -* ↑ ↑ ↑ -* i = 0 ... 2N ... 4N ... -* ``` -* -* where -* -* - **scratch/workspace**: used as a scratch space when performing transforms. This section is not updated during initialization. -* - **twiddle factors**: a table of reusable complex-exponential constants stored as cosine/sine pairs. -* - **radix factor table**: a table containing the radix factorization of `N`. -* -* In general, a workspace array should have `4N + 34` indexed elements (as `log2(N)/2 ≤ 32` for all `2^64`). During initialization, only the sections for storing twiddle factors and the factorization of `N` are updated. -* -* > Note: FFTPACK only requires `4N+15`, but we increase that number here to accommodate larger workspace arrays, where `N` may exceed `2^30` indexed elements. -* -* The first two sections each contain `2N` elements, while the last section contains the sequence length, the number of integer factors, and, at most, `ceil(log2(N)/2)` integer radix factors. -* -* The factorization section is comprised as follows: -* -* ```text -* | sequence_length | number_of_factors | integer_factors | -* ``` -* -* The sequence length and number of factors (`nf`) comprise a single element each. Only the first `nf` elements in the integer factors section are written to, with the rest being unused. -* -* As for twiddle factors, these are small, reusable complex-exponential constants that appear inside each "butterfly" stage of a Cooley–Tukey–style FFT. Every arithmetic step in an FFT multiplies one intermediate value by some -* -* ```tex -* W_N^k -* ``` -* -* where `W_N^k` is an N-th root of unity. Formally, in a forward FFT, -* -* ```tex -* W_N^k = e^{-2\pi ik/N} -* ``` -* -* In a backward FFT, -* -* ```tex -* W_N^k = e^{+2\pi ik/N} -* ``` -* -* As may be observed, `W_N^k` for forward and backward FFTs is the same, except the sign of the exponent is flipped. As a consequence, both forward and backward FFT callers can reuse the same set of twiddle factors, with those performing a forward transform (e.g., `cfftf`) multiplying with `(cos,-sin)` and those performing a backward transform (e.g., `cfftb`) multiplying with `(cos,+sin)`. -* -* Because these constants only depend on the transform length `N` (and **not** on the input data), we can pre-compute and store them once, then "twiddle" them (i.e., reuse them with different indices) as we proceed through the factorization. -* -* > As a quick aside regarding the name "twiddle", early FFT papers (notably Gentleman & Sande, 1966) described how you "twiddle" one branch of each butterfly by a complex rotation before adding/subtracting. The coefficients themselves inherited the nickname "twiddle factors," and the term stuck. -* -* By reusing the workspace array when computing multiple transforms of the same length `N`, every subsequent `*f` (forward) or `*b` (backward) call can simply look up the pre-stored twiddle factors instead of recomputing sine and cosine on-the-fly. -* -* In short, twiddle factors are cached roots of unity that allow each stage of the algorithm to rotate data quickly and predictably. -* -* @param {NonNegativeInteger} N - length of the sequence to transform -* @param {Collection} workspace - workspace array -* @param {integer} strideW - stride length for `workspace` -* @param {NonNegativeInteger} offsetW - starting index for `workspace` -* @returns {Collection} workspace array -* -* @example -* var Float64Array = require( '@stdlib/array/float64' ); -* -* var N = 8; -* var workspace = new Float64Array( ( 4*N ) + 34 ); -* -* var out = cffti( N, workspace, 1, 0 ); -* // returns -* -* var bool = ( out === workspace ); -* // returns true -* -* var twiddleFactors = workspace.slice( 2*N, 4*N ); -* // returns [ 1, 0, ~0.707, ~0.707, ~0, 1, ~-0.707, ~0.707, 1, 0, 1, 0, 1, 0, ~0, -1 ] -* -* var factors = workspace.slice( 4*N, ( 4*N ) + 4 ); -* // returns [ 8, 2, 2, 4 ] -*/ -function cffti( N, workspace, strideW, offsetW ) { - var offsetT; - var offsetF; - - // When a sub-sequence is a single data point, the FFT is the identity, so no initialization necessary... - if ( N === 1 ) { - return workspace; - } - // Resolve the starting indices for storing twiddle factors and factorization results: - offsetT = offsetW + ( 2*N*strideW ); // index offset for twiddle factors - offsetF = offsetT + ( 2*N*strideW ); // index offset for factorization results - - // Initialize a provided workspace array: - cffti1( N, workspace, strideW, offsetT, workspace, strideW, offsetF ); - - return workspace; -} - - -// EXPORTS // - -module.exports = cffti; diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/cffti/package.json b/lib/node_modules/@stdlib/fft/base/fftpack/cffti/package.json deleted file mode 100644 index 74b23c91ae11..000000000000 --- a/lib/node_modules/@stdlib/fft/base/fftpack/cffti/package.json +++ /dev/null @@ -1,64 +0,0 @@ -{ - "name": "@stdlib/fft/base/fftpack/cffti", - "version": "0.0.0", - "description": "Initialize a workspace array for performing a complex-valued Fourier transform.", - "license": "Apache-2.0", - "author": { - "name": "The Stdlib Authors", - "url": "https://github.com/stdlib-js/stdlib/graphs/contributors" - }, - "contributors": [ - { - "name": "The Stdlib Authors", - "url": "https://github.com/stdlib-js/stdlib/graphs/contributors" - } - ], - "main": "./lib", - "directories": { - "benchmark": "./benchmark", - "doc": "./docs", - "example": "./examples", - "lib": "./lib", - "test": "./test" - }, - "types": "./docs/types", - "scripts": {}, - "homepage": "https://github.com/stdlib-js/stdlib", - "repository": { - "type": "git", - "url": "git://github.com/stdlib-js/stdlib.git" - }, - "bugs": { - "url": "https://github.com/stdlib-js/stdlib/issues" - }, - "dependencies": {}, - "devDependencies": {}, - "engines": { - "node": ">=0.10.0", - "npm": ">2.7.0" - }, - "os": [ - "aix", - "darwin", - "freebsd", - "linux", - "macos", - "openbsd", - "sunos", - "win32", - "windows" - ], - "keywords": [ - "stdlib", - "fft", - "fftpack", - "cffti", - "fourier", - "transform", - "twiddle", - "workspace", - "initialization", - "complex" - ], - "__stdlib__": {} -} diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/cffti/test/fixtures/c/fftpack/Makefile b/lib/node_modules/@stdlib/fft/base/fftpack/cffti/test/fixtures/c/fftpack/Makefile deleted file mode 100644 index 7ce16281940d..000000000000 --- a/lib/node_modules/@stdlib/fft/base/fftpack/cffti/test/fixtures/c/fftpack/Makefile +++ /dev/null @@ -1,137 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2026 The Stdlib Authors. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -#/ - -# VARIABLES # - -ifndef VERBOSE - QUIET := @ -endif - -# Specify the path to FFTPACK: -FFTPACK ?= - -# Specify a list of FFTPACK source files: -FFTPACK_SRC ?= - -# Determine the OS: -# -# [1]: https://en.wikipedia.org/wiki/Uname#Examples -# [2]: http://stackoverflow.com/a/27776822/2225624 -OS ?= $(shell uname) -ifneq (, $(findstring MINGW,$(OS))) - OS := WINNT -else -ifneq (, $(findstring MSYS,$(OS))) - OS := WINNT -else -ifneq (, $(findstring CYGWIN,$(OS))) - OS := WINNT -endif -endif -endif - -# Define the program used for compiling C source files: -ifdef C_COMPILER - CC := $(C_COMPILER) -else - CC := gcc -endif - -# Define the command-line options when compiling C files: -CFLAGS ?= \ - -std=c99 \ - -O3 \ - -Wall \ - -pedantic - -# Determine whether to generate [position independent code][1]: -# -# [1]: https://gcc.gnu.org/onlinedocs/gcc/Code-Gen-Options.html#Code-Gen-Options -# [2]: http://stackoverflow.com/questions/5311515/gcc-fpic-option -ifeq ($(OS), WINNT) - fPIC ?= -else - fPIC ?= -fPIC -endif - -# List of C targets: -c_targets := runner.out - - -# RULES # - -#/ -# Compiles C source files. -# -# @param {string} [C_COMPILER] - C compiler -# @param {string} [CFLAGS] - C compiler flags -# @param {(string|void)} [fPIC] - flag indicating whether to generate position independent code -# -# @example -# make -# -# @example -# make all -#/ -all: $(c_targets) - -.PHONY: all - -#/ -# Compiles C source files. -# -# @private -# @param {string} CC - C compiler -# @param {string} CFLAGS - C compiler flags -# @param {(string|void)} fPIC - flag indicating whether to generate position independent code -#/ -$(c_targets): %.out: %.c - $(QUIET) $(CC) $(CFLAGS) -DFFTPACK_DOUBLE_PRECISION $(fPIC) -o $@ $(FFTPACK_SRC) $< -lm - -#/ -# Generates test fixtures. -# -# @example -# make run -#/ -run: $(c_targets) - $(QUIET) ./$< - -.PHONY: run - -#/ -# Removes generated files. -# -# @example -# make clean -#/ -clean: - $(QUIET) -rm -f *.o *.out - -.PHONY: clean - -#/ -# Removes generated test fixtures. -# -# @example -# make clean-fixtures -#/ -clean-fixtures: - $(QUIET) -rm -f *.json - -.PHONY: clean-fixtures diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/cffti/test/fixtures/c/fftpack/large.json b/lib/node_modules/@stdlib/fft/base/fftpack/cffti/test/fixtures/c/fftpack/large.json deleted file mode 100644 index e701c6bce28d..000000000000 --- a/lib/node_modules/@stdlib/fft/base/fftpack/cffti/test/fixtures/c/fftpack/large.json +++ /dev/null @@ -1 +0,0 @@ -{"lengths":[277,422,587,637,805,534,382,840,479,367],"offsets":[0,554,1398,2572,3846,5456,6524,7288,8968,9926],"twiddles":[0.99974275225183129,0.022681034366480814,0.99897114136013299,0.045350399442927798,0.99768556431523392,0.067996431943104299,0.99588668254073376,0.090607480585279038,0.993575421553204,0.11317191208675818,0.99075297048601352,0.13567811714915681,0.9874207814775251,0.15811451643133065,0.98358056892397661,0.180469566506895,0.97923430859743155,0.20273176580326555,0.97438423662925411,0.22488966051916581,0.96903284835962877,0.24693185051755615,0.9631828970537194,0.2688469951909529,0.95683739248512656,0.29062381929612002,0.94999959938737299,0.31225111875513101,0.94267303577421213,0.33371776641981604,0.93486147112962681,0.35501271779663041,0.92656892446844585,0.37612501672899584,0.91779966226857979,0.39704380103419434,0.90855819627593648,0.41775830809191211,0.89884928118314866,0.438257880381559,0.88867791218330605,0.45853197096551523,0.87804932239995059,0.478570148915483,0.86696898019465829,0.49836210467915221,0.85544258635359149,0.51789765538441879,0.84347607115447065,0.53716675007842629,0.83107559131547237,0.55615947489873618,0.81824752682762625,0.57486605817396541,0.80499847767233823,0.59327687545126695,0.79133526042572921,0.6113824544480676,0.7772649047515382,0.62917347992551487,0.76279464978439138,0.64664079848112566,0.7479319404053002,0.66377542325816985,0.73268442341130358,0.68056853856936828,0.71705994358122516,0.6970115044325238,0.70106653963957044,0.71309586101575329,0.68471244012063814,0.72881333299003348,0.66800605913497768,0.7441558337868196,0.65095599204036603,0.75911546975854927,0.63357101101953583,0.77368454423988797,0.61586006056692622,0.78785556150762937,0.59783225288678077,0.8016212306372108,0.57949686320495974,0.81497446925386086,0.56086332499687819,0.82790840717644987,0.54194122513402487,0.84041638995216661,0.5227402989515606,0.85249198228020484,0.50327042523953147,0.86412897132269617,0.48354162116027699,0.87532136990118736,0.46356403709464361,0.8860634195770164,0.44334795141966132,0.89634959361400368,0.42290376522036316,0.90617459982193271,0.40224199693847473,0.91553338327935807,0.38137327696072398,0.92442112893433959,0.36030834214955321,0.93283326408176526,0.33905803031905396,0.9407654607159871,0.31763327465895846,0.94821363775756073,0.29604509810956386,0.95517396315294245,0.27430460769047932,0.96164285584606313,0.25242298878611319,0.96761698762076609,0.23041149939084479,0.97309328481315849,0.20828146431683547,0.97806892989299832,0.18604426936746435,0.98254136291330063,0.16371135547938448,0.98650828282741887,0.14129421283621096,0.98996764867292275,0.11880437495687492,0.99291768062166474,0.096253412761678356,0.99535686089549313,0.07365292861910859,0.99728393454714215,0.051014550376472456,0.99869791010589704,0.028349925377419719,0.9995980600877008,0.0056707144694390236,0.99998392136944192,-0.017011413995597215,0.99985529542722851,-0.03968479016474661,0.99921224843852874,-0.062337748688082922,0.99805511124812207,-0.084958634720467621,0.99638447919788176,-0.10753580991791345,0.99420121182047372,-0.13005765842546152,0.99150643239713077,-0.1525125928534857,0.98830152737972987,-0.17488906023935183,0.98458814567746877,-0.19717554799136633,0.98036819780850926,-0.21936058981195117,0.97564385491702499,-0.24143277159700385,0.97041754765615662,-0.26338073730840184,0.96469196493745224,-0.28519319481663241,0.95847005254743478,-0.30685892171054396,0.95175501163200726,-0.32836677107122425,0.94455029704947857,-0.34970567720704177,0.93685961559305364,-0.37086466134689239,0.92868692408370579,-0.39183283728872936,0.92003642733440949,-0.41259941700046437,0.9109125759867831,-0.43315371617036103,0.90132006422125455,-0.45348515970406617,0.89126382734192555,-0.47358328716544773,0.88074903923738068,-0.49343775815844237,0.86978110971874445,-0.51303835764714123,0.85836568173635874,-0.53237500121138237,0.84650862847650921,-0.55143774023513759,0.83421605033969759,-0.57021676702503177,0.82149427180201362,-0.58870241985635507,0.80834983816122086,-0.60688518794397928,0.79478951216922888,-0.62475571633561255,0.78082027055268977,-0.64230481072487999,0.76644930042350234,-0.65952344218175396,0.75168399558107568,-0.67640275179789611,0.736531952708254,-0.69293405524452811,0.72100096746285525,-0.70910884724047785,0.70509903046684208,-0.72491880592810942,0.68883432319518167,-0.74035579715488098,0.6722152137665145,-0.75541187865832871,0.65525025263779524,-0.77007930415232706,0.63794816820511979,-0.7843505273125162,0.62031786231300623,-0.79821820565885326,0.60236840567443495,-0.81167520433328466,0.58410903320400775,-0.82471459977059747,0.56554913926662753,-0.83732968326056456,0.54669827284413719,-0.84951396439954452,0.52756613262241303,-0.86126117442976513,0.5081625620014345,-0.87256526946457158,0.48849754403089851,-0.88342043359797784,0.46858119627398714,-0.89382108189692544,0.44842376560192443,-0.90376186327470565,0.42803562292200886,-0.91323766324406963,0.40742725784182793,-0.92224360654860893,0.38660927327240185,-0.93077505967105278,0.36559237997303529,-0.93882763321719265,0.34438739104067728,-0.94639718417420526,0.32300521634663348,-0.95347981804221371,0.30145685692348584,-0.96007189083799105,0.27975339930511056,-0.96617001096977195,0.25790600982270817,-0.97177104098221256,0.23592592885977368,-0.9768720991705967,0.21382446506897157,-0.98147056106345998,0.19161298955388473,-0.98556406077286829,0.16930293001863223,-0.98915049221165696,0.14690576488836884,-0.99222801017700279,0.1244330174036844,-0.99479503129977276,0.10189624969195009,-0.99685023485916002,0.079307056818655589,-0.99839256346218952,0.056677060821799664,-0.99942122358774077,0.034017904732405728,-0.9999356859948122,0.011341246584232138,-0.9999356859948122,-0.011341246584231893,-0.99942122358774077,-0.034017904732405485,-0.99839256346218941,-0.056677060821799866,-0.99685023485916002,-0.079307056818655339,-0.99479503129977276,-0.10189624969194984,-0.99222801017700279,-0.12443301740368416,-0.98915049221165707,-0.14690576488836862,-0.98556406077286829,-0.16930293001863242,-0.98147056106345998,-0.19161298955388451,-0.97687209917059681,-0.21382446506897132,-0.97177104098221256,-0.23592592885977343,-0.96617001096977195,-0.25790600982270795,-0.96007189083799094,-0.27975339930511078,-0.95347981804221382,-0.30145685692348556,-0.94639718417420526,-0.32300521634663326,-0.93882763321719276,-0.34438739104067706,-0.93077505967105278,-0.36559237997303506,-0.92224360654860882,-0.38660927327240208,-0.91323766324406974,-0.40742725784182771,-0.90376186327470576,-0.42803562292200864,-0.89382108189692555,-0.44842376560192421,-0.88342043359797795,-0.46858119627398692,-0.87256526946457147,-0.48849754403089868,-0.86126117442976524,-0.50816256200143428,-0.84951396439954463,-0.52756613262241281,-0.83732968326056467,-0.54669827284413697,-0.82471459977059725,-0.56554913926662775,-0.81167520433328444,-0.58410903320400798,-0.79821820565885349,-0.60236840567443473,-0.78435052731251642,-0.62031786231300601,-0.77007930415232717,-0.63794816820511957,-0.75541187865832859,-0.65525025263779535,-0.74035579715488087,-0.67221521376651461,-0.72491880592810964,-0.68883432319518145,-0.70910884724047807,-0.70509903046684186,-0.69293405524452822,-0.72100096746285514,-0.676402751797896,-0.73653195270825411,-0.65952344218175374,-0.7516839955810759,-0.6423048107248801,-0.76644930042350212,-0.62475571633561267,-0.78082027055268965,-0.6068851879439795,-0.79478951216922877,-0.58870241985635519,-0.80834983816122064,-0.57021676702503188,-0.82149427180201351,-0.55143774023513814,-0.83421605033969726,-0.53237500121138226,-0.84650862847650921,-0.51303835764714112,-0.85836568173635885,-0.49343775815844221,-0.86978110971874456,-0.47358328716544795,-0.88074903923738057,-0.45348515970406639,-0.89126382734192544,-0.43315371617036125,-0.90132006422125444,-0.4125994170004646,-0.91091257598678299,-0.39183283728872981,-0.92003642733440927,-0.37086466134689283,-0.92868692408370568,-0.34970567720704138,-0.93685961559305386,-0.32836677107122408,-0.94455029704947868,-0.3068589217105438,-0.95175501163200726,-0.28519319481663247,-0.95847005254743478,-0.26338073730840189,-0.96469196493745224,-0.2414327715970041,-0.97041754765615651,-0.21936058981195142,-0.97564385491702499,-0.19717554799136655,-0.98036819780850926,-0.17488906023935227,-0.98458814567746866,-0.15251259285348617,-0.98830152737972976,-0.13005765842546133,-0.99150643239713077,-0.10753580991791326,-0.99420121182047372,-0.084958634720467427,-0.99638447919788187,-0.062337748688082943,-0.99805511124812207,-0.039684790164746631,-0.99921224843852874,-0.017011413995597458,-0.99985529542722851,0.005670714469438779,-0.99998392136944192,0.028349925377419476,-0.9995980600877008,0.051014550376471984,-0.99869791010589704,0.073652928619108132,-0.99728393454714215,0.096253412761678564,-0.99535686089549302,0.11880437495687511,-0.99291768062166474,0.14129421283621119,-0.98996764867292275,0.16371135547938445,-0.98650828282741887,0.18604426936746432,-0.98254136291330063,0.20828146431683522,-0.97806892989299832,0.23041149939084454,-0.97309328481315849,0.25242298878611297,-0.96761698762076609,0.27430460769047887,-0.96164285584606335,0.29604509810956342,-0.95517396315294256,0.31763327465895863,-0.94821363775756073,0.33905803031905413,-0.9407654607159871,0.36030834214955343,-0.93283326408176526,0.38137327696072393,-0.92442112893433959,0.40224199693847473,-0.91553338327935818,0.42290376522036294,-0.90617459982193282,0.4433479514196611,-0.89634959361400379,0.46356403709464339,-0.88606341957701651,0.48354162116027655,-0.87532136990118747,0.50327042523953103,-0.8641289713226965,0.52274029895156071,-0.85249198228020473,0.54194122513402498,-0.8404163899521665,0.5608633249968783,-0.82790840717644976,0.57949686320495974,-0.81497446925386086,0.59783225288678066,-0.8016212306372108,0.6158600605669261,-0.78785556150762948,0.63357101101953572,-0.77368454423988808,0.65095599204036581,-0.75911546975854949,0.66800605913497735,-0.74415583378681993,0.68471244012063781,-0.72881333299003392,0.70106653963957055,-0.71309586101575317,0.71705994358122538,-0.69701150443252369,0.73268442341130358,-0.68056853856936828,0.7479319404053002,-0.66377542325816985,0.76279464978439127,-0.64664079848112577,0.77726490475153809,-0.62917347992551509,0.79133526042572899,-0.61138245444806771,0.80499847767233801,-0.59327687545126717,0.81824752682762603,-0.57486605817396585,0.83107559131547204,-0.55615947489873674,0.84347607115447076,-0.53716675007842607,0.85544258635359161,-0.51789765538441856,0.86696898019465829,-0.49836210467915215,0.87804932239995059,-0.47857014891548305,0.88867791218330605,-0.45853197096551535,0.89884928118314855,-0.43825788038155922,0.90855819627593626,-0.41775830809191239,0.91779966226857956,-0.39704380103419473,0.92656892446844574,-0.37612501672899629,0.93486147112962692,-0.35501271779663007,0.94267303577421224,-0.33371776641981588,0.94999959938737299,-0.31225111875513084,0.95683739248512656,-0.29062381929612002,0.9631828970537194,-0.26884699519095295,0.96903284835962877,-0.24693185051755626,0.97438423662925411,-0.22488966051916606,0.97923430859743155,-0.20273176580326588,0.98358056892397649,-0.18046956650689538,0.9874207814775251,-0.15811451643133115,0.99075297048601363,-0.13567811714915651,0.993575421553204,-0.11317191208675799,0.99588668254073376,-0.090607480585278927,0.99768556431523392,-0.067996431943104271,0.99897114136013299,-0.045350399442927861,0.99974275225183129,-0.022681034366480966,0.99974275225183129,-0.022681034366480966,1,0,0.99988915992369387,0.014888514603201883,0.99955666426582046,0.029773728718214355,0.99900258673406805,0.044652342588500739,0.99822705015642832,0.059521057920667614,0.9972302264539683,0.074376578615630989,0.99601233660271837,0.089215611499296063,0.99457365058468661,0.10403486705258858,0.99291448732800902,0.11883106014067589,0.99103521463624977,0.13360091074121613,0.98893624910686573,0.14834114467147413,0.98661805603885588,0.16304849431414264,0.98408114932961332,0.17771969934170845,0.98132609136100457,0.19235150743920196,0.97835349287470041,0.20694067502517111,0.97516401283678711,0.22148396797071904,0.97175835829168611,0.23597816231644603,0.96813728420541678,0.25042004498713755,0.96430159329823517,0.26480641450403913,0.96025213586668701,0.27913408169456078,0.95598980959511359,0.29339987039925308,0.95151555935665333,0.30760061817589884,0.94683037700378203,0.32173317700056375,0.94193530114843849,0.33579441396545079,0.93683141693178551,0.34978121197340356,0.93151985578365515,0.36369047042890512,0.92600179517173331,0.37751910592541849,0.92027845834053856,0.39126405292891614,0.91435111404025304,0.40492226445744889,0.90822107624546589,0.4184907127566006,0.901889703863891,0.4319663899706816,0.89535840043512416,0.44534630880951054,0.88862861381950609,0.45862750321063728,0.881701835877161,0.47180702899686006,0.87457960213728003,0.48488196452889126,0.86726349145772574,0.49784941135302685,0.85975512567502999,0.5107064948436757,0.85205616924486549,0.52345036484060758,0.84416832887306859,0.53607819628077658,0.8360933531372966,0.54858718982458188,0.82783303209940295,0.5609745724764259,0.81938919690861611,0.57323759819943165,0.81076371939560976,0.58537354852418555,0.80195851165755527,0.59737973315136728,0.79297552563424789,0.6092534905481366,0.78381675267539996,0.62099218853814164,0.77448422309919895,0.63259322488502057,0.76498000574222558,0.64405402786926547,0.75530620750083388,0.65537205685832167,0.74546497286409441,0.66654480286979578,0.73545848343840337,0.67756978912764676,0.72528895746386357,0.68844457161123862,0.71495864932254527,0.69916673959713049,0.70446984903873378,0.70973391619348702,0.69382488177127655,0.72014375886698767,0.68302610729814217,0.73039395996211987,0.6720759194933037,0.7404822472127407,0.6609767457960648,0.75040638424579276,0.64973104667294479,0.76016417107706391,0.63834131507224134,0.76975344459888029,0.62681007587139403,0.77917207905962416,0.6151398853172686,0.78841798653497097,0.60333333045948812,0.79748911739074035,0.59139302857693532,0.80638346073725997,0.57932162659755382,0.81509904487513929,0.56712180051157657,0.8236339377323566,0.55479625477831218,0.83198624729256088,0.5423477217266196,0.84015412201449391,0.52977896094920607,0.84813575124244089,0.51709275869087845,0.85592936560761657,0.50429192723088934,0.86353323742039911,0.49137930425951065,0.87094568105332448,0.47835775224897326,0.87816505331475692,0.46523015781891408,0.88518975381315179,0.45199943109646973,0.89201822531183061,0.43866850507115929,0.89864895407418932,0.42524033494469843,0.90508047019926396,0.41171789747589016,0.9113113479475784,0.39810419032073624,0.91734020605720268,0.3844022313679164,0.92316570804995068,0.37061505806978229,0.9287865625276519,0.356745726769015,0.93420152345842777,0.34279731202109381,0.93940939045291261,0.32877290591272873,0.94440900903035652,0.31467561737640609,0.94919927087455014,0.30050857150120014,0.95377911407951688,0.28627490884000245,0.95814752338491604,0.27197778471332407,0.96230353040110617,0.25762036850982328,0.9662462138238177,0.24320584298371525,0.96997469963838767,0.22873740354921834,0.97348816131351179,0.21421825757219431,0.97678581998446978,0.19965162365913958,0.97986694462578405,0.18504073094368279,0.98273085221327394,0.1703888183707509,0.98537690787546839,0.15569913397855917,0.98780452503434435,0.14097493417858548,0.99001316553535967,0.12621948303368855,0.99200233976675101,0.1114360515345301,0.99377160676807097,0.096627916874460942,0.99532057432794097,0.081798361723032467,0.99664889907099574,0.066950673498293783,0.99775628653400372,0.052088143638036294,0.9986424912311429,0.037214066870148048,0.99930731670842088,0.022331740482236712,0.99975061558722433,0.0074444635906871703,0.99997228959699025,-0.0074444635906872701,0.99997228959699025,-0.022331740482236809,0.99975061558722433,-0.037214066870148152,0.99930731670842088,-0.052088143638036391,0.9986424912311429,-0.066950673498293672,0.99775628653400372,-0.081798361723032342,0.99664889907099574,-0.096627916874460817,0.99532057432794097,-0.11143605153453019,0.99377160676807097,-0.12621948303368866,0.9920023397667509,-0.14097493417858556,0.99001316553535967,-0.15569913397855925,0.98780452503434435,-0.17038881837075098,0.98537690787546839,-0.18504073094368287,0.98273085221327394,-0.19965162365913966,0.97986694462578405,-0.21421825757219443,0.97678581998446978,-0.22873740354921823,0.9734881613135119,-0.24320584298371511,0.96997469963838778,-0.25762036850982339,0.9662462138238177,-0.27197778471332418,0.96230353040110617,-0.28627490884000256,0.95814752338491604,-0.30050857150120019,0.95377911407951688,-0.3146756173764062,0.94919927087455014,-0.32877290591272879,0.94440900903035652,-0.34279731202109393,0.93940939045291261,-0.35674572676901511,0.93420152345842766,-0.37061505806978234,0.9287865625276519,-0.38440223136791629,0.9231657080499508,-0.39810419032073613,0.91734020605720268,-0.41171789747589027,0.9113113479475784,-0.42524033494469854,0.90508047019926385,-0.43866850507115912,0.89864895407418932,-0.45199943109646978,0.8920182253118305,-0.46523015781891397,0.8851897538131519,-0.47835775224897337,0.87816505331475692,-0.49137930425951093,0.87094568105332437,-0.50429192723088934,0.86353323742039911,-0.51709275869087856,0.85592936560761657,-0.52977896094920596,0.84813575124244101,-0.54234772172661982,0.8401541220144938,-0.55479625477831207,0.83198624729256088,-0.56712180051157668,0.8236339377323566,-0.57932162659755371,0.8150990448751394,-0.59139302857693543,0.80638346073725997,-0.603333330459488,0.79748911739074047,-0.61513988531726871,0.78841798653497097,-0.62681007587139426,0.77917207905962405,-0.63834131507224146,0.76975344459888029,-0.64973104667294501,0.7601641710770638,-0.6609767457960648,0.75040638424579276,-0.67207591949330381,0.74048224721274059,-0.68302610729814206,0.73039395996211998,-0.69382488177127666,0.72014375886698756,-0.70446984903873378,0.70973391619348714,-0.71495864932254538,0.69916673959713038,-0.72528895746386379,0.6884445716112384,-0.73545848343840337,0.67756978912764687,-0.74546497286409463,0.66654480286979567,-0.75530620750083388,0.65537205685832178,-0.76498000574222569,0.64405402786926536,-0.77448422309919895,0.63259322488502057,-0.78381675267540007,0.62099218853814153,-0.79297552563424778,0.60925349054813671,-0.80195851165755538,0.59737973315136716,-0.81076371939560965,0.58537354852418555,-0.81938919690861622,0.57323759819943165,-0.82783303209940318,0.56097457247642568,-0.8360933531372966,0.54858718982458199,-0.8441683288730687,0.53607819628077635,-0.85205616924486549,0.52345036484060758,-0.8597551256750301,0.51070649484367558,-0.86726349145772563,0.4978494113530269,-0.87457960213728003,0.48488196452889115,-0.88170183587716089,0.47180702899686017,-0.8886286138195062,0.45862750321063717,-0.89535840043512405,0.44534630880951065,-0.901889703863891,0.43196638997068154,-0.908221076245466,0.41849071275660038,-0.91435111404025304,0.40492226445744889,-0.92027845834053856,0.39126405292891597,-0.92600179517173331,0.37751910592541849,-0.93151985578365515,0.36369047042890501,-0.93683141693178551,0.34978121197340362,-0.94193530114843849,0.33579441396545062,-0.94683037700378192,0.32173317700056386,-0.95151555935665333,0.30760061817589879,-0.95598980959511348,0.29339987039925325,-0.96025213586668701,0.27913408169456072,-0.96430159329823528,0.26480641450403891,-0.96813728420541678,0.25042004498713755,-0.97175835829168622,0.23597816231644583,-0.97516401283678711,0.22148396797071906,-0.97835349287470053,0.20694067502517097,-0.98132609136100457,0.19235150743920201,-0.98408114932961332,0.17771969934170831,-0.98661805603885588,0.16304849431414278,-0.98893624910686573,0.14834114467147402,-0.99103521463624977,0.1336009107412163,-0.99291448732800902,0.11883106014067585,-0.99457365058468661,0.10403486705258834,-0.99601233660271837,0.089215611499296063,-0.9972302264539683,0.074376578615630781,-0.99822705015642832,0.059521057920667648,-0.99900258673406805,0.044652342588500579,-0.99955666426582046,0.029773728718214439,-0.99988915992369387,0.014888514603201761,0.99955666426582046,0.029773728718214355,0.99822705015642832,0.059521057920667614,0.99601233660271837,0.089215611499296063,0.99291448732800902,0.11883106014067589,0.98893624910686573,0.14834114467147413,0.98408114932961332,0.17771969934170845,0.97835349287470041,0.20694067502517111,0.97175835829168611,0.23597816231644603,0.96430159329823517,0.26480641450403913,0.95598980959511359,0.29339987039925308,0.94683037700378203,0.32173317700056375,0.93683141693178551,0.34978121197340356,0.92600179517173331,0.37751910592541849,0.91435111404025304,0.40492226445744889,0.901889703863891,0.4319663899706816,0.88862861381950609,0.45862750321063728,0.87457960213728003,0.48488196452889126,0.85975512567502999,0.5107064948436757,0.84416832887306859,0.53607819628077658,0.82783303209940295,0.5609745724764259,0.81076371939560976,0.58537354852418555,0.79297552563424789,0.6092534905481366,0.77448422309919895,0.63259322488502057,0.75530620750083388,0.65537205685832167,0.73545848343840337,0.67756978912764676,0.71495864932254527,0.69916673959713049,0.69382488177127655,0.72014375886698767,0.6720759194933037,0.7404822472127407,0.64973104667294479,0.76016417107706391,0.62681007587139403,0.77917207905962416,0.60333333045948812,0.79748911739074035,0.57932162659755382,0.81509904487513929,0.55479625477831218,0.83198624729256088,0.52977896094920607,0.84813575124244089,0.50429192723088934,0.86353323742039911,0.47835775224897326,0.87816505331475692,0.45199943109646973,0.89201822531183061,0.42524033494469843,0.90508047019926396,0.39810419032073624,0.91734020605720268,0.37061505806978229,0.9287865625276519,0.34279731202109381,0.93940939045291261,0.31467561737640609,0.94919927087455014,0.28627490884000245,0.95814752338491604,0.25762036850982328,0.9662462138238177,0.22873740354921834,0.97348816131351179,0.19965162365913958,0.97986694462578405,0.1703888183707509,0.98537690787546839,0.14097493417858548,0.99001316553535967,0.1114360515345301,0.99377160676807097,0.081798361723032467,0.99664889907099574,0.052088143638036294,0.9986424912311429,0.022331740482236712,0.99975061558722433,-0.0074444635906872701,0.99997228959699025,-0.037214066870148152,0.99930731670842088,-0.066950673498293672,0.99775628653400372,-0.096627916874460817,0.99532057432794097,-0.12621948303368866,0.9920023397667509,-0.15569913397855925,0.98780452503434435,-0.18504073094368287,0.98273085221327394,-0.21421825757219443,0.97678581998446978,-0.24320584298371511,0.96997469963838778,-0.27197778471332418,0.96230353040110617,-0.30050857150120019,0.95377911407951688,-0.32877290591272879,0.94440900903035652,-0.35674572676901511,0.93420152345842766,-0.38440223136791629,0.9231657080499508,-0.41171789747589027,0.9113113479475784,-0.43866850507115912,0.89864895407418932,-0.46523015781891397,0.8851897538131519,-0.49137930425951093,0.87094568105332437,-0.51709275869087856,0.85592936560761657,-0.54234772172661982,0.8401541220144938,-0.56712180051157668,0.8236339377323566,-0.59139302857693543,0.80638346073725997,-0.61513988531726871,0.78841798653497097,-0.63834131507224146,0.76975344459888029,-0.6609767457960648,0.75040638424579276,-0.68302610729814206,0.73039395996211998,-0.70446984903873378,0.70973391619348714,-0.72528895746386379,0.6884445716112384,-0.74546497286409463,0.66654480286979567,-0.76498000574222569,0.64405402786926536,-0.78381675267540007,0.62099218853814153,-0.80195851165755538,0.59737973315136716,-0.81938919690861622,0.57323759819943165,-0.8360933531372966,0.54858718982458199,-0.85205616924486549,0.52345036484060758,-0.86726349145772563,0.4978494113530269,-0.88170183587716089,0.47180702899686017,-0.89535840043512405,0.44534630880951065,-0.908221076245466,0.41849071275660038,-0.92027845834053856,0.39126405292891597,-0.93151985578365515,0.36369047042890501,-0.94193530114843849,0.33579441396545062,-0.95151555935665333,0.30760061817589879,-0.96025213586668701,0.27913408169456072,-0.96813728420541678,0.25042004498713755,-0.97516401283678711,0.22148396797071906,-0.98132609136100457,0.19235150743920201,-0.98661805603885588,0.16304849431414278,-0.99103521463624977,0.1336009107412163,-0.99457365058468661,0.10403486705258834,-0.9972302264539683,0.074376578615630781,-0.99900258673406805,0.044652342588500579,-0.99988915992369387,0.014888514603201761,-0.99988915992369387,-0.014888514603201961,-0.99900258673406805,-0.04465234258850078,-0.9972302264539683,-0.074376578615630975,-0.99457365058468661,-0.10403486705258853,-0.99103521463624977,-0.13360091074121605,-0.98661805603885588,-0.16304849431414253,-0.98132609136100457,-0.19235150743920176,-0.97516401283678711,-0.22148396797071926,-0.96813728420541678,-0.25042004498713771,-0.9602521358666869,-0.27913408169456094,-0.95151555935665333,-0.30760061817589895,-0.94193530114843849,-0.33579441396545079,-0.93151985578365515,-0.36369047042890518,-0.92027845834053856,-0.39126405292891614,-0.90822107624546589,-0.41849071275660055,-0.89535840043512416,-0.44534630880951043,-0.881701835877161,-0.47180702899685995,-0.86726349145772563,-0.49784941135302707,-0.85205616924486538,-0.5234503648406077,-0.83609335313729649,-0.5485871898245821,-0.81938919690861611,-0.57323759819943176,-0.80195851165755527,-0.59737973315136739,-0.78381675267539996,-0.62099218853814175,-0.76498000574222558,-0.64405402786926547,-0.74546497286409441,-0.66654480286979578,-0.72528895746386368,-0.68844457161123851,-0.70446984903873389,-0.70973391619348691,-0.68302610729814217,-0.73039395996211987,-0.66097674579606469,-0.75040638424579287,-0.63834131507224123,-0.7697534445988804,-0.61513988531726882,-0.78841798653497075,-0.59139302857693532,-0.80638346073726008,-0.56712180051157679,-0.82363393773235649,-0.54234772172661971,-0.84015412201449391,-0.51709275869087801,-0.8559293656076169,-0.49137930425951076,-0.87094568105332448,-0.46523015781891375,-0.88518975381315201,-0.4386685050711594,-0.89864895407418921,-0.41171789747588988,-0.91131134794757862,-0.38440223136791651,-0.92316570804995068,-0.35674572676901495,-0.93420152345842777,-0.32877290591272906,-0.94440900903035641,-0.30050857150120003,-0.95377911407951688,-0.2719777847133244,-0.96230353040110617,-0.24320584298371514,-0.96997469963838778,-0.21421825757219401,-0.97678581998446989,-0.1850407309436829,-0.98273085221327383,-0.15569913397855883,-0.98780452503434446,-0.12621948303368868,-0.9920023397667509,-0.096627916874460623,-0.99532057432794097,-0.066950673498293908,-0.99775628653400372,-0.037214066870147951,-0.99930731670842088,-0.0074444635906875146,-0.99997228959699025,0.022331740482236909,-0.99975061558722433,0.052088143638036932,-0.9986424912311429,0.081798361723032439,-0.99664889907099574,0.11143605153453051,-0.99377160676807097,0.14097493417858545,-0.99001316553535967,0.17038881837075132,-0.98537690787546828,0.19965162365913955,-0.97986694462578405,0.22873740354921854,-0.97348816131351179,0.25762036850982306,-0.96624621382381781,0.28627490884000262,-0.95814752338491604,0.31467561737640587,-0.94919927087455025,0.34279731202109398,-0.93940939045291261,0.3706150580697829,-0.92878656252765168,0.39810419032073624,-0.91734020605720268,0.42524033494469882,-0.90508047019926374,0.45199943109646967,-0.89201822531183061,0.47835775224897364,-0.87816505331475669,0.50429192723088923,-0.86353323742039911,0.52977896094920629,-0.84813575124244078,0.55479625477831196,-0.83198624729256099,0.57932162659755404,-0.81509904487513918,0.603333330459488,-0.79748911739074058,0.62681007587139415,-0.77917207905962416,0.64973104667294523,-0.76016417107706347,0.6720759194933037,-0.7404822472127407,0.69382488177127688,-0.72014375886698734,0.71495864932254527,-0.69916673959713049,0.73545848343840359,-0.67756978912764665,0.75530620750083377,-0.65537205685832178,0.77448422309919918,-0.63259322488502034,0.79297552563424767,-0.60925349054813682,0.81076371939560987,-0.58537354852418533,0.82783303209940284,-0.56097457247642613,0.84416832887306859,-0.53607819628077646,0.85975512567503032,-0.51070649484367525,0.87457960213728003,-0.48488196452889126,0.88862861381950631,-0.45862750321063689,0.901889703863891,-0.43196638997068165,0.91435111404025315,-0.40492226445744861,0.9260017951717332,-0.3775191059254186,0.93683141693178562,-0.34978121197340328,0.94683037700378192,-0.32173317700056397,0.95598980959511359,-0.29339987039925292,0.96430159329823517,-0.26480641450403947,0.97175835829168611,-0.23597816231644594,0.97835349287470053,-0.20694067502517063,0.98408114932961332,-0.17771969934170845,0.98893624910686584,-0.14834114467147372,0.99291448732800902,-0.11883106014067597,0.99601233660271837,-0.089215611499295744,0.99822705015642832,-0.059521057920667773,0.99955666426582046,-0.029773728718214116,0.99955666426582046,-0.029773728718214116,0.99994271388216194,0.0107036888023113,0.99977086209204657,0.021406151259066541,0.99948446431909743,0.032106161165214808,0.99908355337654797,0.042802492596699403,0.99856817519766083,0.053493920050914689,0.99793838883046648,0.064179218587114673,0.99719426643099685,0.074857163966757179,0.99633589325501903,0.085526532793767651,0.99536336764826661,0.096186102654706326,0.99427680103517269,0.10683465225882288,0.9930763179061034,0.11747096157798248,0.99176205580309473,0.12809381198644709,0.99033416530409402,0.13870198640049611,0.98879281000570807,0.14929426941787055,0.9871381665044594,0.15986944745702417,0.9853704243765532,0.17042630889616633,0.98348978615615712,0.18096364421208025,0.98149646731219664,0.19148024611870074,0.97939069622366803,0.20197490970543558,0.97717271415347273,0.21244643257521501,0.97484277522077534,0.22289361498225291,0.97240114637188835,0.23331525996950439,0.96984810734968752,0.24371017350580382,0.96718395066156149,0.25407716462266772,0.96440898154589816,0.26441504555074652,0.96152351793711321,0.27472263185591023,0.95852789042922304,0.28499874257495139,0.95542244223796857,0.29524220035089094,0.95220752916149187,0.30545183156787037,0.94888351953957162,0.31562646648561571,0.94545079421142153,0.32576493937345724,0.94190974647205694,0.33586608864388989,0.93826078202723417,0.34592875698565889,0.93450431894696728,0.35595179149635542,0.93064078761762981,0.36593404381450728,0.92667063069264355,0.37587437025114945,0.92259430304176371,0.3857716319208585,0.91841227169896233,0.39562469487223806,0.91412501580892003,0.40543243021783743,0.90973302657212929,0.41519371426349122,0.90523680718861577,0.42490742863706316,0.90063687280028637,0.43457246041658087,0.89593375043190804,0.4441877022577454,0.89112797893072515,0.45375205252080242,0.88622010890472269,0.46326441539675955,0.88121070265954204,0.47272370103293559,0.87610033413405597,0.48212882565782716,0.87088958883461165,0.49147871170527935,0.86557906376794758,0.50077228793794426,0.86016936737279326,0.51000848957001554,0.8546611194501591,0.51918625838922294,0.84905495109232398,0.52830454287807449,0.84335150461053054,0.5373622983343308,0.83755143346139316,0.54635848699069878,0.83165540217203038,0.55529207813373171,0.82566408626392873,0.56416204822191962,0.8195781721755464,0.5729673810029593,0.81339835718366671,0.58170706763018809,0.80712534932350932,0.59038010677816977,0.80075986730760906,0.5989855047574193,0.79430264044347176,0.60752227562825123,0.78775440855001544,0.61598944131374145,0.78111592187280798,0.62438603171178753,0.77438794099810937,0.6327110848062556,0.76757123676573003,0.6409636467772003,0.76066659018071392,0.6491427721101467,0.75367479232385659,0.65724752370441952,0.74659664426107031,0.66527697298050903,0.7394329569516026,0.67323019998646039,0.73218455115512449,0.68110629350327456,0.7248522573376931,0.68890435114930926,0.71743691557660361,0.69662347948366576,0.70993937546414021,0.7042627941085533,0.70236049601023531,0.71182141977061653,0.69470114554405205,0.71929849046121441,0.68696220161449706,0.7266931495156419,0.67914455088967818,0.73400454971127893,0.67124908905531677,0.74123185336465902,0.66327672071212662,0.74837423242744505,0.65522835927217282,0.75543086858129938,0.64710492685421883,0.76240095333164171,0.6389073541780782,0.76928368810027925,0.63063658045797943,0.77607828431690218,0.6222935532949585,0.78278396350943125,0.61387922856828991,0.78939995739320967,0.60539457032596911,0.79592550795902706,0.59684055067426001,0.80235986755996591,0.58821814966631791,0.80870229899706181,0.57952835518990342,0.81495207560376526,0.57077216285419718,0.82110848132919789,0.56195057587573105,0.82717081082019228,0.55306460496344756,0.83313836950210485,0.5441152682028999,0.83901047365839621,0.53510359093960891,0.84478645050896484,0.52603060566158577,0.85046563828722976,0.5168973518810378,0.85604738631595079,0.50770487601526992,0.86153105508177674,0.49845423126679339,0.86691601630851767,0.48914647750265822,0.87220165302912689,0.47978268113302275,0.87738735965638814,0.47036391498897123,0.88247254205229964,0.46089125819959809,0.88745661759614558,0.4513657960683693,0.89233901525124815,0.44178861994877749,0.89711917563039234,0.43216082711930187,0.90179655105991663,0.4224835206576914,0.9063706056424613,0.41275780931458317,0.91084081531836625,0.40298480738646897,0.91520666792571526,0.39316563458802883,0.91946766325901452,0.38330141592384315,0.92362331312650237,0.3733932815594973,0.9276731414060827,0.36344236669209684,0.93161668409987564,0.35344981142020482,0.93545348938737816,0.3434167606132193,0.93918311767723062,0.33334436378020171,0.94280514165758156,0.32323377493817568,0.9463191463450461,0.31308615247990912,0.94972472913225081,0.30290265904119379,0.95302149983396189,0.29268446136763987,0.95620908073178978,0.28243273018099918,0.95928710661746464,0.27214864004503386,0.96225522483467896,0.26183336923094236,0.96511309531949308,0.25148809958236323,0.96786039063929641,0.24111401637996929,0.97049679603032168,0.23071230820566585,0.97302200943370953,0.22028416680641333,0.97543574153011448,0.20983078695768556,0.97773771577285407,0.1993533663265826,0.97992766841959278,0.18885310533461006,0.98200534856255983,0.17833120702014474,0.9839705181572963,0.16778887690060057,0.9858229520499282,0.15722732283430829,0.98756243800296306,0.14664775488212956,0.98918877671960614,0.13605138516881687,0.99070178186659497,0.12543942774413883,0.99210128009554699,0.11481309844378218,0.99338711106282152,0.10417361475005174,0.99455912744788977,0.093522195652381138,0.99561719497021428,0.082860061507669322,0.9965611924046337,0.072188433900462326,0.99739101159525123,0.061508535502993171,0.99810655746782717,0.050821589935098506,0.99870774804067119,0.040128821624024362,0.99919451443403517,0.029431455664141494,0.9995668008780052,0.018730717676584206,0.99982456471889114,0.008027833668826893,0.99996777642411339,-0.0026759701057814918,0.99999641958558683,-0.013379467288512477,0.99991049092160023,-0.024081431555763842,0.99971000027719292,-0.034780636759563582,0.99939497062302618,-0.045475857068051767,0.99896543805275173,-0.056165867105926158,0.99842145177887653,-0.066849442094837536,0.99776307412712406,-0.077525357993714641,0.99699038052929401,-0.088192391639004608,0.99610345951461909,-0.098849320884814879,0.99510241269962307,-0.1094949247429363,0.99398735477647737,-0.12012798352273499,0.99275841349986127,-0.130747278970894,0.99141572967232428,-0.14135159441099274,0.98995945712815436,-0.1519397148829037,0.98838976271575274,-0.1625104272819923,0.98670682627851736,-0.17306252049810653,0.9849108406342385,-0.18359478555433559,0.9830020115530067,-0.19410601574552544,0.98098055773363713,-0.20459500677653292,0.9788467107786134,-0.2150605569002059,0.97660071516755165,-0.22550146705506927,0.97424282822919028,-0.23591654100270373,0.97177332011190742,-0.24630458546480255,0.96919247375276896,-0.2566644102598874,0.96650058484511236,-0.26699482843967054,0.96369796180466771,-0.27729465642504519,0.96078492573422292,-0.28756271414169221,0.95776181038683272,-0.29779782515528314,0.95462896212758153,-0.3079988168062664,0.95138673989389821,-0.3181645203442226,0.94803551515443285,-0.32829377106177016,0.94457567186649583,-0.33838540842800885,0.94100760643206793,-0.3484382762214836,0.93733172765238304,-0.35845122266265655,0.93354845668109088,-0.36842310054586846,0.92965822697600486,-0.37835276737077594,0.92566148424943961,-0.38823908547325153,0.92155868641714478,-0.3980809221557276,0.91735030354584035,-0.40787714981697254,0.91303681779936063,-0.41762664608128164,0.90861872338341121,-0.42732829392707128,0.90409652648894667,-0.43698098181485806,0.89947074523417525,-0.44658360381461043,0.89474190960519728,-0.45613505973245788,0.88991056139528257,-0.46563425523674123,0.88497725414279738,-0.47508010198339473,0.87994255306778257,-0.48447151774063879,0.87480703500719625,-0.49380742651297393,0.86957128834882413,-0.50308675866446007,0.86423591296386615,-0.5123084510412671,0.85880152013820843,-0.52147144709348292,0.85326873250238633,-0.53057469699616366,0.84763818396024915,-0.53961715776961638,0.84191051961633123,-0.54859779339889436,0.83608639570194188,-0.55751557495249571,0.83016647949997846,-0.5663694807002505,0.8241514492684755,-0.57515849623038284,0.81804199416289425,-0.58388161456573429,0.81183881415716463,-0.59253783627913448,0.80554261996348875,-0.60112616960790966,0.7991541329509112,-0.60964563056750931,0.7926740850626719,-0.61809524306424479,0.78610321873234434,-0.62647403900712173,0.7794422867987747,-0.63478105841875665,0.77269205241982597,-0.6430153495453641,0.76585328898494209,-0.65117596896579977,0.75892678002653979,-0.65926198169965244,0.75191331913023529,-0.66727246131436568,0.74481370984392359,-0.675206490031381,0.73762876558571289,-0.68306315883129054,0.73035930955073003,-0.6908415675579852,0.72300617461680494,-0.69854082502178649,0.71557020324904663,-0.70616004910155405,0.70805224740331907,-0.71369836684575083,0.70045316842863092,-0.72115491457245984,0.69277383696844963,-0.72852883796833767,0.68501513286094906,-0.73581929218649489,0.67717794503820461,-0.74302544194329312,0.66926317142434644,-0.7501464616140433,0.66127171883268276,-0.75718153532760202,0.65320450286180309,-0.7641298570598456,0.64506244779067701,-0.77099063072601914,0.63684648647275677,-0.77776307027194502,0.62855756022909903,-0.7844463997640837,0.62019661874051479,-0.79103985347843364,0.6117646199387623,-0.79754267598826134,0.6032625298967963,-0.80395412225065421,0.59469132271808056,-0.81027345769187975,0.58605198042498374,-0.81649995829154864,0.57734549284626735,-0.82263291066556665,0.56857285750367814,-0.82867161214786911,0.55973507949765988,-0.83461537087092674,0.55083317139219701,-0.84046350584501384,0.54186815309880354,-0.84621534703623214,0.53284105175966801,-0.85187023544327722,0.52375290162997234,-0.85742752317294169,0.51460474395939515,-0.86288657351434606,0.50539762687281298,-0.86824676101188802,0.49613260525021469,-0.87350747153690267,0.48681074060584067,-0.8786681023580234,0.47743310096656477,-0.88372806221023981,0.4680007607495254,-0.88868677136263907,0.45851480063902889,-0.89354366168482768,0.44897630746273259,-0.89829817671202294,0.43938637406712477,-0.90294977170880852,0.42974609919231443,-0.90749791373154653,0.4200565873461462,-0.9119420816894368,0.41031894867765573,-0.91628176640422077,0.40053429884987496,-0.92051647066851872,0.39070375891201009,-0.92464570930279555,0.38082845517099961,-0.9286690092109493,0.37090951906247116,-0.9325859094345148,0.3609480870211102,-0.93639596120547652,0.35094530035045585,-0.94009872799768479,0.3409023050921407,-0.94369378557687023,0.33082025189458414,-0.94718072204924852,0.32070029588116106,-0.95055913790871238,0.3105435965178569,-0.95382864608260376,0.30035131748042482,-0.95698887197606164,0.2901246265210608,-0.96003945351494036,0.27986469533461111,-0.96298004118729241,0.26957269942433065,-0.96581029808341434,0.25924981796719987,-0.96852989993444594,0.24889723367882599,-0.97113853514952297,0.23851613267793595,-0.97363590485147677,0.22810770435048022,-0.97602172291107725,0.21767314121336212,-0.97829571597981557,0.20721363877780816,-0.98045762352122179,0.19673039541239729,-0.9825071978407155,0.18622461220575856,-0.98444420411398481,0.17569749282896155,-0.98626842041389051,0.16515024339760845,-0.9879796377358927,0.15458407233364685,-0.98957766002199721,0.1440001902269181,-0.99106230418321795,0.13339980969645682,-0.99243340012055403,0.12278414525156028,-0.99369079074447886,0.11215441315263672,-0.99483433199293736,0.10151183127185734,-0.99586389284785226,0.090857618953621558,-0.99677935535013451,0.080192996874854067,-0.99758061461319858,0.069519186905149064,-0.9982675788349793,0.058837411966777518,-0.9988401693084501,0.048148895894575987,-0.99929832043064015,0.037454863295726483,-0.99964197971015123,0.026756539409452249,-0.99987110777317134,0.016055149966638919,-0.99998567836798591,0.0053519210493998002,-0.99998567836798591,-0.0053519210493991115,-0.99987110777317134,-0.016055149966638677,-0.99964197971015123,-0.026756539409452006,-0.99929832043064015,-0.03745486329572624,-0.9988401693084501,-0.048148895894575744,-0.99826757883497941,-0.058837411966777275,-0.99758061461319858,-0.069519186905148384,-0.99677935535013451,-0.080192996874853831,-0.99586389284785226,-0.090857618953621322,-0.99483433199293736,-0.10151183127185709,-0.99369079074447886,-0.11215441315263648,-0.99243340012055403,-0.12278414525156005,-0.99106230418321795,-0.13339980969645657,-0.98957766002199721,-0.1440001902269174,-0.98797963773589281,-0.15458407233364663,-0.98626842041389051,-0.16515024339760823,-0.98444420411398481,-0.17569749282896133,-0.9825071978407155,-0.18622461220575834,-0.98045762352122179,-0.19673039541239704,-0.97829571597981568,-0.20721363877780791,-0.97602172291107747,-0.21767314121336145,-0.97363590485147677,-0.22810770435047997,-0.97113853514952297,-0.23851613267793573,-0.96852989993444605,-0.24889723367882574,-0.96581029808341445,-0.25924981796719965,-0.96298004118729252,-0.26957269942433038,-0.96003945351494036,-0.27986469533461089,-0.95698887197606186,-0.29012462652106014,-0.95382864608260387,-0.3003513174804246,-0.95055913790871249,-0.31054359651785668,-0.94718072204924864,-0.32070029588116078,-0.94369378557687034,-0.33082025189458386,-0.9400987279976849,-0.34090230509214048,-0.93639596120547663,-0.35094530035045557,-0.93258590943451503,-0.36094808702110953,-0.92866900921094941,-0.37090951906247094,-0.92464570930279566,-0.38082845517099939,-0.92051647066851883,-0.39070375891200987,-0.91628176640422088,-0.40053429884987474,-0.91194208168943691,-0.4103189486776555,-0.90749791373154665,-0.42005658734614598,-0.90294977170880886,-0.42974609919231382,-0.89829817671202306,-0.43938637406712455,-0.89354366168482779,-0.44897630746273237,-0.88868677136263918,-0.45851480063902866,-0.88372806221023992,-0.46800076074952518,-0.87866810235802351,-0.47743310096656455,-0.87350747153690278,-0.48681074060584045,-0.86824676101188836,-0.49613260525021408,-0.86288657351434617,-0.50539762687281276,-0.8574275231729418,-0.51460474395939493,-0.85187023544327733,-0.52375290162997212,-0.84621534703623225,-0.53284105175966778,-0.84046350584501395,-0.54186815309880343,-0.83461537087092685,-0.55083317139219679,-0.82867161214786944,-0.55973507949765933,-0.82263291066556676,-0.56857285750367792,-0.81649995829154876,-0.57734549284626713,-0.81027345769187986,-0.58605198042498352,-0.80395412225065432,-0.59469132271808034,-0.79754267598826156,-0.60326252989679618,-0.79103985347843375,-0.61176461993876208,-0.78444639976408415,-0.62019661874051424,-0.77776307027194524,-0.62855756022909881,-0.77099063072601925,-0.63684648647275666,-0.76412985705984582,-0.64506244779067679,-0.75718153532760224,-0.65320450286180298,-0.75014646161404352,-0.66127171883268254,-0.74302544194329323,-0.66926317142434621,-0.73581929218649533,-0.67717794503820417,-0.72852883796833778,-0.68501513286094884,-0.72115491457246006,-0.69277383696844952,-0.71369836684575105,-0.70045316842863081,-0.70616004910155417,-0.70805224740331885,-0.6985408250217866,-0.71557020324904641,-0.69084156755798531,-0.72300617461680472,-0.6830631588312911,-0.73035930955072959,-0.67520649003138122,-0.73762876558571266,-0.66727246131436591,-0.74481370984392348,-0.65926198169965267,-0.75191331913023518,-0.65117596896579988,-0.75892678002653957,-0.64301534954536388,-0.76585328898494232,-0.6347810584187572,-0.77269205241982553,-0.62647403900712195,-0.77944228679877448,-0.61809524306424535,-0.78610321873234401,-0.60964563056750953,-0.79267408506267167,-0.6011261696079101,-0.79915413295091087,-0.5925378362791347,-0.80554261996348853,-0.58388161456573417,-0.81183881415716475,-0.5751584962303834,-0.81804199416289392,-0.56636948070025073,-0.82415144926847539,-0.55751557495249626,-0.83016647949997813,-0.54859779339889458,-0.83608639570194165,-0.53961715776961694,-0.8419105196163309,-0.53057469699616389,-0.84763818396024904,-0.5214714470934827,-0.85326873250238644,-0.51230845104126765,-0.8588015201382081,-0.50308675866446029,-0.86423591296386604,-0.49380742651297455,-0.8695712883488238,-0.48447151774063901,-0.87480703500719614,-0.47508010198339534,-0.87994255306778224,-0.46563425523674146,-0.88497725414279726,-0.45613505973245771,-0.88991056139528268,-0.44658360381461104,-0.89474190960519695,-0.43698098181485828,-0.89947074523417514,-0.42732829392707189,-0.90409652648894634,-0.41762664608128186,-0.9086187233834111,-0.40787714981697321,-0.91303681779936041,-0.39808092215572805,-0.91735030354584024,-0.38823908547325153,-0.92155868641714478,-0.37835276737077633,-0.92566148424943939,-0.36842310054586846,-0.92965822697600486,-0.35845122266265722,-0.93354845668109065,-0.34843827622148382,-0.93733172765238293,-0.33838540842800952,-0.94100760643206771,-0.3282937710617706,-0.94457567186649571,-0.3181645203442226,-0.94803551515443274,-0.30799881680626684,-0.9513867398938981,-0.29779782515528319,-0.95462896212758153,-0.28756271414169288,-0.95776181038683261,-0.27729465642504542,-0.96078492573422281,-0.26699482843967121,-0.9636979618046676,-0.25666441025988784,-0.96650058484511225,-0.24630458546480258,-0.96919247375276896,-0.23591654100270418,-0.97177332011190731,-0.22550146705506929,-0.97424282822919028,-0.21506055690020656,-0.97660071516755143,-0.20459500677653317,-0.9788467107786134,-0.19410601574552611,-0.98098055773363702,-0.18359478555433603,-0.98300201155300659,-0.17306252049810655,-0.9849108406342385,-0.16251042728199275,-0.98670682627851736,-0.1519397148829037,-0.98838976271575274,-0.14135159441099343,-0.98995945712815436,-0.13074727897089425,-0.99141572967232428,-0.12012798352273479,-0.99275841349986127,-0.10949492474293678,-0.99398735477647737,-0.098849320884814892,-0.99510241269962307,-0.088192391639005066,-0.99610345951461909,-0.077525357993714669,-0.99699038052929401,-0.06684944209483823,-0.99776307412712406,-0.056165867105926401,-0.99842145177887653,-0.045475857068051566,-0.99896543805275173,-0.034780636759564047,-0.99939497062302618,-0.024081431555763862,-0.99971000027719292,-0.013379467288512943,-0.99991049092160023,-0.0026759701057817368,-0.99999641958558683,0.0080278336688262043,-0.99996777642411339,0.01873071767658396,-0.99982456471889114,0.029431455664141692,-0.9995668008780052,0.040128821624023897,-0.99919451443403517,0.050821589935098485,-0.99870774804067119,0.061508535502992706,-0.99810655746782717,0.072188433900462076,-0.99739101159525123,0.082860061507668642,-0.9965611924046337,0.093522195652380902,-0.99561719497021428,0.10417361475005193,-0.99455912744788977,0.11481309844378172,-0.99338711106282152,0.1254394277441388,-0.99210128009554699,0.13605138516881643,-0.99070178186659497,0.14664775488212931,-0.98918877671960614,0.15722732283430763,-0.98756243800296317,0.16778887690060032,-0.98582295204992831,0.17833120702014493,-0.9839705181572963,0.18885310533460958,-0.98200534856255994,0.19935336632658257,-0.97992766841959278,0.20983078695768509,-0.97773771577285418,0.22028416680641311,-0.97543574153011448,0.23071230820566518,-0.97302200943370964,0.24111401637996904,-0.9704967960303218,0.2514880995823634,-0.9678603906392963,0.26183336923094186,-0.9651130953194933,0.27214864004503381,-0.96225522483467896,0.28243273018099874,-0.95928710661746475,0.29268446136763959,-0.9562090807317899,0.30290265904119312,-0.95302149983396212,0.3130861524799089,-0.94972472913225081,0.32323377493817584,-0.9463191463450461,0.33334436378020127,-0.94280514165758178,0.3434167606132193,-0.93918311767723062,0.35344981142020437,-0.93545348938737838,0.36344236669209656,-0.93161668409987575,0.37339328155949669,-0.92767314140608303,0.38330141592384293,-0.92362331312650248,0.393165634588029,-0.91946766325901452,0.40298480738646852,-0.91520666792571548,0.41275780931458311,-0.91084081531836625,0.42248352065769101,-0.90637060564246141,0.43216082711930165,-0.90179655105991674,0.44178861994877683,-0.89711917563039256,0.45136579606836907,-0.89233901525124826,0.46089125819959809,-0.88745661759614558,0.47036391498897084,-0.88247254205229986,0.47978268113302275,-0.87738735965638814,0.48914647750265783,-0.87220165302912711,0.49845423126679317,-0.86691601630851778,0.50770487601526937,-0.86153105508177708,0.51689735188103758,-0.8560473863159509,0.52603060566158577,-0.85046563828722976,0.53510359093960858,-0.84478645050896506,0.5441152682028999,-0.83901047365839621,0.553064604963447,-0.83313836950210518,0.56195057587573094,-0.82717081082019228,0.57077216285419663,-0.82110848132919834,0.5795283551899032,-0.81495207560376537,0.58821814966631802,-0.80870229899706181,0.59684055067425956,-0.80235986755996624,0.60539457032596911,-0.79592550795902706,0.61387922856828947,-0.78939995739321012,0.62229355329495839,-0.78278396350943136,0.63063658045797888,-0.77607828431690262,0.63890735417807787,-0.76928368810027947,0.64710492685421883,-0.76240095333164171,0.65522835927217249,-0.75543086858129971,0.66327672071212662,-0.74837423242744505,0.67124908905531633,-0.74123185336465947,0.67914455088967807,-0.73400454971127904,0.68696220161449661,-0.72669314951564234,0.69470114554405182,-0.71929849046121475,0.70236049601023542,-0.71182141977061641,0.70993937546413988,-0.70426279410855364,0.71743691557660361,-0.69662347948366576,0.72485225733769265,-0.68890435114930959,0.73218455115512437,-0.68110629350327478,0.73943295695160205,-0.67323019998646094,0.74659664426106997,-0.66527697298050925,0.7536747923238567,-0.65724752370441952,0.76066659018071359,-0.64914277211014704,0.76757123676573003,-0.64096364677720041,0.77438794099810904,-0.63271108480625604,0.78111592187280787,-0.62438603171178775,0.787754408550015,-0.615989441313742,0.79430264044347154,-0.60752227562825145,0.80075986730760906,-0.5989855047574193,0.80712534932350899,-0.5903801067781701,0.81339835718366671,-0.58170706763018809,0.81957817217554618,-0.57296738100295985,0.82566408626392862,-0.56416204822191984,0.83165540217203004,-0.55529207813373227,0.83755143346139294,-0.546358486990699,0.84335150461053054,-0.53736229833433069,0.84905495109232376,-0.52830454287807493,0.85466111945015899,-0.51918625838922305,0.86016936737279293,-0.51000848957001599,0.86557906376794747,-0.50077228793794448,0.87088958883461132,-0.49147871170527996,0.87610033413405575,-0.4821288256578275,0.88121070265954204,-0.47272370103293554,0.88622010890472247,-0.46326441539676,0.89112797893072515,-0.45375205252080247,0.89593375043190782,-0.4441877022577459,0.90063687280028637,-0.43457246041658104,0.90523680718861543,-0.42490742863706382,0.90973302657212907,-0.4151937142634915,0.91412501580892014,-0.40543243021783743,0.91841227169896211,-0.3956246948722385,0.9225943030417636,-0.38577163192085862,0.92667063069264333,-0.37587437025114995,0.93064078761762969,-0.3659340438145075,0.93450431894696695,-0.35595179149635608,0.93826078202723395,-0.34592875698565922,0.94190974647205705,-0.33586608864388989,0.94545079421142142,-0.32576493937345768,0.94888351953957151,-0.31562646648561576,0.95220752916149165,-0.30545183156787092,0.95542244223796846,-0.29524220035089116,0.95852789042922282,-0.28499874257495211,0.9615235179371131,-0.27472263185591062,0.96440898154589827,-0.26441504555074652,0.96718395066156138,-0.25407716462266816,0.96984810734968752,-0.2437101735058039,0.97240114637188824,-0.23331525996950497,0.97484277522077534,-0.22289361498225313,0.97717271415347262,-0.21244643257521573,0.97939069622366792,-0.20197490970543591,0.98149646731219664,-0.19148024611870071,0.98348978615615701,-0.18096364421208075,0.9853704243765532,-0.17042630889616645,0.98713816650445929,-0.15986944745702478,0.98879281000570807,-0.1492942694178708,0.99033416530409391,-0.13870198640049686,0.99176205580309462,-0.12809381198644743,0.9930763179061034,-0.11747096157798247,0.99427680103517269,-0.10683465225882337,0.99536336764826661,-0.096186102654706437,0.99633589325501892,-0.085526532793768276,0.99719426643099685,-0.074857163966757415,0.99793838883046648,-0.064179218587115408,0.99856817519766083,-0.053493920050915057,0.99908355337654797,-0.042802492596699389,0.99948446431909743,-0.032106161165215301,0.99977086209204657,-0.021406151259066655,0.99994271388216194,-0.010703688802311925,0.99994271388216194,-0.010703688802311925,0.62348980185873359,0.7818314824680298,0.99995135397538404,0.0098635532540870628,0.99980542063440758,0.019726146862865328,0.99956221417522439,0.029586821274391859,0.99922175825988935,0.039444617123446338,0.99878408601205604,0.049298575324869712,0.99824924001375437,0.059147737166875519,0.99761727230124764,0.068991144404324925,0.99688824435996948,0.078827839351956377,0.99606222711854231,0.088656864977560756,0.9951393009418763,0.098477264995092989,0.99411955562335041,0.1082880839577111,0.99300309037607637,0.11808836735073357,0.99179001382324605,0.12787716168450602,0.99048044398756319,0.13765351458716821,0.98907450827976051,0.14741647489731227,0.98757234348620426,0.15716509275652302,0.98597409575558559,0.16689841970179176,0.98427992058470115,0.17661550875779414,0.98248998280332522,0.18631541452902331,0.98060445655817252,0.19599719329176948,0.9786235252959552,0.2056599030859366,0.97654738174553546,0.21530260380668764,0.97437622789917355,0.22492435729590934,0.97211027499287639,0.23452422743348758,0.96974974348584586,0.24410128022838426,0.96729486303902945,0.2536545839095074,0.96474587249277644,0.26318320901636488,0.96210301984360058,0.27268622848949375,0.9593665622200519,0.2821627177606556,0.9565367658577002,0.29161175484278956,0.9536139060732326,0.30103242041971484,0.95059826723766705,0.31042379793557223,0.94749014274868559,0.31978497368399805,0.94428983500208918,0.32911503689702065,0.94099765536237645,0.33841307983367042,0.93761392413245104,0.3476781978682964,0.93413897052245853,0.35690948957857843,0.93057313261775643,0.366106056833229,0.92691675734602175,0.37526700487937414,0.92317020044349751,0.38439144242960538,0.91933382642038219,0.39347848174869549,0.9154080085253663,0.40252723873996754,0.91139312870931766,0.41153683303131094,0.90728957758812101,0.42050638806083429,0.90309775440467399,0.4294350311621481,0.89881806699004418,0.43832189364926821,0.89445093172379031,0.4471661109011319,0.88999677349345152,0.45596682244571901,0.88545602565320991,0.46472317204376856,0.88082912998172769,0.4734343077720844,0.87611653663916633,0.48209938210642039,0.8713187041233893,0.49071755200393796,0.86643609922535414,0.49928797898522681,0.86146919698369673,0.50780982921588336,0.85641848063851467,0.51628227358763545,0.85128444158435124,0.52470448779900802,0.84606757932238663,0.53307565243552146,0.84076840141184128,0.54139495304941387,0.83538742342059302,0.54966158023888012,0.82992516887501755,0.55787472972682095,0.82438216920905316,0.56603360243909195,0.81875896371249612,0.57413740458224771,0.81305609947853252,0.58218534772077069,0.80727413135051007,0.59017664885378129,0.80141362186795662,0.59811053049121599,0.79547514121184937,0.60598622072947195,0.78945926714914039,0.61380295332650703,0.78336658497654543,0.62155996777638822,0.77719768746359841,0.62925650938328392,0.7709531747949796,0.63689182933488919,0.76463365451212317,0.64446518477527948,0.75823974145410744,0.65197583887718435,0.75177205769783673,0.65942306091367509,0.74523123249751722,0.66680612632925873,0.73861790222343648,0.67412431681037144,0.73193271030004903,0.68137692035526465,0.72517630714337644,0.68856323134327713,0.7183493500977276,0.69568255060348638,0.71145250337174326,0.70273418548273259,0.70448643797377475,0.70971744991300789,0.69745183164659963,0.71663166447820548,0.69034936880148301,0.72347615648022157,0.6831797404515898,0.73025026000440307,0.67594364414475439,0.73695331598433678,0.66864178389561468,0.74358467226597003,0.66127487011711783,0.7501436836710611,0.65384361955140158,0.75662971205994944,0.64634875520006208,0.76304212639364166,0.63879100625381058,0.76938030279520686,0.63117110802152976,0.77564362461047431,-0.22252093395631434,0.97492791218182362,0.99980542063440758,0.019726146862865328,0.99922175825988935,0.039444617123446338,0.99824924001375437,0.059147737166875519,0.99688824435996948,0.078827839351956377,0.9951393009418763,0.098477264995092989,0.99300309037607637,0.11808836735073357,0.99048044398756319,0.13765351458716821,0.98757234348620426,0.15716509275652302,0.98427992058470115,0.17661550875779414,0.98060445655817252,0.19599719329176948,0.97654738174553546,0.21530260380668764,0.97211027499287639,0.23452422743348758,0.96729486303902945,0.2536545839095074,0.96210301984360058,0.27268622848949375,0.9565367658577002,0.29161175484278956,0.95059826723766705,0.31042379793557223,0.94428983500208918,0.32911503689702065,0.93761392413245104,0.3476781978682964,0.93057313261775643,0.366106056833229,0.92317020044349751,0.38439144242960538,0.9154080085253663,0.40252723873996754,0.90728957758812101,0.42050638806083429,0.89881806699004418,0.43832189364926821,0.88999677349345152,0.45596682244571901,0.88082912998172769,0.4734343077720844,0.8713187041233893,0.49071755200393796,0.86146919698369673,0.50780982921588336,0.85128444158435124,0.52470448779900802,0.84076840141184128,0.54139495304941387,0.82992516887501755,0.55787472972682095,0.81875896371249612,0.57413740458224771,0.80727413135051007,0.59017664885378129,0.79547514121184937,0.60598622072947195,0.78336658497654543,0.62155996777638822,0.7709531747949796,0.63689182933488919,0.75823974145410744,0.65197583887718435,0.74523123249751722,0.66680612632925873,0.73193271030004903,0.68137692035526465,0.7183493500977276,0.69568255060348638,0.70448643797377475,0.70971744991300789,0.69034936880148301,0.72347615648022157,0.67594364414475439,0.73695331598433678,0.66127487011711783,0.7501436836710611,0.64634875520006208,0.76304212639364166,0.63117110802152976,0.77564362461047431,0.61574783509543918,0.78794327433850198,0.60008493852311318,0.79993628906164238,0.58418851365750835,0.81161800159350284,0.56806474673115581,0.82298386589365635,0.55171991244873453,0.83402945883677315,0.53516037154521534,0.84475048193391822,0.51839256831052494,0.8551427630053462,0.50142302808169537,0.86520225780414106,0.48425835470347067,0.8749250515900705,0.46690522795836398,0.88430736065304139,0.44937040096716135,0.89334553378556314,0.43166069756088615,0.90203605370364726,0.413783009625246,0.91037553841558905,0.39574429441859421,0.9183607425380993,0.37755157186445287,0.92598855855927342,0.35921192181964789,0.93325601804790692,0.34073248131912093,0.9401602928086864,0.32212044179849053,0.94669869598280598,0.30338304629544116,0.95286868309358252,0.28452758663103245,0.95866785303666058,0.26556140057202332,0.96409394901442325,0.24649186897531572,0.96914485941424455,0.22732641291563049,0.97381861863024177,0.20807249079753021,0.97811340782820866,0.18873759545291671,0.98202755565343036,0.16932925122512985,0.98555953888110526,0.14985501104078355,0.98870798300912222,0.13032245347047913,0.99147166279295895,0.11073917977953723,0.99384950272249739,0.091112810969899899,0.99584057744056764,0.071450984814350818,0.99744411210305883,0.051761352884209272,0.99865948268045623,0.03205157757165511,0.99948621620068789,0.012329329107840686,0.99992399093318618,-0.0073977174220457012,0.99997263651409163,-0.027121885065606463,0.99963213401255169,-0.046835497990787969,0.99890261593808782,-0.066530884472996751,0.99778436618902822,-0.086200379880619418,0.99627781994202647,-0.10583632965778009,0.99438356348270851,-0.12543109230317789,0.99210233397751446,-0.14497704234384406,0.98943501918682419,-0.16446657330266054,0.98638265711947748,-0.18389210065848827,0.98294643562882322,-0.20324606479774882,0.97912769195045712,-0.90096886790241926,0.43388373911755784,0.99956221417522439,0.029586821274391859,0.99824924001375437,0.059147737166875519,0.99606222711854231,0.088656864977560756,0.99300309037607637,0.11808836735073357,0.98907450827976051,0.14741647489731227,0.98427992058470115,0.17661550875779414,0.9786235252959552,0.20565990308593662,0.97211027499287639,0.23452422743348758,0.96474587249277644,0.26318320901636488,0.9565367658577002,0.29161175484278956,0.94749014274868559,0.31978497368399811,0.93761392413245104,0.3476781978682964,0.92691675734602175,0.37526700487937414,0.9154080085253663,0.4025272387399676,0.90309775440467399,0.42943503116214815,0.88999677349345152,0.45596682244571901,0.87611653663916622,0.4820993821064205,0.86146919698369673,0.50780982921588336,0.84606757932238663,0.53307565243552146,0.82992516887501755,0.55787472972682095,0.81305609947853252,0.58218534772077069,0.79547514121184926,0.60598622072947206,0.77719768746359841,0.62925650938328392,0.75823974145410744,0.65197583887718435,0.73861790222343637,0.67412431681037155,0.7183493500977276,0.69568255060348638,0.69745183164659952,0.71663166447820548,0.67594364414475427,0.73695331598433678,0.65384361955140158,0.75662971205994944,0.63117110802152965,0.77564362461047442,0.60794596096345843,0.79397840559313515,0.58418851365750835,0.81161800159350284,0.55991956745100624,0.82854696788140991,0.53516037154521512,0.84475048193391833,0.50993260439013577,0.86021435641350075,0.48425835470347067,0.8749250515900705,0.45816010213036873,0.88886968719598602,0.43166069756088615,0.90203605370364726,0.40478334312239378,0.9144126230158125,0.37755157186445287,0.92598855855927342,0.34998922715394376,0.93675372477305108,0.32212044179849053,0.94669869598280598,0.29396961691645768,0.9558147646536912,0.2655614005720231,0.96409394901442336,0.23692066619403279,0.97152900004589449,0.20807249079753021,0.97811340782820866,0.17904213302703359,0.98384140724058267,0.14985501104078355,0.98870798300912222,0.12053668025532301,0.99270887409805397,0.091112810969899677,0.99584057744056775,0.061609165890280405,0.99810035100600181,0.03205157757165511,0.99948621620068789,0.0024659258003844574,0.99999695960035151,-0.027121885065606685,0.99963213401255169,-0.056685948777951994,0.99839205886823013,-0.08620037988061964,0.99627781994202647,-0.11563933637448305,0.99329126840160498,-0.14497704234384406,0.98943501918682419,-0.17418781052509302,0.98471244872017039,-0.20324606479774901,0.97912769195045712,-0.23212636257818506,0.97268563873238145,-0.26080341709643418,0.96539192954510622,-0.28925211953656782,0.9572529505536157,-0.31744756102126248,0.94827582801717125,-0.34536505442130772,0.93846842204976033,-0.37298015597095618,0.9278393197380036,-0.40026868667019105,0.9163978276225454,-0.42720675345517467,0.9041539635495105,-0.45377077011833572,0.89111844789916261,-0.47993747795978653,0.87730269419944185,-0.50568396615197864,0.8627187991326053,-0.53098769179977512,0.84737953194371352,-0.5558264996783715,0.83129832326024167,-0.58017864163178023,0.8144892533326038,-0.60402279561490058,0.7969670397058839,-0.62733808436249838,0.77874702433357068,-0.65010409366874455,0.75984516014457859,-0.6723008902613169,0.7402779970753155,-0.69390903925440872,0.72006266757902637,-0.71490962116536172,0.69921687162510526,-0.73528424848003138,0.67775886120150097,-0.75501508175237031,0.65570742433379658,-0.774084845224143,0.63308186863494564,-0.79247684195109047,0.60990200440007269,-0.81017496842229975,0.58618812726114256,-0.82716372865998222,0.56196100041667951,-0.84342824778731318,0.53724183645209778,-0.85895428505245097,0.51205227876656578,-0.87372824629733603,0.48641438262265813,-0.88773719586035138,0.46035059583539173,-0.90096886790241915,-0.43388373911755801,0.99922175825988935,0.039444617123446338,0.99688824435996948,0.078827839351956377,0.99300309037607637,0.11808836735073357,0.98757234348620426,0.15716509275652302,0.98060445655817252,0.19599719329176948,0.97211027499287639,0.23452422743348758,0.96210301984360058,0.27268622848949375,0.95059826723766705,0.31042379793557223,0.93761392413245104,0.3476781978682964,0.92317020044349751,0.38439144242960538,0.90728957758812101,0.42050638806083429,0.88999677349345152,0.45596682244571901,0.8713187041233893,0.49071755200393796,0.85128444158435124,0.52470448779900802,0.82992516887501755,0.55787472972682095,0.80727413135051007,0.59017664885378129,0.78336658497654543,0.62155996777638822,0.75823974145410744,0.65197583887718435,0.73193271030004903,0.68137692035526465,0.70448643797377475,0.70971744991300789,0.67594364414475439,0.73695331598433678,0.64634875520006208,0.76304212639364166,0.61574783509543918,0.78794327433850198,0.58418851365750835,0.81161800159350284,0.55171991244873453,0.83402945883677315,0.51839256831052494,0.8551427630053462,0.48425835470347067,0.8749250515900705,0.44937040096716135,0.89334553378556314,0.413783009625246,0.91037553841558905,0.37755157186445287,0.92598855855927342,0.34073248131912093,0.9401602928086864,0.30338304629544116,0.95286868309358252,0.26556140057202332,0.96409394901442325,0.22732641291563049,0.97381861863024177,0.18873759545291671,0.98202755565343036,0.14985501104078355,0.98870798300912222,0.11073917977953723,0.99384950272249739,0.071450984814350818,0.99744411210305883,0.03205157757165511,0.99948621620068789,-0.0073977174220457012,0.99997263651409163,-0.046835497990787969,0.99890261593808782,-0.086200379880619418,0.99627781994202647,-0.12543109230317789,0.99210233397751446,-0.16446657330266054,0.98638265711947748,-0.20324606479774882,0.97912769195045712,-0.24170920715055957,0.97034873070388872,-0.2797961331154229,0.9600594376879259,-0.31744756102126248,0.94827582801717125,-0.35460488704253568,0.93501624268541483,-0.39121027641512146,0.92030132001817988,-0.42720675345517423,0.90415396354951072,-0.46253829024083548,0.886599306373,-0.49714989381876667,0.86766467202254416,-0.53098769179977512,0.84737953194371352,-0.56399901621029636,0.82577545962193488,-0.59613248546922526,0.80288608143888252,-0.62733808436249838,0.77874702433357068,-0.65756724189094717,0.75339586034961237,-0.68677290687025805,0.72687204815495265,-0.71490962116536172,0.69921687162510526,-0.7419335904452703,0.67047337558548126,-0.76780275234822981,0.64068629881283001,-0.79247684195109047,0.60990200440007269,-0.81591745444099639,0.57816840759291277,-0.8380881048918406,0.54553490121054871,-0.85895428505245075,0.51205227876656623,-0.87848351705811156,0.47777265540967345,-0.89664540398182457,0.44274938680733444,-0.91341167714662341,0.40703698609855177,-0.92875624012530233,0.37069103904506756,-0.94265520935907376,0.33376811751304364,-0.95508695133193333,0.29632569141988568,-0.96603211624286955,0.2584220392832679,-0.97547366812351066,0.22011615751158065,-0.98339691135432661,0.18146766857699681,-0.98978951353811884,0.14253672821407859,-0.99464152469519274,0.10338393178836994,-0.99794539275033634,0.064070219980712786,-0.99969597528750109,0.024656783934081519,-0.99989054755388718,-0.014795029989418538,-0.9985288067009761,-0.054223815693150684,-0.99561287225590978,-0.093568202923522317,-0.99114728282248155,-0.13276695279176906,-0.9851389890168738,-0.17175905309127606,-0.97759734264913944,-0.21048381326206805,-0.96853408216726333,-0.24888095885466366,-0.95796331438646254,-0.28689072534626076,-0.94590149253216116,-0.32445395116322723,-0.93236739063081686,-0.36151216976511563,-0.91738207428845864,-0.39800770064686569,-0.22252093395631459,-0.97492791218182362,0.99878408601205604,0.049298575324869712,0.9951393009418763,0.098477264995092989,0.98907450827976051,0.14741647489731227,0.98060445655817252,0.19599719329176948,0.96974974348584586,0.24410128022838426,0.9565367658577002,0.29161175484278956,0.94099765536237645,0.33841307983367042,0.92317020044349751,0.38439144242960538,0.90309775440467399,0.4294350311621481,0.88082912998172769,0.4734343077720844,0.85641848063851467,0.51628227358763545,0.82992516887501755,0.55787472972682095,0.80141362186795662,0.59811053049121599,0.7709531747949796,0.63689182933488919,0.73861790222343648,0.67412431681037144,0.70448643797377475,0.70971744991300789,0.66864178389561468,0.74358467226597003,0.63117110802152976,0.77564362461047431,0.59216553258938587,0.80581634508933175,0.55171991244873453,0.83402945883677315,0.50993260439013577,0.86021435641350075,0.46690522795836398,0.88430736065304139,0.42274241833115461,0.90624988151366237,0.37755157186445287,0.92598855855927342,0.3314425849229507,0.94347539072282782,0.28452758663103245,0.95866785303666058,0.23692066619403301,0.97152900004589449,0.18873759545291671,0.98202755565343036,0.14009554734707616,0.9901379891780353,0.091112810969899899,0.99584057744056764,0.041908503910045233,0.99912145272735575,-0.0073977174220457012,0.99997263651409163,-0.056685948777951994,0.99839205886823013,-0.10583632965778009,0.99438356348270851,-0.15472933479028111,0.98795689832874645,-0.20324606479774882,0.97912769195045712,-0.25126853533885218,0.96791741545891608,-0.29867996402625796,0.95435333031811298,-0.34536505442130749,0.93846842204976044,-0.39121027641512146,0.92030132001817988,-0.43610414231429423,0.89989620349033239,-0.47993747795978653,0.87730269419944185,-0.52260368821969871,0.85257573567347544,-0.56399901621029636,0.82577545962193488,-0.60402279561490058,0.7969670397058839,-0.64257769548705412,0.76622053304681592,-0.679569956942641,0.7336107098597846,-0.71490962116536172,0.69921687162510526,-0.74851074817110119,0.66312265824079519,-0.78029162579918521,0.62541584462472988,-0.81017496842229952,0.586188127261143,-0.8380881048918406,0.54553490121054871,-0.86396315526164691,0.50355502812536734,-0.88773719586035116,0.46035059583539212,-0.90935241231092623,0.41602667008774724,-0.92875624012530233,0.37069103904506756,-0.94590149253216127,0.32445395116322706,-0.96074647522704626,0.27742784708606044,-0.97325508776573832,0.22972708620906004,-0.98339691135432661,0.18146766857699681,-0.99114728282248155,0.13276695279176887,-0.99648735460004345,0.083743370616468929,-0.99940414055107041,0.034516138969708281,-0.99989054755388718,-0.014795029989418538,-0.99794539275033634,-0.064070219980712995,-0.99357340642228675,-0.11318960221863705,-0.98678522048840134,-0.16203372681530576,-0.97759734264913944,-0.21048381326206805,-0.96603211624286955,-0.25842203928326812,-0.95211766591071423,-0.30573182735975263,-0.93588782920225999,-0.35229812822534484,-0.91738207428845864,-0.39800770064686569,-0.89664540398182446,-0.44274938680733467,-0.87372824629733603,-0.48641438262265829,-0.84868633182017839,-0.52889650233444552,-0.82158055817854647,-0.57009243673550691,-0.79247684195109036,-0.60990200440007281,-0.76144595836913465,-0.6482283953077882,-0.72856336920348974,-0.68497840626902939,-0.6939090392544085,-0.72006266757902648,-0.65756724189094706,-0.75339586034961248,-0.61962635411262756,-0.78489692399008204,-0.58017864163178001,-0.81448925333260391,-0.53932003449919885,-0.84210088492281199,-0.49714989381876645,-0.86766467202254427,-0.45377077011833589,-0.8911184478991625,-0.40928815396449059,-0.91240517700435009,-0.36381021942763564,-0.93147309367475328,-0.3174475610212627,-0.94827582801717125,-0.27031292475512003,-0.96277251867215907,0.62348980185873404,-0.78183148246802936,0.99824924001375437,0.059147737166875519,0.99300309037607637,0.11808836735073357,0.98427992058470115,0.17661550875779414,0.97211027499287639,0.23452422743348758,0.9565367658577002,0.29161175484278956,0.93761392413245104,0.3476781978682964,0.9154080085253663,0.4025272387399676,0.88999677349345152,0.45596682244571901,0.86146919698369673,0.50780982921588336,0.82992516887501755,0.55787472972682095,0.79547514121184926,0.60598622072947206,0.75823974145410744,0.65197583887718435,0.7183493500977276,0.69568255060348638,0.67594364414475427,0.73695331598433678,0.63117110802152965,0.77564362461047442,0.58418851365750835,0.81161800159350284,0.53516037154521512,0.84475048193391833,0.48425835470347067,0.8749250515900705,0.43166069756088615,0.90203605370364726,0.37755157186445287,0.92598855855927342,0.32212044179849053,0.94669869598280598,0.2655614005720231,0.96409394901442336,0.20807249079753021,0.97811340782820866,0.14985501104078355,0.98870798300912222,0.091112810969899677,0.99584057744056775,0.03205157757165511,0.99948621620068789,-0.027121885065606685,0.99963213401255169,-0.08620037988061964,0.99627781994202647,-0.14497704234384406,0.98943501918682419,-0.20324606479774901,0.97912769195045712,-0.26080341709643418,0.96539192954510622,-0.31744756102126248,0.94827582801717125,-0.37298015597095618,0.9278393197380036,-0.42720675345517467,0.9041539635495105,-0.47993747795978653,0.87730269419944185,-0.53098769179977512,0.84737953194371352,-0.58017864163178023,0.8144892533326038,-0.62733808436249838,0.77874702433357068,-0.6723008902613169,0.7402779970753155,-0.71490962116536172,0.69921687162510526,-0.75501508175237031,0.65570742433379658,-0.79247684195109047,0.60990200440007269,-0.82716372865998222,0.56196100041667951,-0.85895428505245097,0.51205227876656578,-0.88773719586035138,0.46035059583539173,-0.91341167714662341,0.40703698609855177,-0.93588782920225999,0.35229812822534468,-0.95508695133193333,0.29632569141988568,-0.97094181742605201,0.23931566428755768,-0.98339691135432661,0.18146766857699637,-0.99240862135660779,0.12298426020055173,-0.99794539275033634,0.064070219980712786,-0.99998783841989403,0.0049318366059690408,-0.99852880670097599,-0.054223815693151128,-0.99357340642228675,-0.11318960221863705,-0.98513898901687369,-0.17175905309127651,-0.97325508776573832,-0.22972708620906024,-0.95796331438646254,-0.28689072534626076,-0.93931721332894857,-0.34304981087873881,-0.91738207428845842,-0.39800770064686608,-0.89223470359244195,-0.45157195850197263,-0.8639631552616468,-0.50355502812536757,-0.83266642268720614,-0.55377488976053346,-0.79845409200330364,-0.6020556975589384,-0.76144595836913431,-0.64822839530778853,-0.72177160650376249,-0.69213130838373282,-0.67956995694264077,-0.73361070985978472,-0.63498877960457922,-0.77252135878322936,-0.58818417637242504,-0.80872700873971803,-0.53932003449919885,-0.84210088492281199,-0.48856745275360902,-0.87252612803849605,-0.43610414231429406,-0.8998962034903325,-0.38211380451057864,-0.92411527441247898,-0.32678548758860476,-0.94509853724438586,-0.27031292475512003,-0.96277251867215907,-0.2128938558167818,-0.97707533289683624,-0.15472933479028048,-0.98795689832874656,-0.096023025907681567,-0.99537911294919823,-0.036980490482046983,-0.99931598772545771,0.022191532869602116,-0.99975373761186681,0.081285852125688993,-0.99669082981845514,0.1400955473470768,-0.99013798917803519,0.19841469521137087,-0.98011816059298629,0.25603909005754738,-0.9666664286932195,0.31276695891614897,-0.94982989498664649,0.36839966802136948,-0.92966751293230887,0.42274241833115478,-0.90624988151366226,0.47560492761993434,-0.87965899803482772,0.52680209675563672,-0.84998797100539303,0.57615465782799968,-0.81734069411910515,0.62348980185873359,0.7818314824680298,0.99761727230124764,0.068991144404324925,0.99048044398756319,0.13765351458716821,0.97862352529595531,0.20565990308593657,0.96210301984360058,0.27268622848949375,0.94099765536237645,0.33841307983367042,0.91540800852536641,0.40252723873996749,0.88545602565320991,0.46472317204376851,0.85128444158435124,0.52470448779900802,0.81305609947853252,0.58218534772077069,0.7709531747949796,0.63689182933488919,0.72517630714337655,0.68856323134327702,0.67594364414475439,0.73695331598433667,-0.22252093395631434,0.97492791218182362,0.99048044398756319,0.13765351458716821,0.96210301984360058,0.27268622848949375,0.91540800852536641,0.40252723873996749,0.85128444158435124,0.52470448779900802,0.7709531747949796,0.63689182933488919,0.67594364414475439,0.73695331598433667,0.56806474673115581,0.82298386589365635,0.44937040096716135,0.89334553378556314,0.32212044179849075,0.94669869598280587,0.18873759545291671,0.98202755565343036,0.051761352884209494,0.99865948268045612,-0.086200379880619196,0.99627781994202647,-0.90096886790241903,0.43388373911755823,0.9786235252959552,0.2056599030859366,0.9154080085253663,0.40252723873996754,0.81305609947853252,0.58218534772077069,0.67594364414475439,0.73695331598433678,0.50993260439013577,0.86021435641350075,0.32212044179849053,0.94669869598280598,0.12053668025532301,0.99270887409805397,-0.086200379880619418,0.99627781994202647,-0.28925211953656765,0.95725295055361581,-0.47993747795978653,0.87730269419944185,-0.65010409366874422,0.75984516014457881,-0.79247684195109047,0.60990200440007269,-0.90096886790241915,-0.43388373911755801,0.96210301984360058,0.27268622848949375,0.85128444158435124,0.52470448779900802,0.67594364414475439,0.73695331598433667,0.44937040096716135,0.89334553378556314,0.18873759545291671,0.98202755565343036,-0.086200379880619196,0.99627781994202647,-0.35460488704253545,0.93501624268541483,-0.59613248546922526,0.80288608143888252,-0.79247684195109025,0.60990200440007303,-0.92875624012530233,0.37069103904506756,-0.99464152469519262,0.10338393178837038,-0.98513898901687391,-0.17175905309127565,-0.22252093395631459,-0.97492791218182362,0.94099765536237645,0.33841307983367042,0.7709531747949796,0.63689182933488919,0.50993260439013577,0.86021435641350075,0.18873759545291671,0.98202755565343036,-0.15472933479028111,0.98795689832874645,-0.47993747795978653,0.87730269419944185,-0.74851074817110119,0.66312265824079519,-0.92875624012530233,0.37069103904506756,-0.99940414055107041,0.034516138969708281,-0.95211766591071423,-0.30573182735975263,-0.79247684195109036,-0.60990200440007281,-0.53932003449919885,-0.84210088492281199,0.62348980185873337,-0.78183148246802991,0.9154080085253663,0.40252723873996754,0.67594364414475439,0.73695331598433678,0.32212044179849053,0.94669869598280598,-0.086200379880619418,0.99627781994202647,-0.47993747795978653,0.87730269419944185,-0.79247684195109047,0.60990200440007269,-0.97094181742605201,0.23931566428755768,-0.9851389890168738,-0.17175905309127606,-0.83266642268720636,-0.55377488976053313,-0.53932003449919885,-0.84210088492281199,-0.15472933479028134,-0.98795689832874645,0.25603909005754738,-0.9666664286932195,0.88545602565320991,0.46472317204376856,0.56806474673115581,0.82298386589365635,0.12053668025532301,0.99270887409805397,-0.35460488704253568,0.93501624268541483,-0.74851074817110119,0.66312265824079519,-0.97094181742605201,0.23931566428755768,-0.97094181742605201,-0.23931566428755788,-0.74851074817110097,-0.6631226582407953,-0.3546048870425359,-0.93501624268541472,0.1205366802553232,-0.99270887409805397,0.56806474673115559,-0.82298386589365657,0.88545602565321002,-0.4647231720437684,0.88545602565321002,-0.4647231720437684,1,0,0.99996953958783819,0.0078051198893316596,0.99987816020702636,0.015609764284325717,0.99972586742447145,0.023413457719612077,0.99951267051797554,0.031215724787753894,0.99923858247566988,0.039016090168209783,0.99890361999522392,0.046814078656290746,0.99850780348282797,0.054609215192110018,0.99805115705195047,0.062401024889524127,0.99753370852186818,0.070189033065063328,0.99695548941597223,0.077972765266849736,0.99631653495984718,0.085751747303501297,0.9956168840791253,0.093525505273019935,0.99485657939711469,0.10129356559166208,0.9940356672322036,0.10905545502278971,0.99315419759503776,0.11681070070570036,0.99221222418547395,0.12455883018443421,0.99120980438930895,0.13229937143655646,0.99014699927478289,0.14003185290191328,0.98902387358885957,0.14775580351135981,0.98784049575328148,0.15547075271545779,0.98659693786040203,0.16317623051314215,0.98529327566879288,0.17087176748035368,0.98392958859862967,0.17855689479863665,0.98250595972685262,0.18623114428369983,0.98102247578210622,0.19389404841393854,0.97947922713945534,0.20154514035891644,0.97787630781487922,0.20918395400780526,0.97621381545954455,0.21681002399778068,0.97449185135385608,0.22442288574237254,0.97271052040128658,0.23202207545976791,0.97086993112198605,0.23960713020106503,0.9689701956461706,0.24717758787847646,0.96701142970729137,0.25473298729348004,0.9649937526349841,0.2622728681649153,0.96291728734779936,0.26979677115702427,0.96078216034571384,0.27730423790743447,0.95858850170242471,0.28479481105508297,0.95633644505742488,0.29226803426807896,0.95402612760786143,0.29972345227150388,0.95165769010017798,0.30716061087514734,0.94923127682153974,0.3145790570011765,0.94674703559104378,0.32197833871173831,0.94420511775071381,0.32935800523649139,0.94160567815627993,0.33671760700006798,0.93894887516774506,0.34405669564946184,0.9362348706397372,0.35137482408134268,0.93346382991164956,0.35867154646929394,0.9306359217975676,0.36594641829097291,0.92775131857598447,0.37319899635519133,0.92481019597930647,0.38042883882891515,0.92181273318314672,0.38763550526418095,0.91875911279540934,0.39481855662492904,0.91564952084516571,0.40197755531374929,0.91248414677132084,0.40911206519854021,0.90926318341107237,0.41622165163907859,0.90598682698816357,0.42330588151349785,0.9026552771009283,0.43036432324467422,0.89926873671013197,0.43739654682651907,0.89582741212660699,0.44440212385017502,0.89233151299868352,0.45138062753011482,0.8887812522994184,0.45833163273014188,0.8851768463136197,0.46525471598928947,0.88151851462467168,0.4721494555476185,0.87780648010115614,0.47901543137191172,0.8740409688832762,0.48585222518126203,0.87022221036907943,0.49265942047255484,0.86635043720048233,0.49943660254584177,0.86242588524909791,0.50618335852960417,0.8584487936018661,0.51289927740590613,0.85441940454648857,0.51958395003543356,0.85033796355666802,0.52623696918241958,0.84620471927715391,0.53285792953945343,0.842019923508595,0.53944642775217233,0.83778383119219912,0.54600206244383431,0.83349670039420209,0.55252443423976982,0.829158792290146,0.55901314579171257,0.82477037114896856,0.56546780180200595,0.82033170431690305,0.57188800904768511,0.81584306220119185,0.57827337640443233,0.81130471825361261,0.58462351487040465,0.80671694895381985,0.59093803758993202,0.80208003379250103,0.59721655987708544,0.79739425525435015,0.60345869923911133,0.7926598988008583,0.60966407539973444,0.7878772528529232,0.61583231032232377,0.78304660877327859,0.62196302823292315,0.7781682608487438,0.62805585564314381,0.77324250627229552,0.63411042137291751,0.76826964512496321,0.64012635657310901,0.76324998035754721,0.64610329474798678,0.75818381777216282,0.65204087177755032,0.75307146600361097,0.65793872593971259,0.74791323650057562,0.66379649793233619,0.74270944350665025,0.66961383089512272,0.73746040404119351,0.67539037043135264,0.73216643788001656,0.68112576462947561,0.72682786753590201,0.68681966408454942,0.72144501823895568,0.69247172191952555,0.71601821791679421,0.69808159380638179,0.71054779717456662,0.70364893798709804,0.70503408927481381,0.70917341529447775,0.69947743011716623,0.71465468917280939,0.69387815821788024,0.72009242569836984,0.68823661468921538,0.7254862935997678,0.68255314321865412,0.73083596427812403,0.67682809004796329,0.7361411118270913,0.67106180395210147,0.74140141305270746,0.66525463621797076,0.74661654749308592,0.65940694062301664,0.7517861974379374,0.65351907341367499,0.75691004794792605,0.64759139328366988,0.76198778687385482,0.64162426135216111,0.76701910487568281,0.63561804114174469,0.77200369544136982,0.62957309855630716,0.77694125490554966,0.62348980185873359,0.7818314824680298,0.61736852164847345,0.78667408021211582,0.61120963083896296,0.79146875312276133,0.60501350463490744,0.79621520910454024,0.59878052050942254,0.8009131589994416,0.59251105818103944,0.80556231660448518,0.58620549959057111,0.81016239868915718,0.57986422887784472,0.81471312501266513,0.57348763235829925,0.81921421834101016,0.56707609849945118,0.82366540446387615,0.56063001789722844,0.82806641221133548,0.55414978325217479,0.83241697347036814,0.54763578934552681,0.83671682320119622,0.54108843301516274,0.84096569945342936,0.53450811313142732,0.84516334338202415,0.5278952305728325,0.84930949926305199,0.5212501882016346,0.85340391450927877,0.51457339083929277,0.85744633968555284,0.50786524524180598,0.86143652852399999,0.50112616007493382,0.86537423793902701,0.49435654588929973,0.86925922804213052,0.4875568150953804,0.87309126215651078,0.48072738193838083,0.8768701068314908,0.47386866247299869,0.880595531856738,0.46698107453807763,0.8842673102762888,0.4600650377311522,0.88788521840237522,0.45312097338288571,0.89144903582905188,0.44614930453140245,0.89495854544562337,0.4391504558965158,0.89841353344987096,0.43212485385385385,0.90181378936107726,0.42507292640888444,0.90515910603284944,0.41799510317084054,0.90844927966573807,0.41089181532654828,0.91168410981965331,0.40376349561415853,0.91486339942607575,0.39661057829678426,0.91798695480006165,0.38943349913604464,0.92105458565204279,0.38223269536551846,0.92406610509941911,0.37500860566410704,0.92702132967794348,0.36776167012931027,0.92992007935289811,0.36049233025041466,0.93276217753006363,0.35320102888159788,0.93554745106647619,0.3458882102149497,0.93827573028097599,0.33855431975341144,0.94094684896454428,0.33119980428363549,0.94356064439042897,0.32382511184876678,0.94611695732405821,0.31643069172114757,0.94861563203274069,1,0,0.99987816020702636,0.015609764284325717,0.99951267051797554,0.031215724787753894,0.99890361999522392,0.046814078656290746,0.99805115705195047,0.062401024889524127,0.99695548941597223,0.077972765266849736,0.9956168840791253,0.093525505273019935,0.9940356672322036,0.10905545502278971,0.99221222418547395,0.12455883018443421,0.99014699927478289,0.14003185290191328,0.98784049575328148,0.15547075271545779,0.98529327566879288,0.17087176748035368,0.98250595972685262,0.18623114428369983,0.97947922713945534,0.20154514035891644,0.97621381545954455,0.21681002399778068,0.97271052040128658,0.23202207545976791,0.9689701956461706,0.24717758787847646,0.9649937526349841,0.2622728681649153,0.96078216034571384,0.27730423790743447,0.95633644505742488,0.29226803426807896,0.95165769010017798,0.30716061087514734,0.94674703559104378,0.32197833871173831,0.94160567815627993,0.33671760700006798,0.9362348706397372,0.35137482408134268,0.9306359217975676,0.36594641829097291,0.92481019597930647,0.38042883882891515,0.91875911279540934,0.39481855662492904,0.91248414677132084,0.40911206519854021,0.90598682698816357,0.42330588151349785,0.89926873671013197,0.43739654682651907,0.89233151299868352,0.45138062753011482,0.8851768463136197,0.46525471598928947,0.87780648010115614,0.47901543137191172,0.87022221036907943,0.49265942047255484,0.86242588524909791,0.50618335852960417,0.85441940454648857,0.51958395003543356,0.84620471927715391,0.53285792953945343,0.83778383119219912,0.54600206244383431,0.829158792290146,0.55901314579171257,0.82033170431690305,0.57188800904768511,0.81130471825361261,0.58462351487040465,0.80208003379250103,0.59721655987708544,0.7926598988008583,0.60966407539973444,0.78304660877327859,0.62196302823292315,0.77324250627229552,0.63411042137291751,0.76324998035754721,0.64610329474798678,0.75307146600361097,0.65793872593971259,0.74270944350665025,0.66961383089512272,0.73216643788001656,0.68112576462947561,0.72144501823895568,0.69247172191952555,0.71054779717456662,0.70364893798709804,0.69947743011716623,0.71465468917280939,0.68823661468921538,0.7254862935997678,0.67682809004796329,0.7361411118270913,0.66525463621797076,0.74661654749308592,0.65351907341367499,0.75691004794792605,0.64162426135216111,0.76701910487568281,0.62957309855630716,0.77694125490554966,0.61736852164847345,0.78667408021211582,0.60501350463490744,0.79621520910454024,0.59251105818103944,0.80556231660448518,0.57986422887784472,0.81471312501266513,0.56707609849945118,0.82366540446387615,0.55414978325217479,0.83241697347036814,0.54108843301516274,0.84096569945342936,0.5278952305728325,0.84930949926305199,0.51457339083929277,0.85744633968555284,0.50112616007493382,0.86537423793902701,0.4875568150953804,0.87309126215651078,0.47386866247299869,0.880595531856738,0.4600650377311522,0.88788521840237522,0.44614930453140245,0.89495854544562337,0.43212485385385385,0.90181378936107726,0.41799510317084054,0.90844927966573807,0.40376349561415853,0.91486339942607575,0.38943349913604464,0.92105458565204279,0.37500860566410704,0.92702132967794348,0.36049233025041466,0.93276217753006363,0.3458882102149497,0.93827573028097599,0.33119980428363549,0.94356064439042897,0.31643069172114757,0.94861563203274069,0.30158447145872003,0.95343946141061542,0.28666476121715928,0.95803095705530783,0.27167519662527945,0.96238900011306017,0.25661943033397372,0.96651252861774473,0.24150113112613825,0.97040053774964274,0.2263239830226641,0.97405208008029887,0.21109168438471704,0.9774662658033898,0.19580794701252194,0.98064226295155232,0.18047649524087386,0.98357929759911622,0.16510106503159228,0.98627665405069487,0.14968540306314429,0.98873367501558473,0.13423326581765554,0.9909497617679347,0.11874841866553196,0.99292437429264246,0.10323463494791607,0.9946570314169455,0.087695695057200637,0.99614731092767328,0.07213538551582431,0.9973948496741315,0.056557498053573324,0.99839934365659522,0.040965828683614432,0.99916054810038646,0.025364176777483698,0.99967827751552174,0.0097563441392581555,0.99995240574191147,-0.0058538659208676007,0.99998286598010289,-0.021462649513369569,0.99976965080755786,-0.037066203096324787,0.99931281218046131,-0.052660724402256852,0.99861246142106075,-0.068242413364670879,0.99766876919053915,-0.083807473044052172,0.99648196544742873,-0.099352110553102779,0.99505233939157389,-0.11487253798099081,0.99338023939366027,-0.13036497331638691,0.99146607291032285,-0.14582564136906326,0.98931030638485784,-0.16125077468983048,0.98691346513355949,-0.17663661448858736,0.98427613321771146,-0.19197941155026255,0.98139895330126314,-0.20727542714842073,0.97828262649422515,-0.22252093395631434,0.97492791218182362,-0.23771221695515685,0.97133562783945304,-0.25284557433939708,0.96750664883347459,-0.2679173184187737,0.9634419082079072,-0.28292377651692985,0.95914239645706323,-0.29786129186636973,0.95460916128418616,-0.31272622449953785,0.94984330734614575,-0.32751495213580506,0.94484599598425634,-0.34222387106414442,0.93961844494128133,-0.35684939702128138,0.93416192806469478,-0.37138796606510666,0.92847777499626949,-0.38583603544313533,0.92256737084807183,-0.40019008445580362,0.91643215586493731,-0.41444661531439153,0.91007362507351286,-0.42860215399336249,0.90349332791794867,-0.44265325107691206,0.89669286788233138,-0.4565964825995209,0.88967390209994668,-0.47042845088030488,0.88243814094946993,-0.48414578535096053,0.87498734763818253,-0.49774514337710363,0.86732333777231341,-0.51122321107280133,0.85944797891461355,-0.52457670410809809,0.85136319012926842,-0.53780236850934027,0.84307094151426176,-0.55089698145210242,0.83457325372130275,-0.56385735204652476,0.8258721974634341,-0.57668032211486708,0.81696989301044209,-0.58936276696109235,0.80786850967218982,-0.60190159613229177,0.79857026527000086,-0.61429375417176468,0.78907742559622096,-0.6265362213635709,0.77939230386209135,-0.6386260144683743,0.76951726013406596,-0.65056018745039679,0.75945470075871191,-0.66233583219530745,0.74920707777633111,-0.67395007921887073,0.73877688832344901,-0.68540009836618077,0.72816667402431268,-0.69668309950131269,0.71737902037154955,-0.70779633318722146,0.70641655609613496,-0.71873709135572461,0.69528195252682412,-0.72950270796740069,0.68397792293920512,-0.74009055966125192,0.67250722189452727,-0.75049806639396133,0.6608726445684715,-0.76072269206859755,0.64907702607002338,-0.77076194515260965,0.63712324075061455,-0.7806133792849631,0.62501420150370213,-0.79027459387226739,0.61275285905495613,-0.79974323467375208,0.60034220124322746,1,0,0.99972586742447145,0.023413457719612077,0.99890361999522392,0.046814078656290746,0.99753370852186818,0.070189033065063328,0.9956168840791253,0.093525505273019935,0.99315419759503776,0.11681070070570036,0.99014699927478289,0.14003185290191328,0.98659693786040203,0.16317623051314215,0.98250595972685262,0.18623114428369983,0.97787630781487922,0.20918395400780526,0.97271052040128658,0.23202207545976791,0.96701142970729137,0.25473298729348004,0.96078216034571384,0.27730423790743447,0.95402612760786143,0.29972345227150382,0.94674703559104378,0.32197833871173831,0.93894887516774506,0.34405669564946184,0.9306359217975676,0.36594641829097291,0.92181273318314672,0.38763550526418089,0.91248414677132084,0.40911206519854021,0.9026552771009283,0.43036432324467422,0.89233151299868352,0.45138062753011482,0.88151851462467168,0.47214945554761845,0.87022221036907943,0.49265942047255484,0.8584487936018661,0.51289927740590613,0.84620471927715391,0.53285792953945343,0.83349670039420209,0.55252443423976982,0.82033170431690317,0.571888009047685,0.80671694895381985,0.59093803758993202,0.7926598988008583,0.60966407539973444,0.7781682608487438,0.62805585564314381,0.76324998035754721,0.64610329474798678,0.74791323650057562,0.66379649793233619,0.73216643788001656,0.68112576462947561,0.71601821791679432,0.69808159380638168,0.69947743011716634,0.71465468917280928,0.68255314321865412,0.73083596427812403,0.66525463621797076,0.74661654749308592,0.64759139328366988,0.76198778687385482,0.62957309855630716,0.77694125490554966,0.61120963083896296,0.79146875312276133,0.59251105818103944,0.80556231660448518,0.57348763235829936,0.81921421834101005,0.5541497832521749,0.83241697347036814,0.53450811313142754,0.84516334338202403,0.51457339083929277,0.85744633968555284,0.49435654588929973,0.86925922804213052,0.47386866247299869,0.880595531856738,0.45312097338288571,0.89144903582905188,0.43212485385385385,0.90181378936107726,0.41089181532654828,0.91168410981965331,0.38943349913604464,0.92105458565204279,0.36776167012931049,0.929920079352898,0.34588821021494992,0.93827573028097588,0.32382511184876678,0.94611695732405821,0.30158447145872003,0.95343946141061542,0.27917848281287255,0.96023922786683868,0.25661943033397372,0.96651252861774473,0.23391968236433874,0.97225592423114959,0.21109168438471704,0.9774662658033898,0.18814795219086924,0.9821406966857561,0.16510106503159228,0.98627665405069487,0.14196365871195626,0.98987187029691637,0.11874841866553196,0.99292437429264246,0.095468072999410208,0.99543249245630883,0.07213538551582431,0.9973948496741315,0.048763148714202016,0.99881037005403417,0.02536417677748392,0.99967827751552174,0.0019512985465534784,0.99999809621517888,-0.021462649513369347,0.99976965080755786,-0.044864830350514862,0.9989930665413147,-0.068242413364670879,0.99766876919053915,-0.091582581441755032,0.99579748482131858,-0.11487253798099081,0.99338023939366027,-0.13809951391083816,0.99041835819899371,-0.16125077468983026,0.98691346513355949,-0.18431362728847897,0.9828674818080837,-0.20727542714842073,0.97828262649422515,-0.23012358511498635,0.97316141290837543,-0.25284557433939708,0.96750664883347459,-0.27542893714679856,0.96132143457960251,-0.29786129186636973,0.95460916128418616,-0.32013033961976178,0.94737350905275797,-0.3422238710641442,0.93961844494128144,-0.3641297730861624,0.93134822078115331,-0.38583603544313511,0.92256737084807183,-0.40733075734785257,0.9132807093760521,-0.4286021539933621,0.9034933279179489,-0.44963856301416955,0.89321059255393553,-0.47042845088030488,0.88243814094946993,-0.49096041922075651,0.87118187926435842,-0.51122321107280133,0.85944797891461355,-0.53120571705380315,0.84724287318888369,-0.55089698145210242,0.83457325372130275,-0.57028620823364873,0.82144606682270227,-0.58936276696109235,0.80786850967218982,-0.60811619862208033,0.79384802637118812,-0.6265362213635709,0.77939230386209135,-0.64461273612901293,0.76450926771378491,-0.66233583219530745,0.74920707777633111,-0.67969579260651336,0.73349412370720712,-0.69668309950131269,0.71737902037154955,-0.71328843933132535,0.70087060311892257,-0.72950270796740047,0.68397792293920545,-0.74531701569109554,0.66671024150024816,-0.76072269206859722,0.64907702607002371,-0.77571129070441969,0.63108794432605297,-0.79027459387226739,0.61275285905495613,-0.8044046170205289,0.59408182274502919,-0.8180936131499289,0.5750850720748143,-0.83133407706093632,0.55577302230068815,-0.84411874946860521,0.53615626154653651,-0.85644062098258655,0.51624554499865816,-0.86829293595013357,0.49605178900906832,-0.87966919615999017,0.47558606511044527,-0.89056316440513372,0.45485959394599418,-0.90096886790241903,0.43388373911755823,-0.91088060156724604,0.41267000095535417,-0.92029293114145994,0.39123001021273923,-0.9292006961727648,0.36957552168947733,-0.93759901284402025,0.34771840778698898,-0.94548327665086784,0.32567065199912998,-0.95284916492622052,0.30344434234205825,-0.9596926392102304,0.28105166472679455,-0.96600994746443525,0.25850489627811502,-0.97179762612887111,0.23581639860342812,-0.97705250202102034,0.21299861101533965,-0.98177169407555853,0.19006404371160748,-0.98595261492394082,0.16702527091623967,-0.98959297231296683,0.1438949239854822,-0.99269077036154263,0.12068568448248951,-0.99524431065495322,0.097410277224464034,-0.99725219317604397,0.074081463306081133,-0.99871331707280109,0.050712033103028645,-0.99962688126191068,0.027314799259486072,-0.99999238486796449,0.0039025896634018484,-0.99980962749807278,-0.019511759586594138,-0.99907870935173249,-0.042915411218772549,-0.99780003116589178,-0.06629553382653687,-0.99597429399523907,-0.089639308903433371,-0.99360249882784013,-0.11293393787109285,-0.99068594603633076,-0.1361666490962464,-0.98722623466496773,-0.15932470489296385,-0.98322526155292866,-0.18239540850628647,-0.97868522029434113,-0.20536611107341182,-0.97360860003561167,-0.22822421855862798,-0.96799818411071314,-0.25095719865818122,-0.96185704851518039,-0.2735525876713028,-0.95518856021964815,-0.29599799733362325,-0.94799637532385916,-0.31828112160922251,-0.9402844370521517,-0.34038974343760453,-0.93205697359152728,-0.36231174143188205,-0.92331849577348291,-0.38403509652451412,-0.91407379460087945,-0.40554789855693896,-0.90432793862120209,-0.42683835280950017,-0.89408627114765127,-0.44789478646808178,-0.88335440732959192,-0.46870565502390243,-0.87213823107396082,-0.48925954860297055,-0.86044389181932768,-0.50954519822171729,-0.84827780116436979,-0.52955148196539104,-0.83564662935261846,-0.54926743108581222,-0.82255730161539464,-0.56868223601515877,1,0,0.99951267051797554,0.031215724787753894,0.99805115705195047,0.062401024889524127,0.9956168840791253,0.093525505273019935,0.99221222418547395,0.12455883018443421,0.98784049575328148,0.15547075271545779,0.98250595972685262,0.18623114428369983,0.97621381545954455,0.21681002399778068,0.9689701956461706,0.24717758787847646,0.96078216034571384,0.27730423790743447,0.95165769010017798,0.30716061087514734,0.94160567815627993,0.33671760700006798,0.9306359217975676,0.36594641829097291,0.91875911279540934,0.39481855662492904,0.90598682698816357,0.42330588151349785,0.89233151299868352,0.45138062753011482,0.87780648010115614,0.47901543137191172,0.86242588524909791,0.50618335852960417,0.84620471927715391,0.53285792953945343,0.829158792290146,0.55901314579171257,0.81130471825361261,0.58462351487040465,0.7926598988008583,0.60966407539973444,0.77324250627229552,0.63411042137291751,0.75307146600361097,0.65793872593971259,0.73216643788001656,0.68112576462947561,0.71054779717456662,0.70364893798709804,0.68823661468921538,0.7254862935997678,0.66525463621797076,0.74661654749308592,0.64162426135216111,0.76701910487568281,0.61736852164847345,0.78667408021211582,0.59251105818103944,0.80556231660448518,0.56707609849945118,0.82366540446387615,0.54108843301516274,0.84096569945342936,0.51457339083929277,0.85744633968555284,0.4875568150953804,0.87309126215651078,0.4600650377311522,0.88788521840237522,0.43212485385385385,0.90181378936107726,0.40376349561415853,0.91486339942607575,0.37500860566410704,0.92702132967794348,0.3458882102149497,0.93827573028097599,0.31643069172114757,0.94861563203274069,0.28666476121715928,0.95803095705530783,0.25661943033397372,0.96651252861774473,0.2263239830226641,0.97405208008029887,0.19580794701252194,0.98064226295155232,0.16510106503159228,0.98627665405069487,0.13423326581765554,0.9909497617679347,0.10323463494791607,0.9946570314169455,0.07213538551582431,0.9973948496741315,0.040965828683614432,0.99916054810038646,0.0097563441392581555,0.99995240574191147,-0.021462649513369569,0.99976965080755786,-0.052660724402256852,0.99861246142106075,-0.083807473044052172,0.99648196544742873,-0.11487253798099081,0.99338023939366027,-0.14582564136906326,0.98931030638485784,-0.17663661448858736,0.98427613321771146,-0.20727542714842073,0.97828262649422515,-0.23771221695515685,0.97133562783945304,-0.2679173184187737,0.9634419082079072,-0.29786129186636973,0.95460916128418616,-0.32751495213580506,0.94484599598425634,-0.35684939702128138,0.93416192806469478,-0.38583603544313533,0.92256737084807183,-0.41444661531439153,0.91007362507351286,-0.44265325107691206,0.89669286788233138,-0.47042845088030488,0.88243814094946993,-0.49774514337710363,0.86732333777231341,-0.52457670410809809,0.85136319012926842,-0.55089698145210242,0.83457325372130275,-0.57668032211486708,0.81696989301044209,-0.60190159613229177,0.79857026527000086,-0.6265362213635709,0.77939230386209135,-0.65056018745039679,0.75945470075871191,-0.67395007921887073,0.73877688832344901,-0.69668309950131269,0.71737902037154955,-0.71873709135572461,0.69528195252682412,-0.74009055966125192,0.67250722189452727,-0.76072269206859755,0.64907702607002338,-0.7806133792849631,0.62501420150370213,-0.79974323467375208,0.60034220124322746,-0.8180936131499289,0.5750850720748143,-0.83564662935261813,0.54926743108581277,-0.85238517507723155,0.52291444167144341,-0.86829293595013357,0.49605178900906832,-0.88335440732959158,0.46870565502390305,-0.8975549094175137,0.44090269287056838,-0.91088060156724604,0.41267000095535417,-0.92331849577348279,0.38403509652451434,-0.93485646933114164,0.35502588884433794,-0.94548327665086784,0.32567065199912998,-0.95518856021964804,0.29599799733362347,-0.96396286069585324,0.26603684556667523,-0.97179762612887111,0.23581639860342812,-0.97868522029434102,0.20536611107341252,-0.98461893013686896,0.17471566162232732,-0.98959297231296683,0.1438949239854822,-0.99360249882784013,0.11293393787109353,-0.99664360176052946,0.081862879681813452,-0.99871331707280109,0.050712033103028201,-0.99980962749807267,0.019511759586594384,-0.99993146450756099,-0.011707531241224875,-0.99907870935173249,-0.042915411218772993,-0.99725219317604397,-0.074081463306080897,-0.99445369621085911,-0.10517531123110767,-0.99068594603633076,-0.1361666490962464,-0.98595261492394093,-0.167025270916239,-0.9802583162572881,-0.19772110005871041,-0.97360860003561167,-0.22822421855862798,-0.96600994746443547,-0.25850489627811435,-0.95746976463860267,-0.28853361988319276,-0.94799637532385905,-0.31828112160922295,-0.93759901284402036,-0.34771840778698876,-0.92628781108162983,-0.37681678710164018,-0.91407379460087945,-0.40554789855693896,-0.90096886790241915,-0.43388373911755801,-0.88698580382052883,-0.4617966910024911,-0.87213823107396082,-0.48925954860297055,-0.85644062098258689,-0.5162455449986576,-0.83990827336279672,-0.54272837804626139,-0.82255730161539464,-0.56868223601515877,-0.80440461702052934,-0.59408182274502863,-0.78546791225496271,-0.61890238230098149,-0.76576564414774373,-0.64311972310215393,-0.74531701569109576,-0.66671024150024794,-0.7241419573240464,-0.68965094478504052,-0.70226110750704729,-0.71191947359443364,-0.67969579260651347,-0.7334941237072069,-0.65646800610888956,-0.75435386719723185,-0.63260038718449996,-0.77447837292852839,-0.60811619862208055,-0.7938480263711879,-0.58303930415549077,-0.81244394871885228,-0.55739414520471309,-0.83024801528911052,-0.53120571705380337,-0.84724287318888358,-0.50449954448901302,-0.86341195822757655,-0.47730165692082804,-0.87873951106151593,-0.44963856301416971,-0.89321059255393542,-0.42153722485148765,-0.90681109833553886,-0.39302503165392377,-0.91952777255145057,-0.36412977308616284,-0.93134822078115309,-0.33487961217098638,-0.9422609221188204,-0.30530305783993028,-0.95225524040227161,-0.275428937146799,-0.96132143457960229,-0.24528636717111912,-0.96945066820338777,-0.21490472663891694,-0.97663501804320552,-0.18431362728847966,-0.98286748180808348,-0.15354288500900931,-0.9881419849713452,-0.12262249078029902,-0.99245338669120142,-0.091582581441755712,-0.99579748482131858,-0.060453410319259465,-0.99817102000647728,-0.029265317738488224,-0.99957167885933285,0.0019512985465525673,-0.99999809621517888,0.033166012980974317,-0.99944985646251705,0.064348401863541502,-0.99792749394813662,0.095468072999410181,-0.99543249245630883,0.12649469532214952,-0.99196728376260301,0.1573980284561885,-0.98753524526373482,0.18814795219086902,-0.9821406966857561,0.21871449583737929,-0.97578889587379558,0.24906786743995424,-0.96848603366745223,0.27917848281287228,-0.9602392278668388,0.62348980185873359,0.7818314824680298,0.99923858247566988,0.039016090168209783,0.99695548941597223,0.077972765266849736,0.99315419759503776,0.11681070070570036,0.98784049575328148,0.15547075271545779,0.98102247578210622,0.19389404841393854,0.97271052040128658,0.23202207545976791,0.96291728734779936,0.26979677115702427,0.95165769010017798,0.30716061087514734,0.93894887516774506,0.34405669564946184,0.92481019597930647,0.38042883882891515,0.90926318341107237,0.41622165163907865,0.89233151299868352,0.45138062753011482,0.8740409688832762,0.48585222518126203,0.85441940454648857,0.51958395003543356,0.83349670039420209,0.55252443423976993,0.81130471825361261,0.58462351487040465,0.7878772528529232,0.61583231032232377,0.76324998035754721,0.64610329474798678,0.73746040404119351,0.67539037043135264,0.71054779717456662,0.70364893798709804,0.68255314321865412,0.73083596427812403,0.65351907341367499,0.75691004794792605,-0.22252093395631434,0.97492791218182362,0.99695548941597223,0.077972765266849736,0.98784049575328148,0.15547075271545779,0.97271052040128658,0.23202207545976791,0.95165769010017798,0.30716061087514734,0.92481019597930647,0.38042883882891515,0.89233151299868352,0.45138062753011482,0.85441940454648857,0.51958395003543356,0.81130471825361261,0.58462351487040465,0.76324998035754721,0.64610329474798678,0.71054779717456662,0.70364893798709804,0.65351907341367499,0.75691004794792605,0.59251105818103944,0.80556231660448518,0.5278952305728325,0.84930949926305199,0.4600650377311522,0.88788521840237522,0.38943349913604441,0.9210545856520429,0.31643069172114757,0.94861563203274069,0.24150113112613825,0.97040053774964274,0.16510106503159228,0.98627665405069487,0.087695695057200637,0.99614731092767328,0.0097563441392581555,0.99995240574191147,-0.068242413364670879,0.99766876919053915,-0.14582564136906348,0.98931030638485784,-0.90096886790241903,0.43388373911755823,0.99315419759503776,0.11681070070570036,0.97271052040128658,0.23202207545976791,0.93894887516774506,0.34405669564946184,0.89233151299868352,0.45138062753011482,0.83349670039420209,0.55252443423976982,0.76324998035754721,0.64610329474798678,0.68255314321865412,0.73083596427812403,0.59251105818103944,0.80556231660448518,0.49435654588929973,0.86925922804213052,0.38943349913604464,0.92105458565204279,0.27917848281287255,0.96023922786683868,0.16510106503159228,0.98627665405069487,0.048763148714202016,0.99881037005403417,-0.068242413364670879,0.99766876919053915,-0.18431362728847897,0.9828674818080837,-0.29786129186636973,0.95460916128418616,-0.40733075734785257,0.9132807093760521,-0.51122321107280133,0.85944797891461355,-0.60811619862208033,0.79384802637118812,-0.69668309950131269,0.71737902037154955,-0.77571129070441969,0.63108794432605297,-0.84411874946860521,0.53615626154653651,-0.90096886790241915,-0.43388373911755801,0.98784049575328148,0.15547075271545779,0.95165769010017798,0.30716061087514734,0.89233151299868352,0.45138062753011482,0.81130471825361261,0.58462351487040465,0.71054779717456662,0.70364893798709804,0.59251105818103944,0.80556231660448518,0.4600650377311522,0.88788521840237522,0.31643069172114757,0.94861563203274069,0.16510106503159228,0.98627665405069487,0.0097563441392581555,0.99995240574191147,-0.14582564136906348,0.98931030638485784,-0.29786129186636973,0.95460916128418616,-0.44265325107691206,0.89669286788233138,-0.57668032211486708,0.81696989301044209,-0.69668309950131302,0.71737902037154921,-0.79974323467375208,0.60034220124322746,-0.88335440732959158,0.46870565502390305,-0.94548327665086784,0.32567065199912998,-0.98461893013686896,0.17471566162232732,-0.99980962749807267,0.019511759586594384,-0.99068594603633076,-0.1361666490962464,-0.95746976463860256,-0.28853361988319315,-0.22252093395631459,-0.97492791218182362,0.98102247578210622,0.19389404841393854,0.92481019597930647,0.38042883882891515,0.83349670039420209,0.55252443423976993,0.71054779717456662,0.70364893798709804,0.56063001789722844,0.82806641221133548,0.38943349913604441,0.9210545856520429,0.20345601305263375,0.97908408768232291,0.0097563441392581555,0.99995240574191147,-0.18431362728847919,0.98286748180808359,-0.37138796606510666,0.92847777499626949,-0.54436625660126459,0.83884764926291955,-0.69668309950131302,0.71737902037154921,-0.82255730161539453,0.56868223601515899,-0.91721130150545305,0.3984010898462414,-0.97705250202102045,0.21299861101533921,-0.99980962749807267,0.019511759586594384,-0.98461893013686896,-0.17471566162232707,-0.93205697359152717,-0.36231174143188244,-0.84411874946860543,-0.53615626154653628,-0.7241419573240464,-0.68965094478504052,-0.57668032211486719,-0.81696989301044198,-0.4073307573478524,-0.9132807093760521,0.62348980185873337,-0.78183148246802991,0.97271052040128658,0.23202207545976791,0.89233151299868352,0.45138062753011482,0.76324998035754721,0.64610329474798678,0.59251105818103944,0.80556231660448518,0.38943349913604464,0.92105458565204279,0.16510106503159228,0.98627665405069487,-0.068242413364670879,0.99766876919053915,-0.29786129186636973,0.95460916128418616,-0.51122321107280133,0.85944797891461355,-0.69668309950131269,0.71737902037154955,-0.84411874946860521,0.53615626154653651,-0.94548327665086784,0.32567065199912998,-0.99524431065495322,0.097410277224464034,-0.99068594603633076,-0.1361666490962464,-0.93205697359152728,-0.36231174143188205,-0.82255730161539464,-0.56868223601515877,-0.66816330823684966,-0.74401464604266265,-0.47730165692082804,-0.87873951106151593,-0.26038937794686107,-0.96550368816097576,-0.029265317738488224,-0.99957167885933285,0.20345601305263331,-0.97908408768232302,0.425072926408884,-0.90515910603284966,0.96291728734779936,0.26979677115702427,0.85441940454648857,0.51958395003543356,0.68255314321865412,0.73083596427812403,0.4600650377311522,0.88788521840237522,0.20345601305263375,0.97908408768232291,-0.068242413364670879,0.99766876919053915,-0.33487961217098616,0.94226092211882051,-0.57668032211486708,0.81696989301044209,-0.77571129070441969,0.63108794432605297,-0.91721130150545305,0.3984010898462414,-0.99068594603633076,0.13616664909624665,-0.99068594603633076,-0.1361666490962464,-0.91721130150545316,-0.39840108984624117,-0.7757112907044198,-0.63108794432605275,-0.57668032211486719,-0.81696989301044198,-0.33487961217098638,-0.9422609221188204,-0.06824241336467135,-0.99766876919053915,0.20345601305263331,-0.97908408768232302,0.46006503773115159,-0.88788521840237555,0.68255314321865423,-0.73083596427812403,0.85441940454648857,-0.51958395003543356,0.96291728734779924,-0.26979677115702438,0.96291728734779924,-0.26979677115702438,1,0,0.99993077830706578,0.01176599312534808,0.99972312281154851,0.02353035732676978,0.9993770622619782,0.035291463905852472,0.99889264456814908,0.047047684615179775,0.99826993679448672,0.05879739188375168,0.99750902515076378,0.070538959042310959,0.99661001498016466,0.082270760548544791,0.99557303074470116,0.093991172212130283,0.99439821600798195,0.10569857141959299,0.99308573341533701,0.11739133735894691,0.99163576467130043,0.12906785124408524,0.99004851051445431,0.14072649653889052,0.98832419068963862,0.15236565918103356,0.98646304391752804,0.16398372780542952,0.98446532786158336,0.17557909396732074,0.98233131909237936,0.18715015236495539,0.98006131304931554,0.19869530106183081,0.9776556239997144,0.21021294170847107,0.97511458499531334,0.22170147976370788,0.9724385478261558,0.2331593247154341,0.96962788297188818,0.24458489030079991,0.96668297955046933,0.25597659472582024,0.96360424526430011,0.26733286088436353,0.96039210634377925,0.27865211657649214,0.95704700748829474,0.28993279472612249,0.95356941180465826,0.3011733335979766,0.9499598007429908,0.31237217701379411,0.94621867403006965,0.32352777456777476,0.94234654960014363,0.33463858184122169,0.93834396352322946,0.34570306061635631,0.93421146993089599,0.35671967908927404,0.92994964093954802,0.36768691208201276,0.92555906657122111,0.37860324125370332,0.92104035467189682,0.38946715531077392,0.91639413082735022,0.40027715021617871,0.91162103827654184,0.41103172939762178,0.90672173782256549,0.42172940395474767,0.9016969077411644,0.43236869286526974,0.89654724368682848,0.44294812319000798,0.89127345859648555,0.45346623027680771,0.88587628259079965,0.46392155796331092,0.88035646287309133,0.47431265877855222,0.87471476362589162,0.48463809414335202,0.86895196590514645,0.49489643456947768,0.86306886753208412,0.50508625985754729,0.85706628298276299,0.51520615929364655,0.85094504327531206,0.525254731844633,0.84470599585488204,0.5352305863520993,0.83835000447632246,0.5451323417249706,0.83187794908460022,0.55495862713070709,0.82529072569297746,0.56470808218508672,0.81858924625896379,0.57437935714054134,0.81177443855806253,0.58397111307302041,0.80484724605532576,0.59348202206735623,0.79780862777473815,0.60291076740110494,0.79065955816644617,0.61225604372683828,0.78340102697185254,0.62151655725285937,0.77603403908659196,0.63069102592232107,0.76855961442141096,0.63977817959071726,0.76097878776096783,0.64877676020172603,0.75329260862057279,0.65768552196137975,0.74550214110089064,0.66650323151053648,0.73760846374062228,0.67522866809563054,0.72961266936718838,0.68386062373767786,0.72151586494543474,0.6923979033995129,0.71331917142438017,0.70083932515123293,0.70502372358202881,0.70918372033382926,0.69663066986826705,0.71742993372097985,0.68814117224586879,0.72557682367898269,0.67955640602962941,0.73362326232480757,0.6708775597236506,0.74156813568224433,0.66210583485680041,0.74941034383612515,0.65324244581636937,0.75714880108460036,0.64428861967994644,0.76478243608944707,0.63524559604553854,0.77231019202438889,0.62611462685995611,0.77973102672140604,0.61689697624548923,0.78704391281501707,0.60759392032489901,0.79424783788451092,0.59820674704474586,0.8013418045941092,0.58873675599708242,0.80832483083104145,0.57918525823953348,0.815195949841512,0.56955357611378876,0.82195421036454008,0.5598430430625333,0.82859867676365651,0.55005500344484137,0.83512842915643559,0.54019081235005861,0.84154256354184709,0.53025183541019894,0.8478401919254096,0.52023944861088223,0.85402044244212627,0.5101550381008374,0.86008245947719053,0.50000000000000011,0.8660254037844386,0.48977574020622838,0.87184845260253863,0.47948367420066645,0.87755079976889605,0.46912522685177932,0.88313165583126196,0.45870183221809069,0.88859024815702692,0.44821493334964546,0.89392582104018725,0.43766598208823071,0.89913763580596739,0.42705643886637601,0.90422497091308496,0.41638777250516767,0.90918712205364227,0.4056614600108997,0.9140234022506345,0.39487898637059127,0.91873314195305611,0.38404184434640154,0.92331568912859607,0.37315153426896508,0.92777040935390764,0.36220956382968261,0.93209668590243955,0.35121744787198944,0.93629391982981836,0.34017670818163692,0.94036153005676781,0.32908887327601,0.94429895344955572,0.31795547819251524,0.94810564489795601,0.30677806427606386,0.95178107739071549,0.29555817896568415,0.95532474208851548,0.28429737558028706,0.95873614839441679,0.27299721310362135,0.96201482402177985,0.2616592559684407,0.96516031505964961,0.25028507383991994,0.96817218603559663,0.2388762413983446,0.97105001997600504,0.22743433812110633,0.97379341846380041,0.21596094806403604,0.97640200169360714,0.20445765964210019,0.97887540852433064,0.19292606540949694,0.98121329652915457,0.18136776183917588,0.98341534204294778,0.16978434910181864,0.98548124020707351,0.15817743084430405,0.98741070501159522,0.14654861396769558,0.98920346933487213,0.13489950840477491,0.99085928498054154,0.12323172689715887,0.99237792271187897,0.11154688477202455,0.99375917228353505,0.099846599718479548,0.9950028424706423,0.088132491563601825,0.99610876109528901,0.076406182048187235,0.99707677505035652,0.06466929460222838,0.99790675032071519,0.052923454120163069,0.99859857200177837,0.041170286735917723,0.99915214431541022,0.029411419597779261,0.99956739062318523,0.017648480643128704,0.99984425343699856,0.0058830983730622562,0.99998269442702503,-0.0058830983730621339,0.99998269442702503,-0.017648480643128583,0.99984425343699856,-0.02941141959777914,0.99956739062318523,-0.041170286735917598,0.99915214431541022,-0.052923454120162944,0.99859857200177837,-0.064669294602228256,0.99790675032071519,-0.076406182048186888,0.99707677505035652,-0.0881324915636017,0.99610876109528912,-0.099846599718479201,0.9950028424706423,-0.11154688477202444,0.99375917228353505,-0.12323172689715853,0.99237792271187897,-0.13489950840477477,0.99085928498054154,-0.14654861396769547,0.98920346933487213,-0.15817743084430391,0.98741070501159522,-0.16978434910181853,0.98548124020707351,-0.18136776183917575,0.98341534204294778,-0.19292606540949681,0.98121329652915457,-0.20445765964210005,0.97887540852433064,-0.21596094806403593,0.97640200169360714,-0.22743433812110622,0.97379341846380041,-0.23887624139834449,0.97105001997600504,-0.25028507383991977,0.96817218603559663,-0.26165925596844058,0.96516031505964961,-0.27299721310362102,0.96201482402177985,-0.28429737558028695,0.95873614839441679,-0.29555817896568382,0.95532474208851559,-0.30677806427606374,0.9517810773907156,-0.31795547819251513,0.94810564489795601,-0.32908887327600989,0.94429895344955583,-0.34017670818163681,0.94036153005676781,-0.35121744787198933,0.93629391982981847,-0.3622095638296825,0.93209668590243955,-0.37315153426896497,0.92777040935390775,-0.38404184434640143,0.92331568912859618,-0.39487898637059116,0.91873314195305622,-0.40566146001089959,0.91402340225063461,-0.41638777250516756,0.90918712205364238,-0.42705643886637568,0.90422497091308507,-0.4376659820882306,0.89913763580596751,-0.44821493334964535,0.89392582104018725,-0.45870183221809036,0.88859024815702703,-0.46912522685177899,0.88313165583126219,-0.47948367420066634,0.87755079976889616,-0.48977574020622827,0.87184845260253874,-0.49999999999999983,0.86602540378443871,-0.51015503810083751,0.86008245947719053,-0.52023944861088223,0.85402044244212638,-0.53025183541019882,0.8478401919254096,-0.54019081235005828,0.84154256354184731,-0.55005500344484137,0.83512842915643559,-0.55984304306253319,0.82859867676365651,-0.56955357611378854,0.82195421036454019,-0.57918525823953315,0.81519594984151222,-0.58873675599708242,0.80832483083104156,-0.59820674704474575,0.80134180459410931,-0.60759392032489878,0.79424783788451103,-0.616896976245489,0.78704391281501729,-0.62611462685995611,0.77973102672140604,-0.63524559604553854,0.772310192024389,-0.64428861967994633,0.76478243608944729,-0.65324244581636948,0.75714880108460025,-0.66210583485680041,0.74941034383612515,-0.67087755972365049,0.74156813568224456,-0.67955640602962919,0.73362326232480779,-0.68814117224586879,0.72557682367898269,-0.69663066986826694,0.71742993372097996,-0.70502372358202869,0.70918372033382948,-0.71331917142437995,0.70083932515123326,-0.72151586494543474,0.6923979033995129,-0.72961266936718827,0.68386062373767798,-0.73760846374062217,0.67522866809563065,-0.74550214110089041,0.6665032315105367,-0.75329260862057279,0.65768552196137975,-0.76097878776096772,0.64877676020172614,-0.76855961442141085,0.63977817959071748,-0.77603403908659196,0.63069102592232107,-0.78340102697185243,0.62151655725285937,-0.79065955816644617,0.61225604372683828,-0.79780862777473793,0.60291076740110527,-0.80484724605532576,0.59348202206735623,-0.81177443855806242,0.58397111307302052,-0.81858924625896368,0.57437935714054156,-0.82529072569297723,0.56470808218508706,-0.83187794908460022,0.5549586271307072,-0.83835000447632235,0.54513234172497071,-0.84470599585488193,0.53523058635209952,-0.85094504327531195,0.52525473184463323,-0.85706628298276299,0.51520615929364655,-0.86306886753208412,0.5050862598575474,-0.86895196590514623,0.49489643456947791,-0.87471476362589173,0.48463809414335196,-0.88035646287309133,0.47431265877855228,-0.88587628259079965,0.46392155796331108,-0.89127345859648544,0.45346623027680799,-0.89654724368682859,0.44294812319000798,-0.9016969077411644,0.4323686928652698,-0.90672173782256549,0.42172940395474784,-0.91162103827654173,0.41103172939762206,-0.91639413082735022,0.40027715021617871,-0.92104035467189682,0.38946715531077403,-0.925559066571221,0.37860324125370354,-0.92994964093954791,0.3676869120820131,-0.93421146993089599,0.3567196790892741,-0.93834396352322946,0.34570306061635642,-0.94234654960014352,0.33463858184122192,-0.94621867403006954,0.32352777456777509,-0.9499598007429908,0.31237217701379416,-0.95356941180465815,0.30117333359797677,-0.95704700748829463,0.28993279472612277,-0.96039210634377925,0.27865211657649214,-0.96360424526430011,0.26733286088436364,-0.96668297955046933,0.25597659472582041,-0.96962788297188807,0.24458489030080022,-0.9724385478261558,0.23315932471543407,-0.97511458499531334,0.22170147976370796,-0.9776556239997144,0.2102129417084713,-0.98006131304931543,0.19869530106183114,-0.98233131909237936,0.18715015236495539,-0.98446532786158336,0.17557909396732085,-0.98646304391752793,0.16398372780542975,-0.9883241906896385,0.15236565918103392,-0.99004851051445431,0.14072649653889058,-0.99163576467130043,0.12906785124408537,-0.99308573341533701,0.11739133735894719,-0.99439821600798195,0.10569857141959295,-0.99557303074470116,0.093991172212130353,-0.99661001498016466,0.082270760548544972,-0.99750902515076378,0.070538959042311264,-0.99826993679448672,0.058797391883751653,-0.99889264456814908,0.047047684615179865,-0.9993770622619782,0.03529146390585268,-0.99972312281154851,0.023530357326770113,-0.99993077830706578,0.011765993125348085,1,0,0.99972312281154851,0.02353035732676978,0.99889264456814908,0.047047684615179775,0.99750902515076378,0.070538959042310959,0.99557303074470116,0.093991172212130283,0.99308573341533701,0.11739133735894691,0.99004851051445431,0.14072649653889052,0.98646304391752804,0.16398372780542952,0.98233131909237936,0.18715015236495539,0.9776556239997144,0.21021294170847107,0.9724385478261558,0.2331593247154341,0.96668297955046933,0.25597659472582024,0.96039210634377925,0.27865211657649214,0.95356941180465826,0.3011733335979766,0.94621867403006965,0.32352777456777476,0.93834396352322946,0.34570306061635631,0.92994964093954802,0.36768691208201276,0.92104035467189682,0.38946715531077392,0.91162103827654184,0.41103172939762178,0.9016969077411644,0.43236869286526974,0.89127345859648555,0.45346623027680771,0.88035646287309133,0.47431265877855222,0.86895196590514645,0.49489643456947768,0.85706628298276299,0.51520615929364655,0.84470599585488204,0.5352305863520993,0.83187794908460022,0.55495862713070709,0.81858924625896379,0.57437935714054134,0.80484724605532576,0.59348202206735623,0.79065955816644617,0.61225604372683828,0.77603403908659196,0.63069102592232107,0.76097878776096783,0.64877676020172603,0.74550214110089064,0.66650323151053648,0.72961266936718838,0.68386062373767786,0.71331917142438017,0.70083932515123293,0.69663066986826705,0.71742993372097985,0.67955640602962941,0.73362326232480757,0.66210583485680041,0.74941034383612515,0.64428861967994644,0.76478243608944707,0.62611462685995611,0.77973102672140604,0.60759392032489901,0.79424783788451092,0.58873675599708242,0.80832483083104145,0.56955357611378876,0.82195421036454008,0.55005500344484137,0.83512842915643559,0.53025183541019894,0.8478401919254096,0.5101550381008374,0.86008245947719053,0.48977574020622838,0.87184845260253863,0.46912522685177932,0.88313165583126196,0.44821493334964546,0.89392582104018725,0.42705643886637601,0.90422497091308496,0.4056614600108997,0.9140234022506345,0.38404184434640154,0.92331568912859607,0.36220956382968261,0.93209668590243955,0.34017670818163692,0.94036153005676781,0.31795547819251524,0.94810564489795601,0.29555817896568415,0.95532474208851548,0.27299721310362135,0.96201482402177985,0.25028507383991994,0.96817218603559663,0.22743433812110633,0.97379341846380041,0.20445765964210019,0.97887540852433064,0.18136776183917588,0.98341534204294778,0.15817743084430405,0.98741070501159522,0.13489950840477491,0.99085928498054154,0.11154688477202455,0.99375917228353505,0.088132491563601825,0.99610876109528901,0.06466929460222838,0.99790675032071519,0.041170286735917723,0.99915214431541022,0.017648480643128704,0.99984425343699856,-0.0058830983730621339,0.99998269442702503,-0.02941141959777914,0.99956739062318523,-0.052923454120162944,0.99859857200177837,-0.076406182048186888,0.99707677505035652,-0.099846599718479201,0.9950028424706423,-0.12323172689715853,0.99237792271187897,-0.14654861396769547,0.98920346933487213,-0.16978434910181853,0.98548124020707351,-0.19292606540949681,0.98121329652915457,-0.21596094806403593,0.97640200169360714,-0.23887624139834449,0.97105001997600504,-0.26165925596844058,0.96516031505964961,-0.28429737558028695,0.95873614839441679,-0.30677806427606374,0.9517810773907156,-0.32908887327600989,0.94429895344955583,-0.35121744787198933,0.93629391982981847,-0.37315153426896497,0.92777040935390775,-0.39487898637059116,0.91873314195305622,-0.41638777250516756,0.90918712205364238,-0.4376659820882306,0.89913763580596751,-0.45870183221809036,0.88859024815702703,-0.47948367420066634,0.87755079976889616,1,0,0.99889264456814908,0.047047684615179775,0.99557303074470116,0.093991172212130283,0.99004851051445431,0.14072649653889052,0.98233131909237936,0.18715015236495539,0.9724385478261558,0.2331593247154341,0.96039210634377925,0.27865211657649214,0.94621867403006965,0.32352777456777476,0.92994964093954802,0.36768691208201276,0.91162103827654184,0.41103172939762178,0.89127345859648555,0.45346623027680771,0.86895196590514645,0.49489643456947768,0.84470599585488204,0.5352305863520993,0.81858924625896379,0.57437935714054134,0.79065955816644617,0.61225604372683828,0.76097878776096783,0.64877676020172603,0.72961266936718838,0.68386062373767786,0.69663066986826705,0.71742993372097985,0.66210583485680041,0.74941034383612515,0.62611462685995611,0.77973102672140604,0.58873675599708242,0.80832483083104145,0.55005500344484137,0.83512842915643559,0.5101550381008374,0.86008245947719053,0.46912522685177932,0.88313165583126196,0.42705643886637601,0.90422497091308496,0.38404184434640154,0.92331568912859607,0.34017670818163692,0.94036153005676781,0.29555817896568415,0.95532474208851548,0.25028507383991994,0.96817218603559663,0.20445765964210019,0.97887540852433064,0.15817743084430405,0.98741070501159522,0.11154688477202455,0.99375917228353505,0.06466929460222838,0.99790675032071519,0.017648480643128704,0.99984425343699856,-0.02941141959777914,0.99956739062318523,-0.076406182048186888,0.99707677505035652,-0.12323172689715853,0.99237792271187897,-0.16978434910181853,0.98548124020707351,-0.21596094806403593,0.97640200169360714,-0.26165925596844058,0.96516031505964961,-0.30677806427606374,0.9517810773907156,-0.35121744787198933,0.93629391982981847,-0.39487898637059116,0.91873314195305622,-0.4376659820882306,0.89913763580596751,-0.47948367420066634,0.87755079976889616,-0.52023944861088223,0.85402044244212638,-0.55984304306253319,0.82859867676365651,-0.59820674704474575,0.80134180459410931,-0.63524559604553854,0.772310192024389,-0.67087755972365049,0.74156813568224456,-0.70502372358202869,0.70918372033382948,-0.73760846374062217,0.67522866809563065,-0.76855961442141085,0.63977817959071748,-0.79780862777473793,0.60291076740110527,-0.82529072569297723,0.56470808218508706,-0.85094504327531195,0.52525473184463323,-0.87471476362589173,0.48463809414335196,-0.89654724368682859,0.44294812319000798,-0.91639413082735022,0.40027715021617871,-0.93421146993089599,0.3567196790892741,-0.9499598007429908,0.31237217701379416,-0.96360424526430011,0.26733286088436364,-0.97511458499531334,0.22170147976370796,-0.98446532786158336,0.17557909396732085,-0.99163576467130043,0.12906785124408537,-0.99661001498016466,0.082270760548544972,-0.9993770622619782,0.03529146390585268,-0.99993077830706578,-0.01176599312534784,-0.99826993679448672,-0.05879739188375141,-0.99439821600798206,-0.1056985714195927,-0.98832419068963862,-0.15236565918103326,-0.98006131304931554,-0.19869530106183048,-0.96962788297188829,-0.24458489030079955,-0.95704700748829474,-0.28993279472612254,-0.94234654960014363,-0.33463858184122169,-0.92555906657122111,-0.37860324125370332,-0.9067217378225656,-0.42172940395474762,-0.88587628259079976,-0.46392155796331086,-0.86306886753208423,-0.50508625985754718,-0.83835000447632246,-0.54513234172497049,-0.81177443855806264,-0.5839711130730203,-0.78340102697185265,-0.62151655725285915,-0.7532926086205729,-0.65768552196137964,-0.72151586494543496,-0.69239790339951268,-0.68814117224586902,-0.72557682367898246,-0.65324244581636959,-0.75714880108460014,-0.61689697624548923,-0.78704391281501718,-0.57918525823953371,-0.81519594984151178,-0.5401908123500585,-0.8415425635418472,0.99750902515076378,0.070538959042310959,0.99004851051445431,0.14072649653889052,0.9776556239997144,0.21021294170847107,0.96039210634377925,0.27865211657649214,0.93834396352322946,0.34570306061635631,0.91162103827654184,0.41103172939762178,0.88035646287309133,0.47431265877855222,0.84470599585488204,0.5352305863520993,0.80484724605532576,0.59348202206735623,0.76097878776096783,0.64877676020172603,0.71331917142438017,0.70083932515123293,0.66210583485680041,0.74941034383612515,0.60759392032489901,0.79424783788451092,0.55005500344484137,0.83512842915643559,0.48977574020622838,0.87184845260253863,0.42705643886637601,0.90422497091308496,0.36220956382968261,0.93209668590243955,0.29555817896568415,0.95532474208851548,0.22743433812110633,0.97379341846380041,0.15817743084430405,0.98741070501159522,0.088132491563601825,0.99610876109528901,0.017648480643128704,0.99984425343699856,-0.052923454120162944,0.99859857200177837,-0.12323172689715853,0.99237792271187897,-0.19292606540949681,0.98121329652915457,-0.26165925596844058,0.96516031505964961,-0.32908887327600989,0.94429895344955583,-0.39487898637059116,0.91873314195305622,-0.45870183221809036,0.88859024815702703,-0.52023944861088223,0.85402044244212638,-0.57918525823953315,0.81519594984151222,-0.63524559604553854,0.772310192024389,-0.68814117224586879,0.72557682367898269,-0.73760846374062217,0.67522866809563065,-0.78340102697185243,0.62151655725285937,-0.82529072569297723,0.56470808218508706,-0.86306886753208412,0.5050862598575474,-0.89654724368682859,0.44294812319000798,-0.925559066571221,0.37860324125370354,-0.9499598007429908,0.31237217701379416,-0.96962788297188807,0.24458489030080022,-0.98446532786158336,0.17557909396732085,-0.99439821600798195,0.10569857141959295,-0.9993770622619782,0.03529146390585268,-0.9993770622619782,-0.035291463905852437,-0.99439821600798206,-0.1056985714195927,-0.98446532786158336,-0.1755790939673206,-0.96962788297188829,-0.24458489030079955,-0.94995980074299091,-0.31237217701379394,-0.92555906657122111,-0.37860324125370332,-0.8965472436868287,-0.44294812319000776,-0.86306886753208423,-0.50508625985754718,-0.82529072569297768,-0.5647080821850865,-0.78340102697185265,-0.62151655725285915,-0.73760846374062228,-0.67522866809563042,-0.68814117224586902,-0.72557682367898246,-0.63524559604553898,-0.77231019202438844,-0.57918525823953371,-0.81519594984151178,-0.52023944861088234,-0.85402044244212627,-0.45870183221809058,-0.88859024815702692,-0.39487898637059116,-0.91873314195305622,-0.3290888732760105,-0.94429895344955561,-0.26165925596844103,-0.9651603150596495,-0.19292606540949706,-0.98121329652915446,-0.12323172689715878,-0.99237792271187897,-0.052923454120162965,-0.99859857200177837,0.017648480643128014,-0.99984425343699868,0.088132491563601353,-0.99610876109528912,0.1581774308443038,-0.98741070501159522,0.22743433812110631,-0.97379341846380041,0.29555817896568415,-0.95532474208851548,0.362209563829682,-0.93209668590243977,0.42705643886637557,-0.90422497091308507,0.48977574020622816,-0.87184845260253874,0.55005500344484126,-0.83512842915643559,0.60759392032489912,-0.79424783788451081,0.66210583485679997,-0.74941034383612559,0.71331917142437995,-0.70083932515123326,0.76097878776096761,-0.64877676020172625,0.80484724605532565,-0.59348202206735634,0.84470599585488215,-0.53523058635209919,0.88035646287309111,-0.47431265877855278,0.91162103827654173,-0.41103172939762217,0.93834396352322946,-0.34570306061635653,0.96039210634377925,-0.27865211657649225,0.9776556239997144,-0.21021294170847099,0.99004851051445431,-0.14072649653889113,0.99750902515076378,-0.070538959042311389,0.99750902515076378,-0.070538959042311389,1,0,0.99986473257459929,0.01644738743767395,0.99945896689295011,0.032890325283841379,0.99878281272881042,0.04932436515076534,0.99783645300544621,0.065745061057922369,0.99662014374614405,0.082147970634795162,0.99513421400494795,0.098528656322688646,0.99337906577763868,0.11488268657524421,0.99135517389298011,0.13120563705732749,0.98906308588426128,0.14749309184196516,0.98650342184116968,0.16374064460500715,0.9836768742420352,0.17994389981719078,0.98058420776649102,0.19609847393328481,0.9772262590886005,0.21219999657799091,0.97360393665050837,0.22824411172828274,0.96971822041667499,0.24422647889186186,0.96557016160876175,0.26014277428141225,0.96116088242123943,0.2759886919843354,0.95649157571779531,0.29175994512764963,0.9515635047086215,0.30745226703773904,0.94637800260867355,0.32306141239463682,0.94093647227698807,0.33858315838053277,0.93524038583716163,0.35401330582219237,0.92929128427908936,0.36934768032697968,0.92309077704207365,0.38458213341217595,0.91664054157941477,0.39971254362728864,0.90994232290460131,0.41473481766904779,0.90299793311922305,0.42964489148878665,0.89580925092273433,0.44443873139190909,0.88837822110420095,0.45911233512914401,0.88070685401616589,0.47366173297929381,0.87279722503077994,0.48808298882318168,0.86465147397834041,0.50237220120850967,0.85627180456839302,0.51652550440533695,0.8476604837935513,0.53053906945189488,0.83881984131619636,0.54440910519045427,0.82975226883822173,0.55813185929296616,0.82046021945399483,0.57170361927619673,0.81094620698670961,0.58512071350608397,0.80121280530830929,0.5983795121910418,0.79126264764316478,0.61147642836394667,0.78109842585569544,0.62440791885253555,0.7707228897221261,0.63717048523795838,0.76013884618657657,0.64976067480122246,0.74934915860168583,0.66217508145727255,0.73835674595397449,0.67441034667645627,0.72716458207415846,0.68646316039312294,0.71577569483262293,0.69833026190111214,0.70419316532027854,0.71000844073588787,0.69242012701501909,0.72149453754308135,0.68045976493400573,0.73278544493320674,0.66831531477200956,0.7438781083223176,0.65599006202604337,0.75476952675837927,0.64348734110651984,0.76545675373312982,0.63081053443517754,0.77593689797921439,0.61796307153001773,0.78620712425237294,0.60494842807750093,0.7962646540984728,0.59177012499225168,0.80610676660517788,0.57843172746452909,0.81573079913804947,0.56493684399571797,0.82513414806088214,0.55128912542210429,0.83431426944007814,0.53749226392719618,0.84326867973286979,0.52354999204285979,0.85199495645920431,0.50946608163953877,0.8604907388571098,0.49524434290583336,0.86875372852136257,0.48088862331770965,0.87678169002528672,0.46640280659762445,0.88457245152551467,0.45179081166384322,0.892123905349546,0.43705659157023491,0.89943400856594746,0.42220413243683458,0.90650078353703578,0.40723745237145775,0.91332231845389866,0.39216060038266271,0.91989676785360508,0.37697765528435323,0.92622235311846768,0.36169272459231572,0.93229736295722043,0.34630994341299487,0.93812015386798309,0.33083347332480184,0.94368915058288538,0.31526750125226255,0.94900284649423183,0.29961623833330969,0.95405980406209201,0.28388391878002167,0.95885865520320468,0.2680747987331214,0.96339810166109241,0.25219315511054247,0.96767691535728484,0.23624328445037235,0.97169393872355736,0.22022950174849087,0.97544808501509273,0.20415613929121182,0.97893833860448398,0.18802754548324924,0.98216375525649724,0.17184808367132301,0.98512346238351967,0.15562213096372005,0.98781665928162543,0.13935407704613564,0.99024261734719321,0.12304832299410902,0.99240068027401984,0.10670928008237961,0.99429026423087352,0.0903413685914842,0.99591085801944024,0.073949016611915497,0.99726202321262125,0.057536658846171006,0.99834339427314256,0.041108735409009951,0.99915467865244567,0.024669690626248176,0.99969565686983219,0.0082239718324137318,0.99996618257184056,-0.0082239718324136103,0.99996618257184056,-0.024669690626248054,0.99969565686983219,-0.041108735409009611,0.99915467865244567,-0.057536658846170881,0.99834339427314256,-0.073949016611915372,0.99726202321262125,-0.090341368591483853,0.99591085801944024,-0.10670928008237948,0.99429026423087352,-0.12304832299410867,0.99240068027401995,-0.13935407704613553,0.99024261734719321,-0.15562213096371993,0.98781665928162543,-0.17184808367132268,0.98512346238351978,-0.1880275454832491,0.98216375525649724,-0.20415613929121149,0.97893833860448409,-0.22022950174849076,0.97544808501509273,-0.23624328445037224,0.97169393872355736,-0.25219315511054213,0.96767691535728495,-0.26807479873312123,0.96339810166109241,-0.28388391878002134,0.95885865520320468,-0.29961623833330958,0.95405980406209201,-0.31526750125226244,0.94900284649423194,-0.33083347332480151,0.94368915058288549,-0.34630994341299476,0.93812015386798309,-0.36169272459231561,0.93229736295722054,-0.3769776552843529,0.92622235311846779,-0.39216060038266259,0.91989676785360519,-0.40723745237145748,0.91332231845389877,-0.42220413243683447,0.90650078353703589,-0.43705659157023496,0.89943400856594746,-0.45179081166384288,0.89212390534954622,-0.46640280659762434,0.88457245152551467,-0.48088862331770954,0.87678169002528683,-0.49524434290583308,0.86875372852136279,-0.50946608163953877,0.86049073885710992,-0.52354999204285968,0.85199495645920442,-0.53749226392719596,0.8432686797328699,-0.55128912542210418,0.83431426944007825,-0.56493684399571786,0.82513414806088226,-0.57843172746452876,0.81573079913804969,-0.59177012499225157,0.8061067666051781,-0.60494842807750093,0.79626465409847291,-0.61796307153001784,0.78620712425237294,-0.63081053443517721,0.77593689797921461,-0.64348734110651973,0.76545675373312994,-0.65599006202604337,0.75476952675837927,-0.66831531477200934,0.74387810832231793,-0.68045976493400562,0.73278544493320685,-0.69242012701501898,0.72149453754308146,-0.70419316532027831,0.71000844073588809,-0.71577569483262271,0.69833026190111236,-0.72716458207415835,0.68646316039312305,-0.73835674595397449,0.67441034667645627,-0.74934915860168561,0.66217508145727277,-0.76013884618657657,0.64976067480122257,-0.7707228897221261,0.63717048523795838,-0.78109842585569533,0.62440791885253577,-0.79126264764316467,0.61147642836394689,-0.80121280530830929,0.59837951219104191,-0.81094620698670938,0.58512071350608419,-0.82046021945399472,0.57170361927619695,-0.82975226883822162,0.55813185929296627,-0.83881984131619614,0.54440910519045471,-0.84766048379355119,0.53053906945189511,-0.85627180456839291,0.51652550440533707,-0.86465147397834041,0.50237220120850967,-0.87279722503077972,0.48808298882318202,-0.88070685401616577,0.47366173297929398,-0.88837822110420095,0.45911233512914407,-0.89580925092273422,0.44443873139190937,-0.90299793311922294,0.42964489148878687,-0.90994232290460131,0.41473481766904785,-0.91664054157941466,0.39971254362728903,-0.92309077704207354,0.38458213341217617,-0.92929128427908925,0.36934768032697979,-0.93524038583716163,0.35401330582219237,-0.94093647227698796,0.33858315838053304,-0.94637800260867344,0.32306141239463698,-0.9515635047086215,0.30745226703773904,-0.95649157571779519,0.29175994512764997,-0.96116088242123943,0.27598869198433557,-0.96557016160876163,0.2601427742814123,-0.96971822041667488,0.24422647889186222,-0.97360393665050837,0.22824411172828296,-0.9772262590886005,0.21219999657799099,-0.98058420776649091,0.19609847393328522,-0.9836768742420352,0.17994389981719108,-0.98650342184116968,0.16374064460500729,-0.98906308588426128,0.14749309184196516,-0.99135517389298011,0.1312056370573278,-0.99337906577763868,0.11488268657524439,-0.99513421400494795,0.098528656322688687,-0.99662014374614405,0.082147970634795509,-0.99783645300544621,0.065745061057922577,-0.99878281272881042,0.049324365150765423,-0.99945896689295011,0.032890325283841775,-0.99986473257459929,0.01644738743767421,0.99945896689295011,0.032890325283841379,0.99783645300544621,0.065745061057922369,0.99513421400494795,0.098528656322688646,0.99135517389298011,0.13120563705732749,0.98650342184116968,0.16374064460500715,0.98058420776649102,0.19609847393328481,0.97360393665050837,0.22824411172828274,0.96557016160876175,0.26014277428141225,0.95649157571779531,0.29175994512764963,0.94637800260867355,0.32306141239463682,0.93524038583716163,0.35401330582219237,0.92309077704207365,0.38458213341217595,0.90994232290460131,0.41473481766904779,0.89580925092273433,0.44443873139190909,0.88070685401616589,0.47366173297929381,0.86465147397834041,0.50237220120850967,0.8476604837935513,0.53053906945189488,0.82975226883822173,0.55813185929296616,0.81094620698670961,0.58512071350608397,0.79126264764316478,0.61147642836394667,0.7707228897221261,0.63717048523795838,0.74934915860168583,0.66217508145727255,0.72716458207415846,0.68646316039312294,0.70419316532027854,0.71000844073588787,0.68045976493400573,0.73278544493320674,0.65599006202604337,0.75476952675837927,0.63081053443517754,0.77593689797921439,0.60494842807750093,0.7962646540984728,0.57843172746452909,0.81573079913804947,0.55128912542210429,0.83431426944007814,0.52354999204285979,0.85199495645920431,0.49524434290583336,0.86875372852136257,0.46640280659762445,0.88457245152551467,0.43705659157023491,0.89943400856594746,0.40723745237145775,0.91332231845389866,0.37697765528435323,0.92622235311846768,0.34630994341299487,0.93812015386798309,0.31526750125226255,0.94900284649423183,0.28388391878002167,0.95885865520320468,0.25219315511054247,0.96767691535728484,0.22022950174849087,0.97544808501509273,0.18802754548324924,0.98216375525649724,0.15562213096372005,0.98781665928162543,0.12304832299410902,0.99240068027401984,0.0903413685914842,0.99591085801944024,0.057536658846171006,0.99834339427314256,0.024669690626248176,0.99969565686983219,-0.0082239718324136103,0.99996618257184056,-0.041108735409009611,0.99915467865244567,-0.073949016611915372,0.99726202321262125,-0.10670928008237948,0.99429026423087352,-0.13935407704613553,0.99024261734719321,-0.17184808367132268,0.98512346238351978,-0.20415613929121149,0.97893833860448409,-0.23624328445037224,0.97169393872355736,-0.26807479873312123,0.96339810166109241,-0.29961623833330958,0.95405980406209201,-0.33083347332480151,0.94368915058288549,-0.36169272459231561,0.93229736295722054,-0.39216060038266259,0.91989676785360519,-0.42220413243683447,0.90650078353703589,-0.45179081166384288,0.89212390534954622,-0.48088862331770954,0.87678169002528683,-0.50946608163953877,0.86049073885710992,-0.53749226392719596,0.8432686797328699,-0.56493684399571786,0.82513414806088226,-0.59177012499225157,0.8061067666051781,-0.61796307153001784,0.78620712425237294,-0.64348734110651973,0.76545675373312994,-0.66831531477200934,0.74387810832231793,-0.69242012701501898,0.72149453754308146,-0.71577569483262271,0.69833026190111236,-0.73835674595397449,0.67441034667645627,-0.76013884618657657,0.64976067480122257,-0.78109842585569533,0.62440791885253577,-0.80121280530830929,0.59837951219104191,-0.82046021945399472,0.57170361927619695,-0.83881984131619614,0.54440910519045471,-0.85627180456839291,0.51652550440533707,-0.87279722503077972,0.48808298882318202,-0.88837822110420095,0.45911233512914407,-0.90299793311922294,0.42964489148878687,-0.91664054157941466,0.39971254362728903,-0.92929128427908925,0.36934768032697979,-0.94093647227698796,0.33858315838053304,-0.9515635047086215,0.30745226703773904,-0.96116088242123943,0.27598869198433557,-0.96971822041667488,0.24422647889186222,-0.9772262590886005,0.21219999657799099,-0.9836768742420352,0.17994389981719108,-0.98906308588426128,0.14749309184196516,-0.99337906577763868,0.11488268657524439,-0.99662014374614405,0.082147970634795509,-0.99878281272881042,0.049324365150765423,-0.99986473257459929,0.01644738743767421,-0.99986473257459929,-0.016447387437673964,-0.99878281272881042,-0.04932436515076518,-0.99662014374614405,-0.082147970634794829,-0.99337906577763868,-0.11488268657524414,-0.98906308588426128,-0.14749309184196494,-0.98367687424203532,-0.17994389981719039,-0.97722625908860061,-0.21219999657799077,-0.96971822041667499,-0.24422647889186155,-0.96116088242123943,-0.27598869198433534,-0.95156350470862161,-0.30745226703773881,-0.94093647227698818,-0.33858315838053238,-0.92929128427908936,-0.36934768032697957,-0.91664054157941488,-0.39971254362728842,-0.90299793311922305,-0.42964489148878665,-0.88837822110420106,-0.45911233512914384,-0.87279722503078006,-0.48808298882318141,-0.85627180456839302,-0.51652550440533684,-0.83881984131619658,-0.54440910519045405,-0.82046021945399494,-0.57170361927619673,-0.80121280530830941,-0.59837951219104168,-0.78109842585569567,-0.62440791885253522,-0.76013884618657668,-0.64976067480122235,-0.73835674595397471,-0.67441034667645605,-0.71577569483262315,-0.6983302619011118,-0.6924201270150192,-0.72149453754308124,-0.66831531477200989,-0.74387810832231738,-0.64348734110651984,-0.76545675373312982,-0.61796307153001762,-0.78620712425237305,-0.59177012499225212,-0.80610676660517766,-0.56493684399571809,-0.82513414806088203,-0.53749226392719618,-0.84326867973286979,-0.50946608163953933,-0.86049073885710958,-0.48088862331770976,-0.87678169002528672,-0.45179081166384311,-0.89212390534954611,-0.42220413243683508,-0.90650078353703556,-0.39216060038266304,-0.91989676785360497,-0.36169272459231583,-0.93229736295722043,-0.33083347332480234,-0.94368915058288516,-0.29961623833331003,-0.9540598040620919,-0.26807479873312151,-0.9633981016610923,-0.23624328445037227,-0.97169393872355736,-0.20415613929121215,-0.97893833860448387,-0.17184808367132312,-0.98512346238351967,-0.13935407704613556,-0.99024261734719321,-0.10670928008238016,-0.99429026423087341,-0.073949016611915844,-0.99726202321262114,-0.041108735409009854,-0.99915467865244567,-0.008223971832414299,-0.99996618257184056,0.024669690626247708,-0.99969565686983219,0.057536658846170756,-0.99834339427314256,0.090341368591484172,-0.99591085801944024,0.12304832299410833,-0.99240068027401995,0.1556221309637198,-0.98781665928162543,0.18802754548324921,-0.98216375525649724,0.22022950174849021,-0.97544808501509284,0.25219315511054197,-0.96767691535728495,0.28388391878002139,-0.95885865520320468,0.31526750125226188,-0.94900284649423206,0.34630994341299443,-0.93812015386798331,0.37697765528435301,-0.92622235311846779,0.40723745237145692,-0.913322318453899,0.43705659157023447,-0.89943400856594768,0.46640280659762423,-0.88457245152551478,0.49524434290583336,-0.86875372852136257,0.52354999204285924,-0.85199495645920464,0.55128912542210406,-0.83431426944007836,0.57843172746452898,-0.81573079913804947,0.60494842807750038,-0.79626465409847325,0.63081053443517709,-0.77593689797921472,0.65599006202604326,-0.75476952675837938,0.68045976493400517,-0.7327854449332073,0.7041931653202782,-0.7100084407358882,0.72716458207415824,-0.68646316039312316,0.74934915860168583,-0.66217508145727255,0.77072288972212577,-0.63717048523795883,0.79126264764316456,-0.61147642836394689,0.81094620698670961,-0.58512071350608397,0.8297522688382214,-0.55813185929296671,0.84766048379355108,-0.53053906945189522,0.8646514739783403,-0.50237220120850978,0.88070685401616555,-0.47366173297929448,0.89580925092273422,-0.44443873139190948,0.9099423229046012,-0.41473481766904796,0.92309077704207332,-0.38458213341217673,0.9352403858371614,-0.35401330582219287,0.94637800260867344,-0.32306141239463709,0.95649157571779531,-0.29175994512764969,0.96557016160876152,-0.26014277428141286,0.97360393665050837,-0.22824411172828307,0.98058420776649102,-0.19609847393328489,0.98650342184116957,-0.16374064460500784,0.99135517389298011,-0.13120563705732791,0.99513421400494795,-0.098528656322688812,0.99783645300544621,-0.065745061057923146,0.99945896689295011,-0.032890325283841892,0.99945896689295011,-0.032890325283841892,1,0,0.99997202506126981,0.0074799127577329146,0.99988810181027343,0.014959407015263619,0.99974823494250653,0.022438064295804937,0.99955243228350332,0.029915466169398455,0.9993007047883985,0.037391194276325625,0.9989930665413147,0.044864830350514924,0.99862953475457383,0.052335956242943835,0.99821012976773515,0.059804153945034168,0.99773487504645608,0.067269005612039648,0.99720379718118013,0.074730093586424254,0.99661692588564876,0.082187000421230089,0.99597429399523907,0.089639308903433496,0.99527593746512644,0.097086602077288128,0.99452189536827329,0.10452846326765347,0.9937122098932426,0.11196447610330786,0.99284692634183735,0.11939422454024434,0.99192609312656621,0.12681729288494831,0.99094976176793481,0.13423326581765546,0.98991798689156296,0.14164172841558906,0.98883082622512852,0.14904226617617444,0.98768834059513777,0.15643446504023087,0.98649059392352145,0.16381791141513771,0.98523765322405921,0.17119219219797502,0.98392958859862967,0.17855689479863665,0.98256647323328827,0.1859116071629146,0.98114838339417265,0.19325591779555326,0.97967539842323559,0.20058941578327277,0.97814760073380569,0.20791169081775934,0.9765650758059764,0.21522233321862205,0.97492791218182362,0.22252093395631439,0.97323620146045142,0.22980708467501954,0.9714900382928674,0.2370803777154975,0.96968952037668688,0.24434040613789401,0.96783474845066653,0.2515867637445085,0.96592582628906831,0.25881904510252079,0.96396286069585324,0.26603684556667512,0.96194596149870593,0.27323976130192001,0.95987524154288906,0.28042738930600281,0.95775081668493045,0.28759932743201727,0.95557280578614068,0.29475517441090421,0.95334133070596261,0.30189452987390208,0.95105651629515353,0.3090169943749474,0.94871849038879974,0.31612216941302435,0.94632738379916415,0.32320965745446001,0.94388333030836757,0.33027906195516704,0.9413864666609032,0.33732998738282999,0.9388369325559861,0.34436203923903508,0.9362348706397372,0.35137482408134268,0.93358042649720174,0.35836794954530027,0.93087374864420425,0.36534102436639504,0.92811498851903895,0.37229365840194517,0.9253043004739967,0.37922546265292839,0.92244184176672928,0.38613604928574635,0.91952777255145068,0.39302503165392361,0.91656225586997619,0.39989202431974097,0.91354545764260087,0.40673664307580021,0.91047754665881597,0.41355850496652063,0.90735869456786489,0.42035722830956551,0.90418907586913999,0.42713243271719681,0.90096886790241915,0.43388373911755812,0.89769825083794341,0.44061076977588376,0.89437740766633678,0.44731314831563262,0.8910065241883679,0.45399049973954675,0.88758578900455409,0.46064245045063229,0.88411539350460977,0.46726862827306198,0.880595531856738,0.47386866247299864,0.87702640099676654,0.48044218377933767,0.87340820061712976,0.4869888244043673,0.86974113315569546,0.49350821806434686,0.8660254037844386,0.5,0.86226122039796249,0.50646380699692295,0.8584487936018661,0.51289927740590613,0.85458833670096157,0.51930605116316897,0.85068006568733956,0.52568376981050469,0.84672419922828424,0.53203207651533657,0.84272095865403918,0.53835061609068235,0.83867056794542405,0.54463903501502708,0.83457325372130264,0.55089698145210253,0.83042924522590378,0.55712410527057243,0.82623877431599491,0.56332005806362206,0.82200207544790993,0.56948449316845196,0.81771938566443125,0.57561706568567361,0.81339094458152772,0.58171743249860586,0.80901699437494745,0.58778525229247314,0.80459777976666824,0.59382018557350169,0.80013354801120629,0.59982189468791369,0.79562454888178102,0.6057900438408198,0.79107103465634121,0.61172429911500636,0.78647326010344987,0.61762432848961779,0.7818314824680298,0.62348980185873348,0.77714596145697079,0.6293203910498375,0.77241695922459952,0.63511576984217877,0.76764474035801111,0.64087561398502413,0.76282957186226652,0.64659960121579974,0.75797172314545291,0.65228741127812118,0.75307146600361097,0.65793872593971259,0.74812907460552702,0.6635532290102113,0.74314482547739424,0.66913060635885824,0.73811899748734067,0.67467054593207432,0.73305187182982634,0.68017273777091947,0.72794373200991092,0.68563687402843421,0.72279486382739155,0.69106264898686465,0.71760555536081183,0.69644975907476692,0.71237609695134474,0.70179790288399135,0.70710678118654757,0.70710678118654746,0.70179790288399135,0.71237609695134485,0.69644975907476681,0.71760555536081183,0.69106264898686465,0.72279486382739155,0.6856368740284341,0.72794373200991103,0.68017273777091936,0.73305187182982634,0.67467054593207432,0.73811899748734056,0.66913060635885824,0.74314482547739424,0.66355322901021119,0.74812907460552702,0.65793872593971259,0.75307146600361086,0.65228741127812118,0.75797172314545302,0.64659960121579962,0.76282957186226652,0.64087561398502413,0.76764474035801111,0.63511576984217877,0.77241695922459952,0.62932039104983739,0.7771459614569709,0.62348980185873359,0.7818314824680298,0.61762432848961768,0.78647326010344998,0.61172429911500636,0.79107103465634121,0.60579004384081991,0.79562454888178102,0.59982189468791369,0.80013354801120629,0.59382018557350158,0.80459777976666835,0.58778525229247314,0.80901699437494745,0.58171743249860575,0.81339094458152783,0.5756170656856735,0.81771938566443136,0.56948449316845207,0.82200207544790993,0.56332005806362195,0.82623877431599491,0.55712410527057232,0.83042924522590378,0.55089698145210253,0.83457325372130264,0.54463903501502708,0.83867056794542405,0.53835061609068224,0.84272095865403918,0.53203207651533657,0.84672419922828412,0.52568376981050469,0.85068006568733956,0.51930605116316886,0.85458833670096168,0.51289927740590613,0.8584487936018661,0.50646380699692284,0.86226122039796249,0.49999999999999989,0.86602540378443871,0.49350821806434686,0.86974113315569535,0.48698882440436725,0.87340820061712976,0.48044218377933751,0.87702640099676665,0.47386866247299869,0.880595531856738,0.46726862827306198,0.88411539350460977,0.46064245045063223,0.88758578900455409,0.45399049973954686,0.8910065241883679,0.44731314831563262,0.89437740766633689,0.44061076977588365,0.89769825083794341,0.43388373911755818,0.90096886790241915,0.42713243271719675,0.90418907586913999,0.4203572283095654,0.90735869456786489,0.41355850496652069,0.91047754665881586,0.40673664307580021,0.91354545764260087,0.39989202431974086,0.91656225586997619,0.39302503165392366,0.91952777255145057,0.3861360492857463,0.92244184176672928,0.37922546265292834,0.9253043004739967,0.37229365840194523,0.92811498851903895,0.36534102436639498,0.93087374864420425,0.35836794954530016,0.93358042649720174,0.35137482408134274,0.9362348706397372,0.34436203923903508,0.9388369325559861,0.33732998738282988,0.9413864666609032,0.33027906195516715,0.94388333030836757,0.32320965745446001,0.94632738379916426,0.31612216941302423,0.94871849038879974,0.30901699437494745,0.95105651629515353,0.30189452987390203,0.95334133070596272,0.2947551744109041,0.95557280578614079,0.28759932743201733,0.95775081668493045,0.28042738930600275,0.95987524154288906,0.2732397613019199,0.96194596149870593,0.26603684556667517,0.96396286069585324,0.25881904510252074,0.96592582628906831,0.25158676374450839,0.96783474845066653,0.24434040613789407,0.96968952037668688,0.23708037771549748,0.9714900382928674,0.22980708467501942,0.97323620146045142,0.22252093395631445,0.97492791218182362,0.21522233321862203,0.9765650758059764,0.20791169081775923,0.97814760073380569,0.20058941578327283,0.97967539842323559,0.19325591779555323,0.98114838339417265,0.18591160716291449,0.98256647323328827,0.17855689479863671,0.98392958859862967,0.17119219219797499,0.98523765322405921,0.1638179114151376,0.98649059392352145,0.15643446504023092,0.98768834059513777,0.14904226617617444,0.98883082622512852,0.14164172841558895,0.98991798689156296,0.13423326581765554,0.9909497617679347,0.12681729288494828,0.99192609312656621,0.11939422454024425,0.99284692634183735,0.11196447610330791,0.9937122098932426,0.10452846326765346,0.99452189536827329,0.097086602077288031,0.99527593746512644,0.089639308903433551,0.99597429399523907,0.082187000421230075,0.99661692588564876,0.074730093586424171,0.99720379718118013,0.067269005612039717,0.99773487504645608,0.059804153945034154,0.99821012976773515,0.052335956242943744,0.99862953475457383,0.044864830350514986,0.99899306654131459,0.037391194276325604,0.99930070478839861,0.029915466169398369,0.99955243228350332,0.022438064295804999,0.99974823494250653,0.014959407015263606,0.99988810181027343,0.007479912757732827,0.99997202506126981,6.123233995736766e-17,1,-0.0074799127577329268,0.9999720250612697,-0.014959407015263704,0.99988810181027343,-0.022438064295804874,0.99974823494250653,-0.029915466169398466,0.99955243228350332,-0.037391194276325708,0.9993007047883985,-0.044864830350514862,0.9989930665413147,-0.052335956242943842,0.99862953475457383,-0.059804153945034251,0.99821012976773515,-0.067269005612039592,0.99773487504645608,-0.074730093586424268,0.99720379718118013,-0.082187000421230172,0.99661692588564876,-0.08963930890343344,0.99597429399523907,-0.097086602077288128,0.99527593746512644,-0.10452846326765355,0.99452189536827329,-0.1119644761033078,0.9937122098932426,-0.11939422454024434,0.99284692634183735,-0.12681729288494839,0.99192609312656621,-0.13423326581765541,0.99094976176793481,-0.14164172841558903,0.98991798689156296,-0.14904226617617453,0.98883082622512852,-0.15643446504023081,0.98768834059513777,-0.16381791141513771,0.98649059392352145,-0.17119219219797507,0.98523765322405921,-0.1785568947986366,0.98392958859862967,-0.18591160716291458,0.98256647323328827,-0.19325591779555334,0.98114838339417265,-0.20058941578327272,0.97967539842323559,-0.20791169081775934,0.97814760073380569,-0.21522233321862211,0.9765650758059764,-0.22252093395631434,0.97492791218182362,-0.22980708467501951,0.97323620146045142,-0.23708037771549759,0.9714900382928674,-0.24434040613789396,0.96968952037668688,-0.2515867637445085,0.96783474845066653,-0.25881904510252085,0.96592582628906831,-0.26603684556667506,0.96396286069585335,-0.27323976130192001,0.96194596149870593,-0.28042738930600281,0.95987524154288906,-0.28759932743201722,0.95775081668493056,-0.29475517441090421,0.95557280578614068,-0.30189452987390208,0.95334133070596261,-0.30901699437494734,0.95105651629515364,-0.31612216941302435,0.94871849038879974,-0.32320965745446006,0.94632738379916415,-0.33027906195516699,0.94388333030836757,-0.33732998738282999,0.9413864666609032,-0.34436203923903513,0.9388369325559861,-0.35137482408134263,0.9362348706397372,-0.35836794954530027,0.93358042649720174,-0.3653410243663951,0.93087374864420425,-0.37229365840194512,0.92811498851903895,-0.37922546265292839,0.9253043004739967,-0.38613604928574641,0.92244184176672928,-0.39302503165392355,0.91952777255145068,-0.39989202431974097,0.91656225586997619,-0.40673664307580026,0.91354545764260087,-0.41355850496652058,0.91047754665881597,-0.42035722830956568,0.90735869456786478,-0.42713243271719681,0.90418907586913999,-0.43388373911755806,0.90096886790241915,-0.44061076977588393,0.8976982508379433,-0.44731314831563268,0.89437740766633678,-0.45399049973954675,0.8910065241883679,-0.46064245045063251,0.88758578900455398,-0.46726862827306204,0.88411539350460977,-0.47386866247299858,0.880595531856738,-0.48044218377933784,0.87702640099676643,-0.4869888244043673,0.87340820061712965,-0.4935082180643468,0.86974113315569546,-0.50000000000000022,0.8660254037844386,-0.50646380699692295,0.86226122039796249,-0.51289927740590613,0.85844879360186621,-0.51930605116316919,0.85458833670096146,-0.5256837698105048,0.85068006568733956,-0.53203207651533646,0.84672419922828424,-0.53835061609068258,0.84272095865403907,-0.5446390350150272,0.83867056794542405,-0.55089698145210242,0.83457325372130275,-0.55712410527057254,0.83042924522590367,-0.56332005806362206,0.82623877431599491,-0.56948449316845196,0.82200207544790993,-0.57561706568567372,0.81771938566443125,-0.58171743249860586,0.81339094458152772,-0.58778525229247303,0.80901699437494745,-0.5938201855735018,0.80459777976666813,-0.5998218946879138,0.80013354801120629,-0.6057900438408198,0.79562454888178102,-0.61172429911500648,0.7910710346563411,-0.61762432848961779,0.78647326010344987,-0.62348980185873348,0.78183148246802991,-0.62932039104983761,0.77714596145697079,-0.63511576984217877,0.77241695922459952,-0.64087561398502413,0.76764474035801122,-0.64659960121579985,0.76282957186226641,-0.65228741127812118,0.75797172314545291,-0.65793872593971259,0.75307146600361097,-0.66355322901021141,0.74812907460552691,-0.66913060635885824,0.74314482547739424,-0.67467054593207432,0.73811899748734067,-0.68017273777091958,0.73305187182982623,-0.68563687402843421,0.72794373200991092,-0.69106264898686465,0.72279486382739155,-0.69644975907476703,0.71760555536081172,-0.70179790288399146,0.71237609695134474,-0.70710678118654746,0.70710678118654757,-0.71237609695134496,0.70179790288399124,-0.71760555536081194,0.69644975907476681,-0.72279486382739144,0.69106264898686476,-0.72794373200991114,0.68563687402843398,-0.73305187182982634,0.68017273777091936,-0.73811899748734056,0.67467054593207443,-0.74314482547739436,0.66913060635885802,-0.74812907460552702,0.66355322901021119,-0.75307146600361086,0.6579387259397127,-0.75797172314545314,0.65228741127812095,-0.76282957186226652,0.64659960121579962,-0.76764474035801111,0.64087561398502424,-0.77241695922459963,0.63511576984217855,-0.7771459614569709,0.62932039104983739,-0.78183148246802969,0.62348980185873359,-0.78647326010344998,0.61762432848961757,-0.79107103465634121,0.61172429911500636,-0.79562454888178091,0.60579004384081991,-0.8001335480112064,0.59982189468791358,-0.80459777976666835,0.59382018557350158,-0.80901699437494734,0.58778525229247325,-0.81339094458152794,0.58171743249860564,-0.81771938566443136,0.5756170656856735,-0.82200207544790982,0.56948449316845207,-0.82623877431599502,0.56332005806362184,-0.83042924522590378,0.55712410527057232,-0.83457325372130264,0.55089698145210264,-0.83867056794542416,0.54463903501502697,-0.84272095865403918,0.53835061609068235,-0.84672419922828412,0.53203207651533668,-0.85068006568733967,0.52568376981050458,-0.85458833670096168,0.51930605116316886,-0.8584487936018661,0.51289927740590624,-0.8622612203979626,0.50646380699692273,-0.86602540378443871,0.49999999999999994,-0.86974113315569535,0.49350821806434697,-0.87340820061712987,0.48698882440436708,-0.87702640099676654,0.48044218377933756,-0.880595531856738,0.47386866247299875,-0.88411539350460988,0.46726862827306181,-0.88758578900455409,0.46064245045063223,-0.89100652418836779,0.45399049973954686,-0.89437740766633689,0.44731314831563246,-0.89769825083794341,0.4406107697758837,-0.90096886790241903,0.43388373911755823,-0.9041890758691401,0.42713243271719659,-0.90735869456786489,0.42035722830956546,-0.91047754665881586,0.41355850496652075,-0.91354545764260098,0.40673664307580004,-0.91656225586997619,0.39989202431974091,-0.91952777255145057,0.39302503165392372,-0.92244184176672939,0.38613604928574613,-0.9253043004739967,0.37922546265292839,-0.92811498851903884,0.37229365840194528,-0.93087374864420436,0.36534102436639482,-0.93358042649720174,0.35836794954530021,-0.9362348706397372,0.3513748240813428,-0.93883693255598621,0.34436203923903491,-0.9413864666609032,0.33732998738282993,-0.94388333030836757,0.33027906195516721,-0.94632738379916426,0.32320965745445984,-0.94871849038879974,0.31612216941302429,-0.95105651629515353,0.30901699437494751,-0.95334133070596272,0.30189452987390186,-0.95557280578614079,0.29475517441090421,-0.95775081668493045,0.28759932743201738,-0.95987524154288906,0.28042738930600258,-0.96194596149870593,0.27323976130191996,-0.96396286069585324,0.26603684556667523,-0.96592582628906831,0.25881904510252057,-0.96783474845066653,0.25158676374450845,-0.96968952037668688,0.24434040613789415,-0.97149003829286751,0.23708037771549734,-0.97323620146045142,0.22980708467501948,-0.97492791218182362,0.2225209339563145,-0.9765650758059764,0.21522233321862186,-0.97814760073380569,0.20791169081775931,-0.97967539842323548,0.20058941578327288,-0.98114838339417265,0.19325591779555309,-0.98256647323328827,0.18591160716291455,-0.98392958859862967,0.17855689479863676,-0.98523765322405921,0.17119219219797482,-0.98649059392352145,0.16381791141513766,-0.98768834059513766,0.15643446504023098,-0.98883082622512852,0.14904226617617428,-0.98991798689156296,0.141641728415589,-0.9909497617679347,0.1342332658176556,-0.99192609312656621,0.12681729288494811,-0.99284692634183735,0.1193942245402443,-0.9937122098932426,0.11196447610330798,-0.9945218953682734,0.10452846326765329,-0.99527593746512644,0.097086602077288101,-0.99597429399523907,0.08963930890343362,-0.99661692588564876,0.082187000421229908,-0.99720379718118013,0.074730093586424226,-0.99773487504645608,0.067269005612039773,-0.99821012976773515,0.059804153945033994,-0.99862953475457383,0.052335956242943807,-0.99899306654131459,0.044864830350515049,-0.99930070478839861,0.037391194276325444,-0.99955243228350332,0.029915466169398428,-0.99974823494250653,0.022438064295805058,-0.99988810181027343,0.014959407015263444,-0.99997202506126981,0.0074799127577328886,1,0,0.99988810181027343,0.014959407015263619,0.99955243228350332,0.029915466169398455,0.9989930665413147,0.044864830350514924,0.99821012976773515,0.059804153945034168,0.99720379718118013,0.074730093586424254,0.99597429399523907,0.089639308903433496,0.99452189536827329,0.10452846326765347,0.99284692634183735,0.11939422454024434,0.99094976176793481,0.13423326581765546,0.98883082622512852,0.14904226617617444,0.98649059392352145,0.16381791141513771,0.98392958859862967,0.17855689479863665,0.98114838339417265,0.19325591779555326,0.97814760073380569,0.20791169081775934,0.97492791218182362,0.22252093395631439,0.9714900382928674,0.2370803777154975,0.96783474845066653,0.2515867637445085,0.96396286069585324,0.26603684556667512,0.95987524154288906,0.28042738930600281,0.95557280578614068,0.29475517441090421,0.95105651629515353,0.3090169943749474,0.94632738379916415,0.32320965745446001,0.9413864666609032,0.33732998738282999,0.9362348706397372,0.35137482408134268,0.93087374864420425,0.36534102436639504,0.9253043004739967,0.37922546265292839,0.91952777255145068,0.39302503165392361,0.91354545764260087,0.40673664307580021,0.90735869456786489,0.42035722830956551,0.90096886790241915,0.43388373911755812,0.89437740766633678,0.44731314831563262,0.88758578900455409,0.46064245045063229,0.880595531856738,0.47386866247299864,0.87340820061712976,0.4869888244043673,0.8660254037844386,0.5,0.8584487936018661,0.51289927740590613,0.85068006568733956,0.52568376981050469,0.84272095865403918,0.53835061609068235,0.83457325372130264,0.55089698145210253,0.82623877431599491,0.56332005806362206,0.81771938566443125,0.57561706568567361,0.80901699437494745,0.58778525229247314,0.80013354801120629,0.59982189468791369,0.79107103465634121,0.61172429911500636,0.7818314824680298,0.62348980185873348,0.77241695922459952,0.63511576984217877,0.76282957186226652,0.64659960121579974,0.75307146600361097,0.65793872593971259,0.74314482547739424,0.66913060635885824,0.73305187182982634,0.68017273777091947,0.72279486382739155,0.69106264898686465,0.71237609695134474,0.70179790288399135,0.70179790288399135,0.71237609695134485,0.69106264898686465,0.72279486382739155,0.68017273777091936,0.73305187182982634,0.66913060635885824,0.74314482547739424,0.65793872593971259,0.75307146600361086,0.64659960121579962,0.76282957186226652,0.63511576984217877,0.77241695922459952,0.62348980185873359,0.7818314824680298,0.61172429911500636,0.79107103465634121,0.59982189468791369,0.80013354801120629,0.58778525229247314,0.80901699437494745,0.5756170656856735,0.81771938566443136,0.56332005806362195,0.82623877431599491,0.55089698145210253,0.83457325372130264,0.53835061609068224,0.84272095865403918,0.52568376981050469,0.85068006568733956,0.51289927740590613,0.8584487936018661,0.49999999999999989,0.86602540378443871,0.48698882440436725,0.87340820061712976,0.47386866247299869,0.880595531856738,0.46064245045063223,0.88758578900455409,0.44731314831563262,0.89437740766633689,0.43388373911755818,0.90096886790241915,0.4203572283095654,0.90735869456786489,0.40673664307580021,0.91354545764260087,0.39302503165392366,0.91952777255145057,0.37922546265292834,0.9253043004739967,0.36534102436639498,0.93087374864420425,0.35137482408134274,0.9362348706397372,0.33732998738282988,0.9413864666609032,0.32320965745446001,0.94632738379916426,0.30901699437494745,0.95105651629515353,0.2947551744109041,0.95557280578614079,0.28042738930600275,0.95987524154288906,0.26603684556667517,0.96396286069585324,0.25158676374450839,0.96783474845066653,0.23708037771549748,0.9714900382928674,0.22252093395631445,0.97492791218182362,0.20791169081775923,0.97814760073380569,0.19325591779555323,0.98114838339417265,0.17855689479863671,0.98392958859862967,0.1638179114151376,0.98649059392352145,0.14904226617617444,0.98883082622512852,0.13423326581765554,0.9909497617679347,0.11939422454024425,0.99284692634183735,0.10452846326765346,0.99452189536827329,0.089639308903433551,0.99597429399523907,0.074730093586424171,0.99720379718118013,0.059804153945034154,0.99821012976773515,0.044864830350514986,0.99899306654131459,0.029915466169398369,0.99955243228350332,0.014959407015263606,0.99988810181027343,6.123233995736766e-17,1,-0.014959407015263704,0.99988810181027343,-0.029915466169398466,0.99955243228350332,-0.044864830350514862,0.9989930665413147,-0.059804153945034251,0.99821012976773515,-0.074730093586424268,0.99720379718118013,-0.08963930890343344,0.99597429399523907,-0.10452846326765355,0.99452189536827329,-0.11939422454024434,0.99284692634183735,-0.13423326581765541,0.99094976176793481,-0.14904226617617453,0.98883082622512852,-0.16381791141513771,0.98649059392352145,-0.1785568947986366,0.98392958859862967,-0.19325591779555334,0.98114838339417265,-0.20791169081775934,0.97814760073380569,-0.22252093395631434,0.97492791218182362,-0.23708037771549759,0.9714900382928674,-0.2515867637445085,0.96783474845066653,-0.26603684556667506,0.96396286069585335,-0.28042738930600281,0.95987524154288906,-0.29475517441090421,0.95557280578614068,-0.30901699437494734,0.95105651629515364,-0.32320965745446006,0.94632738379916415,-0.33732998738282999,0.9413864666609032,-0.35137482408134263,0.9362348706397372,-0.3653410243663951,0.93087374864420425,-0.37922546265292839,0.9253043004739967,-0.39302503165392355,0.91952777255145068,-0.40673664307580026,0.91354545764260087,-0.42035722830956568,0.90735869456786478,-0.43388373911755806,0.90096886790241915,-0.44731314831563268,0.89437740766633678,-0.46064245045063251,0.88758578900455398,-0.47386866247299858,0.880595531856738,-0.4869888244043673,0.87340820061712965,1,0,0.99955243228350332,0.029915466169398455,0.99821012976773515,0.059804153945034168,0.99597429399523907,0.089639308903433496,0.99284692634183735,0.11939422454024434,0.98883082622512852,0.14904226617617444,0.98392958859862967,0.17855689479863665,0.97814760073380569,0.20791169081775934,0.9714900382928674,0.2370803777154975,0.96396286069585324,0.26603684556667512,0.95557280578614068,0.29475517441090421,0.94632738379916415,0.32320965745446001,0.9362348706397372,0.35137482408134268,0.9253043004739967,0.37922546265292839,0.91354545764260087,0.40673664307580021,0.90096886790241915,0.43388373911755812,0.88758578900455409,0.46064245045063229,0.87340820061712976,0.4869888244043673,0.8584487936018661,0.51289927740590613,0.84272095865403918,0.53835061609068235,0.82623877431599491,0.56332005806362206,0.80901699437494745,0.58778525229247314,0.79107103465634121,0.61172429911500636,0.77241695922459952,0.63511576984217877,0.75307146600361097,0.65793872593971259,0.73305187182982634,0.68017273777091947,0.71237609695134474,0.70179790288399135,0.69106264898686465,0.72279486382739155,0.66913060635885824,0.74314482547739424,0.64659960121579962,0.76282957186226652,0.62348980185873359,0.7818314824680298,0.59982189468791369,0.80013354801120629,0.5756170656856735,0.81771938566443136,0.55089698145210253,0.83457325372130264,0.52568376981050469,0.85068006568733956,0.49999999999999989,0.86602540378443871,0.47386866247299869,0.880595531856738,0.44731314831563262,0.89437740766633689,0.4203572283095654,0.90735869456786489,0.39302503165392366,0.91952777255145057,0.36534102436639498,0.93087374864420425,0.33732998738282988,0.9413864666609032,0.30901699437494745,0.95105651629515353,0.28042738930600275,0.95987524154288906,0.25158676374450839,0.96783474845066653,0.22252093395631445,0.97492791218182362,0.19325591779555323,0.98114838339417265,0.1638179114151376,0.98649059392352145,0.13423326581765554,0.9909497617679347,0.10452846326765346,0.99452189536827329,0.074730093586424171,0.99720379718118013,0.044864830350514986,0.99899306654131459,0.014959407015263606,0.99988810181027343,-0.014959407015263704,0.99988810181027343,-0.044864830350514862,0.9989930665413147,-0.074730093586424268,0.99720379718118013,-0.10452846326765355,0.99452189536827329,-0.13423326581765541,0.99094976176793481,-0.16381791141513771,0.98649059392352145,-0.19325591779555334,0.98114838339417265,-0.22252093395631434,0.97492791218182362,-0.2515867637445085,0.96783474845066653,-0.28042738930600281,0.95987524154288906,-0.30901699437494734,0.95105651629515364,-0.33732998738282999,0.9413864666609032,-0.3653410243663951,0.93087374864420425,-0.39302503165392355,0.91952777255145068,-0.42035722830956568,0.90735869456786478,-0.44731314831563268,0.89437740766633678,-0.47386866247299858,0.880595531856738,-0.50000000000000022,0.8660254037844386,-0.5256837698105048,0.85068006568733956,-0.55089698145210242,0.83457325372130275,-0.57561706568567372,0.81771938566443125,-0.5998218946879138,0.80013354801120629,-0.62348980185873348,0.78183148246802991,-0.64659960121579985,0.76282957186226641,-0.66913060635885824,0.74314482547739424,-0.69106264898686465,0.72279486382739155,-0.71237609695134496,0.70179790288399124,-0.73305187182982634,0.68017273777091936,-0.75307146600361086,0.6579387259397127,-0.77241695922459963,0.63511576984217855,-0.79107103465634121,0.61172429911500636,-0.80901699437494734,0.58778525229247325,-0.82623877431599502,0.56332005806362184,-0.84272095865403918,0.53835061609068235,-0.8584487936018661,0.51289927740590624,-0.87340820061712987,0.48698882440436708,-0.88758578900455409,0.46064245045063223,-0.90096886790241903,0.43388373911755823,-0.91354545764260098,0.40673664307580004,-0.9253043004739967,0.37922546265292839,-0.9362348706397372,0.3513748240813428,-0.94632738379916426,0.32320965745445984,-0.95557280578614079,0.29475517441090421,-0.96396286069585324,0.26603684556667523,-0.97149003829286751,0.23708037771549734,-0.97814760073380569,0.20791169081775931,-0.98392958859862967,0.17855689479863676,-0.98883082622512852,0.14904226617617428,-0.99284692634183735,0.1193942245402443,-0.99597429399523907,0.08963930890343362,-0.99821012976773515,0.059804153945033994,-0.99955243228350332,0.029915466169398428,-1,1.2246467991473532e-16,-0.99955243228350332,-0.029915466169398629,-0.99821012976773515,-0.059804153945034196,-0.99597429399523907,-0.089639308903433371,-0.99284692634183724,-0.11939422454024451,-0.98883082622512852,-0.14904226617617447,-0.98392958859862967,-0.17855689479863651,-0.97814760073380558,-0.20791169081775951,-0.9714900382928674,-0.23708037771549753,-0.96396286069585335,-0.26603684556667495,-0.95557280578614068,-0.29475517441090437,-0.94632738379916415,-0.32320965745446001,-0.9362348706397372,-0.35137482408134257,-0.9253043004739967,-0.37922546265292856,-0.91354545764260087,-0.40673664307580021,-0.90096886790241915,-0.43388373911755801,-0.88758578900455398,-0.46064245045063246,-0.87340820061712976,-0.48698882440436725,-0.85844879360186621,-0.51289927740590602,-0.84272095865403907,-0.53835061609068247,-0.82623877431599491,-0.56332005806362206,-0.80901699437494745,-0.58778525229247303,-0.7910710346563411,-0.61172429911500648,-0.77241695922459952,-0.63511576984217877,-0.75307146600361108,-0.65793872593971248,-0.73305187182982623,-0.68017273777091947,-0.71237609695134485,-0.70179790288399135,-0.69106264898686476,-0.72279486382739144,-0.66913060635885813,-0.74314482547739436,-0.64659960121579929,-0.76282957186226685,-0.62348980185873359,-0.78183148246802969,-0.59982189468791358,-0.8001335480112064,-0.57561706568567317,-0.81771938566443159,-0.55089698145210264,-0.83457325372130253,-0.52568376981050458,-0.85068006568733967,1,0,0.9989930665413147,0.044864830350514924,0.99597429399523907,0.089639308903433496,0.99094976176793481,0.13423326581765546,0.98392958859862967,0.17855689479863665,0.97492791218182362,0.22252093395631439,0.96396286069585324,0.26603684556667512,0.95105651629515353,0.3090169943749474,0.9362348706397372,0.35137482408134268,0.91952777255145068,0.39302503165392361,0.90096886790241915,0.43388373911755812,0.880595531856738,0.47386866247299864,0.8584487936018661,0.51289927740590613,0.83457325372130264,0.55089698145210253,0.80901699437494745,0.58778525229247314,0.7818314824680298,0.62348980185873348,0.75307146600361097,0.65793872593971259,0.72279486382739155,0.69106264898686465,0.69106264898686465,0.72279486382739155,0.65793872593971259,0.75307146600361086,0.62348980185873359,0.7818314824680298,0.58778525229247314,0.80901699437494745,0.55089698145210253,0.83457325372130264,0.51289927740590613,0.8584487936018661,0.47386866247299869,0.880595531856738,0.43388373911755818,0.90096886790241915,0.39302503165392366,0.91952777255145057,0.35137482408134274,0.9362348706397372,0.30901699437494745,0.95105651629515353,0.26603684556667517,0.96396286069585324,0.22252093395631445,0.97492791218182362,0.17855689479863671,0.98392958859862967,0.13423326581765554,0.9909497617679347,0.089639308903433551,0.99597429399523907,0.044864830350514986,0.99899306654131459,1,0,0.99597429399523907,0.089639308903433496,0.98392958859862967,0.17855689479863665,0.96396286069585324,0.26603684556667512,0.9362348706397372,0.35137482408134268,0.90096886790241915,0.43388373911755812,0.8584487936018661,0.51289927740590613,0.80901699437494745,0.58778525229247314,0.75307146600361097,0.65793872593971259,0.69106264898686465,0.72279486382739155,0.62348980185873359,0.7818314824680298,0.55089698145210253,0.83457325372130264,0.47386866247299869,0.880595531856738,0.39302503165392366,0.91952777255145057,0.30901699437494745,0.95105651629515353,0.22252093395631445,0.97492791218182362,0.13423326581765554,0.9909497617679347,0.044864830350514986,0.99899306654131459,-0.044864830350514862,0.9989930665413147,-0.13423326581765541,0.99094976176793481,-0.22252093395631434,0.97492791218182362,-0.30901699437494734,0.95105651629515364,-0.39302503165392355,0.91952777255145068,-0.47386866247299858,0.880595531856738,-0.55089698145210242,0.83457325372130275,-0.62348980185873348,0.78183148246802991,-0.69106264898686465,0.72279486382739155,-0.75307146600361086,0.6579387259397127,-0.80901699437494734,0.58778525229247325,-0.8584487936018661,0.51289927740590624,-0.90096886790241903,0.43388373911755823,-0.9362348706397372,0.3513748240813428,-0.96396286069585324,0.26603684556667523,-0.98392958859862967,0.17855689479863676,-0.99597429399523907,0.08963930890343362,1,0,0.99094976176793481,0.13423326581765546,0.96396286069585324,0.26603684556667512,0.91952777255145068,0.39302503165392361,0.8584487936018661,0.51289927740590613,0.7818314824680298,0.62348980185873348,0.69106264898686465,0.72279486382739155,0.58778525229247314,0.80901699437494745,0.47386866247299869,0.880595531856738,0.35137482408134274,0.9362348706397372,0.22252093395631445,0.97492791218182362,0.089639308903433551,0.99597429399523907,-0.044864830350514862,0.9989930665413147,-0.1785568947986366,0.98392958859862967,-0.30901699437494734,0.95105651629515364,-0.43388373911755806,0.90096886790241915,-0.55089698145210242,0.83457325372130275,-0.65793872593971259,0.75307146600361097,-0.75307146600361086,0.6579387259397127,-0.83457325372130264,0.55089698145210264,-0.90096886790241903,0.43388373911755823,-0.95105651629515353,0.30901699437494751,-0.98392958859862967,0.17855689479863676,-0.99899306654131459,0.044864830350515049,-0.99597429399523907,-0.089639308903433371,-0.97492791218182362,-0.22252093395631428,-0.9362348706397372,-0.35137482408134257,-0.88059553185673811,-0.47386866247299853,-0.80901699437494745,-0.58778525229247303,-0.72279486382739166,-0.69106264898686454,-0.62348980185873359,-0.78183148246802969,-0.51289927740590624,-0.8584487936018661,-0.39302503165392377,-0.91952777255145057,-0.26603684556667528,-0.96396286069585324,-0.13423326581765566,-0.9909497617679347,1,0,0.98392958859862967,0.17855689479863665,0.9362348706397372,0.35137482408134268,0.8584487936018661,0.51289927740590613,0.75307146600361097,0.65793872593971259,0.62348980185873359,0.7818314824680298,0.47386866247299869,0.880595531856738,1,0,0.9362348706397372,0.35137482408134268,0.75307146600361097,0.65793872593971259,0.47386866247299869,0.880595531856738,0.13423326581765554,0.9909497617679347,-0.22252093395631434,0.97492791218182362,-0.55089698145210242,0.83457325372130275,1,0,0.8584487936018661,0.51289927740590613,0.47386866247299869,0.880595531856738,-0.044864830350514862,0.9989930665413147,-0.55089698145210242,0.83457325372130275,-0.90096886790241903,0.43388373911755823,-0.99597429399523907,-0.089639308903433371,1,0,0.75307146600361097,0.65793872593971259,0.13423326581765554,0.9909497617679347,-0.55089698145210242,0.83457325372130275,-0.96396286069585324,0.26603684556667523,-0.90096886790241915,-0.43388373911755801,-0.39302503165392377,-0.91952777255145057,0.62348980185873359,0.7818314824680298,-0.22252093395631434,0.97492791218182362,-0.90096886790241903,0.43388373911755823,-0.90096886790241915,-0.43388373911755801,-0.22252093395631459,-0.97492791218182362,0.62348980185873337,-0.78183148246802991,0.62348980185873337,-0.78183148246802991,0.99991396949206668,0.013116920927498298,0.9996558927707635,0.026231584944256769,0.99922581424103318,0.039341735527861937,0.99862380790262451,0.052445116932486234,0.99784997733735958,0.065539474577013895,0.99690445569131159,0.078622555432966465,0.99578740565189539,0.091692108412161216,0.99449901941987573,0.10474588475403562,0.99303951867629636,0.11778163841257142,0.99140915454433787,0.13079712644275152,0.98960820754610923,0.14379010938648346,0.98763698755438023,0.15675835165792279,0.9854958337392653,0.16969962192813032,0.9831851145098649,0.1826116935089967,0.98070522745087718,0.19549234473636881,0.97805659925418853,0.20833935935231149,0.97523968564545738,0.22115052688643899,0.9722549713057006,0.23392364303625099,0.96910296978789967,0.24665651004640698,0.96578422342863779,0.25934693708687429,0.96229930325478485,0.2719927406298846,0.95864880888524628,0.28459174482563371,0.95483336842779165,0.29714178187666096,0.95085363837098202,0.30964069241084213,0.94671030347121388,0.32208632585293345,0.94240407663489922,0.33447654079460182,0.93793569879580208,0.34680920536287746,0.93330593878755252,0.35908219758696658,0.9285155932113609,0.37129340576335929,0.92356548629895352,0.38344072881917174,0.91845646977075412,0.39552207667365902,0.91318942268933689,0.40753537059783618,0.90776525130817309,0.41947854357214676,0.90218488891570081,0.43134954064211606,0.89644929567474241,0.44314631927192888,0.89055945845729723,0.45486684969587032,0.88451639067474042,0.46650911526756905,0.87832113210345342,0.47807111280698383,0.87197474870591973,0.48955085294507261,0.86547833244731376,0.50094636046608532,0.85883300110761629,0.51225567464742161,0.85203989808928871,0.5234768495969947,0.84510019222053689,0.53460795458804344,0.83801507755420279,0.54564707439133542,0.83078577316231317,0.55659230960470307,0.82341352292632575,0.56744177697985665,0.8158995953231053,0.57819360974641787,0.80824528320666855,0.58884595793311867,0.80045190358573393,0.59939698868610858,0.79252079739711589,0.60984488658431779,0.78445332927500255,0.62018785395182041,0.7762508873161541,0.63042411116714381,0.7679148828410669,0.64055189696947312,0.75944675015113894,0.65056946876169464,0.75084794628188356,0.66047510291022915,0.74211995075222936,0.67026709504160253,0.73326426530995403,0.67994376033570103,0.72428241367329094,0.68950343381566415,0.71517594126875683,0.69894447063436138,0.7059464149652448,0.70826524635740695,0.69659542280442643,0.71746415724266133,0.68712457372751234,0.72653962051617282,0.67753549729841589,0.73549007464451088,0.6678298434233686,0.74431397960344592,0.65800928206703591,0.7530098171429267,0.64807550296518113,0.76157609104831248,0.63803021533392801,0.77001132739781264,0.62787514757567098,0.77831407481609216,0.6176120469816847,0.7864829047239954,0.60724267943148336,0.79451641158435027,0.59676882908898143,0.80241321314380543,0.5861922980955091,0.81017195067066217,0.57551490625973323,0.81779128918865995,0.56473849074453997,0.82526991770667324,0.55386490575093028,0.8326065494442817,0.54289602219898436,0.83979992205317566,0.5318337274059487,0.84684879783435663,0.52067992476150382,0.85375196395109676,0.50943653340026285,0.86050823263762144,0.49810548787156578,0.86711644140347688,0.48668873780661681,0.8735754532335499,0.47518824758302985,0.87988415678370357,0.46360599598683611,0.88604146657199612,0.45194397587201085,0.89204632316545052,0.44020419381758247,0.89789769336234082,0.42838866978237694,0.90359457036996715,0.41649943675746315,0.90913597397788415,0.40453854041635301,0.91452095072655759,0.39250803876302148,0.91974857407141786,0.38041000177780476,0.9248179445422815,0.36824651106123618,0.92972818989811579,0.35601965947588532,0.93447846527711631,0.34373155078625639,0.93906795334207593,0.33138429929681396,0.94349586442101563,0.3189800294881921,0.94776143664305734,0.30652087565165559,0.95186393606951103,0.29400898152187016,0.95580265682015797,0.28144649990804999,0.9595769211947045,0.26883559232354376,0.96318607978938808,0.25617842861392098,0.96662951160871458,0.2434771865836281,0.96990662417230722,0.23073405162127106,0.97301685361684909,0.21795121632359729,0.97595966479310226,0.2051308801182333,0.97873455135798648,0.1922752488852508,0.98134103586170029,0.17938653457761911,0.98377866982987217,0.16646695484061499,0.98604703384072534,0.15351873263025301,0.98814573759724378,0.14054409583079991,0.99007441999432699,0.12754527687144432,0.99183274918092246,0.11452451234218106,0.99342042261712415,0.10148404260898279,0.99483716712622783,0.088426111428318965,0.99608273894173394,0.075352965561093443,0.99715692374929066,0.062266854386065155,0.99805953672356873,0.049170029512816155,0.99879042256006278,0.036064744394339217,0.99934945550181342,0.022953253939304599,0.99973653936104478,0.0098378141240799619,0.99995160753571477,-0.0032793183954367691,0.99999462302097475,-0.016395886672099253,0.99986557841553669,-0.02950963385584468,0.99956449592294638,-0.042618303582011248,0.99909142734776357,-0.055719640359568758,0.99844645408664767,-0.06881138995920251,0.9976296871143534,-0.081891299801176473,0.99664126696463551,-0.09495711934291623,0.99548136370606921,-0.10800660046623786,0.9941501769127874,-0.12103749786416299,0.99264793563014209,-0.13404756942724788,0.9909748983352944,-0.14703457662936245,0.98913135289274101,-0.15999628491285489,0.98711761650478336,-0.17293046407303014,0.98493403565695015,-0.18583488864188294,0.98258098605838029,-0.19870733827101233,0.98005887257717816,-0.21154559811365892,0.97736812917075122,-0.22434745920579174,0.97450921881114372,-0.23711071884618654,0.97148263340537622,-0.24983318097542404,0.96828889371080828,-0.2625126565537455,0.96492854924553628,-0.27514696393770277,0.96140217819384233,-0.28773392925553204,0.9577103873067121,-0.30027138678119458,0.95385381179743589,-0.31275717930701169,0.94983311523231373,-0.32518915851483771,0.94564898941648101,-0.33756518534570101,0.94130215427487607,-0.3498831303678524,0.93679335772836925,-0.36214087414315838,0.93212337556507463,-0.37433630759177222,0.92729301130686737,-0.38646733235502628,0.9223030960711287,-0.39853186115647599,0.91715448842774316,-0.41052781816103984,0.91184807425137238,-0.42245313933216949,0.90638476656902978,-0.43430577278699001,0.90076550540298528,-0.44608367914934771,0.89499125760902365,-0.45778483190070945,0.88906301671008625,-0.46940721772884614,0.88298180272532434,-0.48094883687424567,0.87674866199459367,-0.49240770347419238,0.87036466699842074,-0.50378184590445885,0.86383091617346974,-0.51506930711854382,0.85714853372354505,-0.52626814498440433,0.8503186694261593,-0.537376432618621,0.84334249843470155,-0.54839225871793829,0.83622122107624008,-0.55931372788812705,0.82895606264499089,-0.57013896097010741,0.82154827319149437,-0.58086609536327849,0.81399912730752888,-0.59149328534599854,0.80630992390680467,-0.6020187023931638,0.79848198600146969,-0.61244053549082456,0.79051666047447222,-0.62275699144779095,0.78241531784781415,-0.63296629520417125,0.77417935204673727,-0.64306669013678908,0.76581018015988467,-0.6530564383614319,0.7573092421954728,-0.66293382103187226,0.74867800083352365,-0.67269713863561353,0.73991794117419418,-0.68234471128631091,0.73103057048224807,-0.69187487901281286,0.72201741792771557,-0.70128600204477942,0.71288003432278113,-0.71057646109482109,0.70361999185495017,-0.71974465763711637,0.69423888381653631,-0.72878901418245368,0.68473832433051918,-0.73770797454965842,0.67511994807281506,-0.74650000413334927,0.66538540999101381,-0.75516359016798462,0.65553638501962663,-0.76369724198815048,0.64557456779189515,-0.77209949128504518,0.6355016723482122,-0.78036889235911922,0.6253194318412002,-0.78850402236882333,0.61502959823750436,-0.79650348157542417,0.60463394201634757,-0.80436589358384358,0.59413425186490032,-0.81208990557948457,0.5835323343705161,-0.81967418856099661,0.57283001370988917,-0.82711743756894518,0.56202913133518451,-0.83441837191034507,0.55113154565719524,-0.84157573537901609,0.54013913172558448,-0.84858829647172906,0.52905378090625987,-0.85545484860009879,0.51787740055594433,-0.86217421029819064,0.50661191369399461,-0.86874522542580435,0.49525925867152487,-0.87516676336740218,0.48382138883789083,-0.88143771922664227,0.47230027220459536,-0.88755701401648923,0.46069789110667037,-0.89352359484486521,0.44901624186159356,-0.89933643509581129,0.43725733442580189,-0.904994534606129,0.42542319204885382,-0.91049691983746872,0.41351585092530863,-0.91584264404383797,0.40153735984437594,-0.92103078743449907,0.38948977983740041,-0.92606045733222975,0.37737518382323648,-0.930930788326918,0.36519565625158107,-0.93564094242446538,0.35295329274432097,-0.9401901091909729,0.34065019973495742,-0.94457750589218525,0.32828849410617278,-0.94880237762816921,0.31587030282559492,-0.95286399746320183,0.30339776257983081,-0.95676166655084816,0.29087301940682558,-0.96049471425420585,0.27829822832661266,-0.96406249826129442,0.26567555297052037,-0.96746440469557327,0.2530071652088931,-0.97069984822156541,0.24029524477739847,-0.97376827214557127,0.22754197890197911,-0.97666914851145303,0.21474956192251804,-0.97940197819147634,0.20192019491527566,-0.98196629097219035,0.1890560853141722,-0.98436164563533302,0.17615944653097385,-0.98658763003374772,0.16323249757445044,-0.9886438611622973,0.15027746266857236,-0.99052998522376512,0.13729657086980571,-0.99224567768972916,0.12429205568358019,-0.99379064335640066,0.11126615467998918,-0.99516461639541753,0.098221109108792809,-0.99636736039958307,0.085159163513783637,-0.99739866842354197,0.072082565346589952,-0.99825836301938797,0.058993564579976454,-0.99894629626719555,0.045894413320711293,-0.99946234980047133,0.032787365422068018,-0.9998064348265201,0.019674676096022633,-0.99997849214172274,0.0065586015252213246,-0.99997849214172274,-0.0065586015252210791,-0.9998064348265201,-0.019674676096022834,-0.99946234980047133,-0.03278736542206822,-0.99894629626719555,-0.045894413320711494,-0.99825836301938797,-0.058993564579976204,-0.99739866842354197,-0.072082565346590147,-0.99636736039958307,-0.085159163513783845,-0.99516461639541753,-0.098221109108793017,-0.99379064335640066,-0.11126615467998938,-0.99224567768972916,-0.12429205568357996,-0.99052998522376512,-0.1372965708698059,-0.9886438611622973,-0.15027746266857256,-0.98658763003374772,-0.16323249757445063,-0.98436164563533313,-0.1761594465309736,-0.98196629097219035,-0.1890560853141724,-0.97940197819147634,-0.20192019491527585,-0.97666914851145292,-0.21474956192251823,-0.97376827214557116,-0.2275419789019793,-0.97069984822156552,-0.24029524477739825,-0.96746440469557315,-0.25300716520889327,-0.96406249826129431,-0.26567555297052059,-0.96049471425420585,-0.27829822832661283,-0.95676166655084827,-0.29087301940682536,-0.95286399746320172,-0.30339776257983103,-0.9488023776281691,-0.31587030282559508,-0.94457750589218525,-0.32828849410617295,-0.9401901091909729,-0.34065019973495764,-0.93564094242446538,-0.35295329274432075,-0.93093078832691789,-0.36519565625158124,-0.92606045733222964,-0.37737518382323665,-0.92103078743449895,-0.38948977983740063,-0.91584264404383797,-0.40153735984437611,-0.91049691983746861,-0.41351585092530885,-0.90499453460612889,-0.42542319204885398,-0.89933643509581118,-0.43725733442580206,-0.8935235948448651,-0.44901624186159378,-0.88755701401648934,-0.46069789110667014,-0.88143771922664216,-0.47230027220459553,-0.87516676336740207,-0.483821388837891,-0.86874522542580424,-0.49525925867152504,-0.86217421029819052,-0.50661191369399472,-0.8554548486000989,-0.51787740055594411,-0.84858829647172906,-0.52905378090625998,-0.84157573537901598,-0.5401391317255847,-0.83441837191034496,-0.55113154565719535,-0.8271174375689454,-0.56202913133518428,-0.8196741885609965,-0.57283001370988929,-0.81208990557948446,-0.58353233437051633,-0.80436589358384347,-0.59413425186490043,-0.79650348157542405,-0.60463394201634768,-0.78850402236882355,-0.61502959823750425,-0.7803688923591191,-0.62531943184120031,-0.77209949128504507,-0.63550167234821242,-0.76369724198815037,-0.64557456779189537,-0.75516359016798473,-0.65553638501962641,-0.74650000413334916,-0.66538540999101392,-0.73770797454965831,-0.67511994807281517,-0.72878901418245357,-0.6847383243305194,-0.71974465763711626,-0.69423888381653642,-0.71057646109482131,-0.70361999185494994,-0.70128600204477931,-0.71288003432278124,-0.69187487901281275,-0.72201741792771579,-0.68234471128631069,-0.73103057048224818,-0.67269713863561365,-0.73991794117419396,-0.66293382103187237,-0.74867800083352343,-0.65305643836143212,-0.75730924219547258,-0.64306669013678919,-0.76581018015988445,-0.63296629520417069,-0.77417935204673771,-0.62275699144779084,-0.78241531784781426,-0.61244053549082444,-0.79051666047447233,-0.60201870239316357,-0.7984819860014698,-0.59149328534599843,-0.80630992390680478,-0.58086609536327838,-0.81399912730752899,-0.57013896097010763,-0.82154827319149426,-0.55931372788812728,-0.82895606264499078,-0.5483922587179384,-0.83622122107623986,-0.53737643261862045,-0.84334249843470188,-0.52626814498440422,-0.85031866942615941,-0.51506930711854371,-0.85714853372354516,-0.50378184590445863,-0.86383091617346985,-0.49240770347419222,-0.87036466699842086,-0.4809488368742455,-0.87674866199459378,-0.46940721772884636,-0.88298180272532423,-0.45778483190070968,-0.88906301671008614,-0.44608367914934793,-0.89499125760902354,-0.43430577278698945,-0.9007655054029855,-0.42245313933216933,-0.90638476656902989,-0.41052781816103967,-0.91184807425137238,-0.39853186115647576,-0.91715448842774328,-0.38646733235502612,-0.92230309607112881,-0.37433630759177222,-0.92729301130686737,-0.36214087414315838,-0.93212337556507463,-0.34988313036785262,-0.93679335772836914,-0.33756518534570129,-0.94130215427487596,-0.32518915851483732,-0.94564898941648112,-0.3127571793070113,-0.94983311523231384,-0.30027138678119419,-0.953853811797436,-0.28773392925553187,-0.9577103873067121,-0.27514696393770255,-0.96140217819384233,-0.26251265655374556,-0.96492854924553628,-0.24983318097542406,-0.96828889371080828,-0.23711071884618679,-0.97148263340537622,-0.22434745920579197,-0.97450921881114372,-0.21154559811365828,-0.97736812917075144,-0.19870733827101192,-0.98005887257717816,-0.18583488864188252,-0.9825809860583804,-0.17293046407302995,-0.98493403565695026,-0.1599962849128547,-0.98711761650478336,-0.14703457662936248,-0.98913135289274101,-0.13404756942724791,-0.9909748983352944,-0.12103749786416322,-0.99264793563014209,-0.1080066004662381,-0.9941501769127874,-0.094957119342916466,-0.9954813637060691,-0.081891299801176043,-0.99664126696463551,-0.068811389959202093,-0.9976296871143534,-0.055719640359568563,-0.99844645408664767,-0.042618303582011047,-0.99909142734776357,-0.029509633855844705,-0.99956449592294638,-0.016395886672099277,-0.99986557841553669,-0.0032793183954370141,-0.99999462302097475,0.0098378141240797173,-0.99995160753571477,0.022953253939304353,-0.99973653936104478,0.03606474439433964,-0.99934945550181342,0.049170029512816578,-0.99879042256006278,0.06226685438606535,-0.99805953672356873,0.075352965561093652,-0.99715692374929066,0.088426111428318951,-0.99608273894173394,0.10148404260898276,-0.99483716712622783,0.11452451234218103,-0.99342042261712415,0.1275452768714441,-0.99183274918092246,0.14054409583079966,-0.99007441999432699,0.15351873263025342,-0.98814573759724367,0.16646695484061541,-0.98604703384072534,0.1793865345776193,-0.98377866982987217,0.19227524888525099,-0.98134103586170018,0.20513088011823349,-0.97873455135798637,0.21795121632359726,-0.97595966479310226,0.23073405162127103,-0.97301685361684909,0.24347718658362785,-0.96990662417230722,0.25617842861392076,-0.96662951160871469,0.26883559232354415,-0.96318607978938797,0.28144649990805037,-0.95957692119470428,0.29400898152187033,-0.95580265682015786,0.30652087565165581,-0.95186393606951103,0.31898002948819232,-0.94776143664305734,0.33138429929681396,-0.94349586442101574,0.34373155078625633,-0.93906795334207593,0.3560196594758851,-0.93447846527711642,0.36824651106123596,-0.9297281898981159,0.38041000177780515,-0.92481794454228139,0.39250803876302187,-0.91974857407141775,0.40453854041635318,-0.91452095072655748,0.41649943675746331,-0.90913597397788404,0.42838866978237711,-0.90359457036996715,0.44020419381758247,-0.89789769336234082,0.45194397587201079,-0.89204632316545052,0.46360599598683588,-0.88604146657199623,0.47518824758302963,-0.87988415678370369,0.4866887378066172,-0.87357545323354968,0.49810548787156617,-0.86711644140347666,0.50943653340026329,-0.86050823263762122,0.52067992476150393,-0.85375196395109665,0.53183372740594892,-0.84684879783435651,0.54289602219898425,-0.83979992205317566,0.55386490575093028,-0.8326065494442817,0.56473849074453986,-0.82526991770667324,0.57551490625973301,-0.81779128918866018,0.58619229809550955,-0.81017195067066183,0.59676882908898177,-0.80241321314380509,0.60724267943148358,-0.79451641158435016,0.61761204698168493,-0.78648290472399529,0.62787514757567109,-0.77831407481609194,0.63803021533392812,-0.77001132739781264,0.64807550296518113,-0.76157609104831248,0.65800928206703579,-0.75300981714292681,0.66782984342336849,-0.74431397960344614,0.67753549729841633,-0.73549007464451055,0.68712457372751268,-0.72653962051617249,0.69659542280442666,-0.71746415724266122,0.70594641496524502,-0.70826524635740684,0.71517594126875694,-0.69894447063436127,0.72428241367329094,-0.68950343381566404,0.73326426530995403,-0.67994376033570103,0.74211995075222925,-0.67026709504160265,0.75084794628188334,-0.66047510291022937,0.75944675015113872,-0.65056946876169486,0.76791488284106724,-0.64055189696947279,0.77625088731615444,-0.63042411116714359,0.78445332927500266,-0.62018785395182019,0.79252079739711612,-0.60984488658431768,0.80045190358573393,-0.59939698868610858,0.80824528320666855,-0.58884595793311867,0.81589959532310519,-0.57819360974641798,0.82341352292632553,-0.56744177697985687,0.83078577316231295,-0.55659230960470341,0.83801507755420301,-0.54564707439133509,0.84510019222053712,-0.53460795458804311,0.85203989808928882,-0.52347684959699436,0.8588330011076164,-0.5122556746474215,0.86547833244731376,-0.50094636046608521,0.87197474870591973,-0.48955085294507261,0.87832113210345342,-0.47807111280698394,0.8845163906747403,-0.46650911526756922,0.89055945845729712,-0.4548668496958706,0.89644929567474263,-0.44314631927192849,0.90218488891570103,-0.43134954064211567,0.9077652513081732,-0.41947854357214648,0.91318942268933689,-0.40753537059783601,0.91845646977075412,-0.39552207667365896,0.92356548629895341,-0.38344072881917174,0.9285155932113609,-0.37129340576335934,0.93330593878755241,-0.35908219758696674,0.93793569879580196,-0.34680920536287774,0.94240407663489945,-0.33447654079460132,0.9467103034712141,-0.32208632585293306,0.95085363837098213,-0.3096406924108418,0.95483336842779165,-0.29714178187666079,0.95864880888524628,-0.28459174482563365,0.96229930325478485,-0.27199274062988454,0.96578422342863768,-0.2593469370868744,0.96910296978789956,-0.24665651004640715,0.97225497130570049,-0.23392364303625127,0.97523968564545749,-0.22115052688643849,0.97805659925418864,-0.20833935935231107,0.98070522745087718,-0.19549234473636851,0.98318511450986501,-0.18261169350899648,0.9854958337392653,-0.16969962192813018,0.98763698755438023,-0.15675835165792276,0.98960820754610923,-0.14379010938648351,0.99140915454433787,-0.13079712644275168,0.99303951867629625,-0.11778163841257168,0.99449901941987573,-0.1047458847540351,0.99578740565189539,-0.091692108412160786,0.99690445569131159,-0.078622555432966132,0.99784997733735958,-0.065539474577013646,0.99862380790262451,-0.052445116932486095,0.99922581424103318,-0.039341735527861896,0.9996558927707635,-0.026231584944256817,0.99991396949206668,-0.013116920927498445,0.99991396949206668,-0.013116920927498445,0.99985344960120259,0.017119559590581007,0.99941384135884914,0.034234101424591538,0.99868130412246603,0.051338609216169589,0.99765605259930157,0.068428069620438958,0.9963383872913949,0.085497473702924709,0.99472869440749889,0.10254181840767579,0.99282744574988147,0.11955610802366474,0.99063519857604077,0.13653535564903463,0.98815259543537182,0.1534745846527639,0.98538036398083539,0.17036883013332091,0.98231931675568185,0.18721314037388051,0.9789703509552945,0.20400257829367635,0.97533444816422032,0.22073222289506286,0.97141267406846765,0.23739717070586397,0.96720617814315168,0.25399253721658438,0.96271619331558322,0.27051345831206353,0.95794403560389663,0.28695509169715128,0.95289110373132324,0.30331261831598866,0.94755887871622513,0.31958124376447705,0.94194892343800729,0.33575619969552173,0.9360628821790361,0.35183274521663827,0.92990248014269938,0.36780616827951174,0.92346952294774742,0.38367178706110228,0.91676589609906489,0.39942495133589057,0.90979356443502801,0.41506104383886294,0.90255457155160856,0.43057548161883569,0.89505103920339446,0.44596371738172108,0.88728516668170176,0.46122124082334359,0.87925923016996066,0.47634357995141308,0.870975582076564,0.49132630239626957,0.86243665034537509,0.50616501671001446,0.85364493774409489,0.52085537365364709,0.84460302113069918,0.53539306747183024,0.83531355069815894,0.54977383715491057,0.82577924919766743,0.56399346768782399,0.81600291114059875,0.57804779128551997,0.80598740197943508,0.59193268861454218,0.79573565726789974,0.60564409000040909,0.78525068180054469,0.61917797662043805,0.77453554873204189,0.63253038168166653,0.76359339867644016,0.64569739158352124,0.75242743878664831,0.65867514706489783,0.74104094181441571,0.6714598443353138,0.72943724515108699,0.68404773618980208,0.71761974984940902,0.69643513310722027,0.70559191962668033,0.70861840433165169,0.69335727984953266,0.72059397893658317,0.68091941650064292,0.73235834687154622,0.66828197512767906,0.74390805999091592,0.65544865977478695,0.75523973306456504,0.6424232318969324,0.76635004477007773,0.62920950925741537,0.77723573866623141,0.61581136480888088,0.78789362414746278,0.60223272555815277,0.79832057737903672,0.58847757141522594,0.80851354221264449,0.57454993402675059,0.81846953108216347,0.56045389559435388,0.82818562587931521,0.54619358767814352,0.837658978808965,0.5317731899857433,0.84688681322381354,0.51719692914721893,0.85586642443823358,0.50246907747624769,0.86459518052101625,0.48759395171790154,0.87307052306679145,0.4725759117834043,0.8812899679458992,0.45741935947223938,0.88925110603248969,0.44212873718197787,0.89695160391063999,0.4267085266062085,0.90438920455828009,0.41116324742095056,0.91156172800872803,0.39549745595993163,0.91846707198963962,0.37971574387912432,0.92510321253918648,0.36382273681092675,0.93146820459928048,0.34782309300838654,0.93756018258567231,0.33172150197986383,0.9433773609347551,0.3155226831145313,0.94891803462691504,0.29923138429911883,0.95418057968627357,0.2828523805263029,0.95916345365667655,0.26639047249515285,0.96386519605378906,0.24985048520404307,0.96828442879316423,0.23323726653644053,0.97241985659416141,0.21655568583998708,0.97627026735959388,0.19981063249929043,0.97983453253099495,0.18300701450284013,0.9831116074194004,0.16614975700447379,0.98610053151154642,0.14924380087980924,0.98880042875139762,0.13229410127807054,0.99121050779691977,0.11530562616973034,0.99333006225202225,0.098283354890392402,0.99515847087360376,0.081232276681346027,0.9966951977536388,0.064157389227213896,0.99793979247625342,0.047063697191127456,0.99889189024974168,0.029956210747856746,0.99955121201348662,0.012839944115322698,0.99991756451975344,-0.0042800859150723992,0.99999084039033059,-0.021398861448872014,0.99977101814800173,-0.038511364959313565,0.99925816222284147,-0.055612580757968856,0.99845242293333059,-0.072697496464847897,0.99735403644229736,-0.089761104477529718,0.99596332468769855,-0.1067984034388962,0.99428069528825846,-0.12380439970303309,0.99230664142399627,-0.14077410879887106,0.99004174169167414,-0.15770255689113935,0.9874866599352099,-0.17458478223820034,0.98464214505110448,-0.19141583664633918,0.98150903076893892,-0.20819078692008491,0.97808823540700851,-0.22490471630813225,0.97438076160316223,-0.24155272594444682,0.970387696020929,-0.25812993628412612,0.96611020903101574,-0.27463148853359715,0.96154955436827105,-0.29105254607473457,0.95670706876421396,-0.30738829588247529,0.95158417155523756,-0.32363394993552153,0.94618236426659974,-0.33978474661971309,0.94050323017232507,-0.35583595212365965,0.93454843383114639,-0.37178286182622605,0.92831972059862078,-0.38762080167545893,0.92181891611556477,-0.40334512955855634,0.91504792577295724,-0.4189512366624743,0.90800873415346806,-0.434434548824773,0.90070340444977559,-0.4497905278743084,0.89313407785984233,-0.46501467296137322,0.88530297295932936,-0.48010252187690017,0.8772123850513287,-0.49504965236033732,0.86886468549360962,-0.50985168339581854,0.86026232100357036,-0.52450427649624143,0.85140781294110424,-0.53900313697488134,0.84230375656958656,-0.5533440152041682,0.8329528202952009,-0.56752270786125403,0.82335774488482816,-0.58153505916001247,0.81352134266272369,-0.59537696206910184,0.80344649668622448,-0.6090443595157391,0.79313615990072173,-0.62253324557483203,0.78259335427415044,-0.63583966664311731,0.77182116991124927,-0.64895972259796708,0.76082276414784644,-0.66188956794051634,0.74960136062544369,-0.67462541292278266,0.7381602483463634,-0.68716352465844388,0.72650278070973984,-0.69950022821694924,0.71463237452863548,-0.71163190770064644,0.70255250902856969,-0.72355500730460276,0.69026672482775542,-0.73526603235881427,0.67777862289934099,-0.74676155035249725,0.66509186351596172,-0.75803819194015853,0.65221016517691233,-0.76909265192915488,0.63913730351825015,-0.77992169024844638,0.62587711020615422,-0.79052213289826456,0.61243347181386043,-0.80089087288041416,0.59881032868250395,-0.81102487110893573,0.58501167376620289,-0.82092115730086612,0.57104155146171864,-0.8305768308468291,0.55690405642304119,-0.83998906166120713,0.54260333236124236,-0.84915509101164122,0.52814357082995078,-0.85807223232761842,0.51352900999680406,-0.86673787198790608,0.49876393340123953,-0.87514947008660848,0.48385266869898358,-0.8833045611776138,0.46879958639361352,-0.89120075499721885,0.45360909855555936,-0.89883573716471721,0.4382856575289219,-0.90620726986074562,0.42283375462648876,-0.91331319248319165,0.40725791881332457,-0.92015142228046698,0.39156271537932935,-0.92671995496196391,0.3757527446011481,-0.93301686528551453,0.35983264039382534,-0.93904030762168045,0.34380706895260293,-0.94478851649470863,0.32768072738525172,-0.9502598070999938,0.31145834233534747,-0.95545257579789566,0.29514466859688721,-0.96036530058376723,0.27874448772065485,-0.96499654153405523,0.26226260661274686,-0.96934494122834325,0.24570385612566134,-0.97340922514721284,0.22907308964237327,-0.97718820204580548,0.21237518165380354,-0.98068076430297835,0.19561502633010125,-0.98388588824594803,0.17879753608616053,-0.98680263445033045,0.16192764014178498,-0.9894301480154869,0.1450102830769312,-0.99176765881509554,0.12805042338244813,-0.99381448172287679,0.11105303200673884,-0.99557001681340374,0.094023090898773518,-0.99703374953794111,0.076965591547873413,-0.99820525087526002,0.059885533520703284,-0.99908417745738398,0.042787922995893839,-0.99967027167023081,0.025677771296726427,-0.99996336172911915,0.0085600934223119315,-0.99996336172911915,-0.008560093422312131,-0.99967027167023081,-0.025677771296726628,-0.99908417745738398,-0.042787922995893596,-0.99820525087526002,-0.059885533520703485,-0.99703374953794111,-0.076965591547873621,-0.99557001681340374,-0.094023090898773712,-0.99381448172287679,-0.11105303200673905,-0.99176765881509554,-0.12805042338244788,-0.9894301480154869,-0.1450102830769314,-0.98680263445033045,-0.16192764014178518,-0.98388588824594803,-0.17879753608616072,-0.98068076430297835,-0.19561502633010147,-0.97718820204580548,-0.21237518165380329,-0.97340922514721284,-0.22907308964237305,-0.96934494122834325,-0.24570385612566153,-0.96499654153405523,-0.26226260661274703,-0.96036530058376723,-0.27874448772065502,-0.95545257579789578,-0.29514466859688698,-0.95025980709999391,-0.31145834233534725,-0.94478851649470852,-0.32768072738525195,-0.93904030762168034,-0.3438070689526031,-0.93301686528551442,-0.35983264039382551,-0.92671995496196402,-0.37575274460114783,-0.92015142228046709,-0.39156271537932913,-0.91331319248319154,-0.40725791881332474,-0.90620726986074562,-0.42283375462648892,-0.8988357371647171,-0.43828565752892212,-0.89120075499721896,-0.45360909855555914,-0.88330456117761391,-0.4687995863936133,-0.87514947008660837,-0.48385266869898375,-0.86673787198790597,-0.4987639334012397,-0.85807223232761831,-0.51352900999680418,-0.84915509101164133,-0.52814357082995067,-0.83998906166120724,-0.54260333236124214,-0.83057683084682898,-0.5569040564230413,-0.82092115730086601,-0.57104155146171875,-0.81102487110893562,-0.585011673766203,-0.80089087288041394,-0.59881032868250406,-0.79052213289826467,-0.61243347181386021,-0.77992169024844626,-0.62587711020615433,-0.76909265192915477,-0.63913730351825038,-0.75803819194015842,-0.65221016517691255,-0.74676155035249725,-0.66509186351596183,-0.73526603235881438,-0.67777862289934088,-0.72355500730460265,-0.69026672482775564,-0.71163190770064633,-0.7025525090285698,-0.69950022821694913,-0.71463237452863559,-0.68716352465844377,-0.72650278070973984,-0.67462541292278289,-0.73816024834636329,-0.66188956794051623,-0.74960136062544391,-0.64895972259796686,-0.76082276414784666,-0.63583966664311742,-0.77182116991124905,-0.62253324557483181,-0.78259335427415055,-0.60904435951573888,-0.79313615990072184,-0.59537696206910196,-0.80344649668622437,-0.58153505916001236,-0.81352134266272391,-0.56752270786125425,-0.82335774488482805,-0.55334401520416798,-0.83295282029520101,-0.53900313697488123,-0.84230375656958667,-0.52450427649624165,-0.85140781294110413,-0.50985168339581843,-0.86026232100357047,-0.49504965236033749,-0.86886468549360951,-0.4801025218769,-0.87721238505132881,-0.46501467296137305,-0.88530297295932947,-0.44979052787430862,-0.89313407785984222,-0.43443454882477284,-0.90070340444977559,-0.41895123666247452,-0.90800873415346794,-0.40334512955855634,-0.91504792577295724,-0.38762080167545854,-0.92181891611556488,-0.37178286182622611,-0.92831972059862078,-0.35583595212365948,-0.9345484338311465,-0.33978474661971331,-0.94050323017232496,-0.32363394993552153,-0.94618236426659963,-0.3073882958824749,-0.95158417155523767,-0.29105254607473463,-0.95670706876421396,-0.27463148853359698,-0.96154955436827116,-0.25812993628412634,-0.96611020903101574,-0.24155272594444685,-0.970387696020929,-0.22490471630813183,-0.97438076160316234,-0.20819078692008494,-0.97808823540700851,-0.19141583664633899,-0.98150903076893903,-0.17458478223820059,-0.98464214505110437,-0.15770255689113938,-0.9874866599352099,-0.14077410879887065,-0.99004174169167425,-0.12380439970303311,-0.99230664142399627,-0.10679840343889599,-0.99428069528825858,-0.089761104477529968,-0.99596332468769855,-0.072697496464847702,-0.99735403644229736,-0.055612580757968433,-0.99845242293333059,-0.038511364959313593,-0.99925816222284147,-0.021398861448871816,-0.99977101814800173,-0.0042800859150726438,-0.99999084039033059,0.012839944115322898,-0.99991756451975344,0.029956210747857166,-0.99955121201348651,0.047063697191127428,-0.99889189024974168,0.064157389227214104,-0.99793979247625342,0.081232276681345778,-0.99669519775363891,0.09828335489039261,-0.99515847087360365,0.11530562616973075,-0.99333006225202225,0.13229410127807051,-0.99121050779691977,0.14924380087980943,-0.98880042875139762,0.16614975700447354,-0.98610053151154642,0.18300701450284032,-0.9831116074194004,0.19981063249929085,-0.97983453253099495,0.21655568583998705,-0.97627026735959388,0.23323726653644072,-0.9724198565941613,0.24985048520404285,-0.96828442879316423,0.26639047249515307,-0.96386519605378895,0.28285238052630329,-0.95916345365667643,0.29923138429911883,-0.95418057968627357,0.31552268311453169,-0.94891803462691493,0.33172150197986361,-0.94337736093475522,0.34782309300838671,-0.93756018258567231,0.36382273681092714,-0.93146820459928037,0.37971574387912432,-0.92510321253918648,0.39549745595993202,-0.91846707198963951,0.41116324742095034,-0.91156172800872803,0.42670852660620867,-0.90438920455827998,0.44212873718197743,-0.89695160391064011,0.45741935947223938,-0.88925110603248969,0.47257591178340463,-0.88128996794589898,0.48759395171790132,-0.87307052306679156,0.50246907747624781,-0.86459518052101614,0.51719692914721849,-0.8558664244382338,0.5317731899857433,-0.84688681322381354,0.54619358767814374,-0.83765897880896489,0.56045389559435377,-0.82818562587931532,0.57454993402675081,-0.81846953108216336,0.58847757141522572,-0.80851354221264471,0.60223272555815277,-0.79832057737903672,0.6158113648088811,-0.78789362414746267,0.62920950925741537,-0.77723573866623152,0.64242323189693262,-0.76635004477007762,0.65544865977478672,-0.75523973306456527,0.66828197512767906,-0.74390805999091592,0.68091941650064325,-0.73235834687154588,0.69335727984953266,-0.72059397893658317,0.70559191962668055,-0.70861840433165157,0.71761974984940879,-0.69643513310722049,0.72943724515108699,-0.68404773618980208,0.74104094181441593,-0.67145984433531347,0.7524274387866482,-0.65867514706489794,0.76359339867644027,-0.64569739158352102,0.77453554873204167,-0.63253038168166686,0.78525068180054469,-0.61917797662043805,0.79573565726789997,-0.60564409000040875,0.80598740197943497,-0.59193268861454229,0.81600291114059886,-0.57804779128551986,0.82577924919766721,-0.56399346768782432,0.83531355069815905,-0.54977383715491057,0.84460302113069941,-0.53539306747182991,0.85364493774409489,-0.5208553736536472,0.8624366503453752,-0.50616501671001435,0.87097558207656378,-0.4913263023962699,0.87925923016996066,-0.47634357995141302,0.88728516668170199,-0.4612212408233432,0.89505103920339446,-0.44596371738172119,0.90255457155160868,-0.43057548161883547,0.9097935644350279,-0.41506104383886322,0.91676589609906489,-0.39942495133589045,0.92346952294774753,-0.38367178706110189,0.92990248014269938,-0.36780616827951185,0.93606288217903622,-0.35183274521663804,0.94194892343800718,-0.33575619969552201,0.94755887871622513,-0.319581243764477,0.95289110373132335,-0.30331261831598827,0.95794403560389652,-0.28695509169715139,0.96271619331558334,-0.2705134583120633,0.96720617814315157,-0.25399253721658466,0.97141267406846765,-0.23739717070586389,0.97533444816422044,-0.22073222289506242,0.9789703509552945,-0.20400257829367643,0.98231931675568196,-0.18721314037388026,0.98538036398083539,-0.17036883013332116,0.98815259543537182,-0.15347458465276381,0.99063519857604077,-0.13653535564903418,0.99282744574988147,-0.11955610802366483,0.99472869440749889,-0.10254181840767551,0.9963383872913949,-0.085497473702924959,0.99765605259930157,-0.068428069620438861,0.99868130412246603,-0.051338609216169125,0.99941384135884914,-0.034234101424591615,0.99985344960120259,-0.017119559590580719,0.99985344960120259,-0.017119559590580719]} diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/cffti/test/fixtures/c/fftpack/medium.json b/lib/node_modules/@stdlib/fft/base/fftpack/cffti/test/fixtures/c/fftpack/medium.json deleted file mode 100644 index 7ee633c728ff..000000000000 --- a/lib/node_modules/@stdlib/fft/base/fftpack/cffti/test/fixtures/c/fftpack/medium.json +++ /dev/null @@ -1 +0,0 @@ -{"lengths":[20,124,61,43,33,117,92,31,67,48],"offsets":[0,40,288,410,496,562,796,980,1042,1176],"twiddles":[1,0,0.95105651629515353,0.3090169943749474,0.80901699437494745,0.58778525229247314,0.58778525229247314,0.80901699437494745,0.30901699437494745,0.95105651629515353,1,0,0.80901699437494745,0.58778525229247314,0.30901699437494745,0.95105651629515353,-0.30901699437494734,0.95105651629515364,-0.80901699437494734,0.58778525229247325,1,0,0.58778525229247314,0.80901699437494745,-0.30901699437494734,0.95105651629515364,-0.95105651629515353,0.30901699437494751,-0.80901699437494745,-0.58778525229247303,1,0,1,0,1,0,1,0,0.30901699437494723,-0.95105651629515364,1,0,0.99871650717105276,0.050649168838712712,0.99486932339189516,0.10116832198743217,0.98846832432811138,0.15142777750457667,0.97952994125249448,0.20129852008866006,0.96807711886620429,0.25065253225872053,0.95413925640004882,0.29936312297335793,0.93775213214708042,0.34730525284482028,0.9189578116202306,0.39435585511331855,0.89780453957074169,0.44039415155763428,0.87434661614458209,0.48530196253108104,0.84864425749475092,0.5289640103269625,0.82076344120727629,0.57126821509479231,0.79077573693769854,0.6121059825476628,0.75875812269279097,0.65137248272222226,0.72479278722911999,0.68896691907568652,0.68896691907568663,0.72479278722911999,0.65137248272222226,0.75875812269279086,0.61210598254766291,0.79077573693769854,0.57126821509479231,0.82076344120727629,0.52896401032696239,0.84864425749475092,0.48530196253108099,0.87434661614458209,0.44039415155763428,0.89780453957074169,0.39435585511331855,0.9189578116202306,0.34730525284482028,0.93775213214708042,0.29936312297335799,0.95413925640004882,0.25065253225872053,0.96807711886620429,0.20129852008866012,0.97952994125249448,0.1514277775045767,0.98846832432811138,0.10116832198743222,0.99486932339189516,0.050649168838712767,0.99871650717105276,1,0,0.99486932339189516,0.10116832198743217,0.97952994125249448,0.20129852008866006,0.95413925640004882,0.29936312297335793,0.9189578116202306,0.39435585511331855,0.87434661614458209,0.48530196253108104,0.82076344120727629,0.57126821509479231,0.75875812269279097,0.65137248272222226,0.68896691907568663,0.72479278722911999,0.61210598254766291,0.79077573693769854,0.52896401032696239,0.84864425749475092,0.44039415155763428,0.89780453957074169,0.34730525284482028,0.93775213214708042,0.25065253225872053,0.96807711886620429,0.1514277775045767,0.98846832432811138,0.050649168838712767,0.99871650717105276,-0.050649168838712642,0.99871650717105276,-0.15142777750457659,0.98846832432811138,-0.25065253225872042,0.96807711886620429,-0.34730525284482017,0.93775213214708053,-0.44039415155763439,0.89780453957074158,-0.5289640103269625,0.84864425749475092,-0.61210598254766291,0.79077573693769854,-0.68896691907568663,0.72479278722911999,-0.75875812269279097,0.65137248272222226,-0.82076344120727629,0.57126821509479231,-0.87434661614458209,0.48530196253108104,-0.9189578116202306,0.39435585511331861,-0.95413925640004882,0.29936312297335804,-0.97952994125249448,0.20129852008866017,-0.99486932339189516,0.10116832198743228,1,0,0.98846832432811138,0.15142777750457667,0.95413925640004882,0.29936312297335793,0.89780453957074169,0.44039415155763434,0.82076344120727629,0.57126821509479231,0.72479278722911999,0.68896691907568652,0.6121059825476628,0.79077573693769865,0.48530196253108099,0.87434661614458209,0.34730525284482028,0.93775213214708042,0.20129852008866012,0.97952994125249448,0.050649168838712767,0.99871650717105276,-0.1011683219874321,0.99486932339189516,-0.25065253225872064,0.96807711886620429,-0.39435585511331867,0.9189578116202306,-0.5289640103269625,0.84864425749475092,-0.65137248272222203,0.75875812269279108,-0.75875812269279097,0.65137248272222226,-0.84864425749475103,0.52896401032696228,-0.9189578116202306,0.39435585511331861,-0.96807711886620429,0.25065253225872042,-0.99486932339189516,0.10116832198743228,-0.99871650717105276,-0.050649168838712802,-0.97952994125249448,-0.20129852008865992,-0.93775213214708042,-0.34730525284482033,-0.87434661614458198,-0.48530196253108121,-0.79077573693769854,-0.6121059825476628,-0.68896691907568641,-0.72479278722912011,-0.57126821509479231,-0.82076344120727629,-0.44039415155763423,-0.89780453957074169,-0.29936312297335765,-0.95413925640004893,-0.15142777750457703,-0.98846832432811138,0.97952994125249448,0.20129852008866006,0.9189578116202306,0.39435585511331855,0.82076344120727629,0.57126821509479231,0.68896691907568663,0.72479278722911999,0.52896401032696239,0.84864425749475092,0.34730525284482028,0.93775213214708042,0.1514277775045767,0.98846832432811138,-0.050649168838712642,0.99871650717105276,-0.25065253225872042,0.96807711886620429,-0.44039415155763439,0.89780453957074158,-0.61210598254766291,0.79077573693769854,-0.75875812269279097,0.65137248272222226,-0.87434661614458209,0.48530196253108104,-0.95413925640004882,0.29936312297335804,-0.99486932339189516,0.10116832198743228,-0.99486932339189516,-0.10116832198743204,-0.95413925640004893,-0.29936312297335776,-0.8743466161445822,-0.48530196253108082,-0.75875812269279108,-0.65137248272222203,-0.61210598254766269,-0.79077573693769865,-0.44039415155763423,-0.89780453957074169,-0.25065253225872047,-0.96807711886620429,-0.050649168838712663,-0.99871650717105276,0.15142777750457667,-0.98846832432811138,0.34730525284482028,-0.93775213214708042,0.52896401032696239,-0.84864425749475103,0.68896691907568652,-0.72479278722911999,0.82076344120727629,-0.57126821509479242,0.9189578116202306,-0.39435585511331872,0.97952994125249448,-0.20129852008866028,0.97952994125249448,-0.20129852008866028,0.99469987561458906,0.1028209971373604,0.97885568509535781,0.2045520661262008,0.95263538080338261,0.30411483232751785,0.91631690448700476,0.40045390565126643,0.87028524103015525,0.4925480679538643,0.81502833751681136,0.57942109820456367,0.75113193087051988,0.66015212067123175,0.67927333889729313,0.73388536643219904,0.60021428054836834,0.79983924473971935,0.51479280150983087,0.85731462807633219,0.42391439070986076,0.90570226308047141,0.32854238191083485,0.94448922878366126,0.22968774213179574,0.97326437370038243,0.12839835514655099,0.99172267413610149,0.025747913654988658,0.99966846751431304,-0.07717546212664618,0.9970175264485267,-0.17928075881073544,0.98379795157351635,-0.27948563485160915,0.96014987367160187,-0.376727893635185,0.92632396825149499,-0.46997674302731968,0.88267879832554763,-0.55824372202686456,0.82967701355261902,-0.64059317869817511,0.76788044603660011,-0.71615218831439309,0.69794415476634386,-0.78411980657671032,0.62060948182742304,-0.84377555982318564,0.53669619399160051,-0.89448708222879547,0.44709379298511426,-0.93571681904049353,0.35275208654909501,-0.96702772479132038,0.25467112024122879,-0.98808789609107706,0.15389057670406214,-0.99867408988483053,0.051478754770346732,-0.99867408988483053,-0.051478754770346045,-0.98808789609107717,-0.15389057670406148,-0.96702772479132038,-0.25467112024122857,-0.93571681904049386,-0.35275208654909435,-0.89448708222879569,-0.44709379298511365,-0.84377555982318597,-0.53669619399159996,-0.78411980657671065,-0.62060948182742248,-0.71615218831439353,-0.69794415476634331,-0.64059317869817523,-0.7678804460366,-0.55824372202686545,-0.82967701355261847,-0.46997674302732068,-0.88267879832554708,-0.37672789363518561,-0.92632396825149477,-0.27948563485160982,-0.96014987367160165,-0.17928075881073591,-0.98379795157351635,-0.07717546212664643,-0.9970175264485267,0.025747913654987745,-0.99966846751431315,0.12839835514655029,-0.9917226741361016,0.22968774213179508,-0.97326437370038266,0.3285423819108344,-0.94448922878366137,0.42391439070986053,-0.90570226308047153,0.51479280150982998,-0.85731462807633274,0.60021428054836767,-0.79983924473971979,0.67927333889729269,-0.73388536643219959,0.75113193087051955,-0.66015212067123208,0.81502833751681114,-0.57942109820456389,0.87028524103015514,-0.49254806795386452,0.91631690448700442,-0.40045390565126726,0.95263538080338228,-0.30411483232751857,0.9788556850953577,-0.20455206612620136,0.99469987561458906,-0.1028209971373608,0.99469987561458906,-0.1028209971373608,0.98934336807511025,0.14560116773500487,0.95760059990840596,0.28809909936523759,0.90544823749314662,0.42445669887581505,0.83399781788987792,0.55176774077044588,0.74477218274378187,0.66731881122223946,0.63967302155889127,0.76864713977853205,0.52094034048793025,0.85359308903734643,0.39110472049015599,0.92034618356915943,0.25293338239168067,0.96748369705742532,0.1093712083778743,0.99400097523994591,-0.036522023057658948,0.99933284837023939,-0.18163685097943635,0.98336567682946618,-0.32288040477144619,0.94643977315760941,-0.45724232330463849,0.88934214888251895,-0.58185891555795299,0.81328974073556526,-0.69407419522063396,0.71990347375799579,-0.79149648842925402,0.61117371409784937,-0.87204940814380771,0.48941784781108544,-0.93401610873254792,0.35723088980113288,-0.97607587755592717,0.21743017558155681,-0.99733228366355164,0.072995314660907556,-0.99733228366355164,-0.072995314660907751,-0.97607587755592717,-0.217430175581557,-0.93401610873254803,-0.35723088980113266,-0.8720494081438076,-0.4894178478110856,-0.79149648842925413,-0.61117371409784926,-0.69407419522063374,-0.71990347375799602,-0.58185891555795288,-0.81328974073556537,-0.45724232330463871,-0.88934214888251883,-0.32288040477144575,-0.94643977315760952,-0.18163685097943616,-0.98336567682946618,-0.036522023057658747,-0.99933284837023939,0.10937120837787428,-0.99400097523994591,0.25293338239168045,-0.96748369705742532,0.39110472049015638,-0.92034618356915932,0.52094034048793048,-0.85359308903734632,0.63967302155889127,-0.76864713977853205,0.74477218274378176,-0.66731881122223957,0.83399781788987826,-0.55176774077044544,0.90544823749314673,-0.42445669887581478,0.95760059990840596,-0.28809909936523742,0.98934336807511014,-0.14560116773500492,0.98934336807511014,-0.14560116773500492,1,0,0.98192869726270671,0.18925124436041019,0.92836793301607268,0.37166245566032752,0.84125353283118121,0.54064081745559756,0.7237340381050702,0.69007901148211193,0.58005690957119826,0.81457595205033562,0.41541501300188644,0.90963199535451833,0.23575893550942728,0.97181156832354165,0.047581915823742403,0.99886733918300796,-0.142314838273285,0.9898214418809328,-0.32706796331742144,0.94500081871466857,1,0,0.92836793301607268,0.37166245566032752,0.7237340381050702,0.69007901148211193,0.41541501300188644,0.90963199535451833,0.047581915823742403,0.99886733918300796,-0.32706796331742144,0.94500081871466857,-0.6548607339452851,0.75574957435425827,-0.88883544865492337,0.45822652172741052,-0.99547192257308459,0.09505604330418288,-0.95949297361449748,-0.28173255684142939,-0.78605309474278773,-0.61815898622060494,0.84125353283118121,0.54064081745559756,0.41541501300188644,0.90963199535451833,-0.142314838273285,0.9898214418809328,-0.6548607339452851,0.75574957435425827,-0.95949297361449726,0.28173255684143006,-0.95949297361449748,-0.28173255684142939,-0.65486073394528521,-0.75574957435425816,-0.14231483827328523,-0.98982144188093268,0.41541501300188605,-0.90963199535451855,0.84125353283118076,-0.54064081745559822,0.84125353283118076,-0.54064081745559822,1,0,0.99855837056414176,0.053676629703121592,0.99423763884742788,0.10719849578744782,0.98705026263791285,0.16041128085776024,0.97701696500181712,0.21316155867941614,0.96416667453356242,0.26529723654590076,0.94853644194714548,0.31666799380147248,0.93017133324933832,0.36712571525452753,0.90912429980272369,0.4165249182320398,0.88545602565320991,0.46472317204376856,0.85923475256221682,0.51158150864680996,0.83053608324801165,0.55696482332643937,0.79944276340350118,0.60074226423797883,0.76604444311897801,0.64278760968653925,0.73043741839770315,0.68297963205684165,0.69272435350959938,0.72120244734381456,0.65301398498358509,0.75734584927617976,0.61142080809201205,0.7913056270696619,0.56806474673115581,0.82298386589365635,0.52307080764957758,0.85228922918503347,0.47656872002130779,0.8791372219950947,0.42869256140305423,0.90345043461038221,0.37958037115389626,0.92515876574492362,0.32937375243207967,0.94419962466038454,0.27821746391645275,0.96051811163137224,0.22625900242972208,0.97406717623555461,0.17364817766693041,0.98480775301220802,0.12053668025532301,0.99270887409805397,0.067077644391002403,0.99774775851562514,0.013425206313397397,0.99990987785672103,-0.040265940109415123,0.99918899817156959,-0.093840989403179392,0.99558719794291872,-0.14714547083171609,0.98911486209323163,-0.20002569377604434,0.97979065204226767,-0.25232919086422184,0.96764145190137818,-0.3039051575742468,0.95270229095965342,-0.35460488704253568,0.93501624268541483,-0.40428219882430499,0.91463430053425454,-0.45279386036963715,0.89161523092170292,1,0,0.99423763884742788,0.10719849578744782,0.97701696500181712,0.21316155867941614,0.94853644194714548,0.31666799380147248,0.90912429980272369,0.4165249182320398,0.85923475256221682,0.51158150864680996,0.79944276340350118,0.60074226423797883,0.73043741839770315,0.68297963205684165,0.65301398498358509,0.75734584927617976,0.56806474673115581,0.82298386589365635,0.47656872002130779,0.8791372219950947,0.37958037115389626,0.92515876574492362,0.27821746391645275,0.96051811163137224,0.17364817766693041,0.98480775301220802,0.067077644391002403,0.99774775851562514,-0.040265940109415123,0.99918899817156959,-0.14714547083171609,0.98911486209323163,-0.25232919086422184,0.96764145190137818,-0.35460488704253568,0.93501624268541483,-0.45279386036963715,0.89161523092170292,-0.54576451019450467,0.83793860121858121,-0.63244537559537717,0.77460496182765459,-0.71183748366934074,0.70234421535547731,-0.78302586241762218,0.6219891468387041,-0.8451900855437946,0.53446582612780125,-0.89761372763901404,0.44078293518918576,-0.93969262078590832,0.34202014332566888,-0.97094181742605201,0.23931566428755768,-0.99100117924590847,0.13385313867526169,-0.99963952767088537,0.02684799281006094,-0.99675730813421004,-0.080466568716725834,-0.98238773741566476,-0.18685377538420497,-0.95669642082742523,-0.29108754417871296,-0.91997944365882423,-0.39196660986007492,-0.87265995887561421,-0.48832836920991113,-0.81528331039954449,-0.57906227971087887,-0.74851074817110097,-0.6631226582407953,-0.67311180742757026,-0.7395407322802372,-0.58995544002312317,-0.80743580474680665,1,0,0.98705026263791285,0.16041128085776024,0.94853644194714548,0.31666799380147248,0.88545602565320991,0.46472317204376851,0.79944276340350118,0.60074226423797883,0.69272435350959949,0.72120244734381445,0.56806474673115581,0.82298386589365635,0.42869256140305423,0.90345043461038221,0.27821746391645275,0.96051811163137224,0.12053668025532323,0.99270887409805397,-0.040265940109414901,0.9991889981715697,-0.20002569377604434,0.97979065204226767,-0.35460488704253545,0.93501624268541483,1,0,0.94853644194714548,0.31666799380147248,0.79944276340350118,0.60074226423797883,0.56806474673115581,0.82298386589365635,0.27821746391645275,0.96051811163137224,-0.040265940109414901,0.9991889981715697,-0.35460488704253545,0.93501624268541483,-0.63244537559537717,0.77460496182765459,-0.8451900855437946,0.53446582612780125,-0.9709418174260519,0.2393156642875581,-0.99675730813421004,-0.08046656871672539,-0.91997944365882423,-0.39196660986007492,-0.7485107481711013,-0.66312265824079497,0.88545602565320991,0.46472317204376856,0.56806474673115581,0.82298386589365635,0.12053668025532301,0.99270887409805397,-0.35460488704253568,0.93501624268541483,-0.74851074817110119,0.66312265824079519,-0.97094181742605201,0.23931566428755768,-0.97094181742605201,-0.23931566428755788,-0.74851074817110097,-0.6631226582407953,-0.3546048870425359,-0.93501624268541472,0.1205366802553232,-0.99270887409805397,0.56806474673115559,-0.82298386589365657,0.88545602565321002,-0.4647231720437684,0.88545602565321002,-0.4647231720437684,1,0,0.99766876919053915,0.068242413364670976,0.99068594603633076,0.13616664909624659,0.97908408768232291,0.20345601305263378,0.96291728734779936,0.26979677115702427,0.94226092211882051,0.33487961217098611,0.91721130150545305,0.39840108984624145,0.88788521840237522,0.46006503773115215,0.85441940454648857,0.51958395003543356,0.81696989301044209,0.57668032211486708,0.77571129070441991,0.63108794432605275,0.73083596427812414,0.68255314321865401,0.68255314321865412,0.73083596427812403,0.63108794432605286,0.7757112907044198,0.57668032211486708,0.81696989301044198,0.51958395003543356,0.85441940454648857,0.4600650377311522,0.88788521840237522,0.39840108984624156,0.91721130150545294,0.33487961217098627,0.9422609221188204,0.26979677115702444,0.96291728734779924,0.20345601305263397,0.9790840876823228,0.13616664909624659,0.99068594603633076,0.068242413364671003,0.99766876919053915,1,0,0.99068594603633076,0.13616664909624659,0.96291728734779936,0.26979677115702427,0.91721130150545305,0.39840108984624145,0.85441940454648857,0.51958395003543356,0.77571129070441991,0.63108794432605275,0.68255314321865412,0.73083596427812403,0.57668032211486708,0.81696989301044198,0.4600650377311522,0.88788521840237522,0.33487961217098627,0.9422609221188204,0.20345601305263397,0.9790840876823228,0.068242413364671003,0.99766876919053915,-0.068242413364670879,0.99766876919053915,-0.20345601305263364,0.97908408768232291,-0.33487961217098616,0.94226092211882051,-0.46006503773115209,0.88788521840237522,-0.57668032211486708,0.81696989301044209,-0.68255314321865401,0.73083596427812425,-0.77571129070441969,0.63108794432605297,-0.85441940454648835,0.51958395003543389,-0.91721130150545283,0.39840108984624178,-0.96291728734779924,0.26979677115702427,-0.99068594603633076,0.13616664909624665,1,0,0.97908408768232291,0.20345601305263378,0.91721130150545305,0.39840108984624145,0.81696989301044209,0.57668032211486708,0.68255314321865412,0.73083596427812403,0.51958395003543356,0.85441940454648857,0.33487961217098627,0.9422609221188204,0.13616664909624659,0.99068594603633076,-0.068242413364670879,0.99766876919053915,-0.26979677115702411,0.96291728734779936,-0.46006503773115209,0.88788521840237522,-0.63108794432605286,0.7757112907044198,-0.77571129070441969,0.63108794432605297,-0.88788521840237522,0.46006503773115226,-0.96291728734779924,0.26979677115702427,-0.99766876919053915,0.068242413364671295,-0.99068594603633076,-0.1361666490962464,-0.94226092211882051,-0.33487961217098611,-0.85441940454648879,-0.51958395003543323,-0.73083596427812425,-0.6825531432186539,-0.57668032211486719,-0.81696989301044198,-0.39840108984624184,-0.91721130150545283,-0.20345601305263367,-0.97908408768232291,0.96291728734779936,0.26979677115702427,0.85441940454648857,0.51958395003543356,0.68255314321865412,0.73083596427812403,0.4600650377311522,0.88788521840237522,0.20345601305263397,0.9790840876823228,-0.068242413364670879,0.99766876919053915,-0.33487961217098616,0.94226092211882051,-0.57668032211486708,0.81696989301044209,-0.77571129070441969,0.63108794432605297,-0.91721130150545283,0.39840108984624178,-0.99068594603633076,0.13616664909624665,-0.99068594603633076,-0.1361666490962464,-0.91721130150545316,-0.39840108984624117,-0.7757112907044198,-0.63108794432605275,-0.57668032211486719,-0.81696989301044198,-0.33487961217098638,-0.9422609221188204,-0.06824241336467135,-0.99766876919053915,0.20345601305263331,-0.97908408768232302,0.46006503773115159,-0.88788521840237555,0.68255314321865357,-0.73083596427812458,0.85441940454648857,-0.51958395003543356,0.96291728734779924,-0.26979677115702438,0.96291728734779924,-0.26979677115702438,0.97952994125249448,0.20129852008866006,0.9189578116202306,0.39435585511331855,0.82076344120727629,0.57126821509479231,0.68896691907568663,0.72479278722911999,0.52896401032696239,0.84864425749475092,0.34730525284482028,0.93775213214708042,0.1514277775045767,0.98846832432811138,-0.050649168838712642,0.99871650717105276,-0.25065253225872042,0.96807711886620429,-0.44039415155763439,0.89780453957074158,-0.61210598254766291,0.79077573693769854,-0.75875812269279097,0.65137248272222226,-0.87434661614458209,0.48530196253108104,-0.95413925640004882,0.29936312297335804,-0.99486932339189516,0.10116832198743228,-0.99486932339189516,-0.10116832198743204,-0.95413925640004893,-0.29936312297335776,-0.8743466161445822,-0.48530196253108082,-0.75875812269279108,-0.65137248272222203,-0.61210598254766269,-0.79077573693769865,-0.44039415155763423,-0.89780453957074169,-0.25065253225872047,-0.96807711886620429,-0.050649168838712663,-0.99871650717105276,0.15142777750457667,-0.98846832432811138,0.34730525284482028,-0.93775213214708042,0.52896401032696239,-0.84864425749475103,0.68896691907568652,-0.72479278722911999,0.82076344120727629,-0.57126821509479242,0.9189578116202306,-0.39435585511331872,0.97952994125249448,-0.20129852008866028,0.97952994125249448,-0.20129852008866028,0.99560598202189809,0.093641489534350766,0.98246254287557611,0.18646005429168117,0.96068518757684018,0.27764000138750056,0.93046529630708663,0.36638003816824616,0.89206844255738649,0.45190031399993386,0.84583205925909744,0.53344927362357031,0.79216247341112933,0.61031026184979209,0.73153133526366898,0.68180782155043773,0.66447147343882174,0.74731362960007708,0.59157221241352231,0.80625201860222984,0.51347419351484191,0.85810503587514431,0.43086374494097046,0.90241699523858832,0.34446685028433299,0.93879848160038637,0.25504276856167651,0.96692977315025064,0.16337736181853024,0.98656365108654653,0.070276188945293,0.99752757218401011,-0.023442573603260443,0.99972518510981589,-0.11695532197208247,0.99313717716255423,-0.20944026276614447,0.97782144399294513,-0.30008463500034077,0.95391258081477903,-0.3880918526722496,0.9216206995773375,-0.47268850518856537,0.88122958249402839,-0.55313115412519942,0.83309418815409153,-0.62871286659088466,0.7776375321337522,-0.69876942777884166,0.71534696952012755,-0.76268517811038183,0.6467699120171988,-0.81989842367342458,0.57250901727207193,-0.86990637240879021,0.49321689269790747,-0.91226955266489684,0.40959036033650631,-0.94661567529043411,0.32236433316115382,-0.97264290532481312,0.23230535663498308,-0.99012251453465094,0.14020487228188577,-0.99890089148571137,0.046872262469940307,-0.99890089148571148,-0.046872262469940064,-0.99012251453465094,-0.14020487228188555,-0.97264290532481301,-0.23230535663498328,-0.94661567529043422,-0.32236433316115359,-0.91226955266489673,-0.40959036033650648,-0.86990637240879032,-0.49321689269790725,-0.81989842367342447,-0.57250901727207204,-0.76268517811038194,-0.64676991201719869,-0.69876942777884177,-0.71534696952012733,-0.62871286659088488,-0.77763753213375197,-0.5531311541251992,-0.83309418815409164,-0.47268850518856559,-0.88122958249402827,-0.38809185267224983,-0.92162069957733739,-0.3000846350003406,-0.95391258081477903,-0.20944026276614491,-0.97782144399294502,-0.11695532197208272,-0.99313717716255412,-0.023442573603260467,-0.99972518510981589,0.070276188945293194,-0.99752757218401011,0.16337736181852977,-0.98656365108654653,0.25504276856167624,-0.96692977315025064,0.34446685028433294,-0.93879848160038637,0.43086374494097068,-0.9024169952385882,0.51347419351484169,-0.85810503587514442,0.59157221241352231,-0.80625201860222984,0.66447147343882185,-0.74731362960007697,0.73153133526366876,-0.68180782155043806,0.79216247341112922,-0.61031026184979231,0.84583205925909744,-0.53344927362357031,0.8920684425573866,-0.45190031399993358,0.93046529630708652,-0.36638003816824649,0.96068518757684018,-0.27764000138750067,0.98246254287557622,-0.18646005429168103,0.99560598202189809,-0.093641489534351252,0.99560598202189809,-0.093641489534351252,1,0,0.99144486137381038,0.13052619222005157,0.96592582628906831,0.25881904510252074,0.92387953251128674,0.38268343236508978,0.86602540378443871,0.49999999999999994,0.79335334029123528,0.60876142900872054,0.70710678118654757,0.70710678118654746,0.60876142900872066,0.79335334029123517,0.50000000000000011,0.8660254037844386,0.38268343236508984,0.92387953251128674,0.25881904510252096,0.9659258262890682,0.13052619222005171,0.99144486137381038,6.123233995736766e-17,1,-0.13052619222005138,0.99144486137381049,-0.25881904510252063,0.96592582628906831,-0.3826834323650895,0.92387953251128685,1,0,0.96592582628906831,0.25881904510252074,0.86602540378443871,0.49999999999999994,0.70710678118654757,0.70710678118654746,0.50000000000000011,0.8660254037844386,0.25881904510252096,0.9659258262890682,6.123233995736766e-17,1,-0.25881904510252063,0.96592582628906831,-0.49999999999999983,0.86602540378443871,-0.70710678118654746,0.70710678118654757,-0.86602540378443849,0.50000000000000033,-0.9659258262890682,0.25881904510252102,-1,1.2246467991473532e-16,-0.96592582628906842,-0.25881904510252035,-0.86602540378443882,-0.49999999999999978,-0.70710678118654791,-0.70710678118654713,1,0,0.92387953251128674,0.38268343236508978,0.70710678118654757,0.70710678118654746,0.38268343236508984,0.92387953251128674,1,0,0.70710678118654757,0.70710678118654746,6.123233995736766e-17,1,-0.70710678118654746,0.70710678118654757,1,0,0.38268343236508984,0.92387953251128674,-0.70710678118654746,0.70710678118654757,-0.92387953251128685,-0.38268343236508967,1,0,1,0,1,0,-1.8369701987210297e-16,-1]} diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/cffti/test/fixtures/c/fftpack/runner.c b/lib/node_modules/@stdlib/fft/base/fftpack/cffti/test/fixtures/c/fftpack/runner.c deleted file mode 100644 index e8569c7ef55e..000000000000 --- a/lib/node_modules/@stdlib/fft/base/fftpack/cffti/test/fixtures/c/fftpack/runner.c +++ /dev/null @@ -1,286 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2026 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/** -* Generate FFTPACK test fixtures. -* -* ## Notes -* -* - Run this script from the directory in which fixtures should be written. -* -*/ - -#include -#include -#include - -/** -* Define prototypes for external functions. -*/ -extern void cffti( int n, double *wsave ); - -/** -* Generates a random number on the interval [0,1]. -* -* @return random number -*/ -double rand_double( void ) { - int r = rand(); - return (double)r / ( (double)RAND_MAX + 1.0 ); -} - -/** -* Generates an array of pseudorandom integers drawn from a uniform distribution. -* -* ## Notes -* -* - WARNING: the method used here is not particularly robust, as some integer values may be sampled more frequently than others. -* -* -* @param out output array -* @param len array length -* @param a lower bound (inclusive) -* @param b upper bound (exclusive) -*/ -void rand_array_i32( int *out, const unsigned int len, const int a, const int b ) { - unsigned int i; - unsigned int r; - double delta; - - delta = (double)b - (double)a; - - for ( i = 0; i < len; i++ ) { - r = (unsigned int)( delta * rand_double() ); // truncation - out[ i ] = (int)( a + r ); - } -} - -/** -* Writes an array of doubles to a file as a series of comma-separated values. -* -* @param f file to write to -* @param x array of doubles -* @param len array length -*/ -void write_array_f64( FILE *f, const double *x, const unsigned int len ) { - unsigned int i; - - for ( i = 0; i < len; i++ ) { - fprintf( f, "%.17g", x[ i ] ); - if ( i < len-1 ) { - fprintf( f, "," ); - } - } -} - -/** -* Writes an array of integers to a file as a series of comma-separated values. -* -* @param f file to write to -* @param x array of integers -* @param len array length -*/ -void write_array_i32( FILE *f, const int *x, const unsigned int len ) { - unsigned int i; - - for ( i = 0; i < len; i++ ) { - fprintf( f, "%d", x[ i ] ); - if ( i < len-1 ) { - fprintf( f, "," ); - } - } -} - -/** -* Writes a named array of doubles to a file as JSON. -* -* @param f file to write to -* @param name array name -* @param x data -* @param len array length -*/ -void write_named_array_f64( FILE *f, const char *name, const double *x, const unsigned int len ) { - fprintf( f, "\"%s\":[", name ); - write_array_f64( f, x, len ); - fprintf( f, "]" ); -} - -/** -* Writes a named array of integers to a file as JSON. -* -* @param f file to write to -* @param name array name -* @param x data -* @param len array length -*/ -void write_named_array_i32( FILE *f, const char *name, const int *x, const unsigned int len ) { - fprintf( f, "\"%s\":[", name ); - write_array_i32( f, x, len ); - fprintf( f, "]" ); -} - -/** -* Writes data to a file as JSON. -* -* ## Notes -* -* - This function SHOULD be tailored to the input data (e.g., input types, output types, number of arguments, etc) and may vary from use case to use case. -* -* -* @param f file to write to -* @param lengths sequence lengths -* @param offsets twiddle offsets -* @param twiddles twiddle factors -* @param num number of sequence lengths -* @param total total number of twiddle values -*/ -void write_data_as_json( FILE *f, const int *lengths, const int *offsets, const double *twiddles, const unsigned int num, const unsigned int total ) { - fprintf( f, "{" ); - write_named_array_i32( f, "lengths", lengths, num ); - fprintf( f, "," ); - write_named_array_i32( f, "offsets", offsets, num ); - fprintf( f, "," ); - write_named_array_f64( f, "twiddles", twiddles, total ); - fprintf( f, "}\n" ); -} - -/** -* Generates test fixtures. -* -* @param lengths sequence lengths -* @param offsets twiddle offsets into flat output array -* @param num number of sequence lengths -* @param total total number of twiddle values -* @param name output filename -*/ -void generate( const int *lengths, const int *offsets, const unsigned int num, const unsigned int total, const char *name ) { - unsigned int i; - unsigned int j; - double *twiddles; - double *wsave; - FILE *f; - int off; - int n; - - // Allocate an output array: - twiddles = (double*) malloc( total * sizeof(double) ); - if ( twiddles == NULL ) { - printf( "Error allocating memory.\n" ); - exit( 1 ); - } - - // Generate fixture data: - for ( i = 0; i < num; i++ ) { - n = lengths[ i ]; - wsave = (double*) calloc( 4*n + 15, sizeof(double) ); - if ( wsave == NULL ) { - printf( "Error allocating memory.\n" ); - exit( 1 ); - } - cffti( n, wsave ); - - // Copy twiddle region into flat array (2*N values starting at wsave[2*n]): - off = offsets[ i ]; - for ( j = 0; j < (unsigned int)( 2 * n ); j++ ) { - twiddles[ off + j ] = wsave[ ( 2 * n ) + j ]; - } - free( wsave ); - } - // Open a new file: - f = fopen( name, "w" ); - if ( f == NULL ) { - printf( "Error opening file.\n" ); - exit( 1 ); - } - - // Write data as JSON: - write_data_as_json( f, lengths, offsets, twiddles, num, total ); - - // Close the file: - fclose( f ); - - // Free allocated memory: - free( twiddles ); -} - -/** -* Computes offsets into a flat twiddle array for each sequence length. -* -* @param offsets output array of offsets -* @param lengths sequence lengths -* @param num number of sequence lengths -* @return total number of twiddle values -*/ -unsigned int compute_offsets( int *offsets, const int *lengths, const unsigned int num ) { - unsigned int total; - unsigned int i; - - total = 0; - for ( i = 0; i < num; i++ ) { - offsets[ i ] = total; - total += 2 * lengths[ i ]; - } - return total; -} - -/** -* Main execution sequence. -*/ -int main( void ) { - unsigned int total; - unsigned int num; - int *lengths; - int *offsets; - - // Use the current time to seed the random number generator: - srand( time( NULL ) ); - - // Define the number of sequence lengths per range: - num = 10; - - // Allocate arrays: - lengths = (int*) malloc( num * sizeof(int) ); - if ( lengths == NULL ) { - printf( "Error allocating memory.\n" ); - exit( 1 ); - } - offsets = (int*) malloc( num * sizeof(int) ); - if ( offsets == NULL ) { - printf( "Error allocating memory.\n" ); - exit( 1 ); - } - - // Generate fixture data: - rand_array_i32( lengths, num, 2, 16 ); - total = compute_offsets( offsets, lengths, num ); - generate( lengths, offsets, num, total, "small.json" ); - - rand_array_i32( lengths, num, 16, 128 ); - total = compute_offsets( offsets, lengths, num ); - generate( lengths, offsets, num, total, "medium.json" ); - - rand_array_i32( lengths, num, 128, 1024 ); - total = compute_offsets( offsets, lengths, num ); - generate( lengths, offsets, num, total, "large.json" ); - - // Free allocated memory: - free( lengths ); - free( offsets ); - - return 0; -} diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/cffti/test/fixtures/c/fftpack/small.json b/lib/node_modules/@stdlib/fft/base/fftpack/cffti/test/fixtures/c/fftpack/small.json deleted file mode 100644 index 69a1ad3bbb33..000000000000 --- a/lib/node_modules/@stdlib/fft/base/fftpack/cffti/test/fixtures/c/fftpack/small.json +++ /dev/null @@ -1 +0,0 @@ -{"lengths":[2,12,6,4,15,3,3,2,2,6],"offsets":[0,4,28,40,48,78,84,90,94,98],"twiddles":[1,0,-1,1.2246467991473532e-16,1,0,0.86602540378443871,0.49999999999999994,0.50000000000000011,0.8660254037844386,6.123233995736766e-17,1,1,0,0.50000000000000011,0.8660254037844386,-0.49999999999999983,0.86602540378443871,-1,1.2246467991473532e-16,1,0,1,0,1,0,-1.8369701987210297e-16,-1,1,0,0.50000000000000011,0.8660254037844386,-0.49999999999999983,0.86602540378443871,1,0,1,0,-0.50000000000000044,-0.86602540378443837,1,0,1,0,1,0,-1.8369701987210297e-16,-1,1,0,0.91354545764260087,0.40673664307580015,0.66913060635885824,0.74314482547739424,0.30901699437494745,0.95105651629515353,-0.10452846326765333,0.9945218953682734,1,0,0.66913060635885824,0.74314482547739424,-0.10452846326765333,0.9945218953682734,-0.80901699437494734,0.58778525229247325,-0.97814760073380569,-0.20791169081775907,1,0,1,0,1,0,1,0,0.30901699437494723,-0.95105651629515364,1,0,1,0,-0.50000000000000044,-0.86602540378443837,1,0,1,0,-0.50000000000000044,-0.86602540378443837,1,0,-1,1.2246467991473532e-16,1,0,-1,1.2246467991473532e-16,1,0,0.50000000000000011,0.8660254037844386,-0.49999999999999983,0.86602540378443871,1,0,1,0,-0.50000000000000044,-0.86602540378443837]} diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/cffti/test/test.js b/lib/node_modules/@stdlib/fft/base/fftpack/cffti/test/test.js deleted file mode 100644 index 57300092cd89..000000000000 --- a/lib/node_modules/@stdlib/fft/base/fftpack/cffti/test/test.js +++ /dev/null @@ -1,231 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2026 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var Float64Array = require( '@stdlib/array/float64' ); -var isAlmostSameValue = require( '@stdlib/number/float64/base/assert/is-almost-same-value' ); -var cffti = require( './../lib' ); - - -// FIXTURES // - -var small = require( './fixtures/c/fftpack/small.json' ); -var medium = require( './fixtures/c/fftpack/medium.json' ); -var large = require( './fixtures/c/fftpack/large.json' ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof cffti, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function has an arity of 4', function test( t ) { - t.strictEqual( cffti.length, 4, 'returns expected value' ); - t.end(); -}); - -tape( 'the function returns a reference to the workspace array', function test( t ) { - var workspace; - var out; - var N; - - N = 8; - workspace = new Float64Array( (4*N)+34 ); - out = cffti( N, workspace, 1, 0 ); - - t.strictEqual( out, workspace, 'same reference' ); - t.end(); -}); - -tape( 'the function correctly initializes twiddle factors (small sequence lengths)', function test( t ) { - var workspace; - var expected; - var lengths; - var offsets; - var ulps; - var off; - var y; - var e; - var N; - var i; - var k; - - lengths = small.lengths; - offsets = small.offsets; - expected = small.twiddles; - - ulps = 1; - for ( k = 0; k < lengths.length; k++ ) { - N = lengths[ k ]; - off = offsets[ k ]; - workspace = new Float64Array( (4*N)+34 ); - cffti( N, workspace, 1, 0 ); - - t.strictEqual( workspace[ (2*N)-1 ], 0.0, 'returns expected value' ); - for ( i = 0; i < 2*N; i++ ) { - y = workspace[ (2*N)+i ]; - e = expected[ off+i ]; - t.strictEqual( isAlmostSameValue( y, e, ulps ), true, 'within '+ulps+' ULPs. N: '+N+'. y: '+y+'. E: '+e ); - } - } - t.end(); -}); - -tape( 'the function correctly initializes twiddle factors (medium sequence lengths)', function test( t ) { - var workspace; - var expected; - var lengths; - var offsets; - var ulps; - var off; - var y; - var e; - var N; - var i; - var k; - - lengths = medium.lengths; - offsets = medium.offsets; - expected = medium.twiddles; - - ulps = 1; - for ( k = 0; k < lengths.length; k++ ) { - N = lengths[ k ]; - off = offsets[ k ]; - workspace = new Float64Array( (4*N)+34 ); - cffti( N, workspace, 1, 0 ); - - t.strictEqual( workspace[ (2*N)-1 ], 0.0, 'returns expected value' ); - for ( i = 0; i < 2*N; i++ ) { - y = workspace[ (2*N)+i ]; - e = expected[ off+i ]; - t.strictEqual( isAlmostSameValue( y, e, ulps ), true, 'within '+ulps+' ULPs. N: '+N+'. y: '+y+'. E: '+e ); - } - } - t.end(); -}); - -tape( 'the function correctly initializes twiddle factors (large sequence lengths)', function test( t ) { - var workspace; - var expected; - var lengths; - var offsets; - var ulps; - var off; - var y; - var e; - var N; - var i; - var k; - - lengths = large.lengths; - offsets = large.offsets; - expected = large.twiddles; - - ulps = 1; - for ( k = 0; k < lengths.length; k++ ) { - N = lengths[ k ]; - off = offsets[ k ]; - workspace = new Float64Array( (4*N)+34 ); - cffti( N, workspace, 1, 0 ); - - t.strictEqual( workspace[ (2*N)-1 ], 0.0, 'returns expected value' ); - for ( i = 0; i < 2*N; i++ ) { - y = workspace[ (2*N)+i ]; - e = expected[ off+i ]; - t.strictEqual( isAlmostSameValue( y, e, ulps ), true, 'within '+ulps+' ULPs. N: '+N+'. y: '+y+'. E: '+e ); - } - } - t.end(); -}); - -tape( 'the function does not modify the scratch region of the workspace', function test( t ) { - var workspace; - var N; - var i; - - N = 8; - workspace = new Float64Array( (4*N)+34 ); - - for ( i = 0; i < workspace.length; i++ ) { - workspace[ i ] = i + 1.0; - } - cffti( N, workspace, 1, 0 ); - for ( i = 0; i < 2*N; i++ ) { - t.strictEqual( workspace[ i ], i + 1.0, 'returns expected value' ); - } - t.end(); -}); - -tape( 'the function does not modify the workspace when N is 1', function test( t ) { - var workspace; - var expected; - var N; - var i; - - N = 1; - workspace = new Float64Array( (4*N)+34 ); - for ( i = 0; i < workspace.length; i++ ) { - workspace[ i ] = i + 1.0; - } - expected = new Float64Array( workspace ); - - cffti( N, workspace, 1, 0 ); - - t.deepEqual( workspace, expected, 'returns expected value' ); - t.end(); -}); - -tape( 'the function correctly handles stride and offset parameters', function test( t ) { - var workspace; - var expected; - var stride; - var offset; - var nf; - var N; - var i; - - N = 8; - stride = 2; - offset = 3; - workspace = new Float64Array( offset+(((4*N)+34)*stride ) ); - - cffti( N, workspace, stride, offset ); - - t.strictEqual( workspace[ offset+(4*N*stride) ], N, 'returns expected value' ); - - nf = workspace[ offset+(((4*N)+1)*stride) ]; - t.strictEqual( nf, 2, 'returns expected value' ); - t.strictEqual( workspace[ offset+(((4*N)+2)*stride) ], 2, 'returns expected value' ); - t.strictEqual( workspace[ offset+(((4*N)+3)*stride) ], 4, 'returns expected value' ); - - expected = new Float64Array( (4*N)+34 ); - cffti( N, expected, 1, 0 ); - - for ( i = 0; i < 2*N; i++ ) { - t.strictEqual( workspace[ offset+(((2*N)+i)*stride) ], expected[ (2*N)+i ], 'returns expected value' ); - } - t.end(); -}); From 107bde74fa6abc1bd1b0b37a72b08dd699f92fd6 Mon Sep 17 00:00:00 2001 From: Gunj Joshi Date: Tue, 18 Aug 2026 13:28:09 +0530 Subject: [PATCH 09/32] feat: add `fft/base/fftpack/generic/rffti` Ref: https://github.com/stdlib-js/metr-issue-tracker/issues/1165 --- type: pre_commit_static_analysis_report description: Results of running static analysis checks when committing changes. report: - task: lint_filenames status: passed - task: lint_editorconfig status: passed - task: lint_markdown_pkg_readmes status: passed - task: lint_markdown_docs status: na - task: lint_markdown status: na - task: lint_package_json status: passed - task: lint_repl_help status: passed - task: lint_javascript_src status: passed - task: lint_javascript_cli status: na - task: lint_javascript_examples status: passed - task: lint_javascript_tests status: passed - task: lint_javascript_benchmarks status: passed - task: lint_python status: na - task: lint_r status: na - task: lint_c_src status: na - task: lint_c_examples status: na - task: lint_c_benchmarks status: na - task: lint_c_tests_fixtures status: passed - task: lint_shell status: na - task: lint_typescript_declarations status: passed - task: lint_typescript_tests status: passed - task: lint_license_headers status: passed --- --- .../fft/base/fftpack/generic/rffti/README.md | 167 ++++++++++ .../generic/rffti/benchmark/benchmark.js | 101 +++++++ .../base/fftpack/generic/rffti/docs/repl.txt | 55 ++++ .../generic/rffti/docs/types/index.d.ts | 62 ++++ .../fftpack/generic/rffti/docs/types/test.ts | 94 ++++++ .../fftpack/generic/rffti/examples/index.js | 41 +++ .../base/fftpack/generic/rffti/lib/index.js | 53 ++++ .../base/fftpack/generic/rffti/lib/main.js | 176 +++++++++++ .../base/fftpack/generic/rffti/lib/rffti1.js | 183 +++++++++++ .../base/fftpack/generic/rffti/package.json | 64 ++++ .../rffti/test/fixtures/c/fftpack/Makefile | 137 +++++++++ .../rffti/test/fixtures/c/fftpack/large.json | 1 + .../rffti/test/fixtures/c/fftpack/medium.json | 1 + .../rffti/test/fixtures/c/fftpack/runner.c | 286 ++++++++++++++++++ .../rffti/test/fixtures/c/fftpack/small.json | 1 + .../base/fftpack/generic/rffti/test/test.js | 231 ++++++++++++++ 16 files changed, 1653 insertions(+) create mode 100644 lib/node_modules/@stdlib/fft/base/fftpack/generic/rffti/README.md create mode 100644 lib/node_modules/@stdlib/fft/base/fftpack/generic/rffti/benchmark/benchmark.js create mode 100644 lib/node_modules/@stdlib/fft/base/fftpack/generic/rffti/docs/repl.txt create mode 100644 lib/node_modules/@stdlib/fft/base/fftpack/generic/rffti/docs/types/index.d.ts create mode 100644 lib/node_modules/@stdlib/fft/base/fftpack/generic/rffti/docs/types/test.ts create mode 100644 lib/node_modules/@stdlib/fft/base/fftpack/generic/rffti/examples/index.js create mode 100644 lib/node_modules/@stdlib/fft/base/fftpack/generic/rffti/lib/index.js create mode 100644 lib/node_modules/@stdlib/fft/base/fftpack/generic/rffti/lib/main.js create mode 100644 lib/node_modules/@stdlib/fft/base/fftpack/generic/rffti/lib/rffti1.js create mode 100644 lib/node_modules/@stdlib/fft/base/fftpack/generic/rffti/package.json create mode 100644 lib/node_modules/@stdlib/fft/base/fftpack/generic/rffti/test/fixtures/c/fftpack/Makefile create mode 100644 lib/node_modules/@stdlib/fft/base/fftpack/generic/rffti/test/fixtures/c/fftpack/large.json create mode 100644 lib/node_modules/@stdlib/fft/base/fftpack/generic/rffti/test/fixtures/c/fftpack/medium.json create mode 100644 lib/node_modules/@stdlib/fft/base/fftpack/generic/rffti/test/fixtures/c/fftpack/runner.c create mode 100644 lib/node_modules/@stdlib/fft/base/fftpack/generic/rffti/test/fixtures/c/fftpack/small.json create mode 100644 lib/node_modules/@stdlib/fft/base/fftpack/generic/rffti/test/test.js diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/generic/rffti/README.md b/lib/node_modules/@stdlib/fft/base/fftpack/generic/rffti/README.md new file mode 100644 index 000000000000..6a9b180d2264 --- /dev/null +++ b/lib/node_modules/@stdlib/fft/base/fftpack/generic/rffti/README.md @@ -0,0 +1,167 @@ + + +# rffti + +> Initialize a workspace array for performing a real-valued Fourier transform. + + + +
+ +
+ + + + + +
+ +## Usage + +```javascript +var rffti = require( '@stdlib/fft/base/fftpack/generic/rffti' ); +``` + +#### rffti( N, workspace, strideW, offsetW ) + +Initializes a workspace array for performing a real-valued Fourier transform. + +```javascript +var Float64Array = require( '@stdlib/array/float64' ); + +var N = 8; +var workspace = new Float64Array( ( 2*N ) + 34 ); + +var out = rffti( N, workspace, 1, 0 ); +// returns + +var bool = ( out === workspace ); +// returns true + +var twiddleFactors = workspace.slice( N, 2*N ); +// returns [ ~0.707, ~0.707, 0, 0, 0, 0, 0, 0 ] + +var factors = workspace.slice( 2*N, ( 2*N ) + 4 ); +// returns [ 8, 2, 2, 4 ] +``` + +The function accepts the following arguments: + +- **N**: length of the sequence to transform. +- **workspace**: workspace array. +- **strideW**: stride length for `workspace`. +- **offsetW**: starting index for `workspace`. + +
+ + + + + +
+ +## Notes + +- The workspace array is divided into three sections: + + ```text + size = N N 2+ceil(log2(N)/2) + ↓ ↓ ↓ + | scratch / workspace | twiddle factors | radix factor table | + ↑ ↑ ↑ + i = 0 ... N ... 2N ... + ``` + + - **scratch/workspace**: used as a scratch space when performing transforms. This section is not updated during initialization. + - **twiddle factors**: a table of reusable complex-exponential constants stored as cosine/sine pairs. + - **radix factor table**: a table containing the sequence length `N`, the number of factors into which `N` was decomposed, and the individual integer radix factors. + +- In general, a workspace array should have `2N + 34` indexed elements (as `log2(N)/2 ≤ 32` for all `2^64`). During initialization, only the sections for storing twiddle factors and the factorization of `N` are updated. + +- The radix factor table is comprised as follows: + + ```text + | sequence_length | number_of_factors | integer_factors | + ``` + +- If `N` equals `1`, the function returns early without modifying the workspace, as a single data point is its own Fourier transform. + +
+ + + +
+ +## Examples + + + +```javascript +var Float64Array = require( '@stdlib/array/float64' ); +var zeroTo = require( '@stdlib/array/zero-to' ); +var logEach = require( '@stdlib/console/log-each' ); +var rffti = require( '@stdlib/fft/base/fftpack/generic/rffti' ); + +var N = 8; +var workspace = new Float64Array( ( 2*N ) + 34 ); + +rffti( N, workspace, 1, 0 ); +console.log( 'Sequence length: %d', N ); + +console.log( 'Twiddle factors:' ); +var idx = zeroTo( N, 'generic' ); +logEach( ' workspace[ %d ] = %d', idx, workspace.slice( N, 2*N ) ); + +console.log( 'Factorization:' ); +var nf = workspace[ (2*N)+1 ]; + +console.log( ' number of factors: %d', nf ); +idx = zeroTo( nf, 'generic' ); +logEach( ' factor[ %d ]: %d', idx, workspace.slice( (2*N)+2, (2*N)+2+nf ) ); +``` + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/generic/rffti/benchmark/benchmark.js b/lib/node_modules/@stdlib/fft/base/fftpack/generic/rffti/benchmark/benchmark.js new file mode 100644 index 000000000000..b2f4afc682ca --- /dev/null +++ b/lib/node_modules/@stdlib/fft/base/fftpack/generic/rffti/benchmark/benchmark.js @@ -0,0 +1,101 @@ +/* +* @license Apache-2.0 +* +* Copyright (c) 2026 The Stdlib Authors. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +'use strict'; + +// MODULES // + +var bench = require( '@stdlib/bench' ); +var format = require( '@stdlib/string/format' ); +var isnan = require( '@stdlib/math/base/assert/is-nan' ); +var Float64Array = require( '@stdlib/array/float64' ); +var pkg = require( './../package.json' ).name; +var rffti = require( './../lib' ); + + +// FUNCTIONS // + +/** +* Creates a benchmark function. +* +* @private +* @param {PositiveInteger} N - sequence length +* @returns {Function} benchmark function +*/ +function createBenchmark( N ) { + var workspace = new Float64Array( ( 2*N ) + 34 ); + return benchmark; + + /** + * Benchmark function. + * + * @private + * @param {Benchmark} b - benchmark instance + */ + function benchmark( b ) { + var i; + + b.tic(); + for ( i = 0; i < b.iterations; i++ ) { + rffti( N, workspace, 1, 0 ); + if ( isnan( workspace[ N ] ) ) { + b.fail( 'should not return NaN' ); + } + } + b.toc(); + if ( isnan( workspace[ N ] ) ) { + b.fail( 'should not return NaN' ); + } + b.pass( 'benchmark finished' ); + b.end(); + } +} + + +// MAIN // + +/** +* Main execution sequence. +* +* @private +*/ +function main() { + var lengths; + var N; + var f; + var i; + + lengths = [ + 8, + 16, + 32, + 64, + 128, + 256, + 512, + 1024 + ]; + + for ( i = 0; i < lengths.length; i++ ) { + N = lengths[ i ]; + f = createBenchmark( N ); + bench( format( '%s:N=%d', pkg, N ), f ); + } +} + +main(); diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/generic/rffti/docs/repl.txt b/lib/node_modules/@stdlib/fft/base/fftpack/generic/rffti/docs/repl.txt new file mode 100644 index 000000000000..8edb96270359 --- /dev/null +++ b/lib/node_modules/@stdlib/fft/base/fftpack/generic/rffti/docs/repl.txt @@ -0,0 +1,55 @@ + +{{alias}}( N, workspace, strideW, offsetW ) + Initializes a workspace array for performing a real-valued Fourier + transform. + + The workspace array is divided into three sections: + + 1. scratch/workspace: the section ranges from indices 0 to N-1 and is used + while performing transforms. This section is not updated during + initialization. + + 2. twiddle factors: the section ranges from indices N to 2N-1 and stores a + table of reusable complex exponential constants as cosine/sine pairs. + + 3. radix factor table: the section starts at index 2N and stores the + sequence length N, the number of factors into which N was decomposed, and + the individual integer radix factors. + + Any remaining array space remains as unused storage. + + Parameters + ---------- + N: integer + Length of the sequence. + + workspace: ArrayLikeObject + Workspace array. + + strideW: integer + Stride length for `workspace`. + + offsetW: integer + Starting index for `workspace`. + + Returns + ------- + out: ArrayLikeObject + Workspace array. + + Examples + -------- + > var N = 8; + > var workspace = new {{alias:@stdlib/array/float64}}( ( 2*N ) + 34 ); + > var out = {{alias}}( N, workspace, 1, 0 ) + + > var bool = ( out === workspace ) + true + > var twiddleFactors = workspace.slice( N, 2*N ) + [ ~0.707, ~0.707, 0, 0, 0, 0, 0, 0 ] + > var factors = workspace.slice( 2*N, ( 2*N ) + 4 ) + [ 8, 2, 2, 4 ] + + See Also + -------- + diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/generic/rffti/docs/types/index.d.ts b/lib/node_modules/@stdlib/fft/base/fftpack/generic/rffti/docs/types/index.d.ts new file mode 100644 index 000000000000..94af8df9504d --- /dev/null +++ b/lib/node_modules/@stdlib/fft/base/fftpack/generic/rffti/docs/types/index.d.ts @@ -0,0 +1,62 @@ +/* +* @license Apache-2.0 +* +* Copyright (c) 2026 The Stdlib Authors. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +// TypeScript Version: 4.1 + +/// + +import { Collection } from '@stdlib/types/array'; + +/** +* Initializes a workspace array for performing a real-valued Fourier transform. +* +* ## Notes +* +* - The workspace array should have a length of at least `( 2*N ) + 34` elements. +* - For single-point sequences (N=1), the function returns immediately as the FFT is the identity operation. +* +* @param N - length of the sequence +* @param workspace - workspace array +* @param strideW - stride length for `workspace` +* @param offsetW - starting index for `workspace` +* @returns workspace array +* +* @example +* var Float64Array = require( '@stdlib/array/float64' ); +* +* var N = 8; +* var workspace = new Float64Array( ( 2*N ) + 34 ); +* +* var out = rffti( N, workspace, 1, 0 ); +* // returns +* +* var bool = ( out === workspace ); +* // returns true +* +* var twiddleFactors = workspace.slice( N, 2*N ); +* // returns [ ~0.707, ~0.707, 0, 0, 0, 0, 0, 0 ] +* +* var factors = workspace.slice( 2*N, ( 2*N ) + 4 ); +* // returns [ 8, 2, 2, 4 ] +*/ +declare function rffti>( N: number, workspace: T, strideW: number, offsetW: number ): T; + + +// EXPORTS // + +export = rffti; diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/generic/rffti/docs/types/test.ts b/lib/node_modules/@stdlib/fft/base/fftpack/generic/rffti/docs/types/test.ts new file mode 100644 index 000000000000..02c9ae78e64b --- /dev/null +++ b/lib/node_modules/@stdlib/fft/base/fftpack/generic/rffti/docs/types/test.ts @@ -0,0 +1,94 @@ +/* +* @license Apache-2.0 +* +* Copyright (c) 2026 The Stdlib Authors. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +import rffti = require( './index' ); + + +// TESTS // + +// The function returns a collection... +{ + const workspace = new Float64Array( ( 2*8 ) + 34 ); + + rffti( 8, workspace, 1, 0 ); // $ExpectType Float64Array +} + +// The compiler throws an error if the function is provided a first argument which is not a number... +{ + const workspace = new Float64Array( ( 2*8 ) + 34 ); + + rffti( '8', workspace, 1, 0 ); // $ExpectError + rffti( true, workspace, 1, 0 ); // $ExpectError + rffti( false, workspace, 1, 0 ); // $ExpectError + rffti( null, workspace, 1, 0 ); // $ExpectError + rffti( void 0, workspace, 1, 0 ); // $ExpectError + rffti( [], workspace, 1, 0 ); // $ExpectError + rffti( {}, workspace, 1, 0 ); // $ExpectError + rffti( ( x: number ): number => x, workspace, 1, 0 ); // $ExpectError +} + +// The compiler throws an error if the function is provided a second argument which is not a collection... +{ + rffti( 8, '50', 1, 0 ); // $ExpectError + rffti( 8, 50, 1, 0 ); // $ExpectError + rffti( 8, true, 1, 0 ); // $ExpectError + rffti( 8, false, 1, 0 ); // $ExpectError + rffti( 8, null, 1, 0 ); // $ExpectError + rffti( 8, void 0, 1, 0 ); // $ExpectError + rffti( 8, {}, 1, 0 ); // $ExpectError + rffti( 8, ( x: number ): number => x, 1, 0 ); // $ExpectError +} + +// The compiler throws an error if the function is provided a third argument which is not a number... +{ + const workspace = new Float64Array( ( 2*8 ) + 34 ); + + rffti( 8, workspace, '1', 0 ); // $ExpectError + rffti( 8, workspace, true, 0 ); // $ExpectError + rffti( 8, workspace, false, 0 ); // $ExpectError + rffti( 8, workspace, null, 0 ); // $ExpectError + rffti( 8, workspace, void 0, 0 ); // $ExpectError + rffti( 8, workspace, [], 0 ); // $ExpectError + rffti( 8, workspace, {}, 0 ); // $ExpectError + rffti( 8, workspace, ( x: number ): number => x, 0 ); // $ExpectError +} + +// The compiler throws an error if the function is provided a fourth argument which is not a number... +{ + const workspace = new Float64Array( ( 2*8 ) + 34 ); + + rffti( 8, workspace, 1, '0' ); // $ExpectError + rffti( 8, workspace, 1, true ); // $ExpectError + rffti( 8, workspace, 1, false ); // $ExpectError + rffti( 8, workspace, 1, null ); // $ExpectError + rffti( 8, workspace, 1, void 0 ); // $ExpectError + rffti( 8, workspace, 1, [] ); // $ExpectError + rffti( 8, workspace, 1, {} ); // $ExpectError + rffti( 8, workspace, 1, ( x: number ): number => x ); // $ExpectError +} + +// The compiler throws an error if the function is provided an unsupported number of arguments... +{ + const workspace = new Float64Array( ( 2*8 ) + 34 ); + + rffti(); // $ExpectError + rffti( 8 ); // $ExpectError + rffti( 8, workspace ); // $ExpectError + rffti( 8, workspace, 1 ); // $ExpectError + rffti( 8, workspace, 1, 0, 123 ); // $ExpectError +} diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/generic/rffti/examples/index.js b/lib/node_modules/@stdlib/fft/base/fftpack/generic/rffti/examples/index.js new file mode 100644 index 000000000000..8f9328400d42 --- /dev/null +++ b/lib/node_modules/@stdlib/fft/base/fftpack/generic/rffti/examples/index.js @@ -0,0 +1,41 @@ +/** +* @license Apache-2.0 +* +* Copyright (c) 2026 The Stdlib Authors. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +'use strict'; + +var Float64Array = require( '@stdlib/array/float64' ); +var zeroTo = require( '@stdlib/array/zero-to' ); +var logEach = require( '@stdlib/console/log-each' ); +var rffti = require( './../lib' ); + +var N = 8; +var workspace = new Float64Array( ( 2*N ) + 34 ); + +rffti( N, workspace, 1, 0 ); +console.log( 'Sequence length: %d', N ); + +console.log( 'Twiddle factors:' ); +var idx = zeroTo( N, 'generic' ); +logEach( ' workspace[ %d ] = %d', idx, workspace.slice( N, 2*N ) ); + +console.log( 'Factorization:' ); +var nf = workspace[ (2*N)+1 ]; + +console.log( ' number of factors: %d', nf ); +idx = zeroTo( nf, 'generic' ); +logEach( ' factor[ %d ]: %d', idx, workspace.slice( (2*N)+2, (2*N)+2+nf ) ); diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/generic/rffti/lib/index.js b/lib/node_modules/@stdlib/fft/base/fftpack/generic/rffti/lib/index.js new file mode 100644 index 000000000000..6cf26f3502d3 --- /dev/null +++ b/lib/node_modules/@stdlib/fft/base/fftpack/generic/rffti/lib/index.js @@ -0,0 +1,53 @@ +/** +* @license Apache-2.0 +* +* Copyright (c) 2026 The Stdlib Authors. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +'use strict'; + +/** +* Initialize a workspace array for performing a real-valued Fourier transform. +* +* @module @stdlib/fft/base/fftpack/generic/rffti +* +* @example +* var Float64Array = require( '@stdlib/array/float64' ); +* var rffti = require( '@stdlib/fft/base/fftpack/generic/rffti' ); +* +* var N = 8; +* var workspace = new Float64Array( ( 2*N ) + 34 ); +* +* var out = rffti( N, workspace, 1, 0 ); +* // returns +* +* var bool = ( out === workspace ); +* // returns true +* +* var twiddleFactors = workspace.slice( N, 2*N ); +* // returns [ ~0.707, ~0.707, 0, 0, 0, 0, 0, 0 ] +* +* var factors = workspace.slice( 2*N, ( 2*N ) + 4 ); +* // returns [ 8, 2, 2, 4 ] +*/ + +// MODULES // + +var main = require( './main.js' ); + + +// EXPORTS // + +module.exports = main; diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/generic/rffti/lib/main.js b/lib/node_modules/@stdlib/fft/base/fftpack/generic/rffti/lib/main.js new file mode 100644 index 000000000000..1b045b91a18c --- /dev/null +++ b/lib/node_modules/@stdlib/fft/base/fftpack/generic/rffti/lib/main.js @@ -0,0 +1,176 @@ +/** +* @license Apache-2.0 +* +* Copyright (c) 2026 The Stdlib Authors. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +* +* ## Notice +* +* The original C code and copyright notice are from the [PFFFT library]{@link https://github.com/marton78/pffft/blob/0b4ee12c4ba45a4a8e567550c16d96d1679f50ce/src/fftpack.c}. The implementation follows the original, but has been modified for JavaScript. +* +* ```text +* Copyright (c) 2004 the University Corporation for Atmospheric +* Research ("UCAR"). All rights reserved. Developed by NCAR's +* Computational and Information Systems Laboratory, UCAR, +* www.cisl.ucar.edu. +* +* Redistribution and use of the Software in source and binary forms, +* with or without modification, is permitted provided that the +* following conditions are met: +* +* - Neither the names of NCAR's Computational and Information Systems +* Laboratory, the University Corporation for Atmospheric Research, +* nor the names of its sponsors or contributors may be used to +* endorse or promote products derived from this Software without +* specific prior written permission. +* +* - Redistributions of source code must retain the above copyright +* notices, this list of conditions, and the disclaimer below. +* +* - Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions, and the disclaimer below in the +* documentation and/or other materials provided with the +* distribution. +* +* THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +* EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO THE WARRANTIES OF +* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +* NONINFRINGEMENT. IN NO EVENT SHALL THE CONTRIBUTORS OR COPYRIGHT +* HOLDERS BE LIABLE FOR ANY CLAIM, INDIRECT, INCIDENTAL, SPECIAL, +* EXEMPLARY, OR CONSEQUENTIAL DAMAGES OR OTHER LIABILITY, WHETHER IN AN +* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE +* SOFTWARE. +* ``` +*/ + +'use strict'; + +// MODULES // + +var rffti1 = require( './rffti1.js' ); + + +// MAIN // + +/** +* Initializes a workspace array for performing a real-valued Fourier transform. +* +* ## Notes +* +* The workspace array is divided into three sections: +* +* ```text +* size = N N 2+ceil(log2(N)/2) +* ↓ ↓ ↓ +* | scratch / workspace | twiddle factors | radix factor table | +* ↑ ↑ ↑ +* i = 0 ... N ... 2N ... +* ``` +* +* where +* +* - **scratch/workspace**: used as a scratch space when performing transforms. This section is not updated during initialization. +* - **twiddle factors**: a table of reusable complex-exponential constants stored as cosine/sine pairs. +* - **radix factor table**: a table containing the radix factorization of `N`. +* +* In general, a workspace array should have `2N + 34` indexed elements (as `log2(N)/2 ≤ 32` for all `2^64`). During initialization, only the sections for storing twiddle factors and the factorization of `N` are updated. +* +* > Note: FFTPACK only requires `2N+15`, but we increase that number here to accommodate larger workspace arrays, where `N` may exceed `2^30` indexed elements. +* +* The first two sections each contain `N` elements, while the last section contains the sequence length, the number of integer factors, and, at most, `ceil(log2(N)/2)` integer radix factors. +* +* The factorization section is comprised as follows: +* +* ```text +* | sequence_length | number_of_factors | integer_factors | +* ``` +* +* The sequence length and number of factors (`nf`) comprise a single element each. Only the first `nf` elements in the integer factors section are written to, with the rest being unused. +* +* As for twiddle factors, these are small, reusable complex-exponential constants that appear inside each "butterfly" stage of a Cooley–Tukey–style FFT. Every arithmetic step in an FFT multiplies one intermediate value by some +* +* ```tex +* W_N^k +* ``` +* +* where `W_N^k` is an N-th root of unity. Formally, in a forward FFT, +* +* ```tex +* W_N^k = e^{-2\pi ik/N} +* ``` +* +* In a backward FFT, +* +* ```tex +* W_N^k = e^{+2\pi ik/N} +* ``` +* +* As may be observed, `W_N^k` for forward and backward FFTs is the same, except the sign of the exponent is flipped. As a consequence, both forward and backward FFT callers can reuse the same set of twiddle factors, with those performing a forward transform (e.g., `rfftf`) multiplying with `(cos,-sin)` and those performing a backward transform (e.g., `rfftb`) multiplying with `(cos,+sin)`. +* +* Because these constants only depend on the transform length `N` (and **not** on the input data), we can pre-compute and store them once, then "twiddle" them (i.e., reuse them with different indices) as we proceed through the factorization. +* +* > As a quick aside regarding the name "twiddle", early FFT papers (notably Gentleman & Sande, 1966) described how you "twiddle" one branch of each butterfly by a complex rotation before adding/subtracting. The coefficients themselves inherited the nickname "twiddle factors," and the term stuck. +* +* By reusing the workspace array when computing multiple transforms of the same length `N`, every subsequent `*f` (forward) or `*b` (backward) call can simply look up the pre-stored twiddle factors instead of recomputing sine and cosine on-the-fly. +* +* In short, twiddle factors are cached roots of unity that allow each stage of the algorithm to rotate data quickly and predictably. +* +* @param {NonNegativeInteger} N - length of the sequence to transform +* @param {Collection} workspace - workspace array +* @param {integer} strideW - stride length for `workspace` +* @param {NonNegativeInteger} offsetW - starting index for `workspace` +* @returns {Collection} workspace array +* +* @example +* var Float64Array = require( '@stdlib/array/float64' ); +* +* var N = 8; +* var workspace = new Float64Array( ( 2*N ) + 34 ); +* +* var out = rffti( N, workspace, 1, 0 ); +* // returns +* +* var bool = ( out === workspace ); +* // returns true +* +* var twiddleFactors = workspace.slice( N, 2*N ); +* // returns [ ~0.707, ~0.707, 0, 0, 0, 0, 0, 0 ] +* +* var factors = workspace.slice( 2*N, ( 2*N ) + 4 ); +* // returns [ 8, 2, 2, 4 ] +*/ +function rffti( N, workspace, strideW, offsetW ) { + var offsetT; + var offsetF; + + // When a sub-sequence is a single data point, the FFT is the identity, so no initialization necessary... + if ( N === 1 ) { + return workspace; + } + // Resolve the starting indices for storing twiddle factors and factorization results: + offsetT = offsetW + ( N*strideW ); // index offset for twiddle factors + offsetF = offsetT + ( N*strideW ); // index offset for factorization results + + // Initialize a provided workspace array: + rffti1( N, workspace, strideW, offsetT, workspace, strideW, offsetF ); + + return workspace; +} + + +// EXPORTS // + +module.exports = rffti; diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/generic/rffti/lib/rffti1.js b/lib/node_modules/@stdlib/fft/base/fftpack/generic/rffti/lib/rffti1.js new file mode 100644 index 000000000000..cafc381f7dd5 --- /dev/null +++ b/lib/node_modules/@stdlib/fft/base/fftpack/generic/rffti/lib/rffti1.js @@ -0,0 +1,183 @@ +/** +* @license Apache-2.0 +* +* Copyright (c) 2026 The Stdlib Authors. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +* +* ## Notice +* +* The original C code and copyright notice are from the [PFFFT library]{@link https://github.com/marton78/pffft/blob/0b4ee12c4ba45a4a8e567550c16d96d1679f50ce/src/fftpack.c}. The implementation follows the original, but has been modified for JavaScript. +* +* ```text +* Copyright (c) 2004 the University Corporation for Atmospheric +* Research ("UCAR"). All rights reserved. Developed by NCAR's +* Computational and Information Systems Laboratory, UCAR, +* www.cisl.ucar.edu. +* +* Redistribution and use of the Software in source and binary forms, +* with or without modification, is permitted provided that the +* following conditions are met: +* +* - Neither the names of NCAR's Computational and Information Systems +* Laboratory, the University Corporation for Atmospheric Research, +* nor the names of its sponsors or contributors may be used to +* endorse or promote products derived from this Software without +* specific prior written permission. +* +* - Redistributions of source code must retain the above copyright +* notices, this list of conditions, and the disclaimer below. +* +* - Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions, and the disclaimer below in the +* documentation and/or other materials provided with the +* distribution. +* +* THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +* EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO THE WARRANTIES OF +* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +* NONINFRINGEMENT. IN NO EVENT SHALL THE CONTRIBUTORS OR COPYRIGHT +* HOLDERS BE LIABLE FOR ANY CLAIM, INDIRECT, INCIDENTAL, SPECIAL, +* EXEMPLARY, OR CONSEQUENTIAL DAMAGES OR OTHER LIABILITY, WHETHER IN AN +* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE +* SOFTWARE. +* ``` +*/ + +'use strict'; + +// MODULES // + +var sincos = require( '@stdlib/math/base/special/sincos' ).assign; +var TWO_PI = require( '@stdlib/constants/float64/two-pi' ); +var floor = require( '@stdlib/math/base/special/floor' ); +var decompose = require( '@stdlib/fft/base/fftpack/generic/decompose' ); + + +// VARIABLES // + +// Define a list of initial trial factors for FFT factorization: +var TRIAL_FACTORS = [ 4, 2, 3, 5 ]; + + +// MAIN // + +/** +* Initializes the working arrays for applying a Fourier transform to a real-valued sequence. +* +* @private +* @param {NonNegativeInteger} N - length of the sequence +* @param {Collection} twiddles - array of twiddle factors +* @param {integer} strideT - stride length for `twiddles` +* @param {NonNegativeInteger} offsetT - starting index for `twiddles` +* @param {Collection} factors - array containing a radix factorization +* @param {integer} strideF - stride length for `factors` +* @param {NonNegativeInteger} offsetF - starting index for `factors` +* @returns {void} +*/ +function rffti1( N, twiddles, strideT, offsetT, factors, strideF, offsetF ) { + var factor; + var argld; + var argh; + var fidx; + var nf; + var fi; + var l2; + var l1; + var ld; + var st; + var it; + var im; + var M; + var m; + var k; + var j; + + // Decompose the sequence length into its radix factors: + nf = decompose( N, 4, TRIAL_FACTORS, 1, 0, factors, strideF, offsetF ); + + // If the number of radix factors is `1`, the only twiddle factor we need is `W_N^0 = 1`, which the main transform kernels already hard-code, so nothing to pre-compute... + if ( nf-1 === 0 ) { + return; + } + // Compute the master angular step (i.e., the basic angle that generates all twiddles): + argh = TWO_PI / N; + + // Define the location of the first sine term we want to compute: + im = 1; + + // Initialize a running product of factors already processed: + l1 = 1; + + // Compute the index of the first radix factor: + fidx = offsetF + ( 2*strideF ); + + // Compute the stride length for each cosine/sine pair: + st = 2 * strideT; + + // Generate twiddle factors... + for ( k = 0; k < nf-1; k++ ) { + // Resolve the next radix factor: + factor = factors[ fidx ]; + + // Compute the length of the transform after including the current radix: + l2 = factor * l1; + + // Compute the number of the "butterfly wings" (at this stage, the data is viewed as a `factor`-point transform of sub-vectors of length `l1`; `M` describes how many such vectors fit in the full array of length `N`): + M = floor( N / l2 ); + + // Initialize a running offset used to step the angle: + ld = 0; + + // Iterate over each butterfly column within the current radix... + for ( j = 1; j < factor; j++ ) { + // Advance to the next column: + ld += l1; + + // Compute the angle step for this column: + argld = ld * argh; // 2π ⋅ j ⋅ li / N, which is the j-th column's base angle + + // Initialize a counter which counts from `1` to `(M/2)-1` (i.e., all non-trivial harmonics): + fi = 1.0; + + // Compute the index of the sine term: + it = offsetT + ( im*strideT ); + + // Iterate over each non-trivial harmonic in the column (note: we skip the `m=0` and `m=1` (i.e., the first cosine/sine pair, the first harmonic `W_N^0 = cos(0) + j sin(0) = 1 + j⋅0` is trivial and hard-coded by transform kernels)... + for ( m = 2; m < M; m += 2 ) { + // Compute `(cos(fi*argld), sin(fi*argld))`: + sincos( fi*argld, twiddles, -strideT, it ); // note: `sincos` returns the sine and cosine, in that order, so we need to use a negative stride when assigning the values to `twiddles` to ensure that cosine comes before sine in the twiddles table + + // Update for the next harmonic: + fi += 1.0; + + // Resolve the index of the next sine term: + it += st; + } + // Advance `im` by the size of the current block, skipping the cosine/sine pairs we have just written: + im += M; + } + // Update the running product of factors already processed: + l1 = l2; + + // Resolve the index of the next radix factor: + fidx += strideF; + } +} + + +// EXPORTS // + +module.exports = rffti1; diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/generic/rffti/package.json b/lib/node_modules/@stdlib/fft/base/fftpack/generic/rffti/package.json new file mode 100644 index 000000000000..43222883dd26 --- /dev/null +++ b/lib/node_modules/@stdlib/fft/base/fftpack/generic/rffti/package.json @@ -0,0 +1,64 @@ +{ + "name": "@stdlib/fft/base/fftpack/generic/rffti", + "version": "0.0.0", + "description": "Initialize a workspace array for performing a real-valued Fourier transform.", + "license": "Apache-2.0", + "author": { + "name": "The Stdlib Authors", + "url": "https://github.com/stdlib-js/stdlib/graphs/contributors" + }, + "contributors": [ + { + "name": "The Stdlib Authors", + "url": "https://github.com/stdlib-js/stdlib/graphs/contributors" + } + ], + "main": "./lib", + "directories": { + "benchmark": "./benchmark", + "doc": "./docs", + "example": "./examples", + "lib": "./lib", + "test": "./test" + }, + "types": "./docs/types", + "scripts": {}, + "homepage": "https://github.com/stdlib-js/stdlib", + "repository": { + "type": "git", + "url": "git://github.com/stdlib-js/stdlib.git" + }, + "bugs": { + "url": "https://github.com/stdlib-js/stdlib/issues" + }, + "dependencies": {}, + "devDependencies": {}, + "engines": { + "node": ">=0.10.0", + "npm": ">2.7.0" + }, + "os": [ + "aix", + "darwin", + "freebsd", + "linux", + "macos", + "openbsd", + "sunos", + "win32", + "windows" + ], + "keywords": [ + "stdlib", + "fft", + "fftpack", + "rffti", + "fourier", + "transform", + "twiddle", + "workspace", + "initialization", + "real" + ], + "__stdlib__": {} +} diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/generic/rffti/test/fixtures/c/fftpack/Makefile b/lib/node_modules/@stdlib/fft/base/fftpack/generic/rffti/test/fixtures/c/fftpack/Makefile new file mode 100644 index 000000000000..7ce16281940d --- /dev/null +++ b/lib/node_modules/@stdlib/fft/base/fftpack/generic/rffti/test/fixtures/c/fftpack/Makefile @@ -0,0 +1,137 @@ +#/ +# @license Apache-2.0 +# +# Copyright (c) 2026 The Stdlib Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +#/ + +# VARIABLES # + +ifndef VERBOSE + QUIET := @ +endif + +# Specify the path to FFTPACK: +FFTPACK ?= + +# Specify a list of FFTPACK source files: +FFTPACK_SRC ?= + +# Determine the OS: +# +# [1]: https://en.wikipedia.org/wiki/Uname#Examples +# [2]: http://stackoverflow.com/a/27776822/2225624 +OS ?= $(shell uname) +ifneq (, $(findstring MINGW,$(OS))) + OS := WINNT +else +ifneq (, $(findstring MSYS,$(OS))) + OS := WINNT +else +ifneq (, $(findstring CYGWIN,$(OS))) + OS := WINNT +endif +endif +endif + +# Define the program used for compiling C source files: +ifdef C_COMPILER + CC := $(C_COMPILER) +else + CC := gcc +endif + +# Define the command-line options when compiling C files: +CFLAGS ?= \ + -std=c99 \ + -O3 \ + -Wall \ + -pedantic + +# Determine whether to generate [position independent code][1]: +# +# [1]: https://gcc.gnu.org/onlinedocs/gcc/Code-Gen-Options.html#Code-Gen-Options +# [2]: http://stackoverflow.com/questions/5311515/gcc-fpic-option +ifeq ($(OS), WINNT) + fPIC ?= +else + fPIC ?= -fPIC +endif + +# List of C targets: +c_targets := runner.out + + +# RULES # + +#/ +# Compiles C source files. +# +# @param {string} [C_COMPILER] - C compiler +# @param {string} [CFLAGS] - C compiler flags +# @param {(string|void)} [fPIC] - flag indicating whether to generate position independent code +# +# @example +# make +# +# @example +# make all +#/ +all: $(c_targets) + +.PHONY: all + +#/ +# Compiles C source files. +# +# @private +# @param {string} CC - C compiler +# @param {string} CFLAGS - C compiler flags +# @param {(string|void)} fPIC - flag indicating whether to generate position independent code +#/ +$(c_targets): %.out: %.c + $(QUIET) $(CC) $(CFLAGS) -DFFTPACK_DOUBLE_PRECISION $(fPIC) -o $@ $(FFTPACK_SRC) $< -lm + +#/ +# Generates test fixtures. +# +# @example +# make run +#/ +run: $(c_targets) + $(QUIET) ./$< + +.PHONY: run + +#/ +# Removes generated files. +# +# @example +# make clean +#/ +clean: + $(QUIET) -rm -f *.o *.out + +.PHONY: clean + +#/ +# Removes generated test fixtures. +# +# @example +# make clean-fixtures +#/ +clean-fixtures: + $(QUIET) -rm -f *.json + +.PHONY: clean-fixtures diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/generic/rffti/test/fixtures/c/fftpack/large.json b/lib/node_modules/@stdlib/fft/base/fftpack/generic/rffti/test/fixtures/c/fftpack/large.json new file mode 100644 index 000000000000..f8983602724c --- /dev/null +++ b/lib/node_modules/@stdlib/fft/base/fftpack/generic/rffti/test/fixtures/c/fftpack/large.json @@ -0,0 +1 @@ +{"lengths":[404,948,722,219,410,658,865,453,247,236],"offsets":[0,404,1352,2074,2293,2703,3361,4226,4679,4926],"twiddles":[0.99987906326014953,0.015551811920350872,0.99951628229198808,0.031099862269836916,0.9989117448426108,0.046640390387417532,0.99806559713359433,0.062169637431480525,0.99697804382562927,0.077683847289006208,0.99564934796901861,0.093179267484071571,0.99407983094005259,0.10865215008547453,0.99226987236327646,0.12409875261325934,0.99021991001966947,0.13951533894392301,0.98793043974075667,0.15489818021408466,0.98540201528868132,0.17024355572239858,0.98263524822226367,0.18554775382949326,0.97963080774908162,0.20080707285571847,0.976389420563607,0.2160178219764835,0.97291187067143747,0.23117632211496963,0.96919899919966612,0.24627890683200135,0.96525170419343564,0.26132192321286063,0.96107094039872454,0.27630173275083025,0.95665771903141972,0.29121471222725204,0.95201310753272994,0.3060572545878873,0.94713822931100022,0.32082576981536765,0.9420342634699892,0.33551668579752492,0.93670244452367502,0.35012644919139069,0.93114406209765954,0.36465152628265518,0.92536046061724153,0.37908840384037934,0.9193530389822363,0.39343358996675232,0.91312325022861884,0.40768361494168881,0.9066726011770726,0.42183503206206224,0.90000265206853003,0.43588441847537107,0.89311501618679157,0.44982837600763581,0.88601135946831489,0.46366353198532728,0.87869340009926877,0.47738654005112702,0.87116290809995045,0.49099408097332214,0.86342170489666348,0.5044828634486398,0.85547166288116383,0.51784962489832542,0.8473147049577775,0.531091132257275,0.8389528040783012,0.54420418275602722,0.83038798276479753,0.55718560469542855,0.82162231262040064,0.57003225821378267,0.81265791382825037,0.5827410360463009,0.80349695463867565,0.59530886427666596,0.79414165084475352,0.60773270308053162,0.784594265246366,0.62000954746077508,0.77485710710288991,0.63213642797432634,0.76493253157464769,0.64411041145039771,0.75482293915325704,0.65592860169993994,0.74453077508101528,0.66758814021615354,0.73405852875946009,0.67908620686588594,0.72340873314724974,0.69042002057174678,0.71258396414750702,0.70158683998477656,0,0.99951628229198808,0.031099862269836916,0.99806559713359433,0.062169637431480525,0.99564934796901861,0.093179267484071571,0.99226987236327646,0.12409875261325934,0.98793043974075667,0.15489818021408466,0.98263524822226367,0.18554775382949326,0.976389420563607,0.2160178219764835,0.96919899919966612,0.24627890683200135,0.96107094039872454,0.27630173275083025,0.95201310753272994,0.3060572545878873,0.9420342634699892,0.33551668579752492,0.93114406209765954,0.36465152628265518,0.9193530389822363,0.39343358996675232,0.9066726011770726,0.42183503206206224,0.89311501618679157,0.44982837600763581,0.87869340009926877,0.47738654005112702,0.86342170489666348,0.5044828634486398,0.8473147049577775,0.531091132257275,0.83038798276479753,0.55718560469542855,0.81265791382825037,0.5827410360463009,0.79414165084475352,0.60773270308053162,0.77485710710288991,0.63213642797432634,0.75482293915325704,0.65592860169993994,0.73405852875946009,0.67908620686588594,0.71258396414750702,0.70158683998477656,0.69042002057174678,0.72340873314724974,0.66758814021615365,0.74453077508101517,0.64411041145039782,0.76493253157464758,0.62000954746077519,0.78459426524636589,0.59530886427666607,0.80349695463867565,0.57003225821378278,0.82162231262040053,0.54420418275602733,0.83895280407830108,0.51784962489832553,0.85547166288116383,0.4909940809733222,0.87116290809995045,0.46366353198532739,0.88601135946831477,0.43588441847537118,0.90000265206853003,0.40768361494168903,0.91312325022861873,0.3790884038403794,0.92536046061724153,0.3501264491913908,0.93670244452367502,0.32082576981536781,0.94713822931100011,0.29121471222725209,0.95665771903141972,0.26132192321286074,0.96525170419343564,0.23117632211496977,0.97291187067143736,0.20080707285571867,0.97963080774908162,0.17024355572239863,0.98540201528868132,0.13951533894392312,0.99021991001966947,0.10865215008547471,0.99407983094005259,0.077683847289006236,0.99697804382562927,0.046640390387417609,0.9989117448426108,0.015551811920351015,0.99987906326014953,0,0.9989117448426108,0.046640390387417532,0.99564934796901861,0.093179267484071571,0.99021991001966947,0.13951533894392301,0.98263524822226367,0.18554775382949326,0.97291187067143747,0.23117632211496966,0.96107094039872454,0.27630173275083025,0.94713822931100022,0.32082576981536765,0.93114406209765954,0.36465152628265518,0.91312325022861884,0.40768361494168887,0.89311501618679157,0.44982837600763581,0.87116290809995045,0.49099408097332226,0.8473147049577775,0.531091132257275,0.82162231262040064,0.57003225821378267,0.79414165084475352,0.60773270308053162,0.76493253157464769,0.64411041145039771,0.73405852875946009,0.67908620686588594,0.70158683998477667,0.71258396414750691,0.66758814021615354,0.74453077508101517,0.63213642797432634,0.7748571071028898,0.59530886427666596,0.80349695463867565,0.55718560469542855,0.83038798276479753,0.51784962489832531,0.85547166288116394,0.47738654005112696,0.87869340009926888,0.43588441847537118,0.90000265206853003,0.39343358996675243,0.9193530389822363,0.3501264491913908,0.93670244452367502,0.30605725458788741,0.95201310753272983,0.26132192321286074,0.96525170419343564,0.21601782197648356,0.976389420563607,0.17024355572239863,0.98540201528868132,0.12409875261325937,0.99226987236327646,0.077683847289006236,0.99697804382562927,0.031099862269836912,0.99951628229198808,-0.015551811920350891,0.99987906326014953,-0.062169637431480559,0.99806559713359433,-0.10865215008547459,0.99407983094005259,-0.15489818021408475,0.98793043974075667,-0.20080707285571855,0.97963080774908162,-0.24627890683200143,0.96919899919966612,-0.29121471222725215,0.95665771903141972,-0.33551668579752486,0.9420342634699892,-0.37908840384037923,0.92536046061724153,-0.42183503206206219,0.9066726011770726,-0.46366353198532745,0.88601135946831477,-0.50448286344863968,0.86342170489666359,-0.54420418275602744,0.83895280407830108,-0.5827410360463009,0.81265791382825026,-0.62000954746077497,0.78459426524636611,-0.65592860169993994,0.75482293915325693,-0.69042002057174667,0.72340873314724985,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.99997803599789992,0.0066277840778626584,0.99991214495643443,0.013255277010398508,0.99980232977006556,0.019882187665070172,0.99964859526275518,0.02650822493491857,0.99945094818775349,0.033133097751350697,0.99920939722730184,0.039756515096925633,0.99892395299225201,0.046378186018138409,0.99859462802159948,0.05299781963820098,0.99822143678193298,0.059615125169819885,0.9978043956667989,0.06622981192796995,0.99734352299598095,0.072841589342663451,0.99683883901469583,0.079450166971714378,0.99629036589270359,0.086055254513496854,0.99569812772333388,0.092656561819697614,0.99506215052242741,0.099253798908061602,0.9943824622271934,0.10584667597513026,0.99365909269498209,0.11243490340897211,0.99289207370197341,0.11901819180190477,0.9920814389417808,0.12559625196320806,0.99122722402397145,0.13216879493182762,0.99032946647250186,0.13873553198906824,0.9893882057240696,0.14529617467127695,0.9884034831263806,0.15185043478251442,0.98737534193633336,0.15839802440721498,0.9863038273181185,0.16493865592283408,0.98518898634123453,0.17147204201248303,0.98403086797842065,0.17799789567755023,0.98282952310350513,0.18451593025030852,0.98158500448917063,0.19102585940650776,0.98029736680463619,0.19752739717795267,0.97896666661325527,0.20402025796506468,0.97759296237003157,0.21050415654942789,0.97617631441905084,0.21697880810631806,0.97471678499083025,0.22344392821721437,0.97321443819958453,0.22989923288229347,0.97166934004041006,0.23634443853290488,0.97008155838638499,0.24277926204402778,0.96845116298558875,0.24920342074670784,0.96677822545803715,0.25561663244047467,0.96506281929253701,0.26201861540573806,0.96330501984345762,0.26840908841616334,0.96150490432742042,0.27478777075102528,0.95966255181990756,0.28115438220753958,0.95777804325178761,0.28750864311317142,0.95585146140576083,0.29385027433792088,0.95388289091272271,0.30017899730658509,0.95187241824804603,0.30649453401099475,0.94982013172778268,0.31279660702222717,0.9477261215047833,0.31908493950279243,0.94559047956473785,0.325359255218795,0.9434132997221345,0.3316192785520678,0.94119467761613851,0.3378647345122795,0.93893471070639101,0.34409534874901443,0.93663349826872788,0.35031084756382425,0.93429114139081881,0.35651095792225101,0.9319077429677266,0.36269540746582069,0.92948340769738702,0.36886392452400785,0.92701824207601025,0.37501623812616919,0.92451235439340185,0.38115207801344708,0.92196585472820669,0.38727117465064104,0.91937885494307248,0.39337325923804833,0.91675146867973689,0.39945806372327158,0.9140838113540346,0.40552532081299392,0.91137600015082787,0.4115747639847202,0.90862815401885866,0.41760612749848552,0.90584039366552316,0.4236191464085281,0.90301284155157013,0.42961355657492795,0.90014562188572067,0.43558909467521006,0.89723886061921221,0.44154549821591182,0.89429268544026597,0.4474825055441134,0.89130722576847754,0.45339985585893189,0.88828261274913189,0.45929728922297791,0.88521897924744242,0.46517454657377377,0.88211645984271458,0.47103136973513399,0.87897519082243369,0.47686750142850604,0.87579531017627854,0.48268268528427238,0.8725769575900596,0.48847666585301225,0.8693202744395826,0.49424918861672285,0.86602540378443871,0.49999999999999994,0.86269249036171991,0.50572884738117707,0.85932168057966107,0.51143547910342224,0.85591312251120844,0.51711964448579317,0.85246696588751514,0.5227810938342492,0.84898336209136394,0.52841957845261944,0.84546246415051685,0.53403485065352807,0.84190442673099353,0.53962666376927415,0.83830940613027649,0.54519477216266765,0.83467756027044604,0.5507389312378197,0.83100904869124237,0.55625889745088708,0.82730403254305729,0.56175442832077083,0.82356267457985577,0.56722528243976789,0.81978513915202633,0.57267121948417554,0.81597159219916104,0.5780920002248483,0.81212220124276635,0.58348738653770715,0.8082371353789044,0.58885714141419954,0.80431656527076478,0.59420102897171057,0.80036066314116772,0.59951881446392508,0.79636960276499857,0.60481026429113971,0.79234355946157431,0.61007514601052437,0.78828271008694206,0.61531322834633262,0.78418723302611015,0.62052428120006164,0.78005730818521213,0.62570807566055997,0.77589311698360386,0.6308643840140824,0.77169484234589381,0.63599297975429425,0.767462668693908,0.64109363759222016,0.76319678193858831,0.64616613346614116,0.75889736947182607,0.65121024455143728,0.75456462015823011,0.65622574927037558,0.75019872432683066,0.66121242730184371,0.74579987376271795,0.66617005959102815,0.74136826169861814,0.67109842835903677,0.73690408280640463,0.6759973171124658,0.73240753318854646,0.68086651065290926,0.72787881036949409,0.68570579508641316,0.72331811328700268,0.69051495783287042,0.71872564228339264,0.69529378763535965,0.71410159909674964,0.70004207456942535,0.70944618685206229,0.70475961005229915,0,0.99991214495643443,0.013255277010398508,0.99964859526275518,0.02650822493491857,0.99920939722730184,0.039756515096925633,0.99859462802159948,0.05299781963820098,0.9978043956667989,0.06622981192796995,0.99683883901469583,0.079450166971714378,0.99569812772333388,0.092656561819697614,0.9943824622271934,0.10584667597513026,0.99289207370197341,0.11901819180190477,0.99122722402397145,0.13216879493182762,0.9893882057240696,0.14529617467127695,0.98737534193633336,0.15839802440721498,0.98518898634123453,0.17147204201248303,0.98282952310350513,0.18451593025030852,0.98029736680463619,0.19752739717795267,0.97759296237003157,0.21050415654942789,0.97471678499083025,0.22344392821721437,0.97166934004041006,0.23634443853290488,0.96845116298558875,0.24920342074670784,0.96506281929253701,0.26201861540573806,0.96150490432742042,0.27478777075102528,0.95777804325178761,0.28750864311317142,0.95388289091272271,0.30017899730658509,0.94982013172778268,0.31279660702222717,0.94559047956473785,0.325359255218795,0.94119467761613851,0.3378647345122795,0.93663349826872788,0.35031084756382425,0.9319077429677266,0.36269540746582069,0.92701824207601025,0.37501623812616919,0.92196585472820669,0.38727117465064104,0.91675146867973689,0.39945806372327158,0.91137600015082787,0.4115747639847202,0.90584039366552316,0.4236191464085281,0.90014562188572067,0.43558909467521006,0.89429268544026597,0.4474825055441134,0.88828261274913189,0.45929728922297791,0.88211645984271458,0.47103136973513399,0.87579531017627854,0.48268268528427238,0.8693202744395826,0.49424918861672285,0.86269249036171991,0.50572884738117707,0.85591312251120844,0.51711964448579317,0.84898336209136394,0.52841957845261944,0.84190442673099353,0.53962666376927415,0.83467756027044604,0.5507389312378197,0.82730403254305729,0.56175442832077083,0.81978513915202633,0.57267121948417554,0.81212220124276635,0.58348738653770715,0.80431656527076478,0.59420102897171057,0.79636960276499857,0.60481026429113971,0.78828271008694206,0.61531322834633262,0.78005730818521213,0.62570807566055997,0.77169484234589381,0.63599297975429425,0.76319678193858831,0.64616613346614116,0.75456462015823011,0.65622574927037558,0.74579987376271795,0.66617005959102815,0.73690408280640463,0.6759973171124658,0.72787881036949409,0.68570579508641316,0.71872564228339264,0.69529378763535965,0.70944618685206229,0.70475961005229915,0.70004207456942535,0.71410159909674975,0.69051495783287042,0.72331811328700268,0.68086651065290937,0.73240753318854646,0.67109842835903677,0.74136826169861825,0.66121242730184371,0.75019872432683066,0.65121024455143739,0.75889736947182607,0.64109363759222004,0.767462668693908,0.6308643840140824,0.77589311698360386,0.62052428120006176,0.78418723302611015,0.61007514601052448,0.79234355946157431,0.59951881446392496,0.80036066314116783,0.58885714141419954,0.8082371353789044,0.57809200022484841,0.81597159219916104,0.567225282439768,0.82356267457985577,0.55625889745088697,0.83100904869124237,0.54519477216266765,0.8383094061302766,0.53403485065352807,0.84546246415051685,0.5227810938342492,0.85246696588751514,0.51143547910342224,0.85932168057966096,0.50000000000000011,0.8660254037844386,0.48847666585301219,0.8725769575900596,0.47686750142850598,0.87897519082243381,0.46517454657377377,0.88521897924744242,0.45339985585893194,0.89130722576847754,0.44154549821591188,0.89723886061921221,0.429613556574928,0.90301284155157013,0.41760612749848564,0.90862815401885855,0.40552532081299381,0.91408381135403471,0.39337325923804828,0.91937885494307259,0.38115207801344703,0.92451235439340196,0.36886392452400785,0.92948340769738702,0.35651095792225101,0.93429114139081881,0.34409534874901448,0.93893471070639101,0.33161927855206785,0.9434132997221345,0.31908493950279254,0.9477261215047833,0.30649453401099475,0.95187241824804614,0.29385027433792088,0.95585146140576083,0.28115438220753958,0.95966255181990756,0.26840908841616334,0.96330501984345762,0.25561663244047472,0.96677822545803715,0.24277926204402783,0.97008155838638499,0.22989923288229355,0.97321443819958453,0.21697880810631798,0.97617631441905084,0.20402025796506462,0.97896666661325527,0.19102585940650774,0.98158500448917063,0.17799789567755026,0.98403086797842065,0.1649386559228341,0.9863038273181185,0.15185043478251448,0.9884034831263806,0.13873553198906832,0.99032946647250186,0.12559625196320817,0.9920814389417808,0.11243490340897204,0.9936590926949822,0.099253798908061547,0.99506215052242741,0.08605525451349684,0.99629036589270359,0.072841589342663465,0.99734352299598095,0.059615125169819927,0.99822143678193298,0.046378186018138472,0.99892395299225201,0.033133097751350794,0.99945094818775349,0.019882187665070074,0.99980232977006556,0.0066277840778625943,0.99997803599789992,0,0.99980232977006556,0.019882187665070172,0.99920939722730184,0.039756515096925633,0.99822143678193298,0.059615125169819892,0.99683883901469583,0.079450166971714378,0.99506215052242741,0.099253798908061602,0.99289207370197341,0.11901819180190479,0.99032946647250186,0.13873553198906824,0.98737534193633336,0.15839802440721498,0.98403086797842065,0.17799789567755026,0.98029736680463619,0.19752739717795267,0.97617631441905084,0.21697880810631806,0.97166934004041006,0.2363444385329049,0.96677822545803715,0.25561663244047472,0.96150490432742042,0.27478777075102528,0.95585146140576083,0.29385027433792088,0.94982013172778268,0.31279660702222717,0.9434132997221345,0.3316192785520678,0.93663349826872788,0.3503108475638243,0.92948340769738702,0.36886392452400785,0.92196585472820669,0.38727117465064104,0.9140838113540346,0.40552532081299392,0.90584039366552316,0.4236191464085281,0.89723886061921221,0.44154549821591188,0.88828261274913189,0.45929728922297797,0.87897519082243369,0.47686750142850604,0.86932027443958249,0.49424918861672296,0.85932168057966107,0.51143547910342224,0.84898336209136394,0.52841957845261944,0.83830940613027649,0.54519477216266765,0.82730403254305729,0.56175442832077083,0.81597159219916093,0.57809200022484841,0.80431656527076478,0.59420102897171057,0.79234355946157431,0.61007514601052437,0.78005730818521213,0.62570807566055997,0.767462668693908,0.64109363759222016,0.75456462015823011,0.65622574927037569,0.74136826169861814,0.67109842835903677,0.72787881036949409,0.68570579508641316,0.71410159909674964,0.70004207456942535,0.70004207456942535,0.71410159909674975,0.68570579508641316,0.72787881036949409,0.67109842835903677,0.74136826169861825,0.65622574927037558,0.75456462015823011,0.64109363759222004,0.767462668693908,0.62570807566055986,0.78005730818521213,0.61007514601052437,0.79234355946157431,0.59420102897171045,0.80431656527076478,0.5780920002248483,0.81597159219916104,0.56175442832077083,0.82730403254305729,0.54519477216266765,0.8383094061302766,0.52841957845261944,0.84898336209136394,0.51143547910342202,0.85932168057966107,0.4942491886167229,0.86932027443958249,0.47686750142850598,0.87897519082243381,0.4592972892229778,0.88828261274913189,0.44154549821591188,0.89723886061921221,0.42361914640852805,0.90584039366552327,0.40552532081299381,0.91408381135403471,0.38727117465064109,0.92196585472820669,0.36886392452400785,0.92948340769738702,0.35031084756382425,0.93663349826872788,0.33161927855206769,0.94341329972213461,0.31279660702222717,0.94982013172778268,0.29385027433792088,0.95585146140576083,0.27478777075102523,0.96150490432742053,0.25561663244047472,0.96677822545803715,0.23634443853290488,0.97166934004041006,0.21697880810631798,0.97617631441905084,0.19752739717795251,0.98029736680463619,0.17799789567755026,0.98403086797842065,0.1583980244072149,0.98737534193633347,0.1387355319890681,0.99032946647250186,0.1190181918019048,0.99289207370197341,0.099253798908061547,0.99506215052242741,0.079450166971714253,0.99683883901469583,0.059615125169819927,0.99822143678193298,0.039756515096925606,0.99920939722730184,0.019882187665070074,0.99980232977006556,-1.6081226496766366e-16,1,-0.019882187665070175,0.99980232977006556,-0.039756515096925703,0.99920939722730184,-0.059615125169820031,0.99822143678193298,-0.07945016697171435,0.99683883901469583,-0.099253798908061644,0.99506215052242741,-0.1190181918019049,0.99289207370197341,-0.13873553198906818,0.99032946647250186,-0.15839802440721501,0.98737534193633336,-0.17799789567755034,0.98403086797842065,-0.19752739717795284,0.98029736680463608,-0.21697880810631806,0.97617631441905084,-0.23634443853290496,0.97166934004040995,-0.25561663244047483,0.96677822545803704,-0.27478777075102528,0.96150490432742042,-0.29385027433792094,0.95585146140576083,-0.31279660702222728,0.94982013172778257,-0.33161927855206796,0.9434132997221345,-0.3503108475638243,0.93663349826872788,-0.3688639245240079,0.92948340769738702,-0.3872711746506412,0.92196585472820658,-0.40552532081299392,0.9140838113540346,-0.42361914640852816,0.90584039366552316,-0.44154549821591194,0.89723886061921221,-0.45929728922297808,0.88828261274913178,-0.47686750142850626,0.87897519082243358,-0.49424918861672279,0.8693202744395826,-0.51143547910342213,0.85932168057966107,-0.52841957845261955,0.84898336209136382,-0.54519477216266776,0.83830940613027649,-0.56175442832077105,0.82730403254305718,-0.57809200022484863,0.81597159219916082,-0.59420102897171079,0.80431656527076467,-0.61007514601052437,0.79234355946157442,-0.62570807566055997,0.78005730818521213,-0.64109363759222016,0.76746266869390789,-0.65622574927037569,0.75456462015823,-0.67109842835903688,0.74136826169861803,-0.68570579508641338,0.72787881036949398,-0.70004207456942524,0.71410159909674986,0,0.99964859526275518,0.02650822493491857,0.99859462802159948,0.05299781963820098,0.99683883901469583,0.079450166971714378,0.9943824622271934,0.10584667597513026,0.99122722402397145,0.13216879493182762,0.98737534193633336,0.15839802440721498,0.98282952310350513,0.18451593025030852,0.97759296237003157,0.21050415654942789,0.97166934004041006,0.23634443853290488,0.96506281929253701,0.26201861540573806,0.95777804325178761,0.28750864311317142,0.94982013172778268,0.31279660702222717,0.94119467761613851,0.3378647345122795,0.9319077429677266,0.36269540746582069,0.92196585472820669,0.38727117465064104,0.91137600015082787,0.4115747639847202,0.90014562188572067,0.43558909467521006,0.88828261274913189,0.45929728922297791,0.87579531017627854,0.48268268528427238,0.86269249036171991,0.50572884738117707,0.84898336209136394,0.52841957845261944,0.83467756027044604,0.5507389312378197,0.81978513915202633,0.57267121948417554,0.80431656527076478,0.59420102897171057,0.78828271008694206,0.61531322834633262,0.77169484234589381,0.63599297975429425,0.75456462015823011,0.65622574927037558,0.73690408280640463,0.6759973171124658,0.71872564228339264,0.69529378763535965,0.70004207456942535,0.71410159909674975,0.68086651065290937,0.73240753318854646,0.66121242730184371,0.75019872432683066,0.64109363759222004,0.767462668693908,0.62052428120006176,0.78418723302611015,0.59951881446392496,0.80036066314116783,0.57809200022484841,0.81597159219916104,0.55625889745088697,0.83100904869124237,0.53403485065352807,0.84546246415051685,0.51143547910342224,0.85932168057966096,0,0.99859462802159948,0.05299781963820098,0.9943824622271934,0.10584667597513026,0.98737534193633336,0.15839802440721498,0.97759296237003157,0.21050415654942789,0.96506281929253701,0.26201861540573806,0.94982013172778268,0.31279660702222717,0.9319077429677266,0.36269540746582069,0.91137600015082787,0.4115747639847202,0.88828261274913189,0.45929728922297791,0.86269249036171991,0.50572884738117707,0.83467756027044604,0.5507389312378197,0.80431656527076478,0.59420102897171057,0.77169484234589381,0.63599297975429425,0.73690408280640463,0.6759973171124658,0.70004207456942535,0.71410159909674975,0.66121242730184371,0.75019872432683066,0.62052428120006176,0.78418723302611015,0.57809200022484841,0.81597159219916104,0.53403485065352807,0.84546246415051685,0.48847666585301219,0.8725769575900596,0.44154549821591188,0.89723886061921221,0.39337325923804828,0.91937885494307259,0.34409534874901448,0.93893471070639101,0.29385027433792088,0.95585146140576083,0.24277926204402783,0.97008155838638499,0.19102585940650774,0.98158500448917063,0.13873553198906832,0.99032946647250186,0.08605525451349684,0.99629036589270359,0.033133097751350794,0.99945094818775349,-0.019882187665070175,0.99980232977006556,-0.07284158934266334,0.99734352299598095,-0.12559625196320806,0.9920814389417808,-0.17799789567755034,0.98403086797842065,-0.22989923288229344,0.97321443819958453,-0.28115438220753969,0.95966255181990756,-0.33161927855206774,0.94341329972213461,-0.38115207801344714,0.92451235439340185,-0.42961355657492789,0.90301284155157024,-0.47686750142850587,0.87897519082243381,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.99996213372321685,0.008702362880934544,0.99984853776057703,0.017404066709706054,0.99965922071499314,0.026104452484063196,0.99939419692392817,0.03480286130157427,0.99905348645831082,0.043498634409527559,0.99863711512101461,0.052191113254820364,0.99814511444490406,0.060879639533832908,0.99757752169044678,0.069563555242283345,0.99693437984289146,0.078242202725060134,0.9962157376090125,0.086914924726027909,0.99542164941342148,0.095581064437803148,0.99455217539444507,0.10423996555149591,0.99360738139957094,0.11289097230641378,0.99258733898046114,0.12153342953972431,0.99149212538753262,0.1301666827360721,0.99032182356410758,0.13879007807714702,0.98907652214013153,0.1474029624911995,0.98775631542546116,0.15600468370249923,0.98636130340272232,0.16459459028073392,0.98489159171973784,0.1731720316903434,0.98334729168152624,0.18173635833978666,0.98172852024187307,0.19028692163073704,0.98003539999447298,0.19882307400720203,0.9782680591636459,0.20734416900456451,0.97642663159462595,0.21584956129854119,0.97451125674342509,0.22433860675405454,0.9725220796662718,0.23281066247401491,0.97045925100862573,0.24126508684800863,0.96832292699376865,0.24970123960088891,0.96611326941097353,0.25811848184126557,0.96383044560325148,0.26651617610988965,0.9614746284546789,0.27489368642793022,0.95904599637730414,0.28325037834513833,0.95654473329763612,0.2915856189878957,0.95397102864271488,0.29989877710714391,0.95132507732576632,0.30818922312619029,0.94860707973144009,0.31645632918838773,0.94581724170063464,0.32469946920468351,0.9429557745149082,0.33291801890103473,0.94002289488047741,0.34111135586568636,0.93701882491180655,0.34927885959630778,0.93394379211478529,0.35741991154698516,0.93079802936949974,0.36553389517506568,0.92758177491259552,0.37362019598784951,0.92429527231923547,0.38167820158912713,0.92093877048465334,0.3897073017255579,0.91751252360530411,0.39770688833288542,0.91401679115961321,0.40567635558198861,0.91045183788832518,0.41361509992476209,0.90681793377445463,0.42152252013982461,0.90311535402283949,0.42939801737805122,0.89934437903929931,0.43724099520792542,0.89550529440939886,0.44505085966070868,0.89159839087682058,0.4528270192754229,0.8876239643213456,0.46056888514364347,0.88358231573644574,0.468275870954099,0.87947375120648907,0.47594739303707362,0.87529858188355891,0.4835828704086102,0.87105712396388979,0.49118172481450978,0.86674969866392049,0.49874338077412411,0.86237663219596861,0.50626726562393798,0.85793825574352456,0.51375280956093916,0.85343490543617073,0.52119944568577037,0.84886692232412553,0.52860661004566245,0.84423465235241468,0.53597374167714362,0.83953844633467201,0.54330028264852315,0.83477865992657119,0.5505856781021442,0.82995565359889145,0.55782937629640561,0.82506979261021773,0.56503082864754584,0.82012144697927924,0.57218948977118866,0.81511099145692645,0.57930481752364738,0.81003880549775065,0.58637627304298168,0.80490527323134642,0.59340332078980773,0.79971078343322155,0.6003854285878556,0.7944557294953527,0.60732206766427244,0.78914050939639357,0.61421271268966782,0.78376552567153523,0.62105684181789833,0.77833118538202062,0.62785393672558809,0.77283790008431652,0.63460348265138289,0.76728608579894619,0.64130496843493445,0.76167616297898233,0.64795788655561148,0.75600855647820542,0.65456173317093636,0.75028369551892848,0.66111600815474125,0.74450201365949065,0.66762021513504488,0.73866394876142294,0.67407386153164395,0.73276994295628817,0.68047645859341688,0.72682044261219669,0.68682752143533854,0.72081589830000181,0.69312656907520243,0.7147567647591776,0.6993731244700454,0.70864350086337924,0.70556671455227671,0.70247656958569227,0.71170687026550339,0.69625643796356995,0.71779312660005423,0.68998357706346369,0.72382502262819515,0.68365846194514757,0.72980210153903724,0.67728157162574099,0.7357239106731317,0.67085338904343184,0.74159000155675092,0.66437440102090173,0.74739992993585302,0.65784509822845816,0.75315325580972581,0.65126597514687457,0.75884954346430922,0.64463753002994229,0.76448836150519339,0.63796026486673607,0.77006928289028898,0.63123468534359761,0.77559188496216835,0.62446130080583839,0.78105574948007406,0.61764062421916588,0.78646046265159397,0.61077317213083471,0.79180561516399828,0.60385946463052842,0.79709080221523798,0.59690002531097031,0.80231562354460173,0.58989538122827156,0.80747968346302812,0.58284606286201546,0.81258259088307294,0.57575260407508266,0.81762395934852661,0.56861554207322074,0.82260340706368185,0.56143541736436009,0.82752055692224757,0.55421277371767985,0.83237503653590894,0.54694815812242681,0.83716647826252866,0.53964212074649076,0.84189451923398928,0.53229521489473863,0.84655880138367468,0.52490799696711132,0.85115897147358732,0.51748102641648641,0.85569468112109925,0.5100148657063085,0.86016558682533684,0.50251008026799404,0.86457134999319407,0.49496723845810808,0.86891163696497609,0.48738691151532193,0.87318611903966714,0.47976967351715194,0.87739447249982461,0.4721161013364828,0.88153637863609458,0.4644267745978794,0.88561152377134889,0.45670227563369131,0.88961959928444012,0.44894318943994993,0.89356030163357481,0.44115010363206597,0.89743333237930134,0.43332360840032791,0.90123839820711105,0.42546429646520512,0.9049752109496525,0.41757276303245966,0.90864348760855451,0.4096496057480698,0.91224295037585845,0.40169542465296937,0.91577332665505751,0.393710822137604,0.91923434908174095,0.38569640289631146,0.92262575554384252,0.37765277388152624,0.92594728920149061,0.3695805442578135,0.92919869850645953,0.36148032535573549,0.93237973722122014,0.35335273062555445,0.93549016443758737,0.34519837559077354,0.93852974459496552,0.33701787780152215,0.94149824749818745,0.32881185678778729,0.94439544833494815,0.32058093401249499,0.94722112769282985,0.31232573282444526,0.94997507157591943,0.304046878411104,0.95265707142101419,0.29574499775125701,0.95526692411341707,0.28742071956752585,0.95780443200231935,0.27907467427875393,0.9602694029157689,0.27070749395226318,0.96266165017522398,0.26231981225598588,0.96498099260969095,0.25391226441047515,0.96722725456944447,0.24548548714079901,0.96940026593933049,0.23704011862831822,0.97149986215164885,0.22857679846235601,0.97352588419861719,0.22009616759176023,0.97547817864441222,0.21159886827636254,0.97735659763679017,0.20308554403833831,0.97916099891828423,0.19455683961347187,0.98089124583697751,0.18601340090232768,0.98254720735685264,0.1774558749213356,0.98412875806771505,0.16888490975379036,0.98563577819469095,0.16030115450077065,0.98706815360729783,0.15170525923198094,0.98842577582808788,0.14309787493651993,0.98970854204086367,0.13447965347358026,0.99091635509846432,0.12585124752308033,0.99204912353012253,0.11721331053623596,0.99310676154839261,0.10856649668607271,0.99408918905564658,0.099911460817883671,0.99499633165014056,0.091248858399636118,0.99582812063164949,0.082579345472332172,0.99658449300666985,0.07390357860032376,0.99726539149319016,0.065222214821590255,0.99787076452502921,0.056535911597979056,0.99840056625574158,0.047845326765414337,0.99885475656208933,0.039151118484077228,0.99923330104708064,0.030453945188562568,0.99953617104257519,0.021754465538012604,0.99976334361145458,0.013053338366235975,0.9999148015493603,0.0043512226318123065,0.99999053338599586,0,0.99984853776057703,0.017404066709706054,0.99939419692392817,0.03480286130157427,0.99863711512101461,0.052191113254820364,0.99757752169044678,0.069563555242283345,0.9962157376090125,0.086914924726027909,0.99455217539444507,0.10423996555149591,0.99258733898046114,0.12153342953972431,0.99032182356410758,0.13879007807714702,0.98775631542546116,0.15600468370249923,0,0.99939419692392817,0.03480286130157427,0.99757752169044678,0.069563555242283345,0.99455217539444507,0.10423996555149591,0.99032182356410758,0.13879007807714702,0.98489159171973784,0.1731720316903434,0.9782680591636459,0.20734416900456451,0.97045925100862573,0.24126508684800863,0.9614746284546789,0.27489368642793022,0.95132507732576632,0.30818922312619029,0,0.99863711512101461,0.052191113254820364,0.99455217539444507,0.10423996555149591,0.98775631542546116,0.15600468370249923,0.9782680591636459,0.20734416900456451,0.96611326941097353,0.25811848184126557,0.95132507732576632,0.30818922312619029,0.93394379211478529,0.35741991154698516,0.91401679115961321,0.40567635558198861,0.89159839087682058,0.4528270192754229,0,0.99757752169044678,0.069563555242283345,0.99032182356410758,0.13879007807714702,0.9782680591636459,0.20734416900456451,0.9614746284546789,0.27489368642793022,0.94002289488047741,0.34111135586568636,0.91401679115961321,0.40567635558198861,0.88358231573644574,0.468275870954099,0.84886692232412553,0.52860661004566245,0.81003880549775065,0.58637627304298168,0,0.9962157376090125,0.086914924726027909,0.98489159171973784,0.1731720316903434,0.96611326941097353,0.25811848184126557,0.94002289488047741,0.34111135586568636,0.90681793377445463,0.42152252013982461,0.86674969866392049,0.49874338077412411,0.82012144697927924,0.57218948977118866,0.76728608579894619,0.64130496843493445,0.70864350086337924,0.70556671455227671,0,0.99455217539444507,0.10423996555149591,0.9782680591636459,0.20734416900456451,0.95132507732576632,0.30818922312619029,0.91401679115961321,0.40567635558198861,0.86674969866392049,0.49874338077412411,0.81003880549775065,0.58637627304298168,0.74450201365949065,0.66762021513504488,0.67085338904343184,0.74159000155675092,0.58989538122827156,0.80747968346302812,0,0.99258733898046114,0.12153342953972431,0.97045925100862573,0.24126508684800863,0.93394379211478529,0.35741991154698516,0.88358231573644574,0.468275870954099,0.82012144697927924,0.57218948977118866,0.74450201365949065,0.66762021513504488,0.65784509822845816,0.75315325580972581,0.56143541736436009,0.82752055692224757,0.45670227563369131,0.88961959928444012,0,0.99032182356410758,0.13879007807714702,0.9614746284546789,0.27489368642793022,0.91401679115961321,0.40567635558198861,0.84886692232412553,0.52860661004566245,0.76728608579894619,0.64130496843493445,0.67085338904343184,0.74159000155675092,0.56143541736436009,0.82752055692224757,0.44115010363206597,0.89743333237930134,0.31232573282444526,0.94997507157591943,0,0.98775631542546116,0.15600468370249923,0.95132507732576632,0.30818922312619029,0.89159839087682069,0.45282701927542285,0.81003880549775065,0.58637627304298168,0.70864350086337924,0.70556671455227671,0.58989538122827168,0.80747968346302812,0.45670227563369153,0.88961959928444001,0.31232573282444526,0.94997507157591943,0.16030115450077065,0.98706815360729783,0,0.98489159171973784,0.1731720316903434,0.94002289488047741,0.34111135586568636,0.86674969866392049,0.49874338077412411,0.76728608579894619,0.64130496843493445,0.64463753002994229,0.76448836150519339,0.50251008026799404,0.86457134999319407,0.34519837559077354,0.93852974459496552,0.1774558749213356,0.98412875806771505,0.0043512226318123065,0.99999053338599586,0,0.98172852024187307,0.19028692163073704,0.92758177491259552,0.37362019598784951,0.83953844633467201,0.54330028264852315,0.72081589830000181,0.69312656907520243,0.57575260407508255,0.81762395934852672,0.4096496057480698,0.91224295037585845,0.22857679846235601,0.97352588419861719,0.039151118484077228,0.99923330104708064,-0.15170525923198125,0.98842577582808788,0,0.9782680591636459,0.20734416900456451,0.91401679115961321,0.40567635558198861,0.81003880549775065,0.58637627304298168,0.67085338904343184,0.74159000155675092,0.50251008026799404,0.86457134999319407,0.31232573282444526,0.94997507157591943,0.10856649668607271,0.99408918905564658,-0.099911460817883768,0.99499633165014056,-0.30404687841110434,0.95265707142101408,0,0.97451125674342509,0.22433860675405454,0.89934437903929931,0.43724099520792542,0.77833118538202062,0.62785393672558809,0.61764062421916588,0.78646046265159397,0.42546429646520512,0.9049752109496525,0.21159886827636254,0.97735659763679017,-0.013053338366236076,0.9999148015493603,-0.23704011862831831,0.97149986215164885,-0.44894318943994999,0.89356030163357481,0,0.97045925100862573,0.24126508684800863,0.88358231573644574,0.468275870954099,0.74450201365949065,0.66762021513504488,0.56143541736436009,0.82752055692224757,0.34519837559077354,0.93852974459496552,0.10856649668607271,0.99408918905564658,-0.1344796534735806,0.99091635509846421,-0.36958054425781361,0.92919869850645953,-0.58284606286201568,0.81258259088307283,0,0.96611326941097353,0.25811848184126557,0.86674969866392049,0.49874338077412411,0.70864350086337924,0.70556671455227671,0.50251008026799404,0.86457134999319407,0.26231981225598566,0.96498099260969095,0.0043512226318123065,0.99999053338599586,-0.25391226441047549,0.96722725456944436,-0.49496723845810836,0.86891163696497598,-0.70247656958569238,0.71170687026550328,0,0.9614746284546789,0.27489368642793022,0.84886692232412553,0.52860661004566245,0.67085338904343184,0.74159000155675092,0.44115010363206597,0.89743333237930134,0.1774558749213356,0.98412875806771505,-0.099911460817883768,0.99499633165014056,-0.36958054425781361,0.92919869850645953,-0.61077317213083493,0.79180561516399817,-0.80490527323134642,0.59340332078980773,0,0.95654473329763612,0.2915856189878957,0.82995565359889145,0.55782937629640561,0.63123468534359761,0.77559188496216835,0.37765277388152624,0.92594728920149061,0.09124885839963634,0.99582812063164949,-0.20308554403833864,0.97916099891828412,-0.47976967351715183,0.87739447249982461,-0.7147567647591776,0.6993731244700454,-0.8876239643213456,0.4605688851436433,0,0.95132507732576632,0.30818922312619029,0.81003880549775065,0.58637627304298168,0.58989538122827168,0.80747968346302812,0.31232573282444526,0.94997507157591943,0.0043512226318123065,0.99999053338599586,-0.30404687841110412,0.95265707142101419,-0.58284606286201535,0.81258259088307305,-0.80490527323134642,0.59340332078980773,-0.94860707973144009,0.31645632918838767,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.99958846031494009,0.028686408022048568,0.99835417998958509,0.057349204853451345,0.99629817493460782,0.085964798737446474,0.99342213740535379,0.11450963676904431,0.98972843460898097,0.1429602242809376,0.98522010675606064,0.17129314418147759,0.9799008645582421,0.19948507622879882,0.97377508617404307,0.22751281622522937,0.9668478136052775,0.25535329511618704,0.95912474854708807,0.28298359797784245,0.95061224769499808,0.31038098287792004,0.94131731751284708,0.3375228995941133,0.9312476084659147,0.36438700817470759,0.92041140872398064,0.39095119732613359,0.90881763733950294,0.41719360261231686,0.89647583690652999,0.44309262445084391,0.88339616570638846,0.46862694589113318,0.86958938934661101,0.49377555015997726,0.8550668718999872,0.5185177379600151,0.83984056655102968,0.54283314450689679,0.82392300575755417,0.56670175629111763,0.80732729093547262,0.59010392755072461,0.79006708167528727,0.61302039644133788,0.77215658449916424,0.63543230089017744,0.75361054116783777,0.65732119412104673,0.73444421654697112,0.67866905983749237,0.71467338604296093,0.69945832705164701,0.6943143226185251,0.71967188454654718,0.67338378339876315,0.7392930949600216,0.65189899587871247,0.75830580847856255,0.62987764374375232,0.77669437612990266,0.60733785231452686,0.79444366266336219,0.58429817362836833,0.81153905900736112,0.56077757116949789,0.8279664942938445,0.5367954042605716,0.84371244743972429,0.51237141212842352,0.85876395827580299,0,0.99835417998958509,0.057349204853451345,0.99342213740535379,0.11450963676904431,0.98522010675606064,0.17129314418147759,0.97377508617404307,0.22751281622522937,0.95912474854708807,0.28298359797784245,0.94131731751284708,0.3375228995941133,0.92041140872398064,0.39095119732613359,0.89647583690652999,0.44309262445084391,0.86958938934661101,0.49377555015997726,0.83984056655102968,0.54283314450689679,0.80732729093547262,0.59010392755072461,0.77215658449916424,0.63543230089017744,0.73444421654697112,0.67866905983749237,0.6943143226185251,0.71967188454654718,0.65189899587871247,0.75830580847856255,0.60733785231452686,0.79444366266336219,0.56077757116949789,0.8279664942938445,0.51237141212842352,0.85876395827580299,0.46227871084165822,0.88673468044425474,0.41066435444950905,0.91178659125069828,0.35769823883312546,0.93383722882292519,0.30355470937841844,0.95281401039981772,0.24841198709381002,0.96865447124767079,0.19245158197082998,0.98130647027160933,0.13585769551856253,0.99072836164530265,0.078816614438588464,0.99688913189403305,0.021516097436222254,0.99976850197989087,-0.035855242813557314,0.99935699405306655,-0.09310856051113521,0.99565596264952094,-0.15005539834465281,0.98867759023234036,-0.20650830782363735,0.97844484709145352,-0.26228146629195598,0.96499141573370562,-0.31719128858910611,0.94836158001217152,-0.37105703134647755,0.92861007935965201,-0.42370138792945899,0.90580192860616615,-0.47495107206705034,0.88001220397353552,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.99988257690368154,0.015324242377796345,0.99953033519109313,0.030644885915615216,0.99894335758485986,0.045958332618653008,0.9981217819344379,0.061260986182255374,0.99706580118374044,0.076549252836495635,0.99577566332582645,0.091819542190158046,0.99425167134465986,0.10706826807392743,0.99249418314395499,0.12229184938258741,0.99050361146312449,0.13748671091602935,0.98828042378034853,0.15264928421887447,0.98582514220279016,0.16777600841851203,0.98313834334397954,0.18286333106135669,0.98022065818839921,0.19790770894712867,0.97707277194329922,0.21290560896096089,0.97369542387777908,0.22785350890313755,0.97008940714917313,0.24274789831626936,0.96625556861678075,0.25758527930971092,0.96219480864298434,0.27236216738102731,0.95790808088180313,0.28707509223431588,0.95339639205493054,0.30172059859519229,0.94866080171531009,0.31629524702224848,0.94370242199830279,0.3307956147147923,0.93852241736050679,0.34521829631667933,0.93312200430628933,0.35955990471604782,0.92750245110209473,0.37381707184076873,0.92166507747859727,0.38798644944942523,0.9156112543207674,0.40206470991763371,0.90934240334592487,0.41604854701952437,0.90285999676985307,0.42993467670419533,0.8961655569610556,0.44371983786695968,0.88926065608323346,0.45740079311520343,0.88214691572606829,0.47097432952867502,0.87482600652439835,0.48443725941402699,0.86729964776587642,0.49778642105343401,0.8595696069872012,0.51101867944711032,0.85163769955901858,0.524130927049552,0.84350578825958833,0.53712008449933291,0.83517578283731808,0.54998310134228023,0.82664963956226589,0.56271695674786271,0.81792936076671774,0.57531866021862055,0.80901699437494745,0.58778525229247314,0.79991463342226965,0.6001138052377365,0.79062441556349794,0.61230142374069108,0.78114852257092537,0.62434524558553384,0.77148917982194298,0.6362424423265598,0.76164865577641871,0.64799021995241135,0.75162926144395836,0.65958581954224105,0.74143334984117326,0.67102651791363388,0.73106331543908376,0.68230962826213626,0.72052159360078705,0.69343250079224172,0.70981066000952031,0.70439252333968538,0.69893303008725727,0.71518712198490064,0.68789125840396981,0.72581376165749489,0.67668793807769811,0.73626994673160018,0.66532570016556536,0.74655322161196269,0.65380721304588529,0.7566611713106286,0.64213518179150264,0.76659142201409602,0.63031234753451815,0.77634164164079511,0.61834148682254297,0.78590954038876948,0.60622541096663807,0.7952928712734264,0.59396696538108773,0.80448943065523348,0.58156902891516571,0.81349705875723433,0.56903451317704723,0.82231364017226471,0.55636636185003008,0.83093710435974721,0.54356755000122126,0.83936542613194987,0.53064108338285343,0.84759662612959441,0.51758999772639658,0.85562877128670045,0.50441735802962662,0.86345997528455909,0.49112625783682323,0.8710883989947279,0.47771981851226297,0.87851225091094232,0.4642011885071779,0.88572978756984544,0.45057354262035432,0.8927393139604326,0.4368400812525432,0.89953918392211885,0.42300402965485884,0.90612780053133302,0.40906863717134001,0.91250361647654998,0.39503717647585423,0.91866513442166986,0.38091294280352284,0.9246109073576626,0.36669925317684809,0.93033953894239163,0.35239944562672187,0.93584968382854039,0.33801687840850292,0.94114004797956152,0.32355492921334245,0.94620938897357654,0.30901699437494745,0.95105651629515353,0.2944064880719634,0.95568029161489609,0.27972684152616806,0.96007962905677469,0.26498150219666167,0.96425349545314099,0.25017393297024537,0.96820091058736313,0.23530761134817402,0.97192094742402624,0.22038602862947904,0.97541273232664261,0.20541268909104979,0.97867544526282246,0.19039110916466842,0.98170831999685493,0.17532481661118779,0.98451064426965607,0.16021734969205123,0.98708175996603997,0.14507225633834489,0.98942106326927448,0.12989309331758045,0.99152800480288517,0.11468342539840053,0.99340208975967503,0.099446824513407237,0.99504287801792723,0.08418686892030712,0.99644998424476627,0.06890714236157082,0.99762307798665228,0.053611233222805629,0.9985618837469864,0.038302733690035493,0.99926618105081,0.022985238906090666,0.99973580449658295,0.0076623461263016649,0.99997064379502698,0,0.99953033519109313,0.030644885915615216,0.9981217819344379,0.061260986182255374,0.99577566332582645,0.091819542190158046,0.99249418314395499,0.12229184938258741,0.98828042378034853,0.15264928421887447,0.98313834334397954,0.18286333106135669,0.97707277194329922,0.21290560896096089,0.97008940714917313,0.24274789831626936,0.96219480864298434,0.27236216738102731,0.95339639205493054,0.30172059859519229,0.94370242199830279,0.3307956147147923,0.93312200430628933,0.35955990471604782,0.92166507747859727,0.38798644944942523,0.90934240334592487,0.41604854701952437,0.8961655569610556,0.44371983786695968,0.88214691572606829,0.47097432952867502,0.86729964776587642,0.49778642105343401,0.85163769955901858,0.524130927049552,0.83517578283731808,0.54998310134228023,0.81792936076671774,0.57531866021862055,0,0.9981217819344379,0.061260986182255374,0.99249418314395499,0.12229184938258741,0.98313834334397954,0.18286333106135669,0.97008940714917313,0.24274789831626936,0.95339639205493054,0.30172059859519229,0.93312200430628933,0.35955990471604782,0.90934240334592487,0.41604854701952437,0.88214691572606829,0.47097432952867502,0.85163769955901858,0.524130927049552,0.81792936076671774,0.57531866021862055,0.78114852257092537,0.62434524558553384,0.74143334984117326,0.67102651791363388,0.69893303008725727,0.71518712198490064,0.65380721304588529,0.7566611713106286,0.60622541096663807,0.7952928712734264,0.55636636185003008,0.83093710435974721,0.50441735802962662,0.86345997528455909,0.45057354262035432,0.8927393139604326,0.39503717647585423,0.91866513442166986,0.33801687840850292,0.94114004797956152,0,0.99577566332582645,0.091819542190158046,0.98313834334397954,0.18286333106135669,0.96219480864298434,0.27236216738102731,0.93312200430628933,0.35955990471604782,0.8961655569610556,0.44371983786695968,0.85163769955901858,0.524130927049552,0.79991463342226965,0.6001138052377365,0.74143334984117326,0.67102651791363388,0.67668793807769811,0.73626994673160018,0.60622541096663807,0.7952928712734264,0.53064108338285343,0.84759662612959441,0.45057354262035432,0.8927393139604326,0.36669925317684809,0.93033953894239163,0.27972684152616806,0.96007962905677469,0.19039110916466842,0.98170831999685493,0.099446824513407237,0.99504287801792723,0.0076623461263018869,0.99997064379502698,-0.084186868920306773,0.99644998424476638,-0.17532481661118743,0.98451064426965618,-0.26498150219666156,0.96425349545314099,0,0.99249418314395499,0.12229184938258741,0.97008940714917313,0.24274789831626936,0.93312200430628933,0.35955990471604782,0.88214691572606829,0.47097432952867502,0.81792936076671774,0.57531866021862055,0.74143334984117326,0.67102651791363388,0.65380721304588529,0.7566611713106286,0.55636636185003008,0.83093710435974721,0.45057354262035432,0.8927393139604326,0.33801687840850292,0.94114004797956152,0.22038602862947904,0.97541273232664261,0.099446824513407237,0.99504287801792723,-0.022985238906090319,0.99973580449658295,-0.14507225633834475,0.98942106326927448,-0.26498150219666156,0.96425349545314099,-0.38091294280352272,0.9246109073576626,-0.49112625783682295,0.87108839899472801,-0.59396696538108751,0.80448943065523359,-0.68789125840396959,0.72581376165749512,-0.77148917982194276,0.63624244232656013,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.99995440946865177,0.0095487687269054707,0.99981764203160017,0.019096666786930977,0.99958971015944542,0.028642823592584892,0.99927063463525789,0.038186368715145011,0.99886044455268286,0.047726431964025158,0.99835917731328816,0.057262143466120109,0.99776687862315316,0.066792633745121552,0.99708360248870198,0.076317033800797809,0.99630941121177863,0.085834475188230286,0.99544437538396657,0.095344090096999082,0.99448857388015166,0.10484501143031102,0.99344209385133098,0.1143363728840623,0.99230503071666543,0.12381730902582917,0.99107748815478014,0.13328695537377883,0.98975957809431026,0.14274444847549397,0.98835142070369575,0.15218892598670306,0.98685314438022398,0.16161952674991004,0.98526488573832216,0.17103539087291547,0.98358678959710122,0.1804356598072224,0.98181900896715069,0.18981947642631977,0.97996170503658686,0.19918598510383609,0.9780150471563559,0.20853433179155642,0.97597921282479216,0.21786366409729527,0.97385438767143329,0.2271731313626188,0.97164076544009503,0.23646188474040861,0.96933854797120467,0.24572907727226054,0.96694794518339766,0.25497386396571137,0.96446917505437657,0.26419540187128598,0.96190246360103615,0.27339285015935849,0.95924804485885407,0.28256537019681982,0.9565061608605524,0.29171212562354537,0.95367706161402765,0.30083228242865512,0.95076100507955574,0.30992500902655962,0.94775825714627027,0.31898947633278485,0.94466909160791879,0.32802485783956914,0.94149379013789802,0.33703032969122465,0.93823264226357039,0.34600507075925802,0.93488594533986458,0.35494826271724117,0.93145400452216276,0.36385909011542755,0.92793713273847567,0.37273674045510541,0.92433565066090995,0.38158040426268253,0.92064988667642877,0.39038927516349481,0.91688017685690903,0.3991625499553324,0.91302686492849816,0.40789942868167645,0.90909030224027265,0.41659911470464001,0.90507084773220181,0.42526081477760636,0.90096886790241915,0.43388373911755812,0.89678473677380466,0.4424671014770904,0.89251883585988123,0.45101011921610185,0.88817155413002746,0.45951201337315628,0.88374328797401136,0.46797200873650951,0.87923444116584681,0.47638933391479393,0.87464542482697749,0.48476322140735484,0.86997665738878982,0.49309290767423158,0.86522856455446029,0.50137763320577844,0.86040157926013938,0.50961664259191741,0.85549614163547583,0.51780918459101699,0.85051269896348514,0.52595451219839162,0.84545170563976613,0.53405188271441395,0.84031362313106828,0.54210055781223554,0.83509891993321517,0.55009980360510724,0.82980807152838576,0.55804889071329711,0.8244415603417603,0.5659470943305952,0.81899987569753174,0.57379369429040217,0.81348351377428885,0.58158797513139526,0.80789297755977385,0.5893292261627644,0.80222877680502003,0.59701674152901385,0.79649142797787142,0.60464982027432312,0.79068145421589109,0.61222776640646071,0.78479938527866089,0.61974988896024497,0.7788457574994776,0.62721550206054766,0.77282111373644879,0.63462392498483289,0.76672600332299523,0.64197448222522546,0.76056098201776168,0.64926650355010462,0.75432661195394224,0.65649932406521683,0.74802346158802469,0.66367228427430125,0.74165210564795758,0.67078473013922346,0.73521312508074632,0.67783601313961095,0.72870710699948194,0.68482549033198636,0.72213464462980681,0.69175252440839174,0.7154963372558244,0.69861648375449859,0.7087927901654556,0.70541674250719943,0.7020246145952479,0.71215268061167447,0.69519242767464229,0.71882368387792939,0.68829685236970273,0.7254291440367967,0.68133851742631357,0.73196845879539985,0.67431805731284933,0.73844103189206989,0.66723611216232392,0.74484627315071317,0.66009332771402207,0.75118359853462502,0.65289035525462047,0.75745243019974229,0.64562785155880242,0.76365219654733207,0.63830647882937275,0.76978233227611004,0.63092690463687751,0.77584227843378617,0.62348980185873359,0.7818314824680298,0.61599584861787571,0.78774939827685242,0.60844572822092435,0.79359548625840171,0.60084012909588058,0.79936921336016287,0.5931797447293552,0.80507005312756297,0.58546527360333533,0.81069748575197376,0.57769741913149653,0.81625099811810831,0.56987688959506422,0.82173008385080737,0.56200439807823255,0.82713424336121133,0.55408066240314402,0.83246298389231288,0.54610640506443786,0.83771581956388774,0.53808235316337272,0.84289227141679701,0.5300092383415278,0.84799186745666,0.52188779671409213,0.85301414269689013,0.51371876880274348,0.85795863920109416,0.50550289946812854,0.86282490612482621,0.49724093784194379,0.86761249975669674,0.48893363725863032,0.87232098355883092,0.48058175518668378,0.8769499282066715,0.47218605315958662,0.88149891162812677,0.4637472967063721,0.88596751904205384,0.45526625528182108,0.89035534299608021,0.44674370219630377,0.89466198340375469,0.43818041454526713,0.89888704758102833,0.42957717313837962,0.90303015028205935,0.420934762428335,0.9070909137343407,0.41225397043932627,0.91106896767314549,0.40353558869519224,0.91496394937528802,0.39478041214724491,0.91877550369219763,0.38598923910178651,0.92250328308230101,0.37716287114731717,0.92614694764271199,0.36830211308144717,0.92970616514022375,0.3594077728375128,0.93318061104160255,0.35048066141091,0.93656996854317887,0.34152159278514493,0.93987392859973384,0.33253138385761594,0.94309218995267841,0.32351085436512711,0.94622445915752229,0.31446082680914322,0.94927045061063076,0.30538212638079465,0.95222988657526619,0.29627558088563394,0.95510249720691243,0.28714202066815731,0.95788802057787925,0.27798227853609109,0.96058620270118555,0.26879718968445737,0.9631967975537179,0.25958759161941825,0.96571956709866358,0.25035432408191238,0.96815428130721437,0.24109822897108632,0.97050071817954142,0.2318201502675282,0.97275866376503717,0.22252093395631445,0.97492791218182362,0.21320142794987015,0.9770082656355249,0.20386248201065718,0.97899953443730225,0.19450494767369031,0.98090153702115024,0.18512967816889506,0.982714099960452,0.1757375283433075,0.98443705798379266,0.16632935458312995,0.98607025399002857,0.15690601473564408,0.98761353906261218,0.14746836803099095,0.98906677248317076,0.13801727500382685,0.99042982174433647,0.12855359741485722,0.9917025625618292,0.11907819817226206,0.9928848788857888,0.10959194125301334,0.99397666291135633,0.10009569162409844,0.99497781508850403,0.090590315163649696,0.99588824413111265,0.081076678581994313,0.99670786702529446,0.071555649342626149,0.99743660903696285,0.062028095583108754,0.99807440371864697,0.052494886035919286,0.99862119291554985,0.04295688994923471,0.99907692677085147,0.033414977007674644,0.99944156373025461,0.023870017253000822,0.9997150705457738,0.014322881004787508,0.99989742227876688,0.004774438781063082,0.99998860230220921,0,0.99981764203160017,0.019096666786930977,0.99927063463525789,0.038186368715145011,0.99835917731328816,0.057262143466120109,0.99708360248870198,0.076317033800797809,0.99544437538396657,0.095344090096999082,0.99344209385133098,0.1143363728840623,0.99107748815478014,0.13328695537377883,0.98835142070369575,0.15218892598670306,0.98526488573832216,0.17103539087291547,0.98181900896715069,0.18981947642631977,0.9780150471563559,0.20853433179155642,0.97385438767143329,0.2271731313626188,0.96933854797120467,0.24572907727226054,0.96446917505437657,0.26419540187128598,0.95924804485885407,0.28256537019681982,0.95367706161402765,0.30083228242865512,0.94775825714627027,0.31898947633278485,0.94149379013789802,0.33703032969122465,0.93488594533986458,0.35494826271724117,0.92793713273847567,0.37273674045510541,0.92064988667642877,0.39038927516349481,0.91302686492849816,0.40789942868167645,0.90507084773220181,0.42526081477760636,0,0.99927063463525789,0.038186368715145011,0.99708360248870198,0.076317033800797809,0.99344209385133098,0.1143363728840623,0.98835142070369575,0.15218892598670306,0.98181900896715069,0.18981947642631977,0.97385438767143329,0.2271731313626188,0.96446917505437657,0.26419540187128598,0.95367706161402765,0.30083228242865512,0.94149379013789802,0.33703032969122465,0.92793713273847567,0.37273674045510541,0.91302686492849816,0.40789942868167645,0.89678473677380466,0.4424671014770904,0.87923444116584681,0.47638933391479393,0.86040157926013938,0.50961664259191741,0.84031362313106828,0.54210055781223554,0.81899987569753174,0.57379369429040217,0.79649142797787142,0.60464982027432312,0.77282111373644879,0.63462392498483289,0.74802346158802469,0.66367228427430125,0.72213464462980681,0.69175252440839174,0.69519242767464229,0.71882368387792939,0.66723611216232392,0.74484627315071317,0.63830647882937275,0.76978233227611004,0,0.99835917731328816,0.057262143466120109,0.99344209385133098,0.1143363728840623,0.98526488573832216,0.17103539087291547,0.97385438767143329,0.2271731313626188,0.95924804485885407,0.28256537019681977,0.94149379013789802,0.33703032969122465,0.92064988667642877,0.39038927516349481,0.89678473677380466,0.4424671014770904,0.86997665738878982,0.49309290767423158,0.84031362313106839,0.54210055781223543,0.80789297755977385,0.5893292261627644,0.77282111373644879,0.63462392498483289,0.73521312508074643,0.67783601313961084,0.69519242767464229,0.71882368387792939,0.65289035525462047,0.75745243019974229,0.60844572822092435,0.79359548625840171,0.56200439807823255,0.82713424336121133,0.51371876880274348,0.85795863920109416,0.4637472967063721,0.88596751904205384,0.41225397043932643,0.91106896767314549,0.3594077728375128,0.93318061104160255,0.30538212638079465,0.95222988657526619,0.2503543240819126,0.96815428130721437,0,0.99708360248870198,0.076317033800797809,0.98835142070369575,0.15218892598670306,0.97385438767143329,0.2271731313626188,0.95367706161402765,0.30083228242865512,0.92793713273847567,0.37273674045510541,0.89678473677380466,0.4424671014770904,0.86040157926013938,0.50961664259191741,0.81899987569753174,0.57379369429040217,0.77282111373644879,0.63462392498483289,0.72213464462980681,0.69175252440839174,0.66723611216232392,0.74484627315071317,0.60844572822092435,0.79359548625840171,0.54610640506443786,0.83771581956388774,0.48058175518668378,0.8769499282066715,0.41225397043932627,0.91106896767314549,0.34152159278514493,0.93987392859973384,0.26879718968445737,0.9631967975537179,0.19450494767369031,0.98090153702115024,0.11907819817226206,0.9928848788857888,0.04295688994923471,0.99907692677085147,-0.033414977007674519,0.99944156373025461,-0.10959194125301346,0.99397666291135633,-0.18512967816889495,0.98271409996045211,0,0.99544437538396657,0.095344090096999082,0.98181900896715069,0.18981947642631977,0.95924804485885407,0.28256537019681982,0.92793713273847567,0.37273674045510541,0.88817155413002746,0.45951201337315628,0.84031362313106828,0.54210055781223554,0.78479938527866089,0.61974988896024497,0.72213464462980681,0.69175252440839174,0.65289035525462047,0.75745243019974229,0.57769741913149653,0.81625099811810831,0.49724093784194379,0.86761249975669674,0.41225397043932627,0.91106896767314549,0.32351085436512711,0.94622445915752229,0.2318201502675282,0.97275866376503717,0.13801727500382685,0.99042982174433647,0.04295688994923471,0.99907692677085147,-0.052494886035919383,0.99862119291554985,-0.14746836803099106,0.98906677248317076,-0.2410982289710864,0.97050071817954142,-0.33253138385761605,0.94309218995267841,-0.42093476242833489,0.90709091373434081,-0.50550289946812843,0.86282490612482621,-0.58546527360333545,0.81069748575197365,0,0.99344209385133098,0.1143363728840623,0.97385438767143329,0.2271731313626188,0.94149379013789802,0.33703032969122465,0.89678473677380466,0.4424671014770904,0.84031362313106839,0.54210055781223543,0.77282111373644879,0.63462392498483289,0.69519242767464229,0.71882368387792939,0.60844572822092435,0.79359548625840171,0.51371876880274348,0.85795863920109416,0.41225397043932643,0.91106896767314549,0.30538212638079465,0.95222988657526619,0.19450494767369031,0.98090153702115024,0.081076678581994535,0.99670786702529435,-0.033414977007674519,0.99944156373025461,-0.14746836803099084,0.98906677248317076,-0.25958759161941813,0.96571956709866358,-0.36830211308144706,0.92970616514022375,-0.47218605315958673,0.88149891162812677,-0.56987688959506422,0.82173008385080748,-0.66009332771402196,0.75118359853462513,-0.74165210564795758,0.67078473013922346,-0.81348351377428874,0.58158797513139537,-0.87464542482697738,0.484763221407355,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.99997361873499135,0.0072637341668094577,0.99989447633190787,0.014527085080626901,0.99976257696650284,0.021789669508681716,0.99957792759812047,0.029051104258645013,0.99934053796932865,0.036311006198847834,0.99905042060540483,0.043568992278496123,0.99870759081367511,0.050824679547881509,0.99831206668270667,0.058077685178586629,0.99786386908135327,0.065327626483684176,0.99736302165765445,0.072574120937928449,0.99680955083758738,0.079816786197938236,0.99620348582367269,0.08705524012237037,0.995544858593434,0.094289100792082414,0.99483370389771031,0.10151798653028361,0.99407005925882252,0.10874151592267323,0.99325396496859397,0.11595930783756483,0.99238546408622397,0.12317098144599589,0.99146460243601653,0.13037615624182117,0.99049142860496198,0.1375744520617892,0.98946599394017387,0.14476548910560072,0.98838835254617952,0.15194888795594783,0.98725856128206524,0.1591242695985331,0.98607667975847657,0.16629125544206722,0.98484277033447287,0.17344946733824443,0.98355689811423719,0.18059852760169479,0.98221913094364099,0.18773805902991147,0.98082953940666506,0.19486768492315323,0.97938819682167433,0.20198702910431982,0.97789517923755032,0.20909571593880022,0.97635056542967802,0.21619337035429195,0.97475443689579,0.22327961786059078,0.97310687785166572,0.23035408456935005,0.97140797522668898,0.23741639721380764,0.96965781865926026,0.24446618316848065,0.96785650049206817,0.25150307046882603,0.96600411576721645,0.25852668783086635,0.96410076222120988,0.26553666467077985,0.96214654027979696,0.27253263112445286,0.96014155305267157,0.27951421806699556,0.95808590632803237,0.28648105713221728,0.95597970856700154,0.29343278073206264,0.95382307089790164,0.30036902207600658,0.95161610711039235,0.30728941519040703,0.94935893364946666,0.31419359493781451,0.94705166960930731,0.32108119703623789,0.94469443672700226,0.32795185807836469,0.9422873593761224,0.33480521555073539,0.93983056456015857,0.34164090785287066,0.93732418190582101,0.34845857431635024,0.93476834365619976,0.35525785522384273,0.93216318466378723,0.36203839182808512,0.92950884238336295,0.36879982637081127,0.92680545686474114,0.37554180210162819,0.92405317074538129,0.38226396329683904,0.92125212924286259,0.38896595527821187,0.91840248014722126,0.39564742443169365,0.9155043738131533,0.40230801822606771,0.91255796315208115,0.40894738523155388,0.90956340362408572,0.41556517513835134,0.90652085322970388,0.42216103877512146,0.90343047250159247,0.42873462812741109,0.90029242449605706,0.43528559635601466,0.89710687478444995,0.44181359781527452,0.89387399144443347,0.44831828807131763,0.89059394505111167,0.45479932392022909,0.88726690866803104,0.46125636340616039,0.8838930578380485,0.46768906583937186,0.88047257057406969,0.47409709181420823,0.8770056273496567,0.48048010322700668,0.87349241108950548,0.48683776329393597,0.86993310715979422,0.49316973656876589,0.86632790335840359,0.49947568896056654,0.86267698990500707,0.5057552877513356,0.85898055943103568,0.51200820161355332,0.85523880696951304,0.51823410062766428,0.85145192994476582,0.52443265629948488,0.8476201281620066,0.53060354157753553,0.84374360379679214,0.53674643087029639,0.8398225613843554,0.542861000063387,0.83585720780881456,0.54894692653666644,0.8318477522922566,0.55500388918125665,0.8277944063836985,0.56103156841648416,0.82369738394792558,0.56702964620674257,0.81955690115420698,0.57299780607827244,0.81537317646489027,0.57893573313585922,0.81114643062387526,0.58484311407944845,0,0.99989447633190787,0.014527085080626901,0.99957792759812047,0.029051104258645013,0.99905042060540483,0.043568992278496123,0.99831206668270667,0.058077685178586629,0.99736302165765445,0.072574120937928449,0.99620348582367269,0.08705524012237037,0.99483370389771031,0.10151798653028361,0.99325396496859397,0.11595930783756483,0.99146460243601653,0.13037615624182117,0.98946599394017387,0.14476548910560072,0.98725856128206524,0.1591242695985331,0.98484277033447287,0.17344946733824443,0.98221913094364099,0.18773805902991147,0.97938819682167433,0.20198702910431982,0.97635056542967802,0.21619337035429195,0.97310687785166572,0.23035408456935005,0.96965781865926026,0.24446618316848065,0.96600411576721645,0.25852668783086635,0.96214654027979696,0.27253263112445286,0.95808590632803237,0.28648105713221728,0.95382307089790164,0.30036902207600658,0.94935893364946666,0.31419359493781451,0.94469443672700226,0.32795185807836469,0.93983056456015857,0.34164090785287066,0.93476834365619976,0.35525785522384273,0.92950884238336295,0.36879982637081127,0.92405317074538129,0.38226396329683904,0.91840248014722126,0.39564742443169365,0.91255796315208115,0.40894738523155388,0.90652085322970388,0.42216103877512146,0.90029242449605706,0.43528559635601466,0.89387399144443347,0.44831828807131763,0.88726690866803104,0.46125636340616039,0.88047257057406969,0.47409709181420823,0.87349241108950548,0.48683776329393597,0.86632790335840359,0.49947568896056654,0.85898055943103568,0.51200820161355332,0.85145192994476582,0.52443265629948488,0.84374360379679214,0.53674643087029639,0.83585720780881456,0.54894692653666644,0.8277944063836985,0.56103156841648416,0.81955690115420698,0.57299780607827244,0.81114643062387526,0.58484311407944845,0.80256476980010505,0.59656499249931216,0.79381372981955323,0.60816096746664805,0.78489515756589634,0.61962859168182904,0.77581093528005129,0.63096544493331175,0.76656298016293267,0.64216913460841707,0.75715324397083317,0.65323729619828352,0.74758371260351042,0.66416759379689094,0.73785640568506783,0.67495772059404779,0.72797337613771895,0.68560539936223608,0.71793670974852308,0.69610838293721544,0.70774852472918581,0.70646445469228036,0.69741097126901619,0.7166714290060735,0.68692623108113449,0.7267271517238556,0.67629651694202786,0.73662950061213361,0.66552407222455012,0.74637638580655252,0.65461117042446282,0.7559657502529562,0.6435601146806208,0.76539557014152237,0.63237323728890105,0.77466385533388293,0.6210528992099773,0.78376864978313709,0.60960148957104565,0.79270803194666972,0.59802142516160617,0.80148011519168805,0.58631514992340517,0.8100830481933905,0.57448513443464821,0.81851501532568371,0.56253387538859145,0.82677423704436548,0.55046389506662041,0.83485897026269329,0.53827774080592994,0.84276750871925765,0.52597798446191513,0.85049818333808413,0.51356722186538806,0.85804936258088738,0.5010480722747348,0.86541945279140342,0.48842317782312739,0.87260689853172579,0.47569520296090995,0.87961018291057702,0.46286683389327199,0.88642782790344421,0.44994077801333277,0.89305839466451287,0.43691976333075311,0.89950048383033054,0.42380653789599626,0.90575273581513926,0.4106038692203588,0.91181383109781267,0.39731454369189556,0.91768249050033679,0.3839413659873589,0.92335747545777791,0.37048715848027963,0.92883758827967777,0.35695476064531262,0.93412167240282329,0.34334702845897308,0.93920861263533628,0.32966683379689027,0.94409733539203122,0.31591706382770657,0.94878680892099299,0,0.99976257696650284,0.021789669508681716,0.99905042060540483,0.043568992278496123,0.99786386908135327,0.065327626483684176,0.99620348582367269,0.08705524012237037,0.99407005925882252,0.10874151592267321,0.99146460243601653,0.13037615624182117,0.98838835254617952,0.15194888795594783,0.98484277033447287,0.17344946733824443,0.98082953940666506,0.19486768492315321,0.97635056542967802,0.21619337035429192,0.97140797522668898,0.23741639721380761,0.96600411576721645,0.25852668783086635,0.96014155305267157,0.27951421806699556,0.95382307089790164,0.30036902207600658,0.94705166960930731,0.32108119703623789,0.93983056456015857,0.34164090785287066,0.93216318466378723,0.36203839182808506,0.9240531707453814,0.38226396329683898,0.9155043738131533,0.40230801822606765,0.90652085322970388,0.4221610387751214,0.89710687478445006,0.44181359781527452,0.88726690866803104,0.46125636340616033,0.8770056273496567,0.48048010322700668,0.86632790335840359,0.49947568896056654,0.85523880696951304,0.51823410062766417,0.84374360379679214,0.53674643087029639,0.8318477522922566,0.55500388918125665,0.81955690115420698,0.57299780607827244,0.80687688664496615,0.59071963722067555,0.79381372981955323,0.60816096746664805,0.78037363366660928,0.62531351486911968,0.76656298016293267,0.64216913460841707,0.75238832724302229,0.65871982285980046,0.73785640568506783,0.67495772059404768,0.72297411591486727,0.6908751173092833,0.70774852472918592,0.70646445469228025,0.69218686194011569,0.72171833020749532,0.67629651694202797,0.7366295006121335,0.6600850352027483,0.7511908853955741,0.64356011468062091,0.76539557014152237,0.62672960216916285,0.77923680981129406,0.60960148957104576,0.79270803194666961,0.59218391010317184,0.80580283979080047,0.57448513443464821,0.8185150153256836,0.5565135667594916,0.83083852222476351,0.53827774080592994,0.84276750871925765,0.51978631578419621,0.85429631037684572,0.5010480722747348,0.86541945279140342,0.48207190805877859,0.87613165418250272,0.46286683389327216,0.8864278279034441,0.44344196923214918,0.89630308485663135,0.42380653789599626,0.90575273581513926,0.40396986369215693,0.91477229364937596,0.3839413659873589,0.92335747545777791,0.3637305552349655,0.93150420460052874,0.34334702845897308,0.93920861263533628,0.32280046469690271,0.94646704115434666,0.30210062040374702,0.953276043521325,0.28125732481915589,0.95963238650827731,0.26028047530006121,0.96553305183073579,0.23918003262095483,0.97097523758097914,0.21796601624405459,0.97595635955850835,0.19664849956160263,0.98047405249714303,0.17523760511255351,0.98452617118815933,0.15374349977592716,0.98811079149893388,0.13217638994310626,0.99122621128661037,0.11054651667137116,0.99387095120635571,0.08886415082097493,0.99604375541382062,0.067139588178064563,0.99774359216147301,0.045383144565767988,0.99896965428851869,0.023605150945766748,0.99972135960417874,0.0018159485126781009,0.99999835116414038,-0.019974116216419657,0.99980049744005073,-0.041754696314990354,0.99912789238197275,-0.063515449360237564,0.99798085537377279,-0.085246042344162457,0.99635993108146281,-0.10693615658015337,0.99426588919456793,-0.12857549260277293,0.99169972406064244,-0.15015377505841798,0.98866265421310717,-0.17166075758453217,0.98515612179263468,-0.19308622767505007,0.98118179186235344,-0.2144200115297657,0.97674155161719989,-0.23565197888532172,0.9718375094877908,-0.25677204782552437,0.9664719941392439,-0.27777018956870303,0.96064755336541963,-0.29863643322983685,0.954366952879112,0,0.99957792759812047,0.029051104258645013,0.99831206668270667,0.058077685178586629,0.99620348582367269,0.08705524012237037,0.99325396496859397,0.11595930783756483,0.98946599394017387,0.14476548910560072,0.98484277033447287,0.17344946733824443,0.97938819682167433,0.20198702910431982,0.97310687785166572,0.23035408456935005,0.96600411576721645,0.25852668783086635,0.95808590632803237,0.28648105713221728,0.94935893364946666,0.31419359493781451,0.93983056456015857,0.34164090785287066,0.92950884238336295,0.36879982637081127,0.91840248014722126,0.39564742443169365,0.90652085322970388,0.42216103877512146,0.89387399144443347,0.44831828807131763,0.88047257057406969,0.47409709181420823,0.86632790335840359,0.49947568896056654,0.85145192994476582,0.52443265629948488,0.83585720780881456,0.54894692653666644,0.81955690115420698,0.57299780607827244,0.80256476980010505,0.59656499249931216,0.78489515756589634,0.61962859168182904,0.76656298016293267,0.64216913460841707,0.74758371260351042,0.66416759379689094,0.72797337613771895,0.68560539936223608,0.70774852472918581,0.70646445469228036,0.68692623108113449,0.7267271517238556,0.66552407222455012,0.74637638580655252,0.6435601146806208,0.76539557014152237,0.6210528992099773,0.78376864978313709,0.59802142516160617,0.80148011519168805,0.57448513443464821,0.81851501532568371,0.55046389506662041,0.83485897026269329,0.52597798446191513,0.85049818333808413,0.5010480722747348,0.86541945279140342,0.47569520296090995,0.87961018291057702,0.44994077801333277,0.89305839466451287,0.42380653789599626,0.90575273581513926,0.39731454369189556,0.91768249050033679,0.37048715848027963,0.92883758827967777,0.34334702845897308,0.93920861263533628,0.31591706382770657,0.94878680892099299,0.28822041944859128,0.95756409175202373,0.26028047530006121,0.96553305183073579,0.23212081674078638,0.97268696220088724,0.20376521460021577,0.97901978392621258,0.17523760511255351,0.98452617118815933,0.1465620697111121,0.98920147579853268,0.11776281470009607,0.99304175112324,0.088864150820974708,0.99604375541382073,0.059890472730697572,0.99820495454395219,0.030866238409070136,0.99952352414861878,0.0018159485126778788,0.99999835116414038,-0.027235874307215028,0.99962903476775899,-0.056264706105335668,0.9984158867159918,-0.085246042344162679,0.99635993108146281,-0.1141554185793036,0.99346290338843757,-0.14296843111102989,0.98972724914778953,-0.17166075758453239,0.98515612179263468,-0.20020817752151038,0.97975338001637702,-0.22858659276576349,0.97352358451541332,-0.2567720478255246,0.96647199413924378,-0.28474075009536298,0.95860456145124306,-0.31246908994058992,0.9499279277038335,-0.33993366062720842,0.94044941723230702,-0.36711127808058541,0.93017703127202567,-0.39397900045616929,0.91911944120422007,-0.42051414750572813,0.90728598123608784,-0.44669431972276263,0.89468664052137181,-0.47249741725093447,0.88133205472806697,-0.49790165853954432,0.867233497060377,-0.52288559873031537,0.8524028687424976,-0.54742814775995741,0.83685268897226006,-0.57150858816323635,0.82059608435311482,-0.59510659256151366,0.80364677781337779,-0.61820224082199737,0.78601907702209184,-0.64077603687321893,0.76772786231128221,-0.66280892516254108,0.74878857411480115,-0.68428230674180168,0.72921719993436718,-0.70517805496752195,0.70903026084379694,-0.72547853080241631,0.68824479754282741,-0.74516659770529514,0.66687835597229783,-0.76422563609678629,0.64494897250283489,-0.78263955738866697,0.62247515870954351,-0.8003928175649615,0.59947588574555877,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.99990381078632362,0.013869721518034561,0.99961526165002434,0.027736774800855665,0.99913440810173104,0.041598492126560742,0.99846134264729325,0.055452206799770275,0.99759619476998451,0.069295253664642426,0.99653913090559287,0.083124969617591582,0.99529035441040237,0.096938694119611951,0.99385010552207098,0.11073376970810798,0.99221866131341507,0.12450754250813273,0.99039633563910567,0.13825736274293621,0.98838347907529023,0.15198058524372529,0.98618047885214899,0.16567456995853705,0.98378775877940017,0.17933668246012785,0.98120577916476859,0.19296429445278032,0.97843503672543197,0.20655478427793078,0.97547606449246338,0.22010553741851965,0.97232943170828756,0.23361394700196833,0.96899574371717101,0.24707741430168517,0.96547564184876677,0.26049334923700423,0.96176980329473627,0.27385917087146128,0.9578789409784727,0.28717230790931003,0.95380380341794946,0.30043019919018382,0.94954517458172172,0.31363029418180827,0.94510387373810767,0.32677005347066784,0.94048075529757891,0.33984694925053477,0.93567670864839059,0.35285846580876429,0.93069265798548195,0.36580210001026348,0.92552956213268134,0.37867536177904032,0.92018841435824938,0.39147577457724098,0.914670242183795,0.40420087588158177,0.90897610718660293,0.41684821765708585,0.90310710479540934,0.42941536682803239,0.89706436407966406,0.44189990574602744,0.89084904753232308,0.4542994326551078,0.88446235084620917,0.4666115621537868,0.87790550268398682,0.47883392565395405,0.8711797644417939,0.4909641718365409,0.86428643000657623,0.50299996710386319,0.85722682550717166,0.51493899602855575,0.8500023090591915,0.52677896179900985,0.84261427050374837,0.53851758666123051,0.83506413114008093,0.5501526123570275,0.82735334345212597,0.56168180055845529,0.81948339082909294,0.57310293329841899,0.81145578728009038,0.58441381339736365,0.80327207714286486,0.59561226488596375,0.7949338347867021,0.60669613342373307,0.78644266430955378,0.61766328671347348,0.77780019922944243,0.62851161491148244,0.76900810217020887,0.63923903103344182,0.76006806454165832,0.64984347135590848,0.75098180621417021,0.66032289581333048,0.74175107518783223,0.67067528839051083,0.73237764725616239,0.68089865751044631,0.72286332566448519,0.69099103641746351,0.71320994076302591,0.70095048355557976,0.70341934965479014,0.71077508294201763,0.69349343583829848,0.72046294453579762,0.6834341088452407,0.73001220460134197,0.67324330387312425,0.73942102606701687,0.66292298141298289,0.74868759887854552,0.65247512687222153,0.75781014034722338,0.6419017501926656,0.76678689549286938,0.63120488546389275,0.77561613738144597,0.62038659053191703,0.7842961674572837,0.60944894660330406,0.79282531586984717,0.59839405784479194,0.80120194179497828,0.58722405097849439,0.80942443375055506,0.57594107487276591,0.81749120990650603,0.56454730012880561,0.82540071838912055,0.55304491866308025,0.83315143757959564,0.54143614328564726,0.84074187640676257,0.52972320727445699,0.84817057463393686,0.51790836394571915,0.85543610313983631,0.50599388622041253,0.86253706419351295,0,0.99961526165002434,0.027736774800855665,0.99846134264729325,0.055452206799770275,0.99653913090559287,0.083124969617591582,0.99385010552207098,0.11073376970810798,0.99039633563910567,0.13825736274293621,0.98618047885214899,0.16567456995853705,0.98120577916476859,0.19296429445278032,0.97547606449246338,0.22010553741851965,0.96899574371717101,0.24707741430168517,0.96176980329473627,0.27385917087146128,0.95380380341794946,0.30043019919018382,0.94510387373810767,0.32677005347066784,0.93567670864839059,0.35285846580876429,0.92552956213268134,0.37867536177904032,0.914670242183795,0.40420087588158177,0.90310710479540934,0.42941536682803239,0.89084904753232308,0.4542994326551078,0.87790550268398682,0.47883392565395405,0.86428643000657623,0.50299996710386319,0.8500023090591915,0.52677896179900985,0.83506413114008093,0.5501526123570275,0.81948339082909294,0.57310293329841899,0.80327207714286486,0.59561226488596375,0.78644266430955378,0.61766328671347348,0.76900810217020887,0.63923903103344182,0.75098180621417021,0.66032289581333048,0.73237764725616239,0.68089865751044631,0.71320994076302591,0.70095048355557976,0.69349343583829848,0.72046294453579762,0.67324330387312425,0.73942102606701687,0.65247512687222153,0.75781014034722338,0.63120488546389275,0.77561613738144597,0.60944894660330406,0.79282531586984717,0.58722405097849439,0.80942443375055506,0.56454730012880561,0.82540071838912055,0.54143614328564726,0.84074187640676257,0.51790836394571915,0.85543610313983631,0.493982066187025,0.86947209172324658,0.46967566073820605,0.88283904179081796,0.44500785081191474,0.89552666778592394,0.41999761771312821,0.9075252068759837,0.39466420623347642,0.91882542646473386,0.36902710984282316,0.92941863129649649,0.3431060556894957,0.93929667014697582,0.31692098942070279,0.94845194209543526,0.29049205983482507,0.95687740237342855,0.2638396033773836,0.96456656778558569,0.23698412849261888,0.97151352169827976,0.20994629984272078,0.97771291859233933,0.18274692240685292,0.98315998817630068,0.15540692547220497,0.98785053905703601,0.1279473465293951,0.99178096196493248,0.10038931508461024,0.99494823253114173,0.072754036400943717,0.99734991361476044,0.045062775181439245,0.99898415717815414,0.017336839206397739,0.9998497057089788,-0.010402437062464118,0.99994589318780713,-0.038133708898383696,0.99927264560061546,-0.065835637733823241,0.99783048099573546,-0.093486907580000181,0.99562050908522792,-0.12106624142904379,0.99264443039098571,-0.14855241762615687,0.98890453493622121,-0.1759242861991854,0.98440370048334702,-0.20316078513302807,0.97914539031960501,-0.23024095657636706,0.97313365059214729,-0.25714396296824604,0.96637310719462044,-0.28384910307208761,0.95886896220764772,-0.31033582790481334,0.95062698989594974,-0.33658375654880618,0.94165353226518189,-0.36257269183455265,0.93195549418190915,-0.38828263588189377,0.92154033806047186,-0.41369380548792811,0.9104160781208317,-0.43878664734972528,0.89859127422181651,-0.46354185311013713,0.8860750252745081,-0.48794037421512843,0.8728769622408421,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.99967647159596196,0.025435253831007212,0.99870609572510449,0.050854049607857929,0.99708950027574106,0.076239939925691641,0.994827731276963,0.10157649867134914,0.99192225222179953,0.12684733165200082,0.98837494312025387,0.15203608720312078,0.98418809928283046,0.17712646676894278,0.97936442983533878,0.20210223544855144,0.97390705596593474,0.22694723250078574,0,0.99870609572510449,0.050854049607857929,0.994827731276963,0.10157649867134914,0.98837494312025387,0.15203608720312078,0.97936442983533878,0.20210223544855144,0.96781950890553459,0.25164538180115642,0.95377005637593015,0.30053731808322093,0.93725242953990118,0.34865152132401844,0.91830937285339653,0.39586348117703596,0.89698990732046857,0.44205102212891345,0,0.99708950027574106,0.076239939925691641,0.98837494312025387,0.15203608720312078,0.97390705596593474,0.22694723250078574,0.95377005637593015,0.30053731808322093,0.92808116181374822,0.37237797610283463,0.89698990732046857,0.44205102212891345,0.86067727507135028,0.50915088939896314,0.81935464087868981,0.57328698962260893,0.7732625437733337,0.63408598659581905,0,0.994827731276963,0.10157649867134914,0.97936442983533878,0.20210223544855144,0.95377005637593015,0.30053731808322093,0.91830937285339653,0.39586348117703596,0.87334920363630042,0.48709461966628198,0.81935464087868981,0.57328698962260893,0.75688423335689503,0.6535489708474379,0.68658420854079705,0.72705029027049251,0.60918178766956566,0.79303061074066505,0,0.99192225222179953,0.12684733165200082,0.96781950890553459,0.25164538180115642,0.92808116181374822,0.37237797610283463,0.87334920363630042,0.48709461966628198,0.80450785628032007,0.59394200826616383,0.72266928582711343,0.69119396939074185,0.62915563493797944,0.77727934941421672,0.5254776629843203,0.85080739636214797,0.41331033898133007,0.91059022819879742,0,0.98837494312025387,0.15203608720312078,0.95377005637593015,0.30053731808322093,0.89698990732046857,0.44205102212891345,0.81935464087868981,0.57328698962260893,0.72266928582711343,0.69119396939074185,0.60918178766956566,0.79303061074066505,0.48153074364848969,0.87642920017610804,0.34268405505889338,0.93945071100531574,0.19586992320561364,0.98062988593221401,0,0.98418809928283046,0.17712646676894278,0.93725242953990118,0.34865152132401844,0.86067727507135028,0.50915088939896314,0.75688423335689503,0.6535489708474379,0.62915563493797932,0.77727934941421672,0.48153074364848969,0.87642920017610804,0.3186780197373304,0.94786302794037369,0.14574748540850943,0.98932182352210163,-0.03179213845842449,0.99949450220210834,0,0.97936442983533878,0.20210223544855144,0.91830937285339653,0.39586348117703596,0.81935464087868981,0.57328698962260893,0.68658420854079705,0.72705029027049251,0.5254776629843203,0.85080739636214797,0.34268405505889338,0.93945071100531574,0.14574748540850943,0.98932182352210163,-0.057204249164814758,0.99836249622944562,-0.25779509914342436,0.9661996102553716,0,0.97390705596593474,0.22694723250078574,0.89698990732046857,0.44205102212891345,0.7732625437733337,0.63408598659581905,0.60918178766956566,0.79303061074066505,0.41331033898133007,0.91059022819879742,0.19586992320561364,0.98062988593221401,-0.031792138458424268,0.99949450220210834,-0.25779509914342436,0.9661996102553716,-0.47034479364001286,0.88248273359637674,0,0.96781950890553459,0.25164538180115642,0.87334920363630042,0.48709461966628198,0.72266928582711343,0.69119396939074185,0.5254776629843203,0.85080739636214797,0.29446578163351222,0.95566202365007924,0.044501793355740393,0.99900930445523028,-0.20832637405157595,0.97805936520976211,-0.44774645140907432,0.89416056458031157,-0.65834912738227613,0.75271271177986332,0,0.96110572764290847,0.27618070224401181,0.847448439416009,0.53087770958232083,0.66786937036663263,0.74427851247102228,0.43633771493725809,0.89978297301256605,0.17086398365900229,0.98529462552486102,-0.10790100825215546,0.99416164300287113,-0.37827253775818498,0.92569427306102658,-0.61921879704666416,0.78521849276751121,-0.81199692725321637,0.58366170863894684,0,0.95377005637593015,0.30053731808322093,0.81935464087868981,0.57328698962260893,0.60918178766956566,0.79303061074066505,0.34268405505889338,0.93945071100531574,0.044501793355740393,0.99900930445523028,-0.25779509914342436,0.9661996102553716,-0.53625628584266505,0.84405520903210463,-0.76513527681678672,0.64386955835052428,-0.923269946366854,0.38415180090134482,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.99964561112345263,0.026620521437774766,0.99858269567676194,0.05322217484217865,0.99681200703075012,0.079786105553083075,0.99433480021013709,0.1062934856473654,0.9911528310040072,0.13272552728372197,0.98726835472134455,0.15906349601907205,0.98268412459252097,0.18528872408711433,0.97740338981786667,0.21138262362962432,0.97142989326470996,0.23732669987111479,0.96476786881451593,0.26310256422752126,0.95742203836200546,0.288691947339621,0.94939760846838128,0.31407671202194876,0.94070026667103335,0.33923886611803022,0.93133617745233843,0.36416057525282219,0.92131197787041297,0.38882417547332065,0.91063477285491323,0.41321218576837815,0.89931213017121925,0.43730732045885534,0.88735207505657154,0.46109250144932579,0.87476308453196128,0.48455087033265015,0.86155408139380607,0.5076658003388399,0.84773442788967102,0.53042090811974241,0.83331391908251495,0.5528000653611933,0.81830277590816913,0.57478741021440682,0.80271163793096367,0.59636735853850131,0.78655155580264258,0.61752461494619182,0.76983398342990628,0.63824418364482005,0.75257076985613847,0.65851137906503865,0.7347741508630673,0.67831183626961611,0.71645674029831519,0.69763152113498472,0,0.99858269567676194,0.05322217484217865,0.99433480021013709,0.1062934856473654,0.98726835472134455,0.15906349601907205,0.97740338981786667,0.21138262362962432,0.96476786881451593,0.26310256422752126,0.94939760846838128,0.31407671202194876,0.93133617745233843,0.36416057525282219,0.91063477285491323,0.41321218576837815,0.88735207505657154,0.46109250144932579,0.86155408139380607,0.5076658003388399,0.83331391908251495,0.5528000653611933,0.80271163793096367,0.59636735853850131,0.76983398342990628,0.63824418364482005,0.7347741508630673,0.67831183626961611,0.69763152113498472,0.71645674029831508,0.65851137906503865,0.75257076985613847,0.61752461494619193,0.78655155580264247,0.57478741021440694,0.81830277590816902,0.53042090811974252,0.84773442788967091,0.48455087033265021,0.87476308453196128,0.43730732045885545,0.89931213017121925,0.38882417547332071,0.92131197787041297,0.33923886611803039,0.94070026667103324,0.28869194733962117,0.95742203836200546,0.23732669987111499,0.97142989326470996,0.18528872408711453,0.98268412459252086,0.13272552728372197,0.9911528310040072,0.079786105553083103,0.99681200703075012,0.026620521437774818,0.99964561112345263,0,0.99681200703075012,0.079786105553083075,0.98726835472134455,0.15906349601907205,0.97142989326470996,0.23732669987111479,0.94939760846838128,0.31407671202194876,0.92131197787041297,0.3888241754733206,0.88735207505657154,0.46109250144932579,0.84773442788967102,0.53042090811974241,0.80271163793096367,0.59636735853850131,0.75257076985613858,0.65851137906503854,0.69763152113498483,0.71645674029831508,0.63824418364482016,0.76983398342990617,0.57478741021440694,0.81830277590816902,0.50766580033884001,0.86155408139380607,0.43730732045885545,0.89931213017121925,0.36416057525282231,0.93133617745233843,0.28869194733962117,0.95742203836200546,0.21138262362962451,0.97740338981786656,0.13272552728372219,0.99115283100400708,0.053222174842178914,0.99858269567676194,-0.026620521437774471,0.99964561112345263,-0.10629348564736529,0.99433480021013709,-0.18528872408711419,0.98268412459252097,-0.2631025642275211,0.96476786881451604,-0.33923886611803006,0.94070026667103335,-0.41321218576837793,0.91063477285491323,-0.4845508703326501,0.87476308453196128,-0.55280006536119308,0.83331391908251518,-0.61752461494619182,0.78655155580264258,-0.67831183626961578,0.73477415086306752,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]} diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/generic/rffti/test/fixtures/c/fftpack/medium.json b/lib/node_modules/@stdlib/fft/base/fftpack/generic/rffti/test/fixtures/c/fftpack/medium.json new file mode 100644 index 000000000000..92bc8b5c15e7 --- /dev/null +++ b/lib/node_modules/@stdlib/fft/base/fftpack/generic/rffti/test/fixtures/c/fftpack/medium.json @@ -0,0 +1 @@ +{"lengths":[95,94,71,43,92,43,90,30,62,57],"offsets":[0,95,189,260,303,395,438,528,558,620],"twiddles":[0.99781362721877453,0.066090584325699447,0.99126406932697519,0.1318921713420689,0.98037996587480936,0.19711702745148033,0.96520891027734868,0.26147994095381977,0.94581724170063464,0.32469946920468351,0.92228975497738475,0.38649916929245226,0.89472932982076347,0.44660880685280657,0.86325648095757379,0.50476553773484378,0.82800883114802004,0.56071505735167271,0,0.99126406932697519,0.1318921713420689,0.96520891027734868,0.26147994095381977,0.92228975497738475,0.38649916929245226,0.86325648095757379,0.50476553773484378,0.78914050939639357,0.61421271268966782,0.70123678427248859,0.71292844829139701,0.60108114728302509,0.79918799689492481,0.49042350383050809,0.87148424362727728,0.37119724891822076,0.92855403848970708,0,0.98037996587480936,0.19711702745148033,0.92228975497738475,0.38649916929245226,0.82800883114802004,0.56071505735167271,0.70123678427248859,0.71292844829139701,0.54694815812242692,0.83716647826252855,0.37119724891822076,0.92855403848970708,0.18088053433210999,0.98350507487238237,-0.016533944766358447,0.999863304992469,-0.21329963074374692,0.97698683078359927,0,0.96520891027734868,0.26147994095381977,0.86325648095757379,0.50476553773484378,0.70123678427248859,0.71292844829139701,0.49042350383050809,0.87148424362727728,0.24548548714079901,0.96940026593933049,-0.016533944766358447,0.999863304992469,-0.27740290876184465,0.96075367613684814,-0.51896957378121522,0.85479271258553891,-0.72442520479108896,0.68935340911856591,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.99776687862315316,0.066792633745121552,0.99107748815478014,0.13328695537377883,0.97996170503658686,0.19918598510383609,0.96446917505437657,0.26419540187128598,0.94466909160791879,0.32802485783956914,0.92064988667642877,0.39038927516349481,0.89251883585988123,0.45101011921610179,0.86040157926013938,0.50961664259191741,0.8244415603417603,0.5659470943305952,0.78479938527866089,0.61974988896024497,0.74165210564795758,0.67078473013922346,0.69519242767464229,0.71882368387792939,0.64562785155880242,0.76365219654733207,0.59317974472935531,0.80507005312756286,0.53808235316337272,0.84289227141679701,0.48058175518668378,0.8769499282066715,0.420934762428335,0.9070909137343407,0.3594077728375128,0.93318061104160255,0.29627558088563394,0.95510249720691243,0.2318201502675282,0.97275866376503717,0.16632935458313017,0.98607025399002857,0.10009569162409844,0.99497781508850403,0.033414977007674644,0.99944156373025461,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.99766876919053915,0.068242413364670976,0.99068594603633076,0.13616664909624659,0.97908408768232291,0.20345601305263378,0.96291728734779936,0.26979677115702427,0.94226092211882051,0.33487961217098611,0.91721130150545305,0.39840108984624145,0.88788521840237522,0.46006503773115215,0.85441940454648857,0.51958395003543356,0.81696989301044209,0.57668032211486708,0.77571129070441991,0.63108794432605275,0.73083596427812414,0.68255314321865401,0,0.99068594603633076,0.13616664909624659,0.96291728734779936,0.26979677115702427,0.91721130150545305,0.39840108984624145,0.85441940454648857,0.51958395003543356,0.77571129070441991,0.63108794432605275,0.68255314321865412,0.73083596427812403,0.57668032211486708,0.81696989301044198,0.4600650377311522,0.88788521840237522,0.33487961217098627,0.9422609221188204,0.20345601305263397,0.9790840876823228,0.068242413364671003,0.99766876919053915,0,0.97908408768232291,0.20345601305263378,0.91721130150545305,0.39840108984624145,0.81696989301044209,0.57668032211486708,0.68255314321865412,0.73083596427812403,0.51958395003543356,0.85441940454648857,0.33487961217098627,0.9422609221188204,0.13616664909624659,0.99068594603633076,-0.068242413364670879,0.99766876919053915,-0.26979677115702411,0.96291728734779936,-0.46006503773115209,0.88788521840237522,-0.63108794432605286,0.7757112907044198,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.9975640502598242,0.069756473744125302,0.99026806874157036,0.13917310096006544,0.97814760073380569,0.20791169081775934,0.96126169593831889,0.27563735581699916,0.93969262078590843,0.34202014332566871,0.91354545764260087,0.40673664307580021,0.88294759285892699,0.46947156278589081,0.84804809615642596,0.5299192642332049,0.80901699437494745,0.58778525229247314,0.76604444311897801,0.64278760968653925,0.71933980033865119,0.69465837045899725,0.66913060635885824,0.74314482547739424,0.61566147532565829,0.78801075360672201,0.55919290347074679,0.82903757255504174,0.50000000000000011,0.8660254037844386,0.43837114678907746,0.89879404629916693,0.37460659341591196,0.92718385456678742,0.30901699437494745,0.95105651629515353,0.24192189559966767,0.97029572627599647,0.17364817766693041,0.98480775301220802,0.10452846326765346,0.99452189536827329,0.03489949670250108,0.99939082701909576,0,0.99026806874157036,0.13917310096006544,0.96126169593831889,0.27563735581699916,0.91354545764260087,0.40673664307580021,0.84804809615642596,0.5299192642332049,0.76604444311897801,0.64278760968653925,0.66913060635885824,0.74314482547739424,0.55919290347074679,0.82903757255504174,0,0.96126169593831889,0.27563735581699916,0.84804809615642596,0.5299192642332049,0.66913060635885824,0.74314482547739424,0.43837114678907746,0.89879404629916693,0.17364817766693041,0.98480775301220802,-0.10452846326765355,0.99452189536827329,-0.37460659341591207,0.92718385456678742,0,0.91354545764260087,0.40673664307580021,0.66913060635885824,0.74314482547739424,0,0.66913060635885824,0.74314482547739424,-0.10452846326765355,0.99452189536827329,0,0,0,0,0,0,0.97814760073380569,0.20791169081775931,0.91354545764260087,0.40673664307580015,0.80901699437494745,0.58778525229247314,0.66913060635885824,0.74314482547739424,0.50000000000000011,0.8660254037844386,0.30901699437494745,0.95105651629515353,0.10452846326765368,0.99452189536827329,0,0.91354545764260087,0.40673664307580015,0.66913060635885824,0.74314482547739424,0,0.66913060635885824,0.74314482547739424,-0.10452846326765333,0.9945218953682734,0,0,0,0,0,0,0.99486932339189516,0.10116832198743217,0.97952994125249448,0.20129852008866006,0.95413925640004882,0.29936312297335793,0.9189578116202306,0.39435585511331855,0.87434661614458209,0.48530196253108104,0.82076344120727629,0.57126821509479231,0.75875812269279097,0.65137248272222226,0.68896691907568663,0.72479278722911999,0.61210598254766291,0.79077573693769854,0.52896401032696239,0.84864425749475092,0.44039415155763428,0.89780453957074169,0.34730525284482028,0.93775213214708042,0.25065253225872053,0.96807711886620429,0.1514277775045767,0.98846832432811138,0.050649168838712767,0.99871650717105276,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.99393067731794948,0.11000822099407929,0.97579638262743562,0.2186810912063758,0.94581724170063464,0.32469946920468346,0.90435716069757754,0.42677643549640365,0.85191940883832706,0.52367291398787785,0.78914050939639357,0.61421271268966782,0.71678251316845132,0.69729680109399539,0.63572374820996802,0.77191665091632089,0.54694815812242692,0.83716647826252855,0,0.97579638262743562,0.2186810912063758,0.90435716069757754,0.42677643549640365,0.78914050939639357,0.61421271268966782,0.63572374820996802,0.77191665091632089,0.45153335831088948,0.89225423861839392,0.24548548714079924,0.96940026593933037,0.027554342368162059,0.99962030702495142,-0.19171063192373838,0.98145149325241787,-0.40169542465296942,0.9157733266550574,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]} diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/generic/rffti/test/fixtures/c/fftpack/runner.c b/lib/node_modules/@stdlib/fft/base/fftpack/generic/rffti/test/fixtures/c/fftpack/runner.c new file mode 100644 index 000000000000..ee9a53000bd4 --- /dev/null +++ b/lib/node_modules/@stdlib/fft/base/fftpack/generic/rffti/test/fixtures/c/fftpack/runner.c @@ -0,0 +1,286 @@ +/** +* @license Apache-2.0 +* +* Copyright (c) 2026 The Stdlib Authors. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +/** +* Generate FFTPACK test fixtures. +* +* ## Notes +* +* - Run this script from the directory in which fixtures should be written. +* +*/ + +#include +#include +#include + +/** +* Define prototypes for external functions. +*/ +extern void rffti( int n, double *wsave ); + +/** +* Generates a random number on the interval [0,1]. +* +* @return random number +*/ +double rand_double( void ) { + int r = rand(); + return (double)r / ( (double)RAND_MAX + 1.0 ); +} + +/** +* Generates an array of pseudorandom integers drawn from a uniform distribution. +* +* ## Notes +* +* - WARNING: the method used here is not particularly robust, as some integer values may be sampled more frequently than others. +* +* +* @param out output array +* @param len array length +* @param a lower bound (inclusive) +* @param b upper bound (exclusive) +*/ +void rand_array_i32( int *out, const unsigned int len, const int a, const int b ) { + unsigned int i; + unsigned int r; + double delta; + + delta = (double)b - (double)a; + + for ( i = 0; i < len; i++ ) { + r = (unsigned int)( delta * rand_double() ); // truncation + out[ i ] = (int)( a + r ); + } +} + +/** +* Writes an array of doubles to a file as a series of comma-separated values. +* +* @param f file to write to +* @param x array of doubles +* @param len array length +*/ +void write_array_f64( FILE *f, const double *x, const unsigned int len ) { + unsigned int i; + + for ( i = 0; i < len; i++ ) { + fprintf( f, "%.17g", x[ i ] ); + if ( i < len-1 ) { + fprintf( f, "," ); + } + } +} + +/** +* Writes an array of integers to a file as a series of comma-separated values. +* +* @param f file to write to +* @param x array of integers +* @param len array length +*/ +void write_array_i32( FILE *f, const int *x, const unsigned int len ) { + unsigned int i; + + for ( i = 0; i < len; i++ ) { + fprintf( f, "%d", x[ i ] ); + if ( i < len-1 ) { + fprintf( f, "," ); + } + } +} + +/** +* Writes a named array of doubles to a file as JSON. +* +* @param f file to write to +* @param name array name +* @param x data +* @param len array length +*/ +void write_named_array_f64( FILE *f, const char *name, const double *x, const unsigned int len ) { + fprintf( f, "\"%s\":[", name ); + write_array_f64( f, x, len ); + fprintf( f, "]" ); +} + +/** +* Writes a named array of integers to a file as JSON. +* +* @param f file to write to +* @param name array name +* @param x data +* @param len array length +*/ +void write_named_array_i32( FILE *f, const char *name, const int *x, const unsigned int len ) { + fprintf( f, "\"%s\":[", name ); + write_array_i32( f, x, len ); + fprintf( f, "]" ); +} + +/** +* Writes data to a file as JSON. +* +* ## Notes +* +* - This function SHOULD be tailored to the input data (e.g., input types, output types, number of arguments, etc) and may vary from use case to use case. +* +* +* @param f file to write to +* @param lengths sequence lengths +* @param offsets twiddle offsets +* @param twiddles twiddle factors +* @param num number of sequence lengths +* @param total total number of twiddle values +*/ +void write_data_as_json( FILE *f, const int *lengths, const int *offsets, const double *twiddles, const unsigned int num, const unsigned int total ) { + fprintf( f, "{" ); + write_named_array_i32( f, "lengths", lengths, num ); + fprintf( f, "," ); + write_named_array_i32( f, "offsets", offsets, num ); + fprintf( f, "," ); + write_named_array_f64( f, "twiddles", twiddles, total ); + fprintf( f, "}\n" ); +} + +/** +* Generates test fixtures. +* +* @param lengths sequence lengths +* @param offsets twiddle offsets into flat output array +* @param num number of sequence lengths +* @param total total number of twiddle values +* @param name output filename +*/ +void generate( const int *lengths, const int *offsets, const unsigned int num, const unsigned int total, const char *name ) { + unsigned int i; + unsigned int j; + double *twiddles; + double *wsave; + FILE *f; + int off; + int n; + + // Allocate an output array: + twiddles = (double*) malloc( total * sizeof(double) ); + if ( twiddles == NULL ) { + printf( "Error allocating memory.\n" ); + exit( 1 ); + } + + // Generate fixture data: + for ( i = 0; i < num; i++ ) { + n = lengths[ i ]; + wsave = (double*) calloc( 2*n + 15, sizeof(double) ); + if ( wsave == NULL ) { + printf( "Error allocating memory.\n" ); + exit( 1 ); + } + rffti( n, wsave ); + + // Copy twiddle region into flat array (N values starting at wsave[n]): + off = offsets[ i ]; + for ( j = 0; j < (unsigned int)n; j++ ) { + twiddles[ off + j ] = wsave[ n + j ]; + } + free( wsave ); + } + // Open a new file: + f = fopen( name, "w" ); + if ( f == NULL ) { + printf( "Error opening file.\n" ); + exit( 1 ); + } + + // Write data as JSON: + write_data_as_json( f, lengths, offsets, twiddles, num, total ); + + // Close the file: + fclose( f ); + + // Free allocated memory: + free( twiddles ); +} + +/** +* Computes offsets into a flat twiddle array for each sequence length. +* +* @param offsets output array of offsets +* @param lengths sequence lengths +* @param num number of sequence lengths +* @return total number of twiddle values +*/ +unsigned int compute_offsets( int *offsets, const int *lengths, const unsigned int num ) { + unsigned int total; + unsigned int i; + + total = 0; + for ( i = 0; i < num; i++ ) { + offsets[ i ] = total; + total += lengths[ i ]; + } + return total; +} + +/** +* Main execution sequence. +*/ +int main( void ) { + unsigned int total; + unsigned int num; + int *lengths; + int *offsets; + + // Use the current time to seed the random number generator: + srand( time( NULL ) ); + + // Define the number of sequence lengths per range: + num = 10; + + // Allocate arrays: + lengths = (int*) malloc( num * sizeof(int) ); + if ( lengths == NULL ) { + printf( "Error allocating memory.\n" ); + exit( 1 ); + } + offsets = (int*) malloc( num * sizeof(int) ); + if ( offsets == NULL ) { + printf( "Error allocating memory.\n" ); + exit( 1 ); + } + + // Generate fixture data: + rand_array_i32( lengths, num, 2, 16 ); + total = compute_offsets( offsets, lengths, num ); + generate( lengths, offsets, num, total, "small.json" ); + + rand_array_i32( lengths, num, 16, 128 ); + total = compute_offsets( offsets, lengths, num ); + generate( lengths, offsets, num, total, "medium.json" ); + + rand_array_i32( lengths, num, 128, 1024 ); + total = compute_offsets( offsets, lengths, num ); + generate( lengths, offsets, num, total, "large.json" ); + + // Free allocated memory: + free( lengths ); + free( offsets ); + + return 0; +} diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/generic/rffti/test/fixtures/c/fftpack/small.json b/lib/node_modules/@stdlib/fft/base/fftpack/generic/rffti/test/fixtures/c/fftpack/small.json new file mode 100644 index 000000000000..843a8a90f932 --- /dev/null +++ b/lib/node_modules/@stdlib/fft/base/fftpack/generic/rffti/test/fixtures/c/fftpack/small.json @@ -0,0 +1 @@ +{"lengths":[11,10,14,12,10,13,11,3,12,7],"offsets":[0,11,21,35,47,57,70,81,84,96],"twiddles":[0,0,0,0,0,0,0,0,0,0,0,0.80901699437494745,0.58778525229247314,0.30901699437494745,0.95105651629515353,0,0,0,0,0,0,0.90096886790241915,0.43388373911755812,0.62348980185873359,0.7818314824680298,0.22252093395631445,0.97492791218182362,0,0,0,0,0,0,0,0,0.86602540378443871,0.49999999999999994,0,0.50000000000000011,0.8660254037844386,0,6.123233995736766e-17,1,0,0,0,0,0.80901699437494745,0.58778525229247314,0.30901699437494745,0.95105651629515353,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.86602540378443871,0.49999999999999994,0,0.50000000000000011,0.8660254037844386,0,6.123233995736766e-17,1,0,0,0,0,0,0,0,0,0,0,0]} diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/generic/rffti/test/test.js b/lib/node_modules/@stdlib/fft/base/fftpack/generic/rffti/test/test.js new file mode 100644 index 000000000000..dbb843b8ba34 --- /dev/null +++ b/lib/node_modules/@stdlib/fft/base/fftpack/generic/rffti/test/test.js @@ -0,0 +1,231 @@ +/** +* @license Apache-2.0 +* +* Copyright (c) 2026 The Stdlib Authors. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +'use strict'; + +// MODULES // + +var tape = require( 'tape' ); +var Float64Array = require( '@stdlib/array/float64' ); +var isAlmostSameValue = require( '@stdlib/number/float64/base/assert/is-almost-same-value' ); +var rffti = require( './../lib' ); + + +// FIXTURES // + +var small = require( './fixtures/c/fftpack/small.json' ); +var medium = require( './fixtures/c/fftpack/medium.json' ); +var large = require( './fixtures/c/fftpack/large.json' ); + + +// TESTS // + +tape( 'main export is a function', function test( t ) { + t.ok( true, __filename ); + t.strictEqual( typeof rffti, 'function', 'main export is a function' ); + t.end(); +}); + +tape( 'the function has an arity of 4', function test( t ) { + t.strictEqual( rffti.length, 4, 'returns expected value' ); + t.end(); +}); + +tape( 'the function returns a reference to the workspace array', function test( t ) { + var workspace; + var out; + var N; + + N = 8; + workspace = new Float64Array( ( 2*N ) + 34 ); + out = rffti( N, workspace, 1, 0 ); + + t.strictEqual( out, workspace, 'same reference' ); + t.end(); +}); + +tape( 'the function correctly initializes twiddle factors (small sequence lengths)', function test( t ) { + var workspace; + var expected; + var lengths; + var offsets; + var ulps; + var off; + var y; + var e; + var N; + var i; + var k; + + lengths = small.lengths; + offsets = small.offsets; + expected = small.twiddles; + + ulps = 1; + for ( k = 0; k < lengths.length; k++ ) { + N = lengths[ k ]; + off = offsets[ k ]; + workspace = new Float64Array( ( 2*N ) + 34 ); + rffti( N, workspace, 1, 0 ); + + t.strictEqual( workspace[ N-1 ], 0.0, 'returns expected value' ); + for ( i = 0; i < N; i++ ) { + y = workspace[ N+i ]; + e = expected[ off+i ]; + t.strictEqual( isAlmostSameValue( y, e, ulps ), true, 'within '+ulps+' ULPs. N: '+N+'. y: '+y+'. E: '+e ); + } + } + t.end(); +}); + +tape( 'the function correctly initializes twiddle factors (medium sequence lengths)', function test( t ) { + var workspace; + var expected; + var lengths; + var offsets; + var ulps; + var off; + var y; + var e; + var N; + var i; + var k; + + lengths = medium.lengths; + offsets = medium.offsets; + expected = medium.twiddles; + + ulps = 1; + for ( k = 0; k < lengths.length; k++ ) { + N = lengths[ k ]; + off = offsets[ k ]; + workspace = new Float64Array( ( 2*N ) + 34 ); + rffti( N, workspace, 1, 0 ); + + t.strictEqual( workspace[ N-1 ], 0.0, 'returns expected value' ); + for ( i = 0; i < N; i++ ) { + y = workspace[ N+i ]; + e = expected[ off+i ]; + t.strictEqual( isAlmostSameValue( y, e, ulps ), true, 'within '+ulps+' ULPs. N: '+N+'. y: '+y+'. E: '+e ); + } + } + t.end(); +}); + +tape( 'the function correctly initializes twiddle factors (large sequence lengths)', function test( t ) { + var workspace; + var expected; + var lengths; + var offsets; + var ulps; + var off; + var y; + var e; + var N; + var i; + var k; + + lengths = large.lengths; + offsets = large.offsets; + expected = large.twiddles; + + ulps = 1; + for ( k = 0; k < lengths.length; k++ ) { + N = lengths[ k ]; + off = offsets[ k ]; + workspace = new Float64Array( ( 2*N ) + 34 ); + rffti( N, workspace, 1, 0 ); + + t.strictEqual( workspace[ N-1 ], 0.0, 'returns expected value' ); + for ( i = 0; i < N; i++ ) { + y = workspace[ N+i ]; + e = expected[ off+i ]; + t.strictEqual( isAlmostSameValue( y, e, ulps ), true, 'within '+ulps+' ULPs. N: '+N+'. y: '+y+'. E: '+e ); + } + } + t.end(); +}); + +tape( 'the function does not modify the scratch region of the workspace', function test( t ) { + var workspace; + var N; + var i; + + N = 8; + workspace = new Float64Array( ( 2*N ) + 34 ); + + for ( i = 0; i < workspace.length; i++ ) { + workspace[ i ] = i + 1.0; + } + rffti( N, workspace, 1, 0 ); + for ( i = 0; i < N; i++ ) { + t.strictEqual( workspace[ i ], i + 1.0, 'returns expected value' ); + } + t.end(); +}); + +tape( 'the function does not modify the workspace when N is 1', function test( t ) { + var workspace; + var expected; + var N; + var i; + + N = 1; + workspace = new Float64Array( ( 2*N ) + 34 ); + for ( i = 0; i < workspace.length; i++ ) { + workspace[ i ] = i + 1.0; + } + expected = new Float64Array( workspace ); + + rffti( N, workspace, 1, 0 ); + + t.deepEqual( workspace, expected, 'returns expected value' ); + t.end(); +}); + +tape( 'the function correctly handles stride and offset parameters', function test( t ) { + var workspace; + var expected; + var stride; + var offset; + var nf; + var N; + var i; + + N = 8; + stride = 2; + offset = 3; + workspace = new Float64Array( offset + ( ( ( 2*N ) + 34 ) * stride ) ); + + rffti( N, workspace, stride, offset ); + + t.strictEqual( workspace[ offset + ( 2*N * stride ) ], N, 'returns expected value' ); + + nf = workspace[ offset + ( ( ( 2*N ) + 1 ) * stride ) ]; + t.strictEqual( nf, 2, 'returns expected value' ); + t.strictEqual( workspace[ offset + ( ( ( 2*N ) + 2 ) * stride ) ], 2, 'returns expected value' ); + t.strictEqual( workspace[ offset + ( ( ( 2*N ) + 3 ) * stride ) ], 4, 'returns expected value' ); + + expected = new Float64Array( ( 2*N ) + 34 ); + rffti( N, expected, 1, 0 ); + + for ( i = 0; i < N; i++ ) { + t.strictEqual( workspace[ offset + ( ( N+i ) * stride ) ], expected[ N+i ], 'returns expected value' ); + } + t.end(); +}); From ced088476b33b98b0d1762426e5344036034c87a Mon Sep 17 00:00:00 2001 From: Gunj Joshi Date: Tue, 18 Aug 2026 13:28:39 +0530 Subject: [PATCH 10/32] remove: remove `rffti` from namespace This commit removes the `rffti` symbol from the `@stdlib/fft/base/fftpack` namespace due to a package migration. BREAKING CHANGE: remove `rffti` To migrate, users should access the same symbol via the `@stdlib/fft/base/fftpack/generic` namespace. Ref: https://github.com/stdlib-js/metr-issue-tracker/issues/1165 --- type: pre_commit_static_analysis_report description: Results of running static analysis checks when committing changes. report: - task: lint_filenames status: passed - task: lint_editorconfig status: passed - task: lint_markdown_pkg_readmes status: na - task: lint_markdown_docs status: na - task: lint_markdown status: na - task: lint_package_json status: na - task: lint_repl_help status: na - task: lint_javascript_src status: passed - task: lint_javascript_cli status: na - task: lint_javascript_examples status: na - task: lint_javascript_tests status: na - task: lint_javascript_benchmarks status: na - task: lint_python status: na - task: lint_r status: na - task: lint_c_src status: na - task: lint_c_examples status: na - task: lint_c_benchmarks status: na - task: lint_c_tests_fixtures status: na - task: lint_shell status: na - task: lint_typescript_declarations status: passed - task: lint_typescript_tests status: passed - task: lint_license_headers status: passed --- --- .../fft/base/fftpack/docs/types/index.d.ts | 35 ------------------- .../@stdlib/fft/base/fftpack/lib/index.js | 9 ----- 2 files changed, 44 deletions(-) diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/docs/types/index.d.ts b/lib/node_modules/@stdlib/fft/base/fftpack/docs/types/index.d.ts index 0d2f03ce3dca..80d670dbd5d5 100644 --- a/lib/node_modules/@stdlib/fft/base/fftpack/docs/types/index.d.ts +++ b/lib/node_modules/@stdlib/fft/base/fftpack/docs/types/index.d.ts @@ -22,7 +22,6 @@ import cosqi = require( '@stdlib/fft/base/fftpack/cosqi' ); import costi = require( '@stdlib/fft/base/fftpack/costi' ); -import rffti = require( '@stdlib/fft/base/fftpack/rffti' ); import sinqi = require( '@stdlib/fft/base/fftpack/sinqi' ); import sinti = require( '@stdlib/fft/base/fftpack/sinti' ); @@ -103,40 +102,6 @@ interface Namespace { */ costi: typeof costi; - /** - * Initializes a workspace array for performing a real-valued Fourier transform. - * - * ## Notes - * - * - The workspace array should have a length of at least `( 2*N ) + 34` elements. - * - For single-point sequences (N=1), the function returns immediately as the FFT is the identity operation. - * - * @param N - length of the sequence - * @param workspace - workspace array - * @param strideW - stride length for `workspace` - * @param offsetW - starting index for `workspace` - * @returns workspace array - * - * @example - * var Float64Array = require( '@stdlib/array/float64' ); - * - * var N = 8; - * var workspace = new Float64Array( ( 2*N ) + 34 ); - * - * var out = ns.rffti( N, workspace, 1, 0 ); - * // returns - * - * var bool = ( out === workspace ); - * // returns true - * - * var twiddleFactors = workspace.slice( N, 2*N ); - * // returns [ ~0.707, ~0.707, 0, 0, 0, 0, 0, 0 ] - * - * var factors = workspace.slice( 2*N, ( 2*N ) + 4 ); - * // returns [ 8, 2, 2, 4 ] - */ - rffti: typeof rffti; - /** * Initializes a workspace array for performing a quarter-wave sine transform. * diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/lib/index.js b/lib/node_modules/@stdlib/fft/base/fftpack/lib/index.js index 9bc8ac037c87..2519ae1de318 100644 --- a/lib/node_modules/@stdlib/fft/base/fftpack/lib/index.js +++ b/lib/node_modules/@stdlib/fft/base/fftpack/lib/index.js @@ -58,15 +58,6 @@ setReadOnly( ns, 'cosqi', require( '@stdlib/fft/base/fftpack/cosqi' ) ); */ setReadOnly( ns, 'costi', require( '@stdlib/fft/base/fftpack/costi' ) ); -/** -* @name rffti -* @memberof ns -* @readonly -* @type {Function} -* @see {@link module:@stdlib/fft/base/fftpack/rffti} -*/ -setReadOnly( ns, 'rffti', require( '@stdlib/fft/base/fftpack/rffti' ) ); - /** * @name sinqi * @memberof ns From db929ed634a85e19e0b3d182fc230cc4dc34d089 Mon Sep 17 00:00:00 2001 From: Gunj Joshi Date: Tue, 18 Aug 2026 13:29:15 +0530 Subject: [PATCH 11/32] refactor: update paths Ref: https://github.com/stdlib-js/metr-issue-tracker/issues/1165 --- type: pre_commit_static_analysis_report description: Results of running static analysis checks when committing changes. report: - task: lint_filenames status: passed - task: lint_editorconfig status: passed - task: lint_markdown_pkg_readmes status: passed - task: lint_markdown_docs status: na - task: lint_markdown status: na - task: lint_package_json status: na - task: lint_repl_help status: passed - task: lint_javascript_src status: passed - task: lint_javascript_cli status: na - task: lint_javascript_examples status: passed - task: lint_javascript_tests status: passed - task: lint_javascript_benchmarks status: passed - task: lint_python status: na - task: lint_r status: na - task: lint_c_src status: na - task: lint_c_examples status: na - task: lint_c_benchmarks status: na - task: lint_c_tests_fixtures status: na - task: lint_shell status: na - task: lint_typescript_declarations status: passed - task: lint_typescript_tests status: passed - task: lint_license_headers status: passed --- --- lib/node_modules/@stdlib/fft/base/fftpack/README.md | 4 ++-- .../@stdlib/fft/base/fftpack/cosqi/lib/main.js | 2 +- .../@stdlib/fft/base/fftpack/costi/lib/main.js | 2 +- .../@stdlib/fft/base/fftpack/ndarray/rffti/lib/main.js | 2 +- lib/node_modules/@stdlib/fft/base/fftpack/rfftf/README.md | 8 ++++---- .../@stdlib/fft/base/fftpack/rfftf/benchmark/benchmark.js | 2 +- .../@stdlib/fft/base/fftpack/rfftf/docs/repl.txt | 2 +- .../@stdlib/fft/base/fftpack/rfftf/docs/types/index.d.ts | 2 +- .../@stdlib/fft/base/fftpack/rfftf/examples/index.js | 2 +- .../@stdlib/fft/base/fftpack/rfftf/lib/index.js | 2 +- .../@stdlib/fft/base/fftpack/rfftf/lib/main.js | 2 +- .../@stdlib/fft/base/fftpack/rfftf/test/test.js | 2 +- .../@stdlib/fft/base/fftpack/sinti/lib/main.js | 2 +- 13 files changed, 17 insertions(+), 17 deletions(-) diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/README.md b/lib/node_modules/@stdlib/fft/base/fftpack/README.md index b2db94ae2fd6..99f304b79d70 100644 --- a/lib/node_modules/@stdlib/fft/base/fftpack/README.md +++ b/lib/node_modules/@stdlib/fft/base/fftpack/README.md @@ -47,7 +47,7 @@ var o = ns; - [`cosqi( N, workspace, strideW, offsetW )`][@stdlib/fft/base/fftpack/cosqi]: initialize a workspace array for performing a quarter-wave cosine transform. - [`costi( N, workspace, strideW, offsetW )`][@stdlib/fft/base/fftpack/costi]: initialize a workspace array for performing a cosine transform. - [`decompose( N, M, initial, si, oi, out, so, oo )`][@stdlib/fft/base/fftpack/decompose]: factorize a sequence length into a product of integers. -- [`rffti( N, workspace, strideW, offsetW )`][@stdlib/fft/base/fftpack/rffti]: initialize a workspace array for performing a real-valued Fourier transform. +- [`rffti( N, workspace, strideW, offsetW )`][@stdlib/fft/base/fftpack/generic/rffti]: initialize a workspace array for performing a real-valued Fourier transform. - [`sinqi( N, workspace, strideW, offsetW )`][@stdlib/fft/base/fftpack/sinqi]: initialize a workspace array for performing a quarter-wave sine transform. - [`sinti( N, workspace, strideW, offsetW )`][@stdlib/fft/base/fftpack/sinti]: initialize a workspace array for performing a sine transform. @@ -100,7 +100,7 @@ console.log( objectKeys( ns ) ); [@stdlib/fft/base/fftpack/decompose]: https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/fft/base/fftpack/decompose -[@stdlib/fft/base/fftpack/rffti]: https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/fft/base/fftpack/rffti +[@stdlib/fft/base/fftpack/generic/rffti]: https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/fft/base/fftpack/generic/rffti [@stdlib/fft/base/fftpack/sinqi]: https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/fft/base/fftpack/sinqi diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/cosqi/lib/main.js b/lib/node_modules/@stdlib/fft/base/fftpack/cosqi/lib/main.js index 24d6b4da6a29..8279fd9e3ef6 100644 --- a/lib/node_modules/@stdlib/fft/base/fftpack/cosqi/lib/main.js +++ b/lib/node_modules/@stdlib/fft/base/fftpack/cosqi/lib/main.js @@ -62,7 +62,7 @@ var cos = require( '@stdlib/math/base/special/cos' ); var HALF_PI = require( '@stdlib/constants/float64/half-pi' ); -var rffti = require( '@stdlib/fft/base/fftpack/rffti' ); +var rffti = require( '@stdlib/fft/base/fftpack/generic/rffti' ); // MAIN // diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/costi/lib/main.js b/lib/node_modules/@stdlib/fft/base/fftpack/costi/lib/main.js index 7c289635ee44..be4d132bd82d 100644 --- a/lib/node_modules/@stdlib/fft/base/fftpack/costi/lib/main.js +++ b/lib/node_modules/@stdlib/fft/base/fftpack/costi/lib/main.js @@ -63,7 +63,7 @@ var sincos = require( '@stdlib/math/base/special/sincos' ).assign; var PI = require( '@stdlib/constants/float64/pi' ); var floor = require( '@stdlib/math/base/special/floor' ); -var rffti = require( '@stdlib/fft/base/fftpack/rffti' ); +var rffti = require( '@stdlib/fft/base/fftpack/generic/rffti' ); // VARIABLES // diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/ndarray/rffti/lib/main.js b/lib/node_modules/@stdlib/fft/base/fftpack/ndarray/rffti/lib/main.js index 8878a9993896..3826d518e4b3 100644 --- a/lib/node_modules/@stdlib/fft/base/fftpack/ndarray/rffti/lib/main.js +++ b/lib/node_modules/@stdlib/fft/base/fftpack/ndarray/rffti/lib/main.js @@ -23,7 +23,7 @@ var getStride = require( '@stdlib/ndarray/base/stride' ); var getOffset = require( '@stdlib/ndarray/base/offset' ); var getData = require( '@stdlib/ndarray/base/data-buffer' ); -var strided = require( '@stdlib/fft/base/fftpack/rffti' ); +var strided = require( '@stdlib/fft/base/fftpack/generic/rffti' ); var ndarraylike2scalar = require( '@stdlib/ndarray/base/ndarraylike2scalar' ); diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/rfftf/README.md b/lib/node_modules/@stdlib/fft/base/fftpack/rfftf/README.md index 310db951e449..d1bc2a8f7277 100644 --- a/lib/node_modules/@stdlib/fft/base/fftpack/rfftf/README.md +++ b/lib/node_modules/@stdlib/fft/base/fftpack/rfftf/README.md @@ -46,7 +46,7 @@ Computes the forward discrete Fourier transform (DFT) of a real-valued sequence. ```javascript var Float64Array = require( '@stdlib/array/float64' ); -var rffti = require( '@stdlib/fft/base/fftpack/rffti' ); +var rffti = require( '@stdlib/fft/base/fftpack/generic/rffti' ); var N = 4; var w = new Float64Array( ( 2*N ) + 34 ); @@ -80,7 +80,7 @@ The function accepts the following arguments: ## Notes -- Before calling this function, initialize the workspace by calling [`rffti`][@stdlib/fft/base/fftpack/rffti] with the same sequence length and workspace layout. +- Before calling this function, initialize the workspace by calling [`rffti`][@stdlib/fft/base/fftpack/generic/rffti] with the same sequence length and workspace layout. - The function performs the transform in-place (i.e., the input array is **mutated**). @@ -109,7 +109,7 @@ The function accepts the following arguments: ```javascript var zeros = require( '@stdlib/array/zeros' ); var discreteUniform = require( '@stdlib/random/array/discrete-uniform' ); -var rffti = require( '@stdlib/fft/base/fftpack/rffti' ); +var rffti = require( '@stdlib/fft/base/fftpack/generic/rffti' ); var rfftf = require( '@stdlib/fft/base/fftpack/rfftf' ); var N = 4; @@ -151,7 +151,7 @@ console.log( r );
@@ -102,7 +102,7 @@ console.log( objectKeys( ns ) ); [@stdlib/fft/base/fftpack/generic/rffti]: https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/fft/base/fftpack/generic/rffti -[@stdlib/fft/base/fftpack/sinqi]: https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/fft/base/fftpack/sinqi +[@stdlib/fft/base/fftpack/generic/sinqi]: https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/fft/base/fftpack/generic/sinqi [@stdlib/fft/base/fftpack/generic/sinti]: https://github.com/stdlib-js/stdlib/tree/develop/lib/node_modules/%40stdlib/fft/base/fftpack/generic/sinti From 6e47575cf131a154aad1a1321ccbe078ec7cb8c1 Mon Sep 17 00:00:00 2001 From: Gunj Joshi Date: Tue, 18 Aug 2026 13:41:31 +0530 Subject: [PATCH 28/32] remove: remove `fft/base/fftpack/sinqi` This commit removes `@stdlib/fft/base/fftpack/sinqi` in favor of `@stdlib/fft/base/fftpack/generic/sinqi`. BREAKING CHANGE: remove `fft/base/fftpack/sinqi` To migrate, users should update their require/import paths to use `@stdlib/fft/base/fftpack/generic/sinqi` which provides the same API and implementation. Ref: https://github.com/stdlib-js/metr-issue-tracker/issues/1165 --- type: pre_commit_static_analysis_report description: Results of running static analysis checks when committing changes. report: - task: lint_filenames status: passed - task: lint_editorconfig status: passed - task: lint_markdown_pkg_readmes status: na - task: lint_markdown_docs status: na - task: lint_markdown status: na - task: lint_package_json status: na - task: lint_repl_help status: na - task: lint_javascript_src status: na - task: lint_javascript_cli status: na - task: lint_javascript_examples status: na - task: lint_javascript_tests status: na - task: lint_javascript_benchmarks status: na - task: lint_python status: na - task: lint_r status: na - task: lint_c_src status: na - task: lint_c_examples status: na - task: lint_c_benchmarks status: na - task: lint_c_tests_fixtures status: na - task: lint_shell status: na - task: lint_typescript_declarations status: passed - task: lint_typescript_tests status: na - task: lint_license_headers status: passed --- --- .../@stdlib/fft/base/fftpack/sinqi/README.md | 173 ---------- .../base/fftpack/sinqi/benchmark/benchmark.js | 101 ------ .../fft/base/fftpack/sinqi/docs/repl.txt | 60 ---- .../base/fftpack/sinqi/docs/types/index.d.ts | 64 ---- .../fft/base/fftpack/sinqi/docs/types/test.ts | 94 ------ .../fft/base/fftpack/sinqi/examples/index.js | 45 --- .../fft/base/fftpack/sinqi/lib/index.js | 56 ---- .../fft/base/fftpack/sinqi/lib/main.js | 166 --------- .../fft/base/fftpack/sinqi/package.json | 64 ---- .../sinqi/test/fixtures/c/fftpack/Makefile | 137 -------- .../sinqi/test/fixtures/c/fftpack/large.json | 1 - .../sinqi/test/fixtures/c/fftpack/medium.json | 1 - .../sinqi/test/fixtures/c/fftpack/runner.c | 304 ----------------- .../sinqi/test/fixtures/c/fftpack/small.json | 1 - .../fft/base/fftpack/sinqi/test/test.js | 314 ------------------ 15 files changed, 1581 deletions(-) delete mode 100644 lib/node_modules/@stdlib/fft/base/fftpack/sinqi/README.md delete mode 100644 lib/node_modules/@stdlib/fft/base/fftpack/sinqi/benchmark/benchmark.js delete mode 100644 lib/node_modules/@stdlib/fft/base/fftpack/sinqi/docs/repl.txt delete mode 100644 lib/node_modules/@stdlib/fft/base/fftpack/sinqi/docs/types/index.d.ts delete mode 100644 lib/node_modules/@stdlib/fft/base/fftpack/sinqi/docs/types/test.ts delete mode 100644 lib/node_modules/@stdlib/fft/base/fftpack/sinqi/examples/index.js delete mode 100644 lib/node_modules/@stdlib/fft/base/fftpack/sinqi/lib/index.js delete mode 100644 lib/node_modules/@stdlib/fft/base/fftpack/sinqi/lib/main.js delete mode 100644 lib/node_modules/@stdlib/fft/base/fftpack/sinqi/package.json delete mode 100644 lib/node_modules/@stdlib/fft/base/fftpack/sinqi/test/fixtures/c/fftpack/Makefile delete mode 100644 lib/node_modules/@stdlib/fft/base/fftpack/sinqi/test/fixtures/c/fftpack/large.json delete mode 100644 lib/node_modules/@stdlib/fft/base/fftpack/sinqi/test/fixtures/c/fftpack/medium.json delete mode 100644 lib/node_modules/@stdlib/fft/base/fftpack/sinqi/test/fixtures/c/fftpack/runner.c delete mode 100644 lib/node_modules/@stdlib/fft/base/fftpack/sinqi/test/fixtures/c/fftpack/small.json delete mode 100644 lib/node_modules/@stdlib/fft/base/fftpack/sinqi/test/test.js diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/sinqi/README.md b/lib/node_modules/@stdlib/fft/base/fftpack/sinqi/README.md deleted file mode 100644 index 7b08061e0f11..000000000000 --- a/lib/node_modules/@stdlib/fft/base/fftpack/sinqi/README.md +++ /dev/null @@ -1,173 +0,0 @@ - - -# sinqi - -> Initialize a workspace array for performing a quarter-wave sine transform. - - - -
- -
- - - - - -
- -## Usage - -```javascript -var sinqi = require( '@stdlib/fft/base/fftpack/sinqi' ); -``` - -#### sinqi( N, workspace, strideW, offsetW ) - -Initializes a workspace array for performing a quarter-wave sine transform. - -```javascript -var Float64Array = require( '@stdlib/array/float64' ); - -var N = 8; -var workspace = new Float64Array( ( 3*N ) + 34 ); - -var out = sinqi( N, workspace, 1, 0 ); -// returns - -var bool = ( out === workspace ); -// returns true - -var cosineTable = workspace.slice( 0, N ); -// returns [ ~0.98, ~0.92, ~0.83, ~0.7, ~0.56, ~0.38, ~0.2, ~0.0 ] - -var twiddleFactors = workspace.slice( 2*N, 3*N ); -// returns [ ~0.707, ~0.707, 0, 0, 0, 0, 0, 0 ] - -var factors = workspace.slice( 3*N, ( 3*N ) + 4 ); -// returns [ 8, 2, 2, 4 ] -``` - -The function accepts the following arguments: - -- **N**: length of the sequence to transform. -- **workspace**: workspace array. -- **strideW**: stride length for `workspace`. -- **offsetW**: starting index for `workspace`. - -
- - - - - -
- -## Notes - -- The workspace array is divided into four sections: - - ```text - size = N N N 2+ceil(log2(N)/2) - ↓ ↓ ↓ ↓ - | cosine table | scratch / workspace | twiddle factors | radix factor table | - ↑ ↑ ↑ ↑ - i = 0 ... N ... 2N ... 3N ... - ``` - - - **cosine table**: a table of precomputed cosine coefficients used by quarter-wave sine transforms. - - **scratch/workspace**: used as a scratch space when performing transforms. This section is not updated during initialization. - - **twiddle factors**: a table of reusable complex-exponential constants stored as cosine/sine pairs. - - **radix factor table**: a table containing the sequence length `N`, the number of factors into which `N` was decomposed, and the individual integer radix factors. - -- In general, a workspace array should have `3N + 34` indexed elements (as `log2(N)/2 ≤ 32` for all `2^64`). During initialization, only the sections for storing the cosine coefficients, twiddle factors, and the factorization of `N` are updated. - -- The radix factor table is comprised as follows: - - ```text - | sequence_length | number_of_factors | integer_factors | - ``` - -
- - - -
- -## Examples - - - -```javascript -var Float64Array = require( '@stdlib/array/float64' ); -var zeroTo = require( '@stdlib/array/zero-to' ); -var logEach = require( '@stdlib/console/log-each' ); -var sinqi = require( '@stdlib/fft/base/fftpack/sinqi' ); - -var N = 8; -var workspace = new Float64Array( ( 3*N ) + 34 ); - -sinqi( N, workspace, 1, 0 ); -console.log( 'Sequence length: %d', N ); - -console.log( 'Cosine table:' ); -var idx = zeroTo( N, 'generic' ); -logEach( ' workspace[ %d ] = %0.4f', idx, workspace.slice( 0, N ) ); - -console.log( 'Twiddle factors:' ); -idx = zeroTo( N, 'generic' ); -logEach( ' workspace[ %d ] = %0.4f', idx, workspace.slice( 2*N, 3*N ) ); - -console.log( 'Factorization:' ); -var nf = workspace[ (3*N)+1 ]; - -console.log( ' number of factors: %d', nf ); -idx = zeroTo( nf, 'generic' ); -logEach( ' factor[ %d ]: %d', idx, workspace.slice( (3*N)+2, (3*N)+2+nf ) ); -``` - -
- - - - - -
- -
- - - - - - - - - - - - - - diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/sinqi/benchmark/benchmark.js b/lib/node_modules/@stdlib/fft/base/fftpack/sinqi/benchmark/benchmark.js deleted file mode 100644 index 6eca980065f6..000000000000 --- a/lib/node_modules/@stdlib/fft/base/fftpack/sinqi/benchmark/benchmark.js +++ /dev/null @@ -1,101 +0,0 @@ -/* -* @license Apache-2.0 -* -* Copyright (c) 2026 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench' ); -var format = require( '@stdlib/string/format' ); -var isnan = require( '@stdlib/math/base/assert/is-nan' ); -var Float64Array = require( '@stdlib/array/float64' ); -var pkg = require( './../package.json' ).name; -var sinqi = require( './../lib' ); - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} N - sequence length -* @returns {Function} benchmark function -*/ -function createBenchmark( N ) { - var workspace = new Float64Array( ( 3*N ) + 34 ); - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - sinqi( N, workspace, 1, 0 ); - if ( isnan( workspace[ 2*N ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( workspace[ 2*N ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var lengths; - var N; - var f; - var i; - - lengths = [ - 8, - 16, - 32, - 64, - 128, - 256, - 512, - 1024 - ]; - - for ( i = 0; i < lengths.length; i++ ) { - N = lengths[ i ]; - f = createBenchmark( N ); - bench( format( '%s:N=%d', pkg, N ), f ); - } -} - -main(); diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/sinqi/docs/repl.txt b/lib/node_modules/@stdlib/fft/base/fftpack/sinqi/docs/repl.txt deleted file mode 100644 index a1306dd597ab..000000000000 --- a/lib/node_modules/@stdlib/fft/base/fftpack/sinqi/docs/repl.txt +++ /dev/null @@ -1,60 +0,0 @@ - -{{alias}}( N, workspace, strideW, offsetW ) - Initializes a workspace array for performing a quarter-wave sine transform. - - The workspace array is divided into four sections: - - 1. cosine table: the section ranges from indices 0 to N-1 and is used to - store a table of precomputed cosine coefficients used by quarter-wave sine - transforms. - - 2. scratch/workspace: the section ranges from indices N to 2N-1 and is used - while performing transforms. This section is not updated during - initialization. - - 3. twiddle factors: the section ranges from indices 2N to 3N-1 and stores a - table of reusable complex exponential constants as cosine/sine pairs. - - 4. radix factor table: the section starts at index 3N and stores the - sequence length N, the number of factors into which N was decomposed, and - the individual integer radix factors. - - Any remaining array space remains as unused storage. - - Parameters - ---------- - N: integer - Length of the sequence. - - workspace: ArrayLikeObject - Workspace array. - - strideW: integer - Stride length for `workspace`. - - offsetW: integer - Starting index for `workspace`. - - Returns - ------- - out: ArrayLikeObject - Workspace array. - - Examples - -------- - > var N = 8; - > var workspace = new {{alias:@stdlib/array/float64}}( ( 3*N ) + 34 ); - > var out = {{alias}}( N, workspace, 1, 0 ) - - > var bool = ( out === workspace ) - true - > var cosineTable = workspace.slice( 0, N ) - [ ~0.98, ~0.92, ~0.83, ~0.7, ~0.56, ~0.38, ~0.2, ~0.0 ] - > var twiddleFactors = workspace.slice( 2*N, 3*N ) - [ ~0.707, ~0.707, 0, 0, 0, 0, 0, 0 ] - > var factors = workspace.slice( 3*N, ( 3*N ) + 4 ) - [ 8, 2, 2, 4 ] - - See Also - -------- - diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/sinqi/docs/types/index.d.ts b/lib/node_modules/@stdlib/fft/base/fftpack/sinqi/docs/types/index.d.ts deleted file mode 100644 index 6e5a33c1eb91..000000000000 --- a/lib/node_modules/@stdlib/fft/base/fftpack/sinqi/docs/types/index.d.ts +++ /dev/null @@ -1,64 +0,0 @@ -/* -* @license Apache-2.0 -* -* Copyright (c) 2026 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -// TypeScript Version: 4.1 - -/// - -import { Collection } from '@stdlib/types/array'; - -/** -* Initializes a workspace array for performing a quarter-wave sine transform. -* -* ## Notes -* -* - The workspace array should have a length of at least `( 3*N ) + 34` elements. -* -* @param N - length of the sequence -* @param workspace - workspace array -* @param strideW - stride length for `workspace` -* @param offsetW - starting index for `workspace` -* @returns workspace array -* -* @example -* var Float64Array = require( '@stdlib/array/float64' ); -* -* var N = 8; -* var workspace = new Float64Array( ( 3*N ) + 34 ); -* -* var out = sinqi( N, workspace, 1, 0 ); -* // returns -* -* var bool = ( out === workspace ); -* // returns true -* -* var cosineTable = workspace.slice( 0, N ); -* // returns [ ~0.98, ~0.92, ~0.83, ~0.7, ~0.56, ~0.38, ~0.2, ~0.0 ] -* -* var twiddleFactors = workspace.slice( 2*N, 3*N ); -* // returns [ ~0.707, ~0.707, 0, 0, 0, 0, 0, 0 ] -* -* var factors = workspace.slice( 3*N, ( 3*N ) + 4 ); -* // returns [ 8, 2, 2, 4 ] -*/ -declare function sinqi>( N: number, workspace: T, strideW: number, offsetW: number ): T; - - -// EXPORTS // - -export = sinqi; diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/sinqi/docs/types/test.ts b/lib/node_modules/@stdlib/fft/base/fftpack/sinqi/docs/types/test.ts deleted file mode 100644 index d83822498291..000000000000 --- a/lib/node_modules/@stdlib/fft/base/fftpack/sinqi/docs/types/test.ts +++ /dev/null @@ -1,94 +0,0 @@ -/* -* @license Apache-2.0 -* -* Copyright (c) 2026 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -import sinqi = require( './index' ); - - -// TESTS // - -// The function returns a collection... -{ - const workspace = new Float64Array( ( 3*8 ) + 34 ); - - sinqi( 8, workspace, 1, 0 ); // $ExpectType Float64Array -} - -// The compiler throws an error if the function is provided a first argument which is not a number... -{ - const workspace = new Float64Array( ( 3*8 ) + 34 ); - - sinqi( '8', workspace, 1, 0 ); // $ExpectError - sinqi( true, workspace, 1, 0 ); // $ExpectError - sinqi( false, workspace, 1, 0 ); // $ExpectError - sinqi( null, workspace, 1, 0 ); // $ExpectError - sinqi( void 0, workspace, 1, 0 ); // $ExpectError - sinqi( [], workspace, 1, 0 ); // $ExpectError - sinqi( {}, workspace, 1, 0 ); // $ExpectError - sinqi( ( x: number ): number => x, workspace, 1, 0 ); // $ExpectError -} - -// The compiler throws an error if the function is provided a second argument which is not a collection... -{ - sinqi( 8, '50', 1, 0 ); // $ExpectError - sinqi( 8, 50, 1, 0 ); // $ExpectError - sinqi( 8, true, 1, 0 ); // $ExpectError - sinqi( 8, false, 1, 0 ); // $ExpectError - sinqi( 8, null, 1, 0 ); // $ExpectError - sinqi( 8, void 0, 1, 0 ); // $ExpectError - sinqi( 8, {}, 1, 0 ); // $ExpectError - sinqi( 8, ( x: number ): number => x, 1, 0 ); // $ExpectError -} - -// The compiler throws an error if the function is provided a third argument which is not a number... -{ - const workspace = new Float64Array( ( 3*8 ) + 34 ); - - sinqi( 8, workspace, '1', 0 ); // $ExpectError - sinqi( 8, workspace, true, 0 ); // $ExpectError - sinqi( 8, workspace, false, 0 ); // $ExpectError - sinqi( 8, workspace, null, 0 ); // $ExpectError - sinqi( 8, workspace, void 0, 0 ); // $ExpectError - sinqi( 8, workspace, [], 0 ); // $ExpectError - sinqi( 8, workspace, {}, 0 ); // $ExpectError - sinqi( 8, workspace, ( x: number ): number => x, 0 ); // $ExpectError -} - -// The compiler throws an error if the function is provided a fourth argument which is not a number... -{ - const workspace = new Float64Array( ( 3*8 ) + 34 ); - - sinqi( 8, workspace, 1, '0' ); // $ExpectError - sinqi( 8, workspace, 1, true ); // $ExpectError - sinqi( 8, workspace, 1, false ); // $ExpectError - sinqi( 8, workspace, 1, null ); // $ExpectError - sinqi( 8, workspace, 1, void 0 ); // $ExpectError - sinqi( 8, workspace, 1, [] ); // $ExpectError - sinqi( 8, workspace, 1, {} ); // $ExpectError - sinqi( 8, workspace, 1, ( x: number ): number => x ); // $ExpectError -} - -// The compiler throws an error if the function is provided an unsupported number of arguments... -{ - const workspace = new Float64Array( ( 3*8 ) + 34 ); - - sinqi(); // $ExpectError - sinqi( 8 ); // $ExpectError - sinqi( 8, workspace ); // $ExpectError - sinqi( 8, workspace, 1 ); // $ExpectError - sinqi( 8, workspace, 1, 0, 123 ); // $ExpectError -} diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/sinqi/examples/index.js b/lib/node_modules/@stdlib/fft/base/fftpack/sinqi/examples/index.js deleted file mode 100644 index 026f750043af..000000000000 --- a/lib/node_modules/@stdlib/fft/base/fftpack/sinqi/examples/index.js +++ /dev/null @@ -1,45 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2026 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -var Float64Array = require( '@stdlib/array/float64' ); -var zeroTo = require( '@stdlib/array/zero-to' ); -var logEach = require( '@stdlib/console/log-each' ); -var sinqi = require( './../lib' ); - -var N = 8; -var workspace = new Float64Array( ( 3*N ) + 34 ); - -sinqi( N, workspace, 1, 0 ); -console.log( 'Sequence length: %d', N ); - -console.log( 'Cosine table:' ); -var idx = zeroTo( N, 'generic' ); -logEach( ' workspace[ %d ] = %0.4f', idx, workspace.slice( 0, N ) ); - -console.log( 'Twiddle factors:' ); -idx = zeroTo( N, 'generic' ); -logEach( ' workspace[ %d ] = %0.4f', idx, workspace.slice( 2*N, 3*N ) ); - -console.log( 'Factorization:' ); -var nf = workspace[ (3*N)+1 ]; - -console.log( ' number of factors: %d', nf ); -idx = zeroTo( nf, 'generic' ); -logEach( ' factor[ %d ]: %d', idx, workspace.slice( (3*N)+2, (3*N)+2+nf ) ); diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/sinqi/lib/index.js b/lib/node_modules/@stdlib/fft/base/fftpack/sinqi/lib/index.js deleted file mode 100644 index 10f4e9017dd2..000000000000 --- a/lib/node_modules/@stdlib/fft/base/fftpack/sinqi/lib/index.js +++ /dev/null @@ -1,56 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2026 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -/** -* Initialize a workspace array for performing a quarter-wave sine transform. -* -* @module @stdlib/fft/base/fftpack/sinqi -* -* @example -* var Float64Array = require( '@stdlib/array/float64' ); -* var sinqi = require( '@stdlib/fft/base/fftpack/sinqi' ); -* -* var N = 8; -* var workspace = new Float64Array( ( 3*N ) + 34 ); -* -* var out = sinqi( N, workspace, 1, 0 ); -* // returns -* -* var bool = ( out === workspace ); -* // returns true -* -* var cosineTable = workspace.slice( 0, N ); -* // returns [ ~0.98, ~0.92, ~0.83, ~0.7, ~0.56, ~0.38, ~0.2, ~0.0 ] -* -* var twiddleFactors = workspace.slice( 2*N, 3*N ); -* // returns [ ~0.707, ~0.707, 0, 0, 0, 0, 0, 0 ] -* -* var factors = workspace.slice( 3*N, ( 3*N ) + 4 ); -* // returns [ 8, 2, 2, 4 ] -*/ - -// MODULES // - -var main = require( './main.js' ); - - -// EXPORTS // - -module.exports = main; diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/sinqi/lib/main.js b/lib/node_modules/@stdlib/fft/base/fftpack/sinqi/lib/main.js deleted file mode 100644 index a707e7335ca8..000000000000 --- a/lib/node_modules/@stdlib/fft/base/fftpack/sinqi/lib/main.js +++ /dev/null @@ -1,166 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2026 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -* -* -* ## Notice -* -* The original C code and copyright notice are from the [PFFFT library]{@link https://github.com/marton78/pffft/blob/0b4ee12c4ba45a4a8e567550c16d96d1679f50ce/src/fftpack.c}. The implementation follows the original, but has been modified for JavaScript. -* -* ```text -* Copyright (c) 2004 the University Corporation for Atmospheric -* Research ("UCAR"). All rights reserved. Developed by NCAR's -* Computational and Information Systems Laboratory, UCAR, -* www.cisl.ucar.edu. -* -* Redistribution and use of the Software in source and binary forms, -* with or without modification, is permitted provided that the -* following conditions are met: -* -* - Neither the names of NCAR's Computational and Information Systems -* Laboratory, the University Corporation for Atmospheric Research, -* nor the names of its sponsors or contributors may be used to -* endorse or promote products derived from this Software without -* specific prior written permission. -* -* - Redistributions of source code must retain the above copyright -* notices, this list of conditions, and the disclaimer below. -* -* - Redistributions in binary form must reproduce the above copyright -* notice, this list of conditions, and the disclaimer below in the -* documentation and/or other materials provided with the -* distribution. -* -* THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -* EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO THE WARRANTIES OF -* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -* NONINFRINGEMENT. IN NO EVENT SHALL THE CONTRIBUTORS OR COPYRIGHT -* HOLDERS BE LIABLE FOR ANY CLAIM, INDIRECT, INCIDENTAL, SPECIAL, -* EXEMPLARY, OR CONSEQUENTIAL DAMAGES OR OTHER LIABILITY, WHETHER IN AN -* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE -* SOFTWARE. -* ``` -*/ - -'use strict'; - -// MODULES // - -var cosqi = require( '@stdlib/fft/base/fftpack/generic/cosqi' ); - - -// MAIN // - -/** -* Initializes a workspace array for performing a quarter-wave sine transform. -* -* ## Notes -* -* The workspace array is divided into four sections: -* -* ```text -* size = N N N 2+ceil(log2(N)/2) -* ↓ ↓ ↓ ↓ -* | cosine table | scratch/workspace | twiddle factors | radix factor table | -* ↑ ↑ ↑ ↑ -* i = 0 ... N ... 2N ... 3N ... -* ``` -* -* where -* -* - **cosine table**: a table of precomputed cosine coefficients used by quarter-wave sine transforms. -* - **scratch/workspace**: used as a scratch space when performing transforms. This section is not updated during initialization. -* - **twiddle factors**: a table of reusable complex-exponential constants stored as cosine/sine pairs. -* - **radix factor table**: a table containing the radix factorization of `N`. -* -* In general, a workspace array should have `3N + 34` indexed elements (as `log2(N)/2 ≤ 32` for all `2^64`). During initialization, only the sections for storing the cosine coefficients, twiddle factors, and the factorization of `N` are updated. -* -* > Note: FFTPACK only requires `3N+15`, but we increase that number here to accommodate larger workspace arrays, where `N` may exceed `2^30` indexed elements. -* -* The factorization section is comprised as follows: -* -* ```text -* | sequence_length | number_of_factors | integer_factors | -* ``` -* -* The sequence length and number of factors (`nf`) comprise a single element each. Only the first `nf` elements in the integer factors section are written to, with the rest being unused. -* -* As for twiddle factors, these are small, reusable complex-exponential constants that appear inside each "butterfly" stage of a Cooley–Tukey–style FFT. Every arithmetic step in an FFT multiplies one intermediate value by some -* -* ```tex -* W_N^k -* ``` -* -* where `W_N^k` is an N-th root of unity. Formally, in a forward FFT, -* -* ```tex -* W_N^k = e^{-2\pi ik/N} -* ``` -* -* In a backward FFT, -* -* ```tex -* W_N^k = e^{+2\pi ik/N} -* ``` -* -* As may be observed, `W_N^k` for forward and backward FFTs is the same, except the sign of the exponent is flipped. As a consequence, both forward and backward FFT callers can reuse the same set of twiddle factors, with those performing a forward transform (e.g., `sinqf`) multiplying with `(cos,-sin)` and those performing a backward transform (e.g., `sinqb`) multiplying with `(cos,+sin)`. -* -* Because these constants only depend on the transform length `N` (and **not** on the input data), we can pre-compute and store them once, then "twiddle" them (i.e., reuse them with different indices) as we proceed through the factorization. -* -* > As a quick aside regarding the name "twiddle", early FFT papers (notably Gentleman & Sande, 1966) described how you "twiddle" one branch of each butterfly by a complex rotation before adding/subtracting. The coefficients themselves inherited the nickname "twiddle factors," and the term stuck. -* -* By reusing the workspace array when computing multiple transforms of the same length `N`, every subsequent `*f` (forward) or `*b` (backward) call can simply look up the pre-stored twiddle factors instead of recomputing sine and cosine on-the-fly. -* -* In short, twiddle factors are cached roots of unity that allow each stage of the algorithm to rotate data quickly and predictably. -* -* During initialization, `sinqi` first writes the cosine table, and then initializes the remaining three sections using `rffti`. -* -* @param {PositiveInteger} N - length of the sequence to transform -* @param {Collection} workspace - workspace array -* @param {integer} strideW - stride length for `workspace` -* @param {NonNegativeInteger} offsetW - starting index for `workspace` -* @returns {Collection} workspace array -* -* @example -* var Float64Array = require( '@stdlib/array/float64' ); -* -* var N = 8; -* var workspace = new Float64Array( ( 3*N ) + 34 ); -* -* var out = sinqi( N, workspace, 1, 0 ); -* // returns -* -* var bool = ( out === workspace ); -* // returns true -* -* var cosineTable = workspace.slice( 0, N ); -* // returns [ ~0.98, ~0.92, ~0.83, ~0.7, ~0.56, ~0.38, ~0.2, ~0.0 ] -* -* var twiddleFactors = workspace.slice( 2*N, 3*N ); -* // returns [ ~0.707, ~0.707, 0, 0, 0, 0, 0, 0 ] -* -* var factors = workspace.slice( 3*N, ( 3*N ) + 4 ); -* // returns [ 8, 2, 2, 4 ] -*/ -function sinqi( N, workspace, strideW, offsetW ) { - return cosqi( N, workspace, strideW, offsetW ); -} - - -// EXPORTS // - -module.exports = sinqi; diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/sinqi/package.json b/lib/node_modules/@stdlib/fft/base/fftpack/sinqi/package.json deleted file mode 100644 index 5fbd52d43769..000000000000 --- a/lib/node_modules/@stdlib/fft/base/fftpack/sinqi/package.json +++ /dev/null @@ -1,64 +0,0 @@ -{ - "name": "@stdlib/fft/base/fftpack/sinqi", - "version": "0.0.0", - "description": "Initialize a workspace array for performing a quarter-wave sine transform.", - "license": "Apache-2.0", - "author": { - "name": "The Stdlib Authors", - "url": "https://github.com/stdlib-js/stdlib/graphs/contributors" - }, - "contributors": [ - { - "name": "The Stdlib Authors", - "url": "https://github.com/stdlib-js/stdlib/graphs/contributors" - } - ], - "main": "./lib", - "directories": { - "benchmark": "./benchmark", - "doc": "./docs", - "example": "./examples", - "lib": "./lib", - "test": "./test" - }, - "types": "./docs/types", - "scripts": {}, - "homepage": "https://github.com/stdlib-js/stdlib", - "repository": { - "type": "git", - "url": "git://github.com/stdlib-js/stdlib.git" - }, - "bugs": { - "url": "https://github.com/stdlib-js/stdlib/issues" - }, - "dependencies": {}, - "devDependencies": {}, - "engines": { - "node": ">=0.10.0", - "npm": ">2.7.0" - }, - "os": [ - "aix", - "darwin", - "freebsd", - "linux", - "macos", - "openbsd", - "sunos", - "win32", - "windows" - ], - "keywords": [ - "stdlib", - "fft", - "fftpack", - "sinqi", - "fourier", - "transform", - "twiddle", - "workspace", - "initialization", - "sine" - ], - "__stdlib__": {} -} diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/sinqi/test/fixtures/c/fftpack/Makefile b/lib/node_modules/@stdlib/fft/base/fftpack/sinqi/test/fixtures/c/fftpack/Makefile deleted file mode 100644 index 7ce16281940d..000000000000 --- a/lib/node_modules/@stdlib/fft/base/fftpack/sinqi/test/fixtures/c/fftpack/Makefile +++ /dev/null @@ -1,137 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2026 The Stdlib Authors. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -#/ - -# VARIABLES # - -ifndef VERBOSE - QUIET := @ -endif - -# Specify the path to FFTPACK: -FFTPACK ?= - -# Specify a list of FFTPACK source files: -FFTPACK_SRC ?= - -# Determine the OS: -# -# [1]: https://en.wikipedia.org/wiki/Uname#Examples -# [2]: http://stackoverflow.com/a/27776822/2225624 -OS ?= $(shell uname) -ifneq (, $(findstring MINGW,$(OS))) - OS := WINNT -else -ifneq (, $(findstring MSYS,$(OS))) - OS := WINNT -else -ifneq (, $(findstring CYGWIN,$(OS))) - OS := WINNT -endif -endif -endif - -# Define the program used for compiling C source files: -ifdef C_COMPILER - CC := $(C_COMPILER) -else - CC := gcc -endif - -# Define the command-line options when compiling C files: -CFLAGS ?= \ - -std=c99 \ - -O3 \ - -Wall \ - -pedantic - -# Determine whether to generate [position independent code][1]: -# -# [1]: https://gcc.gnu.org/onlinedocs/gcc/Code-Gen-Options.html#Code-Gen-Options -# [2]: http://stackoverflow.com/questions/5311515/gcc-fpic-option -ifeq ($(OS), WINNT) - fPIC ?= -else - fPIC ?= -fPIC -endif - -# List of C targets: -c_targets := runner.out - - -# RULES # - -#/ -# Compiles C source files. -# -# @param {string} [C_COMPILER] - C compiler -# @param {string} [CFLAGS] - C compiler flags -# @param {(string|void)} [fPIC] - flag indicating whether to generate position independent code -# -# @example -# make -# -# @example -# make all -#/ -all: $(c_targets) - -.PHONY: all - -#/ -# Compiles C source files. -# -# @private -# @param {string} CC - C compiler -# @param {string} CFLAGS - C compiler flags -# @param {(string|void)} fPIC - flag indicating whether to generate position independent code -#/ -$(c_targets): %.out: %.c - $(QUIET) $(CC) $(CFLAGS) -DFFTPACK_DOUBLE_PRECISION $(fPIC) -o $@ $(FFTPACK_SRC) $< -lm - -#/ -# Generates test fixtures. -# -# @example -# make run -#/ -run: $(c_targets) - $(QUIET) ./$< - -.PHONY: run - -#/ -# Removes generated files. -# -# @example -# make clean -#/ -clean: - $(QUIET) -rm -f *.o *.out - -.PHONY: clean - -#/ -# Removes generated test fixtures. -# -# @example -# make clean-fixtures -#/ -clean-fixtures: - $(QUIET) -rm -f *.json - -.PHONY: clean-fixtures diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/sinqi/test/fixtures/c/fftpack/large.json b/lib/node_modules/@stdlib/fft/base/fftpack/sinqi/test/fixtures/c/fftpack/large.json deleted file mode 100644 index 4c3c35410e99..000000000000 --- a/lib/node_modules/@stdlib/fft/base/fftpack/sinqi/test/fixtures/c/fftpack/large.json +++ /dev/null @@ -1 +0,0 @@ -{"lengths":[797,923,177,756,593,560,233,932,186,350],"offsets":[0,797,1720,1897,2653,3246,3806,4039,4971,5157],"cosines":[0.99999805780435924,0.99999223122498115,0.99998252028449841,0.99996892502063217,0.99995144548619175,0.99993008174907438,0.99990483389226548,0.99987570201383724,0.9998426862269495,0.99980578665984843,0.9997650034558665,0.99972033677342143,0.99967178678601609,0.99961935368223787,0.99956303766575727,0.99950283895532777,0.99943875778478475,0.99937079440304444,0.99929894907410344,0.99922322207703684,0.99914361370599813,0.99906012427021729,0.99897275409399999,0.99888150351672611,0.99878637289284866,0.99868736259189217,0.99858447299845143,0.99847770451218987,0.99836705754783805,0.99825253253519219,0.99813412991911199,0.99801185015951976,0.99788569373139779,0.9977556611247872,0.99762175284478538,0.99748396941154438,0.99734231136026918,0.99719677924121508,0.99704737361968554,0.99689409507603066,0.99673694420564418,0.99657592161896169,0.99641102794145775,0.996242263813644,0.9960696298910664,0.99589312684430265,0.99571275535895953,0.99552851613567062,0.99534040989009298,0.99514843735290504,0.99495259926980317,0.99475289640149911,0.994549329523717,0.99434189942719009,0.9941306069176582,0.99391545281586402,0.99369643795755036,0.99347356319345659,0.99324682938931541,0.99301623742584966,0.99278178819876883,0.99254348261876546,0.99230132161151163,0.99205530611765547,0.99180543709281732,0.99155171550758625,0.99129414234751634,0.99103271861312237,0.99076744531987648,0.99049832349820399,0.99022535419347923,0.98994853846602182,0.98966787739109241,0.98938337205888838,0.98909502357453993,0.98880283305810512,0.98850680164456639,0.98820693048382569,0.98790322074069969,0.98759567359491607,0.9872842902411082,0.98696907188881089,0.98665001976245559,0.9863271351013656,0.98600041915975112,0.98566987320670496,0.98533549852619673,0.98499729641706857,0.98465526819302984,0.98430941518265203,0.98395973872936349,0.98360624019144449,0.98324892094202154,0.98288778236906238,0.98252282587537076,0.98215405287858026,0.9817814648111497,0.98140506312035669,0.98102484926829292,0.98064082473185754,0.98025299100275232,0.97986134958747506,0.97946590200731432,0.97906664979834324,0.9786635945114136,0.97825673771214983,0.97784608098094294,0.97743162591294441,0.97701337411805989,0.97659132722094288,0.97616548686098881,0.97573585469232815,0.97530243238382042,0.97486522161904743,0.97442422409630691,0.97397944152860572,0.97353087564365348,0.97307852818385554,0.97262240090630636,0.972162495582783,0.97169881399973734,0.97123135795829041,0.97076012927422417,0.97028512977797532,0.96980636131462761,0.9693238257439053,0.96883752494016517,0.96834746079238998,0.96785363520418055,0.9673560500937487,0.96685470739390966,0.96634960905207468,0.9658407570302433,0.965328153304996,0.96481179986748611,0.96429169872343246,0.96376785189311143,0.963240261411349,0.96270892932751306,0.96217385770550545,0.96163504862375349,0.96109250417520264,0.96054622646730781,0.95999621762202536,0.95944247977580477,0.95888501507958068,0.95832382569876395,0.95775891381323364,0.95719028161732878,0.95661793131983919,0.95604186514399736,0.95546208532746979,0.95487859412234799,0.95429139379514027,0.95370048662676254,0.95310587491252918,0.95250756096214495,0.95190554709969522,0.95129983566363752,0.95069042900679201,0.95007732949633261,0.94946053951377762,0.94884006145498079,0.94821589773012172,0.94758805076369634,0.94695652299450805,0.9463213168756579,0.94568243487453485,0.94503987947280665,0.94439365316640989,0.94374375846554037,0.94309019789464343,0.94243297399240411,0.94177208931173706,0.94110754641977712,0.94043934789786887,0.93976749634155676,0.93909199436057522,0.93841284457883811,0.93773004963442896,0.93704361217959065,0.93635353488071471,0.9356598204183314,0.9349624714870991,0.93426149079579401,0.93355688106729928,0.93284864503859499,0.93213678546074685,0.93142130509889598,0.93070220673224824,0.92997949315406281,0.92925316717164219,0.92852323160632055,0.9277896892934534,0.92705254308240603,0.92631179583654277,0.92556745043321564,0.9248195097637536,0.92406797673345087,0.92331285426155563,0.92255414528125923,0.921791852739684,0.92102597959787269,0.92025652883077602,0.91948350342724205,0.91870690639000374,0.91792674073566805,0.9171430094947034,0.91635571571142871,0.91556486244400115,0.91477045276440416,0.91397248975843581,0.91317097652569668,0.91236591617957774,0.91155731184724842,0.91074516666964422,0.909929483801455,0.90911026641111192,0.90828751768077609,0.9074612408063254,0.90663143899734255,0.90579811547710243,0.90496127348255972,0.90412091626433611,0.90327704708670797,0.90242966922759316,0.90157878597853902,0.90072440064470904,0.89986651654487004,0.89900513701137952,0.89814026539017278,0.8972719050407495,0.89640005933616118,0.8955247316629974,0.89464592542137367,0.89376364402491704,0.89287789090075387,0.89198866948949573,0.89109598324522654,0.89019983563548899,0.88930023014127102,0.88839717025699239,0.88749065949049111,0.88658070136300959,0.88566729940918132,0.88475045717701672,0.88383017822789001,0.88290646613652457,0.8819793244909796,0.88104875689263618,0.88011476695618274,0.87917735830960175,0.87823653459415518,0.87729229946437048,0.8763446565880264,0.87539360964613855,0.8744391623329455,0.87348131835589404,0.87252008143562487,0.87155545530595835,0.87058744371387997,0.86961605041952528,0.86864127919616596,0.86766313383019511,0.86668161812111166,0.86569673588150697,0.86470849093704905,0.86371688712646766,0.86272192830154026,0.86172361832707611,0.86072196108090182,0.85971696045384605,0.85870862034972451,0.85769694468532465,0.85668193739039056,0.85566360240760786,0.85464194369258795,0.85361696521385311,0.85258867095282087,0.85155706490378835,0.85052215107391715,0.84948393348321749,0.84844241616453286,0.84739760316352397,0.84634949853865327,0.84529810636116931,0.84424343071509056,0.84318547569719027,0.84212424541697917,0.84105974399669126,0.83999197557126659,0.8389209442883353,0.83784665430820215,0.83676910980382968,0.83568831496082241,0.83460427397741033,0.833516991064433,0.83242647044532248,0.83133271635608752,0.83023573304529719,0.8291355247740636,0.82803209581602644,0.82692545045733545,0.82581559299663421,0.82470252774504327,0.8235862590261438,0.82246679117596,0.82134412854294314,0.82021827548795434,0.81908923638424724,0.81795701561745138,0.81682161758555549,0.81568304669888958,0.81454130738010844,0.81339640406417468,0.81224834119834033,0.81109712324213101,0.80994275466732768,0.80878523995794949,0.80762458361023659,0.80646079013263228,0.80529386404576586,0.80412380988243493,0.80295063218758744,0.8017743355183049,0.80059492444378366,0.79941240354531773,0.79822677741628112,0.79703805066210964,0.79584622790028303,0.79465131376030729,0.79345331288369658,0.79225222992395494,0.79104806954655849,0.78984083642893754,0.78863053526045768,0.78741717074240214,0.78620074758795377,0.78498127052217581,0.78375874428199455,0.78253317361618002,0.78130456328532849,0.78007291806184287,0.77883824272991553,0.77760054208550833,0.77635982093633482,0.77511608410184163,0.77386933641318911,0.77261958271323306,0.77136682785650601,0.77011107670919798,0.76885233414913767,0.76759060506577381,0.76632589436015586,0.76505820694491489,0.76378754774424507,0.76251392169388388,0.76123733374109304,0.75995778884463983,0.75867529197477734,0.75738984811322507,0.75610146225315022,0.75481013939914721,0.75351588456721952,0.75221870278475933,0.75091859909052816,0.74961557853463756,0.74830964617852924,0.74700080709495531,0.74568906636795884,0.74437442909285445,0.74305690037620731,0.7417364853358146,0.74041318910068521,0.73908701681101918,0.73775797361818873,0.73642606468471772,0.73509129518426153,0.73375367030158711,0.73241319523255299,0.73106987518408872,0.72972371537417513,0.72837472103182355,0.72702289739705583,0.72566824972088406,0.72431078326528975,0.72295050330320376,0.72158741511848556,0.72022152400590345,0.71885283527111254,0.71748135423063564,0.71610708621184171,0.71473003655292522,0.71335021060288628,0.71196761372150852,0.71058225127933916,0.70919412865766818,0.70780325124850696,0.70640962445456734,0.70501325368924139,0.70361414437657943,0.70221230195126938,0.70080773185861589,0.69940043955451869,0.69799043050545173,0.69657771018844195,0.69516228409104774,0.69374415771133791,0.69232333655787026,0.69089982614967016,0.6894736320162087,0.68804475969738221,0.68661321474349002,0.68517900271521248,0.68374212918359056,0.68230259973000318,0.68086041994614599,0.67941559543400953,0.67796813180585769,0.67651803468420546,0.67506530970179746,0.67360996250158611,0.67215199873670906,0.67069142407046822,0.66922824417630722,0.667762464737789,0.66629409144857465,0.66482313001240068,0.6633495861430565,0.66187346556436333,0.66039477401015101,0.65891351722423619,0.65742970096039965,0.65594333098236457,0.65445441306377339,0.65296295298816587,0.65146895654895665,0.64997242954941226,0.64847337780262926,0.64697180713151137,0.64546772336874636,0.64396113235678409,0.64245203994781375,0.6409404520037405,0.63942637439616345,0.63790981300635263,0.63639077372522557,0.63486926245332542,0.63334528510079746,0.63181884758736562,0.63028995584231073,0.62875861580444647,0.62722483342209678,0.62568861465307268,0.62414996546464874,0.62260889183354051,0.62106539974588115,0.61951949519719762,0.61797118419238817,0.61642047274569867,0.61486736688069898,0.61331187263025999,0.61175399603653025,0.61019374315091168,0.60863112003403719,0.60706613275574639,0.60549878739506213,0.60392909004016715,0.60235704678838009,0.6007826637461321,0.59920594702894292,0.59762690276139729,0.59604553707712093,0.5944618561187569,0.59287586603794185,0.59128757299528156,0.58969698316032781,0.588104102711554,0.58650893783633085,0.58491149473090309,0.58331177960036473,0.58170979865863515,0.58010555812843534,0.57849906424126318,0.57689032323736944,0.57527934136573355,0.57366612488403979,0.57205068005865189,0.57043301316458983,0.56881313048550464,0.56719103831365458,0.5655667429498803,0.56394025070358067,0.56231156789268766,0.56068070084364297,0.55904765589137217,0.55741243937926077,0.5557750576591296,0.55413551709121001,0.55249382404411895,0.55084998489483461,0.5492040060286717,0.54755589383925574,0.54590565472849972,0.54425329510657783,0.54259882139190152,0.54094224001109392,0.53928355739896539,0.5376227799984884,0.53595991426077183,0.53429496664503695,0.53262794361859211,0.53095885165680667,0.52928769724308677,0.52761448686885049,0.52593922703350138,0.52426192424440388,0.52258258501685884,0.52090121587407667,0.51921782334715283,0.5175324139750429,0.51584499430453612,0.51415557089023078,0.51246415029450854,0.51077073908750892,0.50907534384710318,0.5073779711588704,0.50567862761607008,0.50397731981961702,0.50227405437805706,0.50056883790753914,0.49886167703179141,0.49715257838209481,0.4954415485972572,0.4937285943235874,0.49201372221487061,0.49029693893234083,0.48857825114465586,0.48685766552787202,0.48513518876541678,0.48341082754806375,0.48168458857390695,0.47995647854833384,0.47822650418399976,0.47649467220080233,0.47476098932585453,0.47302546229345876,0.47128809784508152,0.46954890272932587,0.46780788370190601,0.46606504752562145,0.46432040097032962,0.46257395081292019,0.46082570383728938,0.45907566683431222,0.45732384660181702,0.45557024994455947,0.45381488367419487,0.45205775460925246,0.45029886957510951,0.44853823540396343,0.44677585893480615,0.4450117470133978,0.44324590649223911,0.44147834423054549,0.43970906709422075,0.43793808195582934,0.4361653956945703,0.43439101519625112,0.43261494735325973,0.43083719906453832,0.42905777723555732,0.42727668877828712,0.42549394061117202,0.42370953965910385,0.42192349285339387,0.42013580713174659,0.41834648943823322,0.41655554672326361,0.41476298594355981,0.41296881406212965,0.41117303804823863,0.40937566487738319,0.40757670153126441,0.40577615499775965,0.4039740322708959,0.40217034035082344,0.40036508624378725,0.39855827696210033,0.39674991952411742,0.39494002095420616,0.39312858828272057,0.39131562854597429,0.38950114878621217,0.38768515605158332,0.38586765739611451,0.38404865987968151,0.38222817056798208,0.38040619653250962,0.37858274485052384,0.37675782260502444,0.3749314368847238,0.37310359478401861,0.37127430340296247,0.36944356984723931,0.3676114012281344,0.36577780466250742,0.36394278727276513,0.36210635618683301,0.36026851853812775,0.35842928146553021,0.35658865211335666,0.35474663763133157,0.35290324517456029,0.35105848190350025,0.34921235498393355,0.34736487158693991,0.34551603888886762,0.34366586407130595,0.34181435432105833,0.33996151683011289,0.33810735879561521,0.33625188741984097,0.33439510991016685,0.33253703347904295,0.33067766534396564,0.32881701272744801,0.32695508285699276,0.32509188296506436,0.3232274202890601,0.32136170207128228,0.31949473555891089,0.31762652800397423,0.31575708666332114,0.31388641879859375,0.3120145316761978,0.31014143256727505,0.30826712874767576,0.3063916274979292,0.30451493610321606,0.30263706185333977,0.30075801204269914,0.29887779397025871,0.29699641493952089,0.29511388225849844,0.29323020323968468,0.29134538520002573,0.28945943546089281,0.28757236134805236,0.28568417019163855,0.28379486932612491,0.28190446609029512,0.2800129678272148,0.27812038188420374,0.2762267156128061,0.27433197636876233,0.27243617151198152,0.2705393084065113,0.26864139442050999,0.26674243692621852,0.26484244329993067,0.26294142092196482,0.26103937717663622,0.2591363194522267,0.25723225514095704,0.25532719163895834,0.25342113634624247,0.25151409666667379,0.2496060800079411,0.24769709378152735,0.24578714540268184,0.24387624229039184,0.24196439186735247,0.24005160155993871,0.23813787879817691,0.23622323101571488,0.23430766564979361,0.23239119014121887,0.23047381193433122,0.22855553847697768,0.22663637722048333,0.2247163356196212,0.22279542113258397,0.22087364122095551,0.21895100334968079,0.21702751498703735,0.21510318360460703,0.21317801667724567,0.21125202168305471,0.20932520610335273,0.20739757742264514,0.20546914312859577,0.20353991071199842,0.20160988766674645,0.19967908148980432,0.19774749968117916,0.1958151497438903,0.19388203918394073,0.19194817551028875,0.1900135662348173,0.18807821887230555,0.18614214094040038,0.18420533995958582,0.18226782345315448,0.18032959894717901,0.17839067397048161,0.17645105605460529,0.17451075273378541,0.17256977154491909,0.1706281200275365,0.16868580572377231,0.16674283617833502,0.1647992189384784,0.16285496155397275,0.16091007157707429,0.15896455656249645,0.15701842406738123,0.15507168165126853,0.15312433687606739,0.15117639730602728,0.14922787050770753,0.14727876404994836,0.14532908550384241,0.14337884244270374,0.14142804244203933,0.13947669307952007,0.13752480193495026,0.1355723765902386,0.13361942462936949,0.1316659536383723,0.12971197120529251,0.12775748492016287,0.12580250237497265,0.12384703116363879,0.12189107888197705,0.1199346531276712,0.11797776150024415,0.11602041160102913,0.11406261103313882,0.11210436740143642,0.1101456883125069,0.10818658137462597,0.10622705419773137,0.10426711439339378,0.1023067695747861,0.1003460273566544,0.098384895355289131,0.096423381188494098,0.094461492475557629,0.092499236837223553,0.090536621895660349,0.088573655274432173,0.086610344598469904,0.084646697494040177,0.082682721588716465,0.080718424511350098,0.078753813892039295,0.076788897362100206,0.074823682554037901,0.072858177101515417,0.070892388639324802,0.068926324803358044,0.066959993230576137,0.064993401558980105,0.063026557427581911,0.061059468476373543,0.059092142346297949,0.057124586679220032,0.055156809117895653,0.053188817305942597,0.051220618887811542,0.049252221508755044,0.047283632814798499,0.045314860452711103,0.043345912069974846,0.041376795314755424,0.039407517835873249,0.037438087282772363,0.035468511305491418,0.033498797554634606,0.031528953681340628,0.02955898733725363,0.027588906174494152,0.025618717845628063,0.023648430003637505,0.021678050301891839,0.019707586394116582,0.017737045934364332,0.015766436576985714,0.013795765976598316,0.011825041788057615,0.0098542716664279089,0.0078834632669512548,0.0059126242450183979,0.0039417622561396934,0.0019708849559140471,-1.6081226496766366e-16,0.99999855187433184,0.99999420750152135,0.99998696689415112,0.9999768300731916,0.99996379706800154,0.99994786791632795,0.9999290426643056,0.99990732136645721,0.99988270408569302,0.99985519089331087,0.99982478186899593,0.99979147710082028,0.999755276685243,0.99971618072710955,0.99967418933965169,0.99962930264448702,0.99958152077161866,0.99953084385943503,0.99947727205470904,0.99942080551259815,0.99936144439664365,0.99929918887877034,0.99923403913928577,0.99916599536688,0.99909505775862495,0.9990212265199736,0.99894450186475992,0.99886488401519768,0.99878237320188024,0.99869696966377974,0.99860867364824613,0.99851748541100704,0.99842340521616635,0.99832643333620397,0.99822657005197502,0.99812381565270847,0.99801817043600694,0.99790963470784555,0.99779820878257108,0.99768389298290094,0.99756668763992251,0.99744659309309192,0.99732360969023304,0.99719773778753673,0.99706897774955983,0.99693732994922357,0.99680279476781319,0.99666537259497634,0.99652506382872219,0.99638186887542013,0.99623578814979885,0.99608682207494481,0.99593497108230122,0.99578023561166662,0.99562261611119385,0.99546211303738863,0.99529872685510823,0.99513245803756012,0.99496330706630054,0.99479127443123316,0.99461636063060777,0.99443856617101878,0.99425789156740352,0.99407433734304107,0.99388790402955074,0.99369859216689005,0.99350640230335385,0.99331133499557234,0.99311339080850924,0.99291257031546098,0.99270887409805397,0.99250230274624374,0.99229285685831281,0.99208053704086907,0.99186534390884418,0.99164727808549147,0.9914263402023844,0.99120253089941457,0.99097585082479001,0.99074630063503322,0.99051388099497917,0.99027859257777351,0.9900404360648708,0.98979941214603195,0.98955552151932302,0.98930876489111241,0.98905914297606934,0.98880665649716182,0.9885513061856539,0.98829309278110433,0.98803201703136401,0.98776807969257407,0.98750128152916328,0.98723162331384617,0.9869591058276207,0.98668372985976605,0.98640549620784013,0.98612440567767767,0.98584045908338735,0.98555365724735,0.98526400100021583,0.98497149118090199,0.98467612863659049,0.98437791422272558,0.98407684880301105,0.98377293324940818,0.98346616844213264,0.9831565552696524,0.98284409462868516,0.98252878742419525,0.98221063456939184,0.98188963698572551,0.98156579560288582,0.98123911135879882,0.98090958519962423,0.98057721807975273,0.98024201096180286,0.97990396481661879,0.97956308062326702,0.97921935936903404,0.97887280204942284,0.97852340966815043,0.97817118323714525,0.97781612377654337,0.9774582323146862,0.9770975098881175,0.97673395754157999,0.97636757632801263,0.9759983673085475,0.97562633155250678,0.97525147013739955,0.97487378414891857,0.97449327468093738,0.97410994283550723,0.97372378972285323,0.9733348164613721,0.9729430241776279,0.97254841400634984,0.97215098709042791,0.97175074458091049,0.97134768763700052,0.97094181742605201,0.97053313512356731,0.97012164191319294,0.96970733898671679,0.96929022754406424,0.96887030879329472,0.9684475839505986,0.96802205424029319,0.96759372089481965,0.96716258515473885,0.96672864826872829,0.96629191149357829,0.96585237609418828,0.96541004334356317,0.96496491452280997,0.96451699092113341,0.9640662738358331,0.96361276457229872,0.96315646444400715,0.96269737477251838,0.96223549688747134,0.96177083212658054,0.96130338183563191,0.96083314736847891,0.9603601300870388,0.95988433136128859,0.95940575256926086,0.95892439509704008,0.95844026033875862,0.95795334969659218,0.9574636645807566,0.95697120640950284,0.95647597660911376,0.95597797661389905,0.95547720786619217,0.95497367181634507,0.95446736992272474,0.95395830365170875,0.95344647447768094,0.95293188388302719,0.95241453335813131,0.9518944244013704,0.95137155851911082,0.95084593722570332,0.95031756204347961,0.94978643450274669,0.94925255614178361,0.94871592850683628,0.94817655315211313,0.94763443163978078,0.94708956553995938,0.94654195643071815,0.94599160589807063,0.94543851553597025,0.94488268694630595,0.94432412173889668,0.94376282153148794,0.9431987879497461,0.94263202262725421,0.94206252720550698,0.94149030333390649,0.94091535266975668,0.94033767687825931,0.9397572776325086,0.9391741566134868,0.93858831551005861,0.93799975601896746,0.93740847984482933,0.93681448870012873,0.93621778430521341,0.93561836838828893,0.93501624268541483,0.93441140894049823,0.93380386890528977,0.93319362433937814,0.93258067701018477,0.9319650286929595,0.93134668117077424,0.93072563623451909,0.93010189568289625,0.92947546132241499,0.92884633496738667,0.92821451843991953,0.92758001356991282,0.92694282219505231,0.92630294616080411,0.92566038732041034,0.92501514753488268,0.92436722867299781,0.92371663261129155,0.92306336123405375,0.92240741643332236,0.92174880010887839,0.92108751416824031,0.92042356052665841,0.91975694110710926,0.91908765784029034,0.91841571266461408,0.91774110752620275,0.91706384437888222,0.91638392518417688,0.91570135191130364,0.91501612653716613,0.91432825104634929,0.91363772743111349,0.91294455769138871,0.91224874383476862,0.91155028787650505,0.91084919183950208,0.91014545775431011,0.90943908765911963,0.90873008359975627,0.90801844762967376,0.90730418180994898,0.90658728820927503,0.90586776890395604,0.90514562597790083,0.9044208615226168,0.90369347763720387,0.90296347642834862,0.90223086001031816,0.90149563050495352,0.90075779004166445,0.90001734075742212,0.89927428479675386,0.89852862431173652,0.89778036146199025,0.89702949841467217,0.8962760373444707,0.89551998043359815,0.89476132987178569,0.89400008785627572,0.8932362565918166,0.89246983829065563,0.89170083517253285,0.89092924946467444,0.89015508340178673,0.88937833922604914,0.88859901918710793,0.88781712554207004,0.88703266055549568,0.88624562649939287,0.88545602565320991,0.88466386030382937,0.88386913274556111,0.88307184528013594,0.88227200021669883,0.88146959987180207,0.88066464656939858,0.87985714264083559,0.87904709042484741,0.87823449226754891,0.87741935052242848,0.87660166755034152,0.87578144571950345,0.87495868740548277,0.87413339499119447,0.87330557086689276,0.87247521743016432,0.87164233708592143,0.87080693224639494,0.8699690053311272,0.86912855876696515,0.86828559498805324,0.86744011643582652,0.86659212555900333,0.86574162481357841,0.86488861666281569,0.86403310357724106,0.86317508803463561,0.86231457252002774,0.86145155952568697,0.86058605155111567,0.85971805110304245,0.8588475606954149,0.85797458284939188,0.85709912009333655,0.85622117496280947,0.85534075000056009,0.85445784775652045,0.8535724707877973,0.85268462165866499,0.85179430294055769,0.85090151721206209,0.85000626705891025,0.84910855507397143,0.84820838385724528,0.84730575601585378,0.84640067416403419,0.84549314092313088,0.84458315892158831,0.84367073079494304,0.84275585918581619,0.8418385467439059,0.84091879612597964,0.83999660999586634,0.83907199102444863,0.83814494188965571,0.83721546527645474,0.83628356387684366,0.83534924038984304,0.83441249752148861,0.83347333798482315,0.83253176449988875,0.83158777979371878,0.83064138660033027,0.82969258766071574,0.8287413857228354,0.8277877835416092,0.82683178387890877,0.82587338950354916,0.82491260319128157,0.82394942772478452,0.82298386589365635,0.82201592049440686,0.82104559433044899,0.82007289021209129,0.81909781095652945,0.818120359387838,0.81714053833696232,0.81615835064171049,0.81517379914674493,0.8141868867035742,0.81319761617054476,0.8122059904128327,0.81121201230243556,0.81021568471816374,0.80921701054563222,0.80821599267725253,0.80721263401222387,0.80620693745652527,0.80519890592290666,0.80418854233088066,0.80317584960671429,0.80216083068342015,0.80114348850074812,0.80012382600517684,0.79910184614990531,0.79807755189484397,0.79705094620660633,0.79602203205850064,0.79499081243052072,0.79395729030933804,0.79292146868829216,0.7918833505673829,0.79084293895326141,0.78980023685922107,0.7887552473051892,0.78770797331771836,0.78665841792997704,0.78560658418174145,0.78455247511938664,0.78349609379587715,0.78243744327075915,0.78137652661015045,0.78031334688673215,0.77924790717974024,0.77818021057495579,0.77711026016469642,0.77603805904780765,0.77496361032965333,0.77388691712210678,0.77280798254354244,0.77172680971882579,0.77064340177930524,0.76955776186280234,0.76846989311360336,0.76737979868244932,0.76628748172652783,0.76519294540946348,0.76409619290130826,0.76299722737853326,0.76189605202401878,0.76079267002704554,0.75968708458328493,0.75857929889479037,0.75746931616998769,0.7563571396236658,0.75524277247696736,0.75412621795738,0.75300747929872602,0.7518865597411537,0.75076346253112802,0.7496381909214207,0.74851074817110108,0.74738113754552682,0.7462493623163341,0.74511542576142853,0.74397933116497528,0.74284108181738995,0.7417006810153286,0.74055813206167886,0.73941343826554928,0.7382666029422611,0.73711762941333747,0.73596652100649462,0.73481328105563171,0.73365791290082161,0.73250041988830072,0.73134080537045998,0.73017907270583426,0.72901522525909335,0.7278492664010322,0.72668119950856047,0.72551102796469347,0.72433875515854218,0.72316438448530329,0.72198791934624951,0.72080936314871935,0.71962871930610794,0.71844599123785646,0.71726118236944292,0.71607429613237117,0.71488533596416248,0.7136943053083441,0.71250120761444014,0.71130604633796157,0.71010882494039562,0.70890954688919638,0.70770821565777475,0.70650483472548764,0.70529940757762888,0.70409193770541834,0.70288242860599226,0.70167088378239295,0.70045730674355888,0.69924170100431404,0.69802407008535827,0.69680441751325661,0.69558274682042953,0.69435906154514249,0.69313336523149549,0.69190566142941301,0.69067595369463408,0.68944424558870132,0.68821054067895071,0.68697484253850216,0.68573715474624775,0.68449748088684248,0.68325582455069345,0.68201218933394958,0.68076657883849079,0.67951899667191829,0.6782694464475435,0.67701793178437819,0.67576445630712312,0.67450902364615839,0.67325163743753247,0.67199230132295196,0.67073101894977061,0.66946779397097944,0.6682026300451952,0.66693553083665069,0.66566650001518379,0.66439554125622668,0.66312265824079519,0.66184785465547868,0.66057113419242863,0.65929250054934829,0.65801195742948226,0.65672950854160517,0.65544515760001132,0.65415890832450385,0.65287076444038383,0.65158072967843994,0.65028880777493692,0.64899500247160524,0.64769931751563059,0.64640175665964184,0.6451023236617015,0.64380102228529423,0.64249785629931577,0.64119282947806233,0.6398859456012197,0.63857720845385202,0.63726662182639093,0.63595418951462479,0.63463991531968733,0.63332380304804692,0.63200585651149566,0.63068607952713784,0.62936447591737943,0.62804104950991657,0.62671580413772465,0.62538874363904762,0.62405987185738598,0.62272919264148641,0.62139670984533057,0.62006242732812344,0.61872634895428236,0.61738847859342638,0.61604882012036422,0.61470737741508341,0.61336415436273928,0.61201915485364355,0.61067238278325253,0.60932384205215684,0.60797353656606934,0.60662147023581392,0.60526764697731483,0.60391207071158415,0.60255474536471176,0.60119567486785286,0.59983486315721712,0.59847231417405733,0.597108031864658,0.59574202018032318,0.59437428307736639,0.59300482451709802,0.59163364846581401,0.59026075889478502,0.58888615978024428,0.58750985510337628,0.58613184885030534,0.58475214501208383,0.58337074758468088,0.58198766056897067,0.58060288797072068,0.57921643380058052,0.57782830207406999,0.57643849681156734,0.57504702203829794,0.57365388178432253,0.57225908008452531,0.57086262097860263,0.56946450851105113,0.56806474673115581,0.56666333969297855,0.56526029145534651,0.56385560608183982,0.56244928764078062,0.56104134020522045,0.55963176785292879,0.55822057466638175,0.55680776473274929,0.55539334214388403,0.55397731099630954,0.55255967539120754,0.55114043943440738,0.54971960723637303,0.54829718291219143,0.54687317058156126,0.54544757436877989,0.5440203984027322,0.54259164681687877,0.54116132374924319,0.53972943334240042,0.53829597974346488,0.53686096710407882,0.53542439958039934,0.53398628133308701,0.53254661652729374,0.53110540933265071,0.52966266392325601,0.52821838447766312,0.52677257517886844,0.52532524021429883,0.52387638377580026,0.52242601005962508,0.5209741232664199,0.51952072760121415,0.51806582727340689,0.51660942649675501,0.51515152948936116,0.51369214047366152,0.5122312636764137,0.51076890332868385,0.50930506366583528,0.50783974892751538,0.50637296335764392,0.5049047112044005,0.50343499672021275,0.5019638241617429,0.5004911977898765,0.49901712186970959,0.49754160067053671,0.4960646384658377,0.49458623953326686,0.49310640815463874,0.49162514861591711,0.49014246520720173,0.4886583622227163,0.48717284396079646,0.48568591472387623,0.48419757881847642,0.48270784055519189,0.48121670424867907,0.4797241742176433,0.478230254784827,0.47673495027699625,0.47523826502492861,0.47374020336340078,0.47224076963117589,0.47073996817099067,0.46923780332954373,0.46773427945748181,0.46622940090938791,0.46472317204376862,0.46321559722304123,0.46170668081352112,0.46019642718540993,0.45868484071278148,0.45717192577357013,0.45565768674955781,0.45414212802636111,0.45262525399341941,0.45110706904398096,0.44958757757509094,0.44806678398757854,0.44654469268604419,0.44502130807884671,0.44349663457809124,0.44197067659961514,0.4404434385629763,0.43891492489143991,0.43738514001196577,0.43585408835519518,0.43432177435543884,0.43278820245066318,0.4312533770824778,0.42971730269612268,0.42817998374045518,0.42664142466793775,0.42510162993462397,0.42356060400014639,0.42201835132770343,0.42047487638404646,0.41893018363946666,0.41738427756778285,0.41583716264632736,0.4142888433559338,0.41273932418092402,0.41118860960909503,0.40963670413170572,0.4080836122434649,0.40652933844251671,0.40497388723042876,0.40341726311217879,0.40185947059614113,0.40030051419407497,0.39874039842110959,0.39717912779573245,0.39561670683977562,0.39405314007840292,0.39248843204009642,0.39092258725664436,0.38935561026312654,0.38778750559790215,0.38621827780259643,0.38464793142208747,0.38307647100449294,0.38150390110115751,0.37993022626663864,0.37835545105869428,0.37677958003826911,0.37520261776948155,0.37362456881961104,0.37204543775908383,0.3704652291614603,0.36888394760342169,0.3673015976647569,0.36571818392834876,0.36413371098016195,0.36254818340922806,0.36096160580763348,0.3593739827705057,0.35778531889600002,0.35619561878528616,0.35460488704253557,0.35301312827490705,0.35142034709253395,0.34982654810851099,0.34823173593888035,0.34663591520261933,0.34503909052162562,0.34344126652070495,0.34184244782755713,0.34024263907276292,0.33864184488977045,0.33704006991488233,0.33543731878724131,0.33383359614881747,0.33222890664439469,0.33062325492155703,0.32901664563067523,0.32740908342489411,0.3258005729601175,0.32419111889499608,0.32258072589091336,0.32096939861197216,0.31935714172498109,0.31774395989944171,0.31612985780753383,0.3145148401241028,0.31289891152664578,0.31128207669529789,0.30966434031281959,0.30804570706458179,0.30642618163855329,0.30480576872528664,0.30318447301790508,0.3015622992120881,0.2999392520060592,0.29831533610057093,0.29669055619889173,0.29506491700679272,0.29343842323253344,0.2918110795868486,0.29018289078293469,0.28855386153643553,0.28692399656542933,0.28529330059041463,0.28366177833429662,0.28202943452237422,0.28039627388232519,0.2787623011441932,0.27712752104037403,0.27549193830560165,0.27385555767693459,0.27221838389374287,0.27058042169769297,0.26894167583273515,0.26730215104508931,0.26566185208323123,0.26402078369787885,0.26237895064197908,0.26073635767069286,0.25909300954138231,0.25744891101359657,0.2558040668490581,0.25415848181164935,0.25251216066739801,0.25086510818446389,0.24921732913312494,0.24756882828576343,0.24591961041685195,0.24426968030294036,0.24261904272264076,0.24096770245661442,0.23931566428755782,0.23766293300018873,0.23600951338123211,0.23435541021940717,0.23270062830541219,0.2310451724319115,0.22938904739352139,0.22773225798679603,0.22607480901021432,0.22441670526416491,0.22275795155093295,0.22109855267468612,0.21943851344146065,0.21777783865914715,0.21611653313747761,0.21445460168801017,0.21279204912411598,0.21112888026096516,0.20946509991551271,0.20780071290648452,0.20613572405436406,0.20447013818137735,0.20280396011147966,0.2011371946703415,0.19946984668533424,0.19780192098551719,0.19613342240162213,0.19446435576604032,0.19279472591280827,0.19112453767759363,0.1894537958976811,0.18778250541195926,0.18611067106090515,0.18443829768657127,0.18276539013257126,0.1810919532440658,0.17941799186774854,0.17774351085183279,0.17606851504603618,0.17439300930156759,0.17271699847111274,0.17104048740882027,0.16936348097028733,0.16768598401254653,0.16600800139405045,0.16432953797465846,0.1626505986156225,0.16097118817957273,0.1592913115305043,0.15761097353376197,0.15593017905602691,0.15424893296530237,0.15256724013089959,0.15088510542342348,0.14920253371475939,0.14751952987805761,0.14583609878772028,0.14415224531938695,0.14246797434992048,0.14078329075739265,0.13909819942107107,0.13741270522140353,0.13572681304000486,0.13404052775964254,0.13235385426422233,0.13066679743877507,0.12897936216944109,0.12729155334345707,0.12560337584914158,0.12391483457588091,0.12222593441411479,0.12053668025532301,0.11884707699200996,0.11715712951769133,0.11546684272687978,0.11377622151507066,0.11208527077872772,0.11039399541526972,0.10870240032305496,0.10701049040136801,0.10531827055040521,0.10362574567126037,0.10193292066591138,0.10023980043720467,0.098546389888841998,0.096852693925365912,0.095158717452145603,0.093464465375362488,0.091769942601996848,0.090075154039812311,0.08838010459734251,0.086684799183876657,0.084989242709445328,0.083293440084805992,0.081597396221429724,0.079901116031485614,0.078204604427827409,0.076507866323979115,0.074810906634120516,0.073113730273073829,0.071416342156288129,0.069718747199826028,0.068020950320349161,0.066322956435104038,0.064624770461907483,0.06292639731913334,0.061227841925696865,0.059529109201041382,0.057830204065123826,0.056131131438400469,0.054431896241812439,0.052732503396772407,0.051032957825148939,0.049333264449253164,0.047633428191824305,0.045933453976015171,0.044233346725378785,0.042533111363852842,0.040832752815746269,0.039132276005724782,0.037431685858796623,0.035730987300298049,0.034030185255879974,0.032329284651492374,0.030628290413370902,0.028927207468022388,0.027226040742210588,0.02552479516294168,0.023823475657450893,0.022122087153186896,0.020420634577798417,0.018719122859119752,0.017017556925156493,0.015315941704071023,0.013614282124169147,0.011912583113884476,0.01021084960176504,0.0085090865164588001,0.006807298786699144,0.0051054913412915013,0.0034036691090977389,0.0017018370190227704,6.123233995736766e-17,0.99996062139062203,0.99984248866383785,0.99964561112345263,0.99937000427499356,0.99901568982448985,0.99858269567676194,0.99807105593322476,0.99748081088920149,0.99681200703075012,0.99606469703100253,0.99523893974601585,0.99433480021013709,0.99335234963088159,0.99229166538332458,0.9911528310040072,0.98993593618435782,0.98864107676362811,0.98726835472134455,0.98581787816927746,0.9842897613429259,0.98268412459252097,0.98100109437354754,0.97924080323678475,0.97740338981786667,0.97548899882636386,0.97349778103438656,0.97142989326470996,0.96928549837842337,0.96706476526210416,0.96476786881451593,0.96239498993283479,0.95994631549840204,0.95742203836200546,0.95482235732869192,0.95214747714210923,0.94939760846838128,0.94657296787951684,0.94367377783635276,0.94070026667103324,0.93765266856902785,0.93453122355068685,0.93133617745233843,0.92806778190692707,0.92472629432419573,0.92131197787041297,0.91782510144764662,0.91426593967258585,0.91063477285491312,0.90693188697522797,0.90315757366252369,0.89931213017121925,0.89539585935774901,0.8914090696567103,0.88735207505657154,0.88322519507494412,0.87902875473341735,0.87476308453196128,0.87042852042289709,0.86602540378443871,0.86155408139380607,0.85701490539991521,0.85240823329564253,0.84773442788967102,0.84299385727791509,0.83818689481453168,0.83331391908251495,0.82837531386388075,0.82337146810944051,0.81830277590816902,0.8131696364561668,0.80797245402522044,0.80271163793096367,0.79738760250064045,0.79200076704047384,0.78655155580264247,0.78104039795186808,0.77546772753161486,0.76983398342990628,0.76413960934475889,0.75838505374923848,0.75257076985613847,0.74669721558228763,0.74076485351248489,0.7347741508630673,0.72872557944511396,0.72261961562728727,0.71645674029831519,0.71023743882911827,0.70396220103458285,0.69763152113498472,0.69124589771706546,0.68480583369476555,0.67831183626961611,0.6717644168907928,0.66516409121483588,0.65851137906503854,0.65180680439050709,0.64505089522489556,0.63824418364482005,0.63138720572795359,0.62448050151080592,0.61752461494619193,0.61052009386039141,0.60346748991000387,0.59636735853850142,0.58922025893248353,0.5820267539776377,0.57478741021440682,0.56750279779337165,0.56017349043034614,0.55280006536119342,0.54538310329636475,0.53792318837516395,0.53042090811974252,0.52287685338882761,0.51529161833118764,0.50766580033884001,0.50000000000000011,0.49229482105178207,0.48455087033265021,0.47676875773462501,0.4689490961552511,0.4610925014493259,0.45319959238039714,0.4452709905720314,0.43730732045885545,0.42930920923737842,0.42127728681659571,0.41321218576837826,0.40511454127765345,0.39698499109238022,0.38882417547332071,0.38063273714361567,0.37241132123816595,0.36416057525282231,0.35588114899339091,0.34757369452445741,0.33923886611803017,0.33087732020201382,0.32248971530850895,0.31407671202194876,0.30563897292707387,0.29717716255674792,0.28869194733962095,0.2801839955476445,0.27165397724343882,0.26310256422752121,0.25453042998539771,0.2459382496345198,0.23732669987111477,0.22869645891689158,0.22004820646562478,0.21138262362962429,0.20270039288609362,0.19400219802337848,0.1852887240871143,0.17656065732627438,0.16781868513912152,0.15906349601907205,0.15029577950047049,0.14151622610428452,0.13272552728372197,0.12392437536977263,0.11511346351668289,0.10629348564736542,0.097465136398746488,0.088629111067058911,0.079786105553083103,0.070936816307338571,0.062081940275234046,0.053222174842178692,0.044358217778656624,0.035490767185273123,0.026620521437774818,0.017748179132046016,0.0088744390290910122,6.123233995736766e-17,0.99999784143062498,0.9999913657318189,0.99998057293153819,0.9999654630763769,0.9999460362315663,0.99992229248097486,0.99989423192710747,0.99986185469110567,0.99982516091274642,0.9997841507504418,0.99973882438123829,0.99968918200081625,0.99963522382348868,0.9995769500822006,0.99951436102852764,0.99944745693267556,0.99937623808347864,0.9993007047883985,0.99922085737352295,0.99913669618356415,0.9990482215818578,0.9989554339503609,0.99885833368965071,0.99875692121892234,0.9986511969759877,0.99854116141727278,0.9984268150178166,0.99830815827126818,0.9981851916898854,0.99805791580453185,0.99792633116467533,0.99779043833838499,0.99765023791232887,0.99750573049177182,0.99735691670057225,0.99720379718118013,0.99704637259463358,0.9968846436205564,0.99671861095715508,0.99654827532121548,0.99637363744810037,0.99619469809174555,0.99601145802465707,0.99582391803790782,0.99563207894113381,0.99543594156253112,0.99523550674885208,0.99503077536540141,0.99482174829603309,0.99460842644314584,0.99439081072767976,0.99416890208911213,0.99394270148545327,0.9937122098932426,0.99347742830754426,0.99323835774194302,0.99299499922853951,0.99274735381794643,0.99249542257928325,0.99223920660017206,0.99197870698673285,0.99171392486357857,0.99144486137381038,0.99117151767901279,0.99089389495924829,0.9906119944130527,0.99032581725742996,0.99003536472784648,0.98974063807822599,0.98944163858094447,0.98913836752682427,0.98883082622512852,0.98851901600355574,0.98820293820823391,0.98788259420371471,0.98755798537296757,0.98722911311737405,0.9868959788567212,0.98655858402919583,0.98621693009137823,0.98587101851823589,0.98552085080311702,0.98516642845774427,0.98480775301220802,0.98444482601496008,0.98407764903280648,0.98370622365090132,0.9833305514727394,0.98295063412014971,0.98256647323328827,0.98217807047063066,0.9817854275089658,0.98138854604338766,0.98098742778728865,0.98058207447235179,0.98017248784854383,0.97975866968410696,0.97934062176555148,0.97891834589764848,0.97849184390342125,0.97806111762413828,0.97762616891930454,0.97718699966665401,0.9767436117621412,0.97629600711993336,0.97584418767240177,0.97538815537011359,0.97492791218182362,0.97446346009446561,0.97399480111314352,0.97352193726112335,0.97304487057982381,0.97256360312880819,0.97207813698577461,0.97158847424654782,0.97109461702506994,0.97059656745339096,0.97009432768166004,0.969587899878116,0.96907728622907796,0.96856248893893582,0.9680435102301409,0.96752035234319622,0.96699301753664724,0.96646150808707121,0.96592582628906831,0.96538597445525109,0.96484195491623492,0.96429377002062766,0.96374142213501945,0.96318491364397274,0.96262424695001203,0.96205942447361326,0.96149044865319322,0.9609173219450996,0.96034004682359986,0.9597586257808709,0.95917306132698787,0.95858335598991395,0.9579895123154889,0.95739153286741807,0.95678942022726188,0.95618317699442401,0.95557280578614068,0.95495830923746916,0.95433969000127628,0.95371695074822693,0.95309009416677304,0.9524591229631415,0.95182403986132236,0.95118484760305766,0.95054154894782905,0.949894146672846,0.9492426435730339,0.94858704246102221,0.94792734616713181,0.94726355753936309,0.94659567944338363,0.94592371476251602,0.94524766639772484,0.94456753726760478,0.94388333030836757,0.94319504847382973,0.94250269473539927,0.94180627208206347,0.94110578352037555,0.94040123207444171,0.93969262078590843,0.93897995271394885,0.93826323093524999,0.9375424585439992,0.93681763865187095,0.93608877438801319,0.9353558688990341,0.93461892534898838,0.93387794691936366,0.9331329368090665,0.93238389823440904,0.93163083442909467,0.93087374864420425,0.93011264414818229,0.92934752422682243,0.92857839218325355,0.92780525133792546,0.92702810502859434,0.92624695661030876,0.9254618094553948,0.92467266695344152,0.92387953251128674,0.92308240955300191,0.92228130151987731,0.92147621187040762,0.9206671440802765,0.91985410164234194,0.91903708806662077,0.918216106880274,0.91739116162759149,0.91656225586997619,0.91572939318592939,0.91489257717103467,0.91405181143794312,0.91320709961635682,0.91235844535301414,0.91150585231167314,0.9106493241730963,0.9097888646350345,0.90892447741221083,0.90805616623630503,0.90718393485593674,0.90630778703664994,0.90542772656089643,0.90454375722801916,0.9036558828542367,0.90276410727262557,0.90186843433310504,0.90096886790241915,0.90006541186412115,0.89915807011855609,0.89824684658284426,0.89733174519086401,0.89641276989323493,0.89548992465730104,0.89456321346711321,0.89363264032341228,0.89269820924361154,0.89175992426177964,0.89081778942862311,0.88987180881146866,0.88892198649424581,0.88796832657746949,0.88701083317822171,0.88604951043013436,0.88508436248337119,0.88411539350460977,0.88314260767702368,0.88216600920026411,0.8811856022904424,0.88020139118011109,0.87921338011824623,0.87822157337022855,0.87722597521782542,0.87622658995917224,0.87522342190875368,0.87421647539738567,0.87320575477219575,0.87219126439660533,0.87117300865030989,0.87015099192926093,0.8691252186456464,0.86809569322787206,0.86706242012054158,0.86602540378443871,0.8649846486965066,0.8639401593498296,0.86289194025361293,0.86183999593316396,0.86078433092987228,0.8597249498011903,0.85866185712061316,0.85759505747765952,0.85652455547785145,0.85545035574269468,0.8543724629096584,0.85329088163215572,0.85220561657952287,0.85111667243699973,0.85002405390570934,0.84892776570263739,0.84782781256061224,0.84672419922828424,0.84561693047010511,0.84450601106630785,0.84339144581288572,0.8422732395215714,0.84115139701981678,0.8400259231507714,0.83889682277326239,0.83776410076177243,0.83662776200641975,0.83548781141293649,0.83434425390264733,0.83319709441244894,0.83204633789478788,0.83089198931763975,0.82973405366448749,0.82857253593430003,0.82740744114151055,0.82623877431599491,0.82506654050304984,0.82389074476337165,0.82271139217303346,0.82152848782346399,0.82034203682142559,0.8191520442889918,0.81795851536352548,0.81676145519765675,0.81556086895926017,0.81435676183143335,0.81314913901247365,0.8119380057158565,0.81072336717021232,0.80950522861930418,0.80828359532200522,0.80705847255227614,0.8058298655991416,0.80459777976666835,0.803362220373942,0.80212319275504385,0.80088070225902797,0.79963475424989827,0.79838535410658518,0.7971325072229225,0.79587621900762406,0.79461649488426034,0.79335334029123517,0.7920867606817622,0.7908167615238415,0.78954334830023543,0.78826652650844564,0.78698630166068895,0.78570267928387372,0.78441566491957571,0.78312526412401473,0.7818314824680298,0.78053432553705604,0.7792337989310999,0.77792990826471498,0.77662265916697837,0.77531205728146579,0.7739981082662275,0.77268081779376352,0.77136019155099977,0.7700362352392629,0.76870895457425592,0.76737835528603371,0.76604444311897801,0.76470722383177281,0.7633667031973792,0.7620228870030108,0.76067578105010858,0.75932539115431574,0.75797172314545291,0.75661478286749284,0.75525457617853486,0.75389110895077993,0.75252438707050529,0.75115441643803893,0.74978120296773421,0.74840475258794414,0.74702507124099604,0.74564216488316559,0.74425603948465158,0.74286670102954966,0.74147415551582663,0.74007840895529475,0.73867946737358559,0.73727733681012408,0.73587202331810231,0.73446353296445366,0.73305187182982634,0.7316370460085575,0.73021906160864636,0.72879792475172844,0.72737364157304873,0.72594621822143524,0.72451566085927266,0.72308197566247567,0.72164516882046204,0.7202052465361265,0.71876221502581317,0.71731608051928941,0.71586684925971844,0.71441452750363277,0.71295912152090679,0.71150063759473015,0.71003908202158039,0.7085744611111956,0.70710678118654757,0.70563604858381401,0.70416226965235185,0.70268545075466915,0.70120559826639783,0.69972271857626667,0.69823681808607285,0.69674790321065505,0.69525598037786529,0.69376105602854166,0.69226313661647965,0.69076222860840542,0.68925833848394713,0.68775147273560699,0.6862416378687336,0.68472884040149351,0.68321308686484328,0.68169438380250136,0.68017273777091936,0.6786481553392546,0.67712064308934083,0.67559020761566024,0.67405685552531536,0.67252059343799986,0.67098142798597016,0.66943936581401731,0.66789441357943757,0.66634657795200392,0.66479586561393789,0.66324228325987944,0.66168583759685939,0.66012653534426957,0.65856438323383415,0.65699938800958058,0.65543155642781026,0.6538608952570697,0.65228741127812118,0.65071111128391335,0.64913200207955191,0.64755009048227052,0.64596538332140097,0.6443778874383439,0.64278760968653936,0.64119455693143701,0.63959873605046669,0.63800015393300857,0.63639881748036342,0.63479473360572303,0.63318790923413981,0.63157835130249762,0.62996606675948141,0.62835106256554718,0.62673334569289219,0.62511292312542466,0.62348980185873359,0.62186398890005867,0.62023549126826005,0.61860431599378807,0.61697047011865258,0.6153339606963929,0.61369479479204747,0.61205297948212267,0.61040852185456318,0.60876142900872066,0.60711170805532355,0.60545936611644591,0.60380441032547738,0.6021468478270916,0.60048668577721598,0.59882393134300027,0.59715859170278618,0.59549067404607592,0.59382018557350158,0.5921471334967936,0.59047152503875,0.58879336743320476,0.58711266792499728,0.58542943376994061,0.58374367223478996,0.58205539059721179,0.58036459614575231,0.57867129617980573,0.57697549800958292,0.57527720895607992,0.57357643635104605,0.57187318753695282,0.57016746986696165,0.56845929070489243,0.56674865742519143,0.56503557741289989,0.56332005806362206,0.56160210678349298,0.55988173098914662,0.55815893810768391,0.556433735576641,0.55470613084395637,0.55297613136793944,0.55124374461723802,0.54950897807080601,0.54777183921787131,0.54603233555790343,0.54429047460058111,0.54254626386575944,0.54079971088343848,0.53905082319372966,0.53729960834682389,0.5355460739029585,0.53379022743238513,0.53203207651533657,0.53027162874199429,0.52850889171245552,0.52674387303670067,0.52497658033456018,0.52320702123568197,0.521435203379498,0.51966113441519213,0.51788482200166586,0.51610627380750662,0.51432549751095358,0.51254250079986519,0.51075729137168546,0.50896987693341167,0.50718026520155934,0.50538846390213088,0.50359448077058122,0.50179832355178433,0.50000000000000011,0.49819951787884093,0.49639688496123791,0.49459210902940748,0.49278519787481773,0.4909761592981548,0.48916500110928929,0.48735173112724239,0.48553635718015214,0.4837188871052398,0.48189932874877589,0.48007768996604622,0.47825397862131824,0.47642820258780683,0.47460036974764042,0.47277048799182703,0.4709385652202201,0.4691046093414844,0.46726862827306198,0.46543062994113776,0.4635906222806056,0.46174861323503391,0.45990461075663142,0.4580586228062124,0.45621065735316307,0.45436072237540681,0.45250882585936947,0.45065497579994529,0.44879918020046228,0.44694144707264744,0.44508178443659252,0.44322020032071907,0.44135670276174405,0.43949129980464502,0.43762399950262526,0.43575480991707943,0.43388373911755818,0.4320107951817338,0.43013598619536514,0.42825932025226277,0.42638080545425383,0.42450044991114749,0.42261826174069944,0.4207342490685772,0.41884842002832484,0.41696078276132803,0.41507134541677876,0.41318011615164019,0.41128710313061151,0.4093923145260927,0.40749575851814873,0.40559744329447522,0.40369737705036235,0.40179556798865979,0.39989202431974108,0.3979867542614684,0.3960797660391569,0.39417106788553941,0.39226066804073062,0.3903485747521917,0.38843479627469479,0.386519340870287,0.38460221680825518,0.38268343236508984,0.38076299582444961,0.37884091547712562,0.37691719962100534,0.37499185656103706,0.3730648946091939,0.37113632208443798,0.36920614731268442,0.36727437862676565,0.36534102436639498,0.36340609287813108,0.36146959251534166,0.35953153163816748,0.35759191861348644,0.35565076181487665,0.35370806962258156,0.35176385042347297,0.34981811261101486,0.34787086458522737,0.34592211475265039,0.34397187152630732,0.34202014332566882,0.3400669385766163,0.33811226571140568,0.33615613316863091,0.33419854939318761,0.33223952283623648,0.33027906195516715,0.32831717521356107,0.32635387108115566,0.32438915803380713,0.32242304455345444,0.32045553912808222,0.31848665025168443,0.31651638642422747,0.31454475615161365,0.31257176794564445,0.31059743032398374,0.30862175181012097,0.30664474093333433,0.30466640622865437,0.30268675623682606,0.30070579950427329,0.29872354458306111,0.2967400000308591,0.29475517441090432,0.29276907629196436,0.29078171424830029,0.28879309685962989,0.28680323271109032,0.28481213039320119,0.28281979850182754,0.28082624563814246,0.27883148040859035,0.27683551142484941,0.27483834730379481,0.27283999666746106,0.27084046814300516,0.26883977036266915,0.26683791196374301,0.26483490158852718,0.26283074788429533,0.26082545950325714,0.25881904510252074,0.2568115133440555,0.25480287289465459,0.25279313242589746,0.25078230061411283,0.24877038614034025,0.24675739769029378,0.24474334395432393,0.24272823362738008,0.24071207540897313,0.23869487800313785,0.23667665011839534,0.23465740046771535,0.23263713776847889,0.23061587074244025,0.22859360811568971,0.22657035861861555,0.22454613098586662,0.22252093395631445,0.22049477627301564,0.21846766668317399,0.2164396139381029,0.21441062679318745,0.21238071400784669,0.21034988434549573,0.208318146573508,0.20628550946317739,0.20425198178968032,0.20221757233203791,0.20018228987307807,0.19814614319939755,0.19610914110132427,0.19407129237287854,0.19203260581173623,0.18999309021919011,0.187952754400112,0.18591160716291472,0.18386965731951405,0.18182691368529086,0.17978338507905278,0.1777390803229964,0.17569400824266898,0.17364817766693041,0.17160159742791523,0.16955427636099418,0.16750622330473647,0.16545744710087126,0.1634079565942497,0.16135776063280666,0.15930686806752262,0.15725528775238529,0.15520302854435156,0.1531500993033092,0.15109650889203857,0.14904226617617444,0.14698738002416759,0.1449318593072467,0.14287571289937989,0.14081894967723671,0.13876157852014895,0.13670360831007353,0.13464504793155344,0.1325859062716794,0.13052619222005171,0.12846591466874172,0.12640508251225346,0.12434370464748527,0.12228178997369146,0.12021934739244373,0.11815638580759288,0.1160929141252303,0.11402894125364955,0.11196447610330791,0.10989952758678787,0.10783410461875867,0.10576821611593785,0.10370187099705273,0.10163507818280189,0.099567846595816661,0.097500185160622657,0.095432102803601149,0.09336360845295065,0.091294711038648266,0.089225419492411182,0.087155742747658138,0.085085689739471004,0.08301526940455542,0.080944490681203435,0.078873362509254141,0.076801893830055229,0.074730093586424393,0.072657970722610737,0.070585534184256185,0.06851279291835681,0.066439755873224274,0.064366431998447118,0.062292830244852174,0.060218959564465942,0.058144828910475899,0.056070447237191845,0.053995823500007305,0.051920966655360792,0.049845885660697198,0.047770589474429088,0.045695087055898059,0.043619387365336007,0.041543499363826522,0.039467432013266114,0.037391194276325604,0.035314795116411384,0.033238243497626711,0.031161548384733055,0.029084718743111582,0.02700776353872357,0.024930691738073035,0.022853512308167134,0.020776234216477674,0.018698866430902402,0.016621417919726277,0.014543897651582776,0.012466314595415145,0.010388677720437705,0.0083109959960971196,0.0062332783920336669,0.0041555338780425288,0.0020777714240350592,6.123233995736766e-17,0.99999649167258042,0.99998596671493845,0.99996842520092399,0.99994386725361994,0.99991229304534079,0.99987370279763199,0.99982809678126783,0.99977547531625011,0.99971583877180548,0.99964918756638299,0.999575522167651,0.99949484309249437,0.99940715090701027,0.9993124462265045,0.99921072971548708,0.99910200208766764,0.99898626410595048,0.99886351658242911,0.99873376037838035,0.99859699640425892,0.9984532256196903,0.99830244903346443,0.99814466770352861,0.99797988273698002,0.99780809529005787,0.99762930656813531,0.99744351782571117,0.99725073036640099,0.99705094554292761,0.99684416475711235,0.9966303894598646,0.99640962115117182,0.99618186138008902,0.99594711174472794,0.99570537389224567,0.99545664951883328,0.99520094036970386,0.99493824823908039,0.99466857497018268,0.99439192245521502,0.99410829263535272,0.9938176875007283,0.99352010909041755,0.99321555949242568,0.9929040408436719,0.99258555532997517,0.99226010518603835,0.99192769269543279,0.9915883201905823,0.99124199005274638,0.99088870471200419,0.99052846664723715,0.99016127838611112,0.98978714250505972,0.98940606162926514,0.98901803843264025,0.98862307563781004,0.98822117601609205,0.98781234238747728,0.98739657762061006,0.98697388463276836,0.98654426638984294,0.98610772590631668,0.98566426624524361,0.98521389051822694,0.98475660188539782,0.98429240355539271,0.98382129878533109,0.98334329088079242,0.98285838319579333,0.98236657913276348,0.98186788214252241,0.98136229572425471,0.98084982342548577,0.98033046884205677,0.97980423561809971,0.9792711274460113,0.97873114806642769,0.97818430126819778,0.9776305908883568,0.97707002081209937,0.97650259497275227,0.97592831735174668,0.97534719197859043,0.97475922293083983,0.97416441433407053,0.97356277036184935,0.97295429523570431,0.97233899322509543,0.97171686864738427,0.97108792586780457,0.97045216929943057,0.96980960340314659,0.96916023268761597,0.96850406170924863,0.96784109507217009,0.96717133742818828,0.96649479347676137,0.96581146796496486,0.96512136568745788,0.96442449148645004,0.96372085025166698,0.96301044692031645,0.96229328647705348,0.96156937395394515,0.96083871443043589,0.96010131303331148,0.95935717493666284,0.95860630536185021,0.95784870957746626,0.95708439289929903,0.95631336069029493,0.95553561836052081,0.95475117136712617,0.95396002521430479,0.95316218545325604,0.95235765768214631,0.95154644754606921,0.95072856073700629,0.94990400299378686,0.94907278010204821,0.94823489789419435,0.94739036224935547,0.94653917909334684,0.94568135439862666,0.94481689418425496,0.94394580451585053,0.94306809150554904,0.94218376131195958,0.94129282014012194,0.94039527424146274,0.93949112991375194,0.93858039350105804,0.93766307139370419,0.93673917002822293,0.9358086958873113,0.93487165549978513,0.93392805544053348,0.93297790233047218,0.9320212028364977,0.93105796367144011,0.93008819159401623,0.92911189340878197,0.92812907596608463,0.92713974616201511,0.92614391093835924,0.92514157728254875,0.92413275222761326,0.92311744285212982,0.92209565628017387,0.92106739968126916,0.92003268027033724,0.91899150530764717,0.91794388209876432,0.91688981799449898,0.91582932039085529,0.91476239672897885,0.91368905449510462,0.91260930122050488,0.91152314448143534,0.91043059189908315,0.90933165113951264,0.90822632991361174,0.90711463597703801,0.90599657713016413,0.90487216121802305,0.90374139613025306,0.90260428980104268,0.90146085020907452,0.90031108537746929,0.89915500337373011,0.89799261230968552,0.8968239203414321,0.89564893566927817,0.89446766653768572,0.89328012123521228,0.89208630809445355,0.89088623549198409,0.88967991184829931,0.88846734562775576,0.88724854533851216,0.88602351953246927,0.88479227680521055,0.88355482579594113,0.88231117518742752,0.88106133370593709,0.8798053101211758,0.8785431132462278,0.87727475193749271,0.87600023509462432,0.87471957166046721,0.87343277062099489,0.87213984100524578,0.87084079188526087,0.86953563237601939,0.86822437163537525,0.86690701886399246,0.86558358330528062,0.86425407424533029,0.86291850101284773,0.86157687297908914,0.86022919955779553,0.8588754902051261,0.85751575441959205,0.85615000174199007,0.85477824175533534,0.8534004840847943,0.85201673839761682,0.85062701440306887,0.84923132185236394,0.84782967053859504,0.8464220702966655,0.84500853100322049,0.8435890625765774,0.84216367497665601,0.84073237820490931,0.8392951823042526,0.83785209735899357,0.83640313349476114,0.83494830087843452,0.83348760971807212,0.83202107026283967,0.83054869280293819,0.82907048766953229,0.82758646523467705,0.82609663591124582,0.82460101015285647,0.82309959845379899,0.82159241134896088,0.82007945941375382,0.81856075326403943,0.81703630355605461,0.81550612098633657,0.81397021629164834,0.81242860024890307,0.81088128367508849,0.80932827742719071,0.80776959240211876,0.80620523953662737,0.80463522980724067,0.80305957423017493,0.80147828386126152,0.79989136979586928,0.79829884316882627,0.79670071515434238,0.79509699696593006,0.79348769985632639,0.79187283511741369,0.79025241408014057,0.78862644811444194,0.78699494862915997,0.78535792707196339,0.78371539492926723,0.78206736372615271,0.78041384502628597,0.77875485043183712,0.77709039158339832,0.77542048015990306,0.77374512787854333,0.7720643464946878,0.77037814780179925,0.76868654363135192,0.76698954585274859,0.76528716637323668,0.76357941713782551,0.76186631012920203,0.76014785736764678,0.75842407091094965,0.75669496285432525,0.75496054533032797,0.75322083050876698,0.7514758305966206,0.74972555783795103,0.747970024513818,0.74620924294219293,0.74444322547787234,0.74267198451239125,0.74089553247393614,0.73911388182725779,0.73732704507358382,0.73553503475053106,0.7337378634320173,0.73193554372817349,0.73012808828525466,0.72831550978555215,0.72649782094730353,0.7246750345246038,0.72284716330731624,0.72101422012098237,0.7191762178267318,0.71733316932119218,0.71548508753639883,0.71363198543970363,0.71177387603368447,0.7099107723560536,0.70804268747956656,0.70616963451193004,0.70429162659571032,0.70240867690824071,0.70052079866152916,0.69862800510216583,0.69673030951122961,0.69482772520419567,0.6929202655308413,0.69100794387515263,0.68909077365523075,0.68716876832319718,0.68524194136510008,0.68331030630081913,0.68137387668397087,0.67943266610181352,0.67748668817515167,0.67553595655824072,0.67358048493869127,0.67162028703737253,0.66965537660831675,0.66768576743862207,0.66571147334835634,0.66373250819045959,0.66174888585064739,0.65976062024731308,0.65776772533142991,0.65577021508645383,0.65376810352822468,0.65176140470486821,0.64975013269669746,0.64773430161611389,0.6457139256075084,0.64368901884716201,0.64165959554314678,0.63962566993522529,0.63758725629475166,0.63554436892457078,0.63349702215891812,0.63144523036331934,0.62938900793448938,0.62732836930023117,0.62526332891933478,0.62319390128147567,0.62112010090711356,0.61904194234738963,0.61695944018402538,0.61487260902921959,0.61278146352554608,0.61068601834585134,0.60858628819315075,0.60648228780052593,0.60437403193102168,0.60226153537754168,0.60014481296274491,0.5980238795389422,0.59589874998799108,0.5937694392211923,0.59163596217918446,0.58949833383183958,0.58735656917815793,0.58521068324616288,0.58306069109279535,0.58090660780380809,0.57874844849366014,0.5765862283054104,0.57441996241061155,0.57224966600920391,0.57007535432940792,0.56789704262761842,0.56571474618829654,0.56352848032386327,0.56133826037459156,0.55914410170849882,0.55694601972123903,0.5547440298359948,0.55253814750336905,0.55032838820127694,0.54811476743483656,0.54589730073626097,0.54367600366474833,0.54145089180637374,0.53922198077397887,0.53698928620706343,0.53475282377167421,0.53251260916029641,0.53026865809174262,0.52802098631104299,0.52576960958933483,0.52351454372375106,0.52125580453731069,0.51899340787880688,0.51672736962269628,0.51445770566898719,0.5121844319431279,0.5099075643958958,0.5076271190032845,0.50534311176639213,0.50305555871130914,0.50076447588900574,0.4984698793752193,0.49617178527034161,0.49387020969930578,0.49156516881147311,0.48925667878051998,0.48694475580432411,0.484629416104851,0.48231067592804017,0.47998855154369119,0.47766305924534924,0.47533421535019116,0.47300203619891074,0.47066653815560405,0.46832773760765484,0.46598565096561922,0.4636402946631108,0.46129168515668523,0.45893983892572471,0.45658477247232249,0.45422650232116707,0.45186504501942604,0.44950041713663025,0.44713263526455738,0.44476171601711556,0.44238767603022672,0.44001053196171014,0.43763030049116514,0.43524699831985447,0.43286064217058684,0.43047124878759963,0.4280788349364415,0.42568341740385468,0.4232850129976572,0.42088363854662492,0.41847931090037349,0.41607204692924016,0.41366186352416534,0.41124877759657402,0.40883280607825734,0.40641396592125345,0.40399227409772887,0.4015677475998593,0.3991404034397103,0.39671025864911796,0.39427733027956957,0.39184163540208367,0.3894031911070906,0.38696201450431222,0.38451812272264224,0.38207153291002571,0.37962226223333889,0.37717032787826871,0.37471574704919225,0.37225853696905592,0.36979871487925481,0.3673362980395114,0.36487130372775478,0.36240374923999918,0.35993365189022275,0.35746102901024601,0.35498589794961027,0.35250827607545582,0.35002818077240028,0.34754562944241624,0.34506063950470955,0.3425732283955969,0.34008341356838345,0.33759121249324048,0.33509664265708267,0.33259972156344564,0.33010046673236276,0.32759889570024264,0.32509502601974566,0.32258887525966118,0.32008046100478404,0.31756980085579134,0.31505691242911865,0.31254181335683678,0.31002452128652774,0.30750505388116123,0.30498342881897028,0.30245966379332767,0.29993377651262149,0.2974057847001309,0.2948757060939019,0.2923435584466228,0.28980935952549958,0.28727312711213149,0.28473487900238587,0.28219463300627357,0.27965240694782406,0.27710821866496005,0.2745620860093726,0.2720140268463957,0.26946405905488102,0.26691220052707237,0.26435846916848027,0.26180288289775622,0.25924545964656698,0.25668621735946878,0.25412517399378137,0.25156234751946216,0.24899775591897988,0.24643141718718858,0.24386334933120135,0.24129357037026397,0.23872209833562838,0.23614895127042629,0.23357414722954251,0.23099770427948829,0.22841964049827448,0.22583997397528482,0.22325872281114892,0.2206759051176152,0.21809153901742395,0.2155056426441801,0.21291823414222591,0.2103293316665138,0.20773895338247883,0.20514711746591133,0.20255384210282931,0.19995914548935093,0.19736304583156672,0.1947655613454119,0.19216671025653856,0.1895665108001878,0.18696498122106167,0.18436213977319532,0.18175800471982878,0.17915259433327888,0.17654592689481097,0.17393802069451081,0.17132889403115603,0.16871856521208783,0.16610705255308261,0.16349437437822328,0.16088054901977081,0.15826559481803551,0.15564953012124846,0.15303237328543268,0.15041414267427433,0.14779485665899394,0.14517453361821736,0.14255319193784693,0.13993085001093247,0.13730752623754214,0.13468323902463336,0.13205800678592375,0.12943184794176177,0.12680478091899758,0.12417682415085374,0.12154799607679581,0.11891831514240302,0.11628779979923883,0.11365646850472143,0.11102433972199431,0.10839143191979661,0.1057577635723336,0.10312335315914706,0.10048821916498554,0.097852380079674742,0.095215854397987729,0.092578660619515196,0.089940817248535629,0.087302342793885476,0.084663255768829285,0.082023574690929815,0.07938331808191805,0.076742504467563338,0.074101152377543278,0.071459280345313791,0.068816906907979078,0.066174050606161494,0.063530729983871506,0.06088696358837753,0.058242769970075853,0.055598167682360422,0.052953175281492675,0.050307811326471344,0.047662094378902217,0.045016043002867927,0.042369675764797658,0.039723011233336901,0.037076067979217156,0.034428864575125596,0.031781419595574817,0.029133751616772438,0.026485879216490794,0.023837820973936573,0.021189595469620466,0.018541221285226762,0.015892717003483006,0.013244101208029581,0.010595392483289324,0.0079466094143371274,0.0052977705867695282,0.002648894586574304,6.123233995736766e-17,0.99999606600847823,0.99998426406486529,0.99996459426201889,0.99993705675470057,0.99990165175957502,0.99985837955520818,0.99980724048206482,0.99974823494250653,0.99968136340078784,0.99960662638305287,0.99952402447733124,0.99943355833353331,0.99933522866344515,0.9992290362407229,0.99911498190088688,0.9989930665413147,0.99886329112123418,0.9987256566617162,0.99858016424566631,0.9984268150178166,0.99826561018471593,0.99809655101472128,0.99791963883798729,0.99773487504645608,0.99754226109384603,0.99734179849564031,0.99713348882907527,0.99691733373312796,0.99669333490850298,0.9964614941176192,0.99622181318459602,0.99597429399523907,0.99571893849702497,0.99545574869908671,0.99518472667219693,0.99490587454875234,0.99461919452275693,0.99432468884980407,0.99402235984705944,0.9937122098932426,0.99339424142860799,0.99306845695492629,0.9927348590354641,0.99239345029496417,0.99204423341962467,0.99168721115707814,0.9913223863163696,0.99094976176793481,0.99056934044357725,0.99018112533644564,0.98978511950100967,0.98938132605303664,0.98896974816956662,0.98855038908888726,0.98812325211050878,0.98768834059513777,0.98724565796465047,0.98679520770206641,0.9863369933515207,0.98587101851823589,0.98539728686849415,0.98491580212960816,0.9844265680898916,0.98392958859862967,0.98342486756604841,0.98291240896328458,0.98239221682235356,0.9818642952361184,0.98132864835825717,0.98078528040323043,0.98023419564624803,0.97967539842323559,0.97910889313079996,0.97853468422619538,0.97795277622728771,0.97736317371251924,0.97676588132087239,0.97616090375183384,0.9755482457653567,0.97492791218182362,0.97429990788200871,0.97366423780703915,0.97302090695835641,0.97236992039767656,0.971711283246951,0.97104500068832544,0.97037107796409983,0.96968952037668688,0.96900033328856994,0.96830352212226145,0.96759909236025976,0.96688704954500637,0.9661673992788421,0.96544014722396299,0.9647052991023759,0.96396286069585324,0.96321283784588807,0.96245523645364728,0.96169006247992583,0.9609173219450996,0.96013702092907782,0.95934916557125594,0.95855376207046639,0.95775081668493045,0.95694033573220882,0.95612232558915189,0.95529679269184964,0.95446374353558083,0.95362318467476204,0.95277512272289633,0.95191956435252056,0.95105651629515353,0.95018598534124288,0.94930797834011116,0.94842250219990276,0.94752956388752885,0.94662917042861283,0.94572132890743532,0.94480604646687805,0.94388333030836757,0.94295318769181913,0.94201562593557886,0.941070652416367,0.94011827456921904,0.93915849988742783,0.93819133592248416,0.93721679028401772,0.9362348706397372,0.93524558471536956,0.93424894029459982,0.93324494521900936,0.93223360738801431,0.93121493475880357,0.93018893534627622,0.92915561722297813,0.92811498851903895,0.92706705742210749,0.92601183217728789,0.92494932108707462,0.92387953251128674,0.92280247486700273,0.92171815662849388,0.92062658632715766,0.91952777255145068,0.91842172394682109,0.91730844921564059,0.91618795711713596,0.91506025646731981,0.91392535613892201,0.9127832650613189,0.91163399222046382,0.91047754665881597,0.90931393747526934,0.90814317382508125,0.90696526491980045,0.90578022002719405,0.90458804847117524,0.9033887596317296,0.90218236294484133,0.90096886790241915,0.89974828405222151,0.89852062099778141,0.8972858883983309,0.89604409596872514,0.89479525347936606,0.893539370756125,0.89227645768026609,0.8910065241883679,0.88972958027224558,0.88844563597887227,0.88715470141029995,0.88585678672357981,0.88455190213068269,0.88324005789841842,0.88192126434835505,0.880595531856738,0.87926287085440802,0.87792329182671924,0.87657680531345683,0.87522342190875368,0.87386315226100764,0.87249600707279718,0.8711219971007973,0.86974113315569546,0.86835342610210553,0.8669588868584831,0.86555752639703942,0.8641493557436547,0.86273438597779184,0.86131262823240895,0.85988409369387186,0.8584487936018661,0.85700673924930848,0.85555794198225821,0.85410241319982749,0.85264016435409229,0.85117120695000148,0.84969555254528728,0.84821321275037342,0.84672419922828424,0.84522852369455281,0.84372619791712899,0.84221723371628654,0.84070164296453009,0.83917943758650215,0.83765062955888869,0.83611523091032536,0.83457325372130264,0.83302471012407098,0.83146961230254524,0.8299079724922086,0.82833980298001653,0.82676511610430026,0.82518392425466947,0.82359623987191477,0.82200207544790993,0.82040144352551359,0.81879435669847067,0.81718082761131305,0.81556086895926017,0.8139344934881193,0.81230171399418505,0.81066254332413867,0.80901699437494745,0.8073650800937624,0.80570681347781714,0.80404220757432543,0.80237127548037801,0.80069403034284048,0.79901048535824903,0.79732065377270711,0.79562454888178102,0.79392218403039516,0.79221357261272751,0.79049872807210353,0.7887776639008911,0.78705039364039386,0.78531693088074495,0.78357728926080006,0.7818314824680298,0.78007952423841254,0.77832142835632601,0.77655720865443856,0.77478687901360099,0.77301045336273699,0.77122794567873332,0.76943936998633033,0.76764474035801111,0.76584407091389128,0.76403737582160747,0.76222466929620591,0.76040596560003093,0.7585812790426123,0.75675062398055304,0.75491401481741593,0.75307146600361097,0.75122299203628073,0.74936860745918721,0.74750832686259683,0.74564216488316559,0.74377013620382448,0.74189225555366345,0.74000853770781549,0.73811899748734067,0.73622364975910948,0.73432250943568556,0.73241559147520896,0.73050291088127761,0.72858448270283027,0.72666032203402708,0.72473044401413167,0.72279486382739155,0.72085359670291882,0.71890665791457031,0.71695406278082729,0.71499582666467532,0.71303196497348298,0.71106249315888048,0.70908742671663894,0.70710678118654757,0.70512057215229174,0.70312881524133053,0.70113152612477347,0.6991287205172575,0.69712041417682324,0.69510662290479086,0.69308736254563585,0.69106264898686465,0.68903249815888923,0.68699692603490159,0.68495594863074905,0.682909582004807,0.6808578422578534,0.67880074553294178,0.67673830801527424,0.67467054593207432,0.67259747555245908,0.67051911318731083,0.6684354751891497,0.66634657795200392,0.66425243791128175,0.66215307154364134,0.66004849536686172,0.65793872593971259,0.65582377986182405,0.65370367377355598,0.65157842435586699,0.64944804833018366,0.64731256245826829,0.64517198354208771,0.64302632842368024,0.64087561398502413,0.63871985714790414,0.63655907487377861,0.63439328416364549,0.63222250205790975,0.63004674563624785,0.62786603201747471,0.62568037835940793,0.62348980185873359,0.62129431975087024,0.61909394930983397,0.61688870784810224,0.61467861271647728,0.61246368130395012,0.61024393103756369,0.60801937938227535,0.60579004384081991,0.60355594195357143,0.60131709129840583,0.59907350949056204,0.59682521418250367,0.5945722230637801,0.59231455386088727,0.59005222433712823,0.58778525229247314,0.58551365556341972,0.5832374520228526,0.5809566595799025,0.57867129617980573,0.57638137980376281,0.57408692846879694,0.57178796022761225,0.56948449316845207,0.56717654541495588,0.56486413512601763,0.5625472804956424,0.56022599975280285,0.55790031116129668,0.55557023301960229,0.55323578366073489,0.55089698145210253,0.5485538447953614,0.54620639212627076,0.54385464191454869,0.54149861266372579,0.53913832291100039,0.5367737912270919,0.53440503621609581,0.53203207651533657,0.52965493079522064,0.52727361775908999,0.52488815614307549,0.52249856471594891,0.52010486227897479,0.51770706766576313,0.51530519974212141,0.51289927740590613,0.51048931958687316,0.50807534524652953,0.50565737337798455,0.50323542300580015,0.50080951318584055,0.49837966300512304,0.49594589158166763,0.49350821806434686,0.49106666163273455,0.48862124149695496,0.48617197689753255,0.4837188871052398,0.48126199142094545,0.47880130917546287,0.47633685972939838,0.47386866247299869,0.47139673682599781,0.46892110223746453,0.46644177818565002,0.46395878417783409,0.46147213975017132,0.45898186446753775,0.45648797792337714,0.45399049973954686,0.4514894495661626,0.44898484708144459,0.44647671199156297,0.44396506403048214,0.44144992295980556,0.43893130856862039,0.43640924067334202,0.43388373911755818,0.43135482377187201,0.42882251453374648,0.42628683132734779,0.42374779410338875,0.42120542283897094,0.41865973753742813,0.41611075822816934,0.41355850496652069,0.41100299783356747,0.40844425693599617,0.40588230240593703,0.40331715440080512,0.40074883310314113,0.39817735872045329,0.39560275148505875,0.39302503165392366,0.39044421950850383,0.3878603353545852,0.38527339952212469,0.38268343236508984,0.38009045426129801,0.37749448561225679,0.37489554684300375,0.37229365840194523,0.36968884076069508,0.36708111441391428,0.36447049987914959,0.36185701769667217,0.35924068842931528,0.35662153266231306,0.35399957100313884,0.35137482408134274,0.34874731254838881,0.34611705707749302,0.34348407836346101,0.34084839712252496,0.33821003409217981,0.33556901003102108,0.33292534571858146,0.33027906195516715,0.32763017956169366,0.32497871937952261,0.32232470227029797,0.31966814911578151,0.31700908081768819,0.31434751829752217,0.31168348249641237,0.30901699437494745,0.30634807491301064,0.30367674510961479,0.30100302598273765,0.29832693856915615,0.2956485039242806,0.29296774312198903,0.29028467725446233,0.28759932743201733,0.28491171478294069,0.28222186045332304,0.27952978560689279,0.27683551142484941,0.2741390591056963,0.27144044986507432,0.2687397049355954,0.26603684556667517,0.26333189302436499,0.26062486859118544,0.25791579356595912,0.25520468926364248,0.25249157701515812,0.2497764781672269,0.24705941408220078,0.24434040613789407,0.24161947572741502,0.23889664425899773,0.23617193315583421,0.23344536385590547,0.23071695781181228,0.22798673649060694,0.22525472137362473,0.22252093395631445,0.21978539574806896,0.21704812827205627,0.21430915306505069,0.21156849167726291,0.20882616567217005,0.20608219662634639,0.20333660612929408,0.20058941578327283,0.19784064720312944,0.19509032201612833,0.19233846186178158,0.18958508839167851,0.18683022326931464,0.18407388816992185,0.18131610478029814,0.17855689479863671,0.17579627993435468,0.17303428190792275,0.17027092245069483,0.16750622330473647,0.16474020622265342,0.16197289296742101,0.15920430531221319,0.15643446504023092,0.15366339394453027,0.15089111382785145,0.14811764650244758,0.14534301378991277,0.14256723752100994,0.13979033953549955,0.13701234168196799,0.13423326581765554,0.13145313380828375,0.12867196752788387,0.12588978885862534,0.12310661969064289,0.12032248192186418,0.1175373974578377,0.11475138821156104,0.11196447610330791,0.10917668306045532,0.10638803101731142,0.10359854191494344,0.10080823770100455,0.09801714032956077,0.095225271760918662,0.092432653961453032,0.089639308903433551,0.086845258564851591,0.084050524929247597,0.08125512998553866,0.078459095727844999,0.075662444155316547,0.072865197271960211,0.070067377086467264,0.067269005612039717,0.06447010486621664,0.061670696870701446,0.058870803651188984,0.056070447237191845,0.053269649661866599,0.050468432961840851,0.047666819177040319,0.044864830350514986,0.042062488528265198,0.039259815759068666,0.036456834094307451,0.033653565587793983,0.030850032295597112,0.028046256275869017,0.025242259588672111,0.022438064295804999,0.019633692460628474,0.016829166147892365,0.014024507423562363,0.011219738354645981,0.0084148810090184708,0.0056099574552496458,0.0028049897624306866,6.123233995736766e-17,0.99997727539874437,0.99990910262779253,0.99979548478554248,0.99963642703583455,0.99943193660771668,0.9991820227951157,0.99888669695641508,0.99854597251393873,0.99815986495334075,0.99772839182290196,0.99725157273273191,0.99672942935387809,0.99616198541734069,0.99554926671299404,0.99489130108841461,0.99418811844761534,0.99343975074968638,0.99264623200734292,0.99180759828537901,0.99092388769902828,0.98999514041223236,0.98902139863581473,0.98800270662556244,0.98693911068021511,0.98583065913936019,0.98467740238123624,0.98347939282044328,0.98223668490556026,0.98094933511667104,0.9796174019627969,0.97824094597923728,0.97682002972481907,0.97535471777905292,0.97384507673919807,0.97229117521723596,0.97069308383675146,0.96905087522972333,0.96736462403322332,0.96563440688602331,0.96386030242511289,0.96204239128212499,0.96018075607967135,0.95827548142758723,0.95632665391908611,0.95433436212682421,0.95229869659887445,0.95021974985461177,0.94809761638050782,0.9459323926258365,0.94372417699829081,0.94147306985950996,0.93917917352051816,0.93684259223707456,0.93446343220493533,0.93204180155502647,0.92957781034852982,0.92707157057188061,0.92452319613167799,0.92193280284950807,0.91930050845667977,0.91662643258887389,0.91391069678070602,0.91115342446020298,0.90835474094319291,0.90551477342760966,0.90263365098771187,0.89971150456821691,0.8967484669783492,0.89374467288580406,0.89070025881062753,0.88761536311901157,0.88449012601700505,0.88132468954414211,0.87811919756698575,0.87487379577259028,0.87158863166187894,0.86826385454294064,0.86489961552424399,0.86149606750776953,0.85805336518206021,0.85457166501519133,0.85105112524765869,0.84749190588518741,0.84389416869145883,0.84025807718075918,0.83658379661054816,0.83287149397394744,0.82912133799215115,0.82533349910675802,0.82150814947202477,0.81764546294704132,0.81374561508783017,0.80980878313936622,0.80583514602752193,0.80182488435093524,0.79777818037280102,0.79369521801258802,0.78957618283767927,0.78542126205493878,0.78123064450220259,0.77700452063969627,0.77274308254137924,0.76844652388621471,0.76411503994936691,0.75974882759332663,0.75534808525896324,0.75091301295650659,0.74644381225645573,0.74194068628041832,0.73740383969187884,0.73283347868689652,0.72822981098473438,0.7235930458184181,0.71892339392522675,0.71422106753711467,0.70948628037106642,0.70471924761938254,0.69992018593990002,0.695089313446145,0.69022684969741988,0.68533301568882399,0.68040803384121062,0.67545212799107679,0.67046552338039123,0.66544844664635672,0.66040112581110977,0.65532379027135723,0.6502166707879502,0.6450799994753964,0.63991400979131041,0.63471893652580369,0.62949501579081291,0.62424248500936974,0.61896158290480929,0.61365254948992065,0.60831562605603873,0.60295105516207748,0.59755908062350571,0.5921399475012662,0.58669390209063776,0.58122119191004118,0.57572206568978956,0.57019677336078423,0.56464556604315519,0.55906869603484777,0.55346641680015674,0.54783898295820543,0.54218665027137403,0.53650967563367558,0.53080831705907994,0.5250828336697877,0.51933348568445281,0.51356053440635618,0.50776424221152949,0.50194487253683029,0.49610268986797001,0.49023795972749146,0.48435094866270262,0.47844192423356147,0.47251115500051588,0.46655891051229792,0.46058546129367267,0.45459107883314331,0.44857603557061226,0.44254060488499886,0.43648506108181456,0.43040967938069608,0.42431473590289659,0.41820050765873634,0.41206727253501341,0.40591530928237279,0.39974489750263814,0.39355631763610405,0.38734985094879015,0.38112577951965781,0.3748843862277898,0.3686259547395338,0.36235076949560996,0.35605911569818316,0.34975127929790106,0.34342754698089756,0.33708820615576318,0.33073354494048329,0.3243638521493421,0.31797941727979728,0.31158053049932211,0.30516748263221771,0.2987405651463953,0.29230007014012921,0.28584629032878128,0.2793795190314971,0.27290005015787494,0.26640817819460788,0.25990419819209937,0.2533884057510537,0.2468610970090408,0.24032256862703805,0.23377311777594573,0.22721304212308191,0.22064263981865345,0.21406220948220525,0.2074720501890483,0.20087246145666687,0.19426374323110579,0.18764619587333797,0.18102012014561347,0.17438581719778984,0.1677435885536453,0.16109373609717439,0.15443656205886855,0.14777236900197854,0.14110145980876418,0.13442413766672837,0.12774070605483731,0.12105146872972786,0.11435672971190181,0.10765679327190857,0.10095196391651619,0.094242546374871866,0.087528845584652182,0.080811166678203927,0.074089814968676157,0.067365095936143635,0.060637315213723939,0.053906778573685359,0.047173791913550651,0.040438661242194043,0.033701692665933349,0.026963192374617712,0.020223466627711493,0.013482821740375029,0.0067415640695428648,6.123233995736766e-17,0.99999857970737849,0.99999431883354828,0.9999872173906128,0.99997727539874437,0.99996449288618394,0.99994886988924148,0.99993040645229536,0.99990910262779253,0.99988495847624825,0.99985797406624621,0.99982814947443788,0.99979548478554248,0.99975998009234679,0.99972163549570514,0.9996804511045384,0.99963642703583455,0.99958956341464755,0.99953986037409748,0.99948731805537028,0.99943193660771668,0.9993737161884525,0.99931265696295768,0.99924875910467637,0.9991820227951157,0.99911244822384593,0.99904003558849952,0.99896478509477071,0.99888669695641508,0.99880577139524851,0.99872200864114702,0.99863540893204583,0.99854597251393873,0.9984536996408776,0.99835859057497134,0.99826064558638539,0.99815986495334075,0.99805624896211353,0.99794979790703375,0.99784051209048463,0.99772839182290196,0.99761343742277286,0.99749564921663503,0.99737502753907603,0.99725157273273191,0.99712528514828669,0.99699616514447098,0.99686421308806106,0.99672942935387809,0.99659181432478683,0.99645136839169435,0.9963080919535493,0.99616198541734069,0.99601304919809663,0.99586128371888305,0.99570668941080276,0.99554926671299404,0.99538901607262953,0.99522593794491487,0.9950600327930873,0.99489130108841461,0.99471974331019353,0.99454535994574855,0.99436815149043056,0.99418811844761534,0.99400526132870182,0.99381958065311149,0.99363107694828612,0.99343975074968638,0.99324560260079087,0.99304863305309377,0.99284884266610385,0.99264623200734292,0.99244080165234372,0.99223255218464879,0.99202148419580827,0.99180759828537901,0.99159089506092202,0.99137137513800122,0.99114903914018193,0.99092388769902828,0.99069592145410224,0.99046514105296135,0.99023154715115691,0.98999514041223236,0.98975592150772129,0.98951389111714527,0.98926904992801235,0.98902139863581473,0.98877093794402704,0.98851766856410417,0.98826159121547952,0.98800270662556244,0.98774101552973681,0.98747651867135855,0.98720921680175333,0.98693911068021511,0.98666620107400327,0.98639048875834068,0.98611197451641186,0.98583065913936019,0.985546543426286,0.98525962818424406,0.98496991422824176,0.98467740238123624,0.9843820934741323,0.98408398834578004,0.98378308784297253,0.98347939282044328,0.98317290414086389,0.98286362267484151,0.9825515493009167,0.98223668490556026,0.98191903038317152,0.98159858663607513,0.98127535457451887,0.98094933511667104,0.98062052918861764,0.98028893772435999,0.97995456166581174,0.9796174019627969,0.97927745957304602,0.97893473546219456,0.97858923060377967,0.97824094597923728,0.97788988257789955,0.97753604139699191,0.97717942344163056,0.97682002972481907,0.97645786126744605,0.97609291909828177,0.97572520425397558,0.97535471777905292,0.97498146072591207,0.9746054341548217,0.97422663913391716,0.97384507673919807,0.97346074805452498,0.97307365417161618,0.97268379619004486,0.97229117521723596,0.97189579236846269,0.97149764876684375,0.97109674554334013,0.97069308383675146,0.97028666479371317,0.96987748956869346,0.96946555932398915,0.96905087522972333,0.96863343846384165,0.96821325021210858,0.96779031166810481,0.96736462403322332,0.96693618851666607,0.96650500633544068,0.96607107871435693,0.96563440688602331,0.96519499209084314,0.96475283557701175,0.96430793860051245,0.96386030242511289,0.96340992832236183,0.96295681757158547,0.96250097145988323,0.96204239128212499,0.96158107834094697,0.96111703394674763,0.96065025941768489,0.96018075607967135,0.95970852526637151,0.95923356831919704,0.95875588658730371,0.95827548142758723,0.95779235420467945,0.95730650629094427,0.95681793906647428,0.95632665391908611,0.95583265224431735,0.95533593544542172,0.95483650493336569,0.95433436212682421,0.95382950845217662,0.9533219453435029,0.95281167424257929,0.95229869659887445,0.951783013869545,0.95126462751943164,0.95074353902105524,0.95021974985461177,0.94969326150796918,0.94916407547666259,0.94863219326388981,0.94809761638050782,0.94756034634502762,0.94702038468361072,0.9464777329300641,0.9459323926258365,0.94538436532001335,0.94483365256931306,0.94428025593808207,0.94372417699829081,0.94316541732952874,0.94260397851900035,0.94203986216152058,0.94147306985950996,0.94090360322299027,0.94033146386958011,0.93975665342449,0.93917917352051816,0.93859902579804533,0.93801621190503059,0.93743073349700656,0.93684259223707456,0.93625178979589996,0.93565832785170744,0.93506220809027629,0.93446343220493533,0.93386200189655877,0.93325791887356047,0.9326511848518898,0.93204180155502647,0.9314297707139757,0.93081509406726337,0.93019777336093068,0.92957781034852982,0.92895520679111854,0.92832996445725535,0.92770208512299446,0.92707157057188061,0.92643842259494402,0.92580264299069559,0.92516423356512145,0.92452319613167799,0.92387953251128674,0.92323324453232902,0.922584334030641,0.92193280284950807,0.92127865283966037,0.92062188585926663,0.91996250377392941,0.91930050845667977,0.91863590178797183,0.91796868565567746,0.91729886195508104,0.91662643258887389,0.91595139946714876,0.91527376450739506,0.91459352963449236,0.91391069678070602,0.91322526788568092,0.91253724489643617,0.91184662976735986,0.91115342446020298,0.9104576309440745,0.90975925119543499,0.90905828719809179,0.90835474094319291,0.9076486144292214,0.90693990966198978,0.90622862865463438,0.90551477342760966,0.90479834600868203,0.90407934843292481,0.90335778274271172,0.90263365098771187,0.90190695522488307,0.90117769751846655,0.90044587993998115,0.89971150456821691,0.89897457348922982,0.89823508879633529,0.8974930525901027,0.8967484669783492,0.89600133407613358,0.89525165600575052,0.89449943489672468,0.89374467288580406,0.89298737211695445,0.89222753474135352,0.89146516291738376,0.89070025881062753,0.88993282459386014,0.88916286244704379,0.88839037455732173,0.88761536311901157,0.88683783033359942,0.88605777840973332,0.88527520956321737,0.88449012601700505,0.88370253000119314,0.88291242375301526,0.88211980951683544,0.88132468954414211,0.88052706609354126,0.87972694143075025,0.87892431782859148,0.87811919756698575,0.87731158293294575,0.87650147622056962,0.8756888797310346,0.87487379577259028,0.87405622666055205,0.87323617471729487,0.87241364227224594,0.87158863166187894,0.87076114522970671,0.86993118532627511,0.86909875430915595,0.86826385454294064,0.86742648839923286,0.86658665825664261,0.86574436650077924,0.86489961552424399,0.86405240772662406,0.86320274551448561,0.86235063130136635,0.86149606750776953,0.86063905656115625,0.8597796008959393,0.8589177029534758,0.85805336518206021,0.85718659003691766,0.85631737998019697,0.8554457374809632,0.85457166501519133,0.8536951650657586,0.85281624012243784,0.85193489268189038,0.85105112524765869,0.85016494033015955,0.84927634044667666,0.8483853281213537,0.84749190588518741,0.8465960762760194,0.84569784183853047,0.84479720512423173,0.84389416869145883,0.84298873510536343,0.84208090693790716,0.84117068676785312,0.84025807718075918,0.83934308076897102,0.83842570013161355,0.83750593787458494,0.83658379661054816,0.83565927895892422,0.83473238754588408,0.83380312500434206,0.83287149397394744,0.83193749710107767,0.83100113703883038,0.83006241644701617,0.82912133799215115,0.82817790434744853,0.82723211819281228,0.82628398221482835,0.82533349910675802,0.82438067156852946,0.82342550230673062,0.82246799403460102,0.82150814947202477,0.82054597134552187,0.8195814623882417,0.81861462533995377,0.81764546294704132,0.81667397796249286,0.81570017314589416,0.81472405126342085,0.81374561508783017,0.81276486739845377,0.81178181098118884,0.8107964486284911,0.80980878313936622,0.80881881731936223,0.80782655398056136,0.8068319959415724,0.80583514602752193,0.80483600707004743,0.80383458190728807,0.80283087338387749,0.80182488435093524,0.80081661766605894,0.79980607619331612,0.79879326280323582,0.79777818037280102,0.79676083178543977,0.79574121993101754,0.79471934770582853,0.79369521801258802,0.79266883376042374,0.79164019786486772,0.79060931324784767,0.78957618283767927,0.78854080956905781,0.787503196383049,0.78646334622708169,0.78542126205493878,0.78437694682674941,0.78333040350897964,0.78228163507442539,0.78123064450220259,0.78017743477773949,0.77912200889276817,0.7780643698453158,0.77700452063969627,0.7759424642865016,0.77487820380259342,0.77381174221109417,0.77274308254137924,0.7716722278290673,0.77059918111601244,0.76952394545029534,0.76844652388621471,0.76736691948427804,0.76628513531119402,0.76520117443986246,0.76411503994936691,0.76302673492496476,0.76193626245807933,0.76084362564629071,0.75974882759332663,0.75865187140905443,0.75755276020947171,0.75645149711669746,0.75534808525896324,0.75424252777060485,0.75313482779205221,0.7520249884698218,0.75091301295650659,0.74979890441076802,0.74868266599732625,0.74756430088695169,0.74644381225645573,0.74532120328868179,0.7441964771724966,0.74306963710278029,0.74194068628041832,0.74080962791229155,0.73967646521126784,0.73854120139619239,0.73740383969187884,0.73626438332909994,0.73512283554457891,0.73397919958097924,0.73283347868689652,0.73168567611684865,0.73053579513126654,0.72938383899648529,0.72822981098473438,0.72707371437412882,0.72591555244865957,0.72475532849818436,0.7235930458184181,0.72242870771092393,0.72126231748310343,0.7200938784481874,0.71892339392522675,0.71775086723908232,0.7165763017204162,0.71539970070568171,0.71422106753711467,0.71304040556272275,0.71185771813627718,0.7106730086173022,0.70948628037106642,0.70829753676857232,0.70710678118654757,0.70591401700743484,0.70471924761938254,0.70352247641623489,0.70232370679752265,0.70112294216845283,0.69992018593990002,0.69871544152839571,0.697508712356119,0.69630000185088703,0.695089313446145,0.69387665058095671,0.69266201669999417,0.69144541525352854,0.69022684969741988,0.68900632349310764,0.68778384010760041,0.68655940301346663,0.68533301568882399,0.68410468161733062,0.6828744042881737,0.68164218719606107,0.68040803384121062,0.67917194772933975,0.67793393237165678,0.67669399128484964,0.67545212799107679,0.67420834601795665,0.67296264889855817,0.67171504017139005,0.67046552338039123,0.66921410207492071,0.66796077980974733,0.66670556014503979,0.66544844664635672,0.66418944288463611,0.6629285524361852,0.6616657788826712,0.66040112581110977,0.659134596813856,0.65786619548859304,0.65659592543832346,0.65532379027135723,0.65404979360130311,0.65277393904705683,0.65149623023279235,0.6502166707879502,0.64893526434722826,0.64765201455057075,0.64636692504315796,0.6450799994753964,0.64379124150290756,0.64250065478651863,0.64120824299225088,0.63991400979131041,0.63861795886007677,0.63732009388009336,0.63602041853805613,0.63471893652580369,0.63341565154030655,0.63211056728365689,0.63080368746305793,0.62949501579081291,0.62818455598431555,0.62687231176603841,0.62555828686352333,0.62424248500936974,0.62292490994122518,0.62160556540177392,0.62028445513872654,0.61896158290480929,0.61763695245775363,0.61631056756028524,0.61498243198011349,0.61365254948992065,0.61232092386735137,0.61098755889500178,0.60965245836040849,0.60831562605603873,0.60697706577927835,0.60563678133242216,0.60429477652266206,0.60295105516207748,0.60160562106762316,0.60025847806111954,0.59890962996924102,0.59755908062350571,0.59620683386026407,0.59485289352068826,0.59349726345076148,0.5921399475012662,0.59078094952777427,0.58942027339063519,0.58805792295496551,0.58669390209063776,0.5853282146722697,0.58396086457921248,0.58259185569554084,0.58122119191004118,0.57984887711620081,0.57847491521219685,0.57709931010088522,0.57572206568978956,0.5743431858910899,0.57296267462161199,0.57158053580281565,0.57019677336078423,0.5688113912262126,0.56742439333439698,0.566035783625223,0.56464556604315519,0.56325374453722465,0.56186032306101952,0.56046530557267182,0.55906869603484777,0.55767049841473615,0.55627071668403605,0.55486935481894706,0.55346641680015674,0.5520619066128305,0.55065582824659898,0.54924818569554779,0.54783898295820543,0.54642822403753255,0.54501591294091001,0.54360205368012793,0.54218665027137403,0.54076970673522229,0.53935122709662175,0.53793121538488486,0.53650967563367558,0.53508661188099882,0.53366202816918862,0.53223592854489665,0.53080831705907994,0.52937919776699094,0.5279485747281647,0.52651645200640818,0.5250828336697877,0.52364772379061841,0.52221112644545242,0.52077304571506688,0.51933348568445281,0.51789245044280285,0.51644994408350064,0.51500597070410858,0.51356053440635618,0.51211363929612808,0.51066528948345336,0.50921548908249326,0.50776424221152949,0.50631155299295205,0.50485742555324886,0.5034018640229927,0.50194487253683029,0.50048645523347035,0.49902661625567107,0.49756535975022975,0.49610268986797001,0.49463861076373056,0.49317312659635254,0.49170624152866882,0.49023795972749146,0.48876828536360034,0.48729722261173025,0.48582477565056065,0.48435094866270262,0.48287574583468751,0.48139917135695431,0.47992122942383897,0.47844192423356147,0.47696125998821426,0.47547924089375065,0.47399587115997172,0.47251115500051588,0.47102509663284597,0.46953770027823766,0.46804897016176666,0.46655891051229792,0.46506752556247299,0.46357481954869806,0.4620807967111315,0.46058546129367267,0.45908881754394926,0.45759086971330554,0.45609162205679005,0.45459107883314331,0.45308924430478636,0.45158612273780824,0.4500817184019541,0.44857603557061226,0.44706907852080335,0.44556085153316738,0.44405135889195185,0.44254060488499886,0.44102859380373416,0.43951532994315412,0.4380008176018137,0.43648506108181456,0.4349680646887919,0.43344983273190346,0.43193036952381653,0.43040967938069608,0.42888776662219169,0.42736463557142651,0.42584029055498407,0.42431473590289659,0.42278797594863166,0.42126001502908128,0.41973085748454875,0.41820050765873634,0.41666896989873342,0.41513624855500314,0.41360234798137135,0.41206727253501341,0.41053102657644214,0.40899361446949467,0.40745504058132148,0.40591530928237279,0.40437442494638676,0.40283239195037635,0.40128921467461798,0.39974489750263814,0.39819944482120145,0.39665286102029823,0.39510515049313111,0.39355631763610405,0.3920063668488088,0.39045530253401289,0.38890312909764629,0.38734985094879015,0.38579547249966356,0.38423999816561105,0.38268343236508984,0.38112577951965781,0.37956704405396069,0.37800723039571954,0.37644634297571811,0.3748843862277898,0.3733213645888061,0.37175728249866319,0.37019214440026982,0.3686259547395338,0.3670587179653505,0.36549043852958957,0.36392112088708267,0.36235076949560996,0.36077938881588856,0.35920698331155926,0.35763355744917397,0.35605911569818316,0.35448366253092245,0.35290720242260099,0.35132973985128818,0.34975127929790106,0.348171825246191,0.34659138218273211,0.34500995459690759,0.34342754698089756,0.34184416382966526,0.34025980964094577,0.33867448891523222,0.33708820615576318,0.33550096586851036,0.33391277256216462,0.33232363074812465,0.33073354494048329,0.32914251965601493,0.32755055941416222,0.32595766873702403,0.3243638521493421,0.32276911417848864,0.3211734593544523,0.31957689220982682,0.31797941727979728,0.31638103910212767,0.31478176221714693,0.31318159116773764,0.31158053049932211,0.30997858475984957,0.30837575849978371,0.3067720562720887,0.30516748263221771,0.30356204213809884,0.30195573935012288,0.30034857883112948,0.2987405651463953,0.29713170286362017,0.29552199655291489,0.29391145078678699,0.29230007014012921,0.29068785919020562,0.28907482251663885,0.28746096470139731,0.28584629032878128,0.28423080398541112,0.2826145102602135,0.28099741374440884,0.2793795190314971,0.27776083071724633,0.27614135339967877,0.27452109167905792,0.27290005015787494,0.27127823344083662,0.26965564613485166,0.26803229284901753,0.26640817819460788,0.26478330678505835,0.26315768323595501,0.26153131216502007,0.25990419819209937,0.25827634593914844,0.25664776003022061,0.25501844509145294,0.2533884057510537,0.25175764663928801,0.25012617238846652,0.24849398763293079,0.2468610970090408,0.24522750515516178,0.24359321671165018,0.24195823632084187,0.24032256862703805,0.23868621827649239,0.23704918991739715,0.23541148819987115,0.23377311777594573,0.2321340832995519,0.23049438942650644,0.22885404081449975,0.22721304212308191,0.22557139801364956,0.22392911314943298,0.22228619219548187,0.22064263981865345,0.21899846068759837,0.21735365947274782,0.21570824084629941,0.21406220948220525,0.21241557005615774,0.21076832724557673,0.20912048572959541,0.2074720501890483,0.20582302530645707,0.20417341576601747,0.20252322625358624,0.20087246145666687,0.19922112606439779,0.19756922476753788,0.19591676225845381,0.19426374323110579,0.19261017238103548,0.19095605440535182,0.18930139400271817,0.18764619587333797,0.18599046471894287,0.18433420524277835,0.1826774221495906,0.18102012014561347,0.17936230393855412,0.17770397823758105,0.17604514775330973,0.17438581719778984,0.17272599128449076,0.17106567472828976,0.16940487224545753,0.1677435885536453,0.16608182837187058,0.16441959642050505,0.16275689742126023,0.16109373609717439,0.15943011717259928,0.15776604537318578,0.15610152542587194,0.15443656205886855,0.1527711600016462,0.15110532398492096,0.14943905874064226,0.14777236900197854,0.14610525950330433,0.14443773498018581,0.14276980016936874,0.14110145980876418,0.13943271863743512,0.13776358139558328,0.13609405282453488,0.13442413766672837,0.13275384066570006,0.13108316656607122,0.12941212011353362,0.12774070605483731,0.12606892913777645,0.1243967941111761,0.12272430572487789,0.12105146872972786,0.11937828787756209,0.11770476792119366,0.11603091361439821,0.11435672971190181,0.11268222096936653,0.11100739214337721,0.10933224799142811,0.10765679327190857,0.10598103274409072,0.10430497116811521,0.10262861330497805,0.10095196391651619,0.09927502776539536,0.097597809615095663,0.09592031422989844,0.094242546374871866,0.0925645108158588,0.09088621231946227,0.089207655653032222,0.087528845584652182,0.085849786883124793,0.084170484317959676,0.082490942659358898,0.080811166678203927,0.079131161146041198,0.077450930835069848,0.075770480518127306,0.074089814968676157,0.072408938960789732,0.070727857269139827,0.069046574668982272,0.067365095936143635,0.065683425847007801,0.064001569178501569,0.062319530708082403,0.060637315213723939,0.058954927473902928,0.057272372267584699,0.05558965437421097,0.053906778573685359,0.05222374964636025,0.050540572373022334,0.048857251534880353,0.047173791913550651,0.045490198291043775,0.04380647544975115,0.042122628172430586,0.040438661242194043,0.038754579442493116,0.037070387557105948,0.035386090370122705,0.033701692665933349,0.032017199229213138,0.030332614844909494,0.028647944298227514,0.026963192374617712,0.025278363859761548,0.023593463539558032,0.021908496200110376,0.020223466627711493,0.018538379608831743,0.016853239930104444,0.015168052378312724,0.013482821740375029,0.011797552803332863,0.010112250354336301,0.0084269191806308277,0.0067415640695428648,0.00505618980846749,0.0033708011848539591,0.0016854029861923248,6.123233995736766e-17,0.99996434000410983,0.99985736255970981,0.99967907529643052,0.999429490929718,0.99910862725992733,0.99871650717105276,0.9982531586290958,0.99771861468007073,0.99711291344764741,0.99643609813043299,0.99568821699889021,0.99486932339189516,0.99397947571293321,0.99301873742593361,0.99198717705074302,0.99088486815823884,0.98971188936508236,0.98846832432811138,0.98715426173837417,0.9857697953148038,0.98431502379753411,0.98279005094085803,0.98119498550582684,0.97952994125249448,0.97779503693180336,0.97599039627711537,0.97411614799538704,0.97217242575799068,0.97015936819117998,0.96807711886620429,0.96592582628906831,0.96370564388994084,0.96141673001221251,0.95905924790120212,0.95663336569251456,0.95413925640004882,0.95157709790365941,0.94894707293646907,0.94624936907183688,0.94348417870998025,0.94065169906425306,0.93775213214708042,0.93478568475555102,0.93175256845666843,0.92865299957226222,0.92548719916355959,0.9222553930154197,0.9189578116202306,0.91559469016147021,0.91216626849693339,0.90867279114162491,0.90511450725032117,0.90149167059980007,0.89780453957074169,0.89405337712930066,0.89023845080835162,0.88636003268840824,0.88241839937821909,0.87841383199503942,0.87434661614458209,0.87021704190064819,0.86602540378443871,0.86177200074354965,0.857457136130651,0.85308111768185158,0.84864425749475092,0.84414687200618144,0.83958928196963889,0.83497181243240737,0.83029479271237638,0.82555855637455378,0.82076344120727629,0.8159097891981183,0.81099794650950119,0.80602826345400502,0.80100109446938461,0.79591679809329063,0.79077573693769854,0.78557827766304811,0.78032479095209184,0.77501565148345875,0.76965123790493228,0.76423193280644464,0.75875812269279097,0.7532301979560635,0.74764855284780896,0.74201358545091078,0.73632569765119738,0.73058529510877968,0.72479278722911999,0.71894858713383258,0.71305311163122032,0.70710678118654757,0.70111001989205268,0.69506325543670189,0.68896691907568663,0.68282144559966584,0.67662727330375738,0.67038484395627851,0.66409460276723908,0.65775699835658874,0.65137248272222226,0.64494151120774201,0.63846454246998352,0.63194203844630403,0.6253744643216369,0.61876228849531456,0.61210598254766291,0.60540602120636711,0.598662882312615,0.59187704678701725,0.58504899859530768,0.5781792247138271,0.57126821509479231,0.56431646263135249,0.55732446312243644,0.55029271523739143,0.54322172048041872,0.53611198315480668,0.52896401032696239,0.52177831179024969,0.51455540002862887,0.5072957901801074,0.50000000000000011,0.4926685498240026,0.48530196253108099,0.47790076350618088,0.47046548060275561,0.46299664410512087,0.45549478669063415,0.44796044339170443,0.44039415155763428,0.43279645081629492,0.42516788303564074,0.41750899228506322,0.40982032479658764,0.40210242892591597,0.39435585511331855,0.38658115584437597,0.3787788856105761,0.37094960086976786,0.3630938600064747,0.35521222329207014,0.34730525284482028,0.33937351258979226,0.33141756821863583,0.32343798714923822,0.31543533848525562,0.3074101929755248,0.29936312297335799,0.29129470239572131,0.28320550668230415,0.27509611275447821,0.26696709897415183,0.25881904510252074,0.25065253225872053,0.24246814287837995,0.23426646067208223,0.22604807058373497,0.2178135587488515,0.2095635124527486,0.20129852008866012,0.19301917111577349,0.18472605601718942,0.17641976625780859,0.16810089424214814,0.15977003327209227,0.1514277775045767,0.14307472190921416,0.13471146222586108,0.12633859492212934,0.11795671715084598,0.10956642670746519,0.10116832198743222,0.092763001943506673,0.084351066043044987,0.075933114225246442,0.067509746858365277,0.059081564696893303,0.050649168838712767,0.042213160682226969,0.033774141883468292,0.025332714313188093,0.016889480013931084,0.0084450411570985272,6.123233995736766e-17,0.99998992899200523,0.99995971617087109,0.99990936214514492,0.99983886792905818,0.99974823494250653,0.99963746501102113,0.9995065603657316,0.99935552364332136,0.99918435788597459,0.9989930665413147,0.99878165346233494,0.99855012290732093,0.99829847953976492,0.99802672842827156,0.99773487504645608,0.99742292527283405,0.99709088539070267,0.9967387620880146,0.99636656245724309,0.99597429399523907,0.99556196460308,0.99512958258591122,0.99467715665277834,0.99420469591645155,0.9937122098932426,0.99319970850281292,0.99266720206797354,0.99211470131447788,0.99154221737080461,0.99094976176793481,0.99033734643911842,0.98970498371963489,0.98905268634654431,0.98838046745843078,0.98768834059513777,0.98697631969749566,0.98624441910704086,0.98549265356572668,0.98472103821562673,0.98392958859862967,0.98311832065612637,0.98228725072868872,0.98143639555574036,0.98056577227522002,0.97967539842323559,0.97876529193371142,0.97783547113802693,0.97688595476464768,0.97591676193874743,0.97492791218182362,0.97391942541130394,0.97289132194014494,0.9718436224764232,0.97077634812291813,0.96968952037668688,0.96858316112863119,0.96745729266305658,0.96631193765722401,0.96514711918089213,0.96396286069585324,0.96275918605546096,0.96153611950414886,0.96029368567694307,0.95903190959896567,0.95775081668493045,0.95645043273863162,0.95513078395242312,0.95379189690669208,0.95243379856932275,0.95105651629515353,0.94966007782542616,0.94824451128722631,0.94680984519291811,0.94535610843956897,0.94388333030836757,0.94239154046403484,0.94088076895422545,0.93935104620892351,0.93780240303982898,0.9362348706397372,0.93464848058191097,0.93304326481944422,0.93141925568461836,0.92977648588825146,0.92811498851903895,0.92643479704288745,0.92473594530224057,0.92301846751539729,0.92128239827582248,0.91952777255145068,0.91775462568398114,0.91596299338816656,0.91415291175109326,0.91232441723145441,0.91047754665881597,0.90861233723287449,0.90672882652270803,0.90482705246601958,0.9029070533683724,0.90096886790241915,0.89901253510712242,0.89703809438696869,0.89504558551117441,0.89303504861288541,0.8910065241883679,0.8889600530961933,0.88689567655641499,0.88481343614973851,0.88271337381668302,0.880595531856738,0.87845995292750989,0.87630668004386358,0.87413575657705611,0.87194722625386245,0.86974113315569546,0.86751752171771757,0.86527643672794596,0.8630179233263503,0.86074202700394364,0.8584487936018661,0.85613826931046166,0.85381050066834729,0.85146553456147633,0.8491034182221936,0.84672419922828424,0.84432792550201519,0.84191464530917004,0.83948440725807727,0.83703726029863035,0.83457325372130264,0.832092437156154,0.82959486057183118,0.82708057427456183,0.82454962890714079,0.82200207544790993,0.81943796520973189,0.81685734983895608,0.81426028131437866,0.81164681194619515,0.80901699437494745,0.80637088157046322,0.80370852683078875,0.8010299837811159,0.79833530637270156,0.79562454888178102,0.79289776590847527,0.79015501237569041,0.78739634352801202,0.78462181493059202,0.7818314824680298,0.77902540234324669,0.77620363107635304,0.7733662255035112,0.77051324277578925,0.76764474035801111,0.7647607760275984,0.76186140787340662,0.75894669429455563,0.75601669399925275,0.75307146600361097,0.75011106963045959,0.74713556450814966,0.744145010569353,0.74113946804985487,0.73811899748734078,0.73508365972017686,0.73203351588618515,0.72896862742141155,0.72588905605888854,0.72279486382739166,0.71968611305019026,0.71656286634379229,0.71342518661668275,0.71027313706805706,0.70710678118654768,0.70392618274894503,0.70073140581891391,0.69752251474570237,0.69429957416284571,0.69106264898686476,0.68781180441595802,0.68454710592868873,0.68126861928266624,0.67797641051322088,0.67467054593207443,0.67135109212600408,0.66801811595550131,0.66467168455342573,0.66131186532365194,0.6579387259397127,0.6545523343434354,0.65115275874357359,0.64774006761443348,0.64431432969449431,0.64087561398502424,0.63742398974868975,0.63395952650816167,0.63048229404471379,0.6269923623968181,0.62348980185873359,0.61997468297909075,0.61644707655947006,0.6129070536529766,0.60935468556280825,0.60579004384082002,0.60221320028608227,0.5986242269434352,0.59502319610203724,0.59141018029390913,0.58778525229247325,0.58414848511108708,0.58049995200157356,0.57683972645274473,0.57316788218892234,0.56948449316845207,0.56578963358221457,0.56208337785213069,0.55836580062966257,0.55463697679431012,0.55089698145210264,0.54714588993408608,0.54338377779480573,0.53961072081078454,0.53582679497899677,0.53203207651533657,0.52822664185308443,0.52441056764136595,0.52058393074360865,0.5167468082359945,0.51289927740590613,0.50904141575037143,0.50517330097450119,0.50129501098992502,0.49740662391322216,0.49350821806434686,0.4895998719650525,0.48568166433730853,0.48175367410171532,0.47781598037591555,0.47386866247299869,0.46991179989990556,0.46594547235582506,0.4619697597305899,0.45798474210306767,0.45399049973954686,0.44998711309212125,0.44597466279706865,0.44195322967322681,0.43792289472036644,0.43388373911755818,0.42983584422153914,0.42577929156507283,0.42171416285530761,0.4176405399721313,0.41355850496652069,0.40946814005889065,0.40536952763743628,0.40126275025647429,0.39714789063478079,0.39302503165392366,0.38889425635659486,0.38475564794493622,0.38060928977886432,0.37645526537439217,0.37229365840194523,0.36812455268467809,0.36394803219678462,0.35976418106180702,0.35557308355094219,0.35137482408134274,0.34716948721441854,0.34295715765413171,0.33873792024529148,0.33451185997184552,0.33027906195516715,0.32603961145234195,0.32179359385444967,0.31754109468484443,0.31328219959743281,0.30901699437494745,0.30474556492722055,0.30046799728945212,0.29618437762047767,0.29189479220103348,0.28759932743201733,0.28329806983274958,0.2789911060392295,0.2746785228023903,0.27036040698635311,0.26603684556667517,0.26170792562860018,0.25737373436530259,0.25303435907613192,0.24868988716485496,0.24434040613789407,0.23998600360256606,0.2356267672653162,0.23126278492995225,0.22689414449587667,0.22252093395631445,0.2181432413965427,0.21376115499211468,0.20937476300708463,0.20498415379223051,0.20058941578327283,0.19619063749909532,0.19178790753996028,0.18738131458572474,0.18297094739405484,0.17855689479863671,0.17413924570738867,0.16971808910066918,0.16529351402948508,0.16086560961369861,0.15643446504023092,0.15200016956126727,0.1475628124924579,0.14312248321111959,0.13867927115443618,0.13423326581765554,0.12978455675228867,0.12533323356430448,0.12087938591232558,0.11642310350582305,0.11196447610330813,0.10750359351052506,0.10304054557864276,0.098575422202443613,0.094108313318514505,0.089639308903433773,0.085168498971959591,0.080695973575217517,0.076221822798885175,0.071746136761379475,0.067269005612039939,0.062790519529313527,0.058310768718938977,0.053829843412128306,0.049347833863751127,0.044864830350515209,0.040380923169148777,0.035896202634582416,0.031410759078128396,0.026924682845663007,0.022438064295805221,0.017950993798097389,0.013463561731185668,0.0089758584809980588,0.0044879744389256255,2.8327694488239898e-16],"twiddles":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.9999768300731916,0.0068072987866992394,0.99990732136645721,0.013614282124169177,0.99979147710082028,0.020420634577798379,0.99962930264448702,0.027226040742210484,0.99942080551259815,0.034030185255880023,0.99916599536688,0.040832752815746255,0.99886488401519768,0.047633428191824229,0.99851748541100704,0.054431896241812522,0.99812381565270847,0.061227841925696871,0.99768389298290094,0.068020950320349105,0.99719773778753673,0.074810906634120627,0.99666537259497634,0.081597396221429766,0.99608682207494481,0.088380104597342482,0.99546211303738863,0.095158717452145519,0.99479127443123316,0.10193292066591143,0.99407433734304107,0.10870240032305496,0.99331133499557234,0.1154668427268797,0.99250230274624374,0.12222593441411488,0.99164727808549147,0.12897936216944111,0.99074630063503322,0.13572681304000481,0.98979941214603195,0.14246797434992034,0.98880665649716182,0.14920253371475944,0.98776807969257407,0.15593017905602688,0.98668372985976605,0.16265059861562242,0.98555365724735,0.16936348097028742,0.98437791422272558,0.17606851504603618,0.9831565552696524,0.18276539013257118,0.98188963698572551,0.18945379589768122,0.98057721807975273,0.19613342240162215,0.97921935936903404,0.20280396011147964,0.97781612377654337,0.2094650999155126,0.97636757632801263,0.21611653313747767,0.97487378414891857,0.22275795155093295,0.9733348164613721,0.22938904739352131,0.97175074458091049,0.23600951338123219,0,0.99990732136645721,0.013614282124169177,0.99962930264448702,0.027226040742210484,0.99916599536688,0.040832752815746255,0.99851748541100704,0.054431896241812522,0.99768389298290094,0.068020950320349105,0.99666537259497634,0.081597396221429766,0.99546211303738863,0.095158717452145519,0.99407433734304107,0.10870240032305496,0.99250230274624374,0.12222593441411488,0.99074630063503322,0.13572681304000481,0.98880665649716182,0.14920253371475944,0.98668372985976605,0.16265059861562242,0.98437791422272558,0.17606851504603618,0.98188963698572551,0.18945379589768122,0.97921935936903404,0.20280396011147964,0.97636757632801263,0.21611653313747767,0.9733348164613721,0.22938904739352131,0.97012164191319294,0.24261904272264073,0.96672864826872829,0.25580406684905821,0.96315646444400715,0.26894167583273509,0.95940575256926086,0.28202943452237422,0.95547720786619217,0.29506491700679266,0.95137155851911082,0.30804570706458179,0.94708956553995938,0.32096939861197205,0.94263202262725421,0.33383359614881747,0.93799975601896746,0.34663591520261933,0.93319362433937814,0.35937398277050558,0.92821451843991953,0.37204543775908389,0.92306336123405375,0.38464793142208742,0.91774110752620275,0.39717912779573245,0.91224874383476862,0.40963670413170578,0.90658728820927503,0.42201835132770338,0.90075779004166445,0.43432177435543889,0.89476132987178569,0.44654469268604408,0.88859901918710793,0.45868484071278148,0,0.99979147710082028,0.020420634577798379,0.99916599536688,0.040832752815746255,0.99812381565270847,0.061227841925696871,0.99666537259497634,0.081597396221429766,0.99479127443123316,0.10193292066591143,0.99250230274624374,0.12222593441411488,0.98979941214603195,0.14246797434992034,0.98668372985976605,0.16265059861562242,0.9831565552696524,0.18276539013257118,0.97921935936903404,0.20280396011147964,0.97487378414891857,0.22275795155093295,0.97012164191319294,0.24261904272264073,0.96496491452280997,0.26237895064197914,0.95940575256926086,0.28202943452237422,0.95344647447768094,0.30156229921208816,0.94708956553995938,0.32096939861197205,0.94033767687825931,0.34024263907276281,0.93319362433937814,0.35937398277050558,0.92566038732041034,0.37835545105869423,0.91774110752620275,0.39717912779573245,0.90943908765911963,0.41583716264632731,0.90075779004166445,0.43432177435543889,0.89170083517253285,0.45262525399341946,0.88227200021669883,0.47073996817099073,0.87247521743016432,0.48865836222271636,0.86231457252002774,0.50637296335764392,0.85179430294055769,0.52387638377580026,0.84091879612597964,0.54116132374924308,0.82969258766071574,0.55822057466638175,0.818120359387838,0.57504702203829805,0.80620693745652527,0.59163364846581401,0.79395729030933804,0.60797353656606923,0.78137652661015045,0.62405987185738598,0.76846989311360336,0.6398859456012197,0.75524277247696736,0.65544515760001132,0,0.99962930264448702,0.027226040742210484,0.99851748541100704,0.054431896241812522,0.99666537259497634,0.081597396221429766,0.99407433734304107,0.10870240032305496,0.99074630063503322,0.13572681304000481,0.98668372985976605,0.16265059861562242,0.98188963698572551,0.18945379589768122,0.97636757632801263,0.21611653313747767,0.97012164191319294,0.24261904272264073,0.96315646444400715,0.26894167583273509,0.95547720786619217,0.29506491700679266,0.94708956553995938,0.32096939861197205,0.93799975601896746,0.34663591520261933,0.92821451843991953,0.37204543775908389,0.91774110752620275,0.39717912779573245,0.90658728820927503,0.42201835132770338,0.89476132987178569,0.44654469268604408,0.88227200021669883,0.47073996817099073,0.86912855876696515,0.49458623953326686,0.85534075000056009,0.51806582727340678,0.84091879612597964,0.54116132374924308,0.82587338950354916,0.56385560608183993,0.81021568471816374,0.58613184885030523,0.79395729030933804,0.60797353656606923,0.77711026016469642,0.62936447591737954,0.75968708458328493,0.65028880777493692,0.7417006810153286,0.67073101894977072,0.72316438448530329,0.69067595369463419,0.70409193770541834,0.71010882494039551,0.68449748088684248,0.72901522525909346,0.66439554125622668,0.74738113754552682,0.64380102228529423,0.76519294540946348,0.62272919264148641,0.78243744327075915,0.60119567486785286,0.79910184614990531,0.57921643380058052,0.81517379914674493,0,0.99942080551259815,0.034030185255880023,0.99768389298290094,0.068020950320349105,0.99479127443123316,0.10193292066591142,0.99074630063503322,0.13572681304000481,0.98555365724735,0.16936348097028739,0.97921935936903404,0.20280396011147961,0.97175074458091049,0.23600951338123216,0.96315646444400715,0.26894167583273509,0.95344647447768094,0.3015622992120881,0.94263202262725421,0.33383359614881741,0.93072563623451909,0.36571818392834882,0.91774110752620275,0.39717912779573239,0.90369347763720387,0.42817998374045518,0.88859901918710804,0.45868484071278143,0.87247521743016432,0.48865836222271636,0.85534075000056009,0.51806582727340678,0.83721546527645485,0.54687317058156115,0.81812035938783811,0.57504702203829794,0.79807755189484397,0.60255474536471176,0.77711026016469653,0.62936447591737943,0.75524277247696747,0.65544515760001121,0.73250041988830084,0.68076657883849068,0.7089095468891965,0.70529940757762877,0.68449748088684259,0.72901522525909335,0.6592925005493484,0.7518865597411537,0.63332380304804703,0.77388691712210678,0.60662147023581403,0.79499081243052072,0.57921643380058063,0.81517379914674482,0.55114043943440749,0.83441249752148861,0.52242601005962508,0.85268462165866488,0.49310640815463896,0.86996900533112709,0.46321559722304123,0.88624562649939276,0.43278820245066318,0.90149563050495352,0.40185947059614135,0.91570135191130353,0.37046522916146046,0.92884633496738656,0,0.99916599536688,0.040832752815746255,0.99666537259497634,0.081597396221429766,0.99250230274624374,0.12222593441411488,0.98668372985976605,0.16265059861562242,0.97921935936903404,0.20280396011147964,0.97012164191319294,0.24261904272264073,0.95940575256926086,0.28202943452237422,0.94708956553995938,0.32096939861197205,0.93319362433937814,0.35937398277050558,0.91774110752620275,0.39717912779573245,0.90075779004166445,0.43432177435543889,0.88227200021669883,0.47073996817099073,0.86231457252002774,0.50637296335764392,0.84091879612597964,0.54116132374924308,0.818120359387838,0.57504702203829805,0.79395729030933804,0.60797353656606923,0.76846989311360336,0.6398859456012197,0.7417006810153286,0.67073101894977072,0.7136943053083441,0.70045730674355888,0.68449748088684248,0.72901522525909346,0.65415890832450385,0.7563571396236658,0.62272919264148641,0.78243744327075915,0.59026075889478502,0.80721263401222387,0.55680776473274929,0.83064138660033027,0.52242601005962508,0.85268462165866488,0.48717284396079646,0.87330557086689276,0.45110706904398096,0.89246983829065563,0.4142888433559338,0.91014545775430999,0.37677958003826911,0.92630294616080411,0.33864184488977045,0.94091535266975668,0.2999392520060592,0.95395830365170875,0.26073635767069286,0.96541004334356317,0.22109855267468612,0.97525147013739955,0.1810919532440658,0.98346616844213253,0.14078329075739265,0.9900404360648708,0,0.99886488401519768,0.047633428191824229,0.99546211303738863,0.095158717452145519,0.98979941214603195,0.14246797434992034,0.98188963698572551,0.18945379589768122,0.97175074458091049,0.23600951338123222,0.95940575256926086,0.28202943452237422,0.94488268694630595,0.32740908342489411,0.92821451843991953,0.37204543775908389,0.90943908765911963,0.41583716264632736,0.88859901918710793,0.45868484071278154,0.86574162481357841,0.5004911977898765,0.84091879612597964,0.54116132374924308,0.8141868867035742,0.58060288797072068,0.78560658418174145,0.61872634895428236,0.75524277247696736,0.65544515760001132,0.72316438448530329,0.69067595369463419,0.68944424558870121,0.72433875515854229,0.65415890832450374,0.7563571396236658,0.61738847859342627,0.78665841792997704,0.57921643380058052,0.81517379914674504,0.5397294333424002,0.84183854674390601,0.49901712186970942,0.86659212555900345,0.45717192577356996,0.88937833922604914,0.4142888433559338,0.91014545775430999,0.3704652291614603,0.92884633496738667,0.3258005729601175,0.94543851553597025,0.28039627388232519,0.95988433136128859,0.23435541021940717,0.97215098709042791,0.18778250541195926,0.98221063456939184,0.14078329075739265,0.9900404360648708,0.093464465375362488,0.99562261611119385,0.045933453976015171,0.99894450186475992,-0.00170183701902287,0.99999855187433184,-0.049333264449253268,0.99878237320188024,-0.09685269392536601,0.99529872685510823,0,0.99851748541100704,0.054431896241812522,0.99407433734304107,0.10870240032305496,0.98668372985976605,0.16265059861562242,0.97636757632801263,0.21611653313747767,0.96315646444400715,0.26894167583273509,0.94708956553995938,0.32096939861197205,0.92821451843991953,0.37204543775908389,0.90658728820927503,0.42201835132770338,0.88227200021669883,0.47073996817099073,0.85534075000056009,0.51806582727340678,0.82587338950354916,0.56385560608183993,0.79395729030933804,0.60797353656606923,0.75968708458328493,0.65028880777493692,0.72316438448530329,0.69067595369463419,0.68449748088684248,0.72901522525909346,0.64380102228529423,0.76519294540946348,0.60119567486785286,0.79910184614990531,0.55680776473274929,0.83064138660033027,0.51076890332868385,0.85971805110304245,0.46321559722304123,0.88624562649939276,0.4142888433559338,0.91014545775430999,0.36413371098016195,0.93134668117077424,0.31289891152664578,0.94978643450274669,0.26073635767069286,0.96541004334356317,0.20780071290648452,0.97817118323714525,0.15424893296530237,0.98803201703136401,0.10023980043720467,0.99496330706630054,0.045933453976015171,0.99894450186475992,-0.0085090865164586787,0.99996379706800154,-0.062926397319133437,0.99801817043600694,-0.11715712951769121,0.99311339080850936,-0.17104048740882016,0.98526400100021583,-0.22441670526416499,0.97449327468093738,-0.27712752104037386,0.96083314736847891,-0.32901664563067534,0.94432412173889668,0,0.99812381565270847,0.061227841925696871,0.99250230274624374,0.12222593441411488,0.9831565552696524,0.18276539013257118,0.97012164191319294,0.24261904272264073,0.95344647447768094,0.3015622992120881,0.93319362433937814,0.35937398277050558,0.90943908765911963,0.41583716264632731,0.88227200021669883,0.47073996817099073,0.85179430294055769,0.52387638377580026,0.81812035938783811,0.57504702203829794,0.78137652661015045,0.62405987185738598,0.7417006810153286,0.67073101894977072,0.69924170100431415,0.71488533596416237,0.65415890832450385,0.7563571396236658,0.60662147023581403,0.79499081243052072,0.55680776473274929,0.83064138660033027,0.50490471120440072,0.8631750880346355,0.45110706904398096,0.89246983829065563,0.39561670683977562,0.91841571266461408,0.33864184488977062,0.94091535266975668,0.28039627388232519,0.95988433136128859,0.22109855267468612,0.97525147013739955,0.16097118817957295,0.9869591058276207,0.10023980043720467,0.99496330706630054,0.039132276005724782,0.99923403913928577,-0.022122087153186774,0.999755276685243,-0.083293440084805867,0.99652506382872219,-0.14415224531938683,0.98955552151932302,-0.20447013818137724,0.97887280204942284,-0.26402078369787874,0.96451699092113352,-0.32258072589091324,0.94654195643071815,-0.37993022626663853,0.92501514753488268,-0.43585408835519507,0.90001734075742224,-0.49014246520720145,0.87164233708592165,-0.54259164681687855,0.83999660999586645,0,0.99768389298290094,0.068020950320349105,0.99074630063503322,0.13572681304000481,0.97921935936903404,0.20280396011147961,0.96315646444400715,0.26894167583273509,0.94263202262725421,0.33383359614881741,0.91774110752620275,0.39717912779573239,0.88859901918710804,0.45868484071278143,0.85534075000056009,0.51806582727340678,0.81812035938783811,0.57504702203829794,0.77711026016469653,0.62936447591737943,0.73250041988830084,0.68076657883849068,0.68449748088684259,0.72901522525909335,0.63332380304804703,0.77388691712210678,0.57921643380058063,0.81517379914674482,0.52242601005962508,0.85268462165866488,0.46321559722304123,0.88624562649939276,0.40185947059614135,0.91570135191130353,0.33864184488977062,0.94091535266975668,0.27385555767693481,0.96177083212658043,0.20780071290648472,0.97817118323714525,0.14078329075739288,0.99004043606487069,0.073113730273074051,0.99732360969023293,0.0051054913412917234,0.99998696689415112,-0.062926397319133215,0.99801817043600694,-0.13066679743877493,0.9914263402023844,-0.19780192098551708,0.98024201096180286,-0.26402078369787874,0.96451699092113352,-0.32901664563067512,0.94432412173889679,-0.39248843204009631,0.91975694110710937,-0.454142128026361,0.89092924946467456,-0.5136921404736613,0.85797458284939199,-0.57086262097860252,0.8210455943304491,-0.62538874363904762,0.78031334688673215,-0.67701793178437808,0.73596652100649473,-0.72551102796469313,0.68821054067895115,0,0.99719773778753673,0.074810906634120627,0.98880665649716182,0.14920253371475944,0.97487378414891857,0.22275795155093295,0.95547720786619217,0.29506491700679266,0.93072563623451909,0.36571818392834887,0.90075779004166445,0.43432177435543889,0.86574162481357841,0.50049119778987639,0.82587338950354916,0.56385560608183993,0.78137652661015033,0.62405987185738598,0.73250041988830072,0.68076657883849079,0.67951899667191829,0.73365791290082161,0.62272919264148641,0.78243744327075915,0.5624492876407805,0.82683178387890877,0.49901712186970959,0.86659212555900333,0.43278820245066318,0.90149563050495352,0.36413371098016195,0.93134668117077424,0.29343842323253327,0.95597797661389916,0.22109855267468592,0.97525147013739955,0.14751952987805761,0.98905914297606934,0.073113730273073829,0.99732360969023304,-0.00170183701902287,0.99999855187433184,-0.07650786632397899,0.99706897774955983,-0.15088510542342359,0.9885513061856539,-0.22441670526416499,0.97449327468093738,-0.29669055619889184,0.95497367181634496,-0.36730159766475695,0.93010189568289614,-0.43585408835519546,0.90001734075742201,-0.50196382416174279,0.86488861666281569,-0.5652602914553464,0.82491260319128157,-0.62538874363904762,0.78031334688673215,-0.68201218933394958,0.73134080537045998,-0.73481328105563182,0.6782694464475435,-0.78349609379587737,0.62139670984533046,-0.82778778354160942,0.56104134020522023,-0.86744011643582664,0.49754160067053638,0,0.99666537259497634,0.081597396221429766,0.98668372985976605,0.16265059861562242,0.97012164191319294,0.24261904272264073,0.94708956553995938,0.32096939861197205,0.91774110752620275,0.39717912779573245,0.88227200021669883,0.47073996817099073,0.84091879612597964,0.54116132374924308,0.79395729030933804,0.60797353656606923,0.7417006810153286,0.67073101894977072,0.68449748088684248,0.72901522525909346,0.62272919264148641,0.78243744327075915,0.55680776473274929,0.83064138660033027,0.48717284396079646,0.87330557086689276,0.4142888433559338,0.91014545775430999,0.33864184488977045,0.94091535266975668,0.26073635767069286,0.96541004334356317,0.1810919532440658,0.98346616844213253,0.10023980043720467,0.99496330706630054,0.018719122859119752,0.99982478186899593,-0.062926397319133437,0.99801817043600694,-0.14415224531938683,0.98955552151932302,-0.22441670526416499,0.97449327468093738,-0.30318447301790491,0.95293188388302719,-0.37993022626663853,0.92501514753488268,-0.454142128026361,0.89092924946467456,-0.52532524021429894,0.85090151721206209,-0.59300482451709802,0.80519890592290666,-0.65672950854160517,0.75412621795738,-0.71607429613237106,0.69802407008535838,-0.77064340177930535,0.63726662182639082,-0.8200728902120914,0.57225908008452531,-0.86403310357724106,0.50343499672021275,-0.90223086001031805,0.43125337708247785,-0.93441140894049823,0.35619561878528644,-0.96036013008703891,0.27876230114419304,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.99937000427499356,0.03549076718527315,0.99748081088920149,0.07093681630733846,0.99433480021013709,0.10629348564736542,0.98993593618435782,0.1415162261042846,0.9842897613429259,0.17656065732627432,0.97740338981786667,0.21138262362962434,0.96928549837842337,0.24593824963451971,0.95994631549840204,0.2801839955476445,0.94939760846838128,0.31407671202194881,0.93765266856902785,0.34757369452445736,0.92472629432419573,0.38063273714361573,0.91063477285491312,0.4132121857683782,0.89539585935774901,0.44527099057203134,0.87902875473341735,0.47676875773462513,0.86155408139380607,0.5076658003388399,0.84299385727791509,0.53792318837516395,0.82337146810944051,0.56750279779337176,0.80271163793096367,0.59636735853850142,0.78104039795186808,0.62448050151080592,0.75838505374923848,0.65180680439050709,0.7347741508630673,0.67831183626961611,0.71023743882911827,0.70396220103458285,0.68480583369476555,0.72872557944511396,0.65851137906503854,0.75257076985613858,0.63138720572795359,0.77546772753161475,0.60346748991000387,0.79738760250064045,0.57478741021440682,0.81830277590816902,0.54538310329636475,0.83818689481453168,0.51529161833118764,0.85701490539991521,0,0.99748081088920149,0.07093681630733846,0.98993593618435782,0.1415162261042846,0.97740338981786667,0.21138262362962434,0.95994631549840204,0.2801839955476445,0.93765266856902785,0.34757369452445736,0.91063477285491312,0.4132121857683782,0.87902875473341735,0.47676875773462513,0.84299385727791509,0.53792318837516395,0.80271163793096367,0.59636735853850142,0.75838505374923848,0.65180680439050709,0.71023743882911827,0.70396220103458285,0.65851137906503854,0.75257076985613858,0.60346748991000387,0.79738760250064045,0.54538310329636475,0.83818689481453168,0.48455087033265021,0.87476308453196128,0.42127728681659571,0.90693188697522797,0.35588114899339091,0.93453122355068685,0.28869194733962095,0.95742203836200546,0.22004820646562478,0.97548899882636386,0.15029577950047049,0.98864107676362811,0.079786105553083103,0.99681200703075012,0.0088744390290910122,0.99996062139062203,-0.062081940275234143,0.99807105593322476,-0.13272552728372208,0.9911528310040072,-0.20270039288609348,0.97924080323678475,-0.27165397724343865,0.9623949899328349,-0.33923886611803028,0.94070026667103324,-0.40511454127765356,0.91426593967258585,-0.46894909615525121,0.88322519507494401,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.9999654630763769,0.0083109959960970241,0.99986185469110567,0.016621417919726152,0.99968918200081625,0.024930691738072875,0.99944745693267556,0.033238243497626739,0.99913669618356415,0.041543499363826515,0.99875692121892234,0.049845885660697163,0.99830815827126818,0.058144828910475829,0.99779043833838499,0.066439755873224177,0.99720379718118013,0.074730093586424254,0.99654827532121548,0.083015269404555239,0.99582391803790782,0.091294711038648294,0.99503077536540141,0.099567846595816661,0.99416890208911213,0.10783410461875863,0.99323835774194302,0.11609291412523023,0.99223920660017206,0.12434370464748516,0.99117151767901279,0.13258590627167927,0.99003536472784648,0.14081894967723654,0.98883082622512852,0.14904226617617444,0.98755798537296757,0.15725528775238523,0.98621693009137823,0.16545744710087118,0.98480775301220802,0.17364817766693033,0.9833305514727394,0.18182691368529075,0.9817854275089658,0.18999309021918998,0.98017248784854383,0.19814614319939758,0.97849184390342125,0.20628550946317739,0.9767436117621412,0.21441062679318743,0.97492791218182362,0.22252093395631439,0.97304487057982381,0.23061587074244017,0.97109461702506994,0.23869487800313774,0.96907728622907796,0.24675739769029362,0.96699301753664724,0.25480287289465464,0.96484195491623492,0.26283074788429533,0.96262424695001203,0.27084046814300511,0.96034004682359986,0.27883148040859029,0.9579895123154889,0.28680323271109021,0.95557280578614068,0.29475517441090421,0.95309009416677304,0.30268675623682589,0.95054154894782905,0.31059743032398374,0.94792734616713181,0.31848665025168443,0.94524766639772484,0.3263538710811556,0.94250269473539927,0.33419854939318755,0.93969262078590843,0.34202014332566871,0.93681763865187095,0.3498181126110147,0.93387794691936366,0.35759191861348627,0.93087374864420425,0.36534102436639498,0.92780525133792546,0.3730648946091939,0.92467266695344152,0.38076299582444956,0.92147621187040762,0.38843479627469474,0.918216106880274,0.39607976603915679,0.91489257717103467,0.40369737705036218,0.91150585231167314,0.41128710313061156,0.90805616623630503,0.41884842002832484,0.90454375722801916,0.42638080545425383,0.90096886790241915,0.43388373911755812,0.89733174519086401,0.44135670276174394,0.89363264032341228,0.44879918020046217,0.88987180881146866,0.45621065735316296,0.88604951043013436,0.46359062228060566,0.88216600920026411,0.4709385652202201,0.87822157337022855,0.47825397862131819,0.87421647539738567,0.48553635718015209,0.87015099192926093,0.49278519787481767,0.86602540378443871,0.49999999999999994,0.86183999593316396,0.50718026520155923,0.85759505747765952,0.51432549751095358,0.85329088163215572,0.521435203379498,0.84892776570263739,0.52850889171245541,0.84450601106630785,0.5355460739029585,0.8400259231507714,0.54254626386575944,0.83548781141293649,0.54950897807080601,0.83089198931763975,0.556433735576641,0.82623877431599491,0.56332005806362206,0.82152848782346399,0.57016746986696165,0.81676145519765675,0.57697549800958292,0.8119380057158565,0.58374367223478985,0.80705847255227614,0.59047152503874989,0.80212319275504385,0.59715859170278618,0.7971325072229225,0.60380441032547738,0.7920867606817622,0.61040852185456318,0.78698630166068895,0.61697047011865247,0.7818314824680298,0.62348980185873348,0.77662265916697837,0.6299660667594813,0.77136019155099977,0.63639881748036342,0.76604444311897801,0.64278760968653925,0.76067578105010858,0.64913200207955191,0.75525457617853486,0.65543155642781015,0.74978120296773421,0.66168583759685939,0.74425603948465158,0.66789441357943746,0.73867946737358559,0.67405685552531536,0.73305187182982634,0.68017273777091936,0.72737364157304873,0.6862416378687336,0.72164516882046204,0.69226313661647965,0.71586684925971844,0.69823681808607274,0.71003908202158039,0.70416226965235185,0,0.99986185469110567,0.016621417919726152,0.99944745693267556,0.033238243497626739,0.99875692121892234,0.049845885660697163,0.99779043833838499,0.066439755873224177,0.99654827532121548,0.083015269404555239,0.99503077536540141,0.099567846595816661,0.99323835774194302,0.11609291412523023,0.99117151767901279,0.13258590627167927,0.98883082622512852,0.14904226617617444,0.98621693009137823,0.16545744710087118,0.9833305514727394,0.18182691368529075,0.98017248784854383,0.19814614319939758,0.9767436117621412,0.21441062679318743,0.97304487057982381,0.23061587074244017,0.96907728622907796,0.24675739769029362,0.96484195491623492,0.26283074788429533,0.96034004682359986,0.27883148040859029,0.95557280578614068,0.29475517441090421,0.95054154894782905,0.31059743032398374,0.94524766639772484,0.3263538710811556,0.93969262078590843,0.34202014332566871,0.93387794691936366,0.35759191861348627,0.92780525133792546,0.3730648946091939,0.92147621187040762,0.38843479627469474,0.91489257717103467,0.40369737705036218,0.90805616623630503,0.41884842002832484,0.90096886790241915,0.43388373911755812,0.89363264032341228,0.44879918020046217,0.88604951043013436,0.46359062228060566,0.87822157337022855,0.47825397862131819,0.87015099192926093,0.49278519787481767,0.86183999593316396,0.50718026520155923,0.85329088163215572,0.521435203379498,0.84450601106630785,0.5355460739029585,0.83548781141293649,0.54950897807080601,0.82623877431599491,0.56332005806362206,0.81676145519765675,0.57697549800958292,0.80705847255227614,0.59047152503874989,0.7971325072229225,0.60380441032547738,0.78698630166068895,0.61697047011865247,0.77662265916697837,0.6299660667594813,0.76604444311897801,0.64278760968653925,0.75525457617853486,0.65543155642781015,0.74425603948465158,0.66789441357943746,0.73305187182982634,0.68017273777091936,0.72164516882046204,0.69226313661647965,0.71003908202158039,0.70416226965235185,0.69823681808607285,0.71586684925971844,0.6862416378687336,0.72737364157304873,0.67405685552531536,0.73867946737358559,0.66168583759685939,0.74978120296773421,0.64913200207955191,0.76067578105010847,0.63639881748036342,0.77136019155099977,0.62348980185873359,0.7818314824680298,0.61040852185456318,0.7920867606817622,0.59715859170278618,0.80212319275504373,0.58374367223478996,0.8119380057158565,0.57016746986696165,0.82152848782346399,0.556433735576641,0.83089198931763975,0.54254626386575944,0.8400259231507714,0.52850889171245552,0.84892776570263739,0.51432549751095358,0.85759505747765952,0.50000000000000011,0.8660254037844386,0.48553635718015214,0.87421647539738556,0.4709385652202201,0.88216600920026411,0.45621065735316307,0.88987180881146855,0.44135670276174405,0.89733174519086389,0.42638080545425383,0.90454375722801916,0.41128710313061151,0.91150585231167314,0.3960797660391569,0.918216106880274,0.38076299582444961,0.92467266695344152,0.36534102436639498,0.93087374864420425,0.34981811261101486,0.93681763865187084,0.33419854939318761,0.94250269473539927,0.31848665025168443,0.94792734616713181,0.30268675623682606,0.95309009416677304,0.28680323271109032,0.9579895123154889,0.27084046814300516,0.96262424695001203,0.25480287289465459,0.96699301753664724,0.23869487800313785,0.97109461702506983,0.22252093395631445,0.97492791218182362,0.20628550946317739,0.97849184390342125,0.18999309021919011,0.9817854275089658,0.17364817766693041,0.98480775301220802,0.15725528775238529,0.98755798537296757,0.14081894967723671,0.99003536472784637,0.12434370464748527,0.99223920660017206,0.10783410461875867,0.99416890208911213,0.091294711038648266,0.99582391803790782,0.074730093586424393,0.99720379718118013,0.058144828910475899,0.99830815827126818,0.041543499363826522,0.99913669618356415,0.024930691738073035,0.99968918200081625,0.0083109959960971196,0.9999654630763769,0,0.99968918200081625,0.024930691738072875,0.99875692121892234,0.049845885660697163,0.99720379718118013,0.074730093586424254,0.99503077536540141,0.099567846595816661,0.99223920660017206,0.12434370464748518,0.98883082622512852,0.14904226617617444,0.98480775301220802,0.17364817766693036,0.98017248784854383,0.19814614319939758,0.97492791218182362,0.22252093395631439,0.96907728622907796,0.24675739769029365,0.96262424695001203,0.27084046814300511,0.95557280578614068,0.29475517441090421,0.94792734616713181,0.31848665025168443,0.93969262078590832,0.34202014332566877,0.93087374864420425,0.36534102436639504,0.92147621187040762,0.38843479627469474,0.91150585231167314,0.41128710313061156,0.90096886790241915,0.43388373911755812,0.88987180881146855,0.45621065735316302,0.87822157337022855,0.47825397862131824,0.8660254037844386,0.5,0.85329088163215561,0.52143520337949811,0.8400259231507714,0.54254626386575944,0.82623877431599491,0.56332005806362206,0.8119380057158565,0.58374367223478985,0.7971325072229225,0.60380441032547738,0.7818314824680298,0.62348980185873348,0.76604444311897801,0.64278760968653936,0.74978120296773421,0.66168583759685951,0.73305187182982634,0.68017273777091947,0.71586684925971844,0.69823681808607285,0.69823681808607285,0.71586684925971844,0.68017273777091936,0.73305187182982634,0.66168583759685939,0.74978120296773421,0.64278760968653936,0.76604444311897801,0.62348980185873359,0.7818314824680298,0.60380441032547727,0.7971325072229225,0.58374367223478985,0.8119380057158565,0.56332005806362195,0.82623877431599491,0.54254626386575944,0.84002592315077151,0.521435203379498,0.85329088163215572,0.49999999999999989,0.86602540378443871,0.47825397862131824,0.87822157337022855,0.45621065735316291,0.88987180881146866,0.43388373911755818,0.90096886790241915,0.41128710313061151,0.91150585231167314,0.38843479627469479,0.92147621187040762,0.36534102436639498,0.93087374864420425,0.3420201433256686,0.93969262078590843,0.31848665025168443,0.94792734616713181,0.2947551744109041,0.95557280578614079,0.27084046814300516,0.96262424695001203,0.24675739769029356,0.96907728622907796,0.22252093395631445,0.97492791218182362,0.19814614319939755,0.98017248784854383,0.17364817766693022,0.98480775301220813,0.14904226617617444,0.98883082622512852,0.12434370464748506,0.99223920660017206,0.099567846595816661,0.99503077536540141,0.074730093586424171,0.99720379718118013,0.049845885660697198,0.99875692121892234,0.024930691738072813,0.99968918200081625,6.123233995736766e-17,1,-0.024930691738072913,0.99968918200081625,-0.049845885660697295,0.99875692121892234,-0.074730093586424268,0.99720379718118013,-0.099567846595816759,0.99503077536540141,-0.12434370464748516,0.99223920660017206,-0.14904226617617453,0.98883082622512852,-0.1736481776669303,0.98480775301220802,-0.19814614319939763,0.98017248784854383,-0.22252093395631434,0.97492791218182362,-0.24675739769029367,0.96907728622907796,-0.27084046814300522,0.96262424695001203,-0.29475517441090421,0.95557280578614068,-0.31848665025168454,0.9479273461671317,-0.34202014332566871,0.93969262078590843,-0.3653410243663951,0.93087374864420425,-0.38843479627469468,0.92147621187040762,-0.41128710313061156,0.91150585231167314,-0.43388373911755806,0.90096886790241915,-0.45621065735316296,0.88987180881146855,-0.4782539786213183,0.87822157337022844,-0.50000000000000022,0.8660254037844386,-0.521435203379498,0.85329088163215572,-0.54254626386575944,0.84002592315077151,-0.56332005806362206,0.82623877431599491,-0.58374367223478996,0.81193800571585639,-0.6038044103254776,0.79713250722292239,-0.62348980185873348,0.78183148246802991,-0.64278760968653936,0.76604444311897801,-0.66168583759685951,0.7497812029677341,-0.68017273777091958,0.73305187182982623,-0.69823681808607274,0.71586684925971855,0,0.99944745693267556,0.033238243497626739,0.99779043833838499,0.066439755873224177,0.99503077536540141,0.099567846595816661,0.99117151767901279,0.13258590627167927,0.98621693009137823,0.16545744710087118,0.98017248784854383,0.19814614319939758,0.97304487057982381,0.23061587074244017,0.96484195491623492,0.26283074788429533,0.95557280578614068,0.29475517441090421,0.94524766639772484,0.3263538710811556,0.93387794691936366,0.35759191861348627,0.92147621187040762,0.38843479627469474,0.90805616623630503,0.41884842002832484,0.89363264032341228,0.44879918020046217,0.87822157337022855,0.47825397862131819,0.86183999593316396,0.50718026520155923,0.84450601106630785,0.5355460739029585,0.82623877431599491,0.56332005806362206,0.80705847255227614,0.59047152503874989,0.78698630166068895,0.61697047011865247,0.76604444311897801,0.64278760968653925,0.74425603948465158,0.66789441357943746,0.72164516882046204,0.69226313661647965,0.69823681808607285,0.71586684925971844,0.67405685552531536,0.73867946737358559,0.64913200207955191,0.76067578105010847,0.62348980185873359,0.7818314824680298,0.59715859170278618,0.80212319275504373,0.57016746986696165,0.82152848782346399,0.54254626386575944,0.8400259231507714,0.51432549751095358,0.85759505747765952,0,0.99779043833838499,0.066439755873224177,0.99117151767901279,0.13258590627167927,0.98017248784854383,0.19814614319939758,0.96484195491623492,0.26283074788429533,0.94524766639772484,0.3263538710811556,0.92147621187040762,0.38843479627469474,0.89363264032341228,0.44879918020046217,0.86183999593316396,0.50718026520155923,0.82623877431599491,0.56332005806362206,0.78698630166068895,0.61697047011865247,0.74425603948465158,0.66789441357943746,0.69823681808607285,0.71586684925971844,0.64913200207955191,0.76067578105010847,0.59715859170278618,0.80212319275504373,0.54254626386575944,0.8400259231507714,0.48553635718015214,0.87421647539738556,0.42638080545425383,0.90454375722801916,0.36534102436639498,0.93087374864420425,0.30268675623682606,0.95309009416677304,0.23869487800313785,0.97109461702506983,0.17364817766693041,0.98480775301220802,0.10783410461875867,0.99416890208911213,0.041543499363826522,0.99913669618356415,-0.024930691738072913,0.99968918200081625,-0.091294711038648141,0.99582391803790782,-0.15725528775238515,0.98755798537296757,-0.22252093395631434,0.97492791218182362,-0.28680323271109021,0.9579895123154889,-0.34981811261101475,0.93681763865187095,-0.4112871031306114,0.91150585231167325,-0.47093856522022021,0.88216600920026411,0,0.99503077536540141,0.099567846595816661,0.98017248784854383,0.19814614319939758,0.95557280578614068,0.29475517441090421,0.92147621187040762,0.38843479627469474,0.87822157337022855,0.47825397862131824,0.82623877431599491,0.56332005806362206,0.76604444311897801,0.64278760968653936,0.69823681808607285,0.71586684925971844,0.62348980185873359,0.7818314824680298,0.54254626386575944,0.84002592315077151,0,0.98017248784854383,0.19814614319939758,0.92147621187040762,0.38843479627469474,0.82623877431599491,0.56332005806362206,0.69823681808607285,0.71586684925971844,0.54254626386575944,0.84002592315077151,0.36534102436639498,0.93087374864420425,0.17364817766693022,0.98480775301220813,-0.024930691738072913,0.99968918200081625,-0.22252093395631434,0.97492791218182362,-0.41128710313061156,0.91150585231167314,0,0.95557280578614068,0.29475517441090421,0.82623877431599491,0.56332005806362206,0.62348980185873359,0.7818314824680298,0,0.82623877431599491,0.56332005806362206,0.36534102436639498,0.93087374864420425,-0.22252093395631434,0.97492791218182362,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.99993705675470057,0.01121973835464592,0.99974823494250653,0.022438064295804937,0.99943355833353331,0.033653565587793921,0.9989930665413147,0.044864830350514924,0.9984268150178166,0.056070447237191789,0.99773487504645608,0.067269005612039648,0.99691733373312796,0.078459095727844944,0.99597429399523907,0.089639308903433496,0.99490587454875234,0.10080823770100449,0.9937122098932426,0.11196447610330786,0.99239345029496417,0.12310661969064284,0.99094976176793481,0.13423326581765546,0.98938132605303664,0.14534301378991271,0.98768834059513777,0.15643446504023087,0.98587101851823589,0.16750622330473641,0.98392958859862967,0.17855689479863665,0.9818642952361184,0.18958508839167845,0.97967539842323559,0.20058941578327277,0.97736317371251924,0.21156849167726285,0.97492791218182362,0.22252093395631439,0.97236992039767656,0.23344536385590539,0.96968952037668688,0.24434040613789401,0.96688704954500637,0.25520468926364243,0.96396286069585324,0.26603684556667512,0.9609173219450996,0.27683551142484936,0.95775081668493045,0.28759932743201727,0.95446374353558083,0.2983269385691561,0.95105651629515353,0.3090169943749474,0.94752956388752885,0.31966814911578145,0.94388333030836757,0.33027906195516704,0.94011827456921904,0.3408483971225249,0.9362348706397372,0.35137482408134268,0.93223360738801431,0.36185701769667211,0.92811498851903895,0.37229365840194517,0.92387953251128674,0.38268343236508978,0.91952777255145068,0.39302503165392361,0.91506025646731981,0.40331715440080507,0.91047754665881597,0.41355850496652063,0.90578022002719405,0.4237477941033887,0.90096886790241915,0.43388373911755812,0.89604409596872514,0.44396506403048208,0.8910065241883679,0.45399049973954675,0.88585678672357981,0.46395878417783404,0.880595531856738,0.47386866247299864,0.87522342190875368,0.4837188871052398,0.86974113315569546,0.49350821806434686,0.8641493557436547,0.50323542300580004,0.8584487936018661,0.51289927740590613,0.85264016435409229,0.5224985647159488,0.84672419922828424,0.53203207651533657,0.84070164296453009,0.54149861266372568,0.83457325372130264,0.55089698145210253,0.82833980298001653,0.56022599975280274,0.82200207544790993,0.56948449316845196,0.81556086895926017,0.57867129617980573,0.80901699437494745,0.58778525229247314,0.80237127548037801,0.59682521418250367,0.79562454888178102,0.6057900438408198,0.7887776639008911,0.61467861271647717,0.7818314824680298,0.62348980185873348,0.77478687901360099,0.63222250205790964,0.76764474035801111,0.64087561398502413,0.76040596560003093,0.64944804833018366,0.75307146600361097,0.65793872593971259,0.74564216488316559,0.66634657795200392,0.73811899748734067,0.67467054593207432,0.73050291088127761,0.682909582004807,0.72279486382739155,0.69106264898686465,0.71499582666467532,0.6991287205172575,0,0,0.99974823494250653,0.022438064295804937,0.9989930665413147,0.044864830350514924,0.99773487504645608,0.067269005612039648,0.99597429399523907,0.089639308903433496,0.9937122098932426,0.11196447610330786,0.99094976176793481,0.13423326581765546,0.98768834059513777,0.15643446504023087,0.98392958859862967,0.17855689479863665,0.97967539842323559,0.20058941578327277,0.97492791218182362,0.22252093395631439,0.96968952037668688,0.24434040613789401,0.96396286069585324,0.26603684556667512,0.95775081668493045,0.28759932743201727,0.95105651629515353,0.3090169943749474,0.94388333030836757,0.33027906195516704,0.9362348706397372,0.35137482408134268,0.92811498851903895,0.37229365840194517,0.91952777255145068,0.39302503165392361,0.91047754665881597,0.41355850496652063,0.90096886790241915,0.43388373911755812,0.8910065241883679,0.45399049973954675,0.880595531856738,0.47386866247299864,0.86974113315569546,0.49350821806434686,0.8584487936018661,0.51289927740590613,0.84672419922828424,0.53203207651533657,0.83457325372130264,0.55089698145210253,0.82200207544790993,0.56948449316845196,0.80901699437494745,0.58778525229247314,0.79562454888178102,0.6057900438408198,0.7818314824680298,0.62348980185873348,0.76764474035801111,0.64087561398502413,0.75307146600361097,0.65793872593971259,0.73811899748734067,0.67467054593207432,0.72279486382739155,0.69106264898686465,0.70710678118654757,0.70710678118654746,0.69106264898686465,0.72279486382739155,0.67467054593207432,0.73811899748734056,0.65793872593971259,0.75307146600361086,0.64087561398502413,0.76764474035801111,0.62348980185873359,0.7818314824680298,0.60579004384081991,0.79562454888178102,0.58778525229247314,0.80901699437494745,0.56948449316845207,0.82200207544790993,0.55089698145210253,0.83457325372130264,0.53203207651533657,0.84672419922828412,0.51289927740590613,0.8584487936018661,0.49350821806434686,0.86974113315569535,0.47386866247299869,0.880595531856738,0.45399049973954686,0.8910065241883679,0.43388373911755818,0.90096886790241915,0.41355850496652069,0.91047754665881586,0.39302503165392366,0.91952777255145057,0.37229365840194523,0.92811498851903895,0.35137482408134274,0.9362348706397372,0.33027906195516715,0.94388333030836757,0.30901699437494745,0.95105651629515353,0.28759932743201733,0.95775081668493045,0.26603684556667517,0.96396286069585324,0.24434040613789407,0.96968952037668688,0.22252093395631445,0.97492791218182362,0.20058941578327283,0.97967539842323559,0.17855689479863671,0.98392958859862967,0.15643446504023092,0.98768834059513777,0.13423326581765554,0.9909497617679347,0.11196447610330791,0.9937122098932426,0.089639308903433551,0.99597429399523907,0.067269005612039717,0.99773487504645608,0.044864830350514986,0.99899306654131459,0.022438064295804999,0.99974823494250653,0,0,0.99943355833353331,0.033653565587793921,0.99773487504645608,0.067269005612039648,0.99490587454875234,0.10080823770100449,0.99094976176793481,0.13423326581765546,0.98587101851823589,0.16750622330473641,0.97967539842323559,0.20058941578327277,0.97236992039767656,0.23344536385590539,0.96396286069585324,0.26603684556667512,0.95446374353558083,0.2983269385691561,0.94388333030836757,0.33027906195516704,0.93223360738801431,0.36185701769667211,0.91952777255145068,0.39302503165392361,0.90578022002719405,0.4237477941033887,0.8910065241883679,0.45399049973954675,0.87522342190875368,0.4837188871052398,0.8584487936018661,0.51289927740590613,0.84070164296453009,0.54149861266372568,0.82200207544790993,0.56948449316845196,0.80237127548037801,0.59682521418250367,0.7818314824680298,0.62348980185873348,0.76040596560003093,0.64944804833018366,0.73811899748734067,0.67467054593207432,0.71499582666467532,0.6991287205172575,0.69106264898686465,0.72279486382739155,0.66634657795200392,0.74564216488316559,0.64087561398502413,0.76764474035801111,0.61467861271647728,0.78877766390089099,0.58778525229247314,0.80901699437494745,0.56022599975280285,0.82833980298001653,0.53203207651533657,0.84672419922828412,0.50323542300580015,0.8641493557436547,0.47386866247299869,0.880595531856738,0.44396506403048214,0.89604409596872514,0.41355850496652069,0.91047754665881586,0.38268343236508984,0.92387953251128674,0.35137482408134274,0.9362348706397372,0.31966814911578151,0.94752956388752874,0.28759932743201733,0.95775081668493045,0.25520468926364248,0.96688704954500637,0.22252093395631445,0.97492791218182362,0.18958508839167851,0.9818642952361184,0.15643446504023092,0.98768834059513777,0.12310661969064289,0.99239345029496406,0.089639308903433551,0.99597429399523907,0.056070447237191845,0.9984268150178166,0.022438064295804999,0.99974823494250653,-0.011219738354645859,0.99993705675470057,-0.044864830350514862,0.9989930665413147,-0.078459095727844874,0.99691733373312796,-0.1119644761033078,0.9937122098932426,-0.14534301378991266,0.98938132605303664,-0.1785568947986366,0.98392958859862967,-0.2115684916772628,0.97736317371251924,-0.24434040613789396,0.96968952037668688,-0.2768355114248493,0.9609173219450996,-0.30901699437494734,0.95105651629515364,-0.34084839712252479,0.94011827456921904,-0.37229365840194512,0.92811498851903895,-0.40331715440080496,0.91506025646731992,-0.43388373911755806,0.90096886790241915,-0.46395878417783398,0.88585678672357981,-0.4935082180643468,0.86974113315569546,-0.5224985647159488,0.85264016435409229,-0.55089698145210242,0.83457325372130275,-0.57867129617980573,0.81556086895926017,-0.6057900438408198,0.79562454888178102,-0.63222250205790964,0.77478687901360099,-0.65793872593971259,0.75307146600361097,-0.68290958200480689,0.73050291088127772,0,0,0.9989930665413147,0.044864830350514924,0.99597429399523907,0.089639308903433496,0.99094976176793481,0.13423326581765546,0.98392958859862967,0.17855689479863665,0.97492791218182362,0.22252093395631439,0.96396286069585324,0.26603684556667512,0.95105651629515353,0.3090169943749474,0.9362348706397372,0.35137482408134268,0.91952777255145068,0.39302503165392361,0.90096886790241915,0.43388373911755812,0.880595531856738,0.47386866247299864,0.8584487936018661,0.51289927740590613,0.83457325372130264,0.55089698145210253,0.80901699437494745,0.58778525229247314,0.7818314824680298,0.62348980185873348,0.75307146600361097,0.65793872593971259,0.72279486382739155,0.69106264898686465,0,0.99597429399523907,0.089639308903433496,0.98392958859862967,0.17855689479863665,0.96396286069585324,0.26603684556667512,0.9362348706397372,0.35137482408134268,0.90096886790241915,0.43388373911755812,0.8584487936018661,0.51289927740590613,0.80901699437494745,0.58778525229247314,0.75307146600361097,0.65793872593971259,0.69106264898686465,0.72279486382739155,0.62348980185873359,0.7818314824680298,0.55089698145210253,0.83457325372130264,0.47386866247299869,0.880595531856738,0.39302503165392366,0.91952777255145057,0.30901699437494745,0.95105651629515353,0.22252093395631445,0.97492791218182362,0.13423326581765554,0.9909497617679347,0.044864830350514986,0.99899306654131459,0,0.99094976176793481,0.13423326581765546,0.96396286069585324,0.26603684556667512,0.91952777255145068,0.39302503165392361,0.8584487936018661,0.51289927740590613,0.7818314824680298,0.62348980185873348,0.69106264898686465,0.72279486382739155,0.58778525229247314,0.80901699437494745,0.47386866247299869,0.880595531856738,0.35137482408134274,0.9362348706397372,0.22252093395631445,0.97492791218182362,0.089639308903433551,0.99597429399523907,-0.044864830350514862,0.9989930665413147,-0.1785568947986366,0.98392958859862967,-0.30901699437494734,0.95105651629515364,-0.43388373911755806,0.90096886790241915,-0.55089698145210242,0.83457325372130275,-0.65793872593971259,0.75307146600361097,0,0.98392958859862967,0.17855689479863665,0.9362348706397372,0.35137482408134268,0.8584487936018661,0.51289927740590613,0,0.9362348706397372,0.35137482408134268,0.75307146600361097,0.65793872593971259,0.47386866247299869,0.880595531856738,0,0.8584487936018661,0.51289927740590613,0.47386866247299869,0.880595531856738,-0.044864830350514862,0.9989930665413147,0,0.75307146600361097,0.65793872593971259,0.13423326581765554,0.9909497617679347,-0.55089698145210242,0.83457325372130275,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.99997727539874437,0.0067415640695428205,0.99990910262779253,0.013482821740375002,0.99979548478554248,0.020223466627711479,0.99963642703583455,0.026963192374617719,0.99943193660771668,0.033701692665933369,0.9991820227951157,0.040438661242194078,0.99888669695641508,0.047173791913550707,0.99854597251393873,0.053906778573685428,0.99815986495334075,0.060637315213724029,0.99772839182290196,0.067365095936143746,0.99725157273273191,0.07408981496867606,0.99672942935387809,0.080811166678203844,0.99616198541734069,0.087528845584652099,0.99554926671299404,0.094242546374871825,0.99489130108841461,0.10095196391651616,0.99418811844761534,0.10765679327190854,0.99343975074968638,0.11435672971190181,0.99264623200734292,0.12105146872972786,0.99180759828537901,0.12774070605483734,0.99092388769902828,0.13442413766672839,0.98999514041223236,0.14110145980876423,0.98902139863581473,0.1477723690019786,0.98800270662556244,0.15443656205886866,0.98693911068021511,0.16109373609717451,0.98583065913936019,0.16774358855364521,0.98467740238123624,0.17438581719778976,0.98347939282044328,0.18102012014561342,0.98223668490556026,0.18764619587333795,0.98094933511667104,0.19426374323110576,0.9796174019627969,0.20087246145666687,0.97824094597923728,0.2074720501890483,0.97682002972481907,0.21406220948220528,0.97535471777905292,0.22064263981865351,0.97384507673919807,0.22721304212308197,0.97229117521723596,0.23377311777594578,0.97069308383675146,0.24032256862703813,0.96905087522972333,0.24686109700904091,0.96736462403322332,0.25338840575105354,0.96563440688602331,0.25990419819209931,0.96386030242511289,0.26640817819460783,0.96204239128212499,0.27290005015787488,0.96018075607967135,0.27937951903149705,0.95827548142758723,0.28584629032878123,0.95632665391908611,0.29230007014012921,0.95433436212682421,0.29874056514639524,0.95229869659887445,0.30516748263221771,0.95021974985461177,0.31158053049932216,0.94809761638050782,0.31797941727979734,0.9459323926258365,0.32436385214934221,0.94372417699829081,0.3307335449404834,0.94147306985950996,0.33708820615576329,0.93917917352051816,0.34342754698089745,0.93684259223707456,0.34975127929790101,0.93446343220493533,0.3560591156981831,0.93204180155502647,0.36235076949560985,0.92957781034852982,0.3686259547395338,0.92707157057188061,0.37488438622778975,0.92452319613167799,0.38112577951965781,0.92193280284950807,0.38734985094879021,0.91930050845667977,0.3935563176361041,0.91662643258887389,0.3997448975026382,0.91391069678070602,0.40591530928237279,0.91115342446020298,0.41206727253501352,0.90835474094319291,0.41820050765873645,0.90551477342760966,0.42431473590289648,0.90263365098771187,0.43040967938069602,0.89971150456821691,0.43648506108181451,0.8967484669783492,0.4425406048849988,0.89374467288580406,0.44857603557061221,0.89070025881062753,0.45459107883314331,0.88761536311901157,0.46058546129367267,0.88449012601700505,0.46655891051229792,0.88132468954414211,0.47251115500051594,0.87811919756698575,0.47844192423356147,0.87487379577259028,0.48435094866270267,0.87158863166187894,0.49023795972749151,0.86826385454294064,0.49610268986797007,0.86489961552424399,0.50194487253683051,0.86149606750776953,0.50776424221152938,0.85805336518206021,0.51356053440635607,0.85457166501519133,0.5193334856844527,0.85105112524765869,0.5250828336697877,0.84749190588518741,0.53080831705907994,0.84389416869145883,0.53650967563367546,0.84025807718075918,0.54218665027137403,0.83658379661054816,0.54783898295820543,0.83287149397394744,0.55346641680015685,0.82912133799215115,0.55906869603484788,0.82533349910675802,0.56464556604315508,0.82150814947202477,0.57019677336078423,0.81764546294704132,0.57572206568978956,0.81374561508783017,0.58122119191004118,0.80980878313936622,0.58669390209063788,0.80583514602752193,0.59213994750126631,0.80182488435093524,0.59755908062350571,0.79777818037280102,0.60295105516207737,0.79369521801258802,0.60831562605603873,0.78957618283767927,0.61365254948992076,0.78542126205493878,0.61896158290480929,0.78123064450220259,0.62424248500936974,0.77700452063969627,0.62949501579081302,0.77274308254137924,0.63471893652580358,0.76844652388621471,0.63991400979131041,0.76411503994936691,0.6450799994753964,0.75974882759332663,0.65021667078795031,0.75534808525896324,0.65532379027135734,0.75091301295650659,0.66040112581110988,0.74644381225645573,0.66544844664635672,0.74194068628041832,0.67046552338039123,0.73740383969187884,0.67545212799107679,0.73283347868689652,0.68040803384121051,0.72822981098473438,0.6853330156888241,0.7235930458184181,0.69022684969741988,0.71892339392522675,0.69508931344614511,0.71422106753711467,0.69992018593990002,0.70948628037106642,0.70471924761938254,0,0.99990910262779253,0.013482821740375002,0.99963642703583455,0.026963192374617719,0.9991820227951157,0.040438661242194078,0.99854597251393873,0.053906778573685428,0.99772839182290196,0.067365095936143746,0.99672942935387809,0.080811166678203844,0.99554926671299404,0.094242546374871825,0.99418811844761534,0.10765679327190854,0.99264623200734292,0.12105146872972786,0.99092388769902828,0.13442413766672839,0.98902139863581473,0.1477723690019786,0.98693911068021511,0.16109373609717451,0.98467740238123624,0.17438581719778976,0.98223668490556026,0.18764619587333795,0.9796174019627969,0.20087246145666687,0.97682002972481907,0.21406220948220528,0.97384507673919807,0.22721304212308197,0.97069308383675146,0.24032256862703813,0.96736462403322332,0.25338840575105354,0.96386030242511289,0.26640817819460783,0.96018075607967135,0.27937951903149705,0.95632665391908611,0.29230007014012921,0.95229869659887445,0.30516748263221771,0.94809761638050782,0.31797941727979734,0.94372417699829081,0.3307335449404834,0.93917917352051816,0.34342754698089745,0.93446343220493533,0.3560591156981831,0.92957781034852982,0.3686259547395338,0.92452319613167799,0.38112577951965781,0.91930050845667977,0.3935563176361041,0.91391069678070602,0.40591530928237279,0.90835474094319291,0.41820050765873645,0.90263365098771187,0.43040967938069602,0.8967484669783492,0.4425406048849988,0.89070025881062753,0.45459107883314331,0.88449012601700505,0.46655891051229792,0.87811919756698575,0.47844192423356147,0.87158863166187894,0.49023795972749151,0.86489961552424399,0.50194487253683051,0.85805336518206021,0.51356053440635607,0.85105112524765869,0.5250828336697877,0.84389416869145883,0.53650967563367546,0.83658379661054816,0.54783898295820543,0.82912133799215115,0.55906869603484788,0.82150814947202477,0.57019677336078423,0.81374561508783017,0.58122119191004118,0.80583514602752193,0.59213994750126631,0.79777818037280102,0.60295105516207737,0.78957618283767927,0.61365254948992076,0.78123064450220259,0.62424248500936974,0.77274308254137924,0.63471893652580358,0.76411503994936691,0.6450799994753964,0.75534808525896324,0.65532379027135734,0.74644381225645573,0.66544844664635672,0.73740383969187884,0.67545212799107679,0.72822981098473438,0.6853330156888241,0.71892339392522675,0.69508931344614511,0.70948628037106642,0.70471924761938254,0.69992018593990002,0.71422106753711478,0.69022684969741988,0.7235930458184181,0.68040803384121062,0.73283347868689652,0.67046552338039123,0.74194068628041832,0.66040112581110977,0.7509130129565067,0.6502166707879502,0.75974882759332663,0.63991400979131041,0.76844652388621471,0.62949501579081291,0.77700452063969627,0.61896158290480929,0.78542126205493878,0.60831562605603873,0.79369521801258802,0.59755908062350571,0.80182488435093513,0.58669390209063776,0.80980878313936622,0.57572206568978956,0.81764546294704143,0.56464556604315519,0.82533349910675802,0.55346641680015674,0.83287149397394744,0.54218665027137403,0.84025807718075929,0.53080831705907994,0.8474919058851873,0.51933348568445281,0.85457166501519122,0.50776424221152949,0.86149606750776941,0.49610268986797001,0.86826385454294064,0.48435094866270262,0.87487379577259028,0.47251115500051588,0.88132468954414211,0.46058546129367267,0.88761536311901157,0.44857603557061226,0.89374467288580406,0.43648506108181456,0.89971150456821691,0.42431473590289659,0.90551477342760955,0.41206727253501341,0.91115342446020309,0.39974489750263814,0.91662643258887389,0.38734985094879015,0.92193280284950818,0.3748843862277898,0.92707157057188061,0.36235076949560996,0.93204180155502647,0.34975127929790106,0.93684259223707456,0.33708820615576318,0.94147306985950996,0.3243638521493421,0.9459323926258365,0.31158053049932211,0.95021974985461177,0.2987405651463953,0.95433436212682421,0.28584629032878128,0.95827548142758723,0.27290005015787494,0.96204239128212499,0.25990419819209937,0.96563440688602331,0.2468610970090408,0.96905087522972344,0.23377311777594573,0.97229117521723596,0.22064263981865345,0.97535471777905292,0.2074720501890483,0.97824094597923728,0.19426374323110579,0.98094933511667104,0.18102012014561347,0.98347939282044317,0.1677435885536453,0.98583065913936019,0.15443656205886855,0.98800270662556244,0.14110145980876418,0.98999514041223236,0.12774070605483731,0.99180759828537901,0.11435672971190181,0.99343975074968638,0.10095196391651619,0.99489130108841461,0.087528845584652182,0.99616198541734069,0.074089814968676157,0.99725157273273191,0.060637315213723939,0.99815986495334075,0.047173791913550651,0.99888669695641508,0.033701692665933349,0.99943193660771668,0.020223466627711493,0.99979548478554248,0.0067415640695428648,0.99997727539874437,0,0.99979548478554248,0.020223466627711479,0.9991820227951157,0.040438661242194078,0.99815986495334075,0.060637315213724029,0.99672942935387809,0.080811166678203844,0.99489130108841461,0.10095196391651616,0.99264623200734292,0.12105146872972786,0.98999514041223236,0.14110145980876423,0.98693911068021511,0.16109373609717451,0.98347939282044328,0.18102012014561342,0.9796174019627969,0.20087246145666687,0.97535471777905292,0.22064263981865348,0.97069308383675146,0.24032256862703813,0.96563440688602331,0.25990419819209926,0.96018075607967135,0.27937951903149705,0.95433436212682421,0.29874056514639524,0.94809761638050782,0.31797941727979734,0.94147306985950996,0.33708820615576329,0.93446343220493533,0.3560591156981831,0.92707157057188061,0.37488438622778975,0.91930050845667977,0.3935563176361041,0.91115342446020309,0.41206727253501346,0.90263365098771187,0.43040967938069596,0.89374467288580406,0.44857603557061221,0.88449012601700505,0.46655891051229792,0.87487379577259028,0.48435094866270267,0.86489961552424399,0.5019448725368304,0.85457166501519133,0.5193334856844527,0.84389416869145883,0.53650967563367546,0.83287149397394744,0.55346641680015685,0.82150814947202477,0.57019677336078423,0.80980878313936622,0.58669390209063788,0.79777818037280102,0.60295105516207737,0.7854212620549389,0.61896158290480918,0.77274308254137924,0.63471893652580358,0.75974882759332663,0.6502166707879502,0.74644381225645573,0.66544844664635672,0.73283347868689652,0.68040803384121051,0.71892339392522675,0.69508931344614511,0.70471924761938254,0.70948628037106631,0.69022684969741988,0.7235930458184181,0.67545212799107679,0.73740383969187873,0.66040112581110988,0.75091301295650659,0.6450799994753964,0.76411503994936691,0.62949501579081302,0.77700452063969616,0.61365254948992065,0.78957618283767939,0.59755908062350571,0.80182488435093513,0.58122119191004118,0.81374561508783017,0.56464556604315519,0.82533349910675802,0.54783898295820554,0.83658379661054816,0.53080831705907994,0.8474919058851873,0.51356053440635618,0.85805336518206021,0.49610268986797018,0.86826385454294053,0.47844192423356147,0.87811919756698575,0.46058546129367267,0.88761536311901157,0.44254060488499886,0.89674846697834909,0.42431473590289659,0.90551477342760955,0.40591530928237296,0.91391069678070602,0.38734985094879015,0.92193280284950818,0.3686259547395338,0.92957781034852982,0.34975127929790106,0.93684259223707456,0.33073354494048351,0.9437241769982907,0.31158053049932211,0.95021974985461177,0.29230007014012921,0.95632665391908611,0.27290005015787494,0.96204239128212499,0.2533884057510537,0.96736462403322321,0.23377311777594595,0.97229117521723585,0.21406220948220525,0.97682002972481907,0.19426374323110579,0.98094933511667104,0.17438581719778984,0.98467740238123624,0.15443656205886877,0.98800270662556244,0.13442413766672837,0.99092388769902828,0.11435672971190181,0.99343975074968638,0.094242546374871866,0.99554926671299404,0.074089814968676157,0.99725157273273191,0.053906778573685581,0.99854597251393873,0.033701692665933349,0.99943193660771668,0.013482821740375029,0.99990910262779253,-0.0067415640695427425,0.99997727539874437,-0.026963192374617591,0.99963642703583455,-0.047173791913550749,0.99888669695641508,-0.067365095936143732,0.99772839182290196,-0.087528845584652057,0.99616198541734069,-0.10765679327190844,0.99418811844761534,-0.1277407060548372,0.99180759828537901,-0.14777236900197863,0.98902139863581473,-0.16774358855364518,0.98583065913936019,-0.18764619587333786,0.98223668490556026,-0.20747205018904818,0.97824094597923728,-0.2272130421230818,0.97384507673919807,-0.24686109700904091,0.96905087522972333,-0.26640817819460771,0.96386030242511289,-0.28584629032878112,0.95827548142758723,-0.30516748263221755,0.95229869659887445,-0.32436385214934221,0.9459323926258365,-0.34342754698089745,0.93917917352051816,-0.36235076949560979,0.93204180155502647,-0.3811257795196577,0.9245231961316781,-0.39974489750263803,0.91662643258887389,-0.41820050765873623,0.90835474094319302,-0.43648506108181445,0.89971150456821691,-0.45459107883314337,0.89070025881062753,-0.47251115500051577,0.88132468954414211,-0.49023795972749157,0.87158863166187883,-0.50776424221152916,0.86149606750776964,-0.52508283366978759,0.8510511252476588,-0.54218665027137414,0.84025807718075918,-0.55906869603484777,0.82912133799215126,-0.57572206568978956,0.81764546294704143,-0.59213994750126608,0.80583514602752215,-0.60831562605603873,0.79369521801258813,-0.62424248500936985,0.78123064450220248,-0.6399140097913103,0.76844652388621482,-0.65532379027135734,0.75534808525896335,-0.670465523380391,0.74194068628041854,-0.68533301568882399,0.72822981098473449,-0.69992018593990013,0.71422106753711467,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.999429490929718,0.03377414188346816,0.99771861468007073,0.067509746858365305,0.99486932339189516,0.10116832198743217,0.99088486815823884,0.13471146222586097,0.9857697953148038,0.16810089424214819,0.97952994125249448,0.20129852008866006,0.97217242575799068,0.23426646067208212,0.96370564388994084,0.26696709897415166,0.95413925640004882,0.29936312297335793,0.94348417870998025,0.33141756821863577,0.93175256845666843,0.36309386000647453,0.9189578116202306,0.39435585511331855,0.90511450725032117,0.42516788303564068,0.89023845080835162,0.45549478669063398,0.87434661614458209,0.48530196253108104,0.857457136130651,0.51455540002862876,0.83958928196963889,0.54322172048041872,0.82076344120727629,0.57126821509479231,0.80100109446938461,0.598662882312615,0.78032479095209184,0.6253744643216369,0.75875812269279097,0.65137248272222226,0.73632569765119738,0.67662727330375727,0.71305311163122032,0.70111001989205268,0.68896691907568663,0.72479278722911999,0.66409460276723908,0.74764855284780896,0.63846454246998352,0.76965123790493228,0.61210598254766291,0.79077573693769854,0.58504899859530768,0.81099794650950119,0.55732446312243644,0.83029479271237638,0.52896401032696239,0.84864425749475092,0.50000000000000011,0.8660254037844386,0.47046548060275561,0.88241839937821909,0.44039415155763428,0.89780453957074169,0.40982032479658764,0.91216626849693327,0.3787788856105761,0.92548719916355959,0.34730525284482028,0.93775213214708042,0.31543533848525562,0.94894707293646896,0.28320550668230415,0.95905924790120212,0.25065253225872053,0.96807711886620429,0.2178135587488515,0.97599039627711537,0.18472605601718942,0.98279005094085792,0.1514277775045767,0.98846832432811138,0.11795671715084598,0.99301873742593361,0.084351066043044987,0.99643609813043299,0.050649168838712767,0.99871650717105276,0.016889480013931084,0.99985736255970981,0,0.99771861468007073,0.067509746858365305,0.99088486815823884,0.13471146222586097,0.97952994125249448,0.20129852008866006,0.96370564388994084,0.26696709897415166,0.94348417870998025,0.33141756821863577,0.9189578116202306,0.39435585511331855,0.89023845080835162,0.45549478669063398,0.857457136130651,0.51455540002862876,0.82076344120727629,0.57126821509479231,0.78032479095209184,0.6253744643216369,0.73632569765119738,0.67662727330375727,0.68896691907568663,0.72479278722911999,0.63846454246998352,0.76965123790493228,0.58504899859530768,0.81099794650950119,0.52896401032696239,0.84864425749475092,0,0.99088486815823884,0.13471146222586097,0.96370564388994084,0.26696709897415166,0.9189578116202306,0.39435585511331855,0.857457136130651,0.51455540002862876,0.78032479095209184,0.6253744643216369,0.68896691907568663,0.72479278722911999,0.58504899859530768,0.81099794650950119,0.47046548060275561,0.88241839937821909,0.34730525284482028,0.93775213214708042,0.2178135587488515,0.97599039627711537,0.084351066043044987,0.99643609813043299,-0.050649168838712642,0.99871650717105276,-0.18472605601718931,0.98279005094085803,-0.31543533848525529,0.94894707293646907,-0.44039415155763439,0.89780453957074158,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.99983886792905818,0.017950993798097236,0.99935552364332136,0.035896202634582174,0.99855012290732093,0.053829843412128195,0.99742292527283405,0.071746136761379281,0.99597429399523907,0.089639308903433496,0.99420469591645155,0.10750359351052489,0.99211470131447788,0.12533323356430423,0.98970498371963489,0.14312248321111948,0.98697631969749566,0.16086560961369842,0.98392958859862967,0.17855689479863665,0.98056577227522002,0.19619063749909516,0.97688595476464768,0.21376115499211443,0.97289132194014494,0.23126278492995214,0.96858316112863119,0.24868988716485474,0.96396286069585324,0.26603684556667512,0.95903190959896567,0.28329806983274941,0.95379189690669208,0.30046799728945184,0.94824451128722631,0.31754109468484432,0.94239154046403484,0.33451185997184535,0.9362348706397372,0.35137482408134268,0.92977648588825146,0.36812455268467792,0.92301846751539729,0.38475564794493594,0.91596299338816656,0.40126275025647418,0.90861233723287449,0.41764053997213108,0.90096886790241915,0.43388373911755806,0.89303504861288541,0.44998711309212114,0.88481343614973851,0.46594547235582484,0.87630668004386358,0.48175367410171521,0.86751752171771757,0.49740662391322193,0.8584487936018661,0.51289927740590613,0.8491034182221936,0.52822664185308432,0.83948440725807727,0.54338377779480562,0.82959486057183118,0.55836580062966246,0.81943796520973189,0.57316788218892212,0.80901699437494745,0.58778525229247314,0.79833530637270156,0.60221320028608205,0.78739634352801202,0.61644707655946995,0.77620363107635304,0.63048229404471368,0.7647607760275984,0.6443143296944942,0.75307146600361097,0.65793872593971259,0.74113946804985487,0.67135109212600397,0.72896862742141155,0.68454710592868862,0.71656286634379229,0.69752251474570226,0.70392618274894503,0.71027313706805695,0.69106264898686476,0.72279486382739144,0.67797641051322088,0.73508365972017675,0.66467168455342573,0.74713556450814955,0.65115275874357359,0.75894669429455552,0.63742398974868975,0.77051324277578914,0.62348980185873359,0.78183148246802969,0.60935468556280825,0.79289776590847516,0.59502319610203724,0.80370852683078864,0.58049995200157356,0.81426028131437855,0.56578963358221457,0.82454962890714067,0.55089698145210264,0.83457325372130253,0.53582679497899677,0.84432792550201496,0.52058393074360865,0.85381050066834718,0.50517330097450119,0.86301792332635019,0.4895998719650525,0.87194722625386234,0.47386866247299869,0.880595531856738,0.45798474210306767,0.88896005309619319,0.44195322967322681,0.89703809438696858,0.42577929156507283,0.90482705246601947,0.40946814005889065,0.9123244172314543,0.39302503165392366,0.91952777255145057,0.37645526537439217,0.92643479704288745,0.35976418106180702,0.93304326481944411,0.34295715765413171,0.9393510462089234,0.32603961145234195,0.94535610843956885,0.30901699437494745,0.95105651629515353,0.29189479220103348,0.95645043273863151,0.2746785228023903,0.96153611950414886,0.25737373436530259,0.9663119376572239,0.23998600360256606,0.97077634812291813,0.22252093395631445,0.97492791218182362,0.20498415379223051,0.97876529193371131,0.18738131458572474,0.98228725072868861,0.16971808910066918,0.98549265356572668,0.15200016956126727,0.98838046745843067,0.13423326581765554,0.9909497617679347,0.11642310350582305,0.99319970850281281,0.098575422202443613,0.99512958258591122,0.080695973575217517,0.9967387620880146,0.062790519529313527,0.99802672842827156,0.044864830350515209,0.99899306654131459,0.026924682845663007,0.99963746501102113,0.0089758584809980588,0.99995971617087109,0,0.99935552364332136,0.035896202634582174,0.99742292527283405,0.071746136761379281,0.99420469591645155,0.10750359351052489,0.98970498371963489,0.14312248321111948,0.98392958859862967,0.17855689479863665,0.97688595476464768,0.21376115499211443,0.96858316112863119,0.24868988716485474,0.95903190959896567,0.28329806983274941,0.94824451128722631,0.31754109468484432,0.9362348706397372,0.35137482408134268,0.92301846751539729,0.38475564794493594,0.90861233723287449,0.41764053997213108,0.89303504861288541,0.44998711309212114,0.87630668004386358,0.48175367410171521,0.8584487936018661,0.51289927740590613,0.83948440725807727,0.54338377779480562,0.81943796520973189,0.57316788218892212,0,0.99742292527283405,0.071746136761379281,0.98970498371963489,0.14312248321111948,0.97688595476464768,0.21376115499211443,0.95903190959896567,0.28329806983274941,0.9362348706397372,0.35137482408134268,0.90861233723287449,0.41764053997213108,0.87630668004386358,0.48175367410171521,0.83948440725807727,0.54338377779480562,0.79833530637270156,0.60221320028608205,0.75307146600361097,0.65793872593971259,0.70392618274894503,0.71027313706805695,0.65115275874357359,0.75894669429455552,0.59502319610203724,0.80370852683078864,0.53582679497899677,0.84432792550201496,0.47386866247299869,0.880595531856738,0.40946814005889065,0.9123244172314543,0.34295715765413171,0.9393510462089234,0,0.99420469591645155,0.10750359351052489,0.97688595476464768,0.21376115499211443,0.94824451128722631,0.31754109468484432,0.90861233723287449,0.41764053997213108,0.8584487936018661,0.51289927740590613,0.79833530637270156,0.60221320028608205,0.72896862742141155,0.68454710592868862,0.65115275874357359,0.75894669429455552,0.56578963358221457,0.82454962890714067,0.47386866247299869,0.880595531856738,0.37645526537439217,0.92643479704288745,0.2746785228023903,0.96153611950414886,0.16971808910066918,0.98549265356572668,0.062790519529313527,0.99802672842827156,-0.04486483035051464,0.9989930665413147,-0.15200016956126694,0.98838046745843078,-0.25737373436530225,0.96631193765722401,0,0.98970498371963489,0.14312248321111948,0.95903190959896567,0.28329806983274941,0.90861233723287449,0.41764053997213108,0.83948440725807727,0.54338377779480562,0.75307146600361097,0.65793872593971259,0.65115275874357359,0.75894669429455552,0.53582679497899677,0.84432792550201496,0.40946814005889065,0.9123244172314543,0.2746785228023903,0.96153611950414886,0.13423326581765554,0.9909497617679347,-0.0089758584809977136,0.99995971617087109,-0.15200016956126694,0.98838046745843078,-0.29189479220103315,0.95645043273863162,-0.42577929156507233,0.90482705246601969,-0.55089698145210242,0.83457325372130275,-0.66467168455342551,0.74713556450814977,-0.76476077602759807,0.64431432969449465,0,0.98392958859862967,0.17855689479863665,0.9362348706397372,0.35137482408134268,0.8584487936018661,0.51289927740590613,0,0.9362348706397372,0.35137482408134268,0.75307146600361097,0.65793872593971259,0.47386866247299869,0.880595531856738,0,0.8584487936018661,0.51289927740590613,0.47386866247299869,0.880595531856738,-0.044864830350514862,0.9989930665413147,0,0.75307146600361097,0.65793872593971259,0.13423326581765554,0.9909497617679347,-0.55089698145210242,0.83457325372130275,0,0,0,0,0,0,0,0]} diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/sinqi/test/fixtures/c/fftpack/medium.json b/lib/node_modules/@stdlib/fft/base/fftpack/sinqi/test/fixtures/c/fftpack/medium.json deleted file mode 100644 index f87f8df28cfd..000000000000 --- a/lib/node_modules/@stdlib/fft/base/fftpack/sinqi/test/fixtures/c/fftpack/medium.json +++ /dev/null @@ -1 +0,0 @@ -{"lengths":[67,125,52,39,121,103,69,113,91,80],"offsets":[0,67,192,244,283,404,507,576,689,780],"cosines":[0.99972518510981589,0.99890089148571148,0.99752757218401011,0.99560598202189809,0.99313717716255423,0.99012251453465094,0.98656365108654653,0.98246254287557611,0.97782144399294513,0.97264290532481301,0.96692977315025064,0.96068518757684018,0.95391258081477903,0.94661567529043411,0.93879848160038637,0.93046529630708663,0.92162069957733739,0.91226955266489673,0.90241699523858843,0.89206844255738649,0.8812295824940285,0.86990637240879032,0.85810503587514431,0.84583205925909744,0.83309418815409153,0.81989842367342458,0.80625201860222984,0.79216247341112933,0.77763753213375197,0.76268517811038194,0.74731362960007708,0.73153133526366898,0.71534696952012755,0.69876942777884166,0.68180782155043773,0.66447147343882174,0.64676991201719869,0.62871286659088488,0.61031026184979209,0.59157221241352231,0.57250901727207193,0.55313115412519953,0.53344927362357031,0.51347419351484191,0.49321689269790742,0.47268850518856531,0.4519003139999338,0.43086374494097046,0.40959036033650642,0.38809185267224972,0.3663800381682461,0.34446685028433299,0.32236433316115376,0.30008463500034066,0.2776400013875005,0.25504276856167651,0.23230535663498325,0.20944026276614436,0.18646005429168128,0.16337736181853024,0.14020487228188572,0.11695532197208237,0.09364148953435085,0.070276188945293,0.046872262469940029,0.023442573603260568,6.123233995736766e-17,0.99992104420381611,0.99968418928329994,0.9992894726405892,0.99873695660601747,0.99802672842827156,0.99715890026061393,0.9961336091431725,0.99495101698130017,0.9936113105200084,0.99211470131447788,0.99046142569665119,0.98865174473791406,0.98668594420786804,0.98456433452920533,0.98228725072868872,0.97985505238424686,0.97726812356819348,0.97452687278657713,0.97163173291467397,0.96858316112863108,0.96538163883327388,0.96202767158608593,0.95852178901737584,0.95486454474664295,0.95105651629515353,0.94709830499474434,0.94299053589286441,0.93873385765387407,0.93432894245661202,0.92977648588825135,0.92507720683445804,0.92023184736587038,0.91524117262091753,0.91010597068499566,0.90482705246601958,0.89940525156637108,0.89384142415126377,0.88813644881354448,0.88229122643495328,0.87630668004386358,0.87018375466952569,0.86392341719283527,0.85752665619365231,0.85099448179469184,0.84432792550201508,0.83752804004214176,0.83059589919581267,0.82353259762842745,0.81633925071718394,0.80901699437494745,0.80156698487087663,0.79399039864783538,0.78628843213661892,0.77846230156702334,0.77051324277578914,0.76244251101144789,0.75425138073610376,0.74594114542418211,0.73751311735817393,0.72896862742141155,0.72030902488790682,0.71153567720928534,0.70264996979884919,0.69365330581280493,0.68454710592868862,0.67533280812102447,0.66601186743425156,0.65658575575295641,0.64705596156944434,0.63742398974868975,0.62769136129070047,0.61785961309033433,0.60793029769460538,0.59790498305751894,0.58778525229247303,0.57757270342226752,0.56726894912675641,0.55687561648818795,0.54639434673426901,0.53582679497899655,0.52517462996129571,0.51443953378150642,0.50362320163576091,0.49272734154829156,0.48175367410171532,0.47070393216533257,0.45957986062148776,0.44838321609003223,0.43711576665093282,0.42577929156507266,0.41437558099328403,0.40290643571366269,0.39137366683720232,0.37977909552180111,0.36812455268467786,0.35641187871325075,0.344642923174517,0.33281954452298668,0.32094360980720943,0.30901699437494745,0.29704158157703486,0.28501926246997616,0.27295193551732516,0.260841506289897,0.24868988716485474,0.23649899702372476,0.22427076094938117,0.21200710992205452,0.199709980514407,0.18738131458572452,0.17502305897527604,0.1626371651948835,0.15022558912075706,0.13779029068463797,0.12533323356430426,0.1128563848734816,0.10036171485121491,0.087851196550743096,0.07532680552793275,0.062790519529313304,0.050244318179769598,0.037690182669934472,0.025130095443337531,0.012566039883352554,6.123233995736766e-17,0.9995437844895334,0.9981755542233175,0.99589655761709095,0.99270887409805397,0.98861541220753424,0.98361990694714363,0.97772691637084685,0.97094181742605201,0.96327080104751628,0.9547208665085456,0.94529981503464022,0.93501624268541483,0.92387953251128674,0.91189984599209006,0.89908811376542597,0.88545602565320991,0.87101601999551559,0.85578127230144752,0.83976568322739797,0.82298386589365646,0.80545113255094591,0.78718348060905019,0.76819757804028055,0.74851074817110119,0.72814095387578848,0.70710678118654757,0.68542742233503984,0.6631226582407953,0.64021284046248805,0.61671887262854308,0.59266219136401688,0.56806474673115581,0.5429489822014788,0.51733781417765679,0.49125461108387752,0.46472317204376862,0.43776770516534047,0.41041280545275693,0.38268343236508984,0.35460488704253579,0.32620278922086943,0.29750305385520298,0.26853186747437691,0.23931566428755782,0.20988110206484778,0.18025503781390587,0.15046450327478306,0.12053668025532323,0.09049887582963792,0.060378497422286286,0.030203027800888991,6.123233995736766e-17,0.99918899817156959,0.99675730813421004,0.99270887409805397,0.98705026263791285,0.97979065204226767,0.97094181742605201,0.96051811163137235,0.94853644194714548,0.93501624268541483,0.91997944365882423,0.90345043461038232,0.88545602565320991,0.86602540378443871,0.84519008554379482,0.82298386589365646,0.79944276340350118,0.77460496182765459,0.74851074817110119,0.72120244734381456,0.69272435350959949,0.6631226582407953,0.63244537559537728,0.60074226423797905,0.56806474673115581,0.53446582612780125,0.50000000000000011,0.46472317204376862,0.42869256140305423,0.39196660986007509,0.35460488704253579,0.31666799380147265,0.27821746391645275,0.23931566428755782,0.20002569377604446,0.16041128085776046,0.12053668025532323,0.080466568716726014,0.040265940109415241,6.123233995736766e-17,0.99991573777581688,0.9996629653035124,0.99924172518142806,0.99865208839882302,0.99789415432391082,0.99696805068711336,0.99587393355953502,0.99461198732666134,0.99318242465728501,0.99158548646766631,0.98982144188093268,0.98789058818172515,0.98579325076609803,0.98352978308668237,0.98110056659312039,0.97850601066778153,0.9757465525567719,0.97282265729624728,0.96973481763404379,0.96648355394663699,0.96306941415144631,0.95949297361449737,0.95575483505345882,0.95185562843606963,0.94779601087397392,0.94357666651198202,0.93919830641277491,0.9346616684370731,0.92996751711928893,0.92511664353868373,0.92010986518605187,0.91494802582595314,0.90963199535451833,0.90416266965285019,0.89854097043604553,0.89276784509786367,0.88684426655106763,0.88077123306346428,0.87454976808967211,0.86818092009864389,0.8616657623969739,0.85500539294802003,0.84820093418686937,0.84125353283118121,0.83416435968793645,0.82693460945612862,0.81956550052542743,0.81205827477085002,0.80441419734347563,0.79663455645723602,0.7887206631718201,0.78067385117172805,0.7724954765415134,0.7641869175372491,0.75574957435425827,0.74718486889114633,0.73849424451017709,0.72967916579402992,0.72074111829898324,0.71168160830456018,0.70250216255968523,0.693204328025389,0.6837896716141072,0.67425977992561803,0.66461625897966137,0.65486073394528499,0.6449948488669639,0.63502026638753839,0.62493866746801852,0.61475175110430091,0.60446123404084628,0.59406885048136626,0.58357635179656719,0.57298550622900202,0.56229809859507784,0.55151592998427057,0.54064081745559767,0.52967459373139858,0.51861910688847745,0.5074762200466556,0.49624781105479165,0.48493577217431655,0.47354200976034294,0.4620684439403962,0.4505170082908268,0.43888964951095577,0.42718832709500709,0.41541501300188644,0.40357169132285664,0.39166035794717019,0.37968302022571399,0.36764169663272006,0.35553841642560485,0.34337521930298859,0.33115415506095641,0.31887728324761866,0.30654667281602482,0.29416440177549641,0.28173255684142978,0.26925323308363447,0.25672853357326314,0.24416056902839128,0.23155145745831138,0.21890332380659488,0.20621829959298815,0.19349852255419972,0.18074613628363795,0.16796328987016487,0.15515213753592064,0.14231483827328512,0.12945355548103549,0.11657045659975915,0.10366771274658876,0.090747498349314365,0.077811990779939819,0.06486336998774303,0.051903818131899662,0.038935519213737745,0.025960658708678471,0.012981423197930875,6.123233995736766e-17,0.99988371414463784,0.99953488362335152,0.99895358956425229,0.99813996715989384,0.99709420563583062,0.99581654820660925,0.99430729201920387,0.99256678808390786,0.99059544119269904,0.98839370982509611,0.98596210604153001,0.98330119536425242,0.98041159664581168,0.97729398192512484,0.97394907627118121,0.97037765761441064,0.96658055656576003,0.962558656223516,0.95831289196792147,0.9538442512436327,0.94915377333006756,0.94424254909969862,0.93911172076434679,0.93376248160953546,0.92819607571696594,0.92241379767517928,0.91641699227847151,0.91020705421413273,0.9037854277380819,0.89715360633897423,0.89031313239085774,0.88326559679446082,0.87601263860719336,0.86855594466194885,0.86089724917479438,0.85303833334164159,0.84498102492398997,0.83672719782384208,0.82827877164788677,0.81963771126105256,0.81080602632953613,0.80178577085341063,0.79257904268892332,0.78318798306059356,0.7736147760632246,0.76386164815394497,0.75393086763439732,0.7438247441231961,0.73354562801877499,0.72309590995275119,0.71247802023393192,0.70169442828309325,0.69074764205866301,0.67964020747344034,0.66837470780248853,0.65695376308233822,0.64538002950164097,0.63365619878341528,0.62178499755902727,0.60976918673405434,0.5976115608461755,0.58531494741524215,0.57288220628567577,0.56031622896135003,0.54761993793310804,0.53479628599907425,0.52184825557791659,0.50877885801522071,0.49559113288313555,0.48228814727345615,0.4688729950843033,0.45534879630057123,0.44171869626830718,0.42798586496319291,0.4141534962532985,0.40022480715627801,0.38620303709118281,0.37209144712506437,0.35789331921454187,0.34361195544251311,0.3292506772501817,0.31481282466458504,0.300301755521798,0.2857208446859959,0.27107348326455555,0.25636307781938034,0.24159304957463013,0.22676683362104103,0.21188787811702131,0.19695964348670617,0.18198560161516167,0.16696923504092231,0.15191403614605092,0.13682350634391022,0.12170115526483183,0.10655049993987634,0.091375063982871305,0.076178376770918002,0.060963972623559098,0.045735389980794579,0.030496170580141577,0.015249858632925991,6.123233995736766e-17,0.99974088484134915,0.99896367364672756,0.99766876919053915,0.99585684253153128,0.99352883266503123,0.99068594603633076,0.98732965591546962,0.98346170163374214,0.97908408768232291,0.9741990826734791,0.96880921816490639,0.96291728734779936,0.95652634359933475,0.9496396989003193,0.94226092211882051,0.93439383716067115,0.92604252098780526,0.91721130150545305,0.90790475531928894,0.89812770536369613,0.88788521840237522,0.87718260240259427,0.86602540378443871,0.85441940454648857,0.84237061926941159,0.82988529199902517,0.81696989301044209,0.80363111545497823,0.78987587189155861,0.77571129070441991,0.76114471240896475,0.74618368584768557,0.73083596427812414,0.71510950135489937,0.69901244700788212,0.68255314321865412,0.66574011969744062,0.64858208946275597,0.63108794432605286,0.61326675028371636,0.59512774281878977,0.57668032211486708,0.55793404818463344,0.53889863591557563,0.51958395003543356,0.50000000000000011,0.48015693480591559,0.4600650377311522,0.43973472100590599,0.41917652041666414,0.39840108984624156,0.3774191957526144,0.35624171158941687,0.33487961217098627,0.31334396798488223,0.29164593945482503,0.26979677115702444,0.24780778599289993,0.22569037932121072,0.20345601305263397,0.18111620970985581,0.15868254645625143,0.13616664909624659,0.11358018605047492,0.09093486230884712,0.068242413364671003,0.045514599132963712,0.022763197856105661,6.123233995736766e-17,0.99990338470638107,0.99961355749455405,0.99913057436800123,0.99845452865383599,0.99758555098476864,0.9965238092738643,0.9952695086820974,0.99382289157870785,0.9921842374943679,0.99035386306716877,0.98833212198143583,0.98611940489938621,0.98371613938564106,0.9811227898246071,0.97833985733074269,0.975367879651728,0.97220743106455521,0.96885912226456061,0.96532360024742003,0.96160154818412902,0.95769368528899346,0.9536007666806553,0.94932358323618105,0.94486296143823911,0.94021976321539902,0.93539488577558016,0.93038926143268352,0.92520385742644029,0.91983967573551173,0.91429775288387605,0.90857915974054027,0.90268500131261564,0.89661641653179647,0.89037457803428377,0.88396069193419569,0.87737599759050977,0.87062176736758112,0.86369930638928183,0.8566099522868118,0.84935507494022766,0.84193607621373923,0.83435438968482722,0.82661148036723175,0.8187088444278674,0.81064800889771726,0.80243053137676457,0.79405799973301627,0.78553203179567854,0.77685427504254267,0.76802640628164209,0.75905013132724153,0.74992718467022146,0.74065932914292176,0.73124835557850854,0.72169608246493022,0.71200435559352981,0.70217504770238204,0.69221005811442282,0.6821113123704422,0.67188076185701062,0.66152038342941155,0.65103217902965238,0.64041817529962863,0.62968042318951389,0.61882099756145403,0.60784199678864015,0.59674554234983879,0.58553377841945764,0.57420887145322486,0.56277300976956379,0.55122840312674337,0.53957728229588453,0.52782189862990736,0.51596452362850098,0.50400744849919987,0.4919529837146529,0.47980345856616935,0.46756122071362805,0.45522863573183869,0.4428080866534394,0.43030197350842236,0.41771271286037459,0.40504273733952406,0.39229449517268095,0.37947044971016541,0.36657307894981289,0.35360487505814908,0.34056834388882778,0.32746600449842223,0.31430038865966692,0.30107404037224184,0.28778951537119346,0.27444938063308905,0.26105621387999778,0.24761260308139635,0.23412114595409397,0.22058444946027386,0.2070051293037492,0.1933858094245279,0.17972912149178802,0.1660377043953585,0.15231420373580504,0.13856127131321905,0.12478156461480873,0.11097774630139143,0.097152483692885747,0.083308448252904677,0.069448315072545827,0.055574762353482812,0.041690470890454627,0.027798123553254055,0.01390040476831517,6.123233995736766e-17,0.99985102404084947,0.99940414055107041,0.99865948268045612,0.99761727230124764,0.99627781994202647,0.99464152469519274,0.99270887409805397,0.99048044398756319,0.98795689832874645,0.9851389890168738,0.98202755565343036,0.97862352529595531,0.97492791218182362,0.97094181742605201,0.9666664286932195,0.96210301984360058,0.95725295055361581,0.95211766591071412,0.94669869598280598,0.94099765536237645,0.93501624268541483,0.92875624012530233,0.92221951286181036,0.91540800852536641,0.90832375661675402,0.90096886790241915,0.89334553378556314,0.88545602565320991,0.87730269419944207,0.86888796872500662,0.86021435641350075,0.85128444158435124,0.84210088492281177,0.83266642268720636,0.82298386589365635,0.81305609947853252,0.80288608143888252,0.79247684195109047,0.7818314824680298,0.7709531747949796,0.75984516014457881,0.74851074817110119,0.73695331598433678,0.72517630714337655,0.7131832306305963,0.70097765980614946,0.68856323134327702,0.67594364414475439,0.6631226582407953,0.65010409366874433,0.6368918293348893,0.62348980185873359,0.60990200440007281,0.59613248546922537,0.5821853477207708,0.56806474673115581,0.55377488976053313,0.5393200344991993,0.52470448779900813,0.50993260439013599,0.49500878558358147,0.47993747795978642,0.46472317204376862,0.44937040096716135,0.43388373911755818,0.41826780077556519,0.40252723873996754,0.38666674294141884,0.37069103904506751,0.35460488704253557,0.33841307983367058,0.32212044179849075,0.30573182735975302,0.28925211953656776,0.27268622848949386,0.25603909005754721,0.23931566428755782,0.22252093395631445,0.20565990308593662,0.18873759545291671,0.17175905309127604,0.15472933479028123,0.13765351458716818,0.12053668025532323,0.10338393178837031,0.086200379880619543,0.06899114440432505,0.051761352884209494,0.034516138969708218,0.017260640905388574,6.123233995736766e-17,0.99980724048206482,0.9992290362407229,0.99826561018471593,0.99691733373312796,0.99518472667219693,0.99306845695492629,0.99056934044357725,0.98768834059513777,0.9844265680898916,0.98078528040323043,0.97676588132087239,0.97236992039767656,0.96759909236025976,0.96245523645364728,0.95694033573220882,0.95105651629515353,0.94480604646687805,0.93819133592248416,0.93121493475880357,0.92387953251128674,0.91618795711713596,0.90814317382508125,0.89974828405222151,0.8910065241883679,0.88192126434835505,0.87249600707279718,0.86273438597779184,0.85264016435409229,0.84221723371628654,0.83146961230254524,0.82040144352551359,0.80901699437494745,0.79732065377270711,0.78531693088074495,0.77301045336273699,0.76040596560003093,0.74750832686259683,0.73432250943568556,0.72085359670291882,0.70710678118654757,0.69308736254563585,0.67880074553294178,0.66425243791128175,0.64944804833018366,0.63439328416364549,0.61909394930983397,0.60355594195357143,0.58778525229247314,0.57178796022761225,0.55557023301960229,0.53913832291100039,0.52249856471594891,0.50565737337798455,0.48862124149695496,0.47139673682599781,0.45399049973954686,0.43640924067334202,0.41865973753742813,0.40074883310314113,0.38268343236508984,0.36447049987914959,0.34611705707749302,0.32763017956169366,0.30901699437494745,0.29028467725446233,0.27144044986507432,0.25249157701515812,0.23344536385590547,0.21430915306505069,0.19509032201612833,0.17579627993435468,0.15643446504023092,0.13701234168196799,0.1175373974578377,0.09801714032956077,0.078459095727844999,0.058870803651188984,0.039259815759068666,0.019633692460628474,6.123233995736766e-17],"twiddles":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.99873695660601747,0.050244318179769556,0.99495101698130017,0.10036171485121489,0.98865174473791406,0.15022558912075706,0.97985505238424686,0.19970998051440703,0.96858316112863108,0.24868988716485479,0.95486454474664295,0.29704158157703492,0.93873385765387407,0.34464292317451706,0.92023184736587038,0.39137366683720243,0.89940525156637108,0.43711576665093288,0.87630668004386358,0.48175367410171532,0.85099448179469184,0.52517462996129571,0.82353259762842745,0.56726894912675652,0,0.99495101698130017,0.10036171485121489,0.97985505238424686,0.19970998051440703,0.95486454474664295,0.29704158157703492,0.92023184736587038,0.39137366683720243,0.87630668004386358,0.48175367410171532,0.82353259762842745,0.56726894912675652,0.76244251101144789,0.64705596156944434,0.69365330581280493,0.72030902488790682,0.61785961309033433,0.78628843213661892,0.53582679497899655,0.84432792550201508,0.44838321609003223,0.89384142415126377,0.35641187871325075,0.93432894245661202,0,0.98865174473791406,0.15022558912075706,0.95486454474664295,0.29704158157703492,0.89940525156637108,0.43711576665093288,0.82353259762842745,0.56726894912675652,0.72896862742141155,0.68454710592868862,0.61785961309033433,0.78628843213661892,0.49272734154829156,0.87018375466952569,0.35641187871325075,0.93432894245661202,0.21200710992205474,0.97726812356819348,0.062790519529313527,0.99802672842827156,-0.087851196550743194,0.9961336091431725,-0.23649899702372465,0.97163173291467397,0,0.97985505238424686,0.19970998051440703,0.92023184736587038,0.39137366683720243,0.82353259762842745,0.56726894912675652,0.69365330581280493,0.72030902488790682,0.53582679497899655,0.84432792550201508,0.35641187871325075,0.93432894245661202,0.1626371651948835,0.98668594420786804,-0.037690182669934576,0.9992894726405892,-0.23649899702372465,0.97163173291467397,-0.42577929156507272,0.90482705246601947,-0.59790498305751894,0.80156698487087652,-0.74594114542418211,0.66601186743425167,0,0.96858316112863108,0.24868988716485479,0.87630668004386358,0.48175367410171532,0,0.87630668004386358,0.48175367410171532,0.53582679497899655,0.84432792550201508,0,0.72896862742141155,0.68454710592868873,0.062790519529313304,0.99802672842827156,0,0.53582679497899655,0.84432792550201508,-0.42577929156507272,0.90482705246601947,0,0,0,0,0,0,0.99270887409805397,0.12053668025532305,0.97094181742605201,0.23931566428755774,0.93501624268541483,0.35460488704253557,0.88545602565320991,0.46472317204376851,0.82298386589365646,0.5680647467311557,0.74851074817110119,0.66312265824079519,0,0.97094181742605201,0.23931566428755774,0.88545602565320991,0.46472317204376851,0.74851074817110119,0.66312265824079519,0.56806474673115581,0.82298386589365635,0.35460488704253579,0.93501624268541472,0.12053668025532323,0.99270887409805397,0,0.93501624268541483,0.35460488704253557,0.74851074817110119,0.66312265824079519,0.46472317204376862,0.8854560256532098,0.12053668025532323,0.99270887409805397,-0.23931566428755749,0.97094181742605212,-0.5680647467311557,0.82298386589365646,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.98705026263791285,0.16041128085776024,0.94853644194714548,0.31666799380147248,0.88545602565320991,0.46472317204376851,0.79944276340350118,0.60074226423797883,0.69272435350959949,0.72120244734381445,0.56806474673115581,0.82298386589365635,0,0.94853644194714548,0.31666799380147248,0.79944276340350118,0.60074226423797883,0.56806474673115581,0.82298386589365635,0.27821746391645275,0.96051811163137224,-0.040265940109414901,0.9991889981715697,-0.35460488704253545,0.93501624268541483,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.99865208839882302,0.051903818131899739,0.99461198732666134,0.10366771274658874,0.98789058818172515,0.15515213753592053,0.97850601066778153,0.20621829959298818,0.96648355394663699,0.25672853357326308,0,0.99461198732666134,0.10366771274658874,0.97850601066778153,0.20621829959298818,0.95185562843606963,0.30654667281602488,0.91494802582595314,0.40357169132285653,0.86818092009864389,0.49624781105479165,0,0.98789058818172515,0.15515213753592053,0.95185562843606963,0.30654667281602488,0.89276784509786367,0.4505170082908268,0.81205827477085002,0.58357635179656708,0.71168160830456018,0.70250216255968534,0,0.97850601066778153,0.20621829959298818,0.91494802582595314,0.40357169132285653,0.81205827477085002,0.58357635179656708,0.67425977992561803,0.73849424451017698,0.5074762200466556,0.8616657623969739,0,0.96648355394663699,0.25672853357326308,0.86818092009864389,0.49624781105479165,0.71168160830456018,0.70250216255968534,0.5074762200466556,0.8616657623969739,0.26925323308363447,0.96306941415144631,0,0.95185562843606963,0.30654667281602488,0.81205827477085002,0.58357635179656708,0.59406885048136626,0.80441419734347563,0.31887728324761866,0.94779601087397392,0.012981423197930875,0.99991573777581688,0,0.9346616684370731,0.35553841642560485,0.74718486889114633,0.66461625897966148,0.46206844394039598,0.88684426655106763,0.11657045659975915,0.99318242465728501,-0.24416056902839139,0.96973481763404379,0,0.91494802582595314,0.40357169132285653,0.67425977992561803,0.73849424451017698,0.31887728324761866,0.94779601087397392,-0.09074749834931424,0.99587393355953502,-0.48493577217431666,0.87454976808967211,0,0.89276784509786367,0.4505170082908268,0.59406885048136626,0.80441419734347563,0.16796328987016487,0.98579325076609803,-0.2941644017754963,0.95575483505345893,-0.693204328025389,0.72074111829898313,0,0.86818092009864389,0.49624781105479165,0.5074762200466556,0.8616657623969739,0.012981423197930875,0.99991573777581688,-0.48493577217431666,0.87454976808967211,-0.85500539294802003,0.51861910688847734,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.99585684253153128,0.090934862308846953,0.98346170163374214,0.18111620970985573,0.96291728734779936,0.26979677115702427,0.93439383716067115,0.35624171158941681,0.89812770536369613,0.43973472100590583,0.85441940454648857,0.51958395003543356,0.80363111545497823,0.59512774281878966,0.74618368584768557,0.66574011969744062,0.68255314321865412,0.73083596427812403,0.61326675028371636,0.78987587189155861,0.53889863591557563,0.84237061926941148,0,0.98346170163374214,0.18111620970985573,0.93439383716067115,0.35624171158941681,0.85441940454648857,0.51958395003543356,0.74618368584768557,0.66574011969744062,0.61326675028371636,0.78987587189155861,0.4600650377311522,0.88788521840237522,0.29164593945482503,0.95652634359933475,0.11358018605047492,0.99352883266503111,-0.068242413364670879,0.99766876919053915,-0.24780778599289982,0.96880921816490639,-0.41917652041666381,0.90790475531928916,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.99761727230124764,0.068991144404324925,0.99048044398756319,0.13765351458716821,0.97862352529595531,0.20565990308593657,0.96210301984360058,0.27268622848949375,0.94099765536237645,0.33841307983367042,0.91540800852536641,0.40252723873996749,0,0.99048044398756319,0.13765351458716821,0.96210301984360058,0.27268622848949375,0.91540800852536641,0.40252723873996749,0.85128444158435124,0.52470448779900802,0.7709531747949796,0.63689182933488919,0.67594364414475439,0.73695331598433667,0,0.97862352529595531,0.20565990308593657,0.91540800852536641,0.40252723873996749,0.81305609947853252,0.58218534772077069,0.67594364414475439,0.73695331598433667,0.50993260439013599,0.86021435641350064,0.32212044179849075,0.94669869598280587,0,0.96210301984360058,0.27268622848949375,0.85128444158435124,0.52470448779900802,0.67594364414475439,0.73695331598433667,0.44937040096716135,0.89334553378556314,0.18873759545291671,0.98202755565343036,-0.086200379880619196,0.99627781994202647,0,0.94099765536237645,0.33841307983367042,0.7709531747949796,0.63689182933488919,0.50993260439013577,0.86021435641350075,0.18873759545291671,0.98202755565343036,-0.15472933479028111,0.98795689832874645,-0.47993747795978653,0.87730269419944185,0,0.91540800852536641,0.40252723873996749,0.67594364414475439,0.73695331598433667,0.32212044179849075,0.94669869598280587,-0.086200379880619196,0.99627781994202647,-0.47993747795978614,0.87730269419944207,-0.79247684195109025,0.60990200440007303,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.99691733373312796,0.078459095727844944,0.98768834059513777,0.15643446504023087,0.97236992039767656,0.23344536385590539,0.95105651629515353,0.3090169943749474,0.92387953251128674,0.38268343236508978,0.8910065241883679,0.45399049973954675,0.85264016435409229,0.5224985647159488,0.80901699437494745,0.58778525229247314,0.76040596560003093,0.64944804833018366,0,0,0.98768834059513777,0.15643446504023087,0.95105651629515353,0.3090169943749474,0.8910065241883679,0.45399049973954675,0.80901699437494745,0.58778525229247314,0.70710678118654757,0.70710678118654746,0.58778525229247314,0.80901699437494745,0.45399049973954686,0.8910065241883679,0.30901699437494745,0.95105651629515353,0.15643446504023092,0.98768834059513777,0,0,0.97236992039767656,0.23344536385590539,0.8910065241883679,0.45399049973954675,0.76040596560003093,0.64944804833018366,0.58778525229247314,0.80901699437494745,0.38268343236508984,0.92387953251128674,0.15643446504023092,0.98768834059513777,-0.078459095727844874,0.99691733373312796,-0.30901699437494734,0.95105651629515364,-0.5224985647159488,0.85264016435409229,0,0,0.95105651629515353,0.3090169943749474,0.80901699437494745,0.58778525229247314,0,0.80901699437494745,0.58778525229247314,0.30901699437494745,0.95105651629515353,0,0.58778525229247314,0.80901699437494745,-0.30901699437494734,0.95105651629515364,0,0,0,0,0,0]} diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/sinqi/test/fixtures/c/fftpack/runner.c b/lib/node_modules/@stdlib/fft/base/fftpack/sinqi/test/fixtures/c/fftpack/runner.c deleted file mode 100644 index b8206e497ff6..000000000000 --- a/lib/node_modules/@stdlib/fft/base/fftpack/sinqi/test/fixtures/c/fftpack/runner.c +++ /dev/null @@ -1,304 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2026 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/** -* Generate FFTPACK test fixtures. -* -* ## Notes -* -* - Run this script from the directory in which fixtures should be written. -* -*/ - -#include -#include -#include - -/** -* Define prototypes for external functions. -*/ -extern void sinqi( int n, double *wsave ); - -/** -* Generates a random number on the interval [0,1]. -* -* @return random number -*/ -double rand_double( void ) { - int r = rand(); - return (double)r / ( (double)RAND_MAX + 1.0 ); -} - -/** -* Generates an array of pseudorandom integers drawn from a uniform distribution. -* -* ## Notes -* -* - WARNING: the method used here is not particularly robust, as some integer values may be sampled more frequently than others. -* -* -* @param out output array -* @param len array length -* @param a lower bound (inclusive) -* @param b upper bound (exclusive) -*/ -void rand_array_i32( int *out, const unsigned int len, const int a, const int b ) { - unsigned int i; - unsigned int r; - double delta; - - delta = (double)b - (double)a; - - for ( i = 0; i < len; i++ ) { - r = (unsigned int)( delta * rand_double() ); // truncation - out[ i ] = (int)( a + r ); - } -} - -/** -* Writes an array of doubles to a file as a series of comma-separated values. -* -* @param f file to write to -* @param x array of doubles -* @param len array length -*/ -void write_array_f64( FILE *f, const double *x, const unsigned int len ) { - unsigned int i; - - for ( i = 0; i < len; i++ ) { - fprintf( f, "%.17g", x[ i ] ); - if ( i < len-1 ) { - fprintf( f, "," ); - } - } -} - -/** -* Writes an array of integers to a file as a series of comma-separated values. -* -* @param f file to write to -* @param x array of integers -* @param len array length -*/ -void write_array_i32( FILE *f, const int *x, const unsigned int len ) { - unsigned int i; - - for ( i = 0; i < len; i++ ) { - fprintf( f, "%d", x[ i ] ); - if ( i < len-1 ) { - fprintf( f, "," ); - } - } -} - -/** -* Writes a named array of doubles to a file as JSON. -* -* @param f file to write to -* @param name array name -* @param x data -* @param len array length -*/ -void write_named_array_f64( FILE *f, const char *name, const double *x, const unsigned int len ) { - fprintf( f, "\"%s\":[", name ); - write_array_f64( f, x, len ); - fprintf( f, "]" ); -} - -/** -* Writes a named array of integers to a file as JSON. -* -* @param f file to write to -* @param name array name -* @param x data -* @param len array length -*/ -void write_named_array_i32( FILE *f, const char *name, const int *x, const unsigned int len ) { - fprintf( f, "\"%s\":[", name ); - write_array_i32( f, x, len ); - fprintf( f, "]" ); -} - -/** -* Writes data to a file as JSON. -* -* ## Notes -* -* - This function SHOULD be tailored to the input data (e.g., input types, output types, number of arguments, etc) and may vary from use case to use case. -* -* -* @param f file to write to -* @param lengths sequence lengths -* @param offsets cosine and twiddle offsets -* @param cosines cosine values -* @param twiddles twiddle factors -* @param num number of sequence lengths -* @param total total number of cosine and twiddle values -*/ -void write_data_as_json( FILE *f, const int *lengths, const int *offsets, const double *cosines, const double *twiddles, const unsigned int num, const unsigned int total ) { - fprintf( f, "{" ); - write_named_array_i32( f, "lengths", lengths, num ); - fprintf( f, "," ); - write_named_array_i32( f, "offsets", offsets, num ); - fprintf( f, "," ); - write_named_array_f64( f, "cosines", cosines, total ); - fprintf( f, "," ); - write_named_array_f64( f, "twiddles", twiddles, total ); - fprintf( f, "}\n" ); -} - -/** -* Generates test fixtures. -* -* @param lengths sequence lengths -* @param offsets cosine and twiddle offsets into flat output array -* @param num number of sequence lengths -* @param total total number of cosine and twiddle values -* @param name output filename -*/ -void generate( const int *lengths, const int *offsets, const unsigned int num, const unsigned int total, const char *name ) { - unsigned int i; - unsigned int j; - double *cosines; - double *twiddles; - double *wsave; - FILE *f; - int off; - int n; - - // Allocate an output array for cosine values: - cosines = (double*) malloc( total * sizeof(double) ); - if ( cosines == NULL ) { - printf( "Error allocating memory.\n" ); - exit( 1 ); - } - - // Allocate an output array for twiddle factors: - twiddles = (double*) malloc( total * sizeof(double) ); - if ( twiddles == NULL ) { - printf( "Error allocating memory.\n" ); - exit( 1 ); - } - - // Generate fixture data: - for ( i = 0; i < num; i++ ) { - n = lengths[ i ]; - wsave = (double*) calloc( 3*n + 15, sizeof(double) ); - if ( wsave == NULL ) { - printf( "Error allocating memory.\n" ); - exit( 1 ); - } - sinqi( n, wsave ); - - // Copy cosine region into flat array (N values starting at wsave[0]): - off = offsets[ i ]; - for ( j = 0; j < (unsigned int)n; j++ ) { - cosines[ off + j ] = wsave[ j ]; - } - - // Copy twiddle region into flat array (N values starting at wsave[2*n]): - off = offsets[ i ]; - for ( j = 0; j < (unsigned int)n; j++ ) { - twiddles[ off + j ] = wsave[ ( 2*n ) + j ]; - } - free( wsave ); - } - // Open a new file: - f = fopen( name, "w" ); - if ( f == NULL ) { - printf( "Error opening file.\n" ); - exit( 1 ); - } - - // Write data as JSON: - write_data_as_json( f, lengths, offsets, cosines, twiddles, num, total ); - - // Close the file: - fclose( f ); - - // Free allocated memory: - free( cosines ); - free( twiddles ); -} - -/** -* Computes offsets into flat cosine and twiddle arrays for each sequence length. -* -* @param offsets output array of offsets -* @param lengths sequence lengths -* @param num number of sequence lengths -* @return total number of cosine and twiddle values -*/ -unsigned int compute_offsets( int *offsets, const int *lengths, const unsigned int num ) { - unsigned int total; - unsigned int i; - - total = 0; - for ( i = 0; i < num; i++ ) { - offsets[ i ] = total; - total += lengths[ i ]; - } - return total; -} - -/** -* Main execution sequence. -*/ -int main( void ) { - unsigned int total; - unsigned int num; - int *lengths; - int *offsets; - - // Use the current time to seed the random number generator: - srand( time( NULL ) ); - - // Define the number of sequence lengths per range: - num = 10; - - // Allocate arrays: - lengths = (int*) malloc( num * sizeof(int) ); - if ( lengths == NULL ) { - printf( "Error allocating memory.\n" ); - exit( 1 ); - } - offsets = (int*) malloc( num * sizeof(int) ); - if ( offsets == NULL ) { - printf( "Error allocating memory.\n" ); - exit( 1 ); - } - - // Generate fixture data: - rand_array_i32( lengths, num, 2, 16 ); - total = compute_offsets( offsets, lengths, num ); - generate( lengths, offsets, num, total, "small.json" ); - - rand_array_i32( lengths, num, 16, 128 ); - total = compute_offsets( offsets, lengths, num ); - generate( lengths, offsets, num, total, "medium.json" ); - - rand_array_i32( lengths, num, 128, 1024 ); - total = compute_offsets( offsets, lengths, num ); - generate( lengths, offsets, num, total, "large.json" ); - - // Free allocated memory: - free( lengths ); - free( offsets ); - - return 0; -} diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/sinqi/test/fixtures/c/fftpack/small.json b/lib/node_modules/@stdlib/fft/base/fftpack/sinqi/test/fixtures/c/fftpack/small.json deleted file mode 100644 index 3146cddf05bd..000000000000 --- a/lib/node_modules/@stdlib/fft/base/fftpack/sinqi/test/fixtures/c/fftpack/small.json +++ /dev/null @@ -1 +0,0 @@ -{"lengths":[2,2,15,8,8,4,9,6,15,15],"offsets":[0,2,4,19,27,35,39,48,54,69],"cosines":[0.70710678118654757,6.123233995736766e-17,0.70710678118654757,6.123233995736766e-17,0.99452189536827329,0.97814760073380569,0.95105651629515353,0.91354545764260087,0.86602540378443871,0.80901699437494745,0.74314482547739436,0.66913060635885824,0.58778525229247314,0.50000000000000011,0.40673664307580037,0.30901699437494745,0.20791169081775945,0.10452846326765368,6.123233995736766e-17,0.98078528040323043,0.92387953251128674,0.83146961230254524,0.70710678118654757,0.55557023301960229,0.38268343236508984,0.19509032201612833,6.123233995736766e-17,0.98078528040323043,0.92387953251128674,0.83146961230254524,0.70710678118654757,0.55557023301960229,0.38268343236508984,0.19509032201612833,6.123233995736766e-17,0.92387953251128674,0.70710678118654757,0.38268343236508984,6.123233995736766e-17,0.98480775301220802,0.93969262078590843,0.86602540378443871,0.76604444311897801,0.64278760968653936,0.50000000000000011,0.34202014332566882,0.17364817766693041,6.123233995736766e-17,0.96592582628906831,0.86602540378443871,0.70710678118654757,0.50000000000000011,0.25881904510252096,6.123233995736766e-17,0.99452189536827329,0.97814760073380569,0.95105651629515353,0.91354545764260087,0.86602540378443871,0.80901699437494745,0.74314482547739436,0.66913060635885824,0.58778525229247314,0.50000000000000011,0.40673664307580037,0.30901699437494745,0.20791169081775945,0.10452846326765368,6.123233995736766e-17,0.99452189536827329,0.97814760073380569,0.95105651629515353,0.91354545764260087,0.86602540378443871,0.80901699437494745,0.74314482547739436,0.66913060635885824,0.58778525229247314,0.50000000000000011,0.40673664307580037,0.30901699437494745,0.20791169081775945,0.10452846326765368,6.123233995736766e-17],"twiddles":[0,0,0,0,0.91354545764260087,0.40673664307580015,0.66913060635885824,0.74314482547739424,0,0.66913060635885824,0.74314482547739424,-0.10452846326765333,0.9945218953682734,0,0,0,0,0,0,0.70710678118654757,0.70710678118654746,0,0,0,0,0,0,0.70710678118654757,0.70710678118654746,0,0,0,0,0,0,0,0,0,0,0.76604444311897801,0.64278760968653925,0,0.17364817766693041,0.98480775301220802,0,0,0,0,0.50000000000000011,0.8660254037844386,0,0,0,0,0.91354545764260087,0.40673664307580015,0.66913060635885824,0.74314482547739424,0,0.66913060635885824,0.74314482547739424,-0.10452846326765333,0.9945218953682734,0,0,0,0,0,0,0.91354545764260087,0.40673664307580015,0.66913060635885824,0.74314482547739424,0,0.66913060635885824,0.74314482547739424,-0.10452846326765333,0.9945218953682734,0,0,0,0,0,0]} diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/sinqi/test/test.js b/lib/node_modules/@stdlib/fft/base/fftpack/sinqi/test/test.js deleted file mode 100644 index 61f26b47c8dc..000000000000 --- a/lib/node_modules/@stdlib/fft/base/fftpack/sinqi/test/test.js +++ /dev/null @@ -1,314 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2026 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var Float64Array = require( '@stdlib/array/float64' ); -var isAlmostSameValue = require( '@stdlib/number/float64/base/assert/is-almost-same-value' ); -var sinqi = require( './../lib' ); - - -// FIXTURES // - -var small = require( './fixtures/c/fftpack/small.json' ); -var medium = require( './fixtures/c/fftpack/medium.json' ); -var large = require( './fixtures/c/fftpack/large.json' ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof sinqi, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function has an arity of 4', function test( t ) { - t.strictEqual( sinqi.length, 4, 'returns expected value' ); - t.end(); -}); - -tape( 'the function returns a reference to the workspace array', function test( t ) { - var workspace; - var out; - var N; - - N = 8; - workspace = new Float64Array( ( 3*N ) + 34 ); - out = sinqi( N, workspace, 1, 0 ); - - t.strictEqual( out, workspace, 'same reference' ); - t.end(); -}); - -tape( 'the function correctly initializes cosine values (small sequence lengths)', function test( t ) { - var workspace; - var expected; - var lengths; - var offsets; - var ulps; - var off; - var y; - var e; - var N; - var i; - var k; - - lengths = small.lengths; - offsets = small.offsets; - expected = small.cosines; - - ulps = 1; - for ( k = 0; k < lengths.length; k++ ) { - N = lengths[ k ]; - off = offsets[ k ]; - workspace = new Float64Array( ( 3*N ) + 34 ); - sinqi( N, workspace, 1, 0 ); - - t.strictEqual( workspace[ N ], 0.0, 'returns expected value' ); - for ( i = 0; i < N; i++ ) { - y = workspace[ i ]; - e = expected[ off+i ]; - t.strictEqual( isAlmostSameValue( y, e, ulps ), true, 'within '+ulps+' ULPs. N: '+N+'. y: '+y+'. E: '+e ); - } - } - t.end(); -}); - -tape( 'the function correctly initializes twiddle factors (small sequence lengths)', function test( t ) { - var workspace; - var expected; - var lengths; - var offsets; - var ulps; - var off; - var y; - var e; - var N; - var i; - var k; - - lengths = small.lengths; - offsets = small.offsets; - expected = small.twiddles; - - ulps = 1; - for ( k = 0; k < lengths.length; k++ ) { - N = lengths[ k ]; - off = offsets[ k ]; - workspace = new Float64Array( ( 3*N ) + 34 ); - sinqi( N, workspace, 1, 0 ); - - t.strictEqual( workspace[ (2*N) - 1 ], 0.0, 'returns expected value' ); - for ( i = 0; i < N; i++ ) { - y = workspace[ (2*N) + i ]; - e = expected[ off+i ]; - t.strictEqual( isAlmostSameValue( y, e, ulps ), true, 'within '+ulps+' ULPs. N: '+N+'. y: '+y+'. E: '+e ); - } - } - t.end(); -}); - -tape( 'the function correctly initializes cosine values (medium sequence lengths)', function test( t ) { - var workspace; - var expected; - var lengths; - var offsets; - var ulps; - var off; - var y; - var e; - var N; - var i; - var k; - - lengths = medium.lengths; - offsets = medium.offsets; - expected = medium.cosines; - - ulps = 1; - for ( k = 0; k < lengths.length; k++ ) { - N = lengths[ k ]; - off = offsets[ k ]; - workspace = new Float64Array( ( 3*N ) + 34 ); - sinqi( N, workspace, 1, 0 ); - - t.strictEqual( workspace[ N ], 0.0, 'returns expected value' ); - for ( i = 0; i < N; i++ ) { - y = workspace[ i ]; - e = expected[ off+i ]; - t.strictEqual( isAlmostSameValue( y, e, ulps ), true, 'within '+ulps+' ULPs. N: '+N+'. y: '+y+'. E: '+e ); - } - } - t.end(); -}); - -tape( 'the function correctly initializes twiddle factors (medium sequence lengths)', function test( t ) { - var workspace; - var expected; - var lengths; - var offsets; - var ulps; - var off; - var y; - var e; - var N; - var i; - var k; - - lengths = medium.lengths; - offsets = medium.offsets; - expected = medium.twiddles; - - ulps = 1; - for ( k = 0; k < lengths.length; k++ ) { - N = lengths[ k ]; - off = offsets[ k ]; - workspace = new Float64Array( ( 3*N ) + 34 ); - sinqi( N, workspace, 1, 0 ); - - t.strictEqual( workspace[ (2*N) - 1 ], 0.0, 'returns expected value' ); - for ( i = 0; i < N; i++ ) { - y = workspace[ (2*N) + i ]; - e = expected[ off+i ]; - t.strictEqual( isAlmostSameValue( y, e, ulps ), true, 'within '+ulps+' ULPs. N: '+N+'. y: '+y+'. E: '+e ); - } - } - t.end(); -}); - -tape( 'the function correctly initializes cosine values (large sequence lengths)', function test( t ) { - var workspace; - var expected; - var lengths; - var offsets; - var ulps; - var off; - var y; - var e; - var N; - var i; - var k; - - lengths = large.lengths; - offsets = large.offsets; - expected = large.cosines; - - ulps = 1; - for ( k = 0; k < lengths.length; k++ ) { - N = lengths[ k ]; - off = offsets[ k ]; - workspace = new Float64Array( ( 3*N ) + 34 ); - sinqi( N, workspace, 1, 0 ); - - t.strictEqual( workspace[ N ], 0.0, 'returns expected value' ); - for ( i = 0; i < N; i++ ) { - y = workspace[ i ]; - e = expected[ off+i ]; - t.strictEqual( isAlmostSameValue( y, e, ulps ), true, 'within '+ulps+' ULPs. N: '+N+'. y: '+y+'. E: '+e ); - } - } - t.end(); -}); - -tape( 'the function correctly initializes twiddle factors (large sequence lengths)', function test( t ) { - var workspace; - var expected; - var lengths; - var offsets; - var ulps; - var off; - var y; - var e; - var N; - var i; - var k; - - lengths = large.lengths; - offsets = large.offsets; - expected = large.twiddles; - - ulps = 1; - for ( k = 0; k < lengths.length; k++ ) { - N = lengths[ k ]; - off = offsets[ k ]; - workspace = new Float64Array( ( 3*N ) + 34 ); - sinqi( N, workspace, 1, 0 ); - - t.strictEqual( workspace[ (2*N) - 1 ], 0.0, 'returns expected value' ); - for ( i = 0; i < N; i++ ) { - y = workspace[ (2*N) + i ]; - e = expected[ off+i ]; - t.strictEqual( isAlmostSameValue( y, e, ulps ), true, 'within '+ulps+' ULPs. N: '+N+'. y: '+y+'. E: '+e ); - } - } - t.end(); -}); - -tape( 'the function does not modify the scratch region of the workspace', function test( t ) { - var workspace; - var N; - var i; - - N = 8; - workspace = new Float64Array( ( 3*N ) + 34 ); - - for ( i = 0; i < workspace.length; i++ ) { - workspace[ i ] = i + 1.0; - } - sinqi( N, workspace, 1, 0 ); - for ( i = N; i < 2*N; i++ ) { - t.strictEqual( workspace[ i ], i + 1.0, 'returns expected value' ); - } - t.end(); -}); - -tape( 'the function correctly handles stride and offset parameters', function test( t ) { - var workspace; - var expected; - var stride; - var offset; - var nf; - var N; - var i; - - N = 8; - stride = 2; - offset = 3; - workspace = new Float64Array( offset + ( ( ( 3*N ) + 34 ) * stride ) ); - - sinqi( N, workspace, stride, offset ); - - t.strictEqual( workspace[ offset + ( 3*N * stride ) ], N, 'returns expected value' ); - - nf = workspace[ offset + ( ( ( 3*N ) + 1 ) * stride ) ]; - t.strictEqual( nf, 2, 'returns expected value' ); - t.strictEqual( workspace[ offset + ( ( ( 3*N ) + 2 ) * stride ) ], 2, 'returns expected value' ); - t.strictEqual( workspace[ offset + ( ( ( 3*N ) + 3 ) * stride ) ], 4, 'returns expected value' ); - - expected = new Float64Array( ( 3*N ) + 34 ); - sinqi( N, expected, 1, 0 ); - - for ( i = 0; i < N; i++ ) { - t.strictEqual( workspace[ offset + ( ( (2*N)+i ) * stride ) ], expected[ (2*N)+i ], 'returns expected value' ); - } - t.end(); -}); From 7a181d88eff96d98e14328a37459bcfbc5241c9a Mon Sep 17 00:00:00 2001 From: Gunj Joshi Date: Tue, 18 Aug 2026 13:42:10 +0530 Subject: [PATCH 29/32] feat: add `fft/base/fftpack/generic/rfftf` Ref: https://github.com/stdlib-js/metr-issue-tracker/issues/1165 --- type: pre_commit_static_analysis_report description: Results of running static analysis checks when committing changes. report: - task: lint_filenames status: passed - task: lint_editorconfig status: passed - task: lint_markdown_pkg_readmes status: passed - task: lint_markdown_docs status: na - task: lint_markdown status: na - task: lint_package_json status: passed - task: lint_repl_help status: passed - task: lint_javascript_src status: passed - task: lint_javascript_cli status: na - task: lint_javascript_examples status: passed - task: lint_javascript_tests status: passed - task: lint_javascript_benchmarks status: passed - task: lint_python status: na - task: lint_r status: na - task: lint_c_src status: na - task: lint_c_examples status: na - task: lint_c_benchmarks status: na - task: lint_c_tests_fixtures status: passed - task: lint_shell status: na - task: lint_typescript_declarations status: passed - task: lint_typescript_tests status: passed - task: lint_license_headers status: passed --- --- .../fft/base/fftpack/generic/rfftf/README.md | 160 ++++ .../generic/rfftf/benchmark/benchmark.js | 138 ++++ .../base/fftpack/generic/rfftf/docs/repl.txt | 56 ++ .../generic/rfftf/docs/types/index.d.ts | 56 ++ .../fftpack/generic/rfftf/docs/types/test.ts | 148 ++++ .../fftpack/generic/rfftf/examples/index.js | 38 + .../base/fftpack/generic/rfftf/lib/index.js | 49 ++ .../base/fftpack/generic/rfftf/lib/main.js | 115 +++ .../base/fftpack/generic/rfftf/lib/radf2.js | 366 +++++++++ .../base/fftpack/generic/rfftf/lib/radf3.js | 401 +++++++++ .../base/fftpack/generic/rfftf/lib/radf4.js | 492 +++++++++++ .../base/fftpack/generic/rfftf/lib/radf5.js | 511 ++++++++++++ .../base/fftpack/generic/rfftf/lib/radfg.js | 765 ++++++++++++++++++ .../base/fftpack/generic/rfftf/lib/rfftf1.js | 181 +++++ .../base/fftpack/generic/rfftf/package.json | 62 ++ .../rfftf/test/fixtures/c/fftpack/Makefile | 138 ++++ .../rfftf/test/fixtures/c/fftpack/large.json | 1 + .../rfftf/test/fixtures/c/fftpack/medium.json | 1 + .../rfftf/test/fixtures/c/fftpack/runner.c | 318 ++++++++ .../rfftf/test/fixtures/c/fftpack/small.json | 1 + .../base/fftpack/generic/rfftf/test/test.js | 387 +++++++++ 21 files changed, 4384 insertions(+) create mode 100644 lib/node_modules/@stdlib/fft/base/fftpack/generic/rfftf/README.md create mode 100644 lib/node_modules/@stdlib/fft/base/fftpack/generic/rfftf/benchmark/benchmark.js create mode 100644 lib/node_modules/@stdlib/fft/base/fftpack/generic/rfftf/docs/repl.txt create mode 100644 lib/node_modules/@stdlib/fft/base/fftpack/generic/rfftf/docs/types/index.d.ts create mode 100644 lib/node_modules/@stdlib/fft/base/fftpack/generic/rfftf/docs/types/test.ts create mode 100644 lib/node_modules/@stdlib/fft/base/fftpack/generic/rfftf/examples/index.js create mode 100644 lib/node_modules/@stdlib/fft/base/fftpack/generic/rfftf/lib/index.js create mode 100644 lib/node_modules/@stdlib/fft/base/fftpack/generic/rfftf/lib/main.js create mode 100644 lib/node_modules/@stdlib/fft/base/fftpack/generic/rfftf/lib/radf2.js create mode 100644 lib/node_modules/@stdlib/fft/base/fftpack/generic/rfftf/lib/radf3.js create mode 100644 lib/node_modules/@stdlib/fft/base/fftpack/generic/rfftf/lib/radf4.js create mode 100644 lib/node_modules/@stdlib/fft/base/fftpack/generic/rfftf/lib/radf5.js create mode 100644 lib/node_modules/@stdlib/fft/base/fftpack/generic/rfftf/lib/radfg.js create mode 100644 lib/node_modules/@stdlib/fft/base/fftpack/generic/rfftf/lib/rfftf1.js create mode 100644 lib/node_modules/@stdlib/fft/base/fftpack/generic/rfftf/package.json create mode 100644 lib/node_modules/@stdlib/fft/base/fftpack/generic/rfftf/test/fixtures/c/fftpack/Makefile create mode 100644 lib/node_modules/@stdlib/fft/base/fftpack/generic/rfftf/test/fixtures/c/fftpack/large.json create mode 100644 lib/node_modules/@stdlib/fft/base/fftpack/generic/rfftf/test/fixtures/c/fftpack/medium.json create mode 100644 lib/node_modules/@stdlib/fft/base/fftpack/generic/rfftf/test/fixtures/c/fftpack/runner.c create mode 100644 lib/node_modules/@stdlib/fft/base/fftpack/generic/rfftf/test/fixtures/c/fftpack/small.json create mode 100644 lib/node_modules/@stdlib/fft/base/fftpack/generic/rfftf/test/test.js diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/generic/rfftf/README.md b/lib/node_modules/@stdlib/fft/base/fftpack/generic/rfftf/README.md new file mode 100644 index 000000000000..d295b19c6db9 --- /dev/null +++ b/lib/node_modules/@stdlib/fft/base/fftpack/generic/rfftf/README.md @@ -0,0 +1,160 @@ + + +# rfftf + +> Compute the forward discrete Fourier transform (DFT) of a real-valued sequence. + + + +
+ +
+ + + + + +
+ +## Usage + +```javascript +var rfftf = require( '@stdlib/fft/base/fftpack/generic/rfftf' ); +``` + +#### rfftf( N, r, strideR, offsetR, w, strideW, offsetW ) + +Computes the forward discrete Fourier transform (DFT) of a real-valued sequence. + +```javascript +var Float64Array = require( '@stdlib/array/float64' ); +var rffti = require( '@stdlib/fft/base/fftpack/generic/rffti' ); + +var N = 4; +var w = new Float64Array( ( 2*N ) + 34 ); + +rffti( N, w, 1, 0 ); + +var r = new Float64Array( [ 1.0, 2.0, 3.0, 4.0 ] ); + +rfftf( N, r, 1, 0, w, 1, 0 ); + +// r => [ 10.0, -2.0, 2.0, -2.0 ] +``` + +The function accepts the following arguments: + +- **N**: length of the sequence to transform. The function is most efficient when this value is a product of small prime numbers. +- **r**: input array. +- **strideR**: stride length for `r`. +- **offsetR**: starting index for `r`. +- **w**: workspace array containing pre-computed values. +- **strideW**: stride length for `w`. +- **offsetW**: starting index for `w`. + +
+ + + + + +
+ +## Notes + +- Before calling this function, initialize the workspace by calling [`rffti`][@stdlib/fft/base/fftpack/generic/rffti] with the same sequence length and workspace layout. + +- The function performs the transform in-place (i.e., the input array is **mutated**). + +- For `N = 4`, the output + + ```text + [ 10.0, -2.0, 2.0, -2.0 ] + ``` + + corresponds to a zero-frequency term `10.0`, a complex coefficient `-2.0 + 2.0i` at frequency `1`, and a Nyquist term `-2.0`. + +- If `N` equals `1`, the function returns early without modifying the input, as a single data point is its own Fourier transform. + +- This transform is unnormalized as a call to this function followed by a call performing a [backward transform][@stdlib/fft/base/fftpack/rfftb] will multiply the input array by `N`. + +
+ + + +
+ +## Examples + + + +```javascript +var zeros = require( '@stdlib/array/zeros' ); +var discreteUniform = require( '@stdlib/random/array/discrete-uniform' ); +var rffti = require( '@stdlib/fft/base/fftpack/generic/rffti' ); +var rfftf = require( '@stdlib/fft/base/fftpack/generic/rfftf' ); + +var N = 4; +var opts = { + 'dtype': 'float64' +}; +var r = discreteUniform( N, -10, 10, opts ); +var w = zeros( ( 2*N ) + 34 ); + +console.log( r ); + +rffti( N, w, 1, 0 ); +rfftf( N, r, 1, 0, w, 1, 0 ); + +console.log( r ); +``` + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/generic/rfftf/benchmark/benchmark.js b/lib/node_modules/@stdlib/fft/base/fftpack/generic/rfftf/benchmark/benchmark.js new file mode 100644 index 000000000000..a4ee0166fc0a --- /dev/null +++ b/lib/node_modules/@stdlib/fft/base/fftpack/generic/rfftf/benchmark/benchmark.js @@ -0,0 +1,138 @@ +/** +* @license Apache-2.0 +* +* Copyright (c) 2026 The Stdlib Authors. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +'use strict'; + +// MODULES // + +var bench = require( '@stdlib/bench' ); +var slice = require( '@stdlib/array/slice' ); +var uniform = require( '@stdlib/random/array/uniform' ); +var floor = require( '@stdlib/math/base/special/floor' ); +var pow = require( '@stdlib/math/base/special/pow' ); +var format = require( '@stdlib/string/format' ); +var isnan = require( '@stdlib/math/base/assert/is-nan' ); +var Float64Array = require( '@stdlib/array/float64' ); +var dcopy = require( '@stdlib/blas/base/dcopy' ); +var rffti = require( '@stdlib/fft/base/fftpack/generic/rffti' ); +var pkg = require( './../package.json' ).name; +var rfftf = require( './../lib' ); + + +// VARIABLES // + +var options = { + 'dtype': 'float64' +}; + + +// FUNCTIONS // + +/** +* Creates a benchmark function. +* +* @private +* @param {PositiveInteger} iter - number of iterations +* @param {PositiveInteger} N - sequence length +* @returns {Function} benchmark function +*/ +function createBenchmark( iter, N ) { + var w; + var x; + var i; + + x = []; + for ( i = 0; i < iter; i++ ) { + x.push( uniform( N, -100.0, 100.0, options ) ); + } + w = new Float64Array( ( 2*N ) + 34 ); + rffti( N, w, 1, 0 ); + return benchmark; + + /** + * Benchmark function. + * + * @private + * @param {Benchmark} b - benchmark instance + */ + function benchmark( b ) { + var xc; + var y; + var i; + + xc = slice( x ); + for ( i = 0; i < iter; i++ ) { + xc[ i ] = dcopy( N, x[ i ], 1, new Float64Array( N ), 1 ); + } + b.tic(); + for ( i = 0; i < b.iterations; i++ ) { + y = rfftf( N, xc[ i ], 1, 0, w, 1, 0 ); + if ( isnan( y[ i%N ] ) ) { + b.fail( 'should not return NaN' ); + } + } + b.toc(); + if ( isnan( y[ i%N ] ) ) { + b.fail( 'should not return NaN' ); + } + b.pass( 'benchmark finished' ); + b.end(); + } +} + + +// MAIN // + +/** +* Main execution sequence. +* +* @private +*/ +function main() { + var lengths; + var opts; + var iter; + var N; + var f; + var i; + + lengths = [ + 8, + 16, + 32, + 64, + 128, + 256, + 512, + 1024 + ]; + + iter = 1e6; + + for ( i = 0; i < lengths.length; i++ ) { + N = lengths[ i ]; + f = createBenchmark( iter, N ); + opts = { + 'iterations': iter + }; + bench( format( '%s:N=%d', pkg, N ), opts, f ); + iter = floor( pow( iter, 3.0/4.0 ) ); + } +} + +main(); diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/generic/rfftf/docs/repl.txt b/lib/node_modules/@stdlib/fft/base/fftpack/generic/rfftf/docs/repl.txt new file mode 100644 index 000000000000..b09f9ec4542f --- /dev/null +++ b/lib/node_modules/@stdlib/fft/base/fftpack/generic/rfftf/docs/repl.txt @@ -0,0 +1,56 @@ + +{{alias}}( N, r, strideR, offsetR, w, strideW, offsetW ) + Computes the forward discrete Fourier transform (DFT) of a real-valued + sequence. + + Before calling this function, one must first initialize the workspace array + using the corresponding initialization function with the same sequence + length and workspace layout. + + This transform is unnormalized as a call to this function followed by a call + performing a backward transform will multiply the input array by `N`. + + Parameters + ---------- + N: integer + Length of the sequence to transform. The function is most efficient when + this value is a product of small prime numbers. + + r: ArrayLikeObject + Input array. + + strideR: integer + Stride length for `r`. + + offsetR: integer + Starting index for `r`. + + w: ArrayLikeObject + Workspace array containing pre-computed values. + + strideW: integer + Stride length for `w`. + + offsetW: integer + Starting index for `w`. + + Returns + ------- + r: ArrayLikeObject + Input array. + + Examples + -------- + > var N = 4; + > var r = new {{alias:@stdlib/array/float64}}( [ 1.0, 2.0, 3.0, 4.0 ] ); + > var w = new {{alias:@stdlib/array/float64}}( ( 2*N ) + 34 ); + > {{alias:@stdlib/fft/base/fftpack/generic/rffti}}( N, w, 1, 0 ) + + > var out = {{alias}}( N, r, 1, 0, w, 1, 0 ) + [ 10.0, -2.0, 2.0, -2.0 ] + > var bool = ( out === r ) + true + + See Also + -------- + diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/generic/rfftf/docs/types/index.d.ts b/lib/node_modules/@stdlib/fft/base/fftpack/generic/rfftf/docs/types/index.d.ts new file mode 100644 index 000000000000..4bc72a5c96a0 --- /dev/null +++ b/lib/node_modules/@stdlib/fft/base/fftpack/generic/rfftf/docs/types/index.d.ts @@ -0,0 +1,56 @@ +/* +* @license Apache-2.0 +* +* Copyright (c) 2026 The Stdlib Authors. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +// TypeScript Version: 4.1 + +/// + +import { Collection } from '@stdlib/types/array'; + +/** +* Computes the forward discrete Fourier transform (DFT) of a real-valued sequence. +* +* @param N - length of the sequence to transform +* @param r - input array +* @param strideR - stride length for `r` +* @param offsetR - starting index for `r` +* @param w - workspace array containing pre-computed values +* @param strideW - stride length for `w` +* @param offsetW - starting index for `w` +* @returns input array +* +* @example +* var Float64Array = require( '@stdlib/array/float64' ); +* var rffti = require( '@stdlib/fft/base/fftpack/generic/rffti' ); +* +* var N = 4; +* +* var w = new Float64Array( ( 2*N ) + 34 ); +* rffti( N, w, 1, 0 ); +* +* var r = new Float64Array( [ 1.0, 2.0, 3.0, 4.0 ] ); +* +* rfftf( N, r, 1, 0, w, 1, 0 ); +* // r => [ 10.0, -2.0, 2.0, -2.0 ] +*/ +declare function rfftf>( N: number, r: T, strideR: number, offsetR: number, w: Collection, strideW: number, offsetW: number ): T; + + +// EXPORTS // + +export = rfftf; diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/generic/rfftf/docs/types/test.ts b/lib/node_modules/@stdlib/fft/base/fftpack/generic/rfftf/docs/types/test.ts new file mode 100644 index 000000000000..9ad7c70784d6 --- /dev/null +++ b/lib/node_modules/@stdlib/fft/base/fftpack/generic/rfftf/docs/types/test.ts @@ -0,0 +1,148 @@ +/* +* @license Apache-2.0 +* +* Copyright (c) 2026 The Stdlib Authors. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +import rfftf = require( './index' ); + + +// TESTS // + +// The function returns a collection... +{ + const r = new Float64Array( 4 ); + const w = new Float64Array( ( 2*4 ) + 34 ); + + rfftf( 4, r, 1, 0, w, 1, 0 ); // $ExpectType Float64Array +} + +// The compiler throws an error if the function is provided a first argument which is not a number... +{ + const r = new Float64Array( 4 ); + const w = new Float64Array( ( 2*4 ) + 34 ); + + rfftf( '4', r, 1, 0, w, 1, 0 ); // $ExpectError + rfftf( true, r, 1, 0, w, 1, 0 ); // $ExpectError + rfftf( false, r, 1, 0, w, 1, 0 ); // $ExpectError + rfftf( null, r, 1, 0, w, 1, 0 ); // $ExpectError + rfftf( void 0, r, 1, 0, w, 1, 0 ); // $ExpectError + rfftf( [], r, 1, 0, w, 1, 0 ); // $ExpectError + rfftf( {}, r, 1, 0, w, 1, 0 ); // $ExpectError + rfftf( ( x: number ): number => x, r, 1, 0, w, 1, 0 ); // $ExpectError +} + +// The compiler throws an error if the function is provided a second argument which is not a collection... +{ + const w = new Float64Array( ( 2*4 ) + 34 ); + + rfftf( 4, '4', 1, 0, w, 1, 0 ); // $ExpectError + rfftf( 4, 4, 1, 0, w, 1, 0 ); // $ExpectError + rfftf( 4, true, 1, 0, w, 1, 0 ); // $ExpectError + rfftf( 4, false, 1, 0, w, 1, 0 ); // $ExpectError + rfftf( 4, null, 1, 0, w, 1, 0 ); // $ExpectError + rfftf( 4, void 0, 1, 0, w, 1, 0 ); // $ExpectError + rfftf( 4, {}, 1, 0, w, 1, 0 ); // $ExpectError + rfftf( 4, ( x: number ): number => x, 1, 0, w, 1, 0 ); // $ExpectError +} + +// The compiler throws an error if the function is provided a third argument which is not a number... +{ + const r = new Float64Array( 4 ); + const w = new Float64Array( ( 2*4 ) + 34 ); + + rfftf( 4, r, '1', 0, w, 1, 0 ); // $ExpectError + rfftf( 4, r, true, 0, w, 1, 0 ); // $ExpectError + rfftf( 4, r, false, 0, w, 1, 0 ); // $ExpectError + rfftf( 4, r, null, 0, w, 1, 0 ); // $ExpectError + rfftf( 4, r, void 0, 0, w, 1, 0 ); // $ExpectError + rfftf( 4, r, [], 0, w, 1, 0 ); // $ExpectError + rfftf( 4, r, {}, 0, w, 1, 0 ); // $ExpectError + rfftf( 4, r, ( x: number ): number => x, 0, w, 1, 0 ); // $ExpectError +} + +// The compiler throws an error if the function is provided a fourth argument which is not a number... +{ + const r = new Float64Array( 4 ); + const w = new Float64Array( ( 2*4 ) + 34 ); + + rfftf( 4, r, 1, '0', w, 1, 0 ); // $ExpectError + rfftf( 4, r, 1, true, w, 1, 0 ); // $ExpectError + rfftf( 4, r, 1, false, w, 1, 0 ); // $ExpectError + rfftf( 4, r, 1, null, w, 1, 0 ); // $ExpectError + rfftf( 4, r, 1, void 0, w, 1, 0 ); // $ExpectError + rfftf( 4, r, 1, [], w, 1, 0 ); // $ExpectError + rfftf( 4, r, 1, {}, w, 1, 0 ); // $ExpectError + rfftf( 4, r, 1, ( x: number ): number => x, w, 1, 0 ); // $ExpectError +} + +// The compiler throws an error if the function is provided a fifth argument which is not a collection... +{ + const r = new Float64Array( 4 ); + + rfftf( 4, r, 1, 0, '42', 1, 0 ); // $ExpectError + rfftf( 4, r, 1, 0, 42, 1, 0 ); // $ExpectError + rfftf( 4, r, 1, 0, true, 1, 0 ); // $ExpectError + rfftf( 4, r, 1, 0, false, 1, 0 ); // $ExpectError + rfftf( 4, r, 1, 0, null, 1, 0 ); // $ExpectError + rfftf( 4, r, 1, 0, void 0, 1, 0 ); // $ExpectError + rfftf( 4, r, 1, 0, {}, 1, 0 ); // $ExpectError + rfftf( 4, r, 1, 0, ( x: number ): number => x, 1, 0 ); // $ExpectError +} + +// The compiler throws an error if the function is provided a sixth argument which is not a number... +{ + const r = new Float64Array( 4 ); + const w = new Float64Array( ( 2*4 ) + 34 ); + + rfftf( 4, r, 1, 0, w, '1', 0 ); // $ExpectError + rfftf( 4, r, 1, 0, w, true, 0 ); // $ExpectError + rfftf( 4, r, 1, 0, w, false, 0 ); // $ExpectError + rfftf( 4, r, 1, 0, w, null, 0 ); // $ExpectError + rfftf( 4, r, 1, 0, w, void 0, 0 ); // $ExpectError + rfftf( 4, r, 1, 0, w, [], 0 ); // $ExpectError + rfftf( 4, r, 1, 0, w, {}, 0 ); // $ExpectError + rfftf( 4, r, 1, 0, w, ( x: number ): number => x, 0 ); // $ExpectError +} + +// The compiler throws an error if the function is provided a seventh argument which is not a number... +{ + const r = new Float64Array( 4 ); + const w = new Float64Array( ( 2*4 ) + 34 ); + + rfftf( 4, r, 1, 0, w, 1, '0' ); // $ExpectError + rfftf( 4, r, 1, 0, w, 1, true ); // $ExpectError + rfftf( 4, r, 1, 0, w, 1, false ); // $ExpectError + rfftf( 4, r, 1, 0, w, 1, null ); // $ExpectError + rfftf( 4, r, 1, 0, w, 1, void 0 ); // $ExpectError + rfftf( 4, r, 1, 0, w, 1, [] ); // $ExpectError + rfftf( 4, r, 1, 0, w, 1, {} ); // $ExpectError + rfftf( 4, r, 1, 0, w, 1, ( x: number ): number => x ); // $ExpectError +} + +// The compiler throws an error if the function is provided an unsupported number of arguments... +{ + const r = new Float64Array( 4 ); + const w = new Float64Array( ( 2*4 ) + 34 ); + + rfftf(); // $ExpectError + rfftf( 4 ); // $ExpectError + rfftf( 4, r ); // $ExpectError + rfftf( 4, r, 1 ); // $ExpectError + rfftf( 4, r, 1, 0 ); // $ExpectError + rfftf( 4, r, 1, 0, w ); // $ExpectError + rfftf( 4, r, 1, 0, w, 1 ); // $ExpectError + rfftf( 4, r, 1, 0, w, 1, 0, 123 ); // $ExpectError +} diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/generic/rfftf/examples/index.js b/lib/node_modules/@stdlib/fft/base/fftpack/generic/rfftf/examples/index.js new file mode 100644 index 000000000000..9d00f237c710 --- /dev/null +++ b/lib/node_modules/@stdlib/fft/base/fftpack/generic/rfftf/examples/index.js @@ -0,0 +1,38 @@ +/** +* @license Apache-2.0 +* +* Copyright (c) 2026 The Stdlib Authors. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +'use strict'; + +var zeros = require( '@stdlib/array/zeros' ); +var discreteUniform = require( '@stdlib/random/array/discrete-uniform' ); +var rffti = require( '@stdlib/fft/base/fftpack/generic/rffti' ); +var rfftf = require( './../lib' ); + +var N = 4; +var opts = { + 'dtype': 'float64' +}; +var r = discreteUniform( N, -10, 10, opts ); +var w = zeros( ( 2*N ) + 34 ); + +console.log( r ); + +rffti( N, w, 1, 0 ); +rfftf( N, r, 1, 0, w, 1, 0 ); + +console.log( r ); diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/generic/rfftf/lib/index.js b/lib/node_modules/@stdlib/fft/base/fftpack/generic/rfftf/lib/index.js new file mode 100644 index 000000000000..a5b70b4d7403 --- /dev/null +++ b/lib/node_modules/@stdlib/fft/base/fftpack/generic/rfftf/lib/index.js @@ -0,0 +1,49 @@ +/** +* @license Apache-2.0 +* +* Copyright (c) 2026 The Stdlib Authors. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +'use strict'; + +/** +* Compute the forward discrete Fourier transform (DFT) of a real-valued sequence. +* +* @module @stdlib/fft/base/fftpack/generic/rfftf +* +* @example +* var Float64Array = require( '@stdlib/array/float64' ); +* var rffti = require( '@stdlib/fft/base/fftpack/generic/rffti' ); +* var rfftf = require( '@stdlib/fft/base/fftpack/generic/rfftf' ); +* +* var N = 4; +* +* var w = new Float64Array( ( 2*N ) + 34 ); +* rffti( N, w, 1, 0 ); +* +* var r = new Float64Array( [ 1.0, 2.0, 3.0, 4.0 ] ); +* +* rfftf( N, r, 1, 0, w, 1, 0 ); +* // r => [ 10.0, -2.0, 2.0, -2.0 ] +*/ + +// MODULES // + +var main = require( './main.js' ); + + +// EXPORTS // + +module.exports = main; diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/generic/rfftf/lib/main.js b/lib/node_modules/@stdlib/fft/base/fftpack/generic/rfftf/lib/main.js new file mode 100644 index 000000000000..e8c894731ae9 --- /dev/null +++ b/lib/node_modules/@stdlib/fft/base/fftpack/generic/rfftf/lib/main.js @@ -0,0 +1,115 @@ +/** +* @license Apache-2.0 +* +* Copyright (c) 2026 The Stdlib Authors. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +* +* ## Notice +* +* The original C code and copyright notice are from the [PFFFT library]{@link https://github.com/marton78/pffft/blob/0b4ee12c4ba45a4a8e567550c16d96d1679f50ce/src/fftpack.c}. The implementation follows the original, but has been modified for JavaScript. +* +* ```text +* Copyright (c) 2004 the University Corporation for Atmospheric +* Research ("UCAR"). All rights reserved. Developed by NCAR's +* Computational and Information Systems Laboratory, UCAR, +* www.cisl.ucar.edu. +* +* Redistribution and use of the Software in source and binary forms, +* with or without modification, is permitted provided that the +* following conditions are met: +* +* - Neither the names of NCAR's Computational and Information Systems +* Laboratory, the University Corporation for Atmospheric Research, +* nor the names of its sponsors or contributors may be used to +* endorse or promote products derived from this Software without +* specific prior written permission. +* +* - Redistributions of source code must retain the above copyright +* notices, this list of conditions, and the disclaimer below. +* +* - Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions, and the disclaimer below in the +* documentation and/or other materials provided with the +* distribution. +* +* THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +* EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO THE WARRANTIES OF +* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +* NONINFRINGEMENT. IN NO EVENT SHALL THE CONTRIBUTORS OR COPYRIGHT +* HOLDERS BE LIABLE FOR ANY CLAIM, INDIRECT, INCIDENTAL, SPECIAL, +* EXEMPLARY, OR CONSEQUENTIAL DAMAGES OR OTHER LIABILITY, WHETHER IN AN +* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE +* SOFTWARE. +* ``` +*/ + +'use strict'; + +// MODULES // + +var rfftf1 = require( './rfftf1.js' ); + + +// MAIN // + +/** +* Computes the forward discrete Fourier transform (DFT) of a real-valued sequence. +* +* @param {NonNegativeInteger} N - length of the sequence to transform +* @param {Collection} r - input array +* @param {integer} strideR - stride length for `r` +* @param {NonNegativeInteger} offsetR - starting index for `r` +* @param {Collection} w - workspace array containing pre-computed values +* @param {integer} strideW - stride length for `w` +* @param {NonNegativeInteger} offsetW - starting index for `w` +* @returns {Collection} input array +* +* @example +* var Float64Array = require( '@stdlib/array/float64' ); +* var rffti = require( '@stdlib/fft/base/fftpack/generic/rffti' ); +* +* var N = 4; +* +* var w = new Float64Array( ( 2*N ) + 34 ); +* rffti( N, w, 1, 0 ); +* +* var r = new Float64Array( [ 1.0, 2.0, 3.0, 4.0 ] ); +* +* rfftf( N, r, 1, 0, w, 1, 0 ); +* // r => [ 10.0, -2.0, 2.0, -2.0 ] +*/ +function rfftf( N, r, strideR, offsetR, w, strideW, offsetW ) { + var offsetT; + var offsetF; + + // When a sub-sequence is a single data point, the FFT is the identity, so no transformation necessary... + if ( N === 1 ) { + return r; + } + + // Resolve the starting indices for storing twiddle factors and factorization results: + offsetT = offsetW + ( N * strideW ); // index offset for twiddle factors + offsetF = offsetT + ( N * strideW ); // index offset for factors describing the sub-transforms + + rfftf1( N, r, strideR, offsetR, w, strideW, offsetW, w, strideW, offsetT, w, strideW, offsetF ); // eslint-disable-line max-len + + return r; +} + + +// EXPORTS // + +module.exports = rfftf; diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/generic/rfftf/lib/radf2.js b/lib/node_modules/@stdlib/fft/base/fftpack/generic/rfftf/lib/radf2.js new file mode 100644 index 000000000000..875c85e8bff7 --- /dev/null +++ b/lib/node_modules/@stdlib/fft/base/fftpack/generic/rfftf/lib/radf2.js @@ -0,0 +1,366 @@ +/** +* @license Apache-2.0 +* +* Copyright (c) 2026 The Stdlib Authors. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +* +* ## Notice +* +* The original C code and copyright notice are from the [PFFFT library]{@link https://github.com/marton78/pffft/blob/0b4ee12c4ba45a4a8e567550c16d96d1679f50ce/src/fftpack.c}. The implementation follows the original, but has been modified for JavaScript. +* +* ```text +* Copyright (c) 2004 the University Corporation for Atmospheric +* Research ("UCAR"). All rights reserved. Developed by NCAR's +* Computational and Information Systems Laboratory, UCAR, +* www.cisl.ucar.edu. +* +* Redistribution and use of the Software in source and binary forms, +* with or without modification, is permitted provided that the +* following conditions are met: +* +* - Neither the names of NCAR's Computational and Information Systems +* Laboratory, the University Corporation for Atmospheric Research, +* nor the names of its sponsors or contributors may be used to +* endorse or promote products derived from this Software without +* specific prior written permission. +* +* - Redistributions of source code must retain the above copyright +* notices, this list of conditions, and the disclaimer below. +* +* - Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions, and the disclaimer below in the +* documentation and/or other materials provided with the +* distribution. +* +* THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +* EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO THE WARRANTIES OF +* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +* NONINFRINGEMENT. IN NO EVENT SHALL THE CONTRIBUTORS OR COPYRIGHT +* HOLDERS BE LIABLE FOR ANY CLAIM, INDIRECT, INCIDENTAL, SPECIAL, +* EXEMPLARY, OR CONSEQUENTIAL DAMAGES OR OTHER LIABILITY, WHETHER IN AN +* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE +* SOFTWARE. +* ``` +*/ + +/* eslint-disable max-len */ + +'use strict'; + +// FUNCTIONS // + +/** +* Resolves an index into the input array. +* +* ## Notes +* +* In a forward real FFT, the previous stage writes its results as two "rows" per sub-sequence. +* +* Thus, when reading from an input array stored in linear memory, we can reinterpret the array as a three-dimensional logical view containing `L` independent sub-sequences having two "rows" (`even + odd` and `even - odd`, respectively) and where each "row" is arranged as `M*L` contiguous elements corresponding to interleaved real and imaginary components. +* +* Accordingly, the following is a logical view of an input array (zero-based indexing) which contains `L = 3` transforms and in which each sub-sequence has length `M = 4`: +* +* ```text +* │ k = 0 k = 1 k = 2 +* │ ──────────────────────────────────────────────────────────────────────────→ k +* j = 0 (even+odd) │ cc(0,0,0) ... cc(3,0,0) cc(0,1,0) ... cc(3,1,0) cc(0,2,0) ... cc(3,2,0) +* │ +* j = 1 (even-odd) │ cc(0,0,1) ... cc(3,0,1) cc(0,1,1) ... cc(3,1,1) cc(0,2,1) ... cc(3,2,1) +* └───────────────────────────────────────────────────────────────────────────→ i +* ↑ ↑ ↑ ↑ ↑ ↑ +* i = 0 M-1 0 M-1 0 M-1 +* ``` +* +* In the above, +* +* - `i` is the fastest varying index, which walks within one short sub-sequence corresponding to either the `even + odd` or `even - odd` row. +* - `j` selects between the `even + odd` and `even - odd` row. +* - `k` specifies the index of one of the `L` independent transforms we are processing. +* +* In linear memory, the three-dimensional logical view is arranged as follows: +* +* ```text +* | cc(0,0,0)...cc(3,0,0) ... cc(0,2,0)...cc(3,2,0) | cc(0,0,1)...cc(3,0,1) ... cc(0,2,1)...cc(3,2,1) | +* ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ +* 0 M-1 LM LM-1 (L+1)M (L+1)M-1 (2L-1)M 2LM-1 +* ``` +* +* @private +* @param {NonNegativeInteger} i - index of an element within a sub-sequence +* @param {NonNegativeInteger} k - index of the sub-sequence being transformed +* @param {NonNegativeInteger} j - input row +* @param {NonNegativeInteger} L - number of sub-sequences +* @param {NonNegativeInteger} M - sub-sequence length +* @param {integer} stride - stride length of the input array +* @param {NonNegativeInteger} offset - index specifying the first indexed element in the input array +* @returns {NonNegativeInteger} computed index +* +* @example +* var stride = 1; +* var offset = 0; +* +* var M = 4; // sub-sequence length +* var L = 3; // number of sub-sequences +* +* var idx = iptr( 0, 0, 0, L, M, stride, offset ); +* // returns 0 +* +* idx = iptr( 1, 0, 0, L, M, stride, offset ); +* // returns 1 +* +* idx = iptr( M-1, 0, 0, L, M, stride, offset ); +* // returns 3 +* +* idx = iptr( 0, 1, 0, L, M, stride, offset ); +* // returns 4 +* +* // ... +* +* idx = iptr( M-1, L-1, 1, L, M, stride, offset ); +* // returns 23 +*/ +function iptr( i, k, j, L, M, stride, offset ) { + var n = i + ( ( k+(j*L) ) * M ); + return ( n*stride ) + offset; +} + +/** +* Resolves an index into the output array. +* +* ## Notes +* +* When writing to an output array stored in linear memory, we can reinterpret the array as a three-dimensional logical view containing `L` independent sub-sequences having two "columns" corresponding to the even and odd half-spectrum of a folded complex vector (with real and imaginary parts of each half-spectrum interleaved along each sub-sequence) and where each "column" has `M` elements. +* +* Accordingly, the following is a logical view of an output array (zero-based indexing) which contains `L = 3` transforms and in which each "column" sub-sequence has length `M = 4`: +* +* ```text +* j = 0 ("even" column) j = 1 ("odd" column) +* k = 0 ─┬───────────────────────────────────────┬───────────────────────────────────────┐ +* │ out(0,0,0) out(1,0,0) ... out(3,0,0) │ out(0,1,0) out(1,1,0) ... out(3,1,0) │ +* └───────────────────────────────────────┴───────────────────────────────────────┤ +* k = 1 ─┬───────────────────────────────────────┬───────────────────────────────────────┤ +* │ out(0,0,1) out(1,0,1) ... out(3,0,1) │ out(0,1,1) out(1,1,1) ... out(3,1,1) │ +* └───────────────────────────────────────┴───────────────────────────────────────┤ +* k = 2 ─┬───────────────────────────────────────┬───────────────────────────────────────┤ +* │ out(0,0,2) out(1,0,2) ... out(3,0,2) │ out(0,1,2) out(1,1,2) ... out(3,1,2) │ +* └───────────────────────────────────────┴───────────────────────────────────────┘ +* ↑ ↑ ↑ ↑ ↑ ↑ +* i = 0 1 M-1 0 1 M-1 +* ``` +* +* In the above, +* +* - `i` is the fastest varying index, which walks within one short "column" sub-sequence. +* - `j` selects between the even (0) and odd (1) column. +* - `k` specifies the index of one of the `L` independent transforms we are processing. +* +* In linear memory, the three-dimensional logical view is arranged as follows: +* +* ```text +* | out(0,0,0)...out(3,0,0) | out(0,1,0)...out(3,1,0) | out(0,0,1)...out(3,0,1) | ... | out(0,1,2)...out(3,1,2) | +* ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ +* 0 M-1 M 2M-1 2M 3M-1 (2L-1)M 2LM-1 +* ``` +* +* As may be observed, when resolving an index in the output array, the `j` and `k` dimensions are swapped relative index resolution in the input array. This stems from `radf2` being only one stage in a multi-stage driver which alternates between using `cc` and `out` as workspace buffers. After each stage, the next stage reads what the previous stage wrote. +* +* Each stage expects a transpose, and, in order to avoid explicit transposition between the stages, we swap the last two logical dimensions while still maintaining cache locality within the inner loop logical dimension, as indexed by `i`. +* +* @private +* @param {NonNegativeInteger} i - index of an element within a sub-sequence +* @param {NonNegativeInteger} j - index specifying which of the two complex halves we are in (either `0` or `1`) +* @param {NonNegativeInteger} k - index of the sub-sequence being transformed +* @param {NonNegativeInteger} M - sub-sequence length +* @param {integer} stride - stride length of the output array +* @param {NonNegativeInteger} offset - index specifying the first indexed element in the output array +* @returns {NonNegativeInteger} computed index +* +* @example +* var stride = 1; +* var offset = 0; +* +* var M = 4; // sub-sequence length +* var L = 3; // number of sub-sequences +* +* var idx = optr( 0, 0, 0, M, stride, offset ); +* // returns 0 +* +* idx = optr( 1, 0, 0, M, stride, offset ); +* // returns 1 +* +* idx = optr( M-1, 0, 0, M, stride, offset ); +* // returns 3 +* +* idx = optr( 0, 1, 0, M, stride, offset ); +* // returns 4 +* +* // ... +* +* idx = optr( M-1, 1, L-1, M, stride, offset ); +* // returns 23 +*/ +function optr( i, j, k, M, stride, offset ) { + var n = i + ( ( j+(k*2) ) * M ); + return ( n*stride ) + offset; +} + + +// MAIN // + +/** +* Performs one radix-2 stage within a forward Fourier transform for a real-valued sequence. +* +* @private +* @param {NonNegativeInteger} M - number of elements in each sub-sequence to be transformed +* @param {NonNegativeInteger} L - number of sub-sequences to be transformed +* @param {Collection} cc - input array containing the sub-sequences to be transformed +* @param {integer} sc - stride length for `cc` +* @param {NonNegativeInteger} oc - index offset for `cc` +* @param {Collection} out - output array containing transformed sub-sequences +* @param {integer} so - stride length for `out` +* @param {NonNegativeInteger} oo - index offset for `out` +* @param {Collection} twiddles - array containing twiddle factors +* @param {integer} st - stride length for `twiddles` +* @param {NonNegativeInteger} ot - index offset for `twiddles` +* @returns {void} +*/ +function radf2( M, L, cc, sc, oc, out, so, oo, twiddles, st, ot ) { // eslint-disable-line max-params + var tr2; + var ti2; + var ip1; + var ip2; + var it1; + var it2; + var io; + var im; + var i; + var k; + + /* + * First, perform the core butterfly for each sub-sequence being transformed. + * + * In the following loop, we handle harmonic `n = 0` for every transform. As described for `iptr`, the input array is interpreted as a three-dimensional array, containing two "rows" per sub-sequence. + * + * row0 = even + odd (j = 0) + * row1 = even - odd (j = 1) + * + * For a radix-2 forward FFT of a real-valued signal `x` and `n = 0`, + * + * x[0] = row0 + row1 = 2⋅even + * x[M] = row0 - row1 = 2⋅odd + * + * Because `W_2^0 = 1`, no twiddle multiplication is necessary. + */ + for ( k = 0; k < L; k++ ) { + ip1 = iptr( 0, k, 0, L, M, sc, oc ); // real part row 0 + ip2 = iptr( 0, k, 1, L, M, sc, oc ); // real part row 1 + + io = optr( 0, 0, k, M, so, oo ); + out[ io ] = cc[ ip1 ] + cc[ ip2 ]; // even + odd + + io = optr( M-1, 1, k, M, so, oo ); + out[ io ] = cc[ ip1 ] - cc[ ip2 ]; // even - odd + } + // When the number of elements in a sub-sequence is less than `2`, there is nothing more to do, as the above butterfly produced the full result... + if ( M < 2 ) { + return; + } + /* + * Next, apply the general case where we need to loop through the non-trivial harmonics. + * + * For each harmonic `n = 1, ..., M/2-1`, we need to + * + * - recover even/odd spectra from the two input rows. + * - multiply the odd part by the twiddle factor `W_n = cos(θ) - j sin(θ)`. + * - form the following + * + * x[2n] = E_n + W_n⋅O_n => column 0 + * x[2n+1] = E_n - W_n⋅O_n => column 1 + * + * The mirror index `im = M - i` selects the conjugate-symmetric partner, thus allowing the routine to read each symmetry pair only once. + */ + if ( M >= 3 ) { + // Loop over each sub-sequence to be transformed... + for ( k = 0; k < L; k++ ) { + // Loop over the elements in each sub-sequence... + for ( i = 2; i < M; i += 2 ) { + im = M - i; // "mirror" index + + // Resolve twiddle factor indices: + it1 = ( (i-2)*st ) + ot; // cos(θ) + it2 = ( (i-1)*st ) + ot; // sin(θ) + + // Load the `even-odd` row... + ip1 = iptr( i-1, k, 1, L, M, sc, oc ); // c = Re(row1) + ip2 = iptr( i, k, 1, L, M, sc, oc ); // d = Im(row1) + + // eslint-disable-next-line stdlib/capitalized-comments, stdlib/empty-line-before-comment + // tmp = W_n ⋅ (c + j⋅d) + tr2 = ( twiddles[ it1 ] * cc[ ip1 ] ) + ( twiddles[ it2 ] * cc[ ip2 ] ); // Re(tmp) + ti2 = ( twiddles[ it1 ] * cc[ ip2 ] ) - ( twiddles[ it2 ] * cc[ ip1 ] ); // Im(tmp) + + // Load the `even+odd` row... + ip1 = iptr( i, k, 0, L, M, sc, oc ); // b = Im(row0) + io = optr( i, 0, k, M, so, oo ); // Im(x[2n]) + out[ io ] = cc[ ip1 ] + ti2; + + io = optr( im, 1, k, M, so, oo ); // Im(x[2n+1]) + out[ io ] = ti2 - cc[ ip1 ]; + + ip1 = iptr( i-1, k, 0, L, M, sc, oc ); // a = Re(row0) + io = optr( i-1, 0, k, M, so, oo ); // Re(x[2n]) + out[ io ] = cc[ ip1 ] + tr2; + + io = optr( im-1, 1, k, M, so, oo ); // Re(x[2n+1]) + out[ io ] = cc[ ip1 ] - tr2; + } + } + // When `M` is odd, there is no Nyquist pair to process, so we do not need to perform any further transformations... + if ( M%2 === 1 ) { + return; + } + } + /* + * Lastly, handle the Nyquist frequency where `i = M-1` (i.e., the last element of each sub-sequence). + * + * When `M` is even, the Nyquist index is `i = M/2`. In this stage, we've stored that element at the end of each sub-sequence (i.e., `i = M-1` in the packed layout). + * + * At this point, the cosine term is -1 and the sine term is 0, so the twiddle multiplication collapses to simple addition/subtraction. + * + * In this case, + * + * W_n⋅O_n = ±Re(O_n) + * + * where + * + * row0 = Re(E_n) + * row1 = -Re(O_n) + */ + for ( k = 0; k < L; k++ ) { + ip1 = iptr( M-1, k, 1, L, M, sc, oc ); // -Re(O_n) + io = optr( 0, 1, k, M, so, oo ); + out[ io ] = -cc[ ip1 ]; // -(-Re(O_n)) = Re(O_n) + + ip1 = iptr( M-1, k, 0, L, M, sc, oc ); // Re(E_n) + io = optr( M-1, 0, k, M, so, oo ); + out[ io ] = cc[ ip1 ]; + } +} + + +// EXPORTS // + +module.exports = radf2; diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/generic/rfftf/lib/radf3.js b/lib/node_modules/@stdlib/fft/base/fftpack/generic/rfftf/lib/radf3.js new file mode 100644 index 000000000000..fa93eb19c6bf --- /dev/null +++ b/lib/node_modules/@stdlib/fft/base/fftpack/generic/rfftf/lib/radf3.js @@ -0,0 +1,401 @@ +/** +* @license Apache-2.0 +* +* Copyright (c) 2026 The Stdlib Authors. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +* +* ## Notice +* +* The original C code and copyright notice are from the [PFFFT library]{@link https://github.com/marton78/pffft/blob/0b4ee12c4ba45a4a8e567550c16d96d1679f50ce/src/fftpack.c}. The implementation follows the original, but has been modified for JavaScript. +* +* ```text +* Copyright (c) 2004 the University Corporation for Atmospheric +* Research ("UCAR"). All rights reserved. Developed by NCAR's +* Computational and Information Systems Laboratory, UCAR, +* www.cisl.ucar.edu. +* +* Redistribution and use of the Software in source and binary forms, +* with or without modification, is permitted provided that the +* following conditions are met: +* +* - Neither the names of NCAR's Computational and Information Systems +* Laboratory, the University Corporation for Atmospheric Research, +* nor the names of its sponsors or contributors may be used to +* endorse or promote products derived from this Software without +* specific prior written permission. +* +* - Redistributions of source code must retain the above copyright +* notices, this list of conditions, and the disclaimer below. +* +* - Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions, and the disclaimer below in the +* documentation and/or other materials provided with the +* distribution. +* +* THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +* EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO THE WARRANTIES OF +* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +* NONINFRINGEMENT. IN NO EVENT SHALL THE CONTRIBUTORS OR COPYRIGHT +* HOLDERS BE LIABLE FOR ANY CLAIM, INDIRECT, INCIDENTAL, SPECIAL, +* EXEMPLARY, OR CONSEQUENTIAL DAMAGES OR OTHER LIABILITY, WHETHER IN AN +* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE +* SOFTWARE. +* ``` +*/ + +/* eslint-disable max-len */ + +'use strict'; + +// VARIABLES // + +// cos( 2π/3 ): +var TAUR = -0.5; + +// sin( 2π/3 ): +var TAUI = 0.866025403784439; + + +// FUNCTIONS // + +/** +* Resolves an index into the input array. +* +* ## Notes +* +* In a forward real FFT, the previous stage writes its results as three "rows" per sub-sequence. +* +* Thus, when reading from an input array stored in linear memory, we can reinterpret the array as a three-dimensional logical view containing `L` independent sub-sequences having three "rows" (components 0, 1, and 2) and where each "row" is arranged as `M*L` contiguous elements corresponding to interleaved real and imaginary components. +* +* Accordingly, the following is a logical view of an input array (zero-based indexing) which contains `L = 3` transforms and in which each sub-sequence has length `M = 4`: +* +* ```text +* │ k = 0 k = 1 k = 2 +* │ ──────────────────────────────────────────────────────────────────────────→ k +* j = 0 │ cc(0,0,0) ... cc(3,0,0) cc(0,1,0) ... cc(3,1,0) cc(0,2,0) ... cc(3,2,0) +* │ +* j = 1 │ cc(0,0,1) ... cc(3,0,1) cc(0,1,1) ... cc(3,1,1) cc(0,2,1) ... cc(3,2,1) +* │ +* j = 2 │ cc(0,0,2) ... cc(3,0,2) cc(0,1,2) ... cc(3,1,2) cc(0,2,2) ... cc(3,2,2) +* └───────────────────────────────────────────────────────────────────────────→ i +* ↑ ↑ ↑ ↑ ↑ ↑ +* i = 0 M-1 0 M-1 0 M-1 +* ``` +* +* In the above, +* +* - `i` is the fastest varying index, which walks within one short sub-sequence corresponding to one of the three component rows. +* - `j` selects between the three component rows (0, 1, or 2). +* - `k` specifies the index of one of the `L` independent transforms we are processing. +* +* In linear memory, the three-dimensional logical view is arranged as follows: +* +* ```text +* | cc(0,0,0)...cc(3,0,0) ... cc(0,2,0)...cc(3,2,0) | cc(0,0,1)...cc(3,0,1) ... cc(0,2,1)...cc(3,2,1) | cc(0,0,2)...cc(3,0,2) ... cc(0,2,2)...cc(3,2,2) | +* ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ +* 0 M-1 LM LM-1 (L+1)M (L+1)M-1 (2L-1)M 2LM-1 2LM (2L+1)M-1 (3L-1)M 3LM-1 +* ``` +* +* @private +* @param {NonNegativeInteger} i - index of an element within a sub-sequence +* @param {NonNegativeInteger} k - index of the sub-sequence being transformed +* @param {NonNegativeInteger} j - input row +* @param {NonNegativeInteger} L - number of sub-sequences +* @param {NonNegativeInteger} M - sub-sequence length +* @param {integer} stride - stride length of the input array +* @param {NonNegativeInteger} offset - index specifying the first indexed element in the input array +* @returns {NonNegativeInteger} computed index +* +* @example +* var stride = 1; +* var offset = 0; +* +* var M = 4; // sub-sequence length +* var L = 3; // number of sub-sequences +* +* var idx = iptr( 0, 0, 0, L, M, stride, offset ); +* // returns 0 +* +* idx = iptr( 1, 0, 0, L, M, stride, offset ); +* // returns 1 +* +* idx = iptr( M-1, 0, 0, L, M, stride, offset ); +* // returns 3 +* +* idx = iptr( 0, 1, 0, L, M, stride, offset ); +* // returns 4 +* +* // ... +* +* idx = iptr( M-1, L-1, 1, L, M, stride, offset ); +* // returns 23 +*/ +function iptr( i, k, j, L, M, stride, offset ) { + var n = i + ( ( k+(j*L) ) * M ); + return ( n*stride ) + offset; +} + +/** +* Resolves an index into the output array. +* +* ## Notes +* +* When writing to an output array stored in linear memory, we can reinterpret the array as a three-dimensional logical view containing `L` independent sub-sequences having three "columns" corresponding to the three components of a radix-3 stage (with real and imaginary parts of each component interleaved along each sub-sequence) and where each "column" has `M` elements. +* +* Accordingly, the following is a logical view of an output array (zero-based indexing) which contains `L = 3` transforms and in which each "column" sub-sequence has length `M = 4`: +* +* ```text +* j = 0 (component 0) j = 1 (component 1) j = 2 (component 2) +* k = 0 ─┬───────────────────────────────────────┬───────────────────────────────────────┬───────────────────────────────────────┐ +* │ out(0,0,0) out(1,0,0) ... out(3,0,0) │ out(0,1,0) out(1,1,0) ... out(3,1,0) │ out(0,2,0) out(1,2,0) ... out(3,2,0) │ +* └───────────────────────────────────────┴───────────────────────────────────────┴───────────────────────────────────────┤ +* k = 1 ─┬───────────────────────────────────────┬───────────────────────────────────────┬───────────────────────────────────────┤ +* │ out(0,0,1) out(1,0,1) ... out(3,0,1) │ out(0,1,1) out(1,1,1) ... out(3,1,1) │ out(0,2,1) out(1,2,1) ... out(3,2,1) │ +* └───────────────────────────────────────┴───────────────────────────────────────┴───────────────────────────────────────┤ +* k = 2 ─┬───────────────────────────────────────┬───────────────────────────────────────┬───────────────────────────────────────┤ +* │ out(0,0,2) out(1,0,2) ... out(3,0,2) │ out(0,1,2) out(1,1,2) ... out(3,1,2) │ out(0,2,2) out(1,2,2) ... out(3,2,2) │ +* └───────────────────────────────────────┴───────────────────────────────────────┴───────────────────────────────────────┘ +* ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ +* i = 0 1 M-1 0 1 M-1 0 1 M-1 +* ``` +* +* In the above, +* +* - `i` is the fastest varying index, which walks within one short "column" sub-sequence. +* - `j` selects between one of the three components (0, 1, or 2). +* - `k` specifies the index of one of the `L` independent transforms we are processing. +* +* In linear memory, the three-dimensional logical view is arranged as follows: +* +* ```text +* | out(0,0,0)...out(3,0,0) | out(0,1,0)...out(3,1,0) | out(0,2,0)...out(3,2,0) | out(0,0,1)...out(3,0,1) | ... | out(0,2,2)...out(3,2,2) | +* ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ +* 0 M-1 M 2M-1 2M 3M-1 3M 4M-1 (3L-1)M 3LM-1 +* ``` +* +* As may be observed, when resolving an index in the output array, the `j` and `k` dimensions are swapped relative index resolution in the input array. This stems from `radf3` being only one stage in a multi-stage driver which alternates between using `cc` and `out` as workspace buffers. After each stage, the next stage reads what the previous stage wrote. +* +* Each stage expects a transpose, and, in order to avoid explicit transposition between the stages, we swap the last two logical dimensions while still maintaining cache locality within the inner loop logical dimension, as indexed by `i`. +* +* @private +* @param {NonNegativeInteger} i - index of an element within a sub-sequence +* @param {NonNegativeInteger} j - index specifying which of the three complex components we are in (0, 1, or 2) +* @param {NonNegativeInteger} k - index of the sub-sequence being transformed +* @param {NonNegativeInteger} M - sub-sequence length +* @param {integer} stride - stride length of the output array +* @param {NonNegativeInteger} offset - index specifying the first indexed element in the output array +* @returns {NonNegativeInteger} computed index +* +* @example +* var stride = 1; +* var offset = 0; +* +* var M = 4; // sub-sequence length +* var L = 3; // number of sub-sequences +* +* var idx = optr( 0, 0, 0, M, stride, offset ); +* // returns 0 +* +* idx = optr( 1, 0, 0, M, stride, offset ); +* // returns 1 +* +* idx = optr( M-1, 0, 0, M, stride, offset ); +* // returns 3 +* +* idx = optr( 0, 1, 0, M, stride, offset ); +* // returns 4 +* +* // ... +* +* idx = optr( M-1, 2, L-1, M, stride, offset ); +* // returns 35 +*/ +function optr( i, j, k, M, stride, offset ) { + var n = i + ( ( j+(k*3) ) * M ); + return ( n*stride ) + offset; +} + + +// MAIN // + +/** +* Performs one radix-3 stage within a forward Fourier transform for a real-valued sequence. +* +* @private +* @param {NonNegativeInteger} M - number of elements in each sub-sequence to be transformed +* @param {NonNegativeInteger} L - number of sub-sequences to be transformed +* @param {Collection} cc - input array containing the sub-sequences to be transformed +* @param {integer} sc - stride length for `cc` +* @param {NonNegativeInteger} oc - index offset for `cc` +* @param {Collection} out - output array containing transformed sub-sequences +* @param {integer} so - stride length for `out` +* @param {NonNegativeInteger} oo - index offset for `out` +* @param {Collection} twiddles1 - first array containing twiddle factors +* @param {integer} st1 - stride length for `twiddles1` +* @param {NonNegativeInteger} ot1 - index offset for `twiddles1` +* @param {Collection} twiddles2 - second array containing twiddle factors +* @param {integer} st2 - stride length for `twiddles2` +* @param {NonNegativeInteger} ot2 - index offset for `twiddles2` +* @returns {void} +*/ +function radf3( M, L, cc, sc, oc, out, so, oo, twiddles1, st1, ot1, twiddles2, st2, ot2 ) { // eslint-disable-line max-params + var it11; + var it12; + var it21; + var it22; + var tr2; + var ti2; + var tr3; + var ti3; + var cr2; + var ci2; + var dr2; + var di2; + var dr3; + var di3; + var ip1; + var ip2; + var ip3; + var io; + var im; + var i; + var k; + + /* + * First, perform the core butterfly for each sub-sequence being transformed. + * + * In the following loop, we handle harmonic `n = 0` for every transform. As described for `iptr`, the input array is interpreted as a three-dimensional array, containing three "rows" per sub-sequence. + * + * row0 = input component 0 (j = 0) + * row1 = input component 1 (j = 1) + * row2 = input component 2 (j = 2) + * + * For a radix-3 forward FFT of a real-valued signal `x` and `n = 0`, + * + * taur = cos(2π/3) + * taui = sin(2π/3) + * + * x[0] = row0 + row1 + row2 + * x[2M] = taui * ( row2-row1 ) + * x[M] = row0 + ( taur * ( row1+row2 ) ) + * + * Because `W_3^0 = 1`, no twiddle multiplication is necessary beyond these constant factors (`taur` and `taui`). + */ + for ( k = 0; k < L; k++ ) { + ip1 = iptr( 0, k, 0, L, M, sc, oc ); // real part row 0 + ip2 = iptr( 0, k, 1, L, M, sc, oc ); // real part row 1 + ip3 = iptr( 0, k, 2, L, M, sc, oc ); // real part row 2 + + cr2 = cc[ ip2 ] + cc[ ip3 ]; + + io = optr( 0, 0, k, M, so, oo ); + out[ io ] = cc[ ip1 ] + cr2; // row0 + row1 + row2 + + io = optr( 0, 2, k, M, so, oo ); + out[ io ] = TAUI * ( cc[ ip3 ] - cc[ ip2 ] ); // taui * ( row2-row1 ) + + io = optr( M-1, 1, k, M, so, oo ); + out[ io ] = cc[ ip1 ] + ( TAUR * cr2 ); // row0 + ( taur * ( row1+row2 ) ) + } + // When the number of elements in a sub-sequence is less than `2`, there is nothing more to do, as the above butterfly produced the full result... + if ( M < 2 ) { + return; + } + /* + * Next, apply the general case where we need to loop through the non-trivial harmonics. + * + * For each harmonic `n = 1, ..., M/2-1`, we need to + * + * - recover three spectra from the three input rows. + * - apply radix-3 twiddle factors to rows 1 and 2, then combine with row 0 to form three output columns. + * - form the following + * + * x[3n] = X₀ + (W₁⋅X₁ + W₂⋅X₂) => column 0 + * x[3n+1] = X₀ + taur⋅(W₁⋅X₁ + W₂⋅X₂) + taui⋅i⋅(W₁⋅X₁ - W₂⋅X₂) => column 2 + * x[3n+2] = X₀ + taur⋅(W₁⋅X₁ + W₂⋅X₂) - taui⋅i⋅(W₁⋅X₁ - W₂⋅X₂) => column 1 + * + * The mirror index `im = M - i` selects the conjugate-symmetric partner, thus allowing the routine to read each symmetry pair only once. + */ + // Loop over each sub-sequence to be transformed... + for ( k = 0; k < L; k++ ) { + // Loop over the elements in each sub-sequence... + for ( i = 2; i < M; i += 2 ) { + im = M - i; // "mirror" index + + // Resolve twiddle factor indices for component 1: + it11 = ( (i-2)*st1 ) + ot1; // cos(θ) for component 1 + it12 = ( (i-1)*st1 ) + ot1; // sin(θ) for component 1 + + // Resolve twiddle factor indices for component 2: + it21 = ( (i-2)*st2 ) + ot2; // cos(θ) for component 2 + it22 = ( (i-1)*st2 ) + ot2; // sin(θ) for component 2 + + // Load component 1 data... + ip1 = iptr( i-1, k, 1, L, M, sc, oc ); // real part component 1 + ip2 = iptr( i, k, 1, L, M, sc, oc ); // imag part component 1 + + // Apply twiddle factor for component 1: + dr2 = ( twiddles1[ it11 ] * cc[ ip1 ] ) + ( twiddles1[ it12 ] * cc[ ip2 ] ); + di2 = ( twiddles1[ it11 ] * cc[ ip2 ] ) - ( twiddles1[ it12 ] * cc[ ip1 ] ); + + // Load component 2 data... + ip1 = iptr( i-1, k, 2, L, M, sc, oc ); // real part component 2 + ip2 = iptr( i, k, 2, L, M, sc, oc ); // imag part component 2 + + // Apply twiddle factor for component 2: + dr3 = ( twiddles2[ it21 ] * cc[ ip1 ] ) + ( twiddles2[ it22 ] * cc[ ip2 ] ); + di3 = ( twiddles2[ it21 ] * cc[ ip2 ] ) - ( twiddles2[ it22 ] * cc[ ip1 ] ); + + // Combine the twiddled components: + cr2 = dr2 + dr3; // sum of real parts + ci2 = di2 + di3; // sum of imag parts + + // Load component 0 data... + ip1 = iptr( i-1, k, 0, L, M, sc, oc ); // real part component 0 + io = optr( i-1, 0, k, M, so, oo ); + out[ io ] = cc[ ip1 ] + cr2; + + ip2 = iptr( i, k, 0, L, M, sc, oc ); // imag part component 0 + io = optr( i, 0, k, M, so, oo ); + out[ io ] = cc[ ip2 ] + ci2; + + // Intermediate results for components 1 and 2: + tr2 = cc[ ip1 ] + ( TAUR * cr2 ); + ti2 = cc[ ip2 ] + ( TAUR * ci2 ); + tr3 = TAUI * ( di2 - di3 ); + ti3 = TAUI * ( dr3 - dr2 ); + + // Output component 1: + io = optr( i-1, 2, k, M, so, oo ); + out[ io ] = tr2 + tr3; + + io = optr( im-1, 1, k, M, so, oo ); + out[ io ] = tr2 - tr3; + + // Output component 2: + io = optr( i, 2, k, M, so, oo ); + out[ io ] = ti2 + ti3; + + io = optr( im, 1, k, M, so, oo ); + out[ io ] = ti3 - ti2; + } + } +} + + +// EXPORTS // + +module.exports = radf3; diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/generic/rfftf/lib/radf4.js b/lib/node_modules/@stdlib/fft/base/fftpack/generic/rfftf/lib/radf4.js new file mode 100644 index 000000000000..49e12bd33210 --- /dev/null +++ b/lib/node_modules/@stdlib/fft/base/fftpack/generic/rfftf/lib/radf4.js @@ -0,0 +1,492 @@ +/** +* @license Apache-2.0 +* +* Copyright (c) 2026 The Stdlib Authors. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +* +* ## Notice +* +* The original C code and copyright notice are from the [PFFFT library]{@link https://github.com/marton78/pffft/blob/0b4ee12c4ba45a4a8e567550c16d96d1679f50ce/src/fftpack.c}. The implementation follows the original, but has been modified for JavaScript. +* +* ```text +* Copyright (c) 2004 the University Corporation for Atmospheric +* Research ("UCAR"). All rights reserved. Developed by NCAR's +* Computational and Information Systems Laboratory, UCAR, +* www.cisl.ucar.edu. +* +* Redistribution and use of the Software in source and binary forms, +* with or without modification, is permitted provided that the +* following conditions are met: +* +* - Neither the names of NCAR's Computational and Information Systems +* Laboratory, the University Corporation for Atmospheric Research, +* nor the names of its sponsors or contributors may be used to +* endorse or promote products derived from this Software without +* specific prior written permission. +* +* - Redistributions of source code must retain the above copyright +* notices, this list of conditions, and the disclaimer below. +* +* - Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions, and the disclaimer below in the +* documentation and/or other materials provided with the +* distribution. +* +* THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +* EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO THE WARRANTIES OF +* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +* NONINFRINGEMENT. IN NO EVENT SHALL THE CONTRIBUTORS OR COPYRIGHT +* HOLDERS BE LIABLE FOR ANY CLAIM, INDIRECT, INCIDENTAL, SPECIAL, +* EXEMPLARY, OR CONSEQUENTIAL DAMAGES OR OTHER LIABILITY, WHETHER IN AN +* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE +* SOFTWARE. +* ``` +*/ + +/* eslint-disable max-len, max-statements */ + +'use strict'; + +// MODULES // + +var SQRT_HALF = require( '@stdlib/constants/float64/sqrt-half' ); + + +// FUNCTIONS // + +/** +* Resolves an index into the input array. +* +* ## Notes +* +* In a forward real FFT, the previous stage writes its results as four "rows" per sub-sequence. +* +* Thus, when reading from an input array stored in linear memory, we can reinterpret the array as a three-dimensional logical view containing `L` independent sub-sequences having four "rows" (components 0, 1, 2, and 3) and where each "row" is arranged as `M*L` contiguous elements corresponding to interleaved real and imaginary components. +* +* Accordingly, the following is a logical view of an input array (zero-based indexing) which contains `L = 3` transforms and in which each sub-sequence has length `M = 4`: +* +* ```text +* │ k = 0 k = 1 k = 2 +* │ ──────────────────────────────────────────────────────────────────────────→ k +* j = 0 │ cc(0,0,0) ... cc(3,0,0) cc(0,1,0) ... cc(3,1,0) cc(0,2,0) ... cc(3,2,0) +* │ +* j = 1 │ cc(0,0,1) ... cc(3,0,1) cc(0,1,1) ... cc(3,1,1) cc(0,2,1) ... cc(3,2,1) +* │ +* j = 2 │ cc(0,0,2) ... cc(3,0,2) cc(0,1,2) ... cc(3,1,2) cc(0,2,2) ... cc(3,2,2) +* │ +* j = 3 │ cc(0,0,3) ... cc(3,0,3) cc(0,1,3) ... cc(3,1,3) cc(0,2,3) ... cc(3,2,3) +* └───────────────────────────────────────────────────────────────────────────→ i +* ↑ ↑ ↑ ↑ ↑ ↑ +* i = 0 M-1 0 M-1 0 M-1 +* ``` +* +* In the above, +* +* - `i` is the fastest varying index, which walks within one short sub-sequence corresponding to one of the four component rows. +* - `j` selects between the four component rows (0, 1, 2, or 3). +* - `k` specifies the index of one of the `L` independent transforms we are processing. +* +* In linear memory, the three-dimensional logical view is arranged as follows: +* +* ```text +* | cc(0,0,0)...cc(3,0,0) ... cc(0,2,0)...cc(3,2,0) | cc(0,0,1)...cc(3,0,1) ... cc(0,2,1)...cc(3,2,1) | ... | cc(0,0,3)...cc(3,0,3) ... cc(0,2,3)...cc(3,2,3) | +* ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ +* 0 M-1 LM LM-1 (L+1)M (L+1)M-1 (2L-1)M 2LM-1 3LM (3L+1)M-1 (4L-1)M 4LM-1 +* ``` +* +* @private +* @param {NonNegativeInteger} i - index of an element within a sub-sequence +* @param {NonNegativeInteger} k - index of the sub-sequence being transformed +* @param {NonNegativeInteger} j - input row +* @param {NonNegativeInteger} L - number of sub-sequences +* @param {NonNegativeInteger} M - sub-sequence length +* @param {integer} stride - stride length of the input array +* @param {NonNegativeInteger} offset - index specifying the first indexed element in the input array +* @returns {NonNegativeInteger} computed index +* +* @example +* var stride = 1; +* var offset = 0; +* +* var M = 4; // sub-sequence length +* var L = 3; // number of sub-sequences +* +* var idx = iptr( 0, 0, 0, L, M, stride, offset ); +* // returns 0 +* +* idx = iptr( 1, 0, 0, L, M, stride, offset ); +* // returns 1 +* +* idx = iptr( M-1, 0, 0, L, M, stride, offset ); +* // returns 3 +* +* idx = iptr( 0, 1, 0, L, M, stride, offset ); +* // returns 4 +* +* // ... +* +* idx = iptr( M-1, L-1, 1, L, M, stride, offset ); +* // returns 23 +*/ +function iptr( i, k, j, L, M, stride, offset ) { + var n = i + ( ( k+(j*L) ) * M ); + return ( n*stride ) + offset; +} + +/** +* Resolves an index into the output array. +* +* ## Notes +* +* When writing to an output array stored in linear memory, we can reinterpret the array as a three-dimensional logical view containing `L` independent sub-sequences having four "columns" corresponding to the four components of a radix-4 stage (with real and imaginary parts of each component interleaved along each sub-sequence) and where each "column" has `M` elements. +* +* Accordingly, the following is a logical view of an output array (zero-based indexing) which contains `L = 3` transforms and in which each "column" sub-sequence has length `M = 4`: +* +* ```text +* j = 0 (component 0) j = 1 (component 1) j = 2 (component 2) j = 3 (component 3) +* k = 0 ─┬───────────────────────────────────────┬───────────────────────────────────────┬───────────────────────────────────────┬───────────────────────────────────────┐ +* │ out(0,0,0) out(1,0,0) ... out(3,0,0) │ out(0,1,0) out(1,1,0) ... out(3,1,0) │ out(0,2,0) out(1,2,0) ... out(3,2,0) │ out(0,3,0) out(1,3,0) ... out(3,3,0) │ +* └───────────────────────────────────────┴───────────────────────────────────────┴───────────────────────────────────────┴───────────────────────────────────────┤ +* k = 1 ─┬───────────────────────────────────────┬───────────────────────────────────────┬───────────────────────────────────────┬───────────────────────────────────────┤ +* │ out(0,0,1) out(1,0,1) ... out(3,0,1) │ out(0,1,1) out(1,1,1) ... out(3,1,1) │ out(0,2,1) out(1,2,1) ... out(3,2,1) │ out(0,3,1) out(1,3,1) ... out(3,3,1) │ +* └───────────────────────────────────────┴───────────────────────────────────────┴───────────────────────────────────────┴───────────────────────────────────────┤ +* k = 2 ─┬───────────────────────────────────────┬───────────────────────────────────────┬───────────────────────────────────────┬───────────────────────────────────────┤ +* │ out(0,0,2) out(1,0,2) ... out(3,0,2) │ out(0,1,2) out(1,1,2) ... out(3,1,2) │ out(0,2,2) out(1,2,2) ... out(3,2,2) │ out(0,3,2) out(1,3,2) ... out(3,3,2) │ +* └───────────────────────────────────────┴───────────────────────────────────────┴───────────────────────────────────────┴───────────────────────────────────────┘ +* ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ +* i = 0 1 M-1 0 1 M-1 0 1 M-1 0 1 M-1 +* ``` +* +* In the above, +* +* - `i` is the fastest varying index, which walks within one short "column" sub-sequence. +* - `j` selects which of the four components (0, 1, 2, or 3). +* - `k` specifies the index of one of the `L` independent transforms we are processing. +* +* In linear memory, the three-dimensional logical view is arranged as follows: +* +* ```text +* | out(0,0,0)...out(3,0,0) | out(0,1,0)...out(3,1,0) | out(0,2,0)...out(3,2,0) | out(0,3,0)...out(3,3,0) | out(0,0,1)...out(3,0,1) | ... | out(0,3,2)...out(3,3,2) | +* ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ +* 0 M-1 M 2M-1 2M 3M-1 3M 4M-1 4M 5M-1 (4L-1)M 4LM-1 +* ``` +* +* As may be observed, when resolving an index in the output array, the `j` and `k` dimensions are swapped relative index resolution in the input array. This stems from `radf4` being only one stage in a multi-stage driver which alternates between using `cc` and `out` as workspace buffers. After each stage, the next stage reads what the previous stage wrote. +* +* Each stage expects a transpose, and, in order to avoid explicit transposition between the stages, we swap the last two logical dimensions while still maintaining cache locality within the inner loop logical dimension, as indexed by `i`. +* +* @private +* @param {NonNegativeInteger} i - index of an element within a sub-sequence +* @param {NonNegativeInteger} j - index specifying which of the four complex components we are in (0, 1, 2, or 3) +* @param {NonNegativeInteger} k - index of the sub-sequence being transformed +* @param {NonNegativeInteger} M - sub-sequence length +* @param {integer} stride - stride length of the output array +* @param {NonNegativeInteger} offset - index specifying the first indexed element in the output array +* @returns {NonNegativeInteger} computed index +* +* @example +* var stride = 1; +* var offset = 0; +* +* var M = 4; // sub-sequence length +* var L = 3; // number of sub-sequences +* +* var idx = optr( 0, 0, 0, M, stride, offset ); +* // returns 0 +* +* idx = optr( 1, 0, 0, M, stride, offset ); +* // returns 1 +* +* idx = optr( M-1, 0, 0, M, stride, offset ); +* // returns 3 +* +* idx = optr( 0, 1, 0, M, stride, offset ); +* // returns 4 +* +* // ... +* +* idx = optr( M-1, 3, L-1, M, stride, offset ); +* // returns 47 +*/ +function optr( i, j, k, M, stride, offset ) { + var n = i + ( ( j+(k*4) ) * M ); + return ( n*stride ) + offset; +} + + +// MAIN // + +/** +* Performs one radix-4 stage within a forward Fourier transform for a real-valued sequence. +* +* @private +* @param {NonNegativeInteger} M - number of elements in each sub-sequence to be transformed +* @param {NonNegativeInteger} L - number of sub-sequences to be transformed +* @param {Collection} cc - input array containing the sub-sequences to be transformed +* @param {integer} sc - stride length for `cc` +* @param {NonNegativeInteger} oc - index offset for `cc` +* @param {Collection} out - output array containing transformed sub-sequences +* @param {integer} so - stride length for `out` +* @param {NonNegativeInteger} oo - index offset for `out` +* @param {Collection} twiddles1 - first array containing twiddle factors +* @param {integer} st1 - stride length for `twiddles1` +* @param {NonNegativeInteger} ot1 - index offset for `twiddles1` +* @param {Collection} twiddles2 - second array containing twiddle factors +* @param {integer} st2 - stride length for `twiddles2` +* @param {NonNegativeInteger} ot2 - index offset for `twiddles2` +* @param {Collection} twiddles3 - third array containing twiddle factors +* @param {integer} st3 - stride length for `twiddles3` +* @param {NonNegativeInteger} ot3 - index offset for `twiddles3` +* @returns {void} +*/ +function radf4( M, L, cc, sc, oc, out, so, oo, twiddles1, st1, ot1, twiddles2, st2, ot2, twiddles3, st3, ot3 ) { // eslint-disable-line max-params + var it11; + var it12; + var it21; + var it22; + var it31; + var it32; + var tr1; + var tr2; + var tr3; + var tr4; + var ti1; + var ti2; + var ti3; + var ti4; + var cr2; + var cr3; + var cr4; + var ci2; + var ci3; + var ci4; + var ip1; + var ip2; + var ip3; + var ip4; + var io; + var im; + var i; + var k; + + /* + * First, perform the core butterfly for each sub-sequence being transformed. + * + * In the following loop, we handle harmonic `n = 0` for every transform. As described for `iptr`, the input array is interpreted as a three-dimensional array, containing four "rows" per sub-sequence. + * + * row0 = input component 0 (j = 0) + * row1 = input component 1 (j = 1) + * row2 = input component 2 (j = 2) + * row3 = input component 3 (j = 3) + * + * For a radix-4 forward FFT of a real-valued signal `x` and `n = 0`, + * + * tr1 = row1 + row3 + * tr2 = row0 + row2 + * + * x[0] = tr1 + tr2 + * x[2M-1] = row0 - row2 + * x[2M] = row3 - row1 + * x[4M-1] = tr2 - tr1 + * + * Because `W_4^0 = 1`, no twiddle multiplication is necessary. + */ + for ( k = 0; k < L; k++ ) { + ip1 = iptr( 0, k, 0, L, M, sc, oc ); // real part row 0 + ip2 = iptr( 0, k, 1, L, M, sc, oc ); // real part row 1 + ip3 = iptr( 0, k, 2, L, M, sc, oc ); // real part row 2 + ip4 = iptr( 0, k, 3, L, M, sc, oc ); // real part row 3 + + tr1 = cc[ ip2 ] + cc[ ip4 ]; // row1 + row3 + tr2 = cc[ ip1 ] + cc[ ip3 ]; // row0 + row2 + + io = optr( 0, 0, k, M, so, oo ); + out[ io ] = tr1 + tr2; + + io = optr( M-1, 3, k, M, so, oo ); + out[ io ] = tr2 - tr1; + + io = optr( M-1, 1, k, M, so, oo ); + out[ io ] = cc[ ip1 ] - cc[ ip3 ]; + + io = optr( 0, 2, k, M, so, oo ); + out[ io ] = cc[ ip4 ] - cc[ ip2 ]; + } + // When the number of elements in a sub-sequence is equal to `1`, there is nothing more to do, as the above butterfly produced the full result... + if ( M < 2 ) { + return; + } + /* + * Next, apply the general case where we need to loop through the non-trivial harmonics. + * + * For each harmonic `n = 1, ..., M/2-1`, we need to + * + * - recover four spectra from the four input rows. + * - apply radix-4 twiddle factors to rows 1, 2, and 3, then combine with row 0 to form four output columns. + * - form the following + * + * x[4n] = X₀ + W₂·X₂ + (W₁·X₁ + W₃·X₃) => column 0 + * x[4n+1] = X₀ + W₂·X₂ - (W₁·X₁ + W₃·X₃) => column 3 + * x[4n+2] = X₀ - W₂·X₂ + i·(W₁·X₁ - W₃·X₃) => column 2 + * x[4n+3] = X₀ - W₂·X₂ - i·(W₁·X₁ - W₃·X₃) => column 1 + * + * The mirror index `im = M - i` selects the conjugate-symmetric partner, thus allowing the routine to read each symmetry pair only once. + */ + if ( M >= 3 ) { + // Loop over each sub-sequence to be transformed... + for ( k = 0; k < L; k++ ) { + // Loop over the elements in each sub-sequence... + for ( i = 2; i < M; i += 2 ) { + im = M - i; // "mirror" index + + // Resolve twiddle factor indices for component 1: + it11 = ( (i-2)*st1 ) + ot1; // cos(θ) for component 1 + it12 = ( (i-1)*st1 ) + ot1; // sin(θ) for component 1 + + // Resolve twiddle factor indices for component 2: + it21 = ( (i-2)*st2 ) + ot2; // cos(θ) for component 2 + it22 = ( (i-1)*st2 ) + ot2; // sin(θ) for component 2 + + // Resolve twiddle factor indices for component 3: + it31 = ( (i-2)*st3 ) + ot3; // cos(θ) for component 3 + it32 = ( (i-1)*st3 ) + ot3; // sin(θ) for component 3 + + // Load component 1 data and apply twiddle... + ip1 = iptr( i-1, k, 1, L, M, sc, oc ); // real part component 1 + ip2 = iptr( i, k, 1, L, M, sc, oc ); // imag part component 1 + + // Apply the twiddle factors for component 1: + cr2 = ( twiddles1[ it11 ] * cc[ ip1 ] ) + ( twiddles1[ it12 ] * cc[ ip2 ] ); + ci2 = ( twiddles1[ it11 ] * cc[ ip2 ] ) - ( twiddles1[ it12 ] * cc[ ip1 ] ); + + // Load component 2 data and apply twiddle... + ip1 = iptr( i-1, k, 2, L, M, sc, oc ); // real part component 2 + ip2 = iptr( i, k, 2, L, M, sc, oc ); // imag part component 2 + + // Apply the twiddle factors for component 2: + cr3 = ( twiddles2[ it21 ] * cc[ ip1 ] ) + ( twiddles2[ it22 ] * cc[ ip2 ] ); + ci3 = ( twiddles2[ it21 ] * cc[ ip2 ] ) - ( twiddles2[ it22 ] * cc[ ip1 ] ); + + // Load component 3 data and apply twiddle... + ip1 = iptr( i-1, k, 3, L, M, sc, oc ); // real part component 3 + ip2 = iptr( i, k, 3, L, M, sc, oc ); // imag part component 3 + + // Apply the twiddle factors for component 3: + cr4 = ( twiddles3[ it31 ] * cc[ ip1 ] ) + ( twiddles3[ it32 ] * cc[ ip2 ] ); + ci4 = ( twiddles3[ it31 ] * cc[ ip2 ] ) - ( twiddles3[ it32 ] * cc[ ip1 ] ); + + // Radix-4 butterfly intermediate computations: + tr1 = cr2 + cr4; + tr4 = cr4 - cr2; + ti1 = ci2 + ci4; + ti4 = ci2 - ci4; + + // Load component 0 data and compute intermediates... + ip1 = iptr( i-1, k, 0, L, M, sc, oc ); // real part component 0 + tr2 = cc[ ip1 ] + cr3; + tr3 = cc[ ip1 ] - cr3; + + ip2 = iptr( i, k, 0, L, M, sc, oc ); // imag part component 0 + ti2 = cc[ ip2 ] + ci3; + ti3 = cc[ ip2 ] - ci3; + + // Output column 0 (real part): + io = optr( i-1, 0, k, M, so, oo ); + out[ io ] = tr1 + tr2; + + // Output column 3 (real part): + io = optr( im-1, 3, k, M, so, oo ); + out[ io ] = tr2 - tr1; + + // Output column 0 (imag part): + io = optr( i, 0, k, M, so, oo ); + out[ io ] = ti1 + ti2; + + // Output column 3 (imag part): + io = optr( im, 3, k, M, so, oo ); + out[ io ] = ti1 - ti2; + + // Output column 2 (real part): + io = optr( i-1, 2, k, M, so, oo ); + out[ io ] = ti4 + tr3; + + // Output column 1 (real part): + io = optr( im-1, 1, k, M, so, oo ); + out[ io ] = tr3 - ti4; + + // Output column 2 (imag part): + io = optr( i, 2, k, M, so, oo ); + out[ io ] = tr4 + ti3; + + // Output column 1 (imag part): + io = optr( im, 1, k, M, so, oo ); + out[ io ] = tr4 - ti3; + } + } + + // When `M` is odd, there is no Nyquist pair to process, so we do not need to perform any further transformations... + if ( M%2 === 1 ) { + return; + } + } + + /* + * Lastly, handle the Nyquist frequency where `i = M-1` (i.e., the last element of each sub-sequence). + * + * When `M` is even, the Nyquist index is `i = M/2`. In this stage, we've stored that element at the end of each sub-sequence (i.e., `i = M-1` in the packed layout). + * + * At this point, only real components exist for rows 1 and 3 (imaginary parts are zero due to symmetry), and the twiddle multiplication simplifies to involve √(1/2) factors. + * + * In this case, + * + * ti1 = -√(1/2) ⋅ (row1 + row3) + * tr1 = √(1/2) ⋅ (row1 - row3) + * + * where + * + * row0 = Re(X₀) + * row1 = Re(X₁) (imaginary part is zero) + * row2 = Re(X₂) + * row3 = Re(X₃) (imaginary part is zero) + */ + for ( k = 0; k < L; k++ ) { + ip1 = iptr( M-1, k, 1, L, M, sc, oc ); // Re(X₁) + ip2 = iptr( M-1, k, 3, L, M, sc, oc ); // Re(X₃) + + ti1 = -SQRT_HALF * ( cc[ ip1 ] + cc[ ip2 ] ); + tr1 = SQRT_HALF * ( cc[ ip1 ] - cc[ ip2 ] ); + + ip3 = iptr( M-1, k, 0, L, M, sc, oc ); // Re(X₀) + ip4 = iptr( M-1, k, 2, L, M, sc, oc ); // Re(X₂) + + io = optr( M-1, 0, k, M, so, oo ); + out[ io ] = cc[ ip3 ] + tr1; + + io = optr( M-1, 2, k, M, so, oo ); + out[ io ] = cc[ ip3 ] - tr1; + + io = optr( 0, 1, k, M, so, oo ); + out[ io ] = ti1 - cc[ ip4 ]; + + io = optr( 0, 3, k, M, so, oo ); + out[ io ] = cc[ ip4 ] + ti1; + } +} + + +// EXPORTS // + +module.exports = radf4; diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/generic/rfftf/lib/radf5.js b/lib/node_modules/@stdlib/fft/base/fftpack/generic/rfftf/lib/radf5.js new file mode 100644 index 000000000000..1cbdd24536d5 --- /dev/null +++ b/lib/node_modules/@stdlib/fft/base/fftpack/generic/rfftf/lib/radf5.js @@ -0,0 +1,511 @@ +/** +* @license Apache-2.0 +* +* Copyright (c) 2026 The Stdlib Authors. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +* +* ## Notice +* +* The original C code and copyright notice are from the [PFFFT library]{@link https://github.com/marton78/pffft/blob/0b4ee12c4ba45a4a8e567550c16d96d1679f50ce/src/fftpack.c}. The implementation follows the original, but has been modified for JavaScript. +* +* ```text +* Copyright (c) 2004 the University Corporation for Atmospheric +* Research ("UCAR"). All rights reserved. Developed by NCAR's +* Computational and Information Systems Laboratory, UCAR, +* www.cisl.ucar.edu. +* +* Redistribution and use of the Software in source and binary forms, +* with or without modification, is permitted provided that the +* following conditions are met: +* +* - Neither the names of NCAR's Computational and Information Systems +* Laboratory, the University Corporation for Atmospheric Research, +* nor the names of its sponsors or contributors may be used to +* endorse or promote products derived from this Software without +* specific prior written permission. +* +* - Redistributions of source code must retain the above copyright +* notices, this list of conditions, and the disclaimer below. +* +* - Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions, and the disclaimer below in the +* documentation and/or other materials provided with the +* distribution. +* +* THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +* EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO THE WARRANTIES OF +* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +* NONINFRINGEMENT. IN NO EVENT SHALL THE CONTRIBUTORS OR COPYRIGHT +* HOLDERS BE LIABLE FOR ANY CLAIM, INDIRECT, INCIDENTAL, SPECIAL, +* EXEMPLARY, OR CONSEQUENTIAL DAMAGES OR OTHER LIABILITY, WHETHER IN AN +* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE +* SOFTWARE. +* ``` +*/ + +/* eslint-disable max-len, max-statements */ + +'use strict'; + +// VARIABLES // + +// cos( 2π/5 ): +var TR11 = 0.309016994374947; + +// sin( 2π/5 ): +var TI11 = 0.951056516295154; + +// cos( 4π/5 ): +var TR12 = -0.809016994374947; + +// sin( 4π/5 ): +var TI12 = 0.587785252292473; + + +// FUNCTIONS // + +/** +* Resolves an index into the input array. +* +* ## Notes +* +* In a forward real FFT, the previous stage writes its results as five "rows" per sub-sequence. +* +* Thus, when reading from an input array stored in linear memory, we can reinterpret the array as a three-dimensional logical view containing `L` independent sub-sequences having five "rows" (components 0, 1, 2, 3, and 4) and where each "row" is arranged as `M*L` contiguous elements corresponding to interleaved real and imaginary components. +* +* Accordingly, the following is a logical view of an input array (zero-based indexing) which contains `L = 3` transforms and in which each sub-sequence has length `M = 4`: +* +* ```text +* │ k = 0 k = 1 k = 2 +* │ ──────────────────────────────────────────────────────────────────────────→ k +* j = 0 │ cc(0,0,0) ... cc(3,0,0) cc(0,1,0) ... cc(3,1,0) cc(0,2,0) ... cc(3,2,0) +* │ +* j = 1 │ cc(0,0,1) ... cc(3,0,1) cc(0,1,1) ... cc(3,1,1) cc(0,2,1) ... cc(3,2,1) +* │ +* j = 2 │ cc(0,0,2) ... cc(3,0,2) cc(0,1,2) ... cc(3,1,2) cc(0,2,2) ... cc(3,2,2) +* │ +* j = 3 │ cc(0,0,3) ... cc(3,0,3) cc(0,1,3) ... cc(3,1,3) cc(0,2,3) ... cc(3,2,3) +* │ +* j = 4 │ cc(0,0,4) ... cc(3,0,4) cc(0,1,4) ... cc(3,1,4) cc(0,2,4) ... cc(3,2,4) +* └───────────────────────────────────────────────────────────────────────────→ i +* ↑ ↑ ↑ ↑ ↑ ↑ +* i = 0 M-1 0 M-1 0 M-1 +* ``` +* +* In the above, +* +* - `i` is the fastest varying index, which walks within one short sub-sequence corresponding to one of the five component rows. +* - `j` selects between the five component rows (0, 1, 2, 3, or 4). +* - `k` specifies the index of one of the `L` independent transforms we are processing. +* +* In linear memory, the three-dimensional logical view is arranged as follows: +* +* ```text +* | cc(0,0,0)...cc(3,0,0) ... cc(0,2,0)...cc(3,2,0) | cc(0,0,1)...cc(3,0,1) ... cc(0,2,1)...cc(3,2,1) | ... | cc(0,0,4)...cc(3,0,4) ... cc(0,2,4)...cc(3,2,4) | +* ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ +* 0 M-1 LM LM-1 (L+1)M (L+1)M-1 (2L-1)M 2LM-1 4LM (4L+1)M-1 (5L-1)M 5LM-1 +* ``` +* +* @private +* @param {NonNegativeInteger} i - index of an element within a sub-sequence +* @param {NonNegativeInteger} k - index of the sub-sequence being transformed +* @param {NonNegativeInteger} j - input row +* @param {NonNegativeInteger} L - number of sub-sequences +* @param {NonNegativeInteger} M - sub-sequence length +* @param {integer} stride - stride length of the input array +* @param {NonNegativeInteger} offset - index specifying the first indexed element in the input array +* @returns {NonNegativeInteger} computed index +* +* @example +* var stride = 1; +* var offset = 0; +* +* var M = 4; // sub-sequence length +* var L = 3; // number of sub-sequences +* +* var idx = iptr( 0, 0, 0, L, M, stride, offset ); +* // returns 0 +* +* idx = iptr( 1, 0, 0, L, M, stride, offset ); +* // returns 1 +* +* idx = iptr( M-1, 0, 0, L, M, stride, offset ); +* // returns 3 +* +* idx = iptr( 0, 1, 0, L, M, stride, offset ); +* // returns 4 +* +* // ... +* +* idx = iptr( M-1, L-1, 1, L, M, stride, offset ); +* // returns 23 +*/ +function iptr( i, k, j, L, M, stride, offset ) { + var n = i + ( ( k+(j*L) ) * M ); + return ( n*stride ) + offset; +} + +/** +* Resolves an index into the output array. +* +* ## Notes +* +* When writing to an output array stored in linear memory, we can reinterpret the array as a three-dimensional logical view containing `L` independent sub-sequences having five "columns" corresponding to the five components of a radix-5 stage (with real and imaginary parts of each component interleaved along each sub-sequence) and where each "column" has `M` elements. +* +* Accordingly, the following is a logical view of an output array (zero-based indexing) which contains `L = 3` transforms and in which each "column" sub-sequence has length `M = 4`: +* +* ```text +* j = 0 (component 0) j = 1 (component 1) j = 2 (component 2) j = 3 (component 3) j = 4 (component 4) +* k = 0 ─┬───────────────────────────────────────┬───────────────────────────────────────┬───────────────────────────────────────┬───────────────────────────────────────┬───────────────────────────────────────┐ +* │ out(0,0,0) out(1,0,0) ... out(3,0,0) │ out(0,1,0) out(1,1,0) ... out(3,1,0) │ out(0,2,0) out(1,2,0) ... out(3,2,0) │ out(0,3,0) out(1,3,0) ... out(3,3,0) │ out(0,4,0) out(1,4,0) ... out(3,4,0) │ +* └───────────────────────────────────────┴───────────────────────────────────────┴───────────────────────────────────────┴───────────────────────────────────────┴───────────────────────────────────────┤ +* k = 1 ─┬───────────────────────────────────────┬───────────────────────────────────────┬───────────────────────────────────────┬───────────────────────────────────────┬───────────────────────────────────────┤ +* │ out(0,0,1) out(1,0,1) ... out(3,0,1) │ out(0,1,1) out(1,1,1) ... out(3,1,1) │ out(0,2,1) out(1,2,1) ... out(3,2,1) │ out(0,3,1) out(1,3,1) ... out(3,3,1) │ out(0,4,1) out(1,4,1) ... out(3,4,1) │ +* └───────────────────────────────────────┴───────────────────────────────────────┴───────────────────────────────────────┴───────────────────────────────────────┴───────────────────────────────────────┤ +* k = 2 ─┬───────────────────────────────────────┬───────────────────────────────────────┬───────────────────────────────────────┬───────────────────────────────────────┬───────────────────────────────────────┤ +* │ out(0,0,2) out(1,0,2) ... out(3,0,2) │ out(0,1,2) out(1,1,2) ... out(3,1,2) │ out(0,2,2) out(1,2,2) ... out(3,2,2) │ out(0,3,2) out(1,3,2) ... out(3,3,2) │ out(0,4,2) out(1,4,2) ... out(3,4,2) │ +* └───────────────────────────────────────┴───────────────────────────────────────┴───────────────────────────────────────┴───────────────────────────────────────┴───────────────────────────────────────┘ +* ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ +* i = 0 1 M-1 0 1 M-1 0 1 M-1 0 1 M-1 0 1 M-1 +* ``` +* +* In the above, +* +* - `i` is the fastest varying index, which walks within one short "column" sub-sequence. +* - `j` selects which of the five components (0, 1, 2, 3, or 4). +* - `k` specifies the index of one of the `L` independent transforms we are processing. +* +* In linear memory, the three-dimensional logical view is arranged as follows: +* +* ```text +* | out(0,0,0)...out(3,0,0) | out(0,1,0)...out(3,1,0) | out(0,2,0)...out(3,2,0) | out(0,3,0)...out(3,3,0) | out(0,4,0)...out(3,4,0) | out(0,0,1)...out(3,0,1) | ... | out(0,4,2)...out(3,4,2) | +* ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ +* 0 M-1 M 2M-1 2M 3M-1 3M 4M-1 4M 5M-1 5M 6M-1 (5L-1)M 5LM-1 +* ``` +* +* As may be observed, when resolving an index in the output array, the `j` and `k` dimensions are swapped relative index resolution in the input array. This stems from `radf5` being only one stage in a multi-stage driver which alternates between using `cc` and `out` as workspace buffers. After each stage, the next stage reads what the previous stage wrote. +* +* Each stage expects a transpose, and, in order to avoid explicit transposition between the stages, we swap the last two logical dimensions while still maintaining cache locality within the inner loop logical dimension, as indexed by `i`. +* +* @private +* @param {NonNegativeInteger} i - index of an element within a sub-sequence +* @param {NonNegativeInteger} j - index specifying which of the five complex components we are in (0, 1, 2, 3, or 4) +* @param {NonNegativeInteger} k - index of the sub-sequence being transformed +* @param {NonNegativeInteger} M - sub-sequence length +* @param {integer} stride - stride length of the output array +* @param {NonNegativeInteger} offset - index specifying the first indexed element in the output array +* @returns {NonNegativeInteger} computed index +* +* @example +* var stride = 1; +* var offset = 0; +* +* var M = 4; // sub-sequence length +* var L = 3; // number of sub-sequences +* +* var idx = optr( 0, 0, 0, M, stride, offset ); +* // returns 0 +* +* idx = optr( 1, 0, 0, M, stride, offset ); +* // returns 1 +* +* idx = optr( M-1, 0, 0, M, stride, offset ); +* // returns 3 +* +* idx = optr( 0, 1, 0, M, stride, offset ); +* // returns 4 +* +* // ... +* +* idx = optr( M-1, 4, L-1, M, stride, offset ); +* // returns 59 +*/ +function optr( i, j, k, M, stride, offset ) { + var n = i + ( ( j+(k*5) ) * M ); + return ( n*stride ) + offset; +} + + +// MAIN // + +/** +* Performs one radix-5 stage within a forward Fourier transform for a real-valued sequence. +* +* @private +* @param {NonNegativeInteger} M - number of elements in each sub-sequence to be transformed +* @param {NonNegativeInteger} L - number of sub-sequences to be transformed +* @param {Collection} cc - input array containing the sub-sequences to be transformed +* @param {integer} sc - stride length for `cc` +* @param {NonNegativeInteger} oc - index offset for `cc` +* @param {Collection} out - output array containing transformed sub-sequences +* @param {integer} so - stride length for `out` +* @param {NonNegativeInteger} oo - index offset for `out` +* @param {Collection} twiddles1 - first array containing twiddle factors +* @param {integer} st1 - stride length for `twiddles1` +* @param {NonNegativeInteger} ot1 - index offset for `twiddles1` +* @param {Collection} twiddles2 - second array containing twiddle factors +* @param {integer} st2 - stride length for `twiddles2` +* @param {NonNegativeInteger} ot2 - index offset for `twiddles2` +* @param {Collection} twiddles3 - third array containing twiddle factors +* @param {integer} st3 - stride length for `twiddles3` +* @param {NonNegativeInteger} ot3 - index offset for `twiddles3` +* @param {Collection} twiddles4 - fourth array containing twiddle factors +* @param {integer} st4 - stride length for `twiddles4` +* @param {NonNegativeInteger} ot4 - index offset for `twiddles4` +* @returns {void} +*/ +function radf5( M, L, cc, sc, oc, out, so, oo, twiddles1, st1, ot1, twiddles2, st2, ot2, twiddles3, st3, ot3, twiddles4, st4, ot4 ) { // eslint-disable-line max-params + var it11; + var it12; + var it21; + var it22; + var it31; + var it32; + var it41; + var it42; + var ci2; + var ci3; + var ci4; + var ci5; + var cr2; + var cr3; + var cr4; + var cr5; + var dr2; + var dr3; + var dr4; + var dr5; + var di2; + var di3; + var di4; + var di5; + var ti2; + var ti3; + var ti4; + var ti5; + var tr2; + var tr3; + var tr4; + var tr5; + var ip1; + var ip2; + var ip3; + var ip4; + var ip5; + var io; + var im; + var i; + var k; + + /* + * First, perform the core butterfly for each sub-sequence being transformed. + * + * In the following loop, we handle harmonic `n = 0` for every transform. As described for `iptr`, the input array is interpreted as a three-dimensional array, containing five "rows" per sub-sequence. + * + * row0 = input component 0 (j = 0) + * row1 = input component 1 (j = 1) + * row2 = input component 2 (j = 2) + * row3 = input component 3 (j = 3) + * row4 = input component 4 (j = 4) + * + * For a radix-5 forward FFT of a real-valued signal `x` and `n = 0`, + * + * cr2 = row4 + row1 + * ci5 = row4 - row1 + * cr3 = row3 + row2 + * ci4 = row3 - row2 + * + * x[0] = row0 + cr2 + cr3 + * x[M] = row0 + ( TR11*cr2 ) + ( TR12*cr3 ) + * x[2M] = ( TI11*ci5 ) + ( TI12*ci4 ) + * x[3M] = row0 + ( TR12*cr2 ) + ( TR11*cr3 ) + * x[4M] = ( TI12*ci5 ) - ( TI11*ci4 ) + * + * Because `W_5^0 = 1`, no frequency-dependent twiddle multiplication is necessary beyond these constant factors. + */ + for ( k = 0; k < L; k++ ) { + ip1 = iptr( 0, k, 0, L, M, sc, oc ); // row 0 + ip2 = iptr( 0, k, 1, L, M, sc, oc ); // row 1 + ip3 = iptr( 0, k, 2, L, M, sc, oc ); // row 2 + ip4 = iptr( 0, k, 3, L, M, sc, oc ); // row 3 + ip5 = iptr( 0, k, 4, L, M, sc, oc ); // row 4 + + cr2 = cc[ ip5 ] + cc[ ip2 ]; // row4 + row1 + ci5 = cc[ ip5 ] - cc[ ip2 ]; // row4 - row1 + cr3 = cc[ ip4 ] + cc[ ip3 ]; // row3 + row2 + ci4 = cc[ ip4 ] - cc[ ip3 ]; // row3 - row2 + + io = optr( 0, 0, k, M, so, oo ); + out[ io ] = cc[ ip1 ] + cr2 + cr3; + + io = optr( M-1, 1, k, M, so, oo ); + out[ io ] = cc[ ip1 ] + ( TR11 * cr2 ) + ( TR12 * cr3 ); + + io = optr( 0, 2, k, M, so, oo ); + out[ io ] = ( TI11 * ci5 ) + ( TI12 * ci4 ); + + io = optr( M-1, 3, k, M, so, oo ); + out[ io ] = cc[ ip1 ] + ( TR12 * cr2 ) + ( TR11 * cr3 ); + + io = optr( 0, 4, k, M, so, oo ); + out[ io ] = ( TI12 * ci5 ) - ( TI11 * ci4 ); + } + // When the number of elements in a sub-sequence is less than `2`, there is nothing more to do, as the above butterfly produced the full result... + if ( M < 2 ) { + return; + } + /* + * Next, apply the general case where we need to loop through the non-trivial harmonics. + * + * For each harmonic `n = 1, ..., M/2-1`, we need to + * + * - recover five spectra from the five input rows. + * - apply radix-5 twiddle factors to rows 1, 2, 3, and 4, then combine with row 0 to form five output columns. + * - form the following + * + * x[5n] = X₀ + (W₁⋅X₁ + W₄⋅X₄) + (W₂⋅X₂ + W₃⋅X₃) => column 0 + * x[5n+1] = X₀ + TR11⋅(W₁⋅X₁ + W₄⋅X₄) + TR12⋅(W₂⋅X₂ + W₃⋅X₃) - i⋅(TI11⋅(W₁⋅X₁ - W₄⋅X₄) + TI12⋅(W₂⋅X₂ - W₃⋅X₃)) => column 1 + * x[5n+2] = X₀ + TR11⋅(W₁⋅X₁ + W₄⋅X₄) + TR12⋅(W₂⋅X₂ + W₃⋅X₃) + i⋅(TI11⋅(W₁⋅X₁ - W₄⋅X₄) + TI12⋅(W₂⋅X₂ - W₃⋅X₃)) => column 2 + * x[5n+3] = X₀ + TR12⋅(W₁⋅X₁ + W₄⋅X₄) + TR11⋅(W₂⋅X₂ + W₃⋅X₃) - i⋅(TI12⋅(W₁⋅X₁ - W₄⋅X₄) - TI11⋅(W₂⋅X₂ - W₃⋅X₃)) => column 3 + * x[5n+4] = X₀ + TR12⋅(W₁⋅X₁ + W₄⋅X₄) + TR11⋅(W₂⋅X₂ + W₃⋅X₃) + i⋅(TI12⋅(W₁⋅X₁ - W₄⋅X₄) - TI11⋅(W₂⋅X₂ - W₃⋅X₃)) => column 4 + * + * The mirror index `im = M - i` selects the conjugate-symmetric partner, thus allowing the routine to read each symmetry pair only once. + */ + // Loop over each sub-sequence to be transformed... + for ( k = 0; k < L; k++ ) { + // Loop over the elements in each sub-sequence... + for ( i = 2; i < M; i += 2 ) { + im = M - i; // "mirror" index + + // Resolve twiddle factor indices for component 1: + it11 = ( (i-2)*st1 ) + ot1; // cos(θ) for component 1 + it12 = ( (i-1)*st1 ) + ot1; // sin(θ) for component 1 + + // Resolve twiddle factor indices for component 2: + it21 = ( (i-2)*st2 ) + ot2; // cos(θ) for component 2 + it22 = ( (i-1)*st2 ) + ot2; // sin(θ) for component 2 + + // Resolve twiddle factor indices for component 3: + it31 = ( (i-2)*st3 ) + ot3; // cos(θ) for component 3 + it32 = ( (i-1)*st3 ) + ot3; // sin(θ) for component 3 + + // Resolve twiddle factor indices for component 4: + it41 = ( (i-2)*st4 ) + ot4; // cos(θ) for component 4 + it42 = ( (i-1)*st4 ) + ot4; // sin(θ) for component 4 + + // Load component 1 data and apply twiddle... + ip1 = iptr( i-1, k, 1, L, M, sc, oc ); // real part component 1 + ip2 = iptr( i, k, 1, L, M, sc, oc ); // imag part component 1 + + // Apply the twiddle factors for component 1: + dr2 = ( twiddles1[ it11 ] * cc[ ip1 ] ) + ( twiddles1[ it12 ] * cc[ ip2 ] ); // Re(dr2) + di2 = ( twiddles1[ it11 ] * cc[ ip2 ] ) - ( twiddles1[ it12 ] * cc[ ip1 ] ); // Im(di2) + + // Load component 2 data and apply twiddle... + ip1 = iptr( i-1, k, 2, L, M, sc, oc ); // real part component 2 + ip2 = iptr( i, k, 2, L, M, sc, oc ); // imag part component 2 + + // Apply the twiddle factors for component 2: + dr3 = ( twiddles2[ it21 ] * cc[ ip1 ] ) + ( twiddles2[ it22 ] * cc[ ip2 ] ); // Re(dr3) + di3 = ( twiddles2[ it21 ] * cc[ ip2 ] ) - ( twiddles2[ it22 ] * cc[ ip1 ] ); // Im(di3) + + // Load component 3 data and apply twiddle... + ip1 = iptr( i-1, k, 3, L, M, sc, oc ); // real part component 3 + ip2 = iptr( i, k, 3, L, M, sc, oc ); // imag part component 3 + + // Apply the twiddle factors for component 3: + dr4 = ( twiddles3[ it31 ] * cc[ ip1 ] ) + ( twiddles3[ it32 ] * cc[ ip2 ] ); // Re(dr4) + di4 = ( twiddles3[ it31 ] * cc[ ip2 ] ) - ( twiddles3[ it32 ] * cc[ ip1 ] ); // Im(di4) + + // Load component 4 data and apply twiddle... + ip1 = iptr( i-1, k, 4, L, M, sc, oc ); // real part component 4 + ip2 = iptr( i, k, 4, L, M, sc, oc ); // imag part component 4 + + // Apply the twiddle factors for component 4: + dr5 = ( twiddles4[ it41 ] * cc[ ip1 ] ) + ( twiddles4[ it42 ] * cc[ ip2 ] ); // Re(dr5) + di5 = ( twiddles4[ it41 ] * cc[ ip2 ] ) - ( twiddles4[ it42 ] * cc[ ip1 ] ); // Im(di5) + + // Radix-5 butterfly intermediate computations (symmetric/antisymmetric combinations): + cr2 = dr2 + dr5; + ci5 = dr5 - dr2; + cr5 = di2 - di5; + ci2 = di5 + di2; + cr3 = dr3 + dr4; + ci4 = dr4 - dr3; + cr4 = di3 - di4; + ci3 = di3 + di4; + + // Output column 0 (real part): + ip1 = iptr( i-1, k, 0, L, M, sc, oc ); + io = optr( i-1, 0, k, M, so, oo ); + out[ io ] = cc[ ip1 ] + cr2 + cr3; + + // Output column 0 (imag part): + ip2 = iptr( i, k, 0, L, M, sc, oc ); + io = optr( i, 0, k, M, so, oo ); + out[ io ] = cc[ ip2 ] + ci2 + ci3; + + // Load component 0 data and compute intermediates... + tr2 = cc[ ip1 ] + ( TR11 * cr2 ) + ( TR12 * cr3 ); + ti2 = cc[ ip2 ] + ( TR11 * ci2 ) + ( TR12 * ci3 ); + tr3 = cc[ ip1 ] + ( TR12 * cr2 ) + ( TR11 * cr3 ); + ti3 = cc[ ip2 ] + ( TR12 * ci2 ) + ( TR11 * ci3 ); + + // Additional intermediates: + tr5 = ( TI11 * cr5 ) + ( TI12 * cr4 ); + ti5 = ( TI11 * ci5 ) + ( TI12 * ci4 ); + tr4 = ( TI12 * cr5 ) - ( TI11 * cr4 ); + ti4 = ( TI12 * ci5 ) - ( TI11 * ci4 ); + + // Output column 2 (real part): + io = optr( i-1, 2, k, M, so, oo ); + out[ io ] = tr2 + tr5; + + // Output column 1 (real part): + io = optr( im-1, 1, k, M, so, oo ); + out[ io ] = tr2 - tr5; + + // Output column 2 (imag part): + io = optr( i, 2, k, M, so, oo ); + out[ io ] = ti2 + ti5; + + // Output column 1 (imag part): + io = optr( im, 1, k, M, so, oo ); + out[ io ] = ti5 - ti2; + + // Output column 4 (real part): + io = optr( i-1, 4, k, M, so, oo ); + out[ io ] = tr3 + tr4; + + // Output column 3 (real part): + io = optr( im-1, 3, k, M, so, oo ); + out[ io ] = tr3 - tr4; + + // Output column 4 (imag part): + io = optr( i, 4, k, M, so, oo ); + out[ io ] = ti3 + ti4; + + // Output column 3 (imag part): + io = optr( im, 3, k, M, so, oo ); + out[ io ] = ti4 - ti3; + } + } +} + + +// EXPORTS // + +module.exports = radf5; diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/generic/rfftf/lib/radfg.js b/lib/node_modules/@stdlib/fft/base/fftpack/generic/rfftf/lib/radfg.js new file mode 100644 index 000000000000..dd1f5424bbe7 --- /dev/null +++ b/lib/node_modules/@stdlib/fft/base/fftpack/generic/rfftf/lib/radfg.js @@ -0,0 +1,765 @@ +/** +* @license Apache-2.0 +* +* Copyright (c) 2026 The Stdlib Authors. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +* +* ## Notice +* +* The original C code and copyright notice are from the [PFFFT library]{@link https://github.com/marton78/pffft/blob/0b4ee12c4ba45a4a8e567550c16d96d1679f50ce/src/fftpack.c}. The implementation follows the original, but has been modified for JavaScript. +* +* ```text +* Copyright (c) 2004 the University Corporation for Atmospheric +* Research ("UCAR"). All rights reserved. Developed by NCAR's +* Computational and Information Systems Laboratory, UCAR, +* www.cisl.ucar.edu. +* +* Redistribution and use of the Software in source and binary forms, +* with or without modification, is permitted provided that the +* following conditions are met: +* +* - Neither the names of NCAR's Computational and Information Systems +* Laboratory, the University Corporation for Atmospheric Research, +* nor the names of its sponsors or contributors may be used to +* endorse or promote products derived from this Software without +* specific prior written permission. +* +* - Redistributions of source code must retain the above copyright +* notices, this list of conditions, and the disclaimer below. +* +* - Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions, and the disclaimer below in the +* documentation and/or other materials provided with the +* distribution. +* +* THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +* EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO THE WARRANTIES OF +* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +* NONINFRINGEMENT. IN NO EVENT SHALL THE CONTRIBUTORS OR COPYRIGHT +* HOLDERS BE LIABLE FOR ANY CLAIM, INDIRECT, INCIDENTAL, SPECIAL, +* EXEMPLARY, OR CONSEQUENTIAL DAMAGES OR OTHER LIABILITY, WHETHER IN AN +* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE +* SOFTWARE. +* ``` +*/ + +/* eslint-disable max-len, max-statements, max-lines-per-function */ + +'use strict'; + +// MODULES // + +var TWO_PI = require( '@stdlib/constants/float64/two-pi' ); +var cos = require( '@stdlib/math/base/special/cos' ); +var sin = require( '@stdlib/math/base/special/sin' ); +var floor = require( '@stdlib/math/base/special/floor' ); + + +// FUNCTIONS // + +/** +* Resolves an index into the input array. +* +* ## Notes +* +* In a forward real FFT, the previous stage writes its results as `R` "rows" per sub-sequence. +* +* Thus, when reading from an input array stored in linear memory, we can reinterpret the array as a three-dimensional logical view containing `L` independent sub-sequences having `R` "rows" (components 0, 1, 2, ..., R-1) and where each "row" is arranged as `M*L` contiguous elements corresponding to interleaved real and imaginary components. +* +* Accordingly, the following is a logical view of an input array (zero-based indexing) which contains `L = 3` transforms and in which each sub-sequence has length `M = 4`: +* +* ```text +* │ k = 0 k = 1 k = 2 +* │ ─────────────────────────────────────────────────────────────────────────────────────→ k +* j = 0 │ cc(0,0,0) ... cc(3,0,0) cc(0,1,0) ... cc(3,1,0) cc(0,2,0) ... cc(3,2,0) +* │ +* j = 1 │ cc(0,0,1) ... cc(3,0,1) cc(0,1,1) ... cc(3,1,1) cc(0,2,1) ... cc(3,2,1) +* │ +* j = 2 │ cc(0,0,2) ... cc(3,0,2) cc(0,1,2) ... cc(3,1,2) cc(0,2,2) ... cc(3,2,2) +* │ +* j = 3 │ cc(0,0,3) ... cc(3,0,3) cc(0,1,3) ... cc(3,1,3) cc(0,2,3) ... cc(3,2,3) +* │ +* ... │ ... ... ... +* │ +* j=R-1 │ cc(0,0,R-1) ... cc(3,0,R-1) cc(0,1,R-1) ... cc(3,1,R-1) cc(0,2,R-1) ... cc(3,2,R-1) +* └──────────────────────────────────────────────────────────────────────────────────────→ i +* ↑ ↑ ↑ ↑ ↑ ↑ +* i = 0 M-1 0 M-1 0 M-1 +* ``` +* +* In the above, +* +* - `i` is the fastest varying index, which walks within one short sub-sequence corresponding to one of the R component rows. +* - `j` selects between the R component rows (0, 1, 2, ..., R-1). +* - `k` specifies the index of one of the `L` independent transforms we are processing. +* +* In linear memory, the three-dimensional logical view is arranged as follows: +* +* ```text +* | cc(0,0,0)...cc(3,0,0) ... cc(0,2,0)...cc(3,2,0) | cc(0,0,1)...cc(3,0,1) ... cc(0,2,1)...cc(3,2,1) | ... | cc(0,0,R-1)...cc(3,0,R-1) ... cc(0,2,R-1)...cc(3,2,R-1) | +* ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ +* 0 M-1 LM LM-1 (L+1)M (L+1)M-1 (2L-1)M 2LM-1 (R-1)LM ((R-1)L+1)M-1 (RL-1)M RLM-1 +* ``` +* +* @private +* @param {NonNegativeInteger} i - index of an element within a sub-sequence +* @param {NonNegativeInteger} k - index of the sub-sequence being transformed +* @param {NonNegativeInteger} j - input row +* @param {NonNegativeInteger} L - number of sub-sequences +* @param {NonNegativeInteger} M - sub-sequence length +* @param {integer} stride - stride length of the input array +* @param {NonNegativeInteger} offset - index specifying the first indexed element in the input array +* @returns {NonNegativeInteger} computed index +* +* @example +* var stride = 1; +* var offset = 0; +* +* var M = 4; // sub-sequence length +* var L = 3; // number of sub-sequences +* +* var idx = iptr( 0, 0, 0, L, M, stride, offset ); +* // returns 0 +* +* idx = iptr( 1, 0, 0, L, M, stride, offset ); +* // returns 1 +* +* idx = iptr( M-1, 0, 0, L, M, stride, offset ); +* // returns 3 +* +* idx = iptr( 0, 1, 0, L, M, stride, offset ); +* // returns 4 +* +* // ... +* +* idx = iptr( M-1, L-1, 6, L, M, stride, offset ); +* // returns 83 +*/ +function iptr( i, k, j, L, M, stride, offset ) { + var n = i + ( ( k+(j*L) ) * M ); + return ( n*stride ) + offset; +} + +/** +* Resolves an index into the output array. +* +* ## Notes +* +* When writing to an output array stored in linear memory, we can reinterpret the array as a three-dimensional logical view containing `L` independent sub-sequences having `R` "columns" corresponding to the `R` components of a radix-R stage (with real and imaginary parts of each component interleaved along each sub-sequence) and where each "column" has `M` elements. +* +* Accordingly, the following is a logical view of an output array (zero-based indexing) which contains `L = 3` transforms and in which each "column" sub-sequence has length `M = 4` for an arbitrary radix `R`: +* +* ```text +* j = 0 (component 0) j = 1 (component 1) j = 2 (component 2) ... j = R-1 (component R-1) +* k = 0 ─┬───────────────────────────────────────┬───────────────────────────────────────┬───────────────────────────────────────┬───────────────────────────────────────┬───────────────────────────────────────────────┐ +* │ out(0,0,0) out(1,0,0) ... out(3,0,0) │ out(0,1,0) out(1,1,0) ... out(3,1,0) │ out(0,2,0) out(1,2,0) ... out(3,2,0) │ ... │ out(0,R-1,0) out(1,R-1,0) ... out(3,R-1,0) │ +* └───────────────────────────────────────┴───────────────────────────────────────┴───────────────────────────────────────┴───────────────────────────────────────┴───────────────────────────────────────────────┤ +* k = 1 ─┬───────────────────────────────────────┬───────────────────────────────────────┬───────────────────────────────────────┬───────────────────────────────────────┬───────────────────────────────────────────────┤ +* │ out(0,0,1) out(1,0,1) ... out(3,0,1) │ out(0,1,1) out(1,1,1) ... out(3,1,1) │ out(0,2,1) out(1,2,1) ... out(3,2,1) │ ... │ out(0,R-1,1) out(1,R-1,1) ... out(3,R-1,1) │ +* └───────────────────────────────────────┴───────────────────────────────────────┴───────────────────────────────────────┴───────────────────────────────────────┴───────────────────────────────────────────────┤ +* k = 2 ─┬───────────────────────────────────────┬───────────────────────────────────────┬───────────────────────────────────────┬───────────────────────────────────────┬───────────────────────────────────────────────┤ +* │ out(0,0,2) out(1,0,2) ... out(3,0,2) │ out(0,1,2) out(1,1,2) ... out(3,1,2) │ out(0,2,2) out(1,2,2) ... out(3,2,2) │ ... │ out(0,R-1,2) out(1,R-1,2) ... out(3,R-1,2) │ +* └───────────────────────────────────────┴───────────────────────────────────────┴───────────────────────────────────────┴───────────────────────────────────────┴───────────────────────────────────────────────┘ +* ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ +* i = 0 1 M-1 0 1 M-1 0 1 M-1 0 1 M-1 +* ``` +* +* In the above, +* +* - `i` is the fastest varying index, which walks within one short "column" sub-sequence. +* - `j` selects which of the R components we are in (0, 1, 2, ..., R-1). +* - `k` specifies the index of one of the `L` independent transforms we are processing. +* +* In linear memory, the three-dimensional logical view is arranged as follows: +* +* ```text +* | out(0,0,0)...out(3,0,0) | out(0,1,0)...out(3,1,0) | out(0,2,0)...out(3,2,0) | ... | out(0,R-1,0)...out(3,R-1,0) | out(0,0,1)...out(3,0,1) | ... | out(0,R-1,2)...out(3,R-1,2) | +* ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ +* 0 M-1 M 2M-1 2M 3M-1 (R-1)M RM-1 RM (R+1)M-1 (RL-1)M RLM-1 +* ``` +* +* As may be observed, when resolving an index in the output array, the `j` and `k` dimensions are swapped relative index resolution in the input array. This stems from `radfg` being only one stage in a multi-stage driver which alternates between using `cc` and `out` as workspace buffers. After each stage, the next stage reads what the previous stage wrote. +* +* Each stage expects a transpose, and, in order to avoid explicit transposition between the stages, we swap the last two logical dimensions while still maintaining cache locality within the inner loop logical dimension, as indexed by `i`. +* +* @private +* @param {NonNegativeInteger} i - index of an element within a sub-sequence +* @param {NonNegativeInteger} j - index specifying which of the R complex components we are in (0, 1, ..., R-1) +* @param {NonNegativeInteger} k - index of the sub-sequence being transformed +* @param {NonNegativeInteger} R - radix +* @param {NonNegativeInteger} M - sub-sequence length +* @param {integer} stride - stride length of the output array +* @param {NonNegativeInteger} offset - index specifying the first indexed element in the output array +* @returns {NonNegativeInteger} computed index +* +* @example +* var stride = 1; +* var offset = 0; +* +* var M = 4; // sub-sequence length +* var L = 3; // number of sub-sequences +* +* var idx = optr( 0, 0, 0, 7, M, stride, offset ); +* // returns 0 +* +* idx = optr( 1, 0, 0, 7, M, stride, offset ); +* // returns 1 +* +* idx = optr( M-1, 0, 0, 7, M, stride, offset ); +* // returns 3 +* +* idx = optr( 0, 1, 0, 7, M, stride, offset ); +* // returns 4 +* +* // ... +* +* idx = optr( M-1, 6, L-1, 7, M, stride, offset ); +* // returns 83 +*/ +function optr( i, j, k, R, M, stride, offset ) { + var n = i + ( ( j+(k*R) ) * M ); + return ( n*stride ) + offset; +} + +/** +* Resolves an index into a flattened workspace array. +* +* ## Notes +* +* During the general radix stage, flattened workspace arrays store `ML = M * L` elements for each of the `R` component columns. Both the flattened input and output workspace arrays share the same `[ML, R]` logical layout. +* +* Thus, when accessing a flattened workspace array stored in linear memory, we can reinterpret the array as a two-dimensional logical view having `R` component columns, where each column has `ML` elements. +* +* Accordingly, the following is a logical view of a flattened workspace array (zero-based indexing) having flattened dimension `ML` and arbitrary radix `R`: +* +* ```text +* │ j = 0 j = 1 j = 2 ... j = R-1 +* │ ────────────────────────────────────────────────────────────────────────→ j +* ik = 0 │ ws(0,0) ws(0,1) ws(0,2) ... ws(0,R-1) +* │ +* ik = 1 │ ws(1,0) ws(1,1) ws(1,2) ... ws(1,R-1) +* │ +* ik = 2 │ ws(2,0) ws(2,1) ws(2,2) ... ws(2,R-1) +* │ +* ik = 3 │ ws(3,0) ws(3,1) ws(3,2) ... ws(3,R-1) +* │ +* ... │ ... ... ... ... ... +* │ +* ik = ML-1 │ ws(ML-1,0) ws(ML-1,1) ws(ML-1,2) ... ws(ML-1,R-1) +* ``` +* +* In the above, +* +* - `ik` is the fastest varying index, which walks along the flattened sub-sequence dimension. +* - `j` selects between the `R` workspace component columns (0, 1, 2, ..., R-1). +* +* In linear memory, the two-dimensional logical view is arranged as follows: +* +* ```text +* | ws(0,0)...ws(ML-1,0) | ws(0,1)...ws(ML-1,1) | ws(0,2)...ws(ML-1,2) | ... | ws(0,R-1)...ws(ML-1,R-1) | +* ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ +* 0 ML-1 ML 2ML-1 2ML 3ML-1 (R-1)ML RML-1 +* ``` +* +* Here, the original `M` and `L` dimensions have been collapsed into the single flattened `ik` dimension. Each workspace component `j` therefore occupies one contiguous block of `ML` elements in linear memory. +* +* @private +* @param {NonNegativeInteger} ik - index of an element within a flattened sub-sequence +* @param {NonNegativeInteger} j - index specifying which of the R workspace component columns we are in (0, 1, ..., R-1) +* @param {NonNegativeInteger} ML - flattened sub-sequence length +* @param {integer} stride - stride length of the flattened workspace array +* @param {NonNegativeInteger} offset - index specifying the first indexed element in the flattened workspace array +* @returns {NonNegativeInteger} computed index +* +* @example +* var stride = 1; +* var offset = 0; +* +* var M = 4; // sub-sequence length +* var L = 3; // number of sub-sequences +* var ML = M * L; // flattened dimension ( 4*3 = 12 ) +* +* var idx = fptr( 0, 0, ML, stride, offset ); +* // returns 0 +* +* idx = fptr( 1, 0, ML, stride, offset ); +* // returns 1 +* +* idx = fptr( ML-1, 0, ML, stride, offset ); +* // returns 11 +* +* idx = fptr( 0, 1, ML, stride, offset ); +* // returns 12 +* +* // ... +* +* idx = fptr( ML-1, 6, ML, stride, offset ); +* // returns 83 +*/ +function fptr( ik, j, ML, stride, offset ) { + var n = ik + ( j*ML ); + return ( n*stride ) + offset; +} + + +// MAIN // + +/** +* Performs one general radix stage within a forward Fourier transform for a real-valued sequence. +* +* @private +* @param {NonNegativeInteger} M - number of elements in each sub-sequence to be transformed +* @param {NonNegativeInteger} R - radix of the transform +* @param {NonNegativeInteger} L - number of sub-sequences to be transformed +* @param {NonNegativeInteger} ML - number of elements in each flattened sub-sequence (`M*L`) +* @param {Collection} cc - input array containing the sub-sequences to be transformed +* @param {integer} sc - stride length for `cc` +* @param {NonNegativeInteger} oc - index offset for `cc` +* @param {Collection} c1 - input workspace array containing intermediate sub-sequences to be transformed +* @param {integer} sc1 - stride length for `c1` +* @param {NonNegativeInteger} oc1 - index offset for `c1` +* @param {Collection} c2 - flattened input workspace array containing intermediate sub-sequences +* @param {integer} sc2 - stride length for `c2` +* @param {NonNegativeInteger} oc2 - index offset for `c2` +* @param {Collection} ch - output array containing transformed sequences +* @param {integer} sch - stride length for `ch` +* @param {NonNegativeInteger} och - index offset for `ch` +* @param {Collection} ch2 - flattened output workspace array containing intermediate sub-sequences +* @param {integer} sch2 - stride length for `ch2` +* @param {NonNegativeInteger} och2 - index offset for `ch2` +* @param {Collection} twiddles - array of twiddle factors +* @param {integer} stw - stride length for `twiddles` +* @param {NonNegativeInteger} otw - index offset for `twiddles` +* @returns {void} +*/ +function radfg( M, R, L, ML, cc, sc, oc, c1, sc1, oc1, c2, sc2, oc2, ch, sch, och, ch2, sch2, och2, twiddles, stw, otw ) { // eslint-disable-line max-params + var ar1h; + var ar2h; + var idij; + var ic2o; + var ic1o; + var ich; + var icc; + var Rph; + var Rp1; + var ih1; + var ih2; + var ih3; + var ih4; + var ic1; + var ic2; + var ic3; + var ic4; + var it1; + var it2; + var io1; + var io2; + var io3; + var io4; + var dc2; + var ai1; + var ai2; + var ar1; + var ar2; + var ds2; + var nbd; + var dcp; + var dsp; + var im; + var ik; + var is; + var jc; + var lc; + var j2; + var i; + var j; + var k; + var l; + + // Compute the basic rotation angle for the radix-R DFT matrix: + dcp = cos( TWO_PI / R ); // cos(2π/R) + dsp = sin( TWO_PI / R ); // sin(2π/R) + + // Compute half the radix, rounded up, which is used as the exclusive upper bound for conjugate-symmetric component loops: + Rph = floor( ( R + 1 ) / 2 ); + Rp1 = R + 1; + + // Compute the number of non-DC complex harmonics in each sub-sequence: + nbd = floor( ( M - 1 ) / 2 ); + + /* + * First, initialize the work arrays for the general-radix butterfly. + * + * At this stage, each sub-sequence has already been split into `R` radix components. The `j = 0` component is carried in the flattened work arrays, while the remaining components `j = 1, ..., R-1` are carried in the three-dimensional work arrays. + * + * For harmonic `n = 0`, we only copy the DC terms. + * + * For harmonics `n = 1, ..., floor((M-1)/2)`, each nonzero radix component is multiplied by its stage twiddle factor and stored in `ch`. + */ + if ( M === 1 ) { + // Copy the DC column from the flattened output workspace back to the flattened input workspace... + for ( ik = 0; ik < ML; ik++ ) { + ic2o = fptr( ik, 0, ML, sc2, oc2 ); + ich = fptr( ik, 0, ML, sch2, och2 ); + c2[ ic2o ] = ch2[ ich ]; + } + } else { + // Copy the DC column into the flattened output workspace... + for ( ik = 0; ik < ML; ik++ ) { + ich = fptr( ik, 0, ML, sch2, och2 ); + ic2o = fptr( ik, 0, ML, sc2, oc2 ); + ch2[ ich ] = c2[ ic2o ]; + } + + // Copy the DC terms for the remaining radix components... + for ( j = 1; j < R; j++ ) { + for ( k = 0; k < L; k++ ) { + ih1 = optr( 0, k, j, L, M, sch, och ); + ic1 = iptr( 0, k, j, L, M, sc1, oc1 ); + ch[ ih1 ] = c1[ ic1 ]; + } + } + + // Apply twiddle factors to the non-DC harmonics of the remaining radix components... + if ( nbd <= L ) { + // Loop over harmonics before sub-sequences... + is = 0; + for ( j = 1; j < R; j++ ) { + idij = is; + for ( i = 2; i < M; i += 2 ) { + for ( k = 0; k < L; k++ ) { + // Resolve output indices in ch: + ih1 = optr( i-1, k, j, L, M, sch, och ); // real part + ih2 = optr( i, k, j, L, M, sch, och ); // imaginary part + + // Resolve indices in the input workspace: + ic1 = iptr( i-1, k, j, L, M, sc1, oc1 ); // real part + ic2 = iptr( i, k, j, L, M, sc1, oc1 ); // imaginary part + + // Resolve twiddle factor indices: + it1 = ( idij * stw ) + otw; // cos(θ) + it2 = ( (idij+1) * stw ) + otw; // sin(θ) + + // Apply the twiddle factor: + ch[ ih1 ] = ( twiddles[ it1 ] * c1[ ic1 ] ) + ( twiddles[ it2 ] * c1[ ic2 ] ); // Re(ch) + ch[ ih2 ] = ( twiddles[ it1 ] * c1[ ic2 ] ) - ( twiddles[ it2 ] * c1[ ic1 ] ); // Im(ch) + } + idij += 2; + } + is += M; + } + } else { + // Loop over sub-sequences before harmonics... + is = 0; + for ( j = 1; j < R; j++ ) { + for ( k = 0; k < L; k++ ) { + idij = is; + for ( i = 2; i < M; i += 2 ) { + // Resolve output indices in ch: + ih1 = optr( i-1, k, j, L, M, sch, och ); // real part + ih2 = optr( i, k, j, L, M, sch, och ); // imaginary part + + // Resolve indices in the input workspace: + ic1 = iptr( i-1, k, j, L, M, sc1, oc1 ); // real part + ic2 = iptr( i, k, j, L, M, sc1, oc1 ); // imaginary part + + // Resolve twiddle factor indices: + it1 = ( idij * stw ) + otw; // cos(θ) + it2 = ( (idij+1) * stw ) + otw; // sin(θ) + + // Apply the twiddle factor: + ch[ ih1 ] = ( twiddles[ it1 ] * c1[ ic1 ] ) + ( twiddles[ it2 ] * c1[ ic2 ] ); // Re(ch) + ch[ ih2 ] = ( twiddles[ it1 ] * c1[ ic2 ] ) - ( twiddles[ it2 ] * c1[ ic1 ] ); // Im(ch) + + idij += 2; + } + } + is += M; + } + } + + /* + * Next, combine mirrored radix components, storing their sums and differences in c1. + */ + if ( nbd >= L ) { + // Loop over sub-sequences before harmonics... + for ( j = 1; j < Rph; j++ ) { + jc = Rp1 - j - 1; // "mirror" index + for ( k = 0; k < L; k++ ) { + for ( i = 2; i < M; i += 2 ) { + // Resolve ch indices for component j: + ih1 = optr( i-1, k, j, L, M, sch, och ); // Re(ch[j]) + ih2 = optr( i, k, j, L, M, sch, och ); // Im(ch[j]) + + // Resolve ch indices for conjugate component jc: + ih3 = optr( i-1, k, jc, L, M, sch, och ); // Re(ch[jc]) + ih4 = optr( i, k, jc, L, M, sch, och ); // Im(ch[jc]) + + // Resolve input-workspace indices for component j: + ic1 = iptr( i-1, k, j, L, M, sc1, oc1 ); // Re(component j) + ic2 = iptr( i, k, j, L, M, sc1, oc1 ); // Im(component j) + + // Resolve input-workspace indices for component jc: + ic3 = iptr( i-1, k, jc, L, M, sc1, oc1 ); // Re(component jc) + ic4 = iptr( i, k, jc, L, M, sc1, oc1 ); // Im(component jc) + + // Form the sum and difference combinations: + c1[ ic1 ] = ch[ ih1 ] + ch[ ih3 ]; // Re(j) + Re(jc) + c1[ ic3 ] = ch[ ih2 ] - ch[ ih4 ]; // Im(j) - Im(jc) + c1[ ic2 ] = ch[ ih2 ] + ch[ ih4 ]; // Im(j) + Im(jc) + c1[ ic4 ] = ch[ ih3 ] - ch[ ih1 ]; // Re(jc) - Re(j) + } + } + } + } else { + // Loop over harmonics before sub-sequences... + for ( j = 1; j < Rph; j++ ) { + jc = Rp1 - j - 1; // "mirror" index + for ( i = 2; i < M; i += 2 ) { + for ( k = 0; k < L; k++ ) { + // Resolve ch indices for component j: + ih1 = optr( i-1, k, j, L, M, sch, och ); // Re(ch[j]) + ih2 = optr( i, k, j, L, M, sch, och ); // Im(ch[j]) + + // Resolve ch indices for conjugate component jc: + ih3 = optr( i-1, k, jc, L, M, sch, och ); // Re(ch[jc]) + ih4 = optr( i, k, jc, L, M, sch, och ); // Im(ch[jc]) + + // Resolve input-workspace indices for component j: + ic1 = iptr( i-1, k, j, L, M, sc1, oc1 ); // Re(component j) + ic2 = iptr( i, k, j, L, M, sc1, oc1 ); // Im(component j) + + // Resolve input-workspace indices for component jc: + ic3 = iptr( i-1, k, jc, L, M, sc1, oc1 ); // Re(component jc) + ic4 = iptr( i, k, jc, L, M, sc1, oc1 ); // Im(component jc) + + // Form the sum and difference combinations: + c1[ ic1 ] = ch[ ih1 ] + ch[ ih3 ]; // Re(j) + Re(jc) + c1[ ic3 ] = ch[ ih2 ] - ch[ ih4 ]; // Im(j) - Im(jc) + c1[ ic2 ] = ch[ ih2 ] + ch[ ih4 ]; // Im(j) + Im(jc) + c1[ ic4 ] = ch[ ih3 ] - ch[ ih1 ]; // Re(jc) - Re(j) + } + } + } + } + } + + // Combine the DC terms for each conjugate-symmetric component pair... + for ( j = 1; j < Rph; j++ ) { + jc = Rp1 - j - 1; // "mirror" index + for ( k = 0; k < L; k++ ) { + ih1 = optr( 0, k, j, L, M, sch, och ); + ih2 = optr( 0, k, jc, L, M, sch, och ); + + ic1 = iptr( 0, k, j, L, M, sc1, oc1 ); + ic2 = iptr( 0, k, jc, L, M, sc1, oc1 ); + + c1[ ic1 ] = ch[ ih1 ] + ch[ ih2 ]; + c1[ ic2 ] = ch[ ih2 ] - ch[ ih1 ]; + } + } + + /* + * Next, apply the radix-`R` DFT matrix. + * + * For each mirrored output pair, accumulate the contributions of the radix components in the flattened work array. + * + * The required rotation factors are generated recursively from the previous ones: + * + * W_l = W_{l-1} ⋅ W_1 + * W_{lj} = W_{l(j-1)} ⋅ W_l + * + * Here, `W_1` is the basic radix-`R` rotation, `W_{l-1}` and `W_l` are the previous and current outer factors, and `W_{l(j-1)}` and `W_{lj}` are the previous and current inner factors. + */ + ar1 = 1.0; // Re(W_0) + ai1 = 0.0; // Im(W_0) + for ( l = 1; l < Rph; l++ ) { + lc = Rp1 - l - 1; // "mirror" index + + // Advance the rotation factor by one step: W_l = W_{l-1} ⋅ W_1 + ar1h = ( dcp * ar1 ) - ( dsp * ai1 ); // Re(W_l) + ai1 = ( dcp * ai1 ) + ( dsp * ar1 ); // Im(W_l) + ar1 = ar1h; + + // Accumulate the contributions from components 1 and R-1: + for ( ik = 0; ik < ML; ik++ ) { + ich = fptr( ik, l, ML, sch2, och2 ); + ic1o = fptr( ik, lc, ML, sch2, och2 ); + + ic2o = fptr( ik, 0, ML, sc2, oc2 ); + ic1 = fptr( ik, 1, ML, sc2, oc2 ); + ic2 = fptr( ik, R-1, ML, sc2, oc2 ); + + ch2[ ich ] = c2[ ic2o ] + ( ar1 * c2[ ic1 ] ); + ch2[ ic1o ] = ai1 * c2[ ic2 ]; + } + + // Save W_l for the inner recurrence: + dc2 = ar1; + ds2 = ai1; + + // Initialize W_{l·1}: + ar2 = ar1; + ai2 = ai1; + + // Accumulate the remaining component pairs: + for ( j = 2; j < Rph; j++ ) { + jc = Rp1 - j - 1; // "mirror" index + + // Advance the nested rotation factor by one step: W_{l*j} = W_{l*(j-1)} ⋅ W_l + ar2h = ( dc2 * ar2 ) - ( ds2 * ai2 ); // Re(W_{l*j}) + ai2 = ( dc2 * ai2 ) + ( ds2 * ar2 ); // Im(W_{l*j}) + ar2 = ar2h; + + // Accumulate the contributions from components j and jc: + for ( ik = 0; ik < ML; ik++ ) { + ich = fptr( ik, l, ML, sch2, och2 ); + ic1o = fptr( ik, lc, ML, sch2, och2 ); + + ic1 = fptr( ik, j, ML, sc2, oc2 ); + ic2 = fptr( ik, jc, ML, sc2, oc2 ); + + ch2[ ich ] += ar2 * c2[ ic1 ]; + ch2[ ic1o ] += ai2 * c2[ ic2 ]; + } + } + } + + // Accumulate the nonzero radix components into the DC output... + for ( j = 1; j < Rph; j++ ) { + for ( ik = 0; ik < ML; ik++ ) { + ich = fptr( ik, 0, ML, sch2, och2 ); + ic1 = fptr( ik, j, ML, sc2, oc2 ); + ch2[ ich ] += c2[ ic1 ]; + } + } + + // Copy the first output column from ch to cc... + if ( M >= L ) { + for ( k = 0; k < L; k++ ) { + for ( i = 0; i < M; i++ ) { + icc = optr( i, 0, k, R, M, sc, oc ); + ih1 = optr( i, k, 0, L, M, sch, och ); + cc[ icc ] = ch[ ih1 ]; + } + } + } else { + for ( i = 0; i < M; i++ ) { + for ( k = 0; k < L; k++ ) { + icc = optr( i, 0, k, R, M, sc, oc ); + ih1 = optr( i, k, 0, L, M, sch, och ); + cc[ icc ] = ch[ ih1 ]; + } + } + } + + /* + * `cc` is stored in output order, where the component index comes before the sub-sequence index. Accordingly, writes to `cc` use `optr`, not `iptr`. + */ + // Store DC harmonics for conjugate pairs in the output array... + for ( j = 1; j < Rph; j++ ) { + jc = Rp1 - j - 1; // "mirror" index + j2 = 2 * j; // output column index + for ( k = 0; k < L; k++ ) { + io1 = optr( M-1, j2-1, k, R, M, sc, oc ); + io2 = optr( 0, j2, k, R, M, sc, oc ); + + ih1 = optr( 0, k, j, L, M, sch, och ); + ih2 = optr( 0, k, jc, L, M, sch, och ); + + cc[ io1 ] = ch[ ih1 ]; + cc[ io2 ] = ch[ ih2 ]; + } + } + + // When M = 1, there are no non-DC harmonics to process, so we're done... + if ( M === 1 ) { + return; + } + + /* + * Finally, store the non-DC harmonics in folded format. + * + * For each mirror pair, write the non-DC harmonics from `ch` to the two output columns as the required sum and difference combinations. + */ + if ( nbd >= L ) { + // Loop over sub-sequences before harmonics... + for ( j = 1; j < Rph; j++ ) { + jc = Rp1 - j - 1; // "mirror" index + j2 = 2 * j; // output column index + for ( k = 0; k < L; k++ ) { + for ( i = 2; i < M; i += 2 ) { + im = M - i; // "mirror" harmonic index + + // Resolve ch indices for component j: + ih1 = optr( i-1, k, j, L, M, sch, och ); // Re(ch[j]) + ih2 = optr( i, k, j, L, M, sch, och ); // Im(ch[j]) + + // Resolve ch indices for conjugate component jc: + ih3 = optr( i-1, k, jc, L, M, sch, och ); // Re(ch[jc]) + ih4 = optr( i, k, jc, L, M, sch, och ); // Im(ch[jc]) + + // Resolve cc output indices: + io1 = optr( i-1, j2, k, R, M, sc, oc ); + io2 = optr( im-1, j2-1, k, R, M, sc, oc ); + io3 = optr( i, j2, k, R, M, sc, oc ); + io4 = optr( im, j2-1, k, R, M, sc, oc ); + + // Store the sum and difference combinations: + cc[ io1 ] = ch[ ih1 ] + ch[ ih3 ]; + cc[ io2 ] = ch[ ih1 ] - ch[ ih3 ]; + cc[ io3 ] = ch[ ih2 ] + ch[ ih4 ]; + cc[ io4 ] = ch[ ih4 ] - ch[ ih2 ]; + } + } + } + } else { + // Loop over harmonics before sub-sequences... + for ( j = 1; j < Rph; j++ ) { + jc = Rp1 - j - 1; // "mirror" index + j2 = 2 * j; // output column index + for ( i = 2; i < M; i += 2 ) { + im = M - i; // "mirror" harmonic index + for ( k = 0; k < L; k++ ) { + // Resolve ch indices for component j: + ih1 = optr( i-1, k, j, L, M, sch, och ); // Re(ch[j]) + ih2 = optr( i, k, j, L, M, sch, och ); // Im(ch[j]) + + // Resolve ch indices for conjugate component jc: + ih3 = optr( i-1, k, jc, L, M, sch, och ); // Re(ch[jc]) + ih4 = optr( i, k, jc, L, M, sch, och ); // Im(ch[jc]) + + // Resolve cc output indices: + io1 = optr( i-1, j2, k, R, M, sc, oc ); + io2 = optr( im-1, j2-1, k, R, M, sc, oc ); + io3 = optr( i, j2, k, R, M, sc, oc ); + io4 = optr( im, j2-1, k, R, M, sc, oc ); + + // Store the sum and difference combinations: + cc[ io1 ] = ch[ ih1 ] + ch[ ih3 ]; + cc[ io2 ] = ch[ ih1 ] - ch[ ih3 ]; + cc[ io3 ] = ch[ ih2 ] + ch[ ih4 ]; + cc[ io4 ] = ch[ ih4 ] - ch[ ih2 ]; + } + } + } + } +} + + +// EXPORTS // + +module.exports = radfg; diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/generic/rfftf/lib/rfftf1.js b/lib/node_modules/@stdlib/fft/base/fftpack/generic/rfftf/lib/rfftf1.js new file mode 100644 index 000000000000..c3768b4d701f --- /dev/null +++ b/lib/node_modules/@stdlib/fft/base/fftpack/generic/rfftf/lib/rfftf1.js @@ -0,0 +1,181 @@ +/** +* @license Apache-2.0 +* +* Copyright (c) 2026 The Stdlib Authors. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +* +* ## Notice +* +* The original C code and copyright notice are from the [PFFFT library]{@link https://github.com/marton78/pffft/blob/0b4ee12c4ba45a4a8e567550c16d96d1679f50ce/src/fftpack.c}. The implementation follows the original, but has been modified for JavaScript. +* +* ```text +* Copyright (c) 2004 the University Corporation for Atmospheric +* Research ("UCAR"). All rights reserved. Developed by NCAR's +* Computational and Information Systems Laboratory, UCAR, +* www.cisl.ucar.edu. +* +* Redistribution and use of the Software in source and binary forms, +* with or without modification, is permitted provided that the +* following conditions are met: +* +* - Neither the names of NCAR's Computational and Information Systems +* Laboratory, the University Corporation for Atmospheric Research, +* nor the names of its sponsors or contributors may be used to +* endorse or promote products derived from this Software without +* specific prior written permission. +* +* - Redistributions of source code must retain the above copyright +* notices, this list of conditions, and the disclaimer below. +* +* - Redistributions in binary form must reproduce the above copyright +* notice, this list of conditions, and the disclaimer below in the +* documentation and/or other materials provided with the +* distribution. +* +* THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +* EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO THE WARRANTIES OF +* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +* NONINFRINGEMENT. IN NO EVENT SHALL THE CONTRIBUTORS OR COPYRIGHT +* HOLDERS BE LIABLE FOR ANY CLAIM, INDIRECT, INCIDENTAL, SPECIAL, +* EXEMPLARY, OR CONSEQUENTIAL DAMAGES OR OTHER LIABILITY, WHETHER IN AN +* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE +* SOFTWARE. +* ``` +*/ + +/* eslint-disable max-len */ + +'use strict'; + +// MODULES // + +var floor = require( '@stdlib/math/base/special/floor' ); +var gcopy = require( '@stdlib/blas/base/gcopy' ).ndarray; +var radf2 = require( './radf2.js' ); +var radf3 = require( './radf3.js' ); +var radf4 = require( './radf4.js' ); +var radf5 = require( './radf5.js' ); +var radfg = require( './radfg.js' ); + + +// MAIN // + +/** +* Performs the forward Fourier transform. +* +* @private +* @param {NonNegativeInteger} N - length of the sequence to transform +* @param {Collection} c - input array containing the sequence to be transformed +* @param {integer} sc - stride length for `c` +* @param {NonNegativeInteger} oc - starting index for `c` +* @param {Collection} ch - working array for intermediate results +* @param {integer} sch - stride length for `ch` +* @param {NonNegativeInteger} och - starting index for `ch` +* @param {Collection} wa - workspace array for storing twiddle factors +* @param {integer} swa - stride length for `wa` +* @param {NonNegativeInteger} owa - starting index for `wa` +* @param {Collection} ifac - workspace array for storing factorization results +* @param {integer} si - stride length for `ifac` +* @param {NonNegativeInteger} oi - starting index for `ifac` +* @returns {void} +*/ +function rfftf1( N, c, sc, oc, ch, sch, och, wa, swa, owa, ifac, si, oi ) { // eslint-disable-line max-params + var factor; + var idl1; + var FLG; + var ido; + var ix4; + var ix3; + var ix2; + var nf; + var l2; + var l1; + var kh; + var iw; + var k1; + + // Resolve the number of factors: + nf = ifac[ oi+si ]; + + FLG = 1; // flag to track whether the latest stage output resides in `c` or `ch` + l2 = N; + + // Initialize an index offset to the last element in each workspace: + iw = N - 1; + + for ( k1 = 1; k1 <= nf; k1++ ) { + kh = nf - k1; + + // Resolve the next factor: + factor = ifac[ oi+((kh+2)*si) ]; + + // Compute a sub-transform length: + l1 = floor( l2 / factor ); + + ido = floor( N / l2 ); + idl1 = ido * l1; + + // Adjust the index offset + iw -= ( ( factor - 1 ) * ido ); + + // Toggle the flag to swap the input and output work buffers for the next stage: + FLG = 1 - FLG; + + switch ( factor ) { + case 4: + ix2 = iw + ido; + ix3 = ix2 + ido; + radf4( ido, l1, ( FLG ) ? ch : c, ( FLG ) ? sch : sc, ( FLG ) ? och : oc, ( FLG ) ? c : ch, ( FLG ) ? sc : sch, ( FLG ) ? oc : och, wa, swa, owa+(iw*swa), wa, swa, owa+(ix2*swa), wa, swa, owa+(ix3*swa) ); + break; + case 2: + radf2( ido, l1, ( FLG ) ? ch : c, ( FLG ) ? sch : sc, ( FLG ) ? och : oc, ( FLG ) ? c : ch, ( FLG ) ? sc : sch, ( FLG ) ? oc : och, wa, swa, owa+(iw*swa) ); + break; + case 3: + ix2 = iw + ido; + radf3( ido, l1, ( FLG ) ? ch : c, ( FLG ) ? sch : sc, ( FLG ) ? och : oc, ( FLG ) ? c : ch, ( FLG ) ? sc : sch, ( FLG ) ? oc : och, wa, swa, owa+(iw*swa), wa, swa, owa+(ix2*swa) ); + break; + case 5: + ix2 = iw + ido; + ix3 = ix2 + ido; + ix4 = ix3 + ido; + radf5( ido, l1, ( FLG ) ? ch : c, ( FLG ) ? sch : sc, ( FLG ) ? och : oc, ( FLG ) ? c : ch, ( FLG ) ? sc : sch, ( FLG ) ? oc : och, wa, swa, owa+(iw*swa), wa, swa, owa+(ix2*swa ), wa, swa, owa+(ix3*swa), wa, swa, owa+(ix4*swa) ); + break; + default: + if ( ido === 1 ) { + FLG = 1 - FLG; + } + if ( FLG === 0 ) { + radfg( ido, factor, l1, idl1, c, sc, oc, c, sc, oc, c, sc, oc, ch, sch, och, ch, sch, och, wa, swa, owa+(iw*swa) ); + FLG = 1; + } else { + radfg( ido, factor, l1, idl1, ch, sch, och, ch, sch, och, ch, sch, och, c, sc, oc, c, sc, oc, wa, swa, owa+(iw*swa) ); + FLG = 0; + } + break; + } + l2 = l1; + } + if ( FLG === 1 ) { + return; + } + // Now that we've finished computing the transforms, copy over the final results to the input array... + gcopy( N, ch, sch, och, c, sc, oc ); +} + + +// EXPORTS // + +module.exports = rfftf1; diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/generic/rfftf/package.json b/lib/node_modules/@stdlib/fft/base/fftpack/generic/rfftf/package.json new file mode 100644 index 000000000000..55a3ba768d18 --- /dev/null +++ b/lib/node_modules/@stdlib/fft/base/fftpack/generic/rfftf/package.json @@ -0,0 +1,62 @@ +{ + "name": "@stdlib/fft/base/fftpack/generic/rfftf", + "version": "0.0.0", + "description": "Compute the forward discrete Fourier transform (DFT) of a real-valued sequence.", + "license": "Apache-2.0", + "author": { + "name": "The Stdlib Authors", + "url": "https://github.com/stdlib-js/stdlib/graphs/contributors" + }, + "contributors": [ + { + "name": "The Stdlib Authors", + "url": "https://github.com/stdlib-js/stdlib/graphs/contributors" + } + ], + "main": "./lib", + "directories": { + "benchmark": "./benchmark", + "doc": "./docs", + "example": "./examples", + "lib": "./lib", + "test": "./test" + }, + "types": "./docs/types", + "scripts": {}, + "homepage": "https://github.com/stdlib-js/stdlib", + "repository": { + "type": "git", + "url": "git://github.com/stdlib-js/stdlib.git" + }, + "bugs": { + "url": "https://github.com/stdlib-js/stdlib/issues" + }, + "dependencies": {}, + "devDependencies": {}, + "engines": { + "node": ">=0.10.0", + "npm": ">2.7.0" + }, + "os": [ + "aix", + "darwin", + "freebsd", + "linux", + "macos", + "openbsd", + "sunos", + "win32", + "windows" + ], + "keywords": [ + "stdlib", + "fft", + "fftpack", + "rfftf", + "fourier", + "transform", + "forward", + "real" + ], + "__stdlib__": {} +} diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/generic/rfftf/test/fixtures/c/fftpack/Makefile b/lib/node_modules/@stdlib/fft/base/fftpack/generic/rfftf/test/fixtures/c/fftpack/Makefile new file mode 100644 index 000000000000..4b8cac6acbd2 --- /dev/null +++ b/lib/node_modules/@stdlib/fft/base/fftpack/generic/rfftf/test/fixtures/c/fftpack/Makefile @@ -0,0 +1,138 @@ +#/ +# @license Apache-2.0 +# +# Copyright (c) 2026 The Stdlib Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +#/ + +# VARIABLES # + +ifndef VERBOSE + QUIET := @ +endif + +# Specify the path to FFTPACK: +FFTPACK ?= + +# Specify a list of FFTPACK source files: +FFTPACK_SRC ?= + +# Determine the OS: +# +# [1]: https://en.wikipedia.org/wiki/Uname#Examples +# [2]: http://stackoverflow.com/a/27776822/2225624 +OS ?= $(shell uname) +ifneq (, $(findstring MINGW,$(OS))) + OS := WINNT +else +ifneq (, $(findstring MSYS,$(OS))) + OS := WINNT +else +ifneq (, $(findstring CYGWIN,$(OS))) + OS := WINNT +endif +endif +endif + +# Define the program used for compiling C source files: +ifdef C_COMPILER + CC := $(C_COMPILER) +else + CC := gcc +endif + +# Define the command-line options when compiling C files: +CFLAGS ?= \ + -std=c99 \ + -O3 \ + -ffp-contract=off \ + -Wall \ + -pedantic + +# Determine whether to generate [position independent code][1]: +# +# [1]: https://gcc.gnu.org/onlinedocs/gcc/Code-Gen-Options.html#Code-Gen-Options +# [2]: http://stackoverflow.com/questions/5311515/gcc-fpic-option +ifeq ($(OS), WINNT) + fPIC ?= +else + fPIC ?= -fPIC +endif + +# List of C targets: +c_targets := runner.out + + +# RULES # + +#/ +# Compiles C source files. +# +# @param {string} [C_COMPILER] - C compiler +# @param {string} [CFLAGS] - C compiler flags +# @param {(string|void)} [fPIC] - flag indicating whether to generate position independent code +# +# @example +# make +# +# @example +# make all +#/ +all: $(c_targets) + +.PHONY: all + +#/ +# Compiles C source files. +# +# @private +# @param {string} CC - C compiler +# @param {string} CFLAGS - C compiler flags +# @param {(string|void)} fPIC - flag indicating whether to generate position independent code +#/ +$(c_targets): %.out: %.c + $(QUIET) $(CC) $(CFLAGS) -DFFTPACK_DOUBLE_PRECISION $(fPIC) -o $@ $(FFTPACK_SRC) $< -lm + +#/ +# Generates test fixtures. +# +# @example +# make run +#/ +run: $(c_targets) + $(QUIET) ./$< + +.PHONY: run + +#/ +# Removes generated files. +# +# @example +# make clean +#/ +clean: + $(QUIET) -rm -f *.o *.out + +.PHONY: clean + +#/ +# Removes generated test fixtures. +# +# @example +# make clean-fixtures +#/ +clean-fixtures: + $(QUIET) -rm -f *.json + +.PHONY: clean-fixtures diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/generic/rfftf/test/fixtures/c/fftpack/large.json b/lib/node_modules/@stdlib/fft/base/fftpack/generic/rfftf/test/fixtures/c/fftpack/large.json new file mode 100644 index 000000000000..bb503d1af6b9 --- /dev/null +++ b/lib/node_modules/@stdlib/fft/base/fftpack/generic/rfftf/test/fixtures/c/fftpack/large.json @@ -0,0 +1 @@ +{"lengths":[858,464,488,372,141,422,950,550,890,992],"offsets":[0,858,1322,1810,2182,2323,2745,3695,4245,5135],"input":[-1.3836292177438736,5.343804806470871,-6.6724975593388081,-4.666453767567873,-9.0884297713637352,-9.2391601763665676,-2.565078241750598,8.7300490774214268,5.9349908027797937,9.3905470240861177,6.9239855650812387,-8.5744752269238234,8.7948722392320633,-4.5821281336247921,8.1725005619227886,-4.7829135414212942,-6.4278498385101557,7.1277921088039875,-3.1978932861238718,-6.9924066495150328,-1.3785348646342754,-9.0354024339467287,1.9913002010434866,7.782572777941823,1.7008180357515812,5.6488184444606304,-0.30828148126602173,-1.2867797911167145,-6.9078811071813107,-0.757744200527668,4.5932940579950809,-0.50665306858718395,4.6819505468010902,9.542954983189702,8.4445554111152887,7.6429389603435993,-5.1247554272413254,8.2355725020170212,-4.7328158840537071,-4.4365220703184605,-4.6263923030346632,4.2246049456298351,2.9354325216263533,-4.1855077911168337,-5.8293997962027788,5.2776578534394503,1.5956623200327158,-1.7032964620739222,-7.3035731445997953,8.8461798056960106,-2.2558581735938787,5.7917370088398457,1.7240311577916145,-4.2082392424345016,-7.8769022691994905,-7.0964218210428953,-9.5615235436707735,-0.52619504742324352,-3.7600878998637199,4.2027158197015524,-4.9551071226596832,-0.4853710625320673,2.3686264827847481,9.5053929556161165,-2.8604423068463802,4.5462047029286623,8.0625559575855732,7.3781204968690872,4.0713268797844648,6.7909786570817232,-4.0215790178626776,9.3214935623109341,6.3424529694020748,-2.3928153607994318,3.9522905740886927,6.1477878969162703,5.8713098429143429,-0.89534592814743519,-8.0789431184530258,-2.7969768084585667,-8.7891633901745081,0.53091080859303474,3.0180424358695745,4.2393215373158455,-9.7228108905255795,8.7173650972545147,-7.2446639556437731,-1.067080944776535,5.5706310458481312,5.5961094237864017,-6.1887923628091812,4.9667880870401859,-3.1925039831548929,3.5856083873659372,3.3202727790921926,3.8247024454176426,1.7741083260625601,-2.5612717214971781,-7.2937649860978127,-6.3081001676619053,-0.23948900401592255,-5.0916141085326672,5.2417162992060184,-2.4740399606525898,-1.1895597912371159,7.06865762360394,2.9288134910166264,4.5684446953237057,1.8501083180308342,-5.229406114667654,9.3714681081473827,6.2646452337503433,9.8925709258764982,4.4397068861871958,-1.8462508451193571,-9.9378901068121195,-6.1190247070044279,-2.4482202529907227,-7.2377329133450985,-4.5770529750734568,-6.529309619218111,1.8932569585740566,-0.030204169452190399,-7.6413979567587376,-8.9754407852888107,9.7667296603322029,9.4255558960139751,-4.6819036640226841,-8.7548396084457636,-2.5892894063144922,1.8130060657858849,-8.8069598842412233,1.4252348896116018,-6.0771208815276623,1.8293748609721661,6.3033809326589108,0.92346278950572014,0.63918870873749256,2.8447110112756491,-8.9419329632073641,-7.0673043467104435,-0.18413221463561058,5.2899454347789288,8.1130419857800007,-4.1032032389193773,-2.5367903709411621,4.1642939951270819,9.2892869468778372,5.045867133885622,5.889036962762475,-2.9556425008922815,4.5165426284074783,9.5320692472159863,5.4879908170551062,-3.3382165431976318,-5.4053893871605396,-8.3793940488249063,7.5242340750992298,-0.19776266068220139,-3.796961372718215,4.4702572654932737,-8.3860256057232618,-3.9323427621275187,9.1152444016188383,-0.087192393839359283,-5.4424856789410114,8.1432296987622976,3.2616890873759985,-0.79140468500554562,-1.1384688224643469,5.7545701880007982,-2.9387269727885723,8.8158235978335142,7.5473560392856598,8.4130895975977182,-1.2029890716075897,1.3627423346042633,3.6105066165328026,1.7848105821758509,-2.6884531415998936,-4.8318936489522457,-9.6365174930542707,-0.94950292259454727,1.7044507805258036,6.7043598927557468,0.1768482755869627,-7.7109525632113218,2.0202880166471004,-5.0192101392894983,2.1352279372513294,6.776036350056529,4.8430666886270046,-2.5780480820685625,-9.254057239741087,7.0599775016307831,-2.9579965770244598,4.9515850562602282,1.2901575770229101,3.6784853786230087,4.3038655631244183,-4.9313686229288578,-1.5124059002846479,0.99410033784806728,7.844464248046279,1.9107565656304359,-5.9143082331866026,-1.7784431949257851,9.7052872180938721,-3.2375712785869837,6.1395737063139677,7.8154083248227835,-6.4321452751755714,-5.0656119547784328,2.2599146515130997,2.3856439255177975,-4.4824468903243542,3.5151574946939945,-0.74788090772926807,-9.634343795478344,-4.4161677453666925,-2.5312526803463697,-2.7637401316314936,9.8196642939001322,-0.90205730870366096,-0.87711618281900883,-1.6916132438927889,9.0562749095261097,8.8125535380095243,-7.4125394411385059,-2.5503669679164886,-4.0175714716315269,-3.3236768934875727,-1.0374965984374285,2.7947402000427246,-8.8013577461242676,-4.4196297321468592,-0.71686452254652977,-8.3419577870517969,-3.2845140062272549,-2.8268501069396734,9.1303087957203388,-6.8999206088483334,-6.965648652985692,8.3431130088865757,2.7004839107394218,7.0331871882081032,6.7772055137902498,4.4932015705853701,-2.7610897459089756,-5.6353028398007154,7.4652056209743023,7.71100839599967,-1.0817498248070478,-0.9692357387393713,-9.9449903145432472,-5.452216099947691,4.6040437649935484,0.16367253847420216,-9.1555663198232651,2.396869333460927,4.1829844936728477,3.42049615457654,8.2789749931544065,4.7328529972583055,5.0604402180761099,-9.1811369266360998,-7.3683195654302835,0.6530844047665596,-3.6103257164359093,1.2557338643819094,5.1191467512398958,-2.500433586537838,-4.7872302494943142,1.0212375409901142,3.9394376706331968,-9.8709605727344751,-1.2343449424952269,-5.6353799160569906,6.1697849817574024,-4.4236850552260876,-8.8746795430779457,3.2609282899647951,6.421873215585947,-7.5767371244728565,-2.2208320535719395,-5.5242635030299425,-6.2966603972017765,-7.9712667874991894,6.919118370860815,9.6225914638489485,6.8948864750564098,2.3571184929460287,-3.9093923475593328,-5.1571377646178007,3.9856279641389847,6.4493027329444885,-6.5688386652618647,-2.4714202061295509,2.8406544961035252,2.8802165016531944,7.7988440822809935,-4.8273698054254055,6.3957206904888153,-7.1222266368567944,-3.2630631327629089,-2.3020196240395308,9.9562390055507421,-5.4908775258809328,-5.1785421930253506,4.2413995508104563,5.202361922711134,-3.9030460175126791,1.5056313760578632,5.1466274447739124,-0.63241714611649513,-9.0349014662206173,-9.5889352168887854,-1.2341870367527008,-2.9814581014215946,-9.3662556633353233,1.3410712778568268,-0.61494430527091026,4.6311347559094429,-4.5180429238826036,5.2526212017983198,0.80465799197554588,3.8869556877762079,8.0643531307578087,-2.4167899787425995,1.0108866170048714,9.9714581668376923,-9.702433655038476,-8.8024379033595324,-2.5738323945552111,1.5990028250962496,-5.5594278313219547,2.6964737195521593,-0.3660961240530014,7.0225184317678213,7.467415938153863,4.8598092515021563,-1.1857937090098858,-9.6347983460873365,7.9442001599818468,-1.8277707509696484,0.65705240704119205,3.079888541251421,3.6868151742964983,4.3027415126562119,-3.8232848513871431,2.0515510719269514,0.41896019130945206,1.4640168752521276,5.7317120768129826,-7.1150018833577633,-1.8366310186684132,-8.257466871291399,-3.2456921599805355,9.6519200596958399,-0.17940289340913296,4.7756473254412413,4.3047143239527941,9.3337546195834875,-7.5859573483467102,2.8148652240633965,9.4399211183190346,-3.245612271130085,-9.0053880214691162,6.4435309451073408,-3.5752768907696009,-9.6786528825759888,-9.118994940072298,-2.947950903326273,-6.2107770144939423,-4.5292529463768005,-3.1542269419878721,6.9078395795077085,0.059945108368992805,7.497515082359314,-9.2638738453388214,2.0722871460020542,8.9301573298871517,9.1543915588408709,-2.1409206558018923,-2.4534005578607321,5.6968830898404121,7.514213789254427,-8.6087069287896156,-6.5373412799090147,6.9051356613636017,-5.3848071582615376,-2.4538727849721909,-2.2398379724472761,-4.9567421898245811,-7.9659449122846127,-3.6361248511821032,7.6496759802103043,8.1043375190347433,9.600824099034071,1.0507858637720346,0.55809889920055866,-0.031718509271740913,6.9070926774293184,7.5067618675529957,6.1468449700623751,-9.9764617905020714,5.6066872086375952,-8.4079622849822044,7.3778887558728456,0.17645595595240593,5.6953313294798136,1.4337773993611336,-2.5031594559550285,9.3990824278444052,-9.6214833948761225,-8.2714147213846445,2.3327912110835314,7.221981193870306,-0.1619398407638073,-1.7228267248719931,4.4512998498976231,-7.0033096708357334,-4.6256142854690552,-2.6992538198828697,-6.3588936347514391,6.0747092217206955,-2.3619847372174263,2.1225813589990139,-5.7750044297426939,-0.4994176235049963,6.2880760990083218,3.695123502984643,3.9408218394964933,-6.6072344779968262,-7.7898451406508684,-3.9272616244852543,-5.4860751982778311,-4.4658221304416656,2.9274969734251499,2.4417335260659456,-1.7845300398766994,7.4036840815097094,-6.281505860388279,6.7310335487127304,8.4809841495007277,-0.099254706874489784,-8.1737809535115957,3.2635286170989275,-9.8744286131113768,0.47830041497945786,-1.2048434372991323,-9.803581852465868,-8.8001928571611643,-4.8413409199565649,-8.4168013371527195,-1.1800611391663551,6.7125030513852835,-2.9610845725983381,-6.9483565725386143,-1.0288907773792744,7.4327747896313667,2.6460257638245821,-8.2448884285986423,8.1601942703127861,8.3852432668209076,-9.2162706516683102,2.139163538813591,-7.078308155760169,-5.1251509971916676,1.5872283466160297,-3.4530877415090799,3.9543796889483929,1.2595413625240326,9.1117680538445711,1.4858305361121893,-7.6460896711796522,-7.8290850948542356,-3.4331722278147936,-1.3255814928561449,0.95191745087504387,-1.1233174335211515,0.40396427735686302,9.4276909530162811,-8.7980006076395512,-7.9962031915783882,7.8129748161882162,-7.3321249149739742,8.9765749033540487,9.2945491801947355,-6.5117774624377489,-3.4437838941812515,0.32414180226624012,7.8513514809310436,-2.3355202842503786,6.9106425810605288,7.1699922252446413,6.0594640579074621,1.4125469326972961,0.67638715729117393,8.0390361417084932,-7.9194251261651516,-1.7780791781842709,-4.1766833979636431,2.4821759946644306,-2.067959988489747,3.7965355254709721,8.372684558853507,-0.29047556221485138,-2.0226981583982706,4.5121142268180847,-4.8960762936621904,-8.3542276360094547,-9.5038655307143927,8.5320291575044394,-2.1858047880232334,3.1789888441562653,9.2656068690121174,7.0547982584685087,9.9944635480642319,-3.050991203635931,1.9908948708325624,0.97018792293965816,5.9485066961497068,-3.4478329960256815,-7.7291129250079393,-3.2009128388017416,2.257971465587616,9.7265180572867393,-6.4108567964285612,-7.2701494861394167,-9.4023921806365252,-6.0053752828389406,7.6576525811105967,2.1670689154416323,1.9273570459336042,-6.9100356474518776,3.0308974534273148,0.29360173270106316,-5.4355979338288307,3.9055618550628424,0.77820686623454094,-0.67711484618484974,-0.26914686895906925,-3.5513504408299923,-7.5468085613101721,0.78852925449609756,-7.1887352503836155,-1.0733311995863914,0.52259841002523899,3.3115596417337656,-2.6169972028583288,-3.8719306606799364,4.4614339061081409,3.3197731338441372,-4.5728352386504412,4.3581864703446627,8.0401194468140602,-9.712316207587719,5.1015013176947832,0.93276468105614185,-3.0239199288189411,-3.0221890658140182,6.0684254672378302,-7.9730463773012161,-2.9904474411159754,-0.45008798129856586,-4.6286269463598728,6.6669545602053404,-8.4945761878043413,-8.3419766463339329,-3.6014819610863924,9.8927300889045,7.114759897813201,-2.2302635107189417,-4.0387638472020626,0.49606672488152981,-2.6064727734774351,-6.9878459721803665,-4.7272308636456728,9.4309159647673368,5.4047719109803438,-1.9983715936541557,-6.6313119232654572,7.5405320338904858,-6.2779691256582737,6.1729341838508844,8.5049545485526323,2.7712423447519541,-3.729811804369092,-6.9469469599425793,2.6624681334942579,8.1020187307149172,-9.3710512015968561,0.74245967902243137,-1.4800905995070934,4.117360757663846,0.48236453905701637,7.1008899621665478,4.6577279642224312,2.4340093974024057,8.3960394468158484,-7.7648733928799629,-4.2270966432988644,-4.8132387455552816,3.8964440394192934,7.5350792706012726,2.0774382259696722,-4.4956416077911854,1.7515409272164106,-1.8515443056821823,1.0949181672185659,2.2897232696413994,3.3790890406817198,-7.6503885537385941,-0.08040430024266243,8.6450034473091364,-3.426915155723691,3.8370291888713837,8.9496856462210417,-2.6331956591457129,3.8806143868714571,1.4861087780445814,-2.9696775134652853,8.6300862021744251,5.858945744112134,-8.6987545900046825,0.031615970656275749,-8.630302669480443,-9.4969552382826805,4.6733141131699085,4.3904148787260056,9.7029793635010719,-2.0256834384053946,-5.6614868715405464,7.3901839647442102,6.8220315501093864,-2.1156056597828865,3.0157377291470766,5.5041156336665154,7.6715763658285141,-3.8158812187612057,6.4844046719372272,3.3894502557814121,6.4905537012964487,6.7361867427825928,-4.9092830717563629,9.6794528234750032,2.5637581571936607,9.0834462735801935,5.4816694092005491,-9.5821184013038874,-6.6639674454927444,-1.3008302915841341,-3.0546425748616457,0.62229865230619907,-1.0264675598591566,8.1597916688770056,1.6187209356576204,5.8428565226495266,0.8897001575678587,-6.8093665316700935,-5.0232728105038404,-6.1460871901363134,2.7126255352050066,-8.9025303162634373,-4.8270168527960777,-7.6722044590860605,-6.7403256427496672,-4.6530521847307682,-3.8480269256979227,6.211507935076952,-3.1860082875937223,-7.2412362601608038,-3.4578029345721006,4.7061298415064812,-4.0756387077271938,0.74028559029102325,1.9800000730901957,-2.138677816838026,-4.7580060735344887,-7.808036869391799,-9.6756467130035162,1.4056970831006765,5.5509649310261011,-4.9322825390845537,3.1274052616208792,2.3003347963094711,1.7270178347826004,5.988840963691473,-5.5497981049120426,4.5432855654507875,-0.99938765168190002,3.2918086182326078,5.4275506548583508,0.843976940959692,4.7205315716564655,-2.0257599651813507,-6.9476723950356245,-9.5299194753170013,-9.3566179741173983,3.3217140380293131,8.0479414109140635,1.7514344770461321,-3.6406523175537586,-8.4434513561427593,-9.0869305096566677,-4.0410686563700438,1.7591390199959278,5.8496010955423117,-5.7542631775140762,8.09880874119699,-3.3213450573384762,-1.8463264219462872,8.7918901536613703,5.2979596517980099,2.8079874906688929,-6.1541440896689892,7.300315024331212,-3.6052506696432829,6.5520453453063965,0.22624810226261616,2.5519347563385963,-9.632451981306076,7.3795530572533607,8.1483692675828934,9.642422292381525,0.19162178039550781,0.58734286576509476,-8.5283722262829542,3.6480043735355139,-7.990387175232172,5.5627615936100483,-6.6657743975520134,8.329726429656148,-2.2877533175051212,9.7300530411303043,-6.9983833096921444,-1.8282625079154968,-7.6079065818339586,-6.0859021637588739,-5.7576356641948223,-8.5825749207288027,-7.3366815969347954,-7.6075788401067257,-0.57754695415496826,-6.8315847404301167,1.5552923828363419,-0.20083123818039894,4.6294565871357918,7.2769744787365198,4.1101993340998888,0.12031864374876022,2.1955246850848198,0.18347766250371933,3.7091533932834864,-0.25881179608404636,-9.8497805465012789,-5.2616438735276461,7.551454696804285,-2.7007734496146441,8.1006894446909428,8.2876385748386383,-9.6583295613527298,-7.5449349824339151,-7.7222305536270142,-7.5288969837129116,1.8284140713512897,-9.8446102254092693,1.6359427571296692,-4.709989856928587,-0.79948400147259235,3.0724592506885529,-1.1772713717073202,-6.3998752366751432,-2.7030746266245842,9.4248074200004339,2.7384599670767784,5.2967663481831551,2.7521336264908314,-4.8900397680699825,-6.8983419612050056,-0.43331770226359367,-2.7705470751971006,-4.5846362598240376,6.0184235125780106,-8.3558987360447645,2.409956157207489,4.1332313045859337,7.2186467796564102,3.796560438349843,8.7913953140377998,-3.0188099015504122,2.8620392736047506,2.2941721323877573,-1.848874744027853,5.9622409101575613,7.383101936429739,7.7943816129118204,0.17190746963024139,9.2489216756075621,6.6267525777220726,-4.1692961007356644,6.6404805611819029,6.556922011077404,2.1883697528392076,-0.069468645378947258,-7.5594451650977135,8.4051292948424816,5.0082024559378624,-7.1412055939435959,-2.2423950396478176,-7.9333706479519606,3.8395360391587019,-8.9176815468817949,0.52625002339482307,4.6842255722731352,7.7793081104755402,6.8315519019961357,-2.1070514246821404,6.7867671325802803,5.1953286491334438,-2.1112750936299562,-4.2004369013011456,3.2570452149957418,1.1590321827679873,-0.14601688832044601,5.8942351117730141,4.4096479564905167,-7.0466824900358915,6.4074130728840828,9.3916443642228842,5.366981253027916,2.8540399018675089,7.8487312793731689,-6.3732478860765696,4.8228070884943008,-3.0811476707458496,-4.8488480783998966,5.4103866405785084,-7.6316111907362938,-4.4892641715705395,8.937111534178257,6.0337031353265047,8.4487209096550941,-2.3475270438939333,5.1130331587046385,-5.2515833731740713,-3.3617157768458128,-0.35700949840247631,-0.25856418535113335,-5.6881869584321976,-1.3581766281276941,-6.8745213095098734,-0.079624475911259651,1.7515109945088625,-2.3546233214437962,5.8458963222801685,-8.0203874222934246,1.3486090023070574,6.0715905856341124,5.2230985276401043,4.6170731820166111,-0.850915452465415,-1.3359379861503839,6.8903345707803965,5.8532632887363434,-4.2037821374833584,7.0336606726050377,-5.264942217618227,-7.8838144522160292,-3.2694818358868361,9.8188369162380695,5.1922063156962395,5.4116667993366718,-6.1159829329699278,8.6748759634792805,-1.359535651281476,-9.715623464435339,9.5164354518055916,2.7307912334799767,-3.591639269143343,-4.681146340444684,3.9734977670013905,2.5770793482661247,-7.0272952597588301,-7.7514075022190809,2.0941277965903282,-3.9940280560404062,-7.6294908672571182,-8.8529874384403229,7.840131102129817,9.0835731104016304,7.6134158670902252,-1.3193839695304632,5.1136920321732759,5.822103014215827,-7.9145162459462881,0.72547069750726223,-7.0139030553400517,-2.6686277333647013,8.3737427089363337,-2.5061471108347178,-0.81443315371870995,-8.1779426615685225,-6.6822987236082554,-9.3946217186748981,4.5927789621055126,-9.1638696845620871,2.8422181028872728,9.1597557254135609,8.01462696865201,1.8356031179428101,-9.018304105848074,9.36290068551898,2.2719730529934168,5.0511976983398199,-4.5201662089675665,9.566568760201335,5.3213058318942785,-4.8127634450793266,-8.1151808518916368,8.1554370000958443,8.429802693426609,-0.30598734505474567,-2.729232469573617,9.7899407707154751,-0.46531170606613159,-0.49376923590898514,1.2205264717340469,-6.6115017514675856,0.49008959904313087,-3.0640267860144377,2.9018617328256369,-8.4097554255276918,-2.7594244014471769,2.3541415389627218,6.0569420270621777,-0.97522550262510777,9.3850480020046234,-5.4980785958468914,-6.2069251667708158,0.20875176414847374,8.4909799322485924,7.8998660109937191,-6.9518131390213966,0.87659631855785847,-7.0455888751894236,4.7877978067845106,8.5178543534129858,-0.42173726484179497,-8.1381352338939905,2.3611385095864534,3.6550273559987545,-9.9551208596676588,4.2837119102478027,-3.6538126785308123,-9.6296383999288082,-5.3325847070664167,-4.7511351387947798,7.6717633474618196,-0.67328090779483318,4.1678556799888611,9.1505244467407465,-7.1354737505316734,-5.9073027689009905,-4.0376048907637596,-0.025352407246828079,-6.0978305339813232,-6.2377540860325098,2.0671054907143116,1.8420768715441227,-0.21392728202044964,4.5242476649582386,-0.96938137896358967,7.6072344277054071,-5.2108357567340136,1.4834740478545427,-7.2515878360718489,2.5632606446743011,0.72175336070358753,-9.4911827426403761,1.6916484199464321,-8.46491445787251,-9.817281449213624,0.95068449154496193,-1.8456649035215378,-0.08996967226266861,7.8797958325594664,-4.2713022418320179,-7.7767336368560791,-3.5622172430157661,9.8148470092564821,-1.8661603517830372,-4.5569687616080046,-8.9739337470382452,-4.9044784437865019,-9.5691648405045271,-8.9534709881991148,-0.98689047619700432,-6.6681629046797752,8.1860871147364378,3.5662797000259161,-1.5369754936546087,8.0529443733394146,5.8362239971756935,9.4168444629758596,8.9050411898642778,7.0274259988218546,9.9488954525440931,-8.9139729645103216,2.8563939686864614,7.4135323241353035,-0.76209197752177715,-8.4797939099371433,0.10376757942140102,4.0217864047735929,-5.8357852324843407,-2.0423697773367167,-6.1087854206562042,9.6434654761105776,-2.2755892761051655,-5.8289030473679304,-6.3734844699501991,0.84654192440211773,7.8302083071321249,2.3111575096845627,3.6243616137653589,-5.3542508184909821,-8.8934700191020966,7.4493976030498743,2.0256510190665722,5.116771562024951,-2.4202387407422066,3.0475436616688967,0.066423779353499413,-3.6154616251587868,-5.0634840782731771,-1.9768649060279131,-5.168412821367383,-5.514250909909606,1.9849922508001328,1.7648529913276434,1.8843173142522573,9.7211936395615339,4.1016544494777918,-3.4935572650283575,3.7830975838005543,2.5211988016963005,-6.2116418965160847,0.93467489816248417,9.0810989867895842,6.0308203008025885,-0.003078952431678772,8.2521247118711472,-6.5398247353732586,5.1656996551901102,-0.08577653206884861,-1.6460968926548958,-5.950409471988678,-8.5319640208035707,3.2807138375937939,-1.0424276255071163,-0.081031797453761101,-1.9013421796262264,4.1420503985136747,-4.5588415022939444,-0.44908647425472736,-7.7962980512529612,7.618669830262661,6.9839751068502665,-0.33024624921381474,9.5513651333749294,9.7939496394246817,6.9117447175085545,5.6935995165258646,-7.6728029269725084,3.2012245804071426,2.9816262144595385,-7.8081119805574417,9.0619599167257547,4.360469589009881,6.4124948717653751,-5.1985617913305759,7.7720106765627861,4.1835800744593143,-6.5695775579661131,5.1100101042538881,3.939940445125103,-1.4208296872675419,0.11551323346793652,1.4309940580278635,-9.2827772628515959,4.3625488597899675,1.3587988913059235,-2.6669449266046286,-3.3433240558952093,8.7526446580886841,5.6989152543246746,1.6688022948801517,7.5602613668888807,5.3129307273775339,-5.5731451231986284,-7.8500509541481733,4.193630451336503,2.3471066914498806,7.8222598228603601,8.720982288941741,-6.4505232404917479,6.0559248272329569,1.928696958348155,-4.3901276867836714,-4.875987870618701,9.2718986049294472,-7.1999961230903864,9.6651811245828867,2.6993147656321526,7.383365361019969,-7.7782412897795439,-8.9013399370014668,-4.820312587544322,5.0063816737383604,2.2569079603999853,-8.147813631221652,-0.30368545092642307,-4.0412978362292051,-2.0926868729293346,8.2117885537445545,-4.469634685665369,-1.1501186992973089,9.9550901632755995,-4.7994696535170078,-4.6864259615540504,-4.7610942553728819,0.28889094479382038,-4.6098103281110525,2.9178576171398163,0.43307236395776272,-1.3526973128318787,5.2163309045135975,-9.1263687517493963,-6.8796038161963224,-5.5013143923133612,-0.59095640666782856,7.7957467641681433,3.1160046439617872,-9.3098462838679552,9.4135124236345291,-7.0965440385043621,8.3843675721436739,-3.9340711012482643,0.06704878993332386,6.8890911899507046,4.9557616747915745,-8.5134147293865681,-4.9613451678305864,-5.3281962964683771,9.0048818103969097,5.048736073076725,-5.8927020244300365,1.3571075443178415,8.9065862260758877,-7.0051503740251064,4.4376871921122074,4.2087508179247379,-3.5248919390141964,-2.8587683383375406,-7.3194065503776073,2.7341287769377232,-7.4975463468581438,8.7385679315775633,9.1113726701587439,-5.1593830715864897,6.2487537227571011,2.8039455413818359,5.9128142055124044,-3.3315234165638685,7.0859899930655956,-5.7660528272390366,9.9501657206565142,-7.5645767897367477,2.1579139493405819,8.0598417110741138,1.7597793601453304,-3.388202004134655,-5.5110317468643188,-3.9105344191193581,-4.3519344832748175,-2.9628161992877722,3.9481936395168304,-2.7093914803117514,3.2574474532157183,7.9194499459117651,2.1953811775892973,-2.2284528147429228,6.3936034310609102,-2.7070058602839708,3.3525632787495852,6.531130438670516,8.7094121053814888,-0.91059843078255653,-4.4277550280094147,2.7212878502905369,-3.3150006085634232,4.7848241869360209,-1.4597744587808847,5.5707381013780832,7.3953917156904936,-5.6512982491403818,-1.3696392718702555,0.47282521612942219,6.7734894435852766,2.0372096076607704,-0.61802984215319157,-7.2274836432188749,7.6824301108717918,-1.3969881925731897,0.81951474770903587,-6.4155505783855915,-6.15854287520051,-6.630073431879282,8.3558567706495523,-3.1151120364665985,4.3120569828897715,-7.2581765614449978,-8.173446748405695,8.8805138319730759,-5.2038782648742199,-1.5819602087140083,-8.0051619745790958,-2.75729114189744,-1.7921651899814606,-0.92028378508985043,-7.2095049452036619,9.8504077922552824,-4.1960802115499973,-3.5200701002031565,-1.8181234039366245,2.8000140655785799,-0.16349964775145054,-7.9385027755051851,-2.4161317851394415,-7.9268534854054451,-6.626512985676527,8.1962761282920837,-5.1869693864136934,2.6055602077394724,-8.3494898676872253,-9.8761933017522097,-9.180821580812335,-2.0683023054152727,-1.9567850418388844,-7.6861352380365133,-0.87492757476866245,-4.907677723094821,-3.3394522033631802,-6.1731297988444567,8.2075007632374763,3.4654702246189117,4.1581705491989851,6.3725311867892742,3.1317844986915588,-4.0978277195245028,7.8095641359686852,-4.6554273925721645,-3.7681451346725225,8.7847703229635954,5.6349650584161282,6.8578591570258141,0.038984064012765884,-4.7947575710713863,-5.490456260740757,1.901661017909646,1.2168211489915848,-8.8868611119687557,-1.4747001510113478,-5.2853713277727365,8.7641310133039951,-1.2499125488102436,-7.2801393736153841,2.6975689269602299,-1.958945207297802,-3.9920361246913671,5.8488993253558874,2.451085289940238,-4.6094345301389694,9.2338941339403391,-5.9411403350532055,7.2544205188751221,5.0457957666367292,4.6895676106214523,-2.4370533227920532,0.44486301951110363,-3.1871493346989155,-6.418814966455102,-1.0231131874024868,4.5367295760661364,8.8140987046062946,-1.442924439907074,8.7690054439008236,0.67464252933859825,-1.2829258665442467,-2.1349707897752523,-2.4540022015571594,-4.4149425160139799,-1.938822939991951,-5.7970893569290638,8.3192109782248735,0.97905439324676991,-5.0327267777174711,-5.0389142241328955,-9.0313261747360229,-9.4990112073719501,-9.8813583794981241,4.00971669703722,-8.69136325083673,4.2578534223139286,1.7425804119557142,7.5490756332874298,-2.685693996027112,1.5410660114139318,0.69654415361583233,6.8176735285669565,4.6391262393444777,9.7948192246258259,1.5268632024526596,1.989933829754591,4.8179705161601305,-4.369418928399682,3.176114447414875,0.95562081784009933,1.1191711761057377,9.9100438226014376,-1.8933177180588245,-0.99082397297024727,7.2215567901730537,-7.294892780482769,-5.2629404049366713,5.760651296004653,-0.73354470543563366,-8.6857917346060276,-2.1016732417047024,-2.8221115190535784,8.7717554345726967,6.8937357701361179,3.017220888286829,-9.568428685888648,3.4190796408802271,4.4716292899101973,-5.3264112211763859,-0.99335773847997189,4.6365598496049643,6.6615068539977074,-0.05417446605861187,9.4898267835378647,-4.4810965470969677,6.210376126691699,-2.208311827853322,4.9031702429056168,7.5823891442269087,-2.7855153754353523,3.8431415148079395,-8.320452282205224,-1.8414938822388649,-9.9876149371266365,-1.8442481942474842,3.7206631060689688,-6.8150689173489809,-0.86326896212995052,-8.9613750111311674,6.1701960396021605,2.4849641416221857,4.792425949126482,6.3030427321791649,-4.7606726735830307,7.3744160868227482,1.8113072030246258,2.6402536686509848,-5.2564920578151941,-5.8619785774499178,-2.2739188186824322,2.2464748658239841,-3.4968342538923025,8.7067457195371389,-5.7245453353971243,7.5665814336389303,-8.4657073486596346,-3.1433969177305698,8.9280573558062315,-6.1398728284984827,7.1574016287922859,-5.5506906099617481,9.542953185737133,8.4143456257879734,-0.092923268675804138,-1.7612991016358137,-2.153936717659235,-1.2143522966653109,-9.6189812943339348,-6.2186108902096748,3.8067978341132402,0.85130599327385426,7.8999138716608286,-6.1474189069122076,0.33046167343854904,-5.930573670193553,4.8483568988740444,6.3345155771821737,4.2034335341304541,7.1075192838907242,-3.9232617616653442,1.7396192438900471,-2.2192760650068521,0.62723631970584393,1.9609084632247686,-3.0113649740815163,7.988935299217701,-9.96428526006639,-9.7423656564205885,0.060414550825953484,-4.6125655341893435,-3.3888909593224525,2.9096984025090933,3.3011520002037287,2.4617715179920197,-5.0059995800256729,4.1650975868105888,2.7952523808926344,-0.19313420169055462,-6.0064510628581047,9.5770177897065878,0.93814481049776077,7.3999156337231398,-9.617807837203145,-6.496316883713007,-3.597837146371603,-8.8488689623773098,-2.9406416695564985,-3.364484990015626,-6.8991752620786428,5.5613945052027702,-9.6424292679876089,-0.30870427377521992,-8.3926534932106733,4.6727521810680628,-5.053977956995368,-2.2074845153838396,-1.192189073190093,2.8783158212900162,-4.1458907909691334,0.013521993532776833,7.2642236668616533,9.8073040507733822,-8.6406636331230402,-3.6336712632328272,8.8871286623179913,5.9715753886848688,4.2676826193928719,6.941895792260766,-7.5572868809103966,4.6794116497039795,6.871711453422904,-7.1454702783375978,6.081054313108325,4.2799662612378597,-6.6069356165826321,-2.7668813522905111,-2.9748313408344984,2.009709570556879,-2.8111536614596844,-7.0595318917185068,-9.5524810999631882,-8.5498435795307159,2.7789701707661152,6.151760071516037,-7.3683516215533018,0.1143171451985836,1.3283385057002306,5.3853539563715458,-8.3559348527342081,1.8029429577291012,2.0623829215764999,2.4698573350906372,-9.1076715383678675,7.3644616268575191,-5.4933015070855618,-5.9183943178504705,9.5467318221926689,-8.0781114287674427,-8.8187682535499334,2.9619718249887228,1.860564025118947,-9.5003370009362698,7.8360291663557291,0.14233852736651897,-7.7162911742925644,-7.705748463049531,9.485599473118782,4.4704972021281719,-4.3534105829894543,-7.7716241125017405,2.3135586176067591,3.9797824807465076,8.2042633090168238,9.0535771101713181,3.4706397633999586,-8.9573911111801863,-6.8723974470049143,-4.3838673364371061,0.34172045066952705,3.2956953346729279,-9.2484060954302549,2.0387599803507328,5.4390839673578739,-5.3156397864222527,0.042146258056163788,8.3522377349436283,-3.9402451738715172,-3.7005898356437683,4.186681630089879,5.5582679435610771,-2.1905508078634739,3.4126333519816399,-3.8711482752114534,-2.3890135157853365,7.8498997539281845,-6.7346960306167603,9.9638389702886343,2.2417298797518015,-3.2458152063190937,7.5838802475482225,2.2754581551998854,3.6253105103969574,-9.4061451219022274,-9.0810591634362936,-5.3613526839762926,-8.2545232865959406,6.2271358352154493,-0.52789053879678249,7.7437885664403439,9.8545750230550766,5.8425678685307503,-3.9617096167057753,-4.4534807186573744,-9.6503950655460358,5.8101360965520144,-9.0425015147775412,2.677048621699214,-6.843715887516737,-2.3328967951238155,-8.9963756408542395,-2.0853879861533642,-9.1158213373273611,-9.6092095412313938,-1.9847564212977886,2.1988899726420641,-3.2561343349516392,-5.8497147541493177,3.8441594876348972,8.7886170204728842,-9.7135898657143116,3.6951291747391224,4.036147017031908,-4.4769748952239752,-4.5170208066701889,2.4313452001661062,3.6188764777034521,2.4570673424750566,-4.069077530875802,-8.9860150124877691,-7.95430694706738,-8.0368433520197868,4.7737979609519243,-6.7775546573102474,9.6388997975736856,0.98905151709914207,2.9889338836073875,-4.9881165567785501,4.7250694409012794,-5.75779153034091,8.7977827526628971,4.3348711170256138,-3.8210239633917809,0.050295628607273102,5.3187086526304483,-8.4635553508996964,-6.9747705478221178,-4.96857357211411,-6.8159871455281973,3.7040700204670429,-5.6950587593019009,3.1474660988897085,-0.53717306815087795,-8.2676823530346155,5.0627060979604721,8.9015062991529703,7.616517785936594,-9.1854338906705379,0.41260587051510811,-5.3330527618527412,7.3822680581361055,-6.2206108681857586,-9.8068320192396641,-3.425745852291584,3.4895119816064835,8.227980425581336,7.6671553961932659,1.8808820843696594,-8.0147150158882141,-3.3152564987540245,0.48407775349915028,-4.1051148902624846,5.3340854868292809,9.9748971406370401,8.0963990092277527,-3.8217102829366922,8.5153230279684067,-2.9657240305095911,-4.9237257242202759,6.9417927507311106,-9.2891058698296547,-2.0023486670106649,6.5260161366313696,2.7533376961946487,-4.6532402466982603,-7.0087844133377075,3.3603884372860193,-1.9514299742877483,2.3164851311594248,-6.8343042116612196,-4.1508606169372797,-3.5143430903553963,-5.564268846064806,1.3335388991981745,-7.211632477119565,-5.907021127641201,0.69593976251780987,-3.3403276558965445,-0.88686053641140461,-5.4649641457945108,-9.6523628756403923,-7.2628481686115265,-6.6891484335064888,-4.5176960341632366,-8.9172032754868269,8.564557358622551,4.5156716555356979,-5.106371808797121,-2.7909521572291851,-7.5328501313924789,-4.6121390070766211,3.7797502242028713,6.2621260154992342,7.5520697608590126,7.6366081181913614,8.4727804642170668,2.0214066654443741,-6.2180797941982746,-7.2670714929699898,2.3294390365481377,-9.1180162411183119,-6.4989575743675232,-7.9799249954521656,1.4006172399967909,0.17404184676706791,5.1213982328772545,-4.659781688824296,3.049197718501091,7.866156967356801,6.500290185213089,-9.6227279864251614,-9.1892648953944445,-3.9750905521214008,-9.3468623515218496,7.2844630759209394,9.9710522685199976,3.4756333101540804,-5.0308507774025202,6.4910230785608292,-5.374989565461874,2.5504094734787941,4.7321189753711224,-7.2762656398117542,7.8034129925072193,-8.0376955959945917,-9.5498665235936642,-4.6066585183143616,-4.1096751019358635,8.6906078550964594,3.0463668797165155,0.28824949637055397,4.609366012737155,9.6146904025226831,-5.8982512913644314,8.090578131377697,-1.6532043553888798,-5.4055356979370117,9.1615607216954231,-1.648800503462553,8.6100036557763815,8.3315882738679647,9.0042623598128557,-5.3623698931187391,-5.3507573530077934,9.8212043754756451,4.9820937402546406,-5.9503902867436409,-8.2095176074653864,2.637585336342454,9.8968468047678471,-3.6955965496599674,8.1088391970843077,5.2605271153151989,-6.3206534646451473,8.7772484961897135,-0.78437758609652519,-3.0340174026787281,7.2695676889270544,-0.3757170494645834,5.3236249648034573,-5.8350966218858957,9.5311085507273674,9.3415649235248566,3.6818210501223803,0.36649648100137711,-0.29356268234550953,6.0920737776905298,9.4841075781732798,-0.60378115624189377,-7.7498194202780724,8.7850209884345531,9.847899628803134,-6.3507833704352379,2.3839216493070126,6.5712568163871765,3.1134427059441805,7.6316614262759686,5.3337294049561024,3.9902290981262922,3.7805616948753595,-0.099486382678151131,7.932443805038929,0.58317163027822971,1.3656729087233543,-7.1353341359645128,-3.560800738632679,-6.3779638055711985,5.5623481050133705,6.3847227487713099,8.0353668238967657,-9.5896496158093214,6.758910296484828,-2.9945158213376999,-8.8273543957620859,-1.3453203998506069,9.2001074366271496,6.2058376520872116,1.5135454572737217,-1.841409495100379,-8.5693203005939722,-4.5662808883935213,-5.4828487057238817,9.7618382424116135,7.2154948674142361,-9.1776286344975233,-8.4044535644352436,6.3489550165832043,6.8870916590094566,-8.6503548640757799,-6.5141899604350328,-3.9906377531588078,9.3513296823948622,7.7981234528124332,3.0610107071697712,6.4070576149970293,3.417463656514883,-2.6882199477404356,-0.91260445304214954,1.8570288363844156,-8.9162540901452303,4.5175154041498899,5.8815111592411995,-9.4418223388493061,-8.7080446723848581,3.89320133253932,-6.965095279738307,-2.356342813000083,-3.0535982735455036,-1.8261291179805994,8.247978063300252,3.7674526963382959,-0.42242489755153656,0.30482180416584015,3.1401432584971189,-3.6121516022831202,-9.4319295790046453,-2.4404298886656761,3.6949203535914421,0.5264899879693985,8.7173101771622896,-8.1677059456706047,5.3661854472011328,9.4789313618093729,-7.6004496216773987,-0.75677275657653809,0.92035255394876003,8.3654596749693155,-1.7190990597009659,7.1021684072911739,6.1445551831275225,-8.4609108231961727,-2.5281934160739183,8.6533145140856504,-3.7428157776594162,-5.5047261528670788,2.0675839390605688,9.8833582270890474,9.6018782909959555,-1.2314098235219717,3.6951646860688925,4.6329859364777803,6.5947488974779844,-2.0551502145826817,-0.90959431603550911,-7.5515984650701284,0.28461672365665436,3.5533549822866917,1.2372933607548475,-4.8103978484869003,-8.3565989043563604,-9.3577726557850838,3.9149792399257421,-0.94380566850304604,-2.5417996570467949,-0.026777619495987892,9.9486271757632494,6.5770991705358028,1.3058889284729958,8.0753093212842941,1.7239042837172747,-6.3406118098646402,-6.6626597568392754,0.67749291658401489,6.6235325857996941,1.712299631908536,-1.3799948524683714,6.4265820197761059,-8.4358650632202625,-1.5841053053736687,-4.0578015521168709,0.52936007268726826,-3.0451759416610003,-0.27199706993997097,8.5453216452151537,1.2210362683981657,1.9566507823765278,5.4297929722815752,-1.4693941082805395,3.8932888861745596,-5.4935813322663307,9.3785838596522808,5.859080832451582,-6.428324868902564,-0.85604369640350342,-7.5263338908553123,4.9063157476484776,0.44888738542795181,4.450368657708168,-2.6538568083196878,-3.3713199384510517,-1.7741536721587181,1.7992964014410973,0.7747113611549139,0.57393125258386135,6.0626449249684811,-5.1266203448176384,-3.1080972123891115,2.2102053090929985,6.920725479722023,-3.3667298872023821,-4.629162298515439,-2.3307091183960438,7.7719071321189404,2.4433086067438126,4.6878509223461151,8.7105668149888515,-1.5033940505236387,-7.5437406543642282,-7.6491586770862341,0.59013260528445244,-1.6412201058119535,-3.9862529654055834,3.0464574880897999,1.8111044261604548,-0.76781708747148514,-4.7017168812453747,-1.7555816285312176,-6.0603662021458149,3.4252713620662689,8.5358873102813959,2.658168962225318,-4.1541528142988682,1.1536958254873753,-9.8341737408190966,-2.9580606520175934,3.8746766466647387,1.6905090771615505,-7.613848652690649,-5.9542870987206697,6.2967634573578835,9.7035553492605686,7.6549092214554548,-3.9405768271535635,-9.2746865469962358,0.34321030601859093,8.335694195702672,-1.9875093270093203,-4.0691963396966457,9.0171651262789965,-8.5055737942457199,6.8212518002837896,4.7791390120983124,2.9894919972866774,4.3921000510454178,-1.9743294455111027,-2.55492789670825,-0.67310171201825142,7.1795990969985723,7.5221577007323503,4.9046133365482092,-8.1635359860956669,-4.5493039395660162,-0.15126963146030903,-2.3886188771575689,-5.5174088198691607,8.9099995326250792,-9.6377071738243103,-0.94446763396263123,6.3325468543916941,-8.8848904147744179,-8.3531923871487379,7.8955620713531971,0.71187328547239304,4.4543927628546953,4.9792784173041582,6.732476856559515,-7.2613408509641886,-1.3556607253849506,-4.5897438935935497,0.17442271113395691,-8.4774143435060978,0.097140604630112648,-7.3577789589762688,-2.1909428387880325,-3.1762303970754147,-2.9042302444577217,8.6023369245231152,-0.52316395565867424,7.1834714058786631,-7.3959469143301249,-3.6797687690705061,-5.8736523054540157,1.5257345233112574,3.0202234908938408,0.89631334878504276,4.3385383021086454,-2.1866442449390888,9.070236450061202,3.464165423065424,2.2283708304166794,-7.7713574841618538,6.7947811260819435,-0.11348250322043896,-7.3003542516380548,2.9461138416081667,-4.6645627729594707,2.6935166213661432,9.9339546356350183,-0.024282876402139664,-8.1222256179898977,9.7540531307458878,-3.6288769543170929,9.4650786463171244,-0.42303901165723801,9.9834060203284025,-8.8948599435389042,4.08893758431077,2.7740897703915834,4.1268709395080805,0.31999086961150169,-1.9133736751973629,1.9287042412906885,-4.2677232716232538,-7.6249813102185726,6.9391377363353968,6.0880671534687281,2.144774254411459,7.2209889348596334,3.1611629575490952,9.6659305226057768,-4.7055526543408632,-6.2234200723469257,2.9788736160844564,5.9289671014994383,8.1501995585858822,0.40412319824099541,-7.9013257380574942,2.4183368869125843,4.9881555233150721,-4.070002343505621,-4.5293408911675215,-4.6323150396347046,4.6811708621680737,-3.561204643920064,6.8336000200361013,-7.6843315083533525,9.440357219427824,4.0839390642940998,-1.2360361870378256,5.9398730378597975,-8.5537279397249222,-2.5054716411978006,-9.4618149567395449,-4.7239737119525671,4.1738644987344742,-9.8592588398605585,-4.5633204374462366,4.2734503839164972,3.8807141873985529,3.1634562369436026,8.2090773247182369,9.9627390410751104,3.755219578742981,-6.0244324151426554,7.3644298035651445,-6.0281555820256472,4.7891639731824398,-8.5209869779646397,7.771872915327549,1.8682269938290119,-0.70882183499634266,6.8314919248223305,-3.1150877848267555,4.719654293730855,3.2298299297690392,3.7517331633716822,-4.6206155885010958,1.3138461578637362,1.8124637566506863,2.078450471162796,-7.4828366376459599,-4.0353492181748152,-2.1142631862312555,5.5786907207220793,1.0550650954246521,-7.5208546780049801,-3.0045538302510977,2.4638297129422426,9.5860829576849937,-6.7035769019275904,-7.0169648993760347,5.8709595259279013,-6.7831235192716122,-3.9569632243365049,-4.680864131078124,8.716590590775013,-0.26179436594247818,0.022167814895510674,-7.425456615164876,0.35068906843662262,-5.9687457792460918,3.2897197548300028,-9.679976562038064,8.6339243222028017,-9.633770901709795,5.2124578226357698,5.7787440903484821,3.3520499709993601,-2.0960329193621874,-8.0252138618379831,0.23063953965902328,-3.6411768849939108,2.7401436679065228,-6.4052737876772881,6.5634786337614059,-7.6144727412611246,3.5566562879830599,-3.2776617724448442,-7.661356870085001,-4.4248972181230783,-9.2475013621151447,-2.7553871832787991,-9.7923326678574085,0.26485294103622437,-8.6165396682918072,1.8178058415651321,-8.1371283251792192,-0.71574671193957329,-9.5549149066209793,-9.4548320956528187,-7.3630273714661598,9.5989883970469236,-9.8018574435263872,0.18194819800555706,-1.9965564366430044,3.8760319724678993,4.4694698601961136,-1.6199464444071054,-6.4398255664855242,5.8517319336533546,-9.9412670265883207,-2.8749154135584831,1.2967000808566809,-6.3616526313126087,-0.29574600048363209,9.397045811638236,-3.8508919905871153,-1.9416376762092113,6.8956390116363764,-4.994999198243022,9.0485142916440964,-1.6201512608677149,-9.8821758199483156,-9.7290049493312836,4.6138187032192945,4.4510593730956316,8.9549967087805271,6.6298328153789043,7.6002582162618637,-2.4600215442478657,-5.5820351652801037,2.7350117079913616,7.341875871643424,-5.0920895673334599,-2.7493197657167912,-7.8172456566244364,-4.4477338064461946,6.9379585050046444,6.2687261682003736,-1.5191637352108955,7.4151686765253544,6.7400826513767242,0.56925269775092602,7.4301738105714321,-1.068629315122962,-0.45282937586307526,9.2967545799911022,-9.4456230662763119,7.4131294246762991,-7.5336231850087643,2.3951488547027111,-4.7331020049750805,-9.2453563958406448,-6.7049389891326427,-9.9095645640045404,9.9483734741806984,2.3131366726011038,-3.1118472293019295,-0.81632897257804871,-0.040970249101519585,-8.5868987068533897,-0.0065550301223993301,9.8296869359910488,7.548488387838006,7.4444717261940241,-0.76356133446097374,6.824723994359374,3.1363048683851957,-8.1239742413163185,0.36494087427854538,-6.4386448822915554,5.6954911909997463,4.1205699648708105,-5.5804899055510759,8.7061919830739498,4.9688059184700251,-9.2788111232221127,-8.9785423502326012,-2.3612723685801029,-5.9046389441937208,0.73329698294401169,4.5224763359874487,9.2598925903439522,-8.9850833546370268,7.7040665503591299,2.2466504387557507,-0.54597998969256878,3.7143872212618589,7.7061350736767054,-2.9876781441271305,6.0934865288436413,-6.7717837728559971,6.6301548667252064,-6.9870247971266508,9.0742582641541958,-8.9412050787359476,5.1662499643862247,9.1632701270282269,7.0811749342828989,-6.6927458252757788,-4.9790595285594463,-3.0534572061151266,0.54479118436574936,-3.6944818403571844,6.8437584582716227,3.0485399905592203,-3.1882765516638756,-5.3639505058526993,8.0838844086974859,5.8453985024243593,3.6127542518079281,-0.43918333016335964,-1.354155233129859,0.71306444704532623,4.4742453284561634,-1.3586513604968786,5.1466517522931099,-0.22388067096471786,-2.7623603958636522,-6.9911166373640299,0.3026993665844202,7.4683348089456558,0.30327065847814083,-2.9299623239785433,-3.8767237775027752,3.9035194274038076,6.4511251822113991,4.061066173017025,-5.660720057785511,0.27802275493741035,-7.2714773286134005,8.2805593404918909,-8.6390212830156088,3.9693070016801357,-7.8571134340018034,5.4945314954966307,6.5909660700708628,-5.6331304740160704,3.9761573821306229,7.2772308439016342,8.4189286641776562,-3.0657970160245895,-6.850394057109952,5.4271067958325148,-6.6159617062658072,5.5316292680799961,-9.9067698232829571,-3.0804191902279854,7.3947239853441715,3.1261578109115362,1.3344307150691748,7.7771168667823076,-9.9966808594763279,5.7847947999835014,5.0463268533349037,-6.3844582438468933,-3.5896760411560535,8.3148264512419701,7.2883093543350697,-5.3845463879406452,1.9288939982652664,-1.0784777998924255,-5.9763129707425833,-3.8920677825808525,6.0168259590864182,4.7940197121351957,-6.9105823617428541,-6.15772963501513,7.0380543638020754,8.579825758934021,1.1316758114844561,0.075450735166668892,8.1005847919732332,6.5287403482943773,8.5391631349921227,-2.2850450966507196,-4.7528790310025215,-1.637832997366786,-7.0591212995350361,-2.6516582723706961,-6.4205262251198292,-9.7842375747859478,-3.6809177417308092,-5.1844358164817095,5.1872700732201338,2.448239466175437,7.5608054269105196,-5.5430524796247482,-2.0829901751130819,-8.8158111646771431,-7.3382354620844126,6.2766095716506243,-9.0228018816560507,-6.2312173470854759,-8.0699229706078768,8.8046480901539326,-0.27940161526203156,4.0971283614635468,0.43648144230246544,-4.0563175454735756,5.4710597358644009,-7.8988982457667589,3.2171998359262943,-8.5222541447728872,6.4746003597974777,-1.3916239514946938,-9.0236853994429111,-1.0805008001625538,0.023121470585465431,8.6026345659047365,4.4792947452515364,3.5068967565894127,0.41389370337128639,-3.6884459387511015,8.289156798273325,-4.1415482852607965,-7.001984529197216,-2.3539587575942278,-2.9847790487110615,-5.1814167853444815,-4.0718735754489899,4.0208638180047274,-1.341701066121459,-9.9697505403310061,-1.5973311103880405,-6.3439065311104059,-2.0370397623628378,3.4727762825787067,6.9510867353528738,6.9148937333375216,-1.3808914180845022,-8.6419962905347347,-6.0316443908959627,6.1527532618492842,9.3241983093321323,-8.1988638173788786,1.6958354040980339,1.905728206038475,9.574052058160305,-8.9069053065031767,1.6425221506506205,5.8698770962655544,-4.9755188636481762,-3.5455020144581795,-9.2523064836859703,-3.515065461397171,2.2948410455137491,9.3935481645166874,-2.6358471903949976,-0.68367133848369122,9.5358870085328817,9.6531052980571985,-0.2591017447412014,5.2770523633807898,-8.5808090958744287,2.3415367398411036,-5.7919169031083584,-4.7473576106131077,-8.8393204659223557,-2.4590616766363382,-9.4495402090251446,1.5777112171053886,-3.4074835013598204,-9.5751557592302561,-9.6428420580923557,-7.2464675642549992,8.6196691077202559,-9.2211608216166496,-0.049922820180654526,0.94723909161984921,0.2474985271692276,-0.29217367060482502,9.437194112688303,-9.0783959254622459,-0.60031203553080559,-9.4443076010793447,9.5221529994159937,-1.1743860319256783,2.0940304920077324,-5.6294261757284403,6.2342987302690744,-0.14111331664025784,8.3085643779486418,2.0416434668004513,-6.0981592442840338,8.2376118469983339,9.5424552261829376,0.04513939842581749,-1.3420520443469286,4.131358414888382,-4.2590103764086962,-1.1873513739556074,4.1855268925428391,6.1505939811468124,-6.9668324664235115,8.4467605501413345,4.7047105897217989,-7.9290034621953964,-2.7611729130148888,-7.0330923888832331,-5.1837567426264286,-3.3995356317609549,4.0046886447817087,6.8021624442189932,3.944331482052803,-7.6206720061600208,-0.63438891433179379,-2.1744098793715239,-5.3067813534289598,8.925829641520977,-3.5810668393969536,-6.9903195090591908,-6.2999652046710253,-3.515165951102972,0.60591056011617184,3.5388668719679117,-2.2643768787384033,2.6178595796227455,-1.6339465323835611,-1.7393042985349894,7.5127191655337811,6.2711521796882153,-0.74518864043056965,-4.3854072876274586,-5.5402392148971558,5.1995501201599836,8.8389884773641825,-3.1205135025084019,-6.4703828189522028,-7.724010506644845,2.5554326269775629,9.1562598664313555,9.2597250267863274,8.1986759230494499,-4.8536188807338476,5.2275117766112089,-1.2094513233751059,-7.248323168605566,-2.5674732215702534,8.4776232298463583,3.4137686342000961,-4.7904600203037262,6.7384795192629099,-6.3745887484401464,2.286933334544301,-3.511350154876709,4.7379977628588676,-8.4714842867106199,-0.23639478720724583,6.9128878135234118,4.9056142475455999,8.6587751470506191,8.034042501822114,8.1524692568928003,-1.4490573387593031,5.6933743879199028,8.5434605833142996,9.9421688821166754,-1.9674421939998865,-6.8008916918188334,-2.5866393651813269,6.3522474095225334,2.2223398182541132,-9.1345789469778538,-4.8683550860732794,-2.4438914749771357,5.5160391889512539,8.0707701295614243,5.4337089601904154,4.3466147035360336,-6.4465653896331787,-7.4244757555425167,-3.164003249257803,2.5974432192742825,-4.7717150673270226,1.7849043477326632,-1.1125354282557964,1.6171268559992313,-0.94884030520915985,-7.1589388139545918,-0.28462390415370464,-3.6738810781389475,-6.9192307721823454,8.4884360339492559,5.1445672754198313,4.7423165012151003,4.1135512944310904,-3.5432840418070555,8.0251598730683327,-1.1378722731024027,-4.21922467648983,7.4909074697643518,-0.31801878474652767,-4.9416394624859095,5.8655935805290937,3.0314321164041758,9.2796823848038912,3.6219922825694084,-5.1756002474576235,-6.3133212644606829,-7.990462938323617,4.2894113156944513,-7.8639052901417017,-8.656194694340229,-4.6642172615975142,8.5005260817706585,8.3420011028647423,4.0126793924719095,1.1026589386165142,-7.6111317798495293,-0.29180523939430714,-4.3705825228244066,3.6195829417556524,-5.6693913228809834,-5.4599297698587179,-5.0396064855158329,-0.66616324707865715,3.7943793926388025,-7.8654399607330561,5.5505966581404209,8.8781550619751215,-4.8477256391197443,4.2752236314117908,-6.3163151405751705,1.6914611775428057,8.3881024550646544,-1.1618938203901052,-7.949370127171278,-5.0637113209813833,-5.7961331028491259,4.3909733090549707,-0.91148208826780319,0.72061360813677311,-8.6470041424036026,9.8013892024755478,-8.0515190213918686,-1.8801772873848677,-0.13960553333163261,-6.3501215353608131,-6.4926162455230951,-1.4012110605835915,9.8457720596343279,-2.1088384091854095,-3.2470814231783152,6.3025734852999449,7.3526950180530548,-3.2546957768499851,-1.6718687303364277,0.90231440961360931,5.1983676943928003,8.9659585990011692,-9.1336781531572342,-9.72871333360672,9.5150041859596968,-1.3244938477873802,-0.76803186908364296,-8.3115514367818832,7.7550152130424976,-1.4591754414141178,-4.3615770060569048,-5.0246966723352671,9.9230669904500246,-3.012935584411025,1.5916874818503857,-8.50840182043612,-0.70938440039753914,-2.6235447730869055,6.0830564517527819,-2.0700895227491856,8.0054532084614038,7.6522155199199915,-9.2136185523122549,6.7129974346607924,5.3480151388794184,4.090559259057045,-9.970422750338912,7.1048352774232626,-9.0333584789186716,-3.6559476237744093,-5.5116631276905537,5.4778480250388384,6.191877955570817,6.8929259944707155,9.4073212705552578,8.8487461023032665,0.87588892318308353,1.0652170516550541,3.1030737608671188,-6.6391985584050417,-5.0101448129862547,-5.5038328096270561,-2.9179962165653706,-2.7623563911765814,-6.9238098617643118,-8.4723225980997086,5.6741056870669127,4.694405198097229,-1.1317205801606178,-0.82772135734558105,8.4872188698500395,4.6876902505755424,6.0101563669741154,-7.301814965903759,-1.6041108313947916,-0.29067754745483398,-5.4174640867859125,8.6811292450875044,3.7393683847039938,7.5645492412149906,-2.6207654364407063,-7.2046325076371431,-8.2585339806973934,-1.1805999558418989,-2.3433888144791126,-5.3357450291514397,2.1333315502852201,-5.0965393986552954,2.4623651709407568,4.9715255293995142,-3.5703102126717567,-6.2036940548568964,-5.4859502706676722,-2.3661637865006924,-8.1146999727934599,-3.7624279875308275,4.8728623799979687,-1.8018629774451256,-3.910997761413455,7.8606715705245733,-5.692774411290884,1.5405031386762857,-8.7636579480022192,9.2008775938302279,-0.85013022646307945,-8.1386445555835962,-6.1990311276167631,-7.1161321084946394,-0.83232490345835686,-8.8845806755125523,-3.1474046129733324,1.570723382756114,-0.85201546549797058,0.17614296637475491,0.43491549789905548,9.6248548477888107,4.9355803709477186,-7.7005885913968086,-3.7924376130104065,0.50108671188354492,1.764448806643486,-4.9088146723806858,-2.448158860206604,-6.2059043906629086,-2.6350641809403896,-7.5236314255744219,-9.6733502484858036,0.0023762509226799011,-0.062272464856505394,-6.6132390685379505,-8.7089984118938446,7.8637013956904411,5.2294971700757742,-7.8409433458000422,-2.7347959671169519,-3.7157624773681164,9.1800920478999615,9.8071991559118032,9.5963684190064669,6.1641716025769711,1.2322510126978159,-9.5571416802704334,-6.8802168406546116,4.1955835279077291,-4.8275353573262691,3.6132898926734924,8.5633326973766088,3.9327900856733322,-1.5969210490584373,0.54799423553049564,-9.8608008865267038,9.5195012260228395,-5.7427414692938328,1.7441588919609785,-5.9214108996093273,-1.1529578175395727,2.2380298469215631,-5.4322670120745897,-0.11163619346916676,3.7305737473070621,-0.24692155420780182,9.9895147513598204,-6.2254174519330263,9.4089148938655853,-4.3672269023954868,0.017495518550276756,-5.952741326764226,-7.7234472520649433,-7.9779476393014193,-5.3659579157829285,-5.6546542979776859,2.2252478916198015,-0.25858987122774124,-6.1198894865810871,3.0174293927848339,-6.0640935879200697,0.77909862622618675,-5.6893046572804451,-0.14334117993712425,-9.1351340617984533,5.8018301147967577,-8.6411369405686855,8.4114504884928465,-8.7514958065003157,-6.3900100812315941,3.1005929876118898,-8.3335546776652336,-2.0534544810652733,7.5905989203602076,-4.8038078378885984,2.4017092678695917,5.5277621373534203,5.0983640179038048,8.204167066141963,7.4360231123864651,-2.7594136632978916,2.5346176140010357,-0.68166338838636875,3.2835043128579855,5.8570901583880186,0.11441612616181374,2.9919115547090769,5.0576016679406166,3.1113509181886911,-7.525015389546752,7.0663672499358654,4.4345032330602407,-9.3040489871054888,6.848679156973958,5.7507231179624796,-7.5964331347495317,6.748323068022728,-0.93406466767191887,1.1752013862133026,-8.3902144525200129,5.6657090876251459,3.5727583151310682,7.349108625203371,-3.5312004294246435,-8.8855667132884264,0.28025847859680653,-9.6956697665154934,4.8782365489751101,8.5217950586229563,5.8096952270716429,3.5478051193058491,7.9607461951673031,-3.7385572586208582,6.0682033561170101,8.2939320057630539,-3.8846359681338072,-9.0766685642302036,8.4314482007175684,7.3500537034124136,-7.6472709607332945,-7.6830186322331429,-8.494133809581399,-0.90692585334181786,-2.7027459535747766,-5.0511846225708723,4.7400871757417917,6.6452780459076166,7.1882478334009647,-7.1185295097529888,-1.1254478711634874,4.5976988039910793,-6.4760870765894651,-3.5954686626791954,-9.0417635254561901,-4.9195648450404406,-3.1263108365237713,-3.9061756618320942,8.9056992717087269,-1.9121924322098494,1.7818551417440176,7.6394594926387072,-3.6041691713035107,4.7287879511713982,-3.260789392516017,-4.0872672758996487,5.298940222710371,-0.71155717596411705,0.85861626081168652,-9.2364195547997952,3.4965484496206045,6.489898394793272,-4.2775496561080217,7.2229745704680681,-3.4662593528628349,2.5791075639426708,7.0609256252646446,-7.0228826534003019,6.4112675935029984,-5.8254275564104319,-7.9609079193323851,1.0206157341599464,-6.51126972399652,5.089776087552309,3.8668215833604336,9.6704600565135479,-8.5776762291789055,-5.0043726805597544,-8.4916030708700418,1.627199687063694,8.345231469720602,-1.6945448331534863,-0.21494581364095211,7.4057867098599672,9.0573688317090273,7.1981036756187677,-1.4713892806321383,-9.639572836458683,7.6993404515087605,2.8151070233434439,-6.4961583726108074,-0.93374105170369148,6.6142149642109871,5.1110335160046816,1.1404217500239611,7.0684398338198662,-0.73157940991222858,4.3449301365762949,5.2409176994115114,4.1038932837545872,-5.8654695563018322,-0.94680041074752808,7.1255674120038748,-0.58837242424488068,-8.7752606254070997,-5.8053216338157654,9.9593332782387733,6.5145635604858398,-9.730109665542841,6.0468533262610435,9.4639800488948822,1.1128341034054756,3.4028629027307034,-8.0830889102071524,7.5247011426836252,7.6522422302514315,-8.7646980118006468,-8.2794746663421392,6.8692962452769279,-7.7378736063838005,9.5583152025938034,6.6037630569189787,9.4458275754004717,-3.9757880568504333,-1.0698243416845798,-0.53764080628752708,3.871042774990201,0.61602781526744366,-6.4204257167875767,-8.0949940346181393,7.4352750740945339,4.6683067549020052,0.23174443282186985,-5.0712374877184629,7.7115824818611145,8.5669112484902143,4.0774986799806356,-9.479575389996171,-3.2235755957663059,1.365014985203743,1.8069452606141567,9.3290875386446714,-6.025586724281311,7.9639561008661985,-9.7896721493452787,4.9801875930279493,2.0129932556301355,-7.6222586072981358,-7.3003942519426346,2.2738287225365639,-3.7605642713606358,-3.8036599289625883,-8.11237758025527,-4.7299765795469284,3.2836687937378883,8.6215203069150448,1.8919440545141697,-2.0961827132850885,9.4571996666491032,7.1549496427178383,-6.7612205818295479,4.1657065320760012,-6.970204534009099,-8.2275793794542551,-0.92661662027239799,6.3545340858399868,0.65450870431959629,0.32787688076496124,-9.3731841538101435,4.8939318116754293,-7.6879246067255735,9.0511528495699167,2.7260918170213699,-2.5747317261993885,6.4839358720928431,-4.4896687287837267,2.1377184521406889,8.6341201141476631,-6.3430956844240427,-8.4091394953429699,7.5925142131745815,7.3865185026079416,5.2166093979030848,-4.4457303546369076,0.60997308231890202,-8.1823224294930696,-0.29305826872587204,-5.4302465077489614,-6.1530199740082026,6.1933269444853067,-8.7539173010736704,-7.0880693942308426,-9.1822860483080149,-6.6816075146198273,2.2225277498364449,-5.9760128427296877,1.1521837301552296,4.7520399931818247,7.5362808536738157,2.272444935515523,-7.0178727433085442,-9.3871734477579594,9.7758683189749718,3.0189917795360088,0.19494054839015007,-3.634123420342803,1.2877241149544716,2.7792883757501841,-8.50016875192523,-2.3362018726766109,-4.5448140986263752,-4.6905129216611385,6.5493671875447035,-4.7855494171380997,9.2709869612008333,-2.5219922792166471,-7.1241782698780298,3.9358406607061625,9.67409354634583,-7.5096125900745392,5.9412181004881859,-5.9472603350877762,4.3955798912793398,-3.4886546060442924,6.1820871662348509,2.3391295503824949,-6.2495501525700092,3.8106151018291712,5.0081245228648186,-8.4510267525911331,3.593381317332387,-6.0400932095944881,4.1534573305398226,7.1574651449918747,-4.483173843473196,-8.7027440778911114,-7.0197069644927979,-0.21492891013622284,7.6898839138448238,3.8790784310549498,-4.3287006393074989,7.5283995363861322,9.8111452162265778,-4.082195833325386,-9.4653243850916624,-3.7069360539317131,-2.4742091819643974,-4.0336623787879944,6.2364463973790407,-4.0452721808105707,-8.8894962798804045,-5.7639672607183456,5.002282252535224,-6.6420642286539078,6.8265352863818407,-6.4213100913912058,-2.9586780071258545,-6.5012106578797102,-5.8474996034055948,1.074198056012392,-5.9531859308481216,4.8040919005870819,2.3726890236139297,-2.2154832910746336,4.3723878264427185,6.7223114985972643,1.8894877936691046,-3.3785587549209595,-3.4369421377778053,-4.6864582691341639,-5.3040877543389797,-5.8028504252433777,-8.5070642177015543,1.7717047687619925,-2.9578592907637358,7.2589552402496338,1.2608579453080893,-8.7604250758886337,3.5357592348009348,5.5055652279406786,-7.9650926496833563,-9.3121473025530577,-9.2597086261957884,-7.9228746797889471,0.24527303874492645,2.3040423635393381,4.0401002950966358,1.9657695665955544,-1.3108005840331316,9.3746521510183811,-0.22114620544016361,3.1958016939461231,-8.1608265731483698,0.98779948428273201,1.9460183288902044,6.7301471438258886,-6.4168227836489677,-7.5404967460781336,6.8712079059332609,4.3914070539176464,6.3784678187221289,2.9087574407458305,7.4864076357334852,4.0532706212252378,3.3194409124553204,9.8435198701918125,0.038613611832261086,8.979052621871233,-9.0624356735497713,7.6436419785022736,6.6908707655966282,-6.5349119901657104,7.734208395704627,8.8406453933566809,4.7272735927253962,-8.7126118037849665,7.1334238536655903,-8.5451573505997658,1.5404198504984379,9.8365176375955343,2.352090310305357,-8.4180580265820026,-2.30124038644135,3.052885327488184,9.8438012413680553,4.7676189709454775,9.3721602484583855,-2.1025525499135256,2.3993554059416056,5.9664046950638294,-2.6361651066690683,-6.0268901567906141,6.0571659076958895,2.7875363081693649,-9.8771685175597668,-5.5712736677378416,3.603500984609127,4.0411547850817442,-0.31141724437475204,6.0104496125131845,-2.3732371907681227,-6.9974055513739586,-5.395078444853425,4.9166133813560009,-6.4787828084081411,-8.9026333577930927,-6.5588358417153358,5.6460352148860693,-7.0860209595412016,5.2457557898014784,5.4176785051822662,-5.0772427394986153,6.781315766274929,-6.425784882158041,1.8335135374218225,-4.1378839407116175,-5.4153456632047892,4.2854743916541338,5.9682123269885778,7.7447046618908644,5.2513912692666054,0.13318192213773727,-1.6113553289324045,-2.0489477179944515,3.3357658889144659,4.2173993494361639,1.830977238714695,-6.7654563300311565,-7.0245135203003883,-0.99871240556240082,-5.359329842031002,5.7433812972158194,9.0095855109393597,4.1038311272859573,-6.9101333245635033,1.3892382383346558,8.9271608181297779,-1.2079815659672022,-2.5461104046553373,7.522487286478281,-9.5560390222817659,-8.3478440158069134,-2.2143607400357723,3.2391031458973885,-0.39332329295575619,9.4154904689639807,6.1484638229012489,-2.7684021182358265,-8.5343445930629969,3.2704358547925949,6.2155153509229422,4.1666298639029264,8.5482334811240435,-9.8397375829517841,3.5304445773363113,-3.8178828172385693,-7.1564609464257956,1.3608956709504128,-7.4263694230467081,5.0091269891709089,8.397424453869462,-4.4870598334819078,5.9854218084365129,-3.0155405029654503,-2.1891786810010672,6.4739695377647877,8.0061501357704401,-0.63452718779444695,-4.4983719661831856,-4.1375925857573748,-0.5185429472476244,4.8487598076462746,-6.8937966786324978,-4.0407534688711166,7.056495314463973,-1.4831163175404072,-6.7358822468668222,-9.972897544503212,5.5109697394073009,2.8685316070914268,-8.5891789011657238,1.6702191438525915,-8.6267579346895218,-9.9205975793302059,4.5164848119020462,8.5603472404181957,-6.2437850330024958,0.70497971959412098,8.5942309908568859,3.2404088508337736,1.551659582182765,-1.2573118507862091,8.3597922511398792,3.0285085923969746,0.1440143771469593,0.44971609488129616,-1.6215115506201982,7.2554342914372683,2.084271227940917,-9.6533774212002754,-4.314315402880311,9.3010682798922062,3.0547311995178461,0.86737246252596378,-2.0709372777491808,-6.2427650764584541,-2.1526106353849173,1.0731124971061945,-4.1981744766235352,1.2816167902201414,0.13348151929676533,3.423974122852087,6.7331878282129765,4.6879597287625074,-9.4607237353920937,-6.3838165160268545,7.1958434302359819,0.54066655226051807,6.982826329767704,0.36225731484591961,8.4587717056274414,6.5762009378522635,6.2092922069132328,-0.42575155384838581,4.3937093950808048,5.0739157665520906,-2.6975935883820057,1.5446172095835209,0.38153181783854961,-7.5946563389152288,-3.3890693262219429,-0.088114077225327492,-0.93321835622191429,-4.6008420642465353,-6.3525315374135971,-6.9975207652896643,-7.331478726118803,-0.1629289984703064,1.652399692684412,-8.1182738579809666,-3.8287163618952036,-9.2358460742980242,-6.8649647478014231,0.53750823251903057,-6.0990535840392113,-6.7935564182698727,0.69730322808027267,-0.42456193827092648,4.3875784147530794,2.0305293519049883,7.1069116145372391,5.8636394049972296,-9.8123960569500923,3.0594723019748926,0.55108149535953999,2.0267750788480043,4.0088443178683519,-3.3534399513155222,-1.2652097456157207,-4.38012620434165,3.2189276069402695,0.51639329642057419,-0.97778475843369961,6.3716356083750725,8.0797980818897486,-2.8334961831569672,-2.5702942349016666,1.064852150157094,-3.0298257153481245,-2.280743308365345,7.547276709228754,7.0797893311828375,-9.9805771373212337,-3.5599468089640141,7.9740321356803179,-0.44175495393574238,-4.5754359941929579,0.64728804863989353,-1.0296831838786602,-5.8852012455463409,7.4226982984691858,-6.7095612734556198,-7.5962972175329924,9.0326837264001369,-7.6844614371657372,7.2566436696797609,2.4102913588285446,9.7669649496674538,-6.6199362371116877,-1.2683106865733862,3.5023590922355652,4.1493688710033894,-1.5572743117809296,6.890707965940237,-7.8710842505097389,-9.3129816558212042,-3.2826840132474899,7.9298419132828712,-3.1468231324106455,-8.656332790851593,-6.985205328091979,-0.34592565149068832,6.0276509448885918,6.7295561730861664,3.650731984525919,-2.1474292408674955,8.1568101886659861,-8.4910169895738363,-8.522531958296895,1.8053884617984295,3.1639698334038258,-3.1589069589972496,8.2507936656475067,-8.9107186254113913,-2.4479287676513195,-2.338738813996315,-7.1831868775188923,-7.8218284156173468,-1.4701642375439405,-9.0502736438065767,-7.9491240251809359,-0.92747516930103302,-8.0750994384288788,1.8037533853203058,-4.3167605437338352,8.2055859360843897,-8.7170297466218472,-7.1189414337277412,-8.0486541148275137,6.2703073583543301,5.055899191647768,-5.5021681450307369,5.0600216630846262,3.7842093221843243,1.2061858270317316,-7.6347173750400543,3.3050962071865797,8.7520583067089319,-4.1558923851698637,-8.0832718126475811,4.4506598263978958,2.2398153599351645,4.5768502168357372,3.1217084359377623,6.5537854935973883,9.4729204382747412,-8.6260415147989988,2.1202715206891298,-4.5964569225907326,7.3485442996025085,6.9841791875660419,3.0997383408248425,-2.6976032368838787,1.382454838603735,-5.0814385060220957,-3.7369322218000889,-6.6198027785867453,0.97472674213349819,2.2324409242719412,0.63470996916294098,7.5705349445343018,-2.0190497022122145,5.8317173738032579,-6.3259745854884386,-0.65482955425977707,-5.7202453073114157,-0.16284649260342121,3.0390757974237204,-2.2529706545174122,-5.6777298450469971,-5.6054718792438507,8.8341599330306053,-4.2738581541925669,9.266047291457653,-5.5430216901004314,-1.5655106399208307,8.4627408534288406,-6.7143319267779589,-7.7766676433384418,-2.4530641920864582,-8.6498173326253891,2.5201011262834072,-4.6602725703269243,-5.2010476961731911,5.9914079681038857,-2.406154926866293,-0.24579641409218311,8.8997446838766336,-1.9909501727670431,-1.8994910176843405,-4.7454708255827427,2.871875548735261,7.6124483253806829,2.4191425088793039,-1.4717560727149248,4.1957526188343763,-1.9856241531670094,7.614920437335968,3.967928159981966,8.9686941262334585,-3.1576719414442778,9.0077336877584457,-7.0197610836476088,-1.1245095450431108,0.36814591847360134,7.4285329226404428,-8.647032780572772,9.3200674932450056,2.3745101690292358,8.3925077132880688,-7.1227188222110271,8.464777609333396,7.5174245703965425,5.3548917453736067,-0.33431533724069595,1.162202637642622,-6.8601817823946476,0.92480786144733429,3.2458128407597542,-7.623481685295701,-7.8566661663353443,-6.9882408250123262,8.636477580294013,-6.7211621440947056,-2.5721301417797804,-9.7912347596138716,-1.2826032005250454,3.2880769949406385,2.7101579587906599,9.6249128598719835,5.9105894528329372,-0.72294171899557114,9.5186014380306005,-0.86547826416790485,-6.0931143816560507,-6.9733819179236889,-1.6298708599060774,6.7605230584740639,4.1111749410629272,-3.482655119150877,7.0154634304344654,8.8940084725618362,1.6005462128669024,0.38029043935239315,-8.4585045650601387,-2.0862129051238298,-2.9802344832569361,-8.8009051606059074,3.1869750749319792,3.490187581628561,-0.41720999404788017,7.951705027371645,4.3065355252474546,-0.057315202429890633,-3.2965294271707535,-4.7700299974530935,-9.8941262625157833,9.4199067167937756,0.37234113551676273,-2.0624541956931353,-3.6676048953086138,-1.4354258961975574,-5.202970365062356,-6.3228880614042282,-8.7796192429959774,0.93939251266419888,8.370045954361558,-4.6375012770295143,-2.4839210696518421,-7.2613588161766529,-1.6576020512729883,0.68238954059779644,8.9210924226790667,-3.1995039526373148,5.9371212404221296,5.1968124974519014,2.8277636040002108,6.2229928188025951,9.8404325731098652,8.1504115276038647,3.9666864834725857,8.0998370237648487,-6.038999930024147,2.528207078576088,-8.4235323220491409,5.6922756507992744,-9.9230142030864954,3.9002893213182688,-7.8372678160667419,-0.96016771160066128,2.4613418709486723,7.7729225531220436,-0.49051058478653431,-4.0113240852952003,1.6761453077197075,-9.0257217735052109,4.6941603161394596,-5.2474516443908215,6.0802499111741781,-9.239617045968771,9.7563143447041512,-5.6246539391577244,6.4412788115441799,-1.4268857054412365,-1.6679842583835125,6.1886345501989126,-7.6189881097525358,7.6668580155819654,-3.1171938497573137,9.3230209872126579,-7.9861166886985302,-2.6631711982190609,0.081728948280215263,-6.3814873527735472,6.3420902471989393,-8.4890874288976192,3.9075943361967802,-5.0618826970458031,4.9375493917614222,5.3927442338317633,-4.1475415229797363,-7.7303309179842472,-3.6717208009213209,9.3885484337806702,-6.6663217078894377,-0.86891841143369675,-3.9116695057600737,-3.4293356630951166,3.1555617786943913,-4.4730825256556273,0.90203455649316311,0.49487629905343056,-2.6139596756547689,7.1797890681773424,-9.2849966883659363,7.0606642216444016,8.5837066918611526,6.3585155457258224,7.5709050334990025,4.2010355275124311,6.8042220361530781,-1.440106863155961,-3.8759820722043514,-3.6306396126747131,-0.15992037951946259,-7.7817415725439787,-7.7305923867970705,-8.06622713804245,-9.0794939454644918,0.94526577740907669,7.0820065680891275,7.284523556008935,-9.0124588832259178,7.6035573426634073,-7.0116040855646133,-4.0298426989465952,-9.5661944709718227,0.96952976658940315,-5.1131270825862885,3.6731612123548985,-5.1793969422578812,9.8756291903555393,-0.30004214495420456,-2.8082543332129717,1.6694779694080353,-1.0836768336594105,6.6435264609754086,-2.2506401315331459,-6.5086300298571587,9.4551155064254999,-7.8735312446951866,9.5603870414197445,1.4251582231372595,-7.3656543157994747,5.4479349683970213,3.443134743720293,8.7657429091632366,5.8412211667746305,-6.595726041123271,5.6324534770101309,4.6457104478031397,0.45561084523797035,-2.5484422594308853,8.3310040552169085,-0.81470050849020481,7.3286256846040487,-7.7879832405596972,7.3656932171434164,-4.7939635626971722,7.8544424846768379,9.6149796899408102,-1.036197654902935,4.6260841935873032,-9.4028439093381166,6.4024204201996326,5.4801306594163179,4.5561139564961195,-5.3926192503422499,6.2482955493032932,-4.8965756967663765,3.252304382622242,1.4798624441027641,-7.9518121201545,-6.1062874086201191,-8.3724462054669857,4.2966374475508928,-6.4143071230500937,-5.2597890421748161,-1.2743947375565767,1.2477141711860895,-9.6678368467837572,-7.3338812962174416,-0.542924664914608,-4.93476920761168,1.3339673075824976,-0.011372761800885201,8.8580705784261227,-2.4076408054679632,-5.218958081677556,4.9715586565434933,-3.013542303815484,-8.6054455488920212,8.2766706775873899,6.0042212437838316,-7.0534304715692997,-7.0059126056730747,-8.3731401152908802,-7.365904962643981,1.2353134527802467,1.9132888037711382,-3.3549817837774754,-7.1787879429757595,6.1110644787549973,8.6608205176889896,2.4105868395417929,-5.2668906934559345,-0.63184787519276142,0.53283494897186756,-4.6429301984608173,6.2721963878720999,-3.1951816845685244,-1.418519290164113,-1.0536426305770874,-8.5716220922768116,-3.2524937205016613,-4.6619076654314995,7.317908862605691,-7.9056106507778168,-9.5981912314891815,3.1999754998832941,1.988329840824008,-2.1402714494615793,8.4578104037791491,-9.5803992263972759,2.2302052192389965,3.0592154618352652,-3.7656307313591242,-8.9556531608104706,2.3373344261199236,3.5797963477671146,5.6373231951147318,6.4910626690834761,-4.7095916513353586,5.8931574039161205,6.2966119963675737,7.1579504851251841,3.6739377770572901,7.872326010838151,-9.8165959678590298,-7.5284303724765778,9.670749120414257,-3.7193792499601841,8.3929950650781393,1.0682027135044336,-6.7169075086712837,8.9355274476110935,-0.59003980830311775,3.2010154891759157,-0.53257010877132416,9.0942559670656919,7.160187903791666,1.2782333232462406,3.2675520610064268,-2.25240683183074,3.7984380498528481,0.34841186366975307,-4.2417263146489859,9.305874751880765,3.8371059484779835,-9.7602156363427639,0.055801859125494957,-2.1380749810487032,5.3738550376147032,-1.618262492120266,1.8623605277389288,0.6934825424104929,-4.6388260181993246,-4.7488459199666977,6.146664209663868,6.9854981824755669,5.2680857945233583,0.71806804277002811,8.5696787107735872,-9.4097626954317093,-9.8816175013780594,-0.34534473903477192,-4.2089533992111683,0.12026477605104446,1.2901702895760536,3.8921452593058348,-4.7145181242376566,3.0939272977411747,-0.36380439065396786,5.539681687951088,5.4302510060369968,6.2287792190909386,7.0924622658640146,3.0134361423552036,6.8213464040309191,6.3691441901028156,6.206531161442399,-6.8306428007781506,-2.6135278772562742,-5.5629752390086651,3.0751927010715008,4.7638292331248522,5.6780366692692041,-9.2375768907368183,4.0452033467590809,7.7327588945627213,4.4788796920329332,-3.4689026884734631,-1.8474340625107288,-9.8242248129099607,4.2535707913339138,9.7644014935940504,-9.7039424814283848,5.8387169428169727,-8.6842181161046028,4.3461329210549593,5.4561164416372776,0.94915555790066719,-7.542452672496438,-6.0020474158227444,3.589113550260663,2.2315455786883831,5.5866367369890213,-5.3962394408881664,5.4037530161440372,0.87706288322806358,0.79596353694796562,-2.2407500259578228,-0.28562555089592934,-0.5085578840225935,-7.3322824854403734,6.3282880745828152,-0.46220269985496998,-8.2407018169760704,-1.4754241518676281,2.5463462714105844,-3.558118212968111,-1.2927549425512552,-7.332251314073801,6.8521852325648069,4.6773356013000011,-8.0204340815544128,0.56440680287778378,5.9852186404168606,-6.4301854092627764,7.8738544508814812,-4.1281041502952576,-1.0464080609381199,-6.9802101142704487,3.6086330842226744,-9.7036469634622335,-9.1945125907659531,7.8268932923674583,6.5957043319940567,-5.9971622936427593,5.6933620665222406,8.3363748528063297,9.4522946141660213,4.7157325223088264,-2.6833823882043362,0.39225870743393898,-7.3078228253871202,-2.5782052148133516,8.105012709274888,0.94874647445976734,5.5820819269865751,-1.9489311892539263,4.3135652132332325,-1.9093491695821285,9.5685701444745064,-1.0414286702871323,-3.2915914058685303,-1.7767059337347746,-1.0965639259666204,-9.9498340394347906,-6.8607003893703222,-7.7914195787161589,9.6111577935516834,-5.2708102948963642,-6.5085893124341965,-9.8605467565357685,-6.209336007013917,-0.31024022027850151,5.7926936075091362,-2.1984149981290102,-8.760812496766448,-2.9756234586238861,8.69658587500453,3.518947521224618,2.9510950203984976,-0.94589080661535263,2.413284070789814,0.065474910661578178,0.43690226040780544,3.0163723509758711,-3.8297952804714441,-7.3692305944859982,5.34141905605793,-6.7698047682642937,-0.10871494188904762,-7.1719509176909924,1.0209484957158566,-0.91854625381529331,1.9931831955909729,-0.56993784382939339,1.0547325573861599,6.8901784997433424,3.2301773689687252,9.5911437924951315,-1.6461262106895447,-6.4431576803326607,9.848894476890564,-9.630371555685997,2.3452664725482464,-3.1062992662191391,-7.5717133935540915,2.2130135353654623,-5.881415531039238,-8.9507979433983564,3.9389735087752342,2.3278710711747408,4.5291897095739841,2.0915625151246786,-7.1087136678397655,3.8494072388857603,-3.0124276597052813,-9.8716219794005156,7.6493932120501995,3.3518530521541834,-5.4056479502469301,7.2749361488968134,9.8519896995276213,2.3910353239625692,6.1307868082076311,0.13401178643107414,-7.6638261415064335,-5.9259420167654753,2.6925561018288136,-6.2094972282648087,-3.0198857840150595,4.7796826809644699,-7.873065359890461,-2.6094870362430811,2.3514396976679564,0.64709536731243134,-4.2680782545357943,6.4088208694010973,-6.9475195556879044,-6.9611485581845045,3.9762063696980476,8.1005648896098137,6.19424132630229,6.6140978969633579,3.1434842851012945,-7.4595174379646778,7.8904400020837784,-5.374744962900877,6.661444716155529,-1.0985251795500517,-2.9126230347901583,7.5447097420692444,3.9367722626775503,5.3315278887748718,6.9893466215580702,9.9488014820963144,9.5066657103598118,-1.4692533202469349,6.2595133669674397,3.6412858683615923,-0.90830368921160698,-5.8600334264338017,-9.5817656721919775,-0.73564926162362099,-4.0570676047354937,-7.1351862791925669,-1.0757719725370407,-0.49947259016335011,5.364251472055912,-3.0253889132291079,-7.7114100567996502,-5.6688067223876715,4.3654507212340832,-9.8696157895028591,1.3674268405884504,2.3429987300187349,-1.2202479783445597,-8.7077033240348101,9.6302430517971516,-4.5048748143017292,6.5690390300005674,5.8391068875789642,-2.130416501313448,-5.9100759867578745,9.35292256064713,-5.43037174269557,-8.2578437216579914,-9.5794162712991238,-1.2492684368044138,3.545451108366251,8.3968843147158623,6.4348214026540518,-9.9565569683909416,0.14703258872032166,-8.8232019636780024,8.444605665281415,8.4875607304275036,-9.5666590146720409,-6.8380562029778957,-7.2105787042528391,-8.1962605472654104,5.4489962197840214,1.2795868143439293,6.0156769491732121,5.4826100915670395,6.2279301322996616,-7.1781394351273775,-2.9894641041755676,-3.9231440145522356,3.7185949739068747,-1.5741661842912436,2.9890065547078848,-3.7667333707213402,-7.4877129308879375,-5.9912097733467817,5.737370727583766,7.9899416584521532,6.9495943933725357,1.8331020604819059,8.9464231207966805,2.5335395056754351,1.1985699739307165,4.365639491006732,-6.6969622205942869,4.155984316021204,9.6285101491957903,6.3702311459928751,4.4749988149851561,-8.6948032584041357,6.44164620898664,4.7479631099849939,-0.98389506340026855,3.6757399886846542,-1.8379031494259834,-9.6381685230880976,-8.6983647104352713,6.5843218937516212,2.6981980726122856,8.6151057668030262,-5.9172316547483206,9.0876105893403292,-4.5286755729466677,6.5496882982552052,0.61135829426348209,-4.9010652676224709,7.7960869669914246,8.8337934948503971,9.5674153417348862,-0.45019832439720631,-6.4831634052097797,-2.5273238401859999,3.26827647164464,9.9227627646178007,-8.1260591465979815,5.3239377867430449,-0.57749828323721886,-6.0135726258158684,9.8849091026932001,-4.3325554113835096,2.7412452269345522,-7.8913711942732334,9.7243543434888124,-2.7763946168124676,-2.8642682358622551,0.24381570518016815,-2.1893628686666489,3.3783274423331022,-0.45057200826704502,7.2363317850977182,1.0284470301121473,5.1093214005231857,-7.6351031567901373,-3.1787376664578915,-5.0439067743718624,7.0588819123804569,-1.3715651165693998,8.105153338983655,3.3123099897056818,9.9941011611372232,-9.141628285869956,-3.346593901515007,-6.2036506924778223,-4.7571587655693293,6.4326681010425091,-6.1470971722155809,5.7378567196428776,-3.8419897947460413,7.6775678899139166,-3.1163358688354492,3.7431063503026962,-9.6114629041403532,0.14297314919531345,2.9497979022562504,-2.746555432677269,-1.3571002427488565,-8.783712238073349,-7.851575780659914,-1.4341287408024073,-3.4016796294599771,7.9705192986875772,0.51799368113279343,5.9198811091482639,-4.558073952794075,-7.548882020637393,5.9398983232676983,-8.1287560891360044,-0.003575468435883522,-0.09281977079808712,-0.021810270845890045,-6.5651440154761076,-0.37544122897088528,9.9593400023877621,6.62757633253932,9.6755511127412319,-3.0122941732406616,-7.6281149685382843,-5.7282576616853476,5.1735134795308113,-8.7588307727128267,-9.6687872707843781,-3.3076574839651585,8.200719365850091,9.4905242789536715,7.2417089063674212,-8.5982757434248924,8.7795912194997072,-1.41022689640522,-1.6833806596696377,7.4213180132210255,-9.9080154486000538,-4.0156439039856195,9.0729525405913591,9.1134989820420742,-9.4224592298269272,-3.2722711842507124,2.938258945941925,3.3182056993246078,9.0832927729934454,2.901785047724843,-9.6986019145697355,-4.4023758172988892,9.2696824576705694,-4.4467831216752529,2.9161174595355988,-8.8137564994394779,7.1945231966674328,-1.6484990436583757,-6.3233614061027765,3.2648763991892338,-7.2222550120204687,-4.4399652909487486,-2.4966014642268419,-0.38075054064393044,0.72573867626488209,-2.5099840760231018,-5.3023071028292179,4.1245595086365938,1.4717721939086914,-3.9246471971273422,-1.5453945752233267,6.5534403827041388,3.6726416554301977,6.0884098149836063,7.9038863349705935,0.61777196824550629,2.8935533948242664,-8.047992279753089,-2.6062305364757776,-2.916568685323,1.2301612086594105,-4.6804781723767519,-4.7966015059500933,3.5185302142053843,-4.062584051862359,0.14988681301474571,-0.85225422866642475,-3.8367496058344841,-4.2505770269781351,0.55195257067680359,-3.3330620545893908,1.2261006888002157,7.0743645168840885,-1.1554311029613018,0.6695217452943325,-7.3479433357715607,3.1163764372467995,-3.0611165426671505,-8.1856783013790846,3.3048029150813818,3.8226978946477175,8.0836235173046589,1.4605968631803989,8.2515691593289375,4.1230036783963442,-4.6770666632801294,-7.4593680910766125,-9.5994868408888578,1.4246683102101088,4.4003791082650423,-2.8282146900892258,6.195759791880846,-7.8650511056184769,-7.9139154218137264,-9.1764780972152948,-9.0673734527081251,4.6543876267969608,6.2929582595825195,5.7495963107794523,-6.5346814692020416,-8.391425758600235,5.3072877880185843,-0.41402697563171387,1.4486955758184195,8.2266323734074831,5.0104425009340048,-9.4927693251520395,-4.9740438628941774,1.2448356673121452,1.953148515895009,6.5672001894563437,-5.0662861485034227,-9.0712592843919992,-0.6547855120152235,-4.9800273030996323,0.68115608766674995,8.1904490012675524,-3.1234933342784643,3.4475845936685801,3.5543710272759199,-1.6860384959727526,2.7510632481426001,-2.8798886761069298,-2.2889236081391573,-9.9390216451138258,-5.1367889530956745,5.988103374838829,2.0535460393875837,-6.0516216792166233,-9.6055316925048828,-0.17115284688770771,3.434179276227951,-1.7487992998212576,7.930232472717762,3.4173092897981405,-5.2826613560318947,-5.6893739104270935,-1.3072788156569004,8.5650132782757282,-7.8216867242008448,0.91124339960515499,-4.7320974431931973,7.6383134722709656,-2.8653335012495518,2.3399003315716982,6.7049692943692207,-9.5809387974441051,-6.8383653648197651,7.5933382101356983,1.2354354374110699,3.9634844940155745,-5.715999798849225,-8.8085857313126326,-5.9003768488764763,-7.6336669828742743,0.95903734676539898,-1.4592271484434605,-5.2306170482188463,9.019307903945446,7.5080904550850391,8.4764156304299831,3.1176452338695526,-1.7364516947418451,-4.5435688551515341,-3.7617058306932449,-2.9898476414382458,9.6307452023029327,3.9347687363624573,-8.341738898307085,0.39434912614524364,7.8258444648236036,8.9680597931146622,6.181091321632266,5.6019693054258823,-7.7017616014927626,-3.5072183050215244,-5.8180016838014126,-3.1542669236660004,6.235867515206337,6.2254551332443953,-8.7754485756158829,-8.9642007928341627,-1.3227170612663031,9.0944191999733448,9.9036433827131987,-9.4655109662562609,-6.8428056873381138,-7.0351623836904764,0.025840513408184052,-5.6984126847237349,6.7780415061861277,-1.4562742225825787,4.3992079142481089,-2.5124725420027971,-7.1259548421949148,-5.923010278493166,-8.0337187275290489,-2.7106381952762604,2.3039090353995562,1.7992542497813702,0.066268416121602058,-6.2266514636576176,8.6688798293471336,-2.1365620568394661,-9.1984277591109276,2.0246588904410601,8.4420657437294722,5.799099188297987,5.4601813666522503,9.2683503124862909,-6.8361472431570292,4.873309014365077,5.7047208305448294,-0.75687812641263008,-0.85059828124940395,3.9947586413472891,-0.091405352577567101,3.750316770747304,-8.425926435738802,5.454406850039959,-7.7839504275470972,-4.8548184428364038,5.0664715096354485,-7.8132196422666311,3.2174895331263542,-3.6533133033663034,-1.2366400100290775,-4.2085799761116505,6.3963868096470833,4.073238056153059,-1.0878800973296165,-4.0007260721176863,-0.20304713398218155,7.3868958279490471,-8.4416835848242044,0.62400205060839653,7.6025477144867182,-3.9804248604923487,0.99941681139171124,-2.8015648573637009,-5.9005013760179281,-9.7265946492552757,5.1237320993095636,-5.4344885423779488,2.5511039793491364,-3.5953208524733782,-6.55751739628613,7.8051475528627634,1.1150603089481592,0.81869947724044323,-0.11780135333538055,0.11273182928562164,-5.3160660527646542,-7.1221121586859226,-1.3390285149216652,-5.0521825067698956,7.9686474334448576,9.0575545281171799,-9.6808967832475901,-6.8322335463017225,-9.3491879012435675,8.198948884382844,-0.26595775038003922,-9.9518344551324844,-0.4816870391368866,4.2860077135264874,-5.0682469550520182,-2.026534965261817,0.026901243254542351,-7.8707261476665735,-3.294347170740366,-8.0928461533039808,3.5347163397818804,7.9776286333799362,0.004581911489367485,-2.9917353019118309,-2.0951643865555525,6.5722170192748308,-0.74842735193669796,1.1815684009343386,-1.3797979895025492,9.7352578863501549,0.47945033758878708,-1.878094132989645,-5.1280295941978693,-6.7933515552431345,4.1404361184686422,8.3099537622183561,5.3930248972028494,0.56956775486469269,-7.2746612690389156,-5.2319274097681046,6.9960613362491131,2.8030113503336906,-9.788134740665555,-9.1805847082287073,1.9128152076154947,8.685287619009614,-6.3708410691469908,5.2741792425513268,3.1306490954011679,-3.1805508304387331,4.4822461809962988,-6.8883226532489061,7.9611911904066801,3.740477729588747,6.2093087285757065,-0.14807197265326977,-8.6455672793090343,-6.0492527484893799,-9.7909129410982132,4.1262005921453238,9.0534627344459295,1.5483269467949867,2.7310851588845253,1.3483650051057339,1.970729622989893,2.0528672728687525,2.5403494294732809,-4.3470406997948885,-0.71299721486866474,-3.3441176172345877,-4.5847407728433609,4.2618731968104839,9.3029304035007954,-5.6485572922974825,4.6976224053651094,-7.0601180009543896,0.59678096324205399,-9.9022678565233946,-7.4158638250082731,1.5767133049666882,-0.17939282581210136,4.9448534287512302,8.1516939774155617,5.5208204779773951,8.4298948291689157,1.2425380758941174,3.3375295344740152,-6.1410097125917673,8.0497906636446714,-7.1681748609989882,4.485133346170187,1.6362624429166317,0.66296916455030441,2.5228320434689522,1.2382525857537985,-8.6887032818049192,8.9639529585838318,-2.8424766659736633,6.4947309903800488,-3.0561155918985605,-4.1346986964344978,8.1190549209713936,-3.0438014306128025,2.8294101264327765,-6.1039046384394169,-8.3252277597784996,-2.1029454935342073,-4.2048480268567801,9.119257964193821,7.368753831833601,6.6457875538617373,-4.2484519723802805,-3.7322547845542431,-8.0061149504035711,1.2260441668331623,6.1243998166173697,-7.2121559176594019,5.2955137100070715,1.6990437917411327,-4.1709006484597921,-0.32715304754674435,1.5388055797666311,2.7054694388061762,-9.1750425472855568,-4.9400857742875814,-8.0215688515454531,1.4923275541514158,1.5492925606667995,-1.0398424882441759,3.3673701994121075,-4.6089538652449846,-2.687570983543992,9.9945367965847254,-1.8199033197015524,-7.1150302048772573,-2.3126307968050241,-8.385741738602519,0.83861193619668484,-5.4491035174578428,-3.0827823001891375,7.6779348496347666,3.0511561594903469,0.7816746924072504,-2.3933603335171938,-5.2070658933371305,4.8435681872069836,5.8506385516375303,-8.317738575860858,3.7677686661481857,4.888079697266221,-6.0444115288555622,-8.4245345182716846,8.8483637291938066,-5.5506559275090694,-9.8741388227790594,5.3488065302371979,-2.6085261814296246,-1.4994734432548285,-1.6500942595303059,6.8658454157412052,-5.7359656412154436,-4.374498538672924,-2.1968954522162676,-3.2218043319880962,-8.8653546757996082,-0.016027288511395454,-9.370559873059392,9.0002184081822634,6.6709350142627954,-1.5950848162174225,-8.5904403869062662,0.46842829324305058,-7.1255935356020927,0.14946962706744671,-7.8638984449207783,-8.5411470662802458,8.9412684366106987,-4.1012376453727484,-9.5010596141219139,-4.3089306447654963,-0.19730203785002232,3.9447265677154064,-0.98046727478504181,1.2865832727402449,3.6051532719284296,-8.1888522207736969,9.9607396218925714,-9.849018631502986,7.5438615027815104,9.6804145444184542,-1.2725979369133711,-8.5534573998302221,2.0414923690259457,-8.637659540399909,6.8561151530593634,-9.2724906094372272,-2.7496671210974455,6.3447524514049292,-3.7454213201999664,-9.2960796505212784,0.78931919299066067,6.087761027738452,-3.0002808943390846,-5.7209363766014576,8.2223519403487444,-6.9307959452271461,-5.8874274138361216,-9.9925121571868658,-4.1518257837742567,0.26409787125885487,-1.3069974258542061,-6.7056682985275984,-2.1670675743371248,-1.9046605844050646,8.3696212526410818,8.2245368976145983,9.7917808312922716,-9.5394135732203722,-8.9239215105772018,-4.3488198518753052,9.3847937509417534,-9.7712762095034122,-5.8392513357102871,-0.29716672375798225,5.5189497303217649,-3.0117610283195972,1.3324517197906971,-5.483856787905097,-7.1809989772737026,8.950211014598608,6.1966706626117229,7.4439532682299614,-9.4772843364626169,-4.7178388386964798,7.2826793603599072,-0.0078551750630140305,7.9781509097665548,8.7824811413884163,7.1606903057545424,9.7221031133085489,-0.61282027512788773,0.32970938831567764,1.4257702603936195,2.9208558518439531,-9.1755969356745481,5.7423085626214743,-9.0198648162186146,3.1320414785295725,0.22123241797089577,-1.7466711718589067,3.6976791545748711,6.893658135086298,1.7124086059629917,0.45153208076953888,8.8997632823884487,-1.678364984691143,-8.2802325766533613,-5.8689023554325104,1.3581445720046759,6.3359105680137873,7.6490444503724575,-2.5097844656556845,-1.94745565764606,9.1128249559551477,-0.75081568211317062,1.0409031063318253,-5.5414054729044437,5.5982517823576927,9.8178281541913748,8.2379425875842571,-4.8987877368927002,6.0745459608733654,-5.1059097982943058,4.9740583635866642,-1.0009660106152296,-3.2356699835509062,-1.9053606037050486,-3.395603122189641,-9.9016229528933764,3.42303148470819,-9.1097314562648535,-7.2565784770995378,-1.3144431449472904,8.1541308388113976,6.4771499764174223,1.4597825985401869,-5.4337766487151384,-5.4840992204844952,8.744436651468277,7.7469479199498892,2.9538294859230518,5.0122712831944227,1.2435741350054741,0.75057502835988998,-5.085414219647646,9.4432488363236189,-7.3166557401418686,8.9669964276254177,8.3091075345873833,-8.8295228965580463,2.2086867038160563,1.3975265808403492,8.2293333765119314,-9.5937982946634293,-2.9679352324455976,-2.0873966813087463,-2.8759608324617147,3.7263445649296045,8.6732101906090975,-9.356180289760232,-9.3221249617636204,3.0457729380577803,-9.6941279619932175,-9.2086548265069723,-9.8616629093885422,-4.9685170128941536,-5.8653963357210159,0.28381789103150368,-9.8726249486207962,-9.2075104732066393,9.3714830093085766,6.5150890499353409,-0.89820848777890205,3.8100171275436878,-5.0420292932540178,-1.3862929213792086,0.57493778876960278,2.9794986080378294,-3.5667931288480759,-7.0920662023127079,3.6433604825288057,-6.0402633622288704,1.2937020044773817,3.2496776338666677,-2.6679039094597101,0.53905108943581581,-0.16825737431645393,-7.9016131907701492,-2.4128808546811342,6.71153474599123,0.7646066602319479,-9.2557772342115641,-1.8479695729911327,1.1754505336284637,-4.2027938459068537,3.6438772082328796,2.6443455461412668,3.5156929492950439,8.2515045721083879,3.0374862626194954,-8.9682821184396744,-9.9175565410405397,-4.3727846257388592,6.6088392399251461,-5.2387645933777094,-7.9164836369454861,7.6595301553606987,-6.276540644466877,-9.8185824137181044,-0.91462594456970692,7.8818207141011953,9.7608818393200636,-8.8587718922644854,-9.3791843578219414,4.0485029388219118,3.1890027225017548,-2.4311396945267916,-0.16478667967021465,-9.5696482434868813,2.921975078061223,9.6352380979806185,-0.55313357152044773,3.4841373842209578,-2.1028778702020645,-3.068302683532238,-8.9631478767842054,-3.6263570003211498,-8.18205451592803,4.2097650188952684,-6.4792162179946899,3.8130517117679119,5.960227781906724,-6.4515445847064257,8.8901926018297672,-2.5327932089567184,-8.655404495075345,8.6166617833077908,0.23473775014281273,5.2374467439949512,5.7675455696880817,-4.8614868521690369,-7.0094841904938221,-8.4007662255316973,8.3220599964261055,8.862503319978714,-7.9065534938126802,-5.4445541277527809,-6.6211894899606705,-2.331731328740716,-9.4083821307867765,-6.6784675046801567,-5.0033251661807299,9.113971097394824,-1.4876164961606264,-2.3703843541443348,0.95021960325539112,-9.6590423863381147,0.47461547888815403,-3.1375643517822027,6.9559932965785265,9.3794682901352644,0.72370396926999092,3.2926954422146082,0.33240132965147495,6.6692283097654581,9.7203326784074306,9.631480323150754,-3.7100551649928093,5.1028911862522364,4.2922855354845524,0.44310674071311951,7.2950728889554739,8.2901800237596035,-6.9441975280642509,8.8721697311848402,-5.4431802779436111,-3.5308957379311323,-3.7646167818456888,8.0857963114976883,-2.0212511159479618,8.8325566984713078,8.7805785890668631,-4.8155065719038248,5.7810865808278322,2.7222874760627747,-6.5142902452498674,-5.6761246360838413,1.3732751738280058,0.63593553379178047,8.168599670752883,9.6548085287213326,8.3670960366725922,5.7832320965826511,-1.2180292140692472,8.5830678604543209,-4.3783239088952541,-6.4898928068578243,4.3716226052492857,-6.1387610994279385,5.8422321267426014,-9.6045218501240015,-3.198731942102313,-1.0876976884901524,-0.93498070724308491,5.7793243043124676,-6.8962939269840717,-6.0120065324008465,-3.7937588524073362,-1.7049838416278362,4.3366386741399765,5.886308467015624,-8.8134705368429422,-7.9993034340441227,-4.2928003240376711,-9.0950014349073172,0.31089059077203274,5.1382397953420877,-1.6036412119865417,7.6022158470004797,-9.5581217017024755,-3.3514370582997799,-7.6025868114084005,3.3234794158488512,-2.2813535574823618,-2.7091802004724741,6.8084277119487524,9.2446862626820803,-4.5578324887901545,-3.4905965067446232,-6.4554379135370255,3.455014917999506,8.4358321130275726,1.0304679349064827,-0.92533170245587826,7.9501478374004364,-1.8651563301682472,-7.6823774725198746,2.2818374913185835,-9.1571872867643833,-4.8467220552265644,1.1424581333994865,1.2939352449029684,7.169749466702342,1.9794212374836206,8.132832134142518,8.5098204389214516,4.5522618107497692,9.8643671534955502,-9.5810957346111536,-9.4760083314031363,-3.2720217946916819,7.1297492645680904,9.6960236504673958,1.0696475487202406,-2.4335620272904634,-0.87693345732986927,1.3794540520757437,4.4843422900885344,8.3409828692674637,6.8992273136973381,-4.6864064317196608,-4.4328563287854195,-3.0162743292748928,5.4774025268852711,-1.2956095114350319,4.6910094283521175,1.795577285811305,-1.7324650567024946,2.4598567001521587,2.8116569668054581,-4.4812586344778538,3.4861735161393881,-7.8816086985170841,-6.1973793990910053,0.64446923322975636,-8.4055138006806374,8.529564430937171,-3.6104642227292061,-1.0721414070576429,0.51944145001471043,-9.7474672738462687,-5.6824695598334074,-5.265858331695199,-3.2809437531977892,-2.8216074127703905,-2.7557302545756102,4.4416680373251438,-8.8851836510002613,6.7183863557875156,-4.0803874377161264,0.92838062904775143,3.2933179289102554,-9.2054647672921419,3.7536623328924179,7.8029365558177233,3.9548329543322325,8.8775726687163115,5.3639908507466316,-7.4056512583047152,-6.7806780245155096,-2.8555328398942947,7.0596158038824797,-9.0370506327599287,-5.7099772617220879,-7.5878041889518499,-8.2249848358333111,2.6798780355602503,0.71024289354681969,-2.9476043395698071,-0.38607995957136154,-8.845805274322629,8.5507634840905666,-7.3179777059704065,6.7487167380750179,5.6823479011654854,3.2212976180016994,0.34916922450065613,8.4872371703386307,4.9952665623277426,-4.5547696016728878,7.9873472917824984,3.3460737578570843,-2.5382472481578588,-0.32144139520823956,-2.4654535204172134,3.1227413099259138,3.9132986217737198,-9.1899549588561058,4.4270128384232521,4.8048882838338614,-4.2424977384507656,-3.659445084631443,-4.2934877797961235,-0.64907037653028965,-8.9257451612502337,5.001083267852664,-6.7933997977524996,3.3296242635697126,0.99510213360190392,4.6816454920917749,4.4159004837274551,-1.9604571722447872,-9.4036309979856014,-6.826178478077054,-7.581656202673912,-4.8957794159650803,-3.3646041806787252,-8.9024127367883921,-2.8508586157113314,5.6193016842007637,3.6035285983234644,4.5052584819495678,-0.12058035470545292,-6.5939442161470652,-4.4204141292721033,6.099772984161973,-1.1153291910886765,-5.3376450948417187,-9.8010725155472755,-6.6257672477513552,0.72989344596862793,7.3192303627729416,-5.6951573304831982,1.4907802548259497,-4.4561672117561102,5.1977153960615396,-1.9972194544970989,-7.2673091012984514,-1.664044139906764,-7.5897941738367081,-1.6706608142703772,1.203759741038084,-8.4099446889013052,-5.9403739217668772,0.13552863150835037,-2.1702109184116125,5.2651555277407169,-8.5309257917106152,0.73023021221160889,-7.0207393821328878,2.4332278035581112,-4.7402082942426205,-8.68076017126441,2.4638118781149387,9.2863330151885748,-4.6008627861738205,-6.7008049692958593,-0.42909313924610615,8.2316835876554251,9.9062004033476114,-6.4896651450544596,8.1979345344007015,2.6858620904386044,1.2842532806098461,4.4449755176901817,6.7036388628184795,8.0584981106221676,-0.82211344502866268,2.739401226863265,1.1165195889770985,5.3448189329355955,-9.6280740574002266,0.95932018011808395,3.2943530101329088,8.1911453418433666,8.5799027234315872,2.4252181220799685,0.64107503741979599,-5.4517628066241741,-7.7774553373456001,4.3081626202911139,7.289271205663681,-9.2187110986560583,1.1225709971040487,7.0508353691548109,3.3901828248053789,-1.1971587035804987,-0.64626218751072884,-1.7285122908651829,8.893992155790329,1.32631023414433,-8.7038060929626226,-4.8689942806959152,6.8131644930690527,8.8557665888220072,-1.1307941004633904,-5.2563770767301321,-3.9294914808124304,-2.9632705077528954,-3.6873687338083982,6.3937402796000242,-0.4069924633949995,-0.32225720584392548,3.8232171162962914,-3.1898182258009911,8.7251322530210018,3.2979230675846338,8.1931009609252214,1.4479926507920027,-3.5874285455793142,6.0884846281260252,9.1612708196043968,-6.5211849473416805,-1.5553827490657568,-1.3177974615246058,-8.2218678947538137,-4.9336932133883238,-0.5817977711558342,1.7249338887631893,-9.0360397938638926,-8.7208079267293215,9.3811854626983404,9.5842232462018728,2.0402521826326847,-9.4814722612500191,4.8957092221826315,2.185013797134161,3.526983791962266,-1.9833026267588139,6.6328147985041142,-2.2815513703972101,-6.0338218603283167,9.5560244936496019,8.1038178130984306,0.86612642742693424,-3.0130491964519024,-0.31779008917510509,-1.0979529935866594,6.7041064519435167,-4.0827314555644989,1.5324726328253746,-3.7323698494583368,-9.9400107935070992,-1.7614060081541538,-3.9507145714014769,0.34024579450488091,-1.4888508338481188,-3.1158978771418333,-8.8955672457814217,-7.7986912056803703,7.3969233501702547,0.09088246151804924,7.4616097006946802,7.2743762284517288,0.44140677899122238,-1.2761837802827358,-8.8207269366830587,-9.957615602761507,2.3545647133141756,-6.8307666387408972,-4.6948725171387196,-6.722354032099247,-2.6041918434202671,-8.6522544827312231,1.5589192789047956,0.75641101226210594,-7.0000327285379171,-9.550045058131218,-7.6072884909808636,4.3023508042097092,9.6100782789289951,-3.4142125677317381,-2.6705743279308081,-4.3426721729338169,-7.2911662235856056,-2.6306986063718796,5.8485803753137589,-2.9095080681145191,-0.10204531252384186,4.9245098698884249,6.237500011920929,-6.3371725659817457,-8.8592877890914679,1.9501376617699862,-4.0362251084297895,3.1646492891013622,8.2607049494981766,-2.3317708726972342,9.9270025826990604,3.1325633730739355,8.992714025080204,0.54476816207170486,-4.0814175363630056,3.6155126616358757,5.9214106667786837,1.149201150983572,-5.3761681634932756,2.7417123503983021,-0.040427139028906822,0.54115228354930878,-4.853487890213728,7.4290694482624531,0.37035334855318069,4.5288102887570858,-4.2853631544858217,-4.0984927210956812,-3.3671172708272934,8.8600811082869768,-8.6166654154658318,-0.29562691226601601,-8.6014385055750608,-4.3769522570073605,-3.4365395177155733,2.0803771167993546,4.8982965853065252,5.6708258390426636,9.5699994266033173,2.9805160779505968,-6.4661762956529856,2.975026611238718,1.2723566312342882,4.4979893695563078,-2.2925524041056633,9.0718045085668564,9.8185247369110584,-0.054591633379459381,2.4784956220537424,-3.9239824842661619,9.6264344826340675,-8.5154967661947012,0.04586217924952507,-9.1942747309803963,-8.1753972824662924,-3.9021121338009834,-2.7985850721597672,4.1807485651224852,5.8412449900060892,-6.1953289899975061,-4.8943051137030125,1.4139939472079277,4.9963600467890501,-6.1765762511640787,-9.717023391276598,5.9878650214523077,-1.9524593278765678,5.0161393545567989,6.2542495504021645,-4.827679181471467,1.1960374843329191,1.8020868021994829,7.6729769259691238,-0.27666692622005939,-9.9409528821706772,2.4049098137766123,-0.68066277541220188,0.1008065789937973,-5.7437478005886078,4.8307488113641739,-9.6046113315969706,-4.7026470582932234,2.610932718962431,1.9463062938302755,-8.4300260990858078,-3.4486350510269403,-1.2092513404786587,-3.8872106280177832,7.6510227378457785,-9.2607068829238415,-4.7005755174905062,-2.5726809911429882,0.95063998363912106,-2.5937092769891024,7.5282396003603935,7.1231004316359758,-2.0509114861488342,-9.6692854911088943,8.3187535125762224,-6.7095707636326551,-7.7557986229658127,8.2925613690167665,-6.9209277722984552,-0.033044926822185516,4.6139928977936506,7.3787475842982531,-5.389214688912034,3.4687595348805189,-0.55839185602962971,-4.8918503988534212,2.6703864429146051,1.1850452236831188,-2.944838022813201,6.1074057873338461,7.1691937744617462,-7.3600982502102852,-1.171270627528429,-5.5453677754849195,-0.99616771563887596,-2.5907262787222862,-2.3365085013210773,-9.6983217261731625,0.30675056390464306,-4.4431917928159237,3.2755816262215376,-7.2995041962713003,-2.7670056000351906,-5.0630631856620312,5.0970772095024586,6.5767782554030418,-4.0877317078411579,-2.5067674182355404,8.7600603513419628,-9.6655281726270914,-8.5319947265088558,2.7646430488675833,5.3558222111314535,-4.6959773357957602,-5.2910412102937698,-6.5295845549553633,-2.727587977424264,-2.5710796564817429,7.8642716445028782,-5.1863310299813747,-6.6655832249671221,-8.4572359267622232,-0.76420902274549007,-4.0609730035066605,7.2267765365540981,0.43338468298316002,3.8964485470205545,7.6108385249972343,-4.6367725450545549,9.7638772334903479,1.4848179463297129,-4.6646861545741558,0.61984182335436344,-2.3183917719870806,-5.2104516699910164,7.9388199374079704,7.7468284033238888,0.94511355273425579,4.5235664583742619,7.5815795548260212,3.6077155545353889,-5.1245684269815683,-8.6215141229331493,-1.7878533527255058,-8.4512349870055914,0.093585513532161713,-7.1081950701773167,-7.4345218390226364,7.99147161655128,-7.3363998159766197,-2.8716862760484219,-4.4311857596039772,5.0609819125384092,-0.076878098770976067,7.9098716098815203,1.2122874427586794,-5.0848618056625128,-1.272329306229949,-4.0385815035551786,3.5607163980603218,4.9606083240360022,-7.055780841037631,-6.5085722785443068,-9.5742581691592932,5.4429542645812035,-0.26755432598292828,3.2145193684846163,6.4271295350044966,0.76622338034212589,-2.083562333136797,1.567928921431303,-7.8185269702225924,-5.982771459966898,7.5601037684828043,2.6641743164509535,-3.2221642974764109,5.0847053527832031,-1.3570177182555199,-7.3967230785638094,3.2752389460802078,6.9410706590861082,-1.4253001566976309,4.9803334847092628,4.4649947434663773,3.1667666416615248,3.8470494467765093,-2.6398396585136652,-7.7850830368697643,-3.8905833382159472,-9.0341175813227892,3.5858182609081268,6.8476174026727676,7.9058185685425997,-6.9071783684194088,-8.9468138199299574,-9.0998633205890656,-1.4028220996260643,2.7690388634800911,-0.76372155919671059,4.1318268608301878,3.614160567522049,3.1967648863792419,8.0275486502796412,-0.98969366401433945,6.218659421429038,-2.9909771122038364,-9.3522699549794197,-3.6011282727122307,-4.1628293972462416,-4.673633836209774,-9.7638434916734695,-0.91756271198391914,-1.4764292351901531,5.6539108604192734,5.2799535728991032,0.17981929704546928,2.2230051085352898,2.0469548087567091,3.1695650517940521,-9.1200714278966188,-1.0404817759990692,-7.3771390970796347,-7.5767840910702944,-3.0101996567100286,7.5744243711233139,3.3505430072546005,-7.4235725868493319,-7.9844470135867596,5.3990584146231413,1.9748950842767954,-7.9382248409092426,2.2551149688661098,1.7173776403069496,3.966092336922884,-1.8859840370714664,2.2663524374365807,-9.4144880026578903,-9.2998560890555382,-2.6812832802534103,-4.3280339427292347,-1.26643106341362,-4.9068144429475069,-8.8303027581423521,9.1015530470758677,9.8022116906940937,5.7720404677093029,-9.3157357722520828,-9.5711188856512308,-1.7951077874749899,9.6234801132231951,1.8304165173321962,3.8104993849992752,3.0632717628031969,4.4086196646094322,-4.3291841447353363,-0.59787618927657604,-8.5050395876169205,-4.2003373801708221,4.9296968523412943,-6.5848858561366796,7.823442630469799,8.6004297900944948,7.4236276838928461,8.9106195420026779,0.78279043547809124,-3.6410665325820446,4.5948366541415453,5.4197603743523359,9.9127324111759663,3.2937904726713896,-1.2634217739105225,5.6703142542392015,0.9717936348170042,-7.0642937626689672,-9.5852462016046047,0.76709287241101265,-7.470009122043848,-8.4432943910360336,-6.4488179609179497,-5.2834413573145866,1.2011445220559835,7.6360698509961367,-0.57387628592550755,-5.1386637799441814,-5.522111477330327,9.8724355455487967,6.0243695601820946,-8.4206766076385975,-6.3117322232574224,-1.2834474258124828,9.0991825796663761,9.9617659207433462,7.3999861534684896,-8.4325824771076441,-6.4136804826557636,5.2721560653299093,9.1271095164120197,-0.67020797170698643,-4.1853074636310339,-2.4624957423657179,-7.1658829506486654,3.0052706226706505,9.5834570005536079,9.1619615629315376,5.0881381519138813,-3.6619627010077238,-6.6070662345737219,-4.9621779285371304,0.67559449933469296,-5.2831661328673363,5.8268418069928885,-8.2696260046213865,-7.6042461302131414,-4.5646917447447777,1.2258886080235243,3.5099229030311108,-8.7256630230695009,7.7815812360495329,5.0359734427183867,-0.39423055946826935,-5.8329378068447113,5.8143129665404558,1.1581524088978767,5.0676236674189568,-8.4489037655293941,-0.72557511739432812,5.2590745314955711,9.2657702602446079,9.800914702937007,3.9735672250390053,3.7444605864584446,-6.8508158251643181,-1.6615488938987255,-5.6521944981068373,3.5671043395996094,-7.6772581692785025,8.3219671063125134,7.3012991808354855,-7.0645322930067778,6.4057744015008211,1.8504944164305925,1.2597496900707483,-7.3868708591908216,8.8614900223910809,-4.9370460584759712,3.0669348128139973,5.9735012240707874,-3.3648020308464766,7.7723194845020771,9.3737151101231575,4.0300074592232704,-7.6645230315625668,2.3614268004894257,8.5003325622528791,5.0895185675472021,-0.4613171424716711,6.6428611241281033,6.5670434664934874,-7.7003289852291346,0.57076324708759785,-7.1820234693586826,-8.2684274576604366,-7.4602673482149839,-4.7133015748113394,3.5404735151678324,4.7384753916412592,-0.44397734105587006,-1.9270963408052921,-8.7081367336213589,2.345928130671382,8.0141888093203306,-5.5285407695919275,1.8153204582631588,-9.9089655000716448,0.01684100367128849,3.0468270927667618,8.0230502318590879,3.4053879044950008,-5.6453842390328646,-1.9728713482618332,1.9513125810772181,-4.2893563024699688,8.7886690720915794,-8.838758310303092,6.9890878163278103,5.5990619771182537,3.434771504253149,8.2047771196812391,-2.3108070436865091,2.2660769335925579,5.9551188815385103,7.6831668801605701,-9.014106746762991,-0.092085134238004684,-7.674773596227169,-9.9198135919868946,-2.307039899751544,5.5804650764912367,-9.1233374737203121,4.067086037248373,-4.4848618749529123,2.9265108238905668,5.8675182890146971,-4.6199923474341631,-8.2113412208855152,-8.0118854250758886,4.241676302626729,9.8537296988070011,-8.36479676887393,-7.1392816677689552,-9.9069678038358688,-6.4078783430159092,2.7887170389294624,9.9673733673989773,1.644342141225934,-3.5415412858128548,-2.684340113773942,4.2957650497555733,-1.0766968782991171,3.9556362573057413,2.3786857537925243,-1.4284391328692436,-7.7764390502125025,1.38890047557652,3.2503821421414614,9.1727666649967432,6.6894886456429958,-9.7642020601779222,-6.9440235663205385,-8.2040552329272032,-5.5562857538461685,-4.494630116969347,-1.2483328208327293,-0.72965124621987343,-3.2484226673841476,3.7602821085602045,-0.93849373981356621,6.7357858642935753,8.3531521540135145,-8.5716038569808006,-2.9460131004452705,6.3578760158270597,-3.1776739750057459,-7.1664445288479328,-6.4331741724163294,-2.3582878895103931,4.2555007990449667,2.2020411118865013,9.7050629649311304,-7.0065941847860813,0.17155972309410572,3.4043456427752972,-3.1626769714057446,4.8881950881332159,-4.1050372272729874,6.639367351308465,7.8472036588937044,7.9520346969366074,9.8472919035702944,3.4351786319166422,-4.952628230676055,1.1773665249347687,7.9992720484733582,3.7654595542699099,6.078836340457201,7.002499895170331,-8.9841288048774004,3.747184369713068,-1.0721906460821629,-0.30811883509159088,1.4468144625425339,-3.3892384637147188,-2.9308079183101654,1.9113722816109657,4.4340302515774965,2.7465512230992317,1.2865063827484846,2.3128631804138422,-7.7084304206073284,4.4099387805908918,-2.1588018350303173,-2.9823799896985292,-4.8604319430887699,-9.2796272691339254,-2.6955066993832588,-3.3810393698513508,-5.1286372914910316,2.9930800292640924,4.6961535234004259,8.2523827999830246,-2.2021378390491009,8.6694001220166683,6.6079968400299549,0.60302035883069038,-5.0367461517453194,7.4074664525687695,-2.7111954428255558,-7.0617505256086588,-6.8410609103739262,2.2893040627241135,-3.666521618142724,-3.2287865597754717,-6.2156571540981531,-6.5497593116015196,-1.8047230876982212,8.0191291868686676,-2.4956152774393559,-3.8059091940522194,-5.9157759603112936,-6.4465329889208078,-6.8799169827252626,9.2352957464754581,-2.3842384479939938,8.1044641602784395,-8.2707165088504553,-5.932350717484951,-5.0184769369661808,-5.5418406054377556,-1.7150207050144672,-4.3529243394732475,0.40067066438496113,-5.9280622843652964,7.0572185330092907,-9.3279822170734406,4.6028828993439674,0.65300355665385723,-4.9691399466246367,3.664956446737051,-3.0768927466124296,6.6636618599295616,-3.8349897507578135,5.3273072559386492,-3.9468294847756624,5.6368967425078154,-0.67632629536092281,-7.015973161906004,2.5390911940485239,-5.4942034929990768,-1.0780715756118298,0.85109851323068142,4.4127967860549688,5.8756960183382034,-7.1768955420702696,-2.0833534840494394,5.0780555326491594,6.8794552329927683,3.0042330082505941,-7.8557285573333502,8.770153671503067,-0.027096150442957878,4.5950775500386953,9.4684977177530527,-2.9587053600698709,-6.9609315879642963,7.6228248607367277,-3.1824276782572269,-7.0619351137429476,-9.9434336833655834,0.71008411236107349,-5.6162397284060717,7.8589189797639847,4.8514326568692923,-1.9712197687476873,9.7094094846397638,6.0453625861555338,4.4091110862791538,3.9301398582756519,-6.1392929404973984,-3.0964207276701927,-1.5431159269064665,4.8506826627999544,5.4236298985779285,-5.0521738920360804,8.1134352646768093,2.5066351797431707,9.0175638161599636,-1.8047929648309946,6.8447042163461447,-1.0561040416359901,-9.9405577778816223,9.0454275999218225,6.5018209349364042,-3.8954173773527145,9.7201866004616022,7.1763482876121998,-7.1141956746578217,-8.2866813894361258,5.7459011487662792,-8.6392694525420666,-0.20167822949588299,-9.6059264522045851,-6.8058791197836399,-6.4103412069380283,1.3953630812466145,-8.1326043047010899,-4.6805344987660646,-5.743279131129384,-7.2923235781490803,-2.0823567640036345,1.8299293518066406,-4.3772916030138731,-9.1399278491735458,5.2326456643640995,5.0758001767098904,8.9736879430711269,0.77340768650174141,-1.3369286525994539,-9.7597964387387037,7.1012559905648232,-9.1904327366501093,-3.6029985453933477,4.4034976325929165,9.5848237071186304,-7.8678011801093817,5.8655825816094875,2.8465732745826244,2.3571264464408159,-3.7757179606705904,1.5082837175577879,9.72453105263412,0.19355598837137222,-6.9044236652553082,-2.6485177222639322,6.3626994378864765,-2.1104193851351738,-9.8185442201793194,-0.27270713821053505,-3.3887957781553268,4.5094082783907652,9.6250484604388475,8.189628180116415,3.080965569242835,1.7884246353060007,-1.9470621552318335,-4.2735799588263035,-6.0583231784403324,-2.2376292012631893,-7.8339248802512884,-4.7754454333335161,-0.91135715134441853,2.820428479462862,2.9415546637028456,-1.290665864944458,7.7788760326802731,-0.43037960305809975,6.610086290165782,-4.2795911896973848,-7.0890804752707481,-6.1755250953137875,7.9497529845684767,-8.5014478769153357,-3.8344555906951427,-5.6950645614415407,3.0499495379626751,0.50198666751384735,-3.1099969055503607,-9.7179376613348722,-9.3782718479633331,-0.61494385823607445,4.6386480703949928,1.7582336906343699,-9.3662694841623306,1.1087846383452415,-4.6564963925629854,-1.7348279897123575,2.7460415847599506,-7.2789851855486631,2.0960077736526728,7.6027464400976896,-0.64044351689517498,-3.9341152086853981,-0.67426490597426891,7.6297982688993216,-5.9803566336631775,8.1460894737392664,-8.6740728467702866,-5.1423252932727337,-7.0611660182476044,2.9827543068677187,-8.8482628669589758,7.2460040263831615,3.5898063890635967,-6.123912651091814,-4.5998965669423342,9.5384416542947292,-7.4109633546322584,3.9389189518988132,1.4109336491674185,-6.4380691386759281,-4.6279858518391848,-2.5581698212772608,4.8398720286786556,3.7293021380901337,-1.6188576724380255,-8.1408350728452206,-3.0150547623634338,5.9746636170893908,-3.8284625578671694,-4.9701617751270533,6.4910847973078489,-4.3376825843006372,-3.4311500284820795,-7.3384772893041372,2.2122194897383451,0.77305960468947887,-7.1871396712958813,5.7435665372759104,-7.8770847897976637,9.8359544761478901,-7.1129641402512789,-7.5882826093584299,3.7342033814638853,0.75633974745869637,-8.197780279442668,-0.093142492696642876,-5.4457972198724747,-7.513838754966855,-5.0879352726042271,7.0719117764383554,-2.3786397930234671,2.2010582964867353,-6.8131154589354992,-8.0314933881163597,-5.3093586675822735,5.6089106481522322,8.9613856468349695,-5.9912852477282286,4.4688727986067533,8.3452394139021635,-1.5610269736498594,3.8197199068963528,-1.9674166385084391,-6.3713805470615625,-3.7928260676562786,-6.0276705212891102,-7.058420218527317,9.1314102243632078,-8.3882093988358974,-0.63535362482070923,1.6117009241133928,7.8575224429368973,1.3798381946980953,-9.0593726467341185,-0.8760663028806448,-4.0462811104953289,-5.846577500924468,-3.428025534376502,5.1748951617628336,-5.5368974898010492,1.3639238383620977,3.4680402837693691,7.3531547095626593,4.4713394250720739,9.8018304351717234,-0.63572109676897526,-4.5644001103937626,6.1273871455341578,2.9958812054246664,-8.224478717893362,-8.8137977384030819,6.501419935375452,9.3649829924106598,-2.7306949999183416,5.2091932576149702,-9.0888002328574657,4.5344934891909361,-8.767813416197896,-0.6400763988494873,2.2360377851873636,1.0871514026075602,-8.2462896034121513,4.6106491703540087,-8.8192795123904943,-5.6307555083185434,3.8922058790922165,-3.6956813745200634,6.6831877734512091,4.3370389565825462,-7.3861445114016533,1.069217324256897,-9.6643445827066898,-8.6393989250063896,-2.3777219373732805,-2.372541781514883,4.6903377678245306,-9.4930212013423443,-9.2073269933462143,-7.5447709672152996,-4.9656267743557692,2.7108427975326777,1.1349976062774658,-4.0951441507786512,-7.087695924565196,-2.9053813777863979,9.2552390601485968,-7.1969653852283955,0.60279239900410175,-8.8680669572204351,-5.6013411469757557,-1.7406227998435497,5.3526676632463932,2.2855363320559263,-6.9907709863036871,6.1120567377656698,5.3377177193760872,-8.978170407935977,3.8899618107825518,-1.4117374736815691,-7.0716529525816441,6.7288488708436489,-8.2368968054652214,2.4754043389111757,4.1208217106759548,-1.3493981584906578,0.66521794535219669,0.31809099949896336,6.1555093247443438,-4.3546525854617357,-8.6459596734493971,7.3557789251208305,8.5765303298830986,5.7453997246921062,2.9332961235195398,-0.091950790956616402,-5.4168660659343004,-1.2679342925548553,9.8284133616834879,6.1435249913483858,-5.7753440644592047,-6.2076583039015532,7.8869159985333681,-4.6026726625859737,2.880602153018117,-5.7195134181529284,-7.8619853965938091,3.611456174403429,-2.2559702768921852,3.9076168742030859,-4.6830864250659943,-8.6335044726729393,-3.3096615225076675,-5.4811564274132252,-1.7960401717573404,-6.0471025202423334,6.3479732163250446,-9.61402527987957,-2.9228759184479713,-4.7755059693008661,-1.9287851545959711,2.907969867810607,-5.7503306865692139,-5.8078159112483263,8.0380124505609274,-5.1246022526174784,-9.1900215856730938,3.3072159253060818,4.378160759806633,3.7480025924742222,-7.3203206900507212,7.3701832816004753,-9.3294501956552267,-0.06943313404917717,-6.9626062456518412,-0.52314690314233303,7.4700730480253696,9.517854880541563,6.5871300082653761,9.8941787239164114,-8.5380314383655787,1.3056268263608217,3.6701591219753027,4.3644700199365616,-6.3522625062614679,-2.475914191454649,7.3102430999279022,3.2559159584343433,2.1796171460300684,-7.174531351774931,-2.3484071716666222,-9.6792743168771267,0.43655875138938427,-2.7569837216287851,3.3746472653001547,-2.3033074289560318,8.3121017646044493,1.494501018896699,-1.9212854467332363,8.9555599726736546,-3.9033909235149622,-4.2912038043141365,-2.2622944321483374,-2.3824605625122786,-2.0146145299077034,0.37365833297371864,0.0756834726780653,-7.9877958446741104,9.1152543015778065,0.07919621653854847,-8.9491097535938025,-7.6876204274594784,-5.8365062158554792,5.8400626946240664,-6.0661674849689007,5.9231109078973532,9.7251536417752504,-9.3425883073359728,-0.88167625479400158,1.667257035151124,1.5890810918062925,7.6860006805509329,-1.3864235673099756,-1.6208283696323633,-1.2623428367078304,3.8040118291974068,-5.9730786457657814,-9.5327678695321083,2.7704204246401787,2.4561768677085638,0.96471305936574936,-6.067525427788496,3.1001659296452999,4.4888820685446262,4.6410394180566072,1.9496138580143452,7.1602051611989737,1.5682785678654909,-1.9420193508267403,0.48083371482789516,1.372327134013176,4.7022303566336632,-9.6142809931188822,-7.2206483315676451,2.5635130889713764,4.9645846616476774,-0.22547457367181778,-9.5510832034051418,-5.055396119132638,-6.0425355657935143,3.1047766748815775,1.9816772919148207,6.0503389779478312,8.0473279766738415,-8.5585547983646393,-3.6304848361760378,2.4414082337170839,-7.2517185471951962,0.36639879457652569,-1.9353784248232841,-7.9051228892058134,-1.4003824908286333,3.7715439405292273,8.3391162473708391,-4.4730869121849537,0.82831015810370445,1.4089119900017977,-0.41609475389122963,6.6955463495105505,-7.9523731116205454,4.4651290122419596,5.4234219528734684,-8.5471173468977213,8.5987620521336794,-0.6060442328453064,-5.7853479124605656,5.6576682534068823,8.4304575435817242,-9.299920778721571,-3.768522497266531,2.4424372054636478,-9.9577903933823109,-0.58314125053584576,-0.85492406040430069,-8.7086116429418325,-5.6358728185296059,-2.1144268754869699,2.8275653999298811,2.8917770087718964,2.0962873194366693,-7.6989275589585304,4.1245345864444971,1.052904911339283,-3.8270686194300652,-1.5422384534031153,-0.40162015706300735,9.9700953532010317,7.3927575349807739,-9.9239734560251236,7.7781251724809408,6.9499130174517632,7.1882169600576162,-7.6374177914112806,-2.0808017626404762,7.964837271720171,5.0201663933694363,-6.0633090883493423,-6.0358170792460442,-3.9776198659092188,8.1429607886821032,-1.2578826304525137,-1.2333016004413366,-8.0999300070106983,4.4763870351016521,-5.3629877511411905,4.2649028543382883,0.2223845012485981,-2.3836075142025948,-1.2914315983653069,-5.090805571526289,-1.1692022252827883,9.2182687763124704,-8.5565261077135801,-9.5342810451984406,-2.6615230087190866,7.7828498836606741,6.358133852481842,1.15578668192029,5.3068503364920616,-7.7662747818976641,-7.7802418731153011,-2.5251440797001123,-0.096489023417234421,-1.6909390687942505,0.38713579997420311,6.5914714522659779,2.8608280792832375,1.9376291614025831,5.7334091141819954,1.4071051869541407,9.2169664055109024,9.5545278117060661,2.9490843787789345,5.2612554747611284,5.9208837430924177,-7.7068052440881729,-8.2757194433361292,9.9833293352276087,9.8162935581058264,2.4459861684590578,9.689630689099431,-6.3768542092293501,4.2113338317722082,-0.11217818595468998,-5.3786939568817616,0.29070285148918629,5.8429055102169514,1.7130342032760382,-9.0340538695454597,4.656622102484107,3.8477911520749331,9.8260012920945883,5.6038713920861483,4.2666089069098234,8.8960100803524256,-4.7584316320717335,5.0396007858216763,0.57052500545978546,8.8138494826853275,-5.6315972656011581,9.7447912208735943,0.70620374754071236,9.1664686985313892,0.83956621587276459,-9.4105249922722578,-2.6935405097901821,9.6647091303020716,-5.2334931120276451,0.68130345083773136,-9.3328181747347116,3.3249424491077662,2.3078464344143867,7.9751195199787617,-2.1660870406776667,-5.424831360578537,4.8593585565686226,-8.7606234569102526,0.20156940445303917,7.7770604752004147,9.0555458143353462,-3.4413493331521749],"expected":[84.544963967055082,112.07656698900159,-17.586067063232143,30.958146975844613,-60.632538882281054,88.156054139456842,-19.083688620631374,61.398478543996703,195.32569594434003,19.183868216160811,75.805159713912403,-189.27647129148599,-34.5925623336705,9.1646681460046544,-22.137149469018226,-197.64207904242204,267.03618327235301,-199.1638347667066,-30.781825902411555,-5.9575092986035649,-14.436700390670318,31.147797070590215,-252.29374931287282,109.93574337821826,0.50530023688978787,-25.601187615928886,-8.9006807383132838,-144.77724478894481,-15.147854849033244,-30.871781534491458,-55.798633755983829,-59.642905324065062,62.599472027926637,63.663405713844689,119.69528256705927,-196.03940763786289,-156.88929065499195,-170.15681500341057,-9.3483301769262237,-0.54856497357176437,102.93297541309389,-171.97426490689989,110.31956396966733,-213.72126748063465,-2.8641217164166548,47.754830114930471,-35.061120357742652,240.82127965736183,-171.70640613097316,267.70463813242503,-46.907218903577544,161.71812121986278,-16.522106104757206,-102.36494270546807,-71.757463220154307,-35.482686800915317,-87.77696980531465,-27.917147515677932,58.870546138123117,-10.391770687502547,-231.90797905417733,91.721272900373719,15.374959703313735,-63.706278590453095,-134.19534573191589,-126.63917884981988,178.64112203750662,-120.48822436410445,88.785059973411421,10.359546507147414,5.6386216673619609,-114.26518205013051,-1.1359838760320713,-216.15540192060482,-35.601744642602362,-22.259415578718507,68.321346103616307,63.875730028421053,-270.37262519979197,172.5647080736573,-62.148183294084362,44.48797555238977,-158.08889194367089,-38.713381610933524,-75.981518166960257,-85.289408117215203,-86.783381977168503,-518.140260222488,321.02030087218196,79.690578248928432,32.556822095420159,-43.431361834041496,3.7784465023430727,88.984005927932927,50.812678645118588,-3.6497136888362149,81.056451808834709,-90.582689808674132,153.36722268373177,161.19383287745222,-175.9946674458198,-163.25493099864553,21.78988911034984,15.602067892795514,204.88221112162384,-8.1264003208673188,-63.160241155280183,44.221829509918848,47.602738671530958,-91.715286959852421,-57.713132162292617,278.63049396672017,-17.344040502801413,-143.64668855464726,-53.510733286646591,-21.276937922670221,-35.308973394540672,-114.28941278125514,-178.10296565278605,71.581395394970087,-69.086452130570677,41.419900329093196,76.545114538898673,83.851739923919411,104.57403794053302,86.797920763028145,152.83674268008014,155.88552700821219,77.993009246726217,-36.55157658647633,227.86346544729815,25.999823111119824,231.58804764184708,-355.61609435958758,107.08509418890718,47.529833502958716,150.01617986378056,327.75558801148566,118.48346873563185,16.10789819940161,28.55067181839371,115.46408432363336,120.58442303862883,1.5880267290899539,30.261086538290854,33.879650582567265,282.13760280688524,-115.4980322057793,72.081985385920476,-69.954700530722391,-89.576437768793184,150.3188586523429,74.082355016380433,-59.899795934228649,-37.767463503067759,95.290543107812226,54.821965361291859,-144.03279450817013,156.02011997677758,26.446474565926422,-109.33838374464777,-114.27784506157305,89.702468395976936,78.623603607821764,-68.168332579963945,129.85677620623346,9.9133814998262864,67.980139283314983,-169.09833181775633,22.286671131987347,-40.761822391662918,54.048054267627968,-12.299478932122568,-232.01066410592566,-38.793061556779136,49.51499204079132,173.86789104915778,59.357777768948061,-0.73253658183564596,-111.27737079307835,76.167552319491293,-129.18891816143935,225.80851582227805,-63.141571891113045,-163.43546425285979,-81.942151978581961,-99.929824164533329,-67.989948380327689,30.669660998475297,121.6805801005266,-75.609370276391587,-37.156893702345492,75.228469971134729,-91.030521282958503,-59.642564971297787,241.72636480887189,183.43434554558988,74.506362674227319,154.57209305299205,33.618916915835705,155.31785477148242,-50.717039140918288,-5.2821473727313872,272.08062372761486,-147.68198660202299,159.47145953704145,25.645482512176049,170.88043426656344,-120.74944784806344,177.77465942495451,-6.5766747844097715,-30.771996292375718,171.20326484703727,59.459587303594304,125.61699105410712,49.268103686541053,-207.55837045562885,184.26882209592773,-50.67667439773254,-37.666698660695985,-136.68763348657126,-77.192251869228258,87.622498987439599,-169.02133722874146,135.92596164268855,56.898748146853706,-219.1493097032226,144.8168542054612,164.67333221195091,213.57030277786706,-38.379673634928935,28.298727635398439,21.962357202681808,30.299177504360735,-36.092310773478502,-113.69587689426834,-44.135859440225516,49.926620603656332,-113.49583450041861,-109.23718231836051,-103.01844796042104,13.183725879665687,65.564568456979742,42.037522701297448,-196.03487484185789,48.020141579529245,65.79308807478111,51.229412193587052,-116.30426673810521,61.135926891709865,124.15407408656748,-1.9170445287696971,-49.929271302658378,66.163715585537602,120.024624104241,-114.88519108679381,-80.345676813813682,-44.883770144388336,66.103694259504863,-65.249375542535802,33.447560244346604,-14.300454199485252,-108.62806623390107,184.37314019833909,-108.39495268494913,-276.87631500147393,331.82746227435393,-124.38477780909841,-118.24036873800779,51.681936624188452,-86.45157778353385,214.10198999157217,63.263000830067753,65.914879775350215,-123.58744066160327,-118.77546354256557,-118.46105116509645,18.978877059435476,209.78640558010829,12.950352195283244,-114.21763422237217,-69.945206776748961,-256.97028737312075,-240.48799349942351,36.29606175377674,27.762258513830673,386.78794816603147,-130.85379642198839,35.439258021319276,-16.220802284587492,-169.25174103375133,-49.030636162561201,-166.42981614950941,170.56150458483768,-211.50101264781563,61.143101063696385,-21.758895043403641,-30.938093745601542,-93.180046528855073,-85.657666327733864,-4.074116258353186,112.39662313432032,120.10966036936938,-168.03212055333765,-288.11505501241851,21.334246539726024,-79.591024300837503,22.780415742235938,-141.83503678590247,66.535995762321363,-179.1360469197985,-98.493837375804048,34.451498849461046,17.375995730160209,-26.117568659176143,170.45579659913477,-220.45517714470401,-92.44086584257505,-28.802043824243569,40.691709023644322,38.702492355488488,-205.87987555285611,60.698601047770218,-112.41922927118208,176.71062834442506,36.335054208323932,25.576369647096868,118.07531063093003,-77.977051500187969,-169.85261454956557,-243.53862760495622,-17.164567175052795,19.807484186841549,-2.3899432621828218,106.01807790937737,37.982547045211845,152.22650301863078,107.42898842897033,60.640842909354923,-18.674447532596233,-108.48811571848512,-37.86901775116435,-133.92429906775732,-145.82530089135713,-56.255921623791835,-17.631433202758451,-35.263077482586851,-42.509110810381877,184.33060041958956,-84.528585573776709,-32.722290935993129,1.8409553909288654,-83.935473775382036,-28.594862222344997,380.84954817981645,-117.11121093330129,-148.952468715511,69.969059054698846,-104.93122672841957,50.499744721194944,-12.028010494044224,-4.115762442880623,115.77835115752995,-28.641348564518822,-41.551253918796213,-27.374096445126945,-33.698386664806073,-87.206693556446965,54.267234998316525,199.49861830248733,6.7327975186946389,49.553512404975315,-105.32395158987821,94.798697805113349,10.398170055020181,-164.6510813666313,27.288125595287095,94.538551255847139,170.4608676797892,-51.718639000862154,72.422732243953661,49.976233971928046,-20.089873724194284,215.8004369391486,81.451051961358772,-151.0067254566161,-10.394178059880204,-4.3538087783215076,-190.91110757316352,-103.16800244664988,-40.901295354926525,-54.512188675403543,-190.11713391640237,-12.614893759833972,296.01025756087699,32.064536654355607,-128.22303302783618,-136.98543536948046,-143.86293351724731,65.325682193850071,-24.787793599092687,-47.63678179206012,12.481377770601895,-67.005444582447467,19.737670098925989,119.56518218425779,7.3700173251449002,111.07642206059755,103.59798013913921,313.43445088707585,-81.856101518675615,5.3002861755502835,-110.8992084244635,177.59821141024685,115.87422813771906,-18.108080795329276,-142.55629108244864,-51.919392327459356,-28.681284064763751,-85.686240482743472,94.379293784569199,49.391078202609705,-21.649118287166569,55.87250232259322,-76.837904979046044,-123.93347711664653,-62.301590379492851,-109.32527387499721,-230.58148359391174,-134.76084531785071,-28.449026610713517,146.14368529359564,171.52807675951902,-250.16857636011247,-226.64169213135571,36.330153079310321,27.45054238145352,203.06359361789328,-69.981863049746494,-74.092944360899764,102.46990001910353,22.502719054515932,-61.106036824096904,69.407039306633536,110.29048225532875,-149.64535042396625,38.336948751982071,64.012399728905606,194.92388403120876,119.43131006609569,228.09914694149472,-98.916084422253192,-70.930266808484973,-21.108718377465458,101.49682143282035,-81.214437189166333,85.183557658241938,-47.117847867676048,-46.288169194729697,57.381101458681236,-30.629521905857601,-107.6615825313236,59.791279056972733,-2.3053015865250934,33.678495513343393,68.439642209770113,-213.15521958714564,-55.232722420149642,-69.064020640179535,-117.19696529768569,27.290301532760978,-152.02306197427771,-287.29048287653097,79.119595346805241,-2.9352417360708927,13.772086477726809,-5.7388700806001935,-30.739063915224957,-29.833191179119002,-180.66375668444414,115.03154789485201,142.63446853042464,-20.45007362992131,-77.74071568184074,57.560554039976786,-9.7951405379642367,-203.5527904814395,11.749820074318123,168.68810286107029,-115.95084240325423,-247.59970024426596,-6.8922455566820915,161.52189399496658,277.39808838856993,135.92926333953949,-78.402278081133147,-267.47253572678653,34.993009855965127,141.90421558264137,193.72446762943878,-51.266500778633947,-19.738109997595785,286.52264123666532,-32.183031111860672,-99.626372583599078,42.140448811989117,54.49562943898033,82.478858512871923,-215.39583409481853,-82.996354757711686,-207.54717656835911,-72.758335867016342,76.909239991829025,-27.071384467536618,207.9655587356329,157.10618769416652,-48.949867318894391,-174.53786126654245,-8.5484230136617541,-79.899936280975837,-18.175344030663787,220.9888366554855,99.849909431251021,48.058547910749823,-83.243742330453713,95.614841276147118,-207.8341552467466,-17.038623590493472,-71.336751685365201,130.92803818159189,-2.0184158575263567,66.272701476592403,-250.09907016939187,54.773717093920936,35.791656102031652,52.026833625550537,-0.83177072891417225,-6.1228042766706174,-29.587077307775814,-66.839526897797157,195.91242939991713,-84.724068834206932,-184.30459506008464,20.364909270382494,179.60968797931611,55.282040568220047,-39.507625941095213,173.13991745711749,-58.191181167593712,48.379440589024391,-126.77626883315449,-136.71675162804513,78.696054318421417,-207.36717114483773,26.021314106030331,251.62660962173968,13.985428627748952,-122.64904460673739,87.909567254967513,88.113736321860443,74.43325435974397,-159.56394201141805,56.655114805189456,-133.30941105784348,92.928364671945516,-15.828940880599397,-29.674614617593292,-110.84532227678035,5.2365293397856902,-86.388850159607841,-76.477346688653952,-28.164378297515285,36.28338921205625,-141.5854458344453,-181.22088766591244,-38.596249156376025,-43.160403251558861,161.20700372416786,-143.20005723526265,7.2954991961177615,-3.8665639808351955,-145.38588175521519,-24.055583490365116,195.31807922406253,-72.435816136883233,-3.9885277681545972,236.74914299883119,-11.719085286301706,49.884568338810176,-52.283395179269974,-206.02750708102164,16.559576759484145,-143.72144992584202,-177.47333620440085,41.074266637809799,49.589700269332589,-83.656112449993188,201.86635176846249,35.302516815489511,126.78637715314582,-30.769986017371444,118.19643161331439,93.586826553151226,94.506376451975854,-91.542546672917311,60.17720498989398,-129.87286866560152,31.734931388286093,37.223634504669086,-67.558426402903052,-110.61047482379396,0.52277402296740405,-292.05479693209071,32.857375442320105,-82.601872875769885,-107.84378889872134,29.341092270419267,-68.002643502101449,195.74161784089614,-101.46763517788666,62.853859097939377,185.09674022709373,72.920951304425245,-11.401716463387068,-193.91539462823465,-23.972788827465255,1.4208776608858429,-209.12712084810696,-95.962679969986596,152.76526318190935,-102.35754834753229,-257.57336081323604,4.2345364901770779,30.137475508877671,-69.203478249033637,30.700851124691436,-48.192158780289219,-173.32302991397131,-15.657897326724068,-145.50601915561029,-40.832882875301379,-29.218051489463704,-140.45735947118203,-21.864290244339941,-14.481613594225294,-159.51130589177214,-147.09932682624387,29.104218529123912,-40.639854360665865,-24.82354380890726,-45.010254726051031,-5.9600307193519768,-76.958183413548625,-125.57224270359421,85.465497570121045,-55.254317818028412,-48.782662736276151,-52.290748626698651,24.739203021585141,-255.24531611591755,-109.57835307137488,-66.479585134266458,-47.025653564745738,-13.47319970575559,-87.916248608626688,109.8582708490172,-85.713149454276248,-168.46874412953292,-5.947001917786082,-2.3172558593712367,45.646747701532263,224.12462956763395,-145.85614055803433,66.550748386733659,50.894613670667702,26.772023107942175,122.96923080077786,-31.1076739537111,-82.064289416676544,39.19723682295345,173.57642691771377,-12.946160827785043,-41.095001541277341,-39.026667607764892,97.974139189071749,164.29794299912064,114.25450820280184,93.458247934668975,152.68148060031479,89.246470927697814,48.703122164471893,-109.93266951141207,-27.044645966031709,-7.7328016357706133,12.554242402365688,96.366880133113298,38.553861737883679,165.46127884239056,85.501619649706967,45.413600729156101,-74.311739128480383,18.898185875322021,-168.86913640343033,145.13258554759142,-175.0698759487322,291.46047528484365,47.449681093867376,-3.1462473564101501,-11.805852010197398,-11.623582173114627,-78.899427269668237,-56.457737138486934,-69.365532000581936,44.188187654422656,284.46274604956875,-69.595558736219203,-161.65317492812306,-50.160571216321991,167.31117104737331,85.388146990542367,-53.354353689544688,-17.868739766604399,70.543488856906393,-170.44471290175207,-44.556419688545404,115.9562096722846,21.662088371913015,-69.065079670807776,-16.433486883980734,-37.764065414075198,-172.25787581878816,-45.68705941636815,161.74171397307612,-144.25468144449712,15.291791154703034,211.79676607480258,-324.06527020086003,-96.638774857213321,24.511958207458388,203.02269979784938,-169.66057656728788,0.60143007709700136,-19.116968842919611,185.38527217200266,-61.186623983843099,-9.0643337049633033,-61.610444115620673,-82.194501719009423,19.117675490657895,27.851877574662581,-6.8959631306237164,11.372753129445925,-156.66946302657541,6.9463310628688681,-151.34981376196768,136.35511237706731,-76.873881410000223,-88.502403099468808,43.615815050284979,-80.498697882680574,-24.285924905413026,-21.959814987234715,-49.927611437074518,41.492845037285988,-89.961841967100526,92.87754752915879,-27.569195881124529,146.25326318387226,53.400042309964391,-110.54152274700866,29.714151302022344,15.299846735599431,-74.360599644436391,-177.65922079904834,-134.68438752500518,-137.14358002747656,-79.311726137781818,123.82139091220154,21.639842149171884,-28.565858529743316,-57.789607449606152,18.670462680361911,-196.16639215251149,93.048943983271357,103.88406839036654,94.797655169070964,118.26877073891453,-49.354914782802169,-0.40296368136752303,107.31199332412071,55.296483060009251,-96.639289223475302,-20.612420381110155,19.192404832975711,152.22564420633995,-25.216207188276826,-144.92072002923089,-63.725213548268442,-70.62850554052946,-150.81467912071946,-53.701118146160738,6.6878376298763982,174.10524901985605,-204.7493190790463,43.205358201960877,65.443227276435678,68.524504066023354,51.823591969053325,-111.53608788632944,79.527281910642358,-114.28160517643413,123.94089239632227,-15.49595894499333,-125.23726342775677,66.922382646687055,44.040904561495864,16.302244041257254,-104.58490704578227,120.13064259983051,-80.927019886968708,41.248855282235716,-17.083006523098788,-198.5147549024756,79.103120431232483,124.63046268581154,120.0331497796206,152.86692794227679,69.608037601579312,147.00908299457097,46.297325170654759,52.358320221677367,-86.096511578440214,76.828777825550503,-153.34001252918432,-61.338339240648956,142.08176226834473,-19.666181456061679,41.747417454001663,136.74325286912025,194.9251474765415,210.94068351567572,30.279408538251701,86.071885395215418,-41.04424511578641,198.39702394112678,-42.35296609615105,-71.230757607126165,87.286116428661131,-150.32149027692856,-2.2879998039780141,-202.97669784122397,46.471238636550254,2.3792845802787603,-98.173338774037887,-223.19611001697587,-191.94370990081603,140.86605910642842,-42.176507133990526,23.986865049228072,-95.406265025002995,-13.280127076979674,142.21885630568318,-50.324461469924387,37.74292706403179,-116.81894720933091,22.565407303094194,146.01343292001559,-151.17788978055734,79.967508108788934,71.228582156523061,-62.604655194033818,25.162347347957795,-137.01619467404183,78.52406523656505,-62.989228279368717,97.409739399038386,7.9262582576503746,-16.606752261296862,-113.62324061839891,-44.969824859620353,-61.409049949980101,20.120780341103085,17.572290740838554,74.258231104441606,-150.78673764899426,-70.286479671085644,-68.794293654748657,245.90653469816107,5.8478816204660014,179.24424249968803,3.1256811958041268,87.032655794260947,0.36748628413553242,-108.84621798068849,-33.409849983929156,49.30409596939095,32.975792429449356,-141.29942573689087,-91.24065696987833,-27.186691191410777,66.734787230711291,246.35311452841788,40.815824303319062,-23.600265481695139,36.017670351923897,62.199077423431859,148.45797053235452,156.57373479455467,47.611155822218734,51.151554601081735,27.470914125872703,-1.6995517086950755,56.994306736831412,129.52178802889875,-28.576649404110171,122.60671647839065,-98.130515633451637,-181.45709283233691,1.3364103815640362,-13.247403760423076,1.347422663260744,12.03519246840651,12.824551073669543,-43.663917497543331,-91.412090507059503,-131.11924147952618,80.100935741703367,112.06221177454898,64.861927492629462,39.846484176623264,-70.747150940185506,58.422615117675626,-7.3484100770513265,-72.27569631447605,39.495936670591135,-78.72419507876441,23.368508856826914,30.807409707864963,58.500776028894961,63.682901889082721,17.859377778194084,10.04130398918177,-78.147911797487609,80.08982229184096,93.858875364787053,-189.38673311529965,41.944217066791069,-9.2332095568035584,1.1675031657574806,-100.2828734312109,-147.71453176617803,-168.62724966245517,-40.319753452221121,-75.986897941971179,-64.873225979054126,-106.53888760787709,-97.463087203466188,11.437395024639763,47.358240458313553,-119.71596230970634,-179.90636370698911,36.373804763185326,135.12904183341951,36.255178594364565,56.496394777883644,45.053841900421986,74.101752301439006,107.32279782537931,-102.62283612757055,107.69188438834226,-26.260947447775695,-2.8329868397357245,-105.31674217491889,111.7412643265516,31.709562774299833,82.169213044174782,-113.63154229747278,63.88037463787834,112.1627833059775,-148.62286966218548,141.65720148761005,3.1337409084130599,-1.8413736182283031,12.747857207166714,80.192384647722434,50.599573876888826,-52.21093762567083,144.2785188438026,83.393760909952192,60.850643495061938,-89.022845922826576,126.25142119717799,-22.179125066994008,-60.995323214672453,40.252035416168937,4.55349716924718,-43.170684377501189,82.835374116705722,-90.080349803467129,-14.496599226568982,56.903426787230337,134.0038823825314,39.242802202491639,156.24063738191575,-91.037853525762529,-165.50231392912121,-36.10176701510575,-37.243633040349295,35.478598065002132,-1.7009036338422696,-25.447446422513814,-19.506815468469561,-7.3148425291479668,56.502519817549747,-151.87764585093214,-70.558145095948831,40.975393998097566,-183.78296844429673,-31.038026576228354,1.0765656574583815,-80.852055433477403,70.935330977476653,-91.451354492243411,143.57273553127774,45.936860416637906,-42.859612177968906,-18.823610282927323,-103.96681721604675,-49.513873464952184,-85.416456059527292,120.21980957175199,93.747399372460563,-39.574267965635649,3.9328091179473894,65.097313247086134,18.7157481399746,-140.91808720130103,-17.242427804004084,-69.627895894769594,-17.113753683026403,-10.239346084005035,55.265055377567847,28.741239968111167,-59.768618224012201,131.33386043918529,29.413107238112659,99.564734431752996,26.277606245903428,-78.843030126020409,-48.167291481501444,62.949295982986591,-59.933730041914266,152.97109031128048,16.502016031223555,-60.797554186854718,47.553028561091246,-19.473760240021907,125.99631139942164,-15.213025642668129,173.8644586387137,11.832484635768072,-183.51032791620685,-11.123509786337294,40.147745537404582,-24.042780279247111,-30.187230825495256,-13.400365609809203,-183.89805136048361,-35.074587506085599,5.9287089214523654,19.104262858138618,-165.88582767691298,134.45015144485245,102.14283941026086,25.142319325951661,173.86961995904409,50.803079938022947,-27.34413003206987,15.252253002899145,60.550906652958858,-17.971981452661243,0.16444872518423637,7.1529897226335235,-58.11363589412737,-29.248248589888263,-155.00649563525249,45.311160220307464,222.57624399510112,14.707037724513881,19.289430398494005,-57.456858428195119,36.037885126676798,-70.688784093124653,-109.45248798814404,-92.82833658272591,61.250923493966056,-223.86035206516345,-83.161988103357089,-9.4908948872100005,-32.984405612535198,52.546316291691213,-179.39911434624639,-21.949785413715709,-177.19902082134502,175.68351416084579,-16.436592768898251,125.1365623210674,38.553301109728906,47.91220622394745,-36.617699067038799,59.955789720305425,-144.14152154193167,35.387901577501005,3.9511777346453396,22.483625168036109,-133.27859015445821,139.18317122165297,27.632819907483778,7.1180444473775708,-46.291722791669812,1.3673705459948851,1.7220437275536753,207.06253085820725,43.026762303802066,-7.9631159192723651,63.616641304812084,-146.63905806746348,1.6015162437427364,8.1842820242608241,-91.002440534794772,-38.769721283919118,-35.353080693637381,-37.889292737861162,73.8904886006314,92.817066570929157,52.247412650265787,-108.3859638139101,226.07605799250993,-21.576607799298479,-110.98966956948018,-148.42609808443478,23.58129305935255,224.7472562492672,-1.7689140721476129,56.543395658216795,-33.8665685925112,-26.290624976008502,-55.041745137808903,-120.45418833727177,114.8572767426335,-31.431302869367904,-72.593525041212118,-56.10970811070743,42.175854322933482,-46.673878181405513,-35.364046271749409,43.548198623219797,14.126400789968709,111.86388002093122,-59.88701375982064,-161.60245045568379,156.30195655999268,76.709168756562235,-9.6603114021168182,58.754581242297768,145.30711029585976,83.570104635939799,120.83632091442996,11.847486765673366,-17.705869480752671,-20.61142220366424,-44.111672557473213,80.062573170791055,2.6030621155341294,-70.450431761397795,-6.4013714238490138,54.915950434528952,-73.913086632920937,-42.895939102700432,73.924528815037462,-69.379051357388875,-63.681744258118684,-14.791835014438014,186.31405358421335,-52.476535763039763,17.401034810504513,172.78524675804897,11.711775455621144,26.655762988926032,-5.4079609373682658,-2.4920640996388173,-94.412741608686261,-102.61555910213238,-12.705276903266618,-55.81283258567067,-75.740419983333794,17.097860827784253,-65.948130620060098,-227.21795743415794,-72.508557534093455,-169.88391560510792,-44.874154567999646,127.70598104092157,-55.272346110090851,-14.758061946352996,85.938837477883652,37.265163559018823,-143.60425134474337,-28.457506191797506,112.77614168995467,-28.805822733351501,75.182199656251342,3.7623050043413713,-136.03562860268244,230.54071977645046,-5.120398591600587,-29.494288062997661,-7.4972571873718774,4.658683880149141,-38.100443723751326,-47.052879258224209,-53.513770444372248,20.819799030849929,-14.611848137092402,63.18372877161746,-52.841439398276989,19.660029145916535,55.292664328229769,48.480541041224015,-53.17179487903951,-60.407506204010467,153.02503783206666,86.362951711595258,12.597417491711255,64.38447670711902,-9.3136893533926468,-69.236235303541662,-167.18662870482154,-60.417056238576627,-45.618380593710235,-48.64222887067406,140.65531288348552,59.133896136456542,62.470933494392227,-103.26120991954963,-61.300970350486296,-181.50580245978139,-12.129454731675089,149.36685228464671,-18.671659819220022,-103.40155174384329,-90.108813485233981,-20.735667692140545,-0.44352955093368962,5.4609068062270438,-28.802320887164392,-24.990145542993261,38.910268351200841,55.889645523689595,46.845917456283424,185.24353374960739,41.183428559474748,9.0892344788569375,100.02540204377264,-106.47776424059475,103.87506947839478,101.22290829542591,-72.198985638034912,-67.674441793282654,-43.112985751239101,71.568622640292119,-30.400939957789127,105.49518949293886,-79.306742453293609,-16.021678370133316,-44.600244205563435,-102.16689459287093,175.46272732679464,-17.234202560244825,-3.42523853078605,173.11680282469308,180.99368742228583,100.4878981877024,69.035725522657742,-15.435480225191917,173.88521108466489,17.719231850652143,-93.457223711264035,-4.5464718968166888,72.267610000380273,64.171478624915324,-182.4800170679481,29.694014608677275,-99.393877738879368,-1.5626158368525793,174.18172727876163,152.29941716807909,-69.890252749062768,58.868573559307038,-71.976270910046907,-139.65408463241414,-141.84365864345713,-52.974848102965638,8.6285746474439406,-142.50911133443884,-33.420689160567193,-0.73195003224453359,-48.407734606232069,25.759509524537073,-77.852022544282875,44.597170539630405,-102.92076315922002,30.175269661807455,-5.4397168673269114,-30.17066033833774,-24.685838764475577,-53.534257162573297,-57.089480647150069,142.88025527781082,-111.07871126145511,-99.52677974032909,101.13497790880501,-16.177984373643994,223.98500401310815,111.74935361481815,-30.75773724181397,109.66945562013481,-86.775505774636059,-102.88801353512321,10.516042107686076,-170.64217057434487,164.7078322732574,40.873295280319439,-10.547494071420083,-20.388579317889125,147.73222093437232,60.797461685890234,-16.574938809698828,-48.226210045874083,-86.240542558234011,-38.963193398367963,86.000037947737525,60.617675776886287,-24.868606406804233,12.398030008840159,131.60421453736183,-144.91587714015148,-4.2125461367247183,159.92186625714419,46.768833084441994,116.08375350234148,97.312347310959893,5.6634402185346673,3.5103710102598278,21.777814241260707,-26.265855552461129,6.5200045930582107,130.30312605475291,66.929306504337575,58.408527861227419,-50.81942781808965,-111.85751713506234,-137.57848073291757,-14.146270384016148,-44.743963809542862,84.010868014432802,78.054150044608676,-52.779339813740478,-144.96872710950279,-66.66201226972629,-88.875420964253379,121.1741596769028,-95.007081246006592,-176.99504124080937,124.13407626135564,140.97301209250648,95.073223495031087,44.931154315266241,192.93890570919297,120.36427605961207,-49.121422854166696,-72.582163210377104,-2.5654094693792331,-0.74151202474136468,-42.132528398631138,-110.50627886121728,-8.3497270989419299,-2.6181877748958513,-91.546752399340193,-19.940072645692148,28.373021868552648,-143.50294710760485,62.210562603824229,-38.403911088368972,-94.869802009862582,-66.419259771065441,11.770865214450303,61.547112309441346,48.50349240896054,-92.236187666078706,-139.18442193063046,166.64097617238963,77.477741634678068,105.99102315789762,114.49887026718694,-101.83954915295432,22.257769669257115,77.537029095958829,-103.88559040885806,58.02237641404939,-32.654350119528402,51.962612857797822,144.61465371696096,-125.57406151140682,-61.432093056706293,130.37219451828966,-3.4591051790791809,45.560821620463983,137.37658372114512,71.140197042839759,-31.322076018233862,169.70637210920952,10.174688310667591,-100.19217379662382,-2.5897480229457557,96.164951707020251,-124.28649028560116,-63.267170800954396,29.516941361839706,127.81852416045075,207.75127419159347,-85.147572654548526,-46.354096930066333,-69.775319468812,94.407422337355115,-3.8949656002392032,-11.008004183711666,-154.43686427563645,17.44118100291189,-12.54490758752857,-215.05675670631143,-174.6894428226552,-63.723128607161982,-49.385823047378238,-154.0879734692825,107.50271869911708,164.42933341566058,-64.351801276967961,20.70947139677741,150.90816685015145,-52.651867994613909,11.268355878610592,85.238227367646516,-141.17218641067211,12.527333427093048,-103.94050539681727,23.924348972768016,185.57489496700512,-81.605385522140239,7.1126918149232523,-5.2048399334284881,83.180306104775596,-112.45829114605689,-4.2565435963240006,-154.91892769110297,28.577565672913579,118.7599226786231,-91.098672050250755,-13.0172785135981,-11.79369150661779,-46.602093772027217,-74.815551447231655,-69.484739904848482,41.674587225051368,-112.63134038547585,-34.163683521576388,-90.395812049724412,14.624867622703007,-71.672688129440417,42.146357369143416,68.450702975057652,-5.6884316809332063,204.24913230279441,52.332102913868496,-11.228804364442531,-56.232968682521616,-167.26416966356197,-63.356028729685391,73.345838099081618,-28.62444310804301,23.566369323222546,-206.16132856225812,-248.06794861225325,-1.4291434771801406,42.656940788928452,-16.074627227093458,-52.020306630337174,6.3814002433506936,33.638234303404268,-72.040714011912087,88.26577812010845,46.772086357658971,-42.671090072992122,13.601574599534466,135.28211039384701,131.10229040230985,-82.066917296942108,-33.039328008318719,97.783836138490827,-120.68979181829317,67.704936438993499,22.363423925676045,-181.53335926494816,-55.684999526888511,-108.60326489793717,41.190698682672561,-35.243123826728045,60.168978282001028,28.833900049095533,155.05389878482677,-89.703988889050251,99.921427757881602,76.586906818865145,39.46079437011042,-49.597179542168831,-139.28063323121057,15.326181147181046,1.6260019986003265,-67.904930974873565,47.5305976695373,-46.34931660915548,-160.00298989362091,-103.29974371912866,66.939647547568484,-155.13446195143777,-74.337682109515711,33.115907928868808,-69.732069488948227,-209.98958568845296,48.582827958939944,-53.18082838623684,151.58054081578467,124.09284836516036,72.210398779095485,112.57376544500971,-13.508748445800379,131.95839295269872,-31.281852288916014,15.609666052391823,145.08111413062312,-2.9901121884646873,-45.000856867685755,-52.14917084255309,-39.495343833838554,306.71420704813568,-95.340852177248479,159.57298277637557,26.332805000124299,-91.02321997008309,-50.921140200049976,-53.485654243397065,68.874037975280942,91.919891373713767,64.627656336116786,-34.783488132554567,87.028916394338012,-74.998520724475384,-37.948735156690347,44.620355264545736,-59.48266929881072,23.301811886368995,-124.19528205848617,62.416964133523877,63.616088996934764,-60.29663611189887,-10.052949929538194,-172.05095072392345,-96.700958517547747,-39.002978592251452,62.131885871156499,-179.37047106216892,-161.30181033063627,-22.326556584651208,26.940188834915922,-60.52640589838564,89.05504349238187,-39.159898294830512,93.707622353099751,52.299177173260944,-29.766367636973897,146.66909896618614,-154.13437037623817,-27.108846349840761,-105.08191386657741,127.84160188350683,83.338132630203418,-239.93519814035699,-72.421758949491107,-85.345753051343394,-7.7382700330913394,-35.011413315738366,15.171257379825114,-114.28613791427257,26.749390457066429,-46.172175066604865,19.914571835042935,-82.562026272052634,3.1133252213448053,-52.702667889390128,-209.23258040908814,-93.862284320031108,31.018071267673754,50.076868224433341,61.805697472227486,-172.73083877503035,27.473832715484757,-6.3650750408726751,-30.053182262534683,181.06025920593186,-99.918619813307316,-62.7043200729902,-83.05932618368459,-230.88276222370837,8.1227586591013612,266.26652050816358,36.465242077947835,-70.44319073196985,-35.401927909863339,-29.145098382206129,-89.409661362423037,17.090962798180556,58.154242143461325,-60.243097815442638,-18.544307548095659,-42.631024747202694,192.99074441637401,-10.908605161313741,93.656435386479785,-47.395636173306826,46.963887021048876,65.559490960714129,155.00089618822653,-158.32630492448098,47.804306854896652,-47.256298699581244,144.74888031888742,-71.189037914674827,189.17581240379195,30.964767779348655,101.03650858144267,-38.802675834527278,64.359669575555529,60.529878854936243,-102.74433003397219,161.00291424796706,149.11262590776877,-175.98895174250677,-98.019856012688422,-23.687816323187633,-95.347434976603722,33.948256245921222,8.0279009881737409,-165.08767850590527,-21.073687697360739,-89.684453974921027,79.652284426684702,56.641449983476463,-43.063375162231488,-14.169438928969569,10.882183577389682,-15.783408345850155,43.244688070674414,-216.86729382683194,81.761204086171375,31.293316410223547,-119.57043445333737,116.08561109527865,26.771204166796061,-40.685477287536678,-73.256842134764852,-129.15978253224841,66.012014875681331,-52.819367817995058,-49.854449069195681,48.33935878356565,1.5207332100259592,-97.990644902909395,-68.87043921404225,22.252803734158164,-45.8750986215355,79.23260098602799,-164.59901596984085,-152.56338792814057,-126.21113579449012,-27.452448383363617,14.726878017545967,62.09579649972909,83.081800179601686,55.992789277010651,-12.96502897595898,-138.68471080055335,-150.3838652012883,-86.013424923544534,29.400945995449526,-23.728934276014606,-7.8533011462889846,5.0846843214067334,-35.398528538887255,68.586576922300608,-31.744458712143398,-116.59885910062789,66.19328540186504,-45.2631597278247,197.58368136057584,31.789883016687611,26.335095510786033,-99.117679080560123,111.59570110778046,52.88566569553609,-140.03469805039879,-181.59416047986986,-33.608746294278617,-45.195094425601368,41.700424455648289,-12.121330768257927,-50.437082914983066,165.58015314919658,77.066961775972942,155.9304364408743,23.620223638405136,126.09448997731997,197.08724595120799,-93.578540792155735,190.53331460283431,-149.79153394899626,-133.23895875357653,32.336171790504714,-50.962782759468013,-34.924758156499955,74.345422376845676,68.28971454797616,55.248573377173194,-56.305793422797002,42.83997229266712,13.64613984123546,-108.87774869901418,-24.473603452352972,21.105514031806205,-8.7713779226524942,-49.334616967408678,185.6801578822537,-65.559064461517224,98.602626963142086,-60.383398900651216,69.451605254898652,81.471209916290363,73.712713824705631,243.89216039999712,26.934191957521463,-52.068857432500749,50.802630499605627,117.92553087978479,-118.80434033846845,60.426335893783659,-10.462106066291454,103.3600057410123,-1.3318605288121574,-119.03738160234364,85.223325169601168,16.511409943870504,-4.9384966333554559,-140.07127004529158,84.627407373602296,-71.19420153730762,4.7919363481931043,71.05443050101718,-28.988234336519334,-38.01736740360775,-106.50753818488747,1.8702114317579586,46.998428836249154,-28.610459125546683,-70.121689609155979,-72.238935974591868,9.7823743078323986,-154.79463235289279,129.06103332233991,68.916612697711003,48.528977135186913,-19.763076870122369,-107.58130003667738,101.23071551960234,88.064797784783465,-12.339055271112425,-74.173317014918581,54.764010323056205,45.454436411397246,79.505278000519695,-61.947441220473692,-30.886627200498012,104.06332571209407,-113.148511393587,-59.646034864853895,7.2342666220412681,190.03832423132758,74.540050485641657,-116.68587145056819,32.751958806453374,-133.08679292529484,-35.401762994006276,12.568934541195631,-0.21411658706502279,-100.73465225852908,177.50836380523879,-4.9154904820255876,-45.288390616304333,97.919789093955956,-55.29543220092728,-6.6686853889954385,-44.928692604723594,-124.01833855914046,86.919445397230234,61.492377480967733,101.39539249010738,-28.494739325531263,3.3694844200278382,52.875062708043771,-76.670350712723319,15.367336699070645,99.62474104481808,-37.645934354969206,-3.4402239445595626,48.813212375880696,-55.022605479508123,-58.251345702234119,-51.787443812914375,-41.696350865931464,27.575885366999316,-86.588458909872131,49.580504213255693,-70.839089180683033,5.7540385228952715,-60.375298181899161,97.527000326345188,-176.78947680190606,49.489834240221981,-164.10856929766194,18.357206264337378,-3.280124355839213,59.847906645477075,-13.67126238555057,-121.55347112409009,41.480768413584201,13.067466247590474,50.626677987797379,-134.84586973146628,22.853311193146403,-32.79252441584854,-42.228680086658905,-55.279129879814072,123.97475107461766,70.145849107736169,-127.518017771074,36.837045810968128,-11.43438085913979,-24.713409827830205,39.088697354898756,46.702039583114008,43.034291427190801,-76.344268634339159,149.85486022490375,46.10449099475769,-116.31952951015899,-15.799677762603917,-52.390434185102045,42.142796264231237,-52.761713307933263,184.14921753810907,-32.449228198211699,-43.542062947603192,46.647167135983409,21.049746356099128,9.0508311238568808,-88.699482545007172,-116.67727838468281,101.73124604970513,-21.198205445308915,-16.616775253085727,17.644115328499861,-37.233032070886225,113.36633804995604,135.45463059123512,97.202248715620968,148.7458513927069,119.43455520873907,-48.959195988436974,72.17046668136544,47.434483824748419,141.35158752827709,93.373340416758438,134.91216530395042,109.93937744914399,63.533162864077497,-34.798853095158954,32.65027447804259,-16.743357788349151,-3.240205088089283,-145.52002939682708,-27.021904631892898,-46.017832137182552,64.818676926609484,63.227169316137086,-61.460939910919166,13.645452619117009,-9.2935555829674641,-25.753365921237034,52.278382267871436,135.7965885298085,87.154919473655895,-73.372512844052665,8.118849414384357,84.013535874681025,22.001249694388711,-14.462369839209423,-104.32840628566501,-26.016956584407311,32.759813062342339,41.073478427195482,95.770735508022113,55.508629565964384,145.86145946823399,-52.871154161019994,19.634115046621055,-192.30190240312373,-93.882005653225093,-38.057651214304094,0.20739462312679713,-18.15988544431616,-17.391813403812861,-67.687926033127312,-48.902674318720941,26.276372259754776,168.4384231364734,127.65086364383735,161.89885800013445,64.104317626160594,-78.958805387004134,-48.530293988892304,-9.580335450507274,15.532023988331467,32.92502554445273,68.240734766512077,65.878389321429538,140.32314185056006,-89.169294296028355,2.7605924281113658,112.14106907154189,44.865426961199844,-7.375642413306096,-45.237404272461845,54.826514116329562,58.352253044789478,-131.3755112110988,51.979408485642175,-64.860794490431999,-70.789227100928258,55.499923792158711,42.684353128172475,-79.23355140701058,19.149254775630354,-139.7951533630181,52.532620740111838,26.012722464757459,-16.829125589497266,-42.741323143769272,151.30741977766141,21.065349372552518,-187.20016638412775,-77.812909514942206,-48.346498832910633,-75.290305596953999,10.031106691709404,-61.424580143067487,-33.297780894830424,-64.51715083594101,-28.086155543975984,-46.266616960043734,126.01251848422609,80.525882087202561,27.26222651324241,-13.628231478046317,128.59944599353818,-92.287338654246128,-63.457164412626163,83.622557312864274,-1.3452699780464172,9.9525315500795841,66.818621708837597,23.713824121960865,185.04252885473747,-13.818994822093629,-52.592083784481218,87.66225329153481,-8.4186480444385836,-35.980231480617263,-38.217018170253375,-5.3317434173623539,-122.78137491320169,19.913772081432501,-16.965476163727015,-94.419470121629985,-44.714166373828171,39.700931810834646,-159.00526336302769,-27.793965574221087,-112.38248942744283,20.342446743283503,-92.089584278042395,36.329275760366492,102.11831154887199,139.98106756246648,-4.4166370190134945,-62.624200167036214,3.2110753106741186,-66.199222565588585,48.271807457047338,4.4155941499602278,-42.65750031998649,-1.5332338459827675,-20.981487826215371,53.468564240017734,-87.37302389510532,90.453509093106319,-40.151668973420811,-187.59032490176969,-158.01814118126475,63.127821600964985,41.207780647784006,29.676753697740679,-11.754924861250682,-80.544906619159903,-104.85102209120117,52.004628343933454,-109.1627351981993,15.033371591614671,-65.476720355522616,-45.056831134551459,25.461685858425071,-96.521153120024977,-12.909448476282233,-52.436795414194314,30.145759132969104,-43.436020258206625,-23.757759345853167,87.964710924516012,72.335977002899511,18.517591617217853,-106.78739887196571,-101.11040422105989,20.158039507194935,87.111272424656789,94.274415695503052,-33.003734567367339,-70.885468322711745,-24.98959752205154,-39.117237431205893,-13.072152458507981,20.8643090863334,-86.905920254652159,57.096570477778847,-142.41134999317433,72.720465625126707,-36.977928627408858,106.41570845902329,166.41083427472572,-142.45662915899914,-69.469461624418798,-60.618279367578481,28.166235199384182,33.044846140217224,-79.865104295539965,147.70544224774949,-8.845475773300862,-2.2929372229957892,-8.5614873560464027,9.3222679822024404,36.003267341900994,6.9260762341554667,38.736007198348474,4.4128130931198584,58.471497087432795,-14.409924812341998,80.376703009464848,-30.901016295583553,39.090952035559773,-52.103301936696923,81.542583119089613,-76.322804941332862,-70.991870244233965,-149.25013697144578,-67.826821751102543,-15.964398516795892,53.678393306722924,-35.404380670938913,-47.096004748796062,-59.562186091602904,40.442671783176152,52.53489325582531,-44.497791341274052,115.60145291288237,157.93303587330621,-83.658247511897201,-99.400126066571943,114.64288688321935,21.988592208291738,-113.8207603139783,-80.530951490868404,-45.760318343954097,-117.37152417923892,-101.90385342138134,12.446984092760829,-79.387219422824643,-7.5413297122826464,46.289772635180107,-58.06929019055513,-2.4896451404589754,-83.719430816097542,148.85986437258478,62.484302076183951,30.053687877414841,-16.473156133593612,21.693461655127912,-2.5257607614654063,-2.4120083576301141,53.205649340965486,-103.53737627761974,98.023486151302308,-102.78671084121147,36.503249310346703,15.771416738514013,-32.376784602600779,-91.720537913168442,81.181085373254234,74.688740538671368,6.8383060795527442,-147.39950500652589,-127.56494451583157,-53.253718762271227,-61.99968747402211,148.00346901739294,93.875176825313616,-181.85871424534614,80.178450135017528,166.24921120917975,-111.41298241748042,-51.180849195588621,65.648702192321892,-33.096224612906717,102.21118761398614,-200.52344180261116,-104.37400332441247,-28.822984241295764,-9.7736989000130077,31.257467154120583,62.141975255541269,-53.613022781046951,131.32925917236727,-134.16771699908602,-27.741808504283263,77.507674889165841,22.552076811718521,14.473557320564245,-95.578698405125664,8.3154353877684457,15.825818827972125,142.53227206753766,127.29420685477643,-129.19084460018519,6.2557688132347327,-1.2707527623058128,-64.761346190285536,-13.595522549003363,-0.88971934281289577,-23.847473739716417,-65.663455576493817,34.233581648464323,-25.958277602363641,-27.877191400896681,27.325076085087886,-54.750214778760821,-23.055556100342493,21.742602553565362,-49.297109706196395,-16.132913983501588,-15.19337509001744,-56.705522027991819,-65.031144561189137,32.93682765371377,-38.373959522777781,-71.815141507484725,8.8764042869700752,71.300663630330206,-65.423568670876705,98.467499611106987,-21.570083025818271,-41.407803660298093,73.64837987904869,-9.9755478263422432,-49.060078578441676,-33.071425547339047,-39.192030467954133,-13.716718911826881,16.613806195655215,-82.526443610541804,5.169134191362506,-20.148660231807433,7.4240030696666182,-39.862667578248519,-11.608368331143877,17.274535281360084,17.970733568113733,-14.216857668906336,3.6797616178773973,44.454605771952295,-15.875425563290243,17.883337213157724,26.918753427719885,-41.512344103078533,-45.960829694816447,-129.36415546017921,-60.188989637180192,-34.303368876994554,-6.0964330304954402,46.566412901990816,55.307038963401993,-40.150713846915728,-35.045828646013867,47.731813213827124,-63.287179317664453,-2.0330853750184477,38.452938373429866,99.09089604112053,-52.647903711926311,-70.550349354447036,24.11601266219008,-45.317654269826335,43.016517634942076,13.499845464739874,-126.97443208972953,-38.092538426803145,-27.047304230866267,-52.465495274363015,-79.11208049123691,-31.743589759692256,33.538569626116129,-62.223641963508094,8.9559199259342606,77.485969184067514,-55.693307012857986,-39.031031236854751,4.2042780152251158,59.799794944421087,-76.979296351980409,-32.918825467495978,-49.293063564053028,13.96603864223796,-104.24016332620853,10.886093215060544,-4.2362345541523787,-5.6787410093879398,-13.747338335179251,-10.406813723587476,62.217570077889746,-3.9440021862584906,-53.018511272723714,-35.061796642839909,20.153534455516983,24.325966616110488,-14.315560159030696,-74.081344083544451,45.117047927696163,14.994263267258722,-31.463282243112815,-4.738011905939703,-0.61343303369628188,16.169890411712633,-3.3143138213307708,-43.972307755940619,-27.583868412928457,2.3309372336778935,-4.1559197464718096,-65.348545803450463,-31.315065227988306,37.587965247734033,4.8337388252352333,-5.2743777056073853,-68.236968417736961,-24.163305504358021,77.379112158703876,89.151202085182092,24.449617170337337,-10.808685648153451,93.879095808188026,-63.461778995492821,84.96150329877787,-0.4567781287638546,-77.287087390387683,5.860834000158178,-41.47468269440153,109.96690489844256,28.480293021806027,-1.1384546120510568,-31.66124506539655,-30.295089992984529,-22.003919585867738,-17.040209780633496,-39.727159804697116,35.293963147656982,-75.433253121062506,-110.97760927092584,-94.511333894780307,-43.396732070794506,19.184443388257286,-79.566290965303779,-14.445093241065567,-130.21494723020714,24.028436998064304,27.574191315461512,99.006846163494316,148.34837156586067,3.1164547138571956,-66.581102445403388,108.93798490560027,27.860978155348192,99.263057481532087,137.67683605492289,98.238476729614376,82.050080835628677,-30.846771528780394,-38.848943697011407,-151.52580265678898,-23.085452524497573,-103.20505965923358,-69.695557958326603,-151.94931321556138,-56.698770899962568,-44.244268246518949,96.431220796645974,54.636649459394619,65.916085384038951,-99.691591502766613,-105.32378204731303,117.89556852479058,23.561827130038658,69.670983653183498,-26.496708760125806,100.16306384415586,-23.986015522122312,-8.9205419588190438,27.269591938192473,-49.948900730150044,-21.636178849143221,40.251745850601388,-175.88566446471202,121.02127006349639,-58.705707679402565,-131.74698611746521,94.428480403963292,23.407472803464771,-12.969250633874029,-156.00462201687304,-19.893387902305872,-126.36832634339356,82.109617665627141,81.175997149397702,131.28298213066748,-111.54433496254336,53.913203070377577,-47.874126144994435,-157.26213849507931,98.970939959962209,64.785509921499056,74.949832666417734,2.3943053024580863,71.943861559683398,-54.064716441336614,119.9470895626408,102.64444873301193,-41.43924251814493,-153.17923335205302,-30.157381701159125,162.54078734846553,-73.218532781930847,-98.902035585088612,168.56466972816787,-103.47902821533133,105.06675058139163,-32.441282640701473,-124.24153637379339,-9.3384026356082437,58.949297151994216,1.1361940487115199,-143.63443245111748,-39.990039188890464,-135.94775680647041,24.98204083033454,24.854440491032292,-30.304864119269187,-60.335538148695917,-13.710668040106732,-25.199536365736037,23.808788449438126,-114.88020888945202,-155.66053750311079,9.0046911591556551,113.12815716042138,122.63533991656894,-33.482055831114451,61.123100881636937,-109.59008080515775,67.338081878636814,91.09220861431514,-75.950423698077827,92.907958881581536,-116.25680641396622,-181.18547629835007,-30.048421095222892,-2.430483522465515,42.19940196970569,78.763499401013803,97.388741946285563,25.46591298811569,5.8100475046727951,60.446728672289161,-79.746213871810838,-51.24353246629115,-98.543324624424571,-45.710991764998866,46.23552608323358,106.4545463039031,80.164495323704585,-40.236005976096045,-57.678856357054087,73.335908161250671,-73.823595032719922,4.0779625649603677,-78.634878372347018,-4.1439557397619211,-61.496409755590868,-77.452650340685935,13.966721374594425,41.896848309353636,-38.299419380606807,75.450909077261002,-12.769250369128709,-41.619507166370127,-14.358672551956118,78.093343643023502,-190.32934126820089,-59.953595409903599,19.979619361285174,106.9411237467083,147.84430735934981,41.835753557539412,70.498344484801891,54.953209127062507,-161.6168972649516,-57.29103422170391,-11.120932947379096,200.27362023727099,170.34705622991839,51.170934277021573,-35.769404808577818,-1.2617357946309085,5.7733635971920236,145.44495765575286,-129.97231511254623,-12.048828208839371,-58.043246812282504,63.862399496522599,157.19066152342219,139.58459754798326,60.296129220070881,-12.722363164197503,-32.735170295150155,-54.075676117233087,42.918559843778411,-19.949518233881033,47.268857334069523,0.57102375373373349,1.8660472834751118,-130.62557032535196,-155.44647876835842,125.58575533919966,41.251809614615091,148.23955118833496,-102.78293654934606,70.879233054849863,121.84042592983329,95.453309080252922,2.8379782514438139,-26.685311052776868,175.82016495143463,155.95545525114633,-4.7495948332295939,28.898629396828994,100.55148583558642,32.555836631053033,-38.449269109233484,32.839177766909053,-2.7607425243413126,30.575838003990292,184.13494643010765,50.212890478314741,102.28933582405148,-59.495124505651475,-73.012905574191493,7.2364341626763178,50.824146708493039,-56.511569477308456,56.863766603900146,-3.0725547025755056,-41.193976122107841,-122.23861507115561,53.045004330050674,35.424723024065102,-125.66311782804777,-72.307000486922561,151.53571429072798,-134.30617999138303,-12.258035763561242,12.463941158702514,82.254238193952645,87.797015338568841,-260.88903090995723,-80.278470504183602,27.788169157095329,-74.548746209856276,20.912345936097253,46.17675226826762,26.091447071051221,-17.341605132206759,-61.530732681311065,226.10503423881778,-35.524624704206033,-77.681432817613057,77.872081969406608,18.041755320159638,-54.899531173731752,75.849446333657824,30.295323973494245,-57.391133032665124,-68.279314760038233,-24.010359856354725,-100.99115086588935,137.76475778729804,-5.1299337737093698,16.71712273186057,-16.882900230006488,34.191176680690553,32.687871272617684,-0.74099342206544883,-171.71827883823312,186.66238938309431,-49.724473072138835,132.5285181102831,-2.1617068172205292,68.101953330376134,-16.031280394055052,102.25569402947315,6.2103723258133314,10.088865046883623,6.6571168775211973,-57.458276416549815,-150.15421933509901,-37.354725052834425,-111.75698157935143,25.299371839802113,-61.872740624833327,115.29938107507198,151.87064571127388,-75.641270440907306,-2.3692480948370296,71.940185070177534,-2.686600933670956,-112.67464182282328,123.52630822609738,-30.567793832620737,-70.274748315635108,-71.611110315891622,-38.932265377077272,-18.680495495325985,-87.561606580877168,-55.720003020617554,91.279291776234601,-74.419560874086045,-56.89347996022839,-115.4734426572608,-39.81306316227225,1.3175897145011675,-55.842624215916757,-70.036194635494468,-88.086798562817563,-17.337570976996133,-1.7519627646127844,-110.11425062478565,74.793598749861744,41.789594679278323,112.1410480654625,10.093142833681583,52.287716854677939,18.55733102340082,27.253802427982603,-107.25963649015493,60.963224863300951,23.949608610164105,38.768426824035799,56.305272659966427,101.73394384182393,93.378686106027558,125.53123029472967,143.15754946609917,-108.43167454250421,-23.160379995452097,74.442740163219639,62.584486313465078,-140.90039337184862,-48.444369316234621,-0.5810619689434624,17.467698649293098,37.007565039342715,-58.132538824943978,-76.897079976841027,-81.94896654479399,-127.72385296276032,-18.876972341023652,69.359268696872874,22.891112913449973,17.806139423379793,89.109950543583579,193.89033666605286,70.518181264447094,51.940650640674107,-18.059277217638581,-85.859610926824303,114.42537557373826,-34.289084377239746,20.556316100310539,-114.18091288488827,-68.422198667056648,-7.503315802643975,52.133711857264089,-100.4110464765853,-70.433959114011145,-24.942164294074317,40.461817376029103,-29.390014722985242,-4.5283140034731755,-79.720347074984318,101.74746393546064,-122.28031830725625,21.079971236577197,-30.842734642366636,-41.536223925442656,36.683055020054695,-71.256451605475192,79.925455742561411,52.838172760208607,-1.4500184181747002,-51.91959643024839,-4.6115747110892684,54.122021380550621,29.853949124570633,88.218070903389489,-200.26674089088186,16.814823910842939,38.620730279666617,-105.02863337629175,32.68729274104286,-0.27012863407121301,162.60343312640194,-25.445962315995303,-52.768553051341691,-106.1922053884385,88.375485438939961,-97.534526529664873,5.2345626714706768,-17.1947234629314,71.911319262898203,-41.663831746252974,9.9493756828863482,-82.590763129044419,-96.625249132426276,-72.681607098958295,110.45881236639974,-15.827896791660365,60.96347880652587,1.706264805976911,-113.5819724701378,57.578506586574591,18.001246991424125,-11.941887553751357,-28.609495434594855,36.762911817928881,-80.716718705420249,-211.35994771319679,-116.53376517865676,15.91903870947184,135.17409147583288,-38.101936542477517,70.6369327336146,18.191160252773916,-52.642511932805405,-99.152394656637767,78.504601813700077,-88.546071168289586,-78.46700807387333,58.645600478530881,-117.90484700554748,-22.896437013883236,-76.713967955012407,156.55185971625991,-123.77776700196924,100.32510111686682,116.07341957303591,11.059594406080862,-64.495351045312105,9.7190087247743584,225.19719951315989,-178.393552843962,209.71236317776828,-6.6187516053724806,128.74725008401975,-101.49293513682883,-20.262061422731506,93.238460451082815,-3.0428853037846126,-5.1622161058199723,-42.339302418043701,81.173549497899842,-11.190182146677973,10.77194899122572,30.294562505383023,-12.288130566509302,90.922837508842349,60.015887962654233,103.70207551134064,-4.2697245940954787,55.783468673080378,28.666069087288292,212.58213685402038,-167.70383620672703,-59.729972282541539,-16.650198591848266,-70.922627300597071,41.525302458758716,139.58052365342115,173.2533707980844,9.3166752934875205,104.41826193346846,-77.074601894000764,183.98790025949376,38.964419889658259,274.46999084732806,-45.51394701835639,-73.495549173174879,-115.20902088559916,-121.48195379670236,-6.4555446496898909,-59.50868272033928,348.80282549778201,67.371270438249127,-94.49743868264845,-265.62191964659797,169.74812519107354,117.22286724924911,-40.971198380212101,89.84587341386306,11.450319360873474,-41.453497223245407,47.226067843622758,-19.148369043327143,105.2371009014787,-90.452856873904182,273.66917064853362,-159.67011537859582,-24.942138418813101,336.2468604244512,-29.812570403259286,38.432318094325133,114.37707834890304,120.81234789727459,23.281652783321782,-24.887058315700152,11.688763159901214,33.11761399015154,-27.201600631416319,-234.42355015417806,165.52243012664246,92.261269124384583,-163.05303850216353,-93.325977552309041,-91.432306721070532,29.425601973779024,264.57697249780051,-128.0186044181944,-68.454011943620529,66.781439246269201,-32.189750882112328,42.985761329955842,-242.98776944724301,139.18764002841937,94.716045677990991,-173.90343170021339,-37.171266535848034,72.82627532528889,126.99401347052209,119.9111222798528,-155.26603218244597,54.505856328113126,-70.153779418464993,96.596153647339449,42.897977567507589,-40.904649959784308,-86.0105185642186,79.739788064655315,-11.727783126939208,-99.922293329541588,37.991698790461129,-150.11160847179798,-42.72373787290168,-30.544502931486601,-176.15182065002566,178.5399977782163,94.48916175225294,-19.384926599054072,368.54650506910559,109.3300853711703,-198.20122956819336,82.121586500572931,-161.48857618058236,18.613613145534345,-254.08832951255897,20.066739058044121,-37.69679215597391,28.306692281821988,-62.258954080389124,50.420867899083497,39.703046013432711,44.755529407047355,-82.225708041749343,69.920947867202088,-168.64102163490531,-40.98627638218089,10.919001523342512,108.62499000809663,-191.40362522750007,-27.574529982723533,-159.53853517983961,80.63958120075165,-72.073592914218864,46.342160964160087,-237.62342661785192,-56.598508608834521,-167.58379939761073,-145.65834898384713,81.227724528405759,-78.45730117474335,-103.58945427991567,-70.599475780214831,-196.40338178072153,43.638512781046501,-188.66396341510745,-40.065900417301336,-51.060533038483698,158.03622002398401,137.77179200250691,135.12253194471413,-100.16779373239061,130.80815927646822,31.004495925098936,234.7110622699098,-252.30252389738513,-41.929482882161778,25.972546022627704,-51.038579418347496,48.353171856578179,185.59643569479829,-12.185750849267063,-30.200798911584197,99.932566187883864,-90.658596881933391,-67.710899333609177,-35.98805728071887,-276.02501529858642,204.95946363376518,237.21062725674597,-122.51602074613334,-7.8175950669449632,-52.194523556209717,110.21121070061645,264.51826301337934,259.33259449812005,213.12951978388753,86.021004868746346,-315.72145961622368,12.892605264696527,-220.35108814457391,95.591166354342747,47.442631873578428,11.029631204253022,-108.13123118945339,27.735638490969873,59.274376188033855,-131.50331497149972,73.179187087480898,-205.94201524958675,13.362196584457564,115.56597093957254,-18.591015838795016,14.862364346642195,-47.822638964499397,-192.54530080892698,-0.68224340643430992,-8.4147403489872801,3.9169912098454134,-64.735330286313214,83.547943532322563,-138.50359191574555,-43.666562803427112,81.607945450932604,106.64402849346898,120.33173823595699,43.076346604084748,13.109679154173229,223.01493270821129,-196.30922561481702,-76.721832776445154,86.120408775035699,-75.273861644007908,-20.768175046460058,129.37558220684022,-190.89751996772185,-21.296520774639163,-44.360893002047064,12.719112268306503,-203.32958041657923,29.925537187679964,-84.991157711722238,76.143179547377997,-258.36694108747474,2.2580361173353225,138.85202301956184,49.72521714117525,56.976672817666412,96.233056117042338,-39.40037594603271,-44.054969859793005,52.431028339398878,135.15483840662628,62.732383826662776,149.8197389747958,-67.523155262399101,-132.81634653150701,39.495381049395995,-25.332830798083883,32.255423689298709,-81.036643440843676,-0.29971852233957463,129.38326323458585,122.07395484288587,-145.58253189624298,37.769022794831493,-186.89358549214961,122.01534724227919,-38.867946227507097,-160.85086735605316,66.592104471827554,-43.062101135674155,106.25023851280042,114.12869662981534,176.52064669843273,-74.229183734570213,-98.377047702518894,38.679080999850648,-70.956011578802716,-41.377697974700169,-33.194136564728282,152.00391941878681,-97.781084174932474,83.32309645351998,177.91346985974545,122.4018771979943,115.8823969835889,132.7030532676454,-44.61472796580739,174.67392874518052,-109.31858063347643,-142.4671030727888,-91.810440386262712,87.03649550898183,-3.4640096253720642,59.562298627260162,40.182342387096746,203.68421663709279,104.12057254405805,-34.559304534998894,-171.68440982995665,60.076323046690355,-7.1607018172384684,228.48827416024187,117.09585996802048,3.219410066821581,147.89373247082278,64.135777575871316,-5.1007014197765983,-3.5301025414576515,-28.050749236651061,-190.95062849756306,215.48059529761042,120.18797133667238,57.35869051549669,-154.2544400367477,113.617581735267,77.806301294266063,-3.8865811514000335,-19.136284804419411,15.449306995363376,-222.12049108167253,-54.963442687453856,314.44422976606643,-83.81211337398905,-268.19424491194883,-190.80983875027417,-166.52697866265399,175.32230787121941,-102.87267272901533,-169.79348261117178,-54.089570846662497,-227.69381783736392,8.2020672741760947,69.495496482877769,80.584590302162297,13.224462253469909,95.662633530074245,57.295962686050473,-78.694136370421148,60.382105824543956,49.786330019319252,-12.538736092407248,-145.5992102643587,154.33413656630057,-105.05916095655789,-103.821981575932,68.175739041406004,100.89435275240126,28.310887166582745,26.463912218284456,22.890164731801082,-24.226672049974027,92.14361107871342,-125.00002634453867,165.99578501681663,-28.531838069353938,-110.7133208044971,-117.73363766101792,109.00743320170352,171.63698628783766,158.35358250040309,-227.08595535663528,-25.508982188424458,11.047435295070422,44.706489410560621,58.362004756617239,-31.904388070013997,-3.0241908960843773,-162.26881664784813,59.486918218017678,53.777881190401885,-42.294930805620041,82.742705749522003,106.69701822711286,89.70755209465338,-26.142480857437619,187.49267868144221,26.333548824146206,43.213689891197014,-51.842143601332523,19.893732028041082,99.07105945738391,-84.961186045528521,130.63930168800709,-7.4510491290980241,-5.5224432328732256,-23.54568500560579,-92.12221422055525,98.623545292905291,-243.79543149420542,-125.30523195573163,-60.09814940361553,103.80079667961974,-170.05614088440944,-8.1617776525596959,-53.212254407596561,140.67758656845695,-249.02558035220008,189.43712288686518,150.16389226719349,64.094531069404837,-102.32258368719845,-191.64725613725827,-8.5754627696042789,-39.179827057450218,122.00817587398519,-6.6012885552856382,152.65602820479447,413.2941641318252,48.918744874171409,101.75874815320296,-98.557663831478223,-251.59128936288465,-33.321995601281884,82.470758415268804,-91.129681689783268,-36.937043192495629,-35.624772976576381,-178.23755132886924,-153.6186779790113,65.684117392172595,-21.145473447912451,193.89241432588886,83.82820581586256,-1.3902984153881519,100.52085587794578,110.07208134164739,-107.93286899461339,150.22101640879524,-125.69772626838618,-202.03457758823004,-205.20811202090164,-241.30458072226844,53.253354591197315,430.36190909630176,10.988591039908016,104.76398328765899,-33.98338274058365,81.986098017511381,275.00660347410025,-17.927566666822955,-110.67644243526152,161.91138259596704,18.998827533661384,-86.706219900235396,-287.984010514293,-141.67359622927475,-247.04202433217478,-134.65683887319594,-108.18848833715251,-224.3851908593557,-219.97933832044276,48.45577622030779,-13.023950854247254,-92.007534506415595,-40.161145811984397,-40.626600868672796,257.74013491974137,38.808720754589849,-140.83154297891818,-10.153255731215225,91.618032265233694,-101.92678546058249,8.0578699959039852,57.328983615741258,196.09919339913151,56.050964365127612,109.02337262300554,-14.030891643341457,-136.96387663459129,30.317509941162751,-226.61904663239625,-48.250162951457597,-316.89580038732271,35.997120561377088,196.71428214948941,-106.77473243777413,51.492042046202855,-6.9257743077085161,-44.544941935134034,-4.3575421655936211,124.09905595506154,-50.994380876943303,35.366393346883712,56.459552286458411,261.57760490534304,69.013348130983076,215.711462290741,97.746247499286781,88.124732808454013,39.460539929295848,-21.529112521414337,-246.03619772223752,-143.05997384242983,95.162641432841383,-74.584112673167283,-124.04811054480216,80.012169279882642,-110.06890015388086,8.2060842241795129,85.546793814429734,45.932745981219867,175.93753418354336,90.065412746970551,-7.9694883972347839,60.667099096092635,74.414891250837769,54.285391932255536,259.82072683437315,2.5702621798067007,176.2812124221677,-27.243868921943488,-5.974501325569392,-232.9926733529735,81.241081899468625,64.904281728301171,-58.449926381428867,163.83691842060114,200.77681085920901,121.9004754738767,174.29260712907822,161.91206542872402,126.74743745823311,-113.92954916432639,260.39877134445447,133.520014123919,-156.62542696765405,-316.29899238183248,179.23377063318765,39.529779589643759,-62.797561964459618,-164.23030046105697,-147.74190211850515,-6.0927207130787941,-37.617453596105705,68.61449477288005,-40.569966337205237,11.750902999686232,22.124926371150117,-122.7057875263326,-132.86054030688689,-93.163788597256911,82.009584294826908,154.8000394878199,1.104219481571648,-46.428251844100998,-93.407167719032628,-90.527065740268128,179.46619380959646,-99.275098749970937,34.32306971844335,-233.82644564589481,-77.43295778222452,-162.21439469447665,-9.9682710746169132,115.70347616865588,-99.165898367295341,-14.772039072238265,-63.983178231469857,72.929223992747467,-58.086867534916685,-119.86106447614202,84.492405514878769,-107.49713406055213,-22.177774228125571,-47.021233455560441,394.76048380513043,-71.713067797396022,116.34841024529726,69.972512205900301,-26.362882460978462,87.591465714793884,-6.8974128035608544,-247.38570872851301,-152.33555964628462,116.3314851911467,129.07564282103502,17.595762901186788,-57.174520242681162,-78.109376008547898,-27.42506205505633,152.44313024886731,95.724800580484171,68.285428155675618,46.314488031353228,63.370996481806003,298.26569521019985,206.99053810958787,-108.30691914120649,124.86891813944743,-89.739374735147351,11.50115637048949,-155.39584026268216,156.01148507433919,102.88247513129309,-21.62103861141911,25.744150287645397,-259.58890772148067,-93.765495309421595,74.337657726761861,-3.9335475784990308,63.867944637774372,249.22611558134747,-211.94916171854263,-185.40259141916874,106.70136163667252,-62.134274083242467,156.28190682506789,4.0488576678192914,177.95654259040677,-136.79709885104558,46.953070451677306,-28.617337343546438,276.95720334308277,-72.247821349745493,-361.24004230664656,-53.00517849626803,170.75443223084969,95.655866741633616,-144.6996711578725,-130.97436886535397,14.925293453175193,-48.701881793902373,40.52377221169651,100.07284517726518,97.257065589823085,-53.276828911246056,38.828282872048334,58.240408712375171,96.742523665575504,-190.33478463505429,104.48762157581785,174.90037577821397,10.013747384895346,-137.74313818269758,179.34185315090011,70.232727197148066,76.609868729920819,145.78309884762308,-53.594700272381928,86.478857225733734,-140.55005759801958,75.176331024794351,-40.88092739461144,-64.003343878409822,0.86641078014169892,44.397174789546582,88.430450109278794,32.395558038723998,220.45310744938971,453.93391214266876,-3.8004573709909337,-30.173298421421691,-49.761019610208166,-7.6986466542385585,-11.948178629839052,-38.028681149602932,29.663815679667195,115.95481600592696,54.876638395970502,-46.901290831519304,-72.382989144936261,-25.890641781774718,86.93687016858496,138.32021312361627,-21.654499195690747,39.245813432683612,65.203708970193645,-79.77560407784496,-122.42922960117912,87.107907425479155,-225.17259333435223,35.215877187856535,-153.61595375821264,269.73816406728071,80.974707505469837,147.07395909212971,-52.874079855377602,44.513395183327361,12.217244542102804,104.61927650804937,207.91143887417473,27.696836148354635,173.47931825047857,176.00386337431516,230.56478353585436,75.028759531252419,-6.3044382822782268,206.0172138360829,183.71491525651291,-80.447171656201732,-7.0995075331553963,83.536457067281702,-36.727095993357892,10.396520966322534,-21.14019038965364,-36.286489024003373,-221.14810603860533,-122.74650744948832,-133.25956182082447,-102.14159613804506,-55.89629044869524,27.213201501313861,42.08488108003548,-88.692571694638104,38.954029745808711,-25.482665222251832,27.168807787934721,214.8047155036991,-42.900264471430162,96.554631641332321,-42.380905478596418,-309.73835917986338,-84.887545296692124,201.46140901867136,-6.7891513805569836,169.48198163852331,110.2120931523915,-95.161236729775339,165.39072201742238,121.38548121199443,-37.377654197122474,-121.78589981833312,98.89333114104349,30.641936903285064,-92.714628245609816,33.527474655231615,-80.181657881621291,24.76387350956038,-12.782409276434743,72.289784642644662,-109.52420584158673,-60.544338955409543,-26.349007667655918,3.000035032873285,-195.45421753445959,5.1985137743425014,69.649979082389351,99.578342334462249,126.79674157231059,-127.09126034518957,72.016040601057739,-26.557312287267251,138.62744591580866,71.685142665125824,32.506546597605862,-138.19663747592475,-188.7791400706235,259.87010502890109,-146.8479951045685,-137.83462141812277,74.321468109981026,271.0486885101256,41.167215314950305,123.93362412672624,-131.80247425728641,-160.1493633378085,-16.488552570194166,-158.68024727172715,51.045604754483762,-17.058908019089372,-58.763382557886985,21.285851273978672,-17.015370726370001,257.01916669743389,-74.831852995329911,-81.941165043018998,129.25983289245829,-24.585206584377769,6.1027952036023905,-54.78358869604542,-33.192445454375367,-225.5623363272818,-286.9891257466511,-67.86498084234654,-310.94898130033539,-2.7764531825142456,170.58403689907732,-1.6098229676073856,239.22169964639849,267.69964526685635,104.4237384503745,84.401266301544737,-4.8921514146447791,19.238457911292642,-170.29099581155353,30.934745172059323,77.629234395343531,269.70070955484772,272.62197825280828,42.090236235436251,186.68129710253905,180.64772489253073,165.41765055472695,103.47368262784711,-74.508044332431524,-107.54039725225698,48.091943314942,-4.7589310595242438,0.73182089902880421,183.08751772748457,-46.9745307681995,-87.382885816655119,-108.2983723312495,189.4684997214016,-162.92200271210604,-177.41851723444137,-117.94384898372775,7.6984108953054147,-132.99568357418795,-89.675600835375874,-112.5451559541948,-178.0954267153478,-126.27682416485297,-121.07450428318491,-26.66396047210921,-91.877465249512582,-39.501785716214101,-52.773363963833319,-74.430833938663241,-134.11778103468714,-4.7917490413246853,-114.99771553796974,68.693938905233068,207.58835084649425,-95.901679318760728,216.91327593556571,51.609613948132392,11.383209555256201,-24.633023436644848,17.009491690572553,166.88367020035301,3.8621274286228795,7.0372182863551167,76.101676251987286,-128.21122009597343,87.0681797736395,222.75887306404698,207.76642435887754,81.167826270013336,-232.68108554979693,17.878715912238853,-62.006040689287516,-21.848227806382329,48.094663297934538,-220.22553180668262,-85.597581536286015,89.186571595521116,35.312298914904375,89.972322533911097,-63.560070367281938,-100.14907354534274,128.5857204902463,-70.257669833930009,-35.838097415448601,64.975730213542533,229.26129356358837,-7.8420510999636122,-58.285983767956239,13.229567509080645,-68.548148433152789,-39.202546678452634,206.56309206845219,39.479218866434479,191.32755957254466,173.08184539051234,-110.70850780109059,209.2585200510477,-28.498051019058337,118.05665352553123,144.16748493695155,-199.36754082154721,167.56001085486756,-285.44459802583179,-14.593059273002552,158.97326560021591,-15.929642674319592,123.83231255432224,-18.970559564447441,38.335378947771588,-218.04560025278266,-32.456962764830919,-31.875059431018954,109.07346003133145,-118.46398657022041,-37.97195531059743,-71.933107214709864,-37.939692796352666,170.103462542984,-133.46834657484243,297.97669162630876,-63.549726604872973,-150.50854328335021,143.41963279710089,-2.5019524592823927,40.47462187898028,-43.202333600117683,37.485363305332243,126.71713553836624,-20.074695789447475,124.84612333701703,69.871080830097569,-138.18872902670253,4.5971015346527366,-71.187192607902688,-371.46148717715914,58.17257176847356,47.112461441320036,-53.804779201908111,244.29071934667223,-117.14046310902732,249.70164409429236,-306.81332665504067,-165.12054161427091,34.104269942266612,-284.70542873441951,127.20146371841018,140.53634073717859,-152.88516758040561,-68.729715867573987,163.79582088345273,-29.351358040688396,-70.635153143197641,169.40948274861375,54.580044602562651,30.197991729187439,-38.492274108537543,83.753141240054333,-7.3516263309235086,-267.81469842574228,-55.539977927329289,-213.05336448772289,-105.21018200828833,108.52760594212025,-39.475385516086611,60.761618852646137,-242.14946011595416,-257.79766468103793,149.19082219832094,-10.260565948518028,-69.18434382071365,67.967031640876272,-78.150613549534626,-107.32875473825646,103.05497460028926,-22.014574033191366,164.65294405843167,-176.62821441970505,-122.95466214933339,-37.342269584234408,65.569889923947997,-75.162937428156766,10.673415108243324,142.96914650784498,-152.99113682689131,-5.6383879602257139,80.758616533712967,68.347069902285199,43.898559940097797,169.33648028850547,28.49055214894247,-179.09839317065453,71.428138152411151,-89.291732839856039,139.047799865359,-1.2857330942780507,-242.17564580986308,-65.854987882045805,-229.3760751104187,-43.947175553616631,-84.668249467011933,163.91205203794686,86.260253933377442,-91.161552881590993,182.23364977910643,-76.937594672894619,-0.80556965648173673,57.81875961416435,-178.4334457808468,123.29153674775804,8.3823563495014071,50.416440765831659,-60.069578581064931,47.304132414120602,-101.58180823174348,-213.81641577308238,105.52194855175912,-47.338955160230398,-71.133249746687738,-76.180555753136304,85.789787908850826,57.945929022421403,8.822430322319466,0.30521093055671145,53.389645525182452,56.22344407407212,-21.316339454265027,-146.29721400046526,-47.898787146266756,111.92661425628955,96.505453527734801,-23.985321752537438,30.134103021876236,9.233446251798302,0.30269598115051366,101.9106700496352,137.95227718513553,40.760891448977688,-10.985280164334899,-4.6480101792248121,-108.68363295242054,-91.749090927934361,-121.4074710623226,18.873019307241982,-75.009980455272711,-62.729391356209518,-111.87849117320033,-79.625618600136931,-73.854809463007172,94.17977173789518,166.93680974306329,-51.121580020427515,91.657927642096382,-189.59887767194428,50.926221321853276,92.812603664781676,-71.093214893028318,-37.62427887517353,83.58708236049344,-150.19942887751864,-20.911502226224343,-67.179595697958149,-53.166019524424541,82.014249416681935,149.14196319960547,-58.735067050426174,120.4017257081685,62.429356731346616,187.61413403574718,12.340425386663256,-57.995787389838782,-109.678219903447,-53.341709260560592,21.442749652728715,9.0790540761103813,65.180110686346978,148.4544446446661,12.016303433255878,50.23257642855873,-12.246376235071025,-158.58776148544564,-17.362458980795495,41.584135388081101,-85.001883619495004,-48.517800928201964,10.622313980406709,-143.10684923931967,110.55689098553898,-7.0529956322559428,39.908525522934745,84.209394869868845,-54.340696033279315,57.707601017312413,-16.512492862633756,42.035116523956752,66.537732322794142,35.751302268323514,99.098172815146967,105.45853157880212,-2.453670244861847,-213.02517069412323,-123.05975412790536,9.2623665759911251,-130.4225276566041,48.008413498068251,-64.897637299468983,-150.33397677141298,6.7674802511251677,246.15824449565756,224.82495137438846,-68.577185099180809,-81.253759227315712,13.174791981905974,65.971820997132255,-24.595405890891627,159.61910045979727,29.395646526968939,-158.8868829212972,-29.699106174244402,-92.131308904870863,-114.29520182262146,-211.19442056842945,21.28584171706288,65.442065034377336,18.686145677393547,-14.780643111100016,67.432813406375459,37.652597559961094,-3.9367813525493816,130.05593643646139,-173.10575511355259,140.4660747527241,76.175826160959929,-80.656274721738185,-49.437169198994255,66.35798441729861,-82.007791036994178,-25.041058615684499,-150.99944451268689,-17.154524397655763,85.037970638282701,-44.798860175314296,7.2660844724150637,89.162311496439983,-218.24640538116432,-21.086412270635677,4.4442511094135355,-67.327615647642176,15.064592311985876,-37.949082031279531,106.59788598084508,-4.0916603411999333,64.279759558918016,-31.501546627906976,156.56665317570653,49.946710765658075,2.7905546555791467,-6.7579547634969188,54.459034867013123,154.81079412737881,-74.929571884940117,-35.364947952617172,160.8030311446928,-137.7356055658893,-107.76497252273035,196.70951382590863,91.408719223900789,132.46182227501168,-227.53103050562686,-4.2424016946511465,73.127211341308865,38.99858840568556,41.097371212636858,-84.587126889944031,-199.29275943726753,108.61293046506576,21.430360603368285,-109.88887137366737,-104.02897284676395,-178.5808526422652,116.66014904022387,105.10206787677063,62.695228206478298,64.22758919270521,-5.1749574617219594,60.244492709150322,50.753775759375827,74.054038317842142,85.355710136337407,31.791198200262016,3.6345577723266871,92.72913383426436,-232.99722475931836,-102.46366913896156,-140.4126183623857,-169.84260290741014,15.261839604849467,193.61977570542578,121.55801068012076,-34.578196604948296,-40.694835925105757,-10.882456315234151,119.35881310543159,-71.534424646326713,271.53782684675821,-2.8538283248017748,62.45701143723263,108.92930409905722,10.51293890357276,160.67720805270238,-250.1218406503055,47.53514614235624,-85.02943194461092,-14.444158767180667,59.993986979519768,-189.24623821680387,58.67071298071842,-124.6321059181609,43.371353411566005,31.429381741618812,-13.090423046740476,-26.718398926871437,54.490523526851902,-57.899494983495913,-127.38246456026758,116.57976581915797,194.94866684885258,-169.00485174919962,-100.95653351933657,-90.301748890488838,-21.801933776658636,-12.443906355763758,-75.292241092528315,-293.35427443061479,-159.25325171326267,142.89460235090542,-136.6288387795467,-175.80597811421748,47.218412692812983,24.863045778226482,-49.704186417417361,-45.903434172380969,81.924589899084623,-292.36441268957412,-49.361916343846701,-51.960852954060215,-179.62398773854957,-85.674352463507404,58.092036176151836,55.198787062272743,-140.50205890111499,170.64119034875065,37.0272858707079,25.503427247579538,-62.949913574277396,117.16071045804316,-78.667412922309879,58.316254804482469,-83.589646759962704,4.928805517736393,-73.889881029684361,97.876438356934642,-91.861047364807078,1.1166754880299763,68.79210126758079,-2.4026375597092748,-145.53607674627335,-137.92312400304326,54.376208592846837,-20.387367286631161,59.395893947366602,-65.017812311934193,-18.99285128878962,-24.026818121832036,-155.6560781441093,33.476651413293588,-110.86833722473398,-1.0647560710649904,-7.4373277377353588,68.198762065613266,-65.070564612450596,96.869807374381224,-23.804688218206714,69.866885828718296,-22.287525647663536,-279.34395627522986,88.593294387768466,-42.684447364958629,141.68152135136972,84.203804169287324,-19.056668930171902,-116.28875029347557,13.611316058369276,-16.493000045810895,-102.32430954450592,74.743089996958119,-48.49484359946446,-49.229798110944927,-74.391640742938506,56.896051155158816,-31.754079032315353,9.7105919945034529,-65.547401340755499,3.1534270858486124,-85.808283090929407,0.66171208769647905,-89.726446733603382,-1.2718652991837152,22.558171849882683,-107.47446768173378,24.843484410934391,-12.45647833122085,-72.132699524803542,56.958127425569508,4.6791260528946879,168.68052714274864,17.836831257103547,-10.610512593627767,-62.520796785026619,-19.206805635015215,118.38398151523158,-101.48971734395218,150.80206200654675,106.36283838883722,36.188657058441066,175.77384761837789,-86.884630958896523,-24.228392719031003,53.218821456576784,-3.9726568165826563,-122.776823874877,-175.39239791509013,-16.808229012374071,-49.101281357959039,-145.93117111251718,-81.59751929343895,-158.38477499103769,12.769433695095472,18.22547314201309,124.01472283545627,-211.41555131855679,96.753084651414184,72.130010743258438,29.684357449226098,72.577176603843469,-41.27300362554368,-125.17786646672819,-175.60144600700593,8.8407303145431086,30.798575566279339,-19.082510660149147,-57.963104936726168,37.441335003657116,-129.87594182546241,-25.935150689839162,-104.32682463522779,-18.476261483506647,0.76819996880135477,-4.2928406805506896,-1.3204447186912915,86.157542424305646,78.613238218634706,63.448430057829647,-97.662257618846525,-4.3006126722758644,122.35590948651972,16.848597792633353,170.47564340504249,69.957314880049495,-76.08759891039324,97.521480112030574,-139.68646176533269,-122.99307483494947,192.97874417525315,121.9625327791011,-20.875921226023991,-29.737023613645825,84.450737610321085,-83.404649942566408,-6.4299151547947773,-33.503882451784719,68.43066566035229,-120.36536237300501,162.69536727173335,17.530960611775953,-4.7993086394770543,-9.8409231842802107,-71.38973116268258,-51.458751490476089,31.789485916834238,276.46649956154482,218.61992083682856,69.019727757454106,-99.635261844084027,24.994315506966089,-41.53521241260529,162.86818797239107,50.198431305705938,39.000346491060725,-27.761332089894623,97.790528713387403,-8.1014322849164984,12.516118680864359,38.512061756745254,-161.50591284035994,-139.3337009053422,58.680318638088892,20.575873315020594,89.514798864786499,29.512033484528402,173.25358403862208,48.830527138167824,92.215340825466811,-51.755024755032359,-77.295905338826628,-27.61354087441212,14.668019086740287,96.732245675560364,13.861800735495265,184.89904040686372,12.866579572370597,0.50960464207020095,-6.4532076601683599,-162.20242589619463,12.331398680052224,7.3818517279784857,10.140025749662126,47.91635287581682,51.483928291239458,48.545862915230366,-61.715793006804383,-159.89342256947191,-142.33418035602818,-30.879823957978665,-62.645145713933147,-221.03311161871068,-71.729714080905779,42.560725154776982,-44.264917481181726,17.293743984335492,0.11043960344935311,-118.21376294523562,-125.9633083780175,120.644544132655,-95.328499279465575,-1.2984977830387567,-46.430971313638715,92.552070752988669,56.760231248433627,-39.325154941571071,-28.415236691219039,-131.1488635653167,-6.0592713050122882,56.868510895577657,57.626720607701493,-105.52932890302165,40.91080286740543,-61.021515410947259,-105.69558014673774,44.692955203123006,-177.42147650977327,-57.627236179891881,-10.276008795385508,-253.20259414681607,-12.357632526224013,146.0903980182764,124.64309004045211,61.493422271532886,78.290068916238411,0.020646218921683612,4.6563259871760803,-94.223188032327243,24.537637012725739,-128.12305099542448,52.774909743520794,75.309426984691839,13.814553022536103,1.0930038847946939,155.06636968625742,73.272516417599263,28.240279135321877,76.800953289186481,141.93156231684668,71.140767041149331,-258.9424872476273,-48.279983383993503,277.27364477077759,107.70365185714402,-26.227275969894571,48.15889344660301,76.738383283348639,-6.2346047838914789,-46.851490435570859,-3.9722497738186355,70.28705107462342,38.836671436125847,53.983782075862138,-51.011842952772042,101.02309796010478,9.5751552202592265,150.59290242598482,-83.946247501771069,47.154780710587659,-18.414313065305194,56.642934683568598,-137.1702474998134,-98.025400645514978,-25.906164367966774,172.19361729283071,30.889201510646757,-95.134907089811733,-46.016796362526371,27.235723152483093,-97.087767682274176,-37.524247179123478,138.56772024342621,-127.39910480833612,76.360325450724048,-35.768665103492872,-35.10505469810041,-18.036448165523613,-59.772900232248567,-130.44097403357989,7.0767741868347329,103.10065833378391,-101.07654060834346,-84.350786869245212,90.122731345917899,-141.53431155376484,-95.210357410640341,-67.588218806561144,281.22399619641112,-78.943033004630919,-96.160780642757473,-69.378562936354541,170.26169910634997,-45.12607747845999,23.391189567683238,-16.877254716470109,94.425742015892965,-156.62550607016266,-98.224103690489841,-26.949057989829988,36.048167438077478,-18.547129058772807,-138.04189264166104,-45.707147872572271,-8.693504959213687,94.097239196543256,-45.022164251073207,-46.046749679184551,-72.461298439653788,-50.105096655783683,113.09755709974277,65.394535790777951,-89.44288132032159,-143.32208247811892,-81.418246597191796,18.157029471550253,3.3386940449598832,-57.509784366856096,106.18034240421335,-63.322872083564562,91.181182679191039,57.242902995183861,189.11038970578105,96.074395347386599,-284.15654418990016,-57.783687265928776,38.752385155661869,38.226617665774015,17.478955478396067,-74.52180560872975,-3.6870722882012927,34.017683213238662,-247.37959688686539,-233.73889928525881,184.15261382157601,-44.185881845032696,274.18924341506693,-159.22408397778182,-164.21752947614817,24.73372699518697,-115.33910005884287,83.670120291799194,0.27578833708511041,170.15285627625039,60.014683359573596,-129.64594056860781,-92.640072481419153,295.83255741450375,88.130972439973561,-221.46620274085498,236.40289062895229,69.119956537050342,-73.328797261967495,-41.298578942103262,-40.499473305766969,118.68925310666719,-20.553586391127638,199.19580902924855,57.889186396812505,44.357230216864266,-94.96189027211112,-119.77819878658251,55.961879007340649,108.56485103372026,87.123051103179023,-82.379782948018047,24.563268867325739,-14.928158864801979,7.6108499471685285,-2.0105492428872083,-247.34014326174423,50.119806486581496,52.187806847439454,138.56259623785826,118.9209744823992,-63.125584527370776,-115.49549468960163,103.58865022765933,-39.925968179998307,18.608022277328686,255.18368984902767,-120.17777679197386,-70.294320870019476,-168.99189599459572,348.37279974385552,-19.474551025899601,38.452723270775373,-181.22147779678954,-40.40796148268214,40.229652678686328,59.028735482875021,9.2288945878729507,39.681841285399841,94.85636614306965,-239.50480005965423,-164.16008013405744,119.04434369204371,-29.826078039790609,-143.63517774844573,141.689210097645,-113.11291232302167,249.02033388472159,35.639902173222282,-48.669753031395146,40.918071589982439,164.19300497801331,174.80243452602426,-126.33135024480384,-37.740216916894781,42.832937495955967,-137.08203277239801,131.25676408933512,-82.648530565623133,-107.5646155955007,70.149103097672381,23.730733871624693,44.317555867250789,-68.096610878763755,-18.609207400595871,-58.722978743497599,183.4674247665809,59.27771728362044,-118.20220759200583,24.995886059477883,-39.080747155904568,-88.719706935585123,104.54682559381615,273.62840339620124,-58.544096250858175,108.81302530867166,-82.577532992264139,-5.7891474280365856,27.951859409634139,-12.718788114490781,130.9709631077406,-164.13155663657665,-63.761170935867597,-43.058008754669622,-13.127147626240095,-14.9380111981352,-11.056535923364052,93.837922896223546,84.282147148829381,120.1609028670222,96.825439170545934,-5.7502718681107652,-14.222042434285711,-30.569774642874492,-188.19025435521775,37.128409062845186,-46.29664571779098,52.559274844651739,94.39185959057626,51.68482168676401,45.059772990997914,9.2359296830616344,-238.17662767749337,-97.098889731961592,210.08542087306409,-106.65456529517739,-140.3611656046368,57.673872091804327,-123.95347966574579,11.977354402989535,-41.172561774903144,28.907085413331064,24.273009593132159,-154.49871556624072,97.302213949138235,122.85940005253428,-68.060689111064647,-299.31446769349066,319.9503333217769,40.567081588446115,218.24410701025857,92.980187700082439,-127.31618281260248,-118.46742567504148,-73.849418063090042,-142.82155938002722,-199.96639185193439,22.156354043926115,-126.28226227719176,-27.787182021714635,-133.26077154556191,-177.37426935716945,32.68726146831348,-93.56313585491182,-105.1487253128537,177.23172745528544,-47.743364425729993,-72.920429021728069,133.49175459279533,16.506936253409211,-188.40185635552635,70.462224676794193,144.66585484835608,-121.76474912373672,-73.00955874961322,-2.6023020802807508,128.63020664809869,-28.08378912043419,-91.598287571876824,-177.70896314483701,-131.51767039810505,-72.684593827410339,-51.589793418413691,-206.53349968552126,125.54001551452274,-184.08633703397408,76.457743089485959,-62.844891512943548,103.38672503823696,241.7820817355769,-228.43120907639224,104.18924819552018,-96.454642735206932,82.722767655182608,-96.135474379203828,-46.477836499722947,17.094236017563588,60.806731067712604,-96.351370632204237,-94.814918986315575,191.02705595690514,-192.45472281595005,-75.951214912623186,19.50212671464589,210.0209738569888,-66.916365452030391,-139.76109514419869,284.26137325207117,5.7981986489860553,95.016840148059487,41.744455136916059,86.560112390681709,33.571822948733306,9.9765360064456843,25.267196466108842,-14.702515276785121,14.849551985120517,158.12268335886495,45.642111827107414,-1.735760074700238,-141.13688113644838,231.45937585282778,-115.51234950109371,-26.759373359401607,-211.42825656340048,-34.230445724197395,188.71276639473942,52.043138206923729,-81.423807464023724,-202.94188797490386,-80.976881756567181,-89.164644573903956,43.685319499329985,36.422395321774154,-41.119512498684067,46.640105092464815,-78.187937752356248,-143.63524708193404,-26.951735869695092,155.1030429115435,126.42508718232146,-33.460532626217265,-13.590595226438893,15.629196903875467,193.21310130172344,-20.024941489239467,18.481512380419247,173.0486238686284,9.0939237698996607,-309.60203266114434,1.1064976071180581,-82.171453410828633,131.79579083715967,-221.20000444800291,-5.9832170677974901,160.69881322947981,-94.852599679896286,0.49075895115595358,18.299546784675414,-128.02098888145321,100.33204737075067,229.65347796197116,24.852920239601055,76.714281141828479,-5.2683942338324243,111.79241421089461,-107.13775625294687,-331.02568334602961,25.038260566696025,109.89664320834112,7.0387618803303553,-37.50313061717236,14.802356734126221,-15.126501384535196,99.199777145650799,-14.121256826572974,175.75676039781385,-241.62638154110749,-10.306966085798678,-60.971539638591352,11.67184106912314,44.619676028229037,-70.735937406784501,-26.322344158924508,81.948215239444522,479.35111622382334,156.29999297662494,41.174536957770151,96.07418060011041,202.1347716044946,-182.87166390791947,114.15848326687791,-27.784109212628191,-221.92900671939901,-222.66139903627061,59.610773550566165,-71.131063743330373,56.932273996502673,-21.953680560400855,119.586573721778,-70.154778889115846,53.315812933797737,132.4583659055138,21.613059868107563,-34.76044462467754,-137.03393298234988,-168.4182902620847,17.998441636480592,-19.862958369429506,207.14247815178337,-21.376151490681195,34.82648367786615,110.61555796718903,35.02053772912501,-62.113277475151577,-54.4372176730418,-68.591104434801778,207.06771312270828,-129.1431317743149,-44.024606669232895,-70.961569300107428,-26.477371885847305,93.124601276206818,-27.913258255225699,-85.172957037953523,162.65774333264048,253.11020560072666,-137.94117111168282,-277.43128512206368,189.4859805631072,195.69779167626848,147.49634919459854,300.31166138745652,-244.55489890630997,-20.264909020874079,-277.29366775025085,100.85080748502511,-76.292418121694837,-3.1912225959913272,113.78593413705153,90.360987191573741,-69.144474957791303,36.557630695319084,5.5104708620135341,113.80114762981296,-138.21661380829892,129.48177963720534,158.20358650163794,-40.694486582389871,92.153380314238291,-117.81384196853492,55.039010839257884,-139.78138078150337,-57.878371461112749,-112.4519166708306,216.86037526520295,-283.66292742343217,134.74062369900972,-106.59479073969896,-82.613157710417994,94.782191745699464,5.586825357672204,-165.47588436255899,200.56381908691554,-156.89223240243541,-360.50434867850265,38.787608862692885,-104.93973507119503,201.65571906074311,86.835211180543979,-193.53941681591007,-48.230698126047457,-11.633299483574049,69.963641806436144,268.77855673536158,58.738881008542762,30.018121795341649,-109.93320737853438,93.133548329650253,-76.484541149598869,-85.941524133277511,-77.230695556545413,-31.248497189926365,-57.968981009928854,-107.71913236424709,161.3074359698752,0.38508864498534479,-156.0050168692818,-223.24846169254997,-88.193740404393026,12.386921193965236,105.36397646124523,-172.11706208792276,-138.6506496402512,227.47671391309137,-56.576267866292994,135.76056038383209,-151.42015787003973,-98.806077756966857,33.473955429161236,51.589943231588833,-133.53023611103697,-24.652173370857611,-179.06783566916036,264.48716278864214,153.2074806701811,5.30447954906262,210.93164564934341,-75.958139738788503,32.112217389193432,-15.191593471502344,-5.1995931865422449,128.71772963585462,-47.297624206281078,84.327819394921164,78.128178211401419,-40.348712683994158,-90.037800131616748,143.7179765051898,71.364767959155785,-3.5113898796412926,-177.58249045904805,-55.08378595177124,107.47678895600492,23.127239776114507,166.98151904855609,-217.99301138890596,-144.92529897579419,-94.804536343809573,77.324971020503199,-102.29495000561035,17.67658492487103,116.84074846456507,243.24514945860278,-286.82125992599947,-27.177916923317053,-29.542238917631444,154.48477094269825,111.58500054537438,-26.621870630178506,-1.0296611800529973,-85.088987360292293,-51.801814740644133,35.625626696067002,-313.81521095962506,-87.337800353078507,-90.964541372370093,-26.09646072813732,179.87277256636781,-170.85416661707575,232.76328923508277,-98.476014877705694,-191.72037592895396,6.317854927464527,-34.950517983851277,-141.93164684272745,146.64232747314227,-4.2770539365423517,123.50728029052836,142.82538938037453,22.756519201622396,103.62296167969185,165.8632786294877,40.594122915737998,-5.2118039977828232,129.19842786684669,-56.939603556043707,22.465235124632756,-156.09655629066944,6.8064084514065826,108.36591640152503,-9.7146166873551323,211.05367907994011,-68.540225612212751,-10.981560399198123,-11.944123837233413,-204.5249182132701,-169.08719065204619,-47.151831915974668,-21.136731963364774,262.29760653947716,-162.83241926528666,-156.60891281211755,-134.24790524869076,-191.59609757844751,45.159676167780901,-193.08045073792826,11.237908920660701,-115.02307742635944,184.16979361369553,-62.167817062402676,-88.437775886888488,-26.309765211635757,-105.93394394671799,36.979081090543104,-57.162661888553053,-76.866433517742166,46.045194586450251,-238.04324990611866,-25.289820150187488,-132.67675852649916,105.78324645754547,-22.984935264729216,38.468569221064712,142.24622940921995,-189.59712306320702,-192.7141650084009,-12.472297519210798,6.4089245809322115,-52.372884136408864,124.84231249847053,-105.13238540778406,65.61257110786805,105.10380621629713,76.279766442098207,-87.934255842050405,-145.7459386220049,-8.2975245876112389,-66.008546245071315,27.165130231921413,-25.753457133327146,-102.20057617816897,216.20258144113589,183.58657949658178,27.897625090533516,-80.845142875845184,-169.30608551553269,-102.41482043344487,-65.751511754132039,-122.28947212198455,-81.672651364696748,60.193476550710194,28.118889759028718,-44.208996952505331,-113.31590444854479,177.59020655964724,-95.152405330428053,188.54686634120992,-89.628863906074088,45.458823654897714,18.849156538697798,76.918282758005887,42.329712529374817,52.742129696449346,-70.715587214751949,196.64103279897162,84.249793810607656,207.37965756750117,-75.639770706149619,-172.9884062994019,64.413358104271083,119.62498564137415,32.631896164104425,125.52158740664694,42.297428080669732,3.2693077830026311,8.934178822541293,23.156504110282192,-42.409216794815165,-62.318639627540918,-120.48263700026313,-183.11962435315627,253.16150588462182,197.31380728391005,-182.46755712275944,-182.17327820298874,239.42599054365368,144.93498277464886,113.17408441957386,-11.785805213359648,7.8688348678981157,-160.99993468331431,125.14493395698786,67.400912094029636,300.10442095449582,18.097690827104842,19.050314479112107,44.487538073701856,-31.742515490282294,-54.091882803637446,-133.81696141719866,-135.19379961611315,69.86038433157826,-54.230371658952649,176.19004548428998,-44.494105801929585,-3.4497525722038986,26.522611947063631,41.291125861031681,-196.84364474188584,115.05136497437729,-179.63056914020194,175.23254754115072,-150.43178245799726,108.14768825738187,-1.2519411450295621,-213.75051642210394,-146.60806500526024,-32.391585625687085,-73.654796051811246,-73.331082170987088,30.121740507915995,262.56260891911762,-18.628926818217622,-22.86380650706316,-128.30689841050986,-58.974273932532235,-27.413750836973051,-19.455381938638006,-132.06168805360824,82.624467472081164,-71.509125912978405,-141.29049514887285,3.2686254396499104,318.12095353782274,-60.384521574929828,99.674226634034184,-37.125248083023308,56.982425669052404,34.37289618771652,167.46118558632566,-143.86315366317135,-28.82291528292005,-6.5127869924391391,-77.496032647134257,-75.447541908412433,334.88244516524878,102.37116720429023,119.79284400722511,-73.141857246770712,-39.201766238980213,-82.094118682535182,81.708867725330322,-1.2448208216343488,132.00294241002598,-109.83712748049875,27.880183570688821,83.431693978294931,35.415560550232264,90.877059372693225,100.41480897304189,111.79958908807463,77.344344899533851,-27.937307158152962,-237.93216800587709,-248.15495619905391,8.9986460678028806,30.723048753452666,-120.44118198416916,-47.341263683854351,144.02890013352894,144.18666045188809,68.38730184228092,-138.59369235706097,-79.801223413087513,116.79668650528046,-80.32342103787343,-74.841082070295585,-33.269669000633279,104.24472144573878,52.665481656095309,-175.33651887113899,-4.4189274596058965,-191.87092840387231,-137.93702755817506,56.415636889001391,-137.07249999836634,-228.21602533235622,258.71802661480979,324.20787375075747,92.958595292422785,-73.14082573755951,4.0439973018215802,65.735328559125279,35.08708417554206,-111.083549761325,205.34819893246862,117.36223522254464,-127.49293356474345,-34.939034659797336,-1.4066855872126958,-38.720693417494203,11.678543662220751,7.8854022306657185,10.050197450704289,57.532183623097218,-82.51238767157929,238.79066866024016,-129.35083229872296,93.332179361165743,-91.25824121128106,-198.6071503110978,30.245363502370488,52.730331342407929,72.738118853661987,170.59397607914781,182.61866241626686,5.4369260538208337,39.883201833185893,132.55712659869769,-100.5146146143946,-87.166272564437747,28.529509948656852,304.57656414328557,24.76771561552631,16.780453717618883,-13.488667053193637,-10.96388428963612,102.78762959913057,49.902786912598643,54.852261668651444,-87.907541553102092,195.72049059745763,-167.8922910693816,-163.04668153258746,48.117383191435316,-166.33976735619967,-123.03648754847001,216.25188977962884,-72.359495985132511,-48.165234529946332,-24.421897068413013,-79.414440973997472,-307.74735537084587,44.541379607721524,-54.743283921739042,-4.3044134825067459,65.253180244389057,151.9693290830956,19.17500887170776,108.46247551853253,274.49233312725914,-127.02515636781339,-24.44825007858509,107.98085492331651,20.439710270805733,-140.48839357023834,-99.922992950178298,35.970670148135433,-98.629576320419062,45.89063617343254,-122.03113658209398,210.061875279047,-115.68667662053764,153.31532504333248,-55.187580062427578,193.67017515924184,-60.5453311644536,232.62854863261896,-37.536813090103635,-172.65181966872535,-106.88724091962803,-5.195475735281633,-70.122777090456438,-78.649362977605932,45.452572937929361,38.98549886536442,57.683221620666139,-21.424324139728043,77.900703945655906,301.69271510615738,-21.258548864223027,-218.45407120456758,-90.746733152884218,157.37434404336966,-72.607302212865747,32.266308599012149,-40.249980874776348,85.044273791097211,31.657497471268726,19.330382745497559,42.984372265353592,17.797432505649795,40.605133321560714,50.296959771362211,129.35272031885827,128.78145141654298,3.501462553931006,-251.80501604317277,38.668312920231926,-2.2541927902999817,58.521182431725265,107.36837335510602,234.34587840491562,-73.17878602570218,-79.543605818866581,-4.0094241514917748,77.912403811363106,-68.950973286371948,138.50022287095533,-124.86691619492126,-77.620752314370577,38.47880188662878,-133.6539332642692,48.358113541439025,-160.25721969888031,105.67861613933158,-105.67943078601945,184.52147493475627,-123.4059782117244,-51.892200398801592,28.959912302606512,-22.219353238687809,92.782846565565421,-68.744780843572258,-90.214681528840686,-10.685930926011789,-106.18561215899851,-57.674767705432963,-12.587592782909059,15.52957611693261,110.87077018157608,-265.64005363625847,-23.64869080747259,69.069076624205223,86.519518593729828,123.07144714586943,-146.9869929009071,-147.91895367268586,133.56087370801561,-72.675134692892385,105.65061020541648,19.617286790124695,-27.76427062905271,-144.52436492726065,18.44633412322635,-161.67888264836941,165.79797833266713,-59.01212955118293,-60.423146816749586,53.702881289793368,-22.321384000141762,-12.836036576751852,125.57251148367489,-117.18311520201783,21.207714250615041,-108.79851835387757,-104.25789864353025,-203.17495706505287,-4.5732180640704314,65.517698782363823,93.393586858217731,-41.626900821758476,180.44529662608718,-187.52067480147531,-49.782528938322805,39.537698930233461,163.28909366746973,67.817273347092453,93.940936851039652,48.833724431233598,98.969209644315228,137.00081852738654,-116.77843538601097,-53.821922763275509,30.189506464652425,-25.955305050568555,-230.53511268670587,159.23089655225152,11.765272032822029,-13.573933989399066,6.1114253909088596,-0.12960442885575674,-25.058327750987672,-176.1562195984047,-6.8785217760592161,-75.935240323871909,-43.074631034816065,-43.095189147937546,193.48733667858144,-2.6601097866936527,52.377813626824562,-36.552275642219506,-308.23584734905899,95.6627708904591,-154.07390131362652,175.28324611889133,136.85423894925802,72.825939972336727,53.363204308776687,-50.826293241115394,-84.423071526532937,1.94689067479176,250.14019136671843,-9.4341425010265851,-71.657189302199328,-89.502671528878182,-30.56607489350742,-110.88043921902113,-69.320870134979486,-275.01606680452824,143.77341044438401,-170.2569578390808,52.279219414464073,203.23463564759589,-11.972320042203442,134.69597211952876,153.15744969099185,118.48845197238003,29.993793979916674,45.773382013083385,29.468734313847747,80.051768791352032,-167.27164994301407,187.00045834650834,51.886594972719145,116.29853327227615,-128.6485469760525,10.156589593465668,-123.25813507759494,316.44306813115554,118.59188607688868,-88.484494736441491,-92.96591108154999,111.53540921048214,-27.38252521522103,-3.7721828286495835,-281.45538582402361,-95.169350639787467,55.180520759021562,83.425475420184398,-101.2956634552841,280.00432030085796,-129.22406032210239,-179.95360121089593,56.208548858679421,-17.908169199308357,182.1855165238461,-23.753307097192547,24.697198661399554,172.25132512794559,-106.54587926554478,-84.633209648109201,126.98372044068276,58.486553132616692,180.58934510757325,39.590525435606381,278.71913904569476,51.708671124107923,-82.367060011351498,-170.67240599343501,-151.01041247480646,228.4242779555274,39.313158508742973,-126.23588545964472,-119.52885305730737,46.121958015122388,-39.700852582955598,-36.766439345281654,16.870683995129532,-234.11092792744799,-87.072476308897137,-266.92423435237947,-5.9628012620857511,179.1344199999163,48.993326079929993,15.182223966796634,193.60342278256513,73.998869259649908,-136.87673870200618,-176.48805601690935,-81.079165125719783,90.006142910650539,18.667275914828707,97.106017003492113,-11.00003971166398,8.19096266348852,139.0639268634103,-32.99337234120911,65.601466187080945,79.43674959599106,33.262075955824585,82.981845371142953,248.85624722461245,110.53384735511399,151.76739279919735,141.99632743320601,66.902673639235474,189.18916299702533,157.27390141620964,-64.219197821082673,150.08999955257161,-4.5047179420809016,-175.81287821502235,18.724381667231,-43.534813987211614,70.830103570966116,-77.852211220113205,118.32113349769863,102.05421009485676,-145.68508117742959,85.340892555684292,12.258730042437811,23.994932163173928,-50.802457668212753,-121.06915379993359,240.65136200079712,77.179164765183302,29.566261195528796,-121.72703766287222,-144.41551794428921,285.41812447627387,23.003586836753684,22.019548290188791,-310.90065376654979,-134.22906922181218,195.04812961419918,16.424931333037989,185.90362108980383,70.006634956481804,82.568947309860789,85.23097738215688,-111.7297672259195,210.61420908420331,-17.54319607640576,36.548585630556161,-134.43898253530412,57.468582139072865,-220.16376324709265,-178.91739944857173,-43.673685638116773,-36.247288419979959,55.939526423812119,-156.27781847470601,-7.4368263781878738,-137.47839431842129,41.991593937203568,72.726371171514899,19.988095522203238,42.896671759501665,-69.557512920897139,105.38442307624311,138.55633147024781,-116.35547388516304,-157.76700382574589,119.72340605905367,187.47299461960205,-130.39348818467698,-60.993969519461459,173.87010994005277,-100.09766824135664,127.75805953700061,170.27931339096614,224.13311055950351,-19.495523517784918,54.253964981053187,29.259675389135907,278.91284196614879,-87.240513855651869,-211.81588212387601,-47.126908077033931,-232.88361314352085,30.745113389892566,116.10087126527807,54.100154004042423,-228.22296733869464,-44.782624968415412,-181.49408822741759,-163.50569329479359,-21.640016165401288,112.47594148791218,119.52102798559723,-97.674033948876129,-70.740440941064719,-141.91166105087342,133.94617486141669,-64.792471414044314,-254.9630793023359,-55.251780954293991,-148.02289744579298,-89.961526452109268,7.9994930073500541,159.17129938708086,45.322074857409831,-202.78530110867806,71.428695486105738,49.638293299207334,144.82666475911606,164.02478105455805,-49.088107638019792,112.89564849308272,318.12382820478263,32.132051595810267,135.96451765088705,-130.73012611543527,-6.5840573243564364,135.72938427833148,-98.774995104165043,7.017007330174124,115.79163812813931,70.823237787679133,-133.18462060100549,-22.418504480314738,418.14319349140254,231.76379191196196,140.34231562952937,-99.556427584932464,-5.2474704446535725,-186.76647774329945,-201.8204999360571,-80.901678241815645,-30.712996531029788,-100.80049349372763,209.5588695809877,89.343296508215332,118.38058928142453,55.199996221234954,-204.24931878523216,116.41170815192888,-108.32812412106824,-20.37475595032242,-32.127209480856074,16.359968712759958,-30.794300365319828,40.26645176079203,-107.60956200099525,206.99629104515617,73.645951289509554,85.220009459552386,254.08528484871712,-88.456347098136149,30.762912213456531,-140.09088409731066,-137.21978779194521,-108.47247889975334,-55.162910725890242,53.807377440594557,-47.017002038453576,26.390058449361021,-153.20895839027594,79.101227305828786,239.59921337999333,-57.501782350912343,6.1065520363018848,46.511454120881609,81.584147886446516,174.98303540917627,131.01603124957057,-10.486454007793785,18.691657951285904,-18.801624598714341,13.78195883378261,81.52895535937796,-79.403533772557694,-147.44788317581126,-78.949463081179971,43.734745893055447,-187.71099485374936,-106.84804826552229,-72.376987547762823,31.397593399894703,-118.12898632639944,147.27368118061207,-116.77649512535987,105.16782781659377,-87.032609895203322,-162.51738788536181,155.44387876332888,-250.82736143119502,143.1631338950906,13.405888511888577,-23.860651205073168,57.598170090761087,142.274470957413,-96.486296823589413,113.26363137194753,-111.69696918027856,-134.79341543798526,-36.134582271709604,141.31587918883486,-7.7056404898686068,-62.672282527334097,-54.336160407090304,-97.14720990739103,217.36274099273265,42.394527695770122,37.481783911436168,38.791786756181189,109.16998561823503,-272.8763511101821,40.217185650270771,-31.594961765802637,121.42462676076482,57.233667137064742,169.44286674903742,-156.89683645937549,8.3789109092254677,-157.31016057923392,168.89064225097425,-137.32384548331322,65.297904363767628,54.823720094667621,182.51486029280525,134.41086279008596,20.512925156150956,-82.05222744121545,-205.23393651448646,-22.473170069380117,-54.184698380928069,-218.98641834772985,78.429174594595452,109.19131950580132,-181.89238370659891,41.401737107956691,107.56674093196899,-55.34743915163304,225.53777697383171,-73.236736473359656,28.986863872657722,-154.61473059864619,162.25658614796345,325.8271757386089,-42.368089324532349,-78.160705232958904,-160.66414530189897,-83.636564412521039,-27.214956533110652,310.51733863943804,128.18464656952904,152.63295717544227,-115.2948631407957,-71.057865814507323,-93.69888086681965,-213.71962937921626,-229.97204548885978,-43.617041575030903,0.14267821132679614,-69.842425064367518,-8.5897027428662867,121.35091706600403,115.0173075694466,222.62590380385677,-184.42144992509762,-195.33362981404915,-3.6312742891265177,-168.45386400841437,97.382631300611507,-133.56585712541437,42.077487108589921,-208.86826329611699,-41.044935255839221,12.427271771519834,-66.373825952118153,-208.38199261589222,-121.54686901065446,-340.19882003351415,36.452672713446077,12.347924777106329,86.357477151872885,7.1199948975249896,-173.78097097050761,-94.54004965164755,-137.76959023597141,160.69544993509956,204.8777695271026,-211.01964888456854,-466.84985435610002,100.10563438462223,-106.8972284763783,207.73957632839148,144.54303696964791,-278.14388620668763,126.24938245704547,-242.4482065572829,-48.622047098746307,-214.76497639103718,327.94591206201881,143.30611198329481,99.132717522087788,158.25160817368302,-215.29881808272086,-28.582833449044571,-320.02415152014009,-32.381229628299941,154.13240993582903,-53.00898064793131,-79.729171259177619,-106.72965744715468,-56.552986003303545,75.492942875320409,-122.66559913815431,268.12792281151241,-205.83171945343486,-112.72826928402259,-19.286359350955692,-53.124604792564298,-163.76692938087115,80.010647183828553,68.7754784611258,-39.807537109600219,-130.7921284779882,-85.633057426979178,280.71755691988278,-58.890767295941501,-102.20431830430343,-11.490062140080965,140.77902530068002,45.250493325192309,-76.628806429167412,23.638830563682667,-56.122672549246779,-66.907619335068404,-79.280622237934978,-110.50378571422219,-60.629233856386577,167.5845299233207,13.930830680001907,162.36133762270978,144.24765018339195,235.25646969059011,76.967183989847996,-205.55396913692135,-67.48714888026602,-107.23000669414982,-77.165113676618375,-291.60793311713888,268.22551093642642,-101.29836753834991,43.138334834553042,116.21548792097011,1.6337471056170081,-74.865191982970401,-35.868437772051784,-131.12932476497403,-51.846125677115992,-120.21453314250223,121.0134397706023,68.521566649995208,176.86842197163543,46.593401861882569,262.06942800843689,-125.18197164972887,-108.50075309342327,-168.17192657217402,22.859771651641331,-29.455414283519502,175.24670771048955,-0.85768953806486437,-20.127608642320752,-181.9656470715436,148.1489606897193,-54.131984241539527,-57.147800404657588,175.5698863068788,3.4905018470435323,105.93416421160865,-30.154237015863181,50.380976151963516,85.039906559865273,-16.205059723698014,-29.525758155792282,148.28039106809206,97.243726097134683,90.579310179760512,102.03293277116926,14.320142539567701,52.086130269658618,-248.17337472422471,195.29335916206128,-172.12862174910697,79.426462550349299,-179.51436639097579,-151.07654350584767,-91.640596078265958,-135.9879628571548,95.665938500919367,86.898638570385089,-60.26547224846523,-87.612088998737974,165.93800606224036,41.654857626317401,-172.67446574553901,-12.875547545558895,-169.02845640666337,65.46779559670432,37.030006128164302,-52.376118927463928,-20.900142291568457,126.4311244269032,7.705424114198081,17.67734198866339,132.07579451315658,16.248029649406931,-274.61380324355929,-199.56986916286624,-72.196835335344076,-547.7879535779357,70.840212074631765,-39.957824158911791,-12.057235132341908,-286.90566716974962,-34.864797429060232,-45.864009123445655,148.05752534513243,80.029342127783693,64.787552937064589,58.221594730832116,52.312054868350486,-78.030844008262648,-42.132674625892307,-74.074209622855051,-68.931849899004959,-77.18645895954316,-8.2103258803117249,275.92577680902781,49.280695808389908,-49.778759780575946,-30.576968766383779,69.132948682977343,-224.69994955180084,-30.362192379933809,78.28964595077305,-28.515340703698577,-13.314184114247126,-40.809660100554922,17.768782781567477,-50.238703038259182,-190.43695474346202,155.20320234678422,0.93539168556711161,21.178776153769661,-96.810133728347395,-61.010957434352086,136.05241168817395,-10.506691713479945,-170.57267154423212,-62.243472041352327,-80.228289848436972,-7.5406717969980974,-42.333430988834181,-119.85903133095697,117.11690312364519,7.7617351317046825,21.698727156093174,244.9050734658606,-353.90412430278923,142.8676216270498,31.806101659485364,-3.7963071600692544,109.14662174719217,117.60249235629246,-16.656257436499288,-111.72954287897063,-44.313806502107894,-19.221717731195028,-22.127484995326654,-6.4024988277425265,-66.928466766044693,170.70738319342064,244.47703784039564,-50.570859238902038,-75.585207820979804,39.737859753051893,-32.772350455329807,-110.97358626194435,73.695364819308466,-38.182638537106641,94.45675916951113,-28.75022937760793,26.942764727701515,69.786346627802473,129.7070316979553,-42.120323526665359,134.77776663299531,101.30629720583546,-8.0548267616205038,-18.584682480220035,176.72465609780403,22.968986252682299,-113.92488587020063,-79.056047648767304,48.220920003614999,-62.236645591279604,-117.16033636546996,-367.10828912140892,-171.07188809758134,-120.68068565024282,83.267071854728002,85.537254722587903,256.60064030368352,29.060115125343515,-69.816248907680617,45.736885518512544,-127.72502496069995,-0.9710145633530658,-39.157255946078024,-179.08583166331823,103.64623235521697,26.30488436567893,-166.63157020676533,21.267693760429239,-83.397236641306222,59.781325967670078,256.59638244452321,-82.669675474226636,-279.90862763368693,50.674968325445391,-49.367045387191773,-180.50302044682499,-35.949916832365517,110.64917858469525,83.123715356353244,-4.5921864227263569,-258.45700308432419,93.8860439994247,-153.15364990486188,-125.73866024419551,-113.34269969178058,-52.247218707135985,256.92737566864935,-59.978007759165791,157.64084901528548,-149.86097942137337,-118.75246314509111,-117.46708895430601,51.42589169920285,-49.897567580131806,255.62209089901407,-17.226591237948767,-263.53634805606964,-179.09340852696255,262.39455719797854,34.68227373083019,-237.41523759363756,287.70388980236669,-23.043103444815216,-16.166903043606258,13.840009325391648,193.44360114868459,37.569804047880261,94.542494177735733,162.26831141087587,135.58489477098172,89.094582756593908,224.08475379187962,147.58201842580667,35.760043371844894,126.76526799927703,25.067777728350784,-99.713399140030575,123.48776174725228,49.981732421358835,-236.66025599765783,-2.1265080576351707,-14.337642540602538,72.436856874239595,-241.04443231333786,176.85732064343318,62.338027946062397,27.258782128246093,-30.099721173168426,227.06787003576753,15.928592255982565,-110.16273545159146,-17.651296834714287,70.639848102653616,230.70294377008281,12.508801772640012,-232.7731704651051,-87.392983024225103,5.8530837653198908,72.501369202744868,-80.928405452568157,244.17199232047165,-79.760224918210554,207.9031404844948,-115.79580409545073,-2.6819939029479514,275.8822400824593,-99.24497362736966,-27.244308845478741,0.28784099706348343,204.97135669486136,102.74130605052495,316.08037176324029,-140.81246618550111,88.919946152664352,112.96842864776822,-65.180725197239141,54.877787789675523,-174.82784582809435,129.96903857793262,162.62690540471536,-1.3130493078006253,58.711417695013758,-107.62887257362529,131.34218657712205,-106.14187284717087,100.77745293402916,34.510136884157831,-182.4860584622464,-142.10188739869932,20.297925905670034,-90.873767903394366,20.27202913235017,5.9914709846349687,64.853331954520243,147.27133017951616,-65.224143657273956,-8.2828492744265461,-59.536627136431974,135.90215374633948,-61.092393027560469,120.07598425200823,-71.574327801720301,-29.916291163002455,-61.339422511735357,-125.00469113895575,112.84614230706225,-58.582606850266444,8.1804687595139001,0.69226268392286272,-155.98180730054153,-77.232114016349016,42.843636025100821,-59.678172848726504,-153.14878975069774,8.6885516098154199,65.49325997496085,-14.488192165859189,255.77730632392428,13.221664018297435,-260.02825762973305,127.93485353128467,120.0434737847082,-71.074524706506651,219.22539442261308,-7.6885750124107801,103.84185590194645,144.10705967650506,-8.6966750940006747,34.58842371075373,184.50552741987002,15.847344671231767,51.040879046897771,136.31891568784465,-89.105256717138587,108.78319301222564,24.515185589563757,16.664620922994104,26.039558372734326,10.583511150787729,-28.29633440364676,-52.624847334712676,-170.95286060299256,140.71191337970654,-38.677161213691853,219.80651194365677,46.627683232396308,29.329608884216299,-89.449611597543992,6.4977138866157986,112.87893924568542,39.284327324438465,29.821197617337312,35.958745978424815,-16.365675225461288,-0.66730193719567588,24.632308404409621,-78.322862303232142,-128.17119251287022,10.349685856097231,69.91105980474488,129.7242454560473,94.978918506999094,-18.421147419667243,-117.10694113148853,53.145476213036972,35.793792138359265,184.90100398386329,118.2108750310056,-136.22604715192085,37.771119882182035,-161.48603668980752,-84.554938018000414,86.939189599462011,146.00729967412477,122.86969862195161,70.536250344130323,-111.50993995782592,-92.992658075505943,274.38803629214044,-160.05560629585437,129.72296757386596,172.67882457874987,-89.660948373048072,41.390850910350999,-194.3387527149518,96.573342049011316,-5.7498993382255037,-28.127818647130272,39.565850375117506,-219.21734291649648,32.484970742026356,-56.715828228839754,-245.50615953057823,54.765045528180707,80.929122440468532,154.96538115415129,-225.31588309260769,-85.194692634659546,-64.935019532191987,25.821550372713808,314.6253645875974,-112.59867511819243,-135.78307154012435,22.720173264350741,-16.152253029512259,-158.84638764200145,207.4191148058427,84.697842589676767,-3.5540219427902677,-98.678248013957202,-39.341581594033173,302.72208820282151,-89.644233050050815,-8.82334695553876,-16.761042373257453,73.412004742880143,-45.03428407038524,63.460880336251165,-413.64383938144761,-109.57530263005134,17.186832404633236,-93.760307544031406,-37.76730369064218,-176.62242192049337,-58.046042069563796,19.672625225043802,-49.288914372219232,127.29009891293462,-138.21451717154815,153.02220042083542,14.326800358596984,-46.274329431588896,88.447515557143277,-89.009181023549502,30.385595354149757,69.963626130528638,61.066538566086479,-76.759598731019537,81.426223545975148,-99.864032456635627,-5.3579003295708816,-226.52658222415278,-13.203467640804945,-115.2498161979951,62.680549095962533,-203.19113734004227,25.541357982817011,22.338747469450091,201.33353024908004,-75.794335047532229,-299.07792308191273,3.4062456905466263,122.69534380943519,-133.07070233677175,51.64384720999611,-46.169048513643446,15.216013556119613,-30.4304947891316,8.6697304597151046,5.4824199753194236,10.466240315513957,115.61847999190591,71.457591320350986,-112.42602129621719,16.385863105940491,196.47722939794897,66.976383257689903,199.19893517732282,19.740987093867517,-27.825388154098341,168.67113731968374,-154.79693704332752,-52.871300084101279,-92.928496389174995,-68.404780125122812,232.73487994980621,209.09434873483227,-83.104034544681753,-90.903210528370323,117.11117140878952,-101.05099186879083,-10.999912082629024,10.555401346067718,7.358326783877061,146.48281756345403,35.192783112022823,-41.54328671991685,-183.62133684035683,-30.576998905486548,-47.727889726524943,-126.15503071296334,57.432645040885404,44.118833262079995,124.22212521980251,156.57746230426022,-344.93012542616879,94.571123681596205,-104.8210708561279,-71.308182963452538,41.620819685293668,148.95551027645854,-129.52740785637491,-41.383302751998947,-54.47615672968999,51.670993474174196,-237.31049679748298,90.463524918717155,131.60976575294941,28.270845906350814,-107.06329715998704,-62.314852288764982,-73.461381890077277,153.12981602437893,-108.42664682110336,51.759012000953405,1.1732388361228914,71.974871697980632,-78.357247452086682,-89.907435138932897,22.045876466803492,1.5418611571952923,-170.8782523985862,38.669774624489406,-46.788513931760818,-28.963012668672956,181.33351505935363,276.12825272751769,37.079238934893198,23.912148267211698,47.173080153605554,44.937997669564311,-171.75371482789583,149.09274615245863,29.672688761751488,209.81183766528824,166.14030858756445,-25.479861743096642,43.474936437922835,-10.389006337526894,61.931143854680052,91.182930541616486,-167.43806843392554,230.74156837741936,53.812616977000943,-284.50143837480863,-9.085902401017421,204.20495265911342,-84.528287856172426,-100.65806644142847,-27.128800180770405,51.055357936286427,-125.35787399467358,-3.5790457084238714,98.092196014239022,231.07367225288735,-83.609824038232048,-190.49046077558057,13.000200138921606,42.866714878586741,-25.911835708370347,61.034160719932025,124.69419113853519,-162.01277867722769,219.35440279951303,-41.948217562157573,-20.579445803850689,-54.621340582447104,108.37345425287734,-120.79075141248485,-56.653068688773978,-119.54492239625867,-184.46966650484003,-87.275072806589122,32.669077128144011,-145.63257370319454,-237.96809701621169,-116.402512588592,83.239453636417267,-45.759165659546852]} diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/generic/rfftf/test/fixtures/c/fftpack/medium.json b/lib/node_modules/@stdlib/fft/base/fftpack/generic/rfftf/test/fixtures/c/fftpack/medium.json new file mode 100644 index 000000000000..6f956976e745 --- /dev/null +++ b/lib/node_modules/@stdlib/fft/base/fftpack/generic/rfftf/test/fixtures/c/fftpack/medium.json @@ -0,0 +1 @@ +{"lengths":[123,80,26,29,73,68,21,58,26,115],"offsets":[0,123,203,229,258,331,399,420,478,504],"input":[-7.8569456655532122,8.3142158109694719,-2.9747217055410147,3.8523499481379986,6.445686761289835,-7.3424742929637432,-4.9654210451990366,6.1685327347368002,-5.47020073980093,2.3362016119062901,4.5405878499150276,-6.3398926798254251,5.4237588122487068,-2.8855218272656202,3.0347048211842775,4.2840316519141197,1.7200855072587729,9.4772122148424387,3.5058472864329815,2.7754487749189138,6.9676600396633148,5.4624194093048573,6.8831331934779882,4.8197149112820625,4.9486298952251673,-8.3772339578717947,3.8288827426731586,-7.9676356632262468,7.947424054145813,-7.6437815092504025,-9.0358075313270092,-4.8171714693307877,-2.2008444834500551,-9.5931723061949015,7.5530529581010342,4.1612041741609573,-2.6413340494036674,7.0986892562359571,7.6704633701592684,-2.5219994410872459,-7.2445478290319443,0.88465902023017406,8.4642381872981787,-1.5486415755003691,-8.0188932921737432,6.4604539331048727,0.84938251413404942,-4.4280000403523445,-1.3966345973312855,6.7623899783939123,-4.5115019474178553,-4.8131872992962599,4.7611013147979975,-0.17008666880428791,1.3534343335777521,7.1709332894533873,1.8759302236139774,8.7593612167984247,-1.4158824551850557,3.2636428810656071,-7.9539941251277924,-2.77924501337111,9.2291167750954628,-6.2342104781419039,1.6245233360677958,3.3638002630323172,-4.6088746283203363,-1.3558359909802675,-7.5354327540844679,-8.0182786099612713,-3.2085821125656366,-6.6395127400755882,9.7094038408249617,5.950506990775466,-9.8288812022656202,5.9936348535120487,-4.9788918532431126,-0.23533816449344158,4.6715457737445831,-5.3300658520311117,-2.4167385417968035,1.8753873649984598,-0.36446353420615196,-5.5385439936071634,-6.3088656403124332,6.8952121492475271,7.830724623054266,-9.0111207775771618,-9.9069010000675917,-5.285107409581542,-6.8001959379762411,9.1068954672664404,-0.40773211978375912,7.2463378589600325,9.2005305085331202,-6.6835928149521351,8.8555850461125374,-4.1819824185222387,-6.5784625709056854,-4.2204024363309145,7.6962978113442659,-8.3225462399423122,2.9653584118932486,-1.2210698425769806,-2.5207754876464605,-6.6735623404383659,-2.5622297171503305,-3.3947979379445314,3.6311086546629667,8.0432655941694975,3.1649824138730764,-6.1404670029878616,-2.8288890141993761,-5.1376055274158716,-7.7360612247139215,0.019013946875929832,-0.43251644819974899,-9.3038700148463249,9.8566659167408943,0.98421806469559669,1.753099299967289,4.3400265276432037,2.8259623236954212,-4.0511252731084824,-7.2624185774475336,0.53099025972187519,4.3533775582909584,7.2167345229536295,-8.3427379745990038,3.6028738785535097,-6.4986166916787624,-2.2507096454501152,-7.6769504323601723,-6.5058984979987144,-4.6360285207629204,2.2686935123056173,9.9319573305547237,6.4070106204599142,2.627626471221447,2.5182006414979696,3.3982796221971512,-5.1142848748713732,4.2141462676227093,7.1564311720430851,-1.8611572030931711,-0.46904869377613068,-3.3013217058032751,-5.3138570114970207,-9.9947555549442768,-1.8566119112074375,-4.076327932998538,9.1564764454960823,-7.100230623036623,6.4239413104951382,7.1817340236157179,3.4038693737238646,8.8326690718531609,-9.3307619728147984,-2.1164718642830849,8.4574386849999428,4.1721232421696186,0.87544205598533154,-6.4452799409627914,-5.8199399430304766,4.2694101948291063,-4.0227438323199749,9.7444569692015648,-4.9115641042590141,-8.6578604578971863,7.3392946179956198,-8.4752196446061134,-3.0165549647063017,0.76076283119618893,6.1409881245344877,-8.4124646242707968,-8.2929276954382658,0.76423612423241138,4.5166242122650146,-9.0967508498579264,-9.0915264934301376,-1.285767974331975,-9.9022763967514038,-7.5593994371592999,9.1736787557601929,2.0189981162548065,-6.6985660418868065,-2.7994401566684246,9.8093432188034058,5.6316334567964077,-9.1363692842423916,5.041446490213275,-8.4087212663143873,-5.3783104941248894,6.7355614062398672,4.5806856453418732,7.5837553665041924,0.1765824481844902,7.8212862741202116,-7.6414513867348433,-9.8734383936971426,-2.8790818806737661,-8.7291127536445856,9.8019594326615334,1.5323397144675255,-5.9663286898285151,3.9137416146695614,-1.7445733584463596,-1.0443708021193743,7.2599988617002964,-1.1989963240921497,8.4688498545438051,-4.0403501410037279,-6.1647732090204954,8.6567059997469187,-6.7421162407845259,5.2523666247725487,-3.4740180801600218,-7.8218221757560968,-1.3652908895164728,-6.4439125265926123,-2.8378066141158342,4.9842926021665335,-8.9941181149333715,-4.1431498154997826,6.081096725538373,4.992791973054409,-6.1451915372163057,-2.2341358289122581,-9.1208157502114773,6.4496930688619614,-0.0084629002958536148,-2.2358870785683393,1.4459312614053488,1.7668000143021345,-5.3920675348490477,-4.4790221471339464,1.0748163238167763,4.4380410574376583,-9.8438346479088068,-5.328926183283329,-3.2623258884996176,-9.9111552815884352,3.213183032348752,3.9673280902206898,-1.1166783515363932,-8.012984748929739,5.765340281650424,-1.9257629197090864,-6.2973283603787422,0.80227608792483807,3.8542942889034748,-0.87577797472476959,0.79965020529925823,-0.27891501784324646,-7.7246288117021322,-7.8364204708486795,-6.718836622312665,-3.4870855323970318,-7.446492025628686,6.8085452355444431,-8.7800946552306414,-7.0508609153330326,-3.8193809241056442,7.6648569200187922,3.2503930013626814,9.3552775960415602,-5.8492918498814106,-9.0480884723365307,8.7770528811961412,-4.0720787830650806,0.57193941436707973,-7.4141799937933683,9.876864543184638,0.46253286302089691,-6.2100893259048462,7.0287291705608368,-8.1486971117556095,4.8476572055369616,-5.4252303391695023,-1.846274621784687,9.662495469674468,-2.4384872987866402,-3.6559715308248997,-5.9134689252823591,-7.6721952389925718,-6.5853635314851999,-0.20484695211052895,-2.8626474644988775,7.4841200187802315,5.6052924692630768,8.1506530288606882,8.025598106905818,6.2275238335132599,5.9931968525052071,7.6596252154558897,-4.6788656245917082,2.3054891265928745,8.3558469451963902,-3.2802484277635813,8.8647271599620581,9.4695251155644655,-5.691230334341526,7.4918044358491898,-5.2427097875624895,5.7766376622021198,7.9493120964616537,4.0885457023978233,-3.8122695405036211,7.1858811751008034,-6.8949555791914463,-3.518395172432065,6.3323876541107893,8.4394304547458887,1.507797222584486,1.5480100363492966,-2.5952287018299103,1.9912662915885448,7.2126565687358379,3.1190854497253895,2.4692562036216259,0.78911185264587402,2.6029918529093266,8.4841704741120338,-6.546696936711669,9.664611704647541,-6.8709260877221823,0.3452681377530098,2.9216721747070551,4.5443414244800806,-3.2535649370402098,-2.6658440381288528,-4.8406914342194796,2.4991054460406303,2.4653294216841459,-5.2083121985197067,3.8969169743359089,-4.516303576529026,-5.514167807996273,3.381686108186841,-4.0014749765396118,7.2101162374019623,0.42373670265078545,1.7428430262953043,-8.0371651519089937,-0.63469277694821358,-7.2814288735389709,1.0249437019228935,6.2288844957947731,8.8618478272110224,1.076579550281167,-5.927411736920476,-2.0090305525809526,-5.7764346897602081,-4.5377977471798658,-6.7666941042989492,-7.8277856484055519,-1.5933757554739714,0.13374353758990765,7.8277155756950378,0.41582022793591022,8.6906524281948805,3.7955069448798895,-8.9146694354712963,-8.8491934724152088,-8.3946818765252829,-9.4182861968874931,6.8638934567570686,1.457459693774581,-4.4748370628803968,-8.5864725895226002,7.1551989484578371,-2.5711390096694231,6.8667226191610098,9.0071922354400158,3.880049791187048,-8.0030508898198605,-7.2762895748019218,7.401137612760067,-9.0800061542540789,-7.6634273491799831,0.77656061388552189,-8.3456780854612589,-5.8115694019943476,4.9530934542417526,6.6418024618178606,8.7741060089319944,6.3998390454798937,2.0949657261371613,-9.9109461531043053,6.7280054651200771,-2.412016810849309,1.2335194367915392,-8.238737927749753,-8.468337906524539,-7.3551829718053341,1.4398135617375374,-1.0533783491700888,-4.1298444848507643,9.7037890460342169,-8.4173490945249796,9.6137806959450245,-1.1876897513866425,-1.5015825908631086,2.9014618694782257,4.8697412852197886,5.7418970577418804,4.0639726631343365,3.1886593624949455,-8.2019913289695978,9.1317480709403753,-2.7100219763815403,-7.3392999917268753,8.3850598614662886,7.701235543936491,-5.3340745251625776,-9.7905078902840614,-9.0661103650927544,5.883101187646389,-2.7182149235159159,-5.0381625443696976,3.6021556053310633,1.429365249350667,3.341835280880332,6.2256701663136482,-5.1613877806812525,-7.44439204223454,2.1029661595821381,4.5523388125002384,-8.8414644170552492,1.5075516141951084,-2.5799301639199257,-0.88620693422853947,5.5201277416199446,-3.2129251305013895,0.36738477647304535,-5.3639806807041168,7.5767356809228659,2.1967268269509077,0.38787601515650749,-0.96773196943104267,-4.6711395401507616,-7.8422096092253923,-4.0168853662908077,8.2076955679804087,6.739553539082408,-8.3235376328229904,6.303018257021904,-5.1720266416668892,-6.2517287116497755,7.195572629570961,-4.0106802247464657,-7.5024904403835535,5.6431880127638578,5.0610529445111752,1.1169562675058842,-7.3159250244498253,1.2481350731104612,-2.5937382038682699,7.042065542191267,-4.0042990166693926,-0.25352624244987965,-1.0154805798083544,-7.1820345241576433,-8.4542254637926817,9.8326421249657869,-2.7836504857987165,-4.8136583436280489,-3.1557407695800066,1.4649392291903496,1.2337147258222103,-4.9565151892602444,-4.1507464274764061,-1.5951608214527369,-9.8678603768348694,-9.1293524298816919,2.9737177863717079,-0.72506291791796684,-6.1323888599872589,-7.0595395378768444,-9.680990083143115,-8.4003248903900385,-4.2604202684015036,-4.8834061063826084,4.5936100650578737,4.8044776357710361,8.8557402603328228,-1.5732970181852579,-2.4029186926782131,-5.8544083870947361,4.9582705367356539,-6.3469720166176558,6.441345289349556,-0.30959323048591614,-3.3333489391952753,-3.5955688823014498,9.2738452740013599,5.5176709778606892,-4.5037536509335041,5.4124317690730095,6.7408634256571531,-6.3082739617675543,-3.1604465376585722,2.3750950954854488,-1.7766333278268576,0.12372356839478016,-0.57790676131844521,7.1211362536996603,4.9371499195694923,-1.3211848959326744,-5.1544780191034079,8.6879708431661129,-1.2738926522433758,9.6862620301544666,-2.9939051251858473,1.4366158284246922,5.2023178339004517,-4.6440466586500406,7.5078499782830477,4.4347220193594694,-5.6269076559692621,8.5630603414028883,-0.64469676464796066,4.5815497729927301,2.1071488037705421,-5.1499602757394314,4.6176835987716913,9.4083589501678944,6.2890273611992598,-0.317012844607234,-8.034803532063961,-0.94294802285730839,-8.127349279820919,3.6406686995178461,8.7189395446330309,-0.78292685560882092,1.3484099134802818,2.7255046740174294,7.5571557972580194,-6.88237807713449,7.8716819919645786,-0.64062118530273438,-6.9201881345361471,-7.6019530463963747,-6.0248320177197456,0.64830929040908813,-3.8656727597117424,9.63797552511096,5.4548042267560959,-1.1052399594336748,4.2320714052766562,8.4242198616266251,5.8633585460484028,5.4672075808048248,7.3579316306859255,4.757052781060338,-8.2137932255864143,-9.2227284517139196,-6.3970818743109703,4.244966646656394,5.1545418333262205,-7.615288682281971,9.8431355413049459,-6.4208019897341728,5.5809865426272154,-0.35905612632632256,5.3437602799385786,-7.4208549875766039,-2.3097560182213783,-0.069338064640760422,-5.3647746983915567,-5.7683195918798447,-8.1473476067185402,7.5287883728742599,-3.6536799184978008,-7.3983405251055956,-3.9091850910335779,-1.6737773362547159,8.8243747223168612,-8.733894694596529,9.4318778160959482,1.5706072002649307,-2.8046945948153734,1.4980012457817793,-3.0929721612483263,-3.5830600466579199,-0.49015396274626255,1.9824225455522537,-1.4241831284016371,3.7542280647903681,-2.688807426020503,9.213648084551096,-6.2164925783872604,-0.59073534794151783,-8.4889192134141922,6.7347919661551714,-8.351293858140707,-0.19586087204515934,8.166400259360671,-7.3106987494975328,9.0861382335424423,-9.2745594773441553,2.4788699485361576,2.3673227056860924,7.5928112491965294,-7.6211970672011375,-9.459089832380414,1.0771914105862379,4.356124410405755,-6.6169219557195902,9.3927166890352964,3.3895443845540285,8.0725759826600552,-4.2153179924935102,-6.8494545668363571,1.2171198334544897,-3.8668713439255953,9.49337063357234,-4.9196089897304773,-3.8682506419718266],"expected":[-2.2085090912878513,26.237317848867761,-64.167847869611023,10.247914659448554,-22.69250263214315,-26.845502234815179,-68.984934119821332,-19.842035273387204,28.952150487738908,16.881098143406547,41.550940825134056,56.576834048434073,80.704958489680507,43.836408870892882,-92.463443632161443,21.537528903009026,-24.982085981226867,13.650962945253401,49.659374336614192,15.409559517730557,60.413807126591202,-17.814095648117629,10.588697806933856,-17.100957157325904,-32.787413012341418,7.380335616029182,92.816680860811005,-59.499306985813035,-39.629682186559911,-40.929987043008801,-42.094585481010917,3.5204714356974627,-73.566767445466013,73.519844488012552,40.215826513025881,-31.409088247058641,-29.144368578114864,-25.522723894937858,-30.952237310449863,-17.300551551318158,51.456371273476279,-58.878406022784418,19.038054149306248,-18.166391325799147,-13.223629739080188,0.099963984712452714,-26.606478461490148,-5.2643007261751933,-18.269548226655125,-76.243198682230471,15.401094501464838,54.891026576925739,-27.452540563134935,39.316034302746118,41.517068278095508,-47.642409732579253,9.5439485131564243,3.8322256364611809,10.287850622704855,34.375793857707052,11.682273271755871,-61.838815540722251,-1.8144597344861992,58.638316374830865,18.536386522966648,30.005612803781652,-25.830322916351562,-68.883813264466795,50.460454435348097,13.025335077869505,46.194906598539106,92.360406491524714,-80.473807892709416,-53.934804486230107,48.222155643373704,28.601935470177743,5.6314600530036927,-40.324870045693203,15.293622829954334,-60.824859785677511,-53.500163832142235,-47.270525591447949,-106.86021624839698,7.2690047568626781,-11.295084848416511,11.229681086675942,-44.50196777956053,-35.555847666995795,-75.074929010657556,-138.84188126799995,-67.729867119648191,37.2159028191262,-62.10884059197371,-22.981849557091437,98.662345965897529,-38.399304701147457,-59.155492916379629,-0.72167177501114566,55.648175041627823,26.6039246778261,-9.0903074122367613,8.9304842572320524,53.820839202461244,24.828073551071562,0.51518630672157162,-7.8531187564510416,-58.831343257502652,29.055950698559485,-12.793983925003067,-66.972661293704377,45.970655290233182,-42.086997329215336,35.901936187090897,-18.747241894091896,-4.2515530200741285,13.694806980209137,-57.767471986903267,-44.914467637981609,14.281909891380147,-44.098668956705303,96.26145304490916,-28.160305690976717,23.858421773710781,-49.653363227844238,-0.68399244226584077,-39.56657555198715,1.7529709761888519,43.336195896606462,-61.860041349640028,3.1213346213609778,-16.74450627186598,28.505071549427619,73.29252792519199,-17.068705043240097,-17.603882048152371,-56.926375191779947,-42.507952183334048,-43.330627509676681,15.707337066746323,-80.290383056166959,0.93006898714275898,-36.316022651103509,-9.0881341028993088,40.407232756117381,54.018553930455141,51.721205801574094,17.769080442605624,21.351386254072718,22.365393323933599,33.163194753297056,-91.958575863940808,-3.9826727703467686,34.163808450400701,2.6702790456768479,-10.141078171917719,18.316989937705241,-8.7488694902422246,93.718493020319869,-10.095921547904002,-7.8111555506780164,-18.374773701754357,59.055045883975247,17.085918402299285,-3.0307211633771658,35.265025352882553,14.693360453945935,-62.496132694187082,71.031325981541102,-52.591212061759634,-43.855388700089151,107.23439895340144,-2.3161255284725684,31.279360192029309,13.460813399668391,25.261488519215028,25.571100305789784,-23.520187894549881,18.300335947770826,7.6301100358878919,20.280356400407104,18.524205860084773,22.710379608207738,-27.254558626186373,-62.352172692915403,22.713274633225893,76.667007509504245,-10.875067977568563,-10.512983957836454,-53.944876584309959,87.937239156658279,-59.757676646477861,-1.1852542157813346,-44.511653675165945,-5.0177338786954806,-57.418340766959126,41.840756773377684,49.712603016137678,2.2239546954885068,-10.771329405078415,17.303882963562941,-0.14496889002263291,15.279721445511948,38.338554035872221,-28.33958612754941,5.1289939460762826,-22.389722317040107,-25.114869010485499,4.9897114739528163,-19.288379516304225,-9.9003606931911072,-3.8708059452249177,1.5333754073594559,13.048897502579214,-34.590895720664989,12.215570646511731,-2.9444290061001954,1.4608028635786408,26.649217843445264,-13.708215465569383,5.1283895522256024,-16.615712098852313,-28.364575766626686,26.911484159514757,44.493140078492345,32.231428989325238,-24.935509889299347,5.115719302026803,-11.358734773856721,33.1505879573524,-51.158746760338545,-0.10246840256324319,5.553890893451662,2.6208884740111626,-29.9787171050219,-2.2487369460096436,-20.60476189176644,40.66704037541512,-8.3813611685355554,5.0181384549518917,-12.5071286780897,-2.9418030334479739,23.335429687579982,19.960921034873575,2.1726729389608597,27.130907683236046,26.490475249904243,-9.8817449180249728,-45.417210624868844,13.521418004159965,9.5823160223257542,15.080134471741069,2.2273683670500137,2.8989636065562459,-13.751849163458623,-2.9760595101604959,19.385803321646161,10.352323583928966,-10.0437665074317,81.41750562004745,-55.450782286226904,56.63893647397159,23.053660677289166,-4.7875041788294954,-71.049329563862273,-5.9626052906174394,5.9159915820481128,18.935649399035498,-11.811551573935791,-45.646319574168757,-42.251599437672461,43.989072888055354,16.23566937241106,-7.6179744494285249,-45.773814033041894,12.350038466122092,7.7912072248973256,69.227726491202077,-9.8761873202056591,8.4533962134462026,26.827825571979769,-24.891008820667349,15.52891947661054,53.068187319172132,-5.3884142001370314,-14.790719068869983,13.349801843920615,-50.654673752059345,21.363671354454635,-47.047652860902197,28.104573464000733,-31.507540837772829,-15.972535383816588,-36.475975375718392,-61.001059332408474,-29.371831520523394,12.793299307760032,3.2312979554035817,14.782042504736294,19.697442756820585,29.574117996565231,-39.990726983768369,21.002399557644083,-25.041582433563967,26.300034515450694,-8.7072394444958494,-62.150918965776611,3.2908822652876282,-18.997571353317099,-34.007085139902124,-0.63705432107137971,83.311174658260981,-50.688772847553068,-60.384098236329493,-48.141840004573659,7.4854926028273709,-27.174199881967933,12.105554670836066,75.880720100257363,-9.6035944561026358,34.693508474205657,-48.606735412860942,1.5988010253877862,-53.905830519770603,-47.508290306773183,45.797700939876968,-36.323544180569321,19.914143193965415,-16.755818399711401,11.09581015513915,-60.348672402469631,52.29244561094044,-62.377935349941254,10.183814950562541,8.100717127093187,-12.127939928975541,-16.65440481383839,-16.926367872734993,-9.1657543910838335,-6.9838953548543703,-34.120654811464327,119.59049877395796,-26.532250607798495,-47.505613452696423,43.202542296111446,23.813062287419626,64.185348166972361,46.936784981023429,-44.101459678086762,2.2429958499061242,0.025541637233965631,14.155474045490202,-27.111204636367365,-73.763668349357744,81.619719302017685,-17.503117824426155,-30.01938507418145,14.5787914175169,-4.3015146072859878,-2.1912379256402694,-40.148939491354938,15.808093831794499,21.640873098591037,38.465300492640324,14.560387544727691,-15.605808701366186,6.8269659951329231,1.6143423479861561,-16.109831055253427,11.884863374210314,46.252026710354748,-45.464442296977253,-0.89378067331452016,65.494333034572705,-33.840237074139651,-27.914281813273533,41.800339376062148,-34.952715936152202,14.195199916314678,-60.291815503837277,-12.256755609440571,-7.5251204362494288,8.8390760688496055,-44.340658543072045,19.273079017103775,-21.383709216401328,19.127656220574654,11.761604178211051,8.8589089172463176,-45.625400094271868,72.510636589602285,-11.448567756926602,18.27240143110285,9.2338541769087126,-0.074543685195866516,-31.005394246876605,-46.060717700834253,20.771593875040523,-43.29650268663373,-34.74038690328598,0.17565261572599411,-13.965589662271469,-30.671366663612439,-6.5924941721801584,-13.514142665023357,14.914230496391372,18.167176291253863,-21.301544198356112,-2.0833520650084099,-23.961320660406493,-50.420810535108785,24.510437526512842,-10.363214556594908,-28.841775236651301,-20.637081217777219,14.133013125764837,6.3569885825494445,-27.794987436856715,-2.9144507022449027,-19.569961582322087,17.863569713933249,-57.505097333341837,-16.88341910206946,-23.601918131758481,3.9106352795485186,-22.56144810419179,10.736355180571923,-4.2799887079082879,19.8479861796996,-19.699153811740182,36.53623878641222,-29.963017004320552,3.6626906058452562,2.3342326452540618,33.272741279806858,12.776330006609296,-13.457864697811354,-37.15832243774102,4.4262801731397801,29.508017586293469,4.6529281837512011,8.4826403683971936,-40.750782782348857,-68.066445925623881,-5.7437518739606013,3.9626989390135847,-31.607388230630171,-11.887494823751197,-15.245249553806023,35.646797543084681,-44.591021416346607,-4.8298671444138677,8.6595811097719686,-53.099366951627175,23.919829031064001,39.726719439924857,70.853938274048275,-10.992952525212015,-13.529303882776972,-2.3676915060683026,73.719086927618235,-41.325481858461934,-0.034910765240443453,5.2676125930631592,8.791715234078346,9.0134886965164611,-41.538708759764191,-14.039516808510246,30.895412671007058,35.686866812969242,23.711524774346781,-10.574511831669994,22.701326755170573,-12.292594076936254,-22.625582436868896,0.47377379653097051,-27.928827022211692,-16.679600791368181,53.707202598452568,-14.476545201614499,-30.350720961468671,11.134525935812015,-45.240498853382519,3.2231787908433729,-10.254916756851891,24.558141248667454,25.008661296409699,26.191811160921212,-2.9440251494707965,-9.7604155913286981,1.4018707225115268,18.782130927282363,-29.356453496010147,30.928163052559579,-12.919131957717468,-33.677561599568719,11.731764716184998,1.6567104791079998,15.384086405033326,-0.15103645714184033,-7.5979637772504773,7.3612712578933648,19.585022372525327,-16.88819963915401,-37.966871904209256,42.566117960959673,38.860927051000139,-61.17852617839862,3.1046270582899833,5.0384566506880262,-1.9337729309236593,-56.552661057674506,-23.472310948097871,40.7982558786765,1.5917117948157724,-20.335313584876165,-16.348570729064772,-21.990777141951217,-8.9769747959244555,48.050652010408605,28.884123742842288,-89.589641780379964,-98.013557077754683,23.589383216448756,38.203603325283126,-11.057650251438318,42.568125615111661,-49.928143703804011,40.404460584196073,-0.16824972017960249,-41.850592128976565,11.915071270365658,30.157898387923503,25.03858279253123,20.227685664071366,24.156246551180111,-5.3463904675169447,41.85981143369721,-3.0384512331387317,-65.505836472936949,-123.27011766775914,-2.4014730884486406,11.831173413997902,-11.532735257411534,7.3408877081501034,-39.467998636347474,4.4803537116640815,-40.136424070798043,-45.821476515624795,-49.47689628250469,-53.091801572822156,9.5163325383754085,-52.43826415737972,-27.930158012682192,6.4345000245140529,17.353729856777218,-18.860321782721069,-86.153170887378934,55.018926347098159,-17.162646996407506,18.619096218673725,16.567158838484307,-11.155446135235856,20.281961220956891,-6.5961462778592894,57.259287593558078,-68.304506309637674,2.5999948580621393,73.088055763505906,47.524254360593744,-50.511658914215836,-46.249442701148141,-28.011195266685842,-19.114942825685528,62.116813270306061,14.888239451454904,69.109072202328576,-19.168614658861525,-2.5602412619034958,-9.7277613546151791,2.1373854276240678,41.469028225422548,-53.701419606291012,4.548009981865353,26.131448919980198,-6.8327621605372144,36.407724647100636,15.348183968995087,30.158038606907425,63.634083523452617,47.127166023535835,-34.539227778194942,73.832870709740163,-32.85218084513285,7.004221816349288,-63.922198300301481,52.614565114721785,-51.38552493259126,-0.90823787997593364,44.98002704888038,-78.532396445297096,131.53861964154373,20.510041906319639,-4.0125112729229251,-74.837515011558509,26.620001034953617,5.5683599324587902,-33.389123590529707,57.084456972920592,136.33440007821901,-61.574636287223285,16.768822608060344,-88.72227841116019,14.03121397926836,17.455174793261808,-42.092391362578454,35.818004764740976,31.232942394250788,39.817824497534751,-28.551892805227705]} diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/generic/rfftf/test/fixtures/c/fftpack/runner.c b/lib/node_modules/@stdlib/fft/base/fftpack/generic/rfftf/test/fixtures/c/fftpack/runner.c new file mode 100644 index 000000000000..83735d958f19 --- /dev/null +++ b/lib/node_modules/@stdlib/fft/base/fftpack/generic/rfftf/test/fixtures/c/fftpack/runner.c @@ -0,0 +1,318 @@ +/** +* @license Apache-2.0 +* +* Copyright (c) 2026 The Stdlib Authors. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +/** +* Generate FFTPACK test fixtures. +* +* ## Notes +* +* - Run this script from the directory in which fixtures should be written. +* +*/ + +#include +#include +#include + +/** +* Define prototypes for external functions. +*/ +extern void rffti( int n, double *wsave ); +extern void rfftf( int n, double *r, double *wsave ); + +/** +* Generates a random number on the interval [0,1]. +* +* @return random number +*/ +double rand_double( void ) { + int r = rand(); + return (double)r / ( (double)RAND_MAX + 1.0 ); +} + +/** +* Generates an array of pseudorandom integers drawn from a uniform distribution. +* +* ## Notes +* +* - WARNING: the method used here is not particularly robust, as some integer values may be sampled more frequently than others. +* +* +* @param out output array +* @param len array length +* @param a lower bound (inclusive) +* @param b upper bound (exclusive) +*/ +void rand_array_i32( int *out, const unsigned int len, const int a, const int b ) { + unsigned int i; + unsigned int r; + double delta; + + delta = (double)b - (double)a; + + for ( i = 0; i < len; i++ ) { + r = (unsigned int)( delta * rand_double() ); // truncation + out[ i ] = (int)( a + r ); + } +} + +/** +* Generates an array of pseudorandom numbers drawn from a uniform distribution. +* +* @param out output array +* @param len array length +* @param a lower bound (inclusive) +* @param b upper bound (exclusive) +*/ +void rand_array_f64( double *out, const unsigned int len, const double a, const double b ) { + unsigned int i; + double delta; + + delta = b - a; + + for ( i = 0; i < len; i++ ) { + out[ i ] = a + ( rand_double()*delta ); + } +} + +/** +* Writes an array of doubles to a file as a series of comma-separated values. +* +* @param f file to write to +* @param x array of doubles +* @param len array length +*/ +void write_array_f64( FILE *f, const double *x, const unsigned int len ) { + unsigned int i; + + for ( i = 0; i < len; i++ ) { + fprintf( f, "%.17g", x[ i ] ); + if ( i < len-1 ) { + fprintf( f, "," ); + } + } +} + +/** +* Writes an array of integers to a file as a series of comma-separated values. +* +* @param f file to write to +* @param x array of integers +* @param len array length +*/ +void write_array_i32( FILE *f, const int *x, const unsigned int len ) { + unsigned int i; + + for ( i = 0; i < len; i++ ) { + fprintf( f, "%d", x[ i ] ); + if ( i < len-1 ) { + fprintf( f, "," ); + } + } +} + +/** +* Writes a named array of doubles to a file as JSON. +* +* @param f file to write to +* @param name array name +* @param x data +* @param len array length +*/ +void write_named_array_f64( FILE *f, const char *name, const double *x, const unsigned int len ) { + fprintf( f, "\"%s\":[", name ); + write_array_f64( f, x, len ); + fprintf( f, "]" ); +} + +/** +* Writes a named array of integers to a file as JSON. +* +* @param f file to write to +* @param name array name +* @param x data +* @param len array length +*/ +void write_named_array_i32( FILE *f, const char *name, const int *x, const unsigned int len ) { + fprintf( f, "\"%s\":[", name ); + write_array_i32( f, x, len ); + fprintf( f, "]" ); +} + +/** +* Writes data to a file as JSON. +* +* ## Notes +* +* - This function SHOULD be tailored to the input data (e.g., input types, output types, number of arguments, etc) and may vary from use case to use case. +* +* +* @param f file to write to +* @param lengths sequence lengths +* @param offsets offsets +* @param input input values +* @param expected results +* @param num number of sequence lengths +* @param total total array length +*/ +void write_data_as_json( FILE *f, const int *lengths, const int *offsets, const double *input, const double *expected, const unsigned int num, const unsigned int total ) { + fprintf( f, "{" ); + write_named_array_i32( f, "lengths", lengths, num ); + fprintf( f, "," ); + write_named_array_i32( f, "offsets", offsets, num ); + fprintf( f, "," ); + write_named_array_f64( f, "input", input, total ); + fprintf( f, "," ); + write_named_array_f64( f, "expected", expected, total ); + fprintf( f, "}\n" ); +} + +/** +* Generates test fixtures. +* +* @param lengths sequence lengths +* @param offsets input offsets into flat arrays +* @param num number of sequence lengths +* @param total total number of input and output values +* @param name output filename +*/ +void generate( const int *lengths, const int *offsets, const unsigned int num, const unsigned int total, const char *name ) { + unsigned int i; + unsigned int j; + double *expected; + double *input; + double *wsave; + FILE *f; + int off; + int n; + + // Allocate output arrays: + input = (double*) malloc( total * sizeof(double) ); + if ( input == NULL ) { + printf( "Error allocating memory.\n" ); + exit( 1 ); + } + expected = (double*) malloc( total * sizeof(double) ); + if ( expected == NULL ) { + printf( "Error allocating memory.\n" ); + exit( 1 ); + } + + // Generate fixture data: + for ( i = 0; i < num; i++ ) { + n = lengths[ i ]; + off = offsets[ i ]; + + rand_array_f64( input + off, (unsigned int)n, -10.0, 10.0 ); + for ( j = 0; j < (unsigned int)n; j++ ) { + expected[ off + j ] = input[ off + j ]; + } + + wsave = (double*) calloc( 2*n + 15, sizeof(double) ); + if ( wsave == NULL ) { + printf( "Error allocating memory.\n" ); + exit( 1 ); + } + rffti( n, wsave ); + rfftf( n, expected + off, wsave ); + free( wsave ); + } + // Open a new file: + f = fopen( name, "w" ); + if ( f == NULL ) { + printf( "Error opening file.\n" ); + exit( 1 ); + } + + // Write data as JSON: + write_data_as_json( f, lengths, offsets, input, expected, num, total ); + + // Close the file: + fclose( f ); + + // Free allocated memory: + free( input ); + free( expected ); +} + +/** +* Computes offsets into flat input and output arrays for each sequence length. +* +* @param offsets output array of offsets +* @param lengths sequence lengths +* @param num number of sequence lengths +* @return total number of values +*/ +unsigned int compute_offsets( int *offsets, const int *lengths, const unsigned int num ) { + unsigned int total; + unsigned int i; + + total = 0; + for ( i = 0; i < num; i++ ) { + offsets[ i ] = total; + total += lengths[ i ]; + } + return total; +} + +/** +* Main execution sequence. +*/ +int main( void ) { + unsigned int total; + unsigned int num; + int *lengths; + int *offsets; + + // Use the current time to seed the random number generator: + srand( time( NULL ) ); + + // Define the number of sequence lengths per range: + num = 10; + + // Allocate arrays: + lengths = (int*) malloc( num * sizeof(int) ); + if ( lengths == NULL ) { + printf( "Error allocating memory.\n" ); + exit( 1 ); + } + offsets = (int*) malloc( num * sizeof(int) ); + if ( offsets == NULL ) { + printf( "Error allocating memory.\n" ); + exit( 1 ); + } + + // Generate fixture data: + rand_array_i32( lengths, num, 2, 16 ); + total = compute_offsets( offsets, lengths, num ); + generate( lengths, offsets, num, total, "small.json" ); + + rand_array_i32( lengths, num, 16, 128 ); + total = compute_offsets( offsets, lengths, num ); + generate( lengths, offsets, num, total, "medium.json" ); + + rand_array_i32( lengths, num, 128, 1024 ); + total = compute_offsets( offsets, lengths, num ); + generate( lengths, offsets, num, total, "large.json" ); + + // Free allocated memory: + free( lengths ); + free( offsets ); + + return 0; +} diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/generic/rfftf/test/fixtures/c/fftpack/small.json b/lib/node_modules/@stdlib/fft/base/fftpack/generic/rfftf/test/fixtures/c/fftpack/small.json new file mode 100644 index 000000000000..8d557d1163b5 --- /dev/null +++ b/lib/node_modules/@stdlib/fft/base/fftpack/generic/rfftf/test/fixtures/c/fftpack/small.json @@ -0,0 +1 @@ +{"lengths":[4,13,5,5,15,10,10,2,10,15],"offsets":[0,4,17,22,27,42,52,62,64,74],"input":[-9.116728724911809,-4.8596726823598146,3.4812678024172783,9.668060727417469,-8.9032003656029701,3.9114638883620501,-0.026319427415728569,-2.3505385220050812,-5.5008794739842415,6.7187159508466721,1.4591167215257883,3.3748283609747887,0.74036757461726665,3.3579106442630291,-3.5956973303109407,7.115019578486681,2.1341895684599876,9.3241720646619797,-8.6399579886347055,8.2260956522077322,-4.010230703279376,0.05261685699224472,4.3315941374748945,1.1027806997299194,-5.564692746847868,-5.7909615617245436,-8.6909349635243416,-8.5439217090606689,2.3078472074121237,7.9881112929433584,-3.8133587222546339,8.8800034765154123,6.2185775488615036,-4.3670093547552824,3.6738187074661255,5.8711233921349049,-4.0290241781622171,4.1906843520700932,-7.1679836977273226,7.6980144530534744,0.52905097603797913,-8.2401633262634277,7.5749892555177212,-7.1554449666291475,-1.5635318774729967,1.7198013328015804,4.7010921128094196,-8.7447449564933777,7.0715260319411755,-8.8618475571274757,-1.0718837380409241,4.8500846140086651,-4.6277761366218328,0.96651383675634861,4.1981401853263378,-1.8577941041439772,-3.9454446267336607,8.9122058637440205,7.4440999515354633,-7.0119780208915472,9.685426251962781,2.9591707978397608,-5.2162992861121893,9.6579357422888279,0.92617449350655079,6.2147978693246841,-7.8920833580195904,-2.2449817415326834,8.5919307451695204,4.5801795646548271,-0.92194274067878723,4.9084284529089928,-4.0428752824664116,-8.6048257909715176,-1.3070579431951046,-7.7227832470089197,3.1819853372871876,-0.37233305163681507,2.1984764840453863,9.7943628113716841,-6.1440743599087,-3.4577368106693029,5.8174742758274078,-5.7097223773598671,-3.3039627131074667,-9.7012667916715145,-9.1909652855247259,7.446452509611845,-7.4725344125181437],"expected":[-0.8270728774368763,-12.597996527329087,14.527733409777284,-10.443848967552185,8.4349771682173014,-9.7567153511884861,8.5923802120769253,4.57425773203913,4.0866333108592272,-14.22715060271884,-6.6576554982603335,-26.372765919953665,2.8296022954701328,-8.980587583926571,-6.8431158070115705,-7.3253292347795274,-19.352006438403265,4.952695881947875,3.259831328816762,1.0747977763238268,17.574250891864249,16.746805214608187,-14.612214434891939,11.173642831905873,-9.4473745727180862,6.9614497292273327,-5.541407201183806,11.195770418271422,-14.991257708546126,-15.946231614575851,-17.300471915627686,-4.6130790288011587,-19.788622037389842,-4.3067661197842559,-5.5157193718121711,-30.002457820459789,-25.180834475904703,-12.913945229888764,18.854087307931454,19.383661310646723,-5.7544798257416492,19.640630053430741,-1.47995974868536,6.3230358066860246,-1.1461816305236983,9.6659206372041417,15.672241202115009,17.024128064244636,19.603107401239232,-11.850330015300589,-4.8679641623852099,34.904343318194151,16.722563998773694,-6.1633397371209089,8.1826596782807925,2.5224321416795537,-2.68207208227156,-32.079778889875975,12.531437445164677,-0.17263982326092409,-15.643991329488166,8.7863272521644831,4.4416364561766386,-14.874235028401017,1.5148022118955851,-16.303884263575817,-3.8387589572180141,14.638762167581284,-6.9882295533190071,11.265068834141644,-29.609707780796953,-1.6302781281256387,0.023841251436460542,-8.1923944968730211,-25.943685574457049,-6.2112734554560713,-26.110422946311445,-2.2624743686374584,8.8755320203980546,-8.2645672629549143,25.11030762650708,-12.000561912417531,-15.582412082646586,-21.114386739209294,5.5941560454209212,34.194765437856233,-13.8671250199453,18.827406514084274,-0.55489016140835545]} diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/generic/rfftf/test/test.js b/lib/node_modules/@stdlib/fft/base/fftpack/generic/rfftf/test/test.js new file mode 100644 index 000000000000..51fb2e0b807b --- /dev/null +++ b/lib/node_modules/@stdlib/fft/base/fftpack/generic/rfftf/test/test.js @@ -0,0 +1,387 @@ +/** +* @license Apache-2.0 +* +* Copyright (c) 2026 The Stdlib Authors. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +'use strict'; + +// MODULES // + +var tape = require( 'tape' ); +var Float64Array = require( '@stdlib/array/float64' ); +var isAlmostSameValue = require( '@stdlib/number/float64/base/assert/is-almost-same-value' ); +var rffti = require( '@stdlib/fft/base/fftpack/generic/rffti' ); +var rfftf = require( './../lib' ); + + +// FIXTURES // + +var small = require( './fixtures/c/fftpack/small.json' ); +var medium = require( './fixtures/c/fftpack/medium.json' ); +var large = require( './fixtures/c/fftpack/large.json' ); + + +// TESTS // + +tape( 'main export is a function', function test( t ) { + t.ok( true, __filename ); + t.strictEqual( typeof rfftf, 'function', 'main export is a function' ); + t.end(); +}); + +tape( 'the function has an arity of 7', function test( t ) { + t.strictEqual( rfftf.length, 7, 'returns expected value' ); + t.end(); +}); + +tape( 'the function returns a reference to the input array', function test( t ) { + var out; + var w; + var N; + var r; + + N = 4; + r = new Float64Array( [ 1.0, 2.0, 3.0, 4.0 ] ); + w = new Float64Array( ( 2*N ) + 34 ); + + rffti( N, w, 1, 0 ); + out = rfftf( N, r, 1, 0, w, 1, 0 ); + + t.strictEqual( out, r, 'same reference' ); + t.end(); +}); + +tape( 'the function returns all zeros for a zero sequence', function test( t ) { + var expected; + var w; + var N; + var r; + + N = 4; + r = new Float64Array( [ 0.0, 0.0, 0.0, 0.0 ] ); + expected = new Float64Array( [ 0.0, 0.0, 0.0, 0.0 ] ); + w = new Float64Array( ( 2*N ) + 34 ); + + rffti( N, w, 1, 0 ); + rfftf( N, r, 1, 0, w, 1, 0 ); + + t.deepEqual( r, expected, 'returns expected value' ); + t.end(); +}); + +tape( 'the function returns only a zero-frequency term for a constant sequence', function test( t ) { + var expected; + var w; + var N; + var r; + + N = 4; + r = new Float64Array( [ 1.0, 1.0, 1.0, 1.0 ] ); + expected = new Float64Array( [ 4.0, 0.0, 0.0, 0.0 ] ); + w = new Float64Array( ( 2*N ) + 34 ); + + rffti( N, w, 1, 0 ); + rfftf( N, r, 1, 0, w, 1, 0 ); + + t.deepEqual( r, expected, 'returns expected value' ); + t.end(); +}); + +tape( 'the function computes the exact two-point real FFT', function test( t ) { + var expected; + var w; + var N; + var r; + + N = 2; + r = new Float64Array( [ 3.0, -1.0 ] ); + + // For [ a, b ], output is [ a+b, a-b ]... + expected = new Float64Array( [ 2.0, 4.0 ] ); + w = new Float64Array( ( 2*N ) + 34 ); + + rffti( N, w, 1, 0 ); + rfftf( N, r, 1, 0, w, 1, 0 ); + + t.deepEqual( r, expected, 'returns expected value' ); + t.end(); +}); + +tape( 'the function computes a forward real-valued FFT (small sequence lengths)', function test( t ) { + var expected; + var lengths; + var offsets; + var input; + var ulps; + var off; + var w; + var y; + var e; + var N; + var i; + var k; + var r; + + lengths = small.lengths; + offsets = small.offsets; + input = small.input; + expected = small.expected; + + ulps = 20; + for ( k = 0; k < lengths.length; k++ ) { + N = lengths[ k ]; + off = offsets[ k ]; + r = new Float64Array( N ); + for ( i = 0; i < N; i++ ) { + r[ i ] = input[ off+i ]; + } + w = new Float64Array( ( 2*N ) + 34 ); + + rffti( N, w, 1, 0 ); + rfftf( N, r, 1, 0, w, 1, 0 ); + + for ( i = 0; i < N; i++ ) { + y = r[ i ]; + e = expected[ off+i ]; + t.strictEqual( isAlmostSameValue( y, e, ulps ), true, 'within tolerance. N: '+N+'. index: '+i+'. y: '+y+'. E: '+e+'.' ); + } + } + t.end(); +}); + +tape( 'the function computes a forward real-valued FFT (medium sequence lengths)', function test( t ) { + var expected; + var lengths; + var offsets; + var input; + var ulps; + var off; + var w; + var y; + var e; + var N; + var i; + var k; + var r; + + lengths = medium.lengths; + offsets = medium.offsets; + input = medium.input; + expected = medium.expected; + + ulps = 130; + for ( k = 0; k < lengths.length; k++ ) { + N = lengths[ k ]; + off = offsets[ k ]; + r = new Float64Array( N ); + for ( i = 0; i < N; i++ ) { + r[ i ] = input[ off+i ]; + } + w = new Float64Array( ( 2*N ) + 34 ); + + rffti( N, w, 1, 0 ); + rfftf( N, r, 1, 0, w, 1, 0 ); + + for ( i = 0; i < N; i++ ) { + y = r[ i ]; + e = expected[ off+i ]; + t.strictEqual( isAlmostSameValue( y, e, ulps ), true, 'within tolerance. N: '+N+'. index: '+i+'. y: '+y+'. E: '+e+'.' ); + } + } + t.end(); +}); + +tape( 'the function computes a forward real-valued FFT (large sequence lengths)', function test( t ) { + var expected; + var lengths; + var offsets; + var input; + var ulps; + var off; + var w; + var y; + var e; + var N; + var i; + var k; + var r; + + lengths = large.lengths; + offsets = large.offsets; + input = large.input; + expected = large.expected; + + ulps = 800; + for ( k = 0; k < lengths.length; k++ ) { + N = lengths[ k ]; + off = offsets[ k ]; + r = new Float64Array( N ); + for ( i = 0; i < N; i++ ) { + r[ i ] = input[ off+i ]; + } + w = new Float64Array( ( 2*N ) + 34 ); + + rffti( N, w, 1, 0 ); + rfftf( N, r, 1, 0, w, 1, 0 ); + + for ( i = 0; i < N; i++ ) { + y = r[ i ]; + e = expected[ off+i ]; + t.strictEqual( isAlmostSameValue( y, e, ulps ), true, 'within tolerance. N: '+N+'. index: '+i+'. y: '+y+'. E: '+e+'.' ); + } + } + t.end(); +}); + +tape( 'the function leaves a length-one sequence unchanged', function test( t ) { + var out; + var N; + var w; + var r; + + N = 1; + r = new Float64Array( [ 5.0 ] ); + w = new Float64Array( ( 2*N ) + 34 ); + + rffti( N, w, 1, 0 ); + out = rfftf( N, r, 1, 0, w, 1, 0 ); + t.strictEqual( out, r, 'same reference' ); + t.strictEqual( r[ 0 ], 5.0, 'returns expected value' ); + t.end(); +}); + +tape( 'the function supports specifying a stride', function test( t ) { + var expected; + var w; + var v; + var i; + var N; + var r; + + N = 4; + r = new Float64Array([ + 1.0, // 0 + -999.0, + 2.0, // 1 + -999.0, + 3.0, // 2 + -999.0, + 4.0, // 3 + -999.0 + ]); + expected = new Float64Array([ + 10.0, // 0 + -999.0, + -2.0, // 1 + -999.0, + 2.0, // 2 + -999.0, + -2.0, // 3 + -999.0 + ]); + + w = new Float64Array( ( ( 2*N ) + 34 ) * 2 ); + rffti( N, w, 2, 0 ); + rfftf( N, r, 2, 0, w, 2, 0 ); + + for ( i = 0; i < r.length; i++ ) { + v = r[ i ]; + t.strictEqual( isAlmostSameValue( v, expected[ i ], 1 ), true, 'within tolerance. index: '+i+'. y: '+v+'. E: '+expected[ i ]+'.' ); + } + t.end(); +}); + +tape( 'the function supports specifying a negative stride', function test( t ) { + var expected; + var w; + var v; + var i; + var N; + var r; + + N = 4; + r = new Float64Array([ + 4.0, // 3 + -999.0, + 3.0, // 2 + -999.0, + 2.0, // 1 + -999.0, + 1.0 // 0 + ]); + expected = new Float64Array([ + -2.0, // 3 + -999.0, + 2.0, // 2 + -999.0, + -2.0, // 1 + -999.0, + 10.0 // 0 + ]); + + w = new Float64Array( ( 2*N ) + 34 ); + rffti( N, w, -1, w.length-1 ); + rfftf( N, r, -2, r.length-1, w, -1, w.length-1 ); + + for ( i = 0; i < r.length; i++ ) { + v = r[ i ]; + t.strictEqual( isAlmostSameValue( v, expected[ i ], 1 ), true, 'within tolerance. index: '+i+'. y: '+v+'. E: '+expected[ i ]+'.' ); + } + t.end(); +}); + +tape( 'the function supports an offset parameter', function test( t ) { + var expected; + var w; + var v; + var i; + var N; + var r; + + N = 4; + r = new Float64Array([ + -999.0, + 1.0, // 0 + -999.0, + 2.0, // 1 + -999.0, + 3.0, // 2 + -999.0, + 4.0, // 3 + -999.0 + ]); + expected = new Float64Array([ + -999.0, + 10.0, // 0 + -999.0, + -2.0, // 1 + -999.0, + 2.0, // 2 + -999.0, + -2.0, // 3 + -999.0 + ]); + + w = new Float64Array( 3 + ( ( ( 2*N ) + 34 ) * 2 ) ); + rffti( N, w, 2, 3 ); + rfftf( N, r, 2, 1, w, 2, 3 ); + + for ( i = 0; i < r.length; i++ ) { + v = r[ i ]; + t.strictEqual( isAlmostSameValue( v, expected[ i ], 1 ), true, 'within tolerance. index: '+i+'. y: '+v+'. E: '+expected[ i ]+'.' ); + } + t.end(); +}); From 1a329ab58e5d12524590479e97d403b577e8cb85 Mon Sep 17 00:00:00 2001 From: Gunj Joshi Date: Tue, 18 Aug 2026 13:43:14 +0530 Subject: [PATCH 30/32] remove: remove `fft/base/fftpack/rfftf` This commit removes `@stdlib/fft/base/fftpack/rfftf` in favor of `@stdlib/fft/base/fftpack/generic/rfftf`. BREAKING CHANGE: remove `fft/base/fftpack/rfftf` To migrate, users should update their require/import paths to use `@stdlib/fft/base/fftpack/generic/rfftf` which provides the same API and implementation. Ref: https://github.com/stdlib-js/metr-issue-tracker/issues/1165 --- type: pre_commit_static_analysis_report description: Results of running static analysis checks when committing changes. report: - task: lint_filenames status: passed - task: lint_editorconfig status: passed - task: lint_markdown_pkg_readmes status: na - task: lint_markdown_docs status: na - task: lint_markdown status: na - task: lint_package_json status: na - task: lint_repl_help status: na - task: lint_javascript_src status: na - task: lint_javascript_cli status: na - task: lint_javascript_examples status: na - task: lint_javascript_tests status: na - task: lint_javascript_benchmarks status: na - task: lint_python status: na - task: lint_r status: na - task: lint_c_src status: na - task: lint_c_examples status: na - task: lint_c_benchmarks status: na - task: lint_c_tests_fixtures status: na - task: lint_shell status: na - task: lint_typescript_declarations status: passed - task: lint_typescript_tests status: na - task: lint_license_headers status: passed --- --- .../@stdlib/fft/base/fftpack/rfftf/README.md | 160 ---- .../base/fftpack/rfftf/benchmark/benchmark.js | 138 ---- .../fft/base/fftpack/rfftf/docs/repl.txt | 56 -- .../base/fftpack/rfftf/docs/types/index.d.ts | 56 -- .../fft/base/fftpack/rfftf/docs/types/test.ts | 148 ---- .../fft/base/fftpack/rfftf/examples/index.js | 38 - .../fft/base/fftpack/rfftf/lib/index.js | 49 -- .../fft/base/fftpack/rfftf/lib/main.js | 115 --- .../fft/base/fftpack/rfftf/lib/radf2.js | 366 --------- .../fft/base/fftpack/rfftf/lib/radf3.js | 401 --------- .../fft/base/fftpack/rfftf/lib/radf4.js | 492 ----------- .../fft/base/fftpack/rfftf/lib/radf5.js | 511 ------------ .../fft/base/fftpack/rfftf/lib/radfg.js | 765 ------------------ .../fft/base/fftpack/rfftf/lib/rfftf1.js | 181 ----- .../fft/base/fftpack/rfftf/package.json | 62 -- .../rfftf/test/fixtures/c/fftpack/Makefile | 138 ---- .../rfftf/test/fixtures/c/fftpack/large.json | 1 - .../rfftf/test/fixtures/c/fftpack/medium.json | 1 - .../rfftf/test/fixtures/c/fftpack/runner.c | 318 -------- .../rfftf/test/fixtures/c/fftpack/small.json | 1 - .../fft/base/fftpack/rfftf/test/test.js | 387 --------- 21 files changed, 4384 deletions(-) delete mode 100644 lib/node_modules/@stdlib/fft/base/fftpack/rfftf/README.md delete mode 100644 lib/node_modules/@stdlib/fft/base/fftpack/rfftf/benchmark/benchmark.js delete mode 100644 lib/node_modules/@stdlib/fft/base/fftpack/rfftf/docs/repl.txt delete mode 100644 lib/node_modules/@stdlib/fft/base/fftpack/rfftf/docs/types/index.d.ts delete mode 100644 lib/node_modules/@stdlib/fft/base/fftpack/rfftf/docs/types/test.ts delete mode 100644 lib/node_modules/@stdlib/fft/base/fftpack/rfftf/examples/index.js delete mode 100644 lib/node_modules/@stdlib/fft/base/fftpack/rfftf/lib/index.js delete mode 100644 lib/node_modules/@stdlib/fft/base/fftpack/rfftf/lib/main.js delete mode 100644 lib/node_modules/@stdlib/fft/base/fftpack/rfftf/lib/radf2.js delete mode 100644 lib/node_modules/@stdlib/fft/base/fftpack/rfftf/lib/radf3.js delete mode 100644 lib/node_modules/@stdlib/fft/base/fftpack/rfftf/lib/radf4.js delete mode 100644 lib/node_modules/@stdlib/fft/base/fftpack/rfftf/lib/radf5.js delete mode 100644 lib/node_modules/@stdlib/fft/base/fftpack/rfftf/lib/radfg.js delete mode 100644 lib/node_modules/@stdlib/fft/base/fftpack/rfftf/lib/rfftf1.js delete mode 100644 lib/node_modules/@stdlib/fft/base/fftpack/rfftf/package.json delete mode 100644 lib/node_modules/@stdlib/fft/base/fftpack/rfftf/test/fixtures/c/fftpack/Makefile delete mode 100644 lib/node_modules/@stdlib/fft/base/fftpack/rfftf/test/fixtures/c/fftpack/large.json delete mode 100644 lib/node_modules/@stdlib/fft/base/fftpack/rfftf/test/fixtures/c/fftpack/medium.json delete mode 100644 lib/node_modules/@stdlib/fft/base/fftpack/rfftf/test/fixtures/c/fftpack/runner.c delete mode 100644 lib/node_modules/@stdlib/fft/base/fftpack/rfftf/test/fixtures/c/fftpack/small.json delete mode 100644 lib/node_modules/@stdlib/fft/base/fftpack/rfftf/test/test.js diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/rfftf/README.md b/lib/node_modules/@stdlib/fft/base/fftpack/rfftf/README.md deleted file mode 100644 index d1bc2a8f7277..000000000000 --- a/lib/node_modules/@stdlib/fft/base/fftpack/rfftf/README.md +++ /dev/null @@ -1,160 +0,0 @@ - - -# rfftf - -> Compute the forward discrete Fourier transform (DFT) of a real-valued sequence. - - - -
- -
- - - - - -
- -## Usage - -```javascript -var rfftf = require( '@stdlib/fft/base/fftpack/rfftf' ); -``` - -#### rfftf( N, r, strideR, offsetR, w, strideW, offsetW ) - -Computes the forward discrete Fourier transform (DFT) of a real-valued sequence. - -```javascript -var Float64Array = require( '@stdlib/array/float64' ); -var rffti = require( '@stdlib/fft/base/fftpack/generic/rffti' ); - -var N = 4; -var w = new Float64Array( ( 2*N ) + 34 ); - -rffti( N, w, 1, 0 ); - -var r = new Float64Array( [ 1.0, 2.0, 3.0, 4.0 ] ); - -rfftf( N, r, 1, 0, w, 1, 0 ); - -// r => [ 10.0, -2.0, 2.0, -2.0 ] -``` - -The function accepts the following arguments: - -- **N**: length of the sequence to transform. The function is most efficient when this value is a product of small prime numbers. -- **r**: input array. -- **strideR**: stride length for `r`. -- **offsetR**: starting index for `r`. -- **w**: workspace array containing pre-computed values. -- **strideW**: stride length for `w`. -- **offsetW**: starting index for `w`. - -
- - - - - -
- -## Notes - -- Before calling this function, initialize the workspace by calling [`rffti`][@stdlib/fft/base/fftpack/generic/rffti] with the same sequence length and workspace layout. - -- The function performs the transform in-place (i.e., the input array is **mutated**). - -- For `N = 4`, the output - - ```text - [ 10.0, -2.0, 2.0, -2.0 ] - ``` - - corresponds to a zero-frequency term `10.0`, a complex coefficient `-2.0 + 2.0i` at frequency `1`, and a Nyquist term `-2.0`. - -- If `N` equals `1`, the function returns early without modifying the input, as a single data point is its own Fourier transform. - -- This transform is unnormalized as a call to this function followed by a call performing a [backward transform][@stdlib/fft/base/fftpack/rfftb] will multiply the input array by `N`. - -
- - - -
- -## Examples - - - -```javascript -var zeros = require( '@stdlib/array/zeros' ); -var discreteUniform = require( '@stdlib/random/array/discrete-uniform' ); -var rffti = require( '@stdlib/fft/base/fftpack/generic/rffti' ); -var rfftf = require( '@stdlib/fft/base/fftpack/rfftf' ); - -var N = 4; -var opts = { - 'dtype': 'float64' -}; -var r = discreteUniform( N, -10, 10, opts ); -var w = zeros( ( 2*N ) + 34 ); - -console.log( r ); - -rffti( N, w, 1, 0 ); -rfftf( N, r, 1, 0, w, 1, 0 ); - -console.log( r ); -``` - -
- - - - - -
- -
- - - - - - - - - - - - - - diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/rfftf/benchmark/benchmark.js b/lib/node_modules/@stdlib/fft/base/fftpack/rfftf/benchmark/benchmark.js deleted file mode 100644 index a4ee0166fc0a..000000000000 --- a/lib/node_modules/@stdlib/fft/base/fftpack/rfftf/benchmark/benchmark.js +++ /dev/null @@ -1,138 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2026 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench' ); -var slice = require( '@stdlib/array/slice' ); -var uniform = require( '@stdlib/random/array/uniform' ); -var floor = require( '@stdlib/math/base/special/floor' ); -var pow = require( '@stdlib/math/base/special/pow' ); -var format = require( '@stdlib/string/format' ); -var isnan = require( '@stdlib/math/base/assert/is-nan' ); -var Float64Array = require( '@stdlib/array/float64' ); -var dcopy = require( '@stdlib/blas/base/dcopy' ); -var rffti = require( '@stdlib/fft/base/fftpack/generic/rffti' ); -var pkg = require( './../package.json' ).name; -var rfftf = require( './../lib' ); - - -// VARIABLES // - -var options = { - 'dtype': 'float64' -}; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} iter - number of iterations -* @param {PositiveInteger} N - sequence length -* @returns {Function} benchmark function -*/ -function createBenchmark( iter, N ) { - var w; - var x; - var i; - - x = []; - for ( i = 0; i < iter; i++ ) { - x.push( uniform( N, -100.0, 100.0, options ) ); - } - w = new Float64Array( ( 2*N ) + 34 ); - rffti( N, w, 1, 0 ); - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var xc; - var y; - var i; - - xc = slice( x ); - for ( i = 0; i < iter; i++ ) { - xc[ i ] = dcopy( N, x[ i ], 1, new Float64Array( N ), 1 ); - } - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - y = rfftf( N, xc[ i ], 1, 0, w, 1, 0 ); - if ( isnan( y[ i%N ] ) ) { - b.fail( 'should not return NaN' ); - } - } - b.toc(); - if ( isnan( y[ i%N ] ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var lengths; - var opts; - var iter; - var N; - var f; - var i; - - lengths = [ - 8, - 16, - 32, - 64, - 128, - 256, - 512, - 1024 - ]; - - iter = 1e6; - - for ( i = 0; i < lengths.length; i++ ) { - N = lengths[ i ]; - f = createBenchmark( iter, N ); - opts = { - 'iterations': iter - }; - bench( format( '%s:N=%d', pkg, N ), opts, f ); - iter = floor( pow( iter, 3.0/4.0 ) ); - } -} - -main(); diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/rfftf/docs/repl.txt b/lib/node_modules/@stdlib/fft/base/fftpack/rfftf/docs/repl.txt deleted file mode 100644 index b09f9ec4542f..000000000000 --- a/lib/node_modules/@stdlib/fft/base/fftpack/rfftf/docs/repl.txt +++ /dev/null @@ -1,56 +0,0 @@ - -{{alias}}( N, r, strideR, offsetR, w, strideW, offsetW ) - Computes the forward discrete Fourier transform (DFT) of a real-valued - sequence. - - Before calling this function, one must first initialize the workspace array - using the corresponding initialization function with the same sequence - length and workspace layout. - - This transform is unnormalized as a call to this function followed by a call - performing a backward transform will multiply the input array by `N`. - - Parameters - ---------- - N: integer - Length of the sequence to transform. The function is most efficient when - this value is a product of small prime numbers. - - r: ArrayLikeObject - Input array. - - strideR: integer - Stride length for `r`. - - offsetR: integer - Starting index for `r`. - - w: ArrayLikeObject - Workspace array containing pre-computed values. - - strideW: integer - Stride length for `w`. - - offsetW: integer - Starting index for `w`. - - Returns - ------- - r: ArrayLikeObject - Input array. - - Examples - -------- - > var N = 4; - > var r = new {{alias:@stdlib/array/float64}}( [ 1.0, 2.0, 3.0, 4.0 ] ); - > var w = new {{alias:@stdlib/array/float64}}( ( 2*N ) + 34 ); - > {{alias:@stdlib/fft/base/fftpack/generic/rffti}}( N, w, 1, 0 ) - - > var out = {{alias}}( N, r, 1, 0, w, 1, 0 ) - [ 10.0, -2.0, 2.0, -2.0 ] - > var bool = ( out === r ) - true - - See Also - -------- - diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/rfftf/docs/types/index.d.ts b/lib/node_modules/@stdlib/fft/base/fftpack/rfftf/docs/types/index.d.ts deleted file mode 100644 index 4bc72a5c96a0..000000000000 --- a/lib/node_modules/@stdlib/fft/base/fftpack/rfftf/docs/types/index.d.ts +++ /dev/null @@ -1,56 +0,0 @@ -/* -* @license Apache-2.0 -* -* Copyright (c) 2026 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -// TypeScript Version: 4.1 - -/// - -import { Collection } from '@stdlib/types/array'; - -/** -* Computes the forward discrete Fourier transform (DFT) of a real-valued sequence. -* -* @param N - length of the sequence to transform -* @param r - input array -* @param strideR - stride length for `r` -* @param offsetR - starting index for `r` -* @param w - workspace array containing pre-computed values -* @param strideW - stride length for `w` -* @param offsetW - starting index for `w` -* @returns input array -* -* @example -* var Float64Array = require( '@stdlib/array/float64' ); -* var rffti = require( '@stdlib/fft/base/fftpack/generic/rffti' ); -* -* var N = 4; -* -* var w = new Float64Array( ( 2*N ) + 34 ); -* rffti( N, w, 1, 0 ); -* -* var r = new Float64Array( [ 1.0, 2.0, 3.0, 4.0 ] ); -* -* rfftf( N, r, 1, 0, w, 1, 0 ); -* // r => [ 10.0, -2.0, 2.0, -2.0 ] -*/ -declare function rfftf>( N: number, r: T, strideR: number, offsetR: number, w: Collection, strideW: number, offsetW: number ): T; - - -// EXPORTS // - -export = rfftf; diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/rfftf/docs/types/test.ts b/lib/node_modules/@stdlib/fft/base/fftpack/rfftf/docs/types/test.ts deleted file mode 100644 index 9ad7c70784d6..000000000000 --- a/lib/node_modules/@stdlib/fft/base/fftpack/rfftf/docs/types/test.ts +++ /dev/null @@ -1,148 +0,0 @@ -/* -* @license Apache-2.0 -* -* Copyright (c) 2026 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -import rfftf = require( './index' ); - - -// TESTS // - -// The function returns a collection... -{ - const r = new Float64Array( 4 ); - const w = new Float64Array( ( 2*4 ) + 34 ); - - rfftf( 4, r, 1, 0, w, 1, 0 ); // $ExpectType Float64Array -} - -// The compiler throws an error if the function is provided a first argument which is not a number... -{ - const r = new Float64Array( 4 ); - const w = new Float64Array( ( 2*4 ) + 34 ); - - rfftf( '4', r, 1, 0, w, 1, 0 ); // $ExpectError - rfftf( true, r, 1, 0, w, 1, 0 ); // $ExpectError - rfftf( false, r, 1, 0, w, 1, 0 ); // $ExpectError - rfftf( null, r, 1, 0, w, 1, 0 ); // $ExpectError - rfftf( void 0, r, 1, 0, w, 1, 0 ); // $ExpectError - rfftf( [], r, 1, 0, w, 1, 0 ); // $ExpectError - rfftf( {}, r, 1, 0, w, 1, 0 ); // $ExpectError - rfftf( ( x: number ): number => x, r, 1, 0, w, 1, 0 ); // $ExpectError -} - -// The compiler throws an error if the function is provided a second argument which is not a collection... -{ - const w = new Float64Array( ( 2*4 ) + 34 ); - - rfftf( 4, '4', 1, 0, w, 1, 0 ); // $ExpectError - rfftf( 4, 4, 1, 0, w, 1, 0 ); // $ExpectError - rfftf( 4, true, 1, 0, w, 1, 0 ); // $ExpectError - rfftf( 4, false, 1, 0, w, 1, 0 ); // $ExpectError - rfftf( 4, null, 1, 0, w, 1, 0 ); // $ExpectError - rfftf( 4, void 0, 1, 0, w, 1, 0 ); // $ExpectError - rfftf( 4, {}, 1, 0, w, 1, 0 ); // $ExpectError - rfftf( 4, ( x: number ): number => x, 1, 0, w, 1, 0 ); // $ExpectError -} - -// The compiler throws an error if the function is provided a third argument which is not a number... -{ - const r = new Float64Array( 4 ); - const w = new Float64Array( ( 2*4 ) + 34 ); - - rfftf( 4, r, '1', 0, w, 1, 0 ); // $ExpectError - rfftf( 4, r, true, 0, w, 1, 0 ); // $ExpectError - rfftf( 4, r, false, 0, w, 1, 0 ); // $ExpectError - rfftf( 4, r, null, 0, w, 1, 0 ); // $ExpectError - rfftf( 4, r, void 0, 0, w, 1, 0 ); // $ExpectError - rfftf( 4, r, [], 0, w, 1, 0 ); // $ExpectError - rfftf( 4, r, {}, 0, w, 1, 0 ); // $ExpectError - rfftf( 4, r, ( x: number ): number => x, 0, w, 1, 0 ); // $ExpectError -} - -// The compiler throws an error if the function is provided a fourth argument which is not a number... -{ - const r = new Float64Array( 4 ); - const w = new Float64Array( ( 2*4 ) + 34 ); - - rfftf( 4, r, 1, '0', w, 1, 0 ); // $ExpectError - rfftf( 4, r, 1, true, w, 1, 0 ); // $ExpectError - rfftf( 4, r, 1, false, w, 1, 0 ); // $ExpectError - rfftf( 4, r, 1, null, w, 1, 0 ); // $ExpectError - rfftf( 4, r, 1, void 0, w, 1, 0 ); // $ExpectError - rfftf( 4, r, 1, [], w, 1, 0 ); // $ExpectError - rfftf( 4, r, 1, {}, w, 1, 0 ); // $ExpectError - rfftf( 4, r, 1, ( x: number ): number => x, w, 1, 0 ); // $ExpectError -} - -// The compiler throws an error if the function is provided a fifth argument which is not a collection... -{ - const r = new Float64Array( 4 ); - - rfftf( 4, r, 1, 0, '42', 1, 0 ); // $ExpectError - rfftf( 4, r, 1, 0, 42, 1, 0 ); // $ExpectError - rfftf( 4, r, 1, 0, true, 1, 0 ); // $ExpectError - rfftf( 4, r, 1, 0, false, 1, 0 ); // $ExpectError - rfftf( 4, r, 1, 0, null, 1, 0 ); // $ExpectError - rfftf( 4, r, 1, 0, void 0, 1, 0 ); // $ExpectError - rfftf( 4, r, 1, 0, {}, 1, 0 ); // $ExpectError - rfftf( 4, r, 1, 0, ( x: number ): number => x, 1, 0 ); // $ExpectError -} - -// The compiler throws an error if the function is provided a sixth argument which is not a number... -{ - const r = new Float64Array( 4 ); - const w = new Float64Array( ( 2*4 ) + 34 ); - - rfftf( 4, r, 1, 0, w, '1', 0 ); // $ExpectError - rfftf( 4, r, 1, 0, w, true, 0 ); // $ExpectError - rfftf( 4, r, 1, 0, w, false, 0 ); // $ExpectError - rfftf( 4, r, 1, 0, w, null, 0 ); // $ExpectError - rfftf( 4, r, 1, 0, w, void 0, 0 ); // $ExpectError - rfftf( 4, r, 1, 0, w, [], 0 ); // $ExpectError - rfftf( 4, r, 1, 0, w, {}, 0 ); // $ExpectError - rfftf( 4, r, 1, 0, w, ( x: number ): number => x, 0 ); // $ExpectError -} - -// The compiler throws an error if the function is provided a seventh argument which is not a number... -{ - const r = new Float64Array( 4 ); - const w = new Float64Array( ( 2*4 ) + 34 ); - - rfftf( 4, r, 1, 0, w, 1, '0' ); // $ExpectError - rfftf( 4, r, 1, 0, w, 1, true ); // $ExpectError - rfftf( 4, r, 1, 0, w, 1, false ); // $ExpectError - rfftf( 4, r, 1, 0, w, 1, null ); // $ExpectError - rfftf( 4, r, 1, 0, w, 1, void 0 ); // $ExpectError - rfftf( 4, r, 1, 0, w, 1, [] ); // $ExpectError - rfftf( 4, r, 1, 0, w, 1, {} ); // $ExpectError - rfftf( 4, r, 1, 0, w, 1, ( x: number ): number => x ); // $ExpectError -} - -// The compiler throws an error if the function is provided an unsupported number of arguments... -{ - const r = new Float64Array( 4 ); - const w = new Float64Array( ( 2*4 ) + 34 ); - - rfftf(); // $ExpectError - rfftf( 4 ); // $ExpectError - rfftf( 4, r ); // $ExpectError - rfftf( 4, r, 1 ); // $ExpectError - rfftf( 4, r, 1, 0 ); // $ExpectError - rfftf( 4, r, 1, 0, w ); // $ExpectError - rfftf( 4, r, 1, 0, w, 1 ); // $ExpectError - rfftf( 4, r, 1, 0, w, 1, 0, 123 ); // $ExpectError -} diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/rfftf/examples/index.js b/lib/node_modules/@stdlib/fft/base/fftpack/rfftf/examples/index.js deleted file mode 100644 index 9d00f237c710..000000000000 --- a/lib/node_modules/@stdlib/fft/base/fftpack/rfftf/examples/index.js +++ /dev/null @@ -1,38 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2026 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -var zeros = require( '@stdlib/array/zeros' ); -var discreteUniform = require( '@stdlib/random/array/discrete-uniform' ); -var rffti = require( '@stdlib/fft/base/fftpack/generic/rffti' ); -var rfftf = require( './../lib' ); - -var N = 4; -var opts = { - 'dtype': 'float64' -}; -var r = discreteUniform( N, -10, 10, opts ); -var w = zeros( ( 2*N ) + 34 ); - -console.log( r ); - -rffti( N, w, 1, 0 ); -rfftf( N, r, 1, 0, w, 1, 0 ); - -console.log( r ); diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/rfftf/lib/index.js b/lib/node_modules/@stdlib/fft/base/fftpack/rfftf/lib/index.js deleted file mode 100644 index a426b47bc6a3..000000000000 --- a/lib/node_modules/@stdlib/fft/base/fftpack/rfftf/lib/index.js +++ /dev/null @@ -1,49 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2026 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -/** -* Compute the forward discrete Fourier transform (DFT) of a real-valued sequence. -* -* @module @stdlib/fft/base/fftpack/rfftf -* -* @example -* var Float64Array = require( '@stdlib/array/float64' ); -* var rffti = require( '@stdlib/fft/base/fftpack/generic/rffti' ); -* var rfftf = require( '@stdlib/fft/base/fftpack/rfftf' ); -* -* var N = 4; -* -* var w = new Float64Array( ( 2*N ) + 34 ); -* rffti( N, w, 1, 0 ); -* -* var r = new Float64Array( [ 1.0, 2.0, 3.0, 4.0 ] ); -* -* rfftf( N, r, 1, 0, w, 1, 0 ); -* // r => [ 10.0, -2.0, 2.0, -2.0 ] -*/ - -// MODULES // - -var main = require( './main.js' ); - - -// EXPORTS // - -module.exports = main; diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/rfftf/lib/main.js b/lib/node_modules/@stdlib/fft/base/fftpack/rfftf/lib/main.js deleted file mode 100644 index e8c894731ae9..000000000000 --- a/lib/node_modules/@stdlib/fft/base/fftpack/rfftf/lib/main.js +++ /dev/null @@ -1,115 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2026 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -* -* -* ## Notice -* -* The original C code and copyright notice are from the [PFFFT library]{@link https://github.com/marton78/pffft/blob/0b4ee12c4ba45a4a8e567550c16d96d1679f50ce/src/fftpack.c}. The implementation follows the original, but has been modified for JavaScript. -* -* ```text -* Copyright (c) 2004 the University Corporation for Atmospheric -* Research ("UCAR"). All rights reserved. Developed by NCAR's -* Computational and Information Systems Laboratory, UCAR, -* www.cisl.ucar.edu. -* -* Redistribution and use of the Software in source and binary forms, -* with or without modification, is permitted provided that the -* following conditions are met: -* -* - Neither the names of NCAR's Computational and Information Systems -* Laboratory, the University Corporation for Atmospheric Research, -* nor the names of its sponsors or contributors may be used to -* endorse or promote products derived from this Software without -* specific prior written permission. -* -* - Redistributions of source code must retain the above copyright -* notices, this list of conditions, and the disclaimer below. -* -* - Redistributions in binary form must reproduce the above copyright -* notice, this list of conditions, and the disclaimer below in the -* documentation and/or other materials provided with the -* distribution. -* -* THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -* EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO THE WARRANTIES OF -* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -* NONINFRINGEMENT. IN NO EVENT SHALL THE CONTRIBUTORS OR COPYRIGHT -* HOLDERS BE LIABLE FOR ANY CLAIM, INDIRECT, INCIDENTAL, SPECIAL, -* EXEMPLARY, OR CONSEQUENTIAL DAMAGES OR OTHER LIABILITY, WHETHER IN AN -* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE -* SOFTWARE. -* ``` -*/ - -'use strict'; - -// MODULES // - -var rfftf1 = require( './rfftf1.js' ); - - -// MAIN // - -/** -* Computes the forward discrete Fourier transform (DFT) of a real-valued sequence. -* -* @param {NonNegativeInteger} N - length of the sequence to transform -* @param {Collection} r - input array -* @param {integer} strideR - stride length for `r` -* @param {NonNegativeInteger} offsetR - starting index for `r` -* @param {Collection} w - workspace array containing pre-computed values -* @param {integer} strideW - stride length for `w` -* @param {NonNegativeInteger} offsetW - starting index for `w` -* @returns {Collection} input array -* -* @example -* var Float64Array = require( '@stdlib/array/float64' ); -* var rffti = require( '@stdlib/fft/base/fftpack/generic/rffti' ); -* -* var N = 4; -* -* var w = new Float64Array( ( 2*N ) + 34 ); -* rffti( N, w, 1, 0 ); -* -* var r = new Float64Array( [ 1.0, 2.0, 3.0, 4.0 ] ); -* -* rfftf( N, r, 1, 0, w, 1, 0 ); -* // r => [ 10.0, -2.0, 2.0, -2.0 ] -*/ -function rfftf( N, r, strideR, offsetR, w, strideW, offsetW ) { - var offsetT; - var offsetF; - - // When a sub-sequence is a single data point, the FFT is the identity, so no transformation necessary... - if ( N === 1 ) { - return r; - } - - // Resolve the starting indices for storing twiddle factors and factorization results: - offsetT = offsetW + ( N * strideW ); // index offset for twiddle factors - offsetF = offsetT + ( N * strideW ); // index offset for factors describing the sub-transforms - - rfftf1( N, r, strideR, offsetR, w, strideW, offsetW, w, strideW, offsetT, w, strideW, offsetF ); // eslint-disable-line max-len - - return r; -} - - -// EXPORTS // - -module.exports = rfftf; diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/rfftf/lib/radf2.js b/lib/node_modules/@stdlib/fft/base/fftpack/rfftf/lib/radf2.js deleted file mode 100644 index 875c85e8bff7..000000000000 --- a/lib/node_modules/@stdlib/fft/base/fftpack/rfftf/lib/radf2.js +++ /dev/null @@ -1,366 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2026 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -* -* -* ## Notice -* -* The original C code and copyright notice are from the [PFFFT library]{@link https://github.com/marton78/pffft/blob/0b4ee12c4ba45a4a8e567550c16d96d1679f50ce/src/fftpack.c}. The implementation follows the original, but has been modified for JavaScript. -* -* ```text -* Copyright (c) 2004 the University Corporation for Atmospheric -* Research ("UCAR"). All rights reserved. Developed by NCAR's -* Computational and Information Systems Laboratory, UCAR, -* www.cisl.ucar.edu. -* -* Redistribution and use of the Software in source and binary forms, -* with or without modification, is permitted provided that the -* following conditions are met: -* -* - Neither the names of NCAR's Computational and Information Systems -* Laboratory, the University Corporation for Atmospheric Research, -* nor the names of its sponsors or contributors may be used to -* endorse or promote products derived from this Software without -* specific prior written permission. -* -* - Redistributions of source code must retain the above copyright -* notices, this list of conditions, and the disclaimer below. -* -* - Redistributions in binary form must reproduce the above copyright -* notice, this list of conditions, and the disclaimer below in the -* documentation and/or other materials provided with the -* distribution. -* -* THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -* EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO THE WARRANTIES OF -* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -* NONINFRINGEMENT. IN NO EVENT SHALL THE CONTRIBUTORS OR COPYRIGHT -* HOLDERS BE LIABLE FOR ANY CLAIM, INDIRECT, INCIDENTAL, SPECIAL, -* EXEMPLARY, OR CONSEQUENTIAL DAMAGES OR OTHER LIABILITY, WHETHER IN AN -* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE -* SOFTWARE. -* ``` -*/ - -/* eslint-disable max-len */ - -'use strict'; - -// FUNCTIONS // - -/** -* Resolves an index into the input array. -* -* ## Notes -* -* In a forward real FFT, the previous stage writes its results as two "rows" per sub-sequence. -* -* Thus, when reading from an input array stored in linear memory, we can reinterpret the array as a three-dimensional logical view containing `L` independent sub-sequences having two "rows" (`even + odd` and `even - odd`, respectively) and where each "row" is arranged as `M*L` contiguous elements corresponding to interleaved real and imaginary components. -* -* Accordingly, the following is a logical view of an input array (zero-based indexing) which contains `L = 3` transforms and in which each sub-sequence has length `M = 4`: -* -* ```text -* │ k = 0 k = 1 k = 2 -* │ ──────────────────────────────────────────────────────────────────────────→ k -* j = 0 (even+odd) │ cc(0,0,0) ... cc(3,0,0) cc(0,1,0) ... cc(3,1,0) cc(0,2,0) ... cc(3,2,0) -* │ -* j = 1 (even-odd) │ cc(0,0,1) ... cc(3,0,1) cc(0,1,1) ... cc(3,1,1) cc(0,2,1) ... cc(3,2,1) -* └───────────────────────────────────────────────────────────────────────────→ i -* ↑ ↑ ↑ ↑ ↑ ↑ -* i = 0 M-1 0 M-1 0 M-1 -* ``` -* -* In the above, -* -* - `i` is the fastest varying index, which walks within one short sub-sequence corresponding to either the `even + odd` or `even - odd` row. -* - `j` selects between the `even + odd` and `even - odd` row. -* - `k` specifies the index of one of the `L` independent transforms we are processing. -* -* In linear memory, the three-dimensional logical view is arranged as follows: -* -* ```text -* | cc(0,0,0)...cc(3,0,0) ... cc(0,2,0)...cc(3,2,0) | cc(0,0,1)...cc(3,0,1) ... cc(0,2,1)...cc(3,2,1) | -* ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ -* 0 M-1 LM LM-1 (L+1)M (L+1)M-1 (2L-1)M 2LM-1 -* ``` -* -* @private -* @param {NonNegativeInteger} i - index of an element within a sub-sequence -* @param {NonNegativeInteger} k - index of the sub-sequence being transformed -* @param {NonNegativeInteger} j - input row -* @param {NonNegativeInteger} L - number of sub-sequences -* @param {NonNegativeInteger} M - sub-sequence length -* @param {integer} stride - stride length of the input array -* @param {NonNegativeInteger} offset - index specifying the first indexed element in the input array -* @returns {NonNegativeInteger} computed index -* -* @example -* var stride = 1; -* var offset = 0; -* -* var M = 4; // sub-sequence length -* var L = 3; // number of sub-sequences -* -* var idx = iptr( 0, 0, 0, L, M, stride, offset ); -* // returns 0 -* -* idx = iptr( 1, 0, 0, L, M, stride, offset ); -* // returns 1 -* -* idx = iptr( M-1, 0, 0, L, M, stride, offset ); -* // returns 3 -* -* idx = iptr( 0, 1, 0, L, M, stride, offset ); -* // returns 4 -* -* // ... -* -* idx = iptr( M-1, L-1, 1, L, M, stride, offset ); -* // returns 23 -*/ -function iptr( i, k, j, L, M, stride, offset ) { - var n = i + ( ( k+(j*L) ) * M ); - return ( n*stride ) + offset; -} - -/** -* Resolves an index into the output array. -* -* ## Notes -* -* When writing to an output array stored in linear memory, we can reinterpret the array as a three-dimensional logical view containing `L` independent sub-sequences having two "columns" corresponding to the even and odd half-spectrum of a folded complex vector (with real and imaginary parts of each half-spectrum interleaved along each sub-sequence) and where each "column" has `M` elements. -* -* Accordingly, the following is a logical view of an output array (zero-based indexing) which contains `L = 3` transforms and in which each "column" sub-sequence has length `M = 4`: -* -* ```text -* j = 0 ("even" column) j = 1 ("odd" column) -* k = 0 ─┬───────────────────────────────────────┬───────────────────────────────────────┐ -* │ out(0,0,0) out(1,0,0) ... out(3,0,0) │ out(0,1,0) out(1,1,0) ... out(3,1,0) │ -* └───────────────────────────────────────┴───────────────────────────────────────┤ -* k = 1 ─┬───────────────────────────────────────┬───────────────────────────────────────┤ -* │ out(0,0,1) out(1,0,1) ... out(3,0,1) │ out(0,1,1) out(1,1,1) ... out(3,1,1) │ -* └───────────────────────────────────────┴───────────────────────────────────────┤ -* k = 2 ─┬───────────────────────────────────────┬───────────────────────────────────────┤ -* │ out(0,0,2) out(1,0,2) ... out(3,0,2) │ out(0,1,2) out(1,1,2) ... out(3,1,2) │ -* └───────────────────────────────────────┴───────────────────────────────────────┘ -* ↑ ↑ ↑ ↑ ↑ ↑ -* i = 0 1 M-1 0 1 M-1 -* ``` -* -* In the above, -* -* - `i` is the fastest varying index, which walks within one short "column" sub-sequence. -* - `j` selects between the even (0) and odd (1) column. -* - `k` specifies the index of one of the `L` independent transforms we are processing. -* -* In linear memory, the three-dimensional logical view is arranged as follows: -* -* ```text -* | out(0,0,0)...out(3,0,0) | out(0,1,0)...out(3,1,0) | out(0,0,1)...out(3,0,1) | ... | out(0,1,2)...out(3,1,2) | -* ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ -* 0 M-1 M 2M-1 2M 3M-1 (2L-1)M 2LM-1 -* ``` -* -* As may be observed, when resolving an index in the output array, the `j` and `k` dimensions are swapped relative index resolution in the input array. This stems from `radf2` being only one stage in a multi-stage driver which alternates between using `cc` and `out` as workspace buffers. After each stage, the next stage reads what the previous stage wrote. -* -* Each stage expects a transpose, and, in order to avoid explicit transposition between the stages, we swap the last two logical dimensions while still maintaining cache locality within the inner loop logical dimension, as indexed by `i`. -* -* @private -* @param {NonNegativeInteger} i - index of an element within a sub-sequence -* @param {NonNegativeInteger} j - index specifying which of the two complex halves we are in (either `0` or `1`) -* @param {NonNegativeInteger} k - index of the sub-sequence being transformed -* @param {NonNegativeInteger} M - sub-sequence length -* @param {integer} stride - stride length of the output array -* @param {NonNegativeInteger} offset - index specifying the first indexed element in the output array -* @returns {NonNegativeInteger} computed index -* -* @example -* var stride = 1; -* var offset = 0; -* -* var M = 4; // sub-sequence length -* var L = 3; // number of sub-sequences -* -* var idx = optr( 0, 0, 0, M, stride, offset ); -* // returns 0 -* -* idx = optr( 1, 0, 0, M, stride, offset ); -* // returns 1 -* -* idx = optr( M-1, 0, 0, M, stride, offset ); -* // returns 3 -* -* idx = optr( 0, 1, 0, M, stride, offset ); -* // returns 4 -* -* // ... -* -* idx = optr( M-1, 1, L-1, M, stride, offset ); -* // returns 23 -*/ -function optr( i, j, k, M, stride, offset ) { - var n = i + ( ( j+(k*2) ) * M ); - return ( n*stride ) + offset; -} - - -// MAIN // - -/** -* Performs one radix-2 stage within a forward Fourier transform for a real-valued sequence. -* -* @private -* @param {NonNegativeInteger} M - number of elements in each sub-sequence to be transformed -* @param {NonNegativeInteger} L - number of sub-sequences to be transformed -* @param {Collection} cc - input array containing the sub-sequences to be transformed -* @param {integer} sc - stride length for `cc` -* @param {NonNegativeInteger} oc - index offset for `cc` -* @param {Collection} out - output array containing transformed sub-sequences -* @param {integer} so - stride length for `out` -* @param {NonNegativeInteger} oo - index offset for `out` -* @param {Collection} twiddles - array containing twiddle factors -* @param {integer} st - stride length for `twiddles` -* @param {NonNegativeInteger} ot - index offset for `twiddles` -* @returns {void} -*/ -function radf2( M, L, cc, sc, oc, out, so, oo, twiddles, st, ot ) { // eslint-disable-line max-params - var tr2; - var ti2; - var ip1; - var ip2; - var it1; - var it2; - var io; - var im; - var i; - var k; - - /* - * First, perform the core butterfly for each sub-sequence being transformed. - * - * In the following loop, we handle harmonic `n = 0` for every transform. As described for `iptr`, the input array is interpreted as a three-dimensional array, containing two "rows" per sub-sequence. - * - * row0 = even + odd (j = 0) - * row1 = even - odd (j = 1) - * - * For a radix-2 forward FFT of a real-valued signal `x` and `n = 0`, - * - * x[0] = row0 + row1 = 2⋅even - * x[M] = row0 - row1 = 2⋅odd - * - * Because `W_2^0 = 1`, no twiddle multiplication is necessary. - */ - for ( k = 0; k < L; k++ ) { - ip1 = iptr( 0, k, 0, L, M, sc, oc ); // real part row 0 - ip2 = iptr( 0, k, 1, L, M, sc, oc ); // real part row 1 - - io = optr( 0, 0, k, M, so, oo ); - out[ io ] = cc[ ip1 ] + cc[ ip2 ]; // even + odd - - io = optr( M-1, 1, k, M, so, oo ); - out[ io ] = cc[ ip1 ] - cc[ ip2 ]; // even - odd - } - // When the number of elements in a sub-sequence is less than `2`, there is nothing more to do, as the above butterfly produced the full result... - if ( M < 2 ) { - return; - } - /* - * Next, apply the general case where we need to loop through the non-trivial harmonics. - * - * For each harmonic `n = 1, ..., M/2-1`, we need to - * - * - recover even/odd spectra from the two input rows. - * - multiply the odd part by the twiddle factor `W_n = cos(θ) - j sin(θ)`. - * - form the following - * - * x[2n] = E_n + W_n⋅O_n => column 0 - * x[2n+1] = E_n - W_n⋅O_n => column 1 - * - * The mirror index `im = M - i` selects the conjugate-symmetric partner, thus allowing the routine to read each symmetry pair only once. - */ - if ( M >= 3 ) { - // Loop over each sub-sequence to be transformed... - for ( k = 0; k < L; k++ ) { - // Loop over the elements in each sub-sequence... - for ( i = 2; i < M; i += 2 ) { - im = M - i; // "mirror" index - - // Resolve twiddle factor indices: - it1 = ( (i-2)*st ) + ot; // cos(θ) - it2 = ( (i-1)*st ) + ot; // sin(θ) - - // Load the `even-odd` row... - ip1 = iptr( i-1, k, 1, L, M, sc, oc ); // c = Re(row1) - ip2 = iptr( i, k, 1, L, M, sc, oc ); // d = Im(row1) - - // eslint-disable-next-line stdlib/capitalized-comments, stdlib/empty-line-before-comment - // tmp = W_n ⋅ (c + j⋅d) - tr2 = ( twiddles[ it1 ] * cc[ ip1 ] ) + ( twiddles[ it2 ] * cc[ ip2 ] ); // Re(tmp) - ti2 = ( twiddles[ it1 ] * cc[ ip2 ] ) - ( twiddles[ it2 ] * cc[ ip1 ] ); // Im(tmp) - - // Load the `even+odd` row... - ip1 = iptr( i, k, 0, L, M, sc, oc ); // b = Im(row0) - io = optr( i, 0, k, M, so, oo ); // Im(x[2n]) - out[ io ] = cc[ ip1 ] + ti2; - - io = optr( im, 1, k, M, so, oo ); // Im(x[2n+1]) - out[ io ] = ti2 - cc[ ip1 ]; - - ip1 = iptr( i-1, k, 0, L, M, sc, oc ); // a = Re(row0) - io = optr( i-1, 0, k, M, so, oo ); // Re(x[2n]) - out[ io ] = cc[ ip1 ] + tr2; - - io = optr( im-1, 1, k, M, so, oo ); // Re(x[2n+1]) - out[ io ] = cc[ ip1 ] - tr2; - } - } - // When `M` is odd, there is no Nyquist pair to process, so we do not need to perform any further transformations... - if ( M%2 === 1 ) { - return; - } - } - /* - * Lastly, handle the Nyquist frequency where `i = M-1` (i.e., the last element of each sub-sequence). - * - * When `M` is even, the Nyquist index is `i = M/2`. In this stage, we've stored that element at the end of each sub-sequence (i.e., `i = M-1` in the packed layout). - * - * At this point, the cosine term is -1 and the sine term is 0, so the twiddle multiplication collapses to simple addition/subtraction. - * - * In this case, - * - * W_n⋅O_n = ±Re(O_n) - * - * where - * - * row0 = Re(E_n) - * row1 = -Re(O_n) - */ - for ( k = 0; k < L; k++ ) { - ip1 = iptr( M-1, k, 1, L, M, sc, oc ); // -Re(O_n) - io = optr( 0, 1, k, M, so, oo ); - out[ io ] = -cc[ ip1 ]; // -(-Re(O_n)) = Re(O_n) - - ip1 = iptr( M-1, k, 0, L, M, sc, oc ); // Re(E_n) - io = optr( M-1, 0, k, M, so, oo ); - out[ io ] = cc[ ip1 ]; - } -} - - -// EXPORTS // - -module.exports = radf2; diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/rfftf/lib/radf3.js b/lib/node_modules/@stdlib/fft/base/fftpack/rfftf/lib/radf3.js deleted file mode 100644 index fa93eb19c6bf..000000000000 --- a/lib/node_modules/@stdlib/fft/base/fftpack/rfftf/lib/radf3.js +++ /dev/null @@ -1,401 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2026 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -* -* -* ## Notice -* -* The original C code and copyright notice are from the [PFFFT library]{@link https://github.com/marton78/pffft/blob/0b4ee12c4ba45a4a8e567550c16d96d1679f50ce/src/fftpack.c}. The implementation follows the original, but has been modified for JavaScript. -* -* ```text -* Copyright (c) 2004 the University Corporation for Atmospheric -* Research ("UCAR"). All rights reserved. Developed by NCAR's -* Computational and Information Systems Laboratory, UCAR, -* www.cisl.ucar.edu. -* -* Redistribution and use of the Software in source and binary forms, -* with or without modification, is permitted provided that the -* following conditions are met: -* -* - Neither the names of NCAR's Computational and Information Systems -* Laboratory, the University Corporation for Atmospheric Research, -* nor the names of its sponsors or contributors may be used to -* endorse or promote products derived from this Software without -* specific prior written permission. -* -* - Redistributions of source code must retain the above copyright -* notices, this list of conditions, and the disclaimer below. -* -* - Redistributions in binary form must reproduce the above copyright -* notice, this list of conditions, and the disclaimer below in the -* documentation and/or other materials provided with the -* distribution. -* -* THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -* EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO THE WARRANTIES OF -* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -* NONINFRINGEMENT. IN NO EVENT SHALL THE CONTRIBUTORS OR COPYRIGHT -* HOLDERS BE LIABLE FOR ANY CLAIM, INDIRECT, INCIDENTAL, SPECIAL, -* EXEMPLARY, OR CONSEQUENTIAL DAMAGES OR OTHER LIABILITY, WHETHER IN AN -* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE -* SOFTWARE. -* ``` -*/ - -/* eslint-disable max-len */ - -'use strict'; - -// VARIABLES // - -// cos( 2π/3 ): -var TAUR = -0.5; - -// sin( 2π/3 ): -var TAUI = 0.866025403784439; - - -// FUNCTIONS // - -/** -* Resolves an index into the input array. -* -* ## Notes -* -* In a forward real FFT, the previous stage writes its results as three "rows" per sub-sequence. -* -* Thus, when reading from an input array stored in linear memory, we can reinterpret the array as a three-dimensional logical view containing `L` independent sub-sequences having three "rows" (components 0, 1, and 2) and where each "row" is arranged as `M*L` contiguous elements corresponding to interleaved real and imaginary components. -* -* Accordingly, the following is a logical view of an input array (zero-based indexing) which contains `L = 3` transforms and in which each sub-sequence has length `M = 4`: -* -* ```text -* │ k = 0 k = 1 k = 2 -* │ ──────────────────────────────────────────────────────────────────────────→ k -* j = 0 │ cc(0,0,0) ... cc(3,0,0) cc(0,1,0) ... cc(3,1,0) cc(0,2,0) ... cc(3,2,0) -* │ -* j = 1 │ cc(0,0,1) ... cc(3,0,1) cc(0,1,1) ... cc(3,1,1) cc(0,2,1) ... cc(3,2,1) -* │ -* j = 2 │ cc(0,0,2) ... cc(3,0,2) cc(0,1,2) ... cc(3,1,2) cc(0,2,2) ... cc(3,2,2) -* └───────────────────────────────────────────────────────────────────────────→ i -* ↑ ↑ ↑ ↑ ↑ ↑ -* i = 0 M-1 0 M-1 0 M-1 -* ``` -* -* In the above, -* -* - `i` is the fastest varying index, which walks within one short sub-sequence corresponding to one of the three component rows. -* - `j` selects between the three component rows (0, 1, or 2). -* - `k` specifies the index of one of the `L` independent transforms we are processing. -* -* In linear memory, the three-dimensional logical view is arranged as follows: -* -* ```text -* | cc(0,0,0)...cc(3,0,0) ... cc(0,2,0)...cc(3,2,0) | cc(0,0,1)...cc(3,0,1) ... cc(0,2,1)...cc(3,2,1) | cc(0,0,2)...cc(3,0,2) ... cc(0,2,2)...cc(3,2,2) | -* ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ -* 0 M-1 LM LM-1 (L+1)M (L+1)M-1 (2L-1)M 2LM-1 2LM (2L+1)M-1 (3L-1)M 3LM-1 -* ``` -* -* @private -* @param {NonNegativeInteger} i - index of an element within a sub-sequence -* @param {NonNegativeInteger} k - index of the sub-sequence being transformed -* @param {NonNegativeInteger} j - input row -* @param {NonNegativeInteger} L - number of sub-sequences -* @param {NonNegativeInteger} M - sub-sequence length -* @param {integer} stride - stride length of the input array -* @param {NonNegativeInteger} offset - index specifying the first indexed element in the input array -* @returns {NonNegativeInteger} computed index -* -* @example -* var stride = 1; -* var offset = 0; -* -* var M = 4; // sub-sequence length -* var L = 3; // number of sub-sequences -* -* var idx = iptr( 0, 0, 0, L, M, stride, offset ); -* // returns 0 -* -* idx = iptr( 1, 0, 0, L, M, stride, offset ); -* // returns 1 -* -* idx = iptr( M-1, 0, 0, L, M, stride, offset ); -* // returns 3 -* -* idx = iptr( 0, 1, 0, L, M, stride, offset ); -* // returns 4 -* -* // ... -* -* idx = iptr( M-1, L-1, 1, L, M, stride, offset ); -* // returns 23 -*/ -function iptr( i, k, j, L, M, stride, offset ) { - var n = i + ( ( k+(j*L) ) * M ); - return ( n*stride ) + offset; -} - -/** -* Resolves an index into the output array. -* -* ## Notes -* -* When writing to an output array stored in linear memory, we can reinterpret the array as a three-dimensional logical view containing `L` independent sub-sequences having three "columns" corresponding to the three components of a radix-3 stage (with real and imaginary parts of each component interleaved along each sub-sequence) and where each "column" has `M` elements. -* -* Accordingly, the following is a logical view of an output array (zero-based indexing) which contains `L = 3` transforms and in which each "column" sub-sequence has length `M = 4`: -* -* ```text -* j = 0 (component 0) j = 1 (component 1) j = 2 (component 2) -* k = 0 ─┬───────────────────────────────────────┬───────────────────────────────────────┬───────────────────────────────────────┐ -* │ out(0,0,0) out(1,0,0) ... out(3,0,0) │ out(0,1,0) out(1,1,0) ... out(3,1,0) │ out(0,2,0) out(1,2,0) ... out(3,2,0) │ -* └───────────────────────────────────────┴───────────────────────────────────────┴───────────────────────────────────────┤ -* k = 1 ─┬───────────────────────────────────────┬───────────────────────────────────────┬───────────────────────────────────────┤ -* │ out(0,0,1) out(1,0,1) ... out(3,0,1) │ out(0,1,1) out(1,1,1) ... out(3,1,1) │ out(0,2,1) out(1,2,1) ... out(3,2,1) │ -* └───────────────────────────────────────┴───────────────────────────────────────┴───────────────────────────────────────┤ -* k = 2 ─┬───────────────────────────────────────┬───────────────────────────────────────┬───────────────────────────────────────┤ -* │ out(0,0,2) out(1,0,2) ... out(3,0,2) │ out(0,1,2) out(1,1,2) ... out(3,1,2) │ out(0,2,2) out(1,2,2) ... out(3,2,2) │ -* └───────────────────────────────────────┴───────────────────────────────────────┴───────────────────────────────────────┘ -* ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ -* i = 0 1 M-1 0 1 M-1 0 1 M-1 -* ``` -* -* In the above, -* -* - `i` is the fastest varying index, which walks within one short "column" sub-sequence. -* - `j` selects between one of the three components (0, 1, or 2). -* - `k` specifies the index of one of the `L` independent transforms we are processing. -* -* In linear memory, the three-dimensional logical view is arranged as follows: -* -* ```text -* | out(0,0,0)...out(3,0,0) | out(0,1,0)...out(3,1,0) | out(0,2,0)...out(3,2,0) | out(0,0,1)...out(3,0,1) | ... | out(0,2,2)...out(3,2,2) | -* ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ -* 0 M-1 M 2M-1 2M 3M-1 3M 4M-1 (3L-1)M 3LM-1 -* ``` -* -* As may be observed, when resolving an index in the output array, the `j` and `k` dimensions are swapped relative index resolution in the input array. This stems from `radf3` being only one stage in a multi-stage driver which alternates between using `cc` and `out` as workspace buffers. After each stage, the next stage reads what the previous stage wrote. -* -* Each stage expects a transpose, and, in order to avoid explicit transposition between the stages, we swap the last two logical dimensions while still maintaining cache locality within the inner loop logical dimension, as indexed by `i`. -* -* @private -* @param {NonNegativeInteger} i - index of an element within a sub-sequence -* @param {NonNegativeInteger} j - index specifying which of the three complex components we are in (0, 1, or 2) -* @param {NonNegativeInteger} k - index of the sub-sequence being transformed -* @param {NonNegativeInteger} M - sub-sequence length -* @param {integer} stride - stride length of the output array -* @param {NonNegativeInteger} offset - index specifying the first indexed element in the output array -* @returns {NonNegativeInteger} computed index -* -* @example -* var stride = 1; -* var offset = 0; -* -* var M = 4; // sub-sequence length -* var L = 3; // number of sub-sequences -* -* var idx = optr( 0, 0, 0, M, stride, offset ); -* // returns 0 -* -* idx = optr( 1, 0, 0, M, stride, offset ); -* // returns 1 -* -* idx = optr( M-1, 0, 0, M, stride, offset ); -* // returns 3 -* -* idx = optr( 0, 1, 0, M, stride, offset ); -* // returns 4 -* -* // ... -* -* idx = optr( M-1, 2, L-1, M, stride, offset ); -* // returns 35 -*/ -function optr( i, j, k, M, stride, offset ) { - var n = i + ( ( j+(k*3) ) * M ); - return ( n*stride ) + offset; -} - - -// MAIN // - -/** -* Performs one radix-3 stage within a forward Fourier transform for a real-valued sequence. -* -* @private -* @param {NonNegativeInteger} M - number of elements in each sub-sequence to be transformed -* @param {NonNegativeInteger} L - number of sub-sequences to be transformed -* @param {Collection} cc - input array containing the sub-sequences to be transformed -* @param {integer} sc - stride length for `cc` -* @param {NonNegativeInteger} oc - index offset for `cc` -* @param {Collection} out - output array containing transformed sub-sequences -* @param {integer} so - stride length for `out` -* @param {NonNegativeInteger} oo - index offset for `out` -* @param {Collection} twiddles1 - first array containing twiddle factors -* @param {integer} st1 - stride length for `twiddles1` -* @param {NonNegativeInteger} ot1 - index offset for `twiddles1` -* @param {Collection} twiddles2 - second array containing twiddle factors -* @param {integer} st2 - stride length for `twiddles2` -* @param {NonNegativeInteger} ot2 - index offset for `twiddles2` -* @returns {void} -*/ -function radf3( M, L, cc, sc, oc, out, so, oo, twiddles1, st1, ot1, twiddles2, st2, ot2 ) { // eslint-disable-line max-params - var it11; - var it12; - var it21; - var it22; - var tr2; - var ti2; - var tr3; - var ti3; - var cr2; - var ci2; - var dr2; - var di2; - var dr3; - var di3; - var ip1; - var ip2; - var ip3; - var io; - var im; - var i; - var k; - - /* - * First, perform the core butterfly for each sub-sequence being transformed. - * - * In the following loop, we handle harmonic `n = 0` for every transform. As described for `iptr`, the input array is interpreted as a three-dimensional array, containing three "rows" per sub-sequence. - * - * row0 = input component 0 (j = 0) - * row1 = input component 1 (j = 1) - * row2 = input component 2 (j = 2) - * - * For a radix-3 forward FFT of a real-valued signal `x` and `n = 0`, - * - * taur = cos(2π/3) - * taui = sin(2π/3) - * - * x[0] = row0 + row1 + row2 - * x[2M] = taui * ( row2-row1 ) - * x[M] = row0 + ( taur * ( row1+row2 ) ) - * - * Because `W_3^0 = 1`, no twiddle multiplication is necessary beyond these constant factors (`taur` and `taui`). - */ - for ( k = 0; k < L; k++ ) { - ip1 = iptr( 0, k, 0, L, M, sc, oc ); // real part row 0 - ip2 = iptr( 0, k, 1, L, M, sc, oc ); // real part row 1 - ip3 = iptr( 0, k, 2, L, M, sc, oc ); // real part row 2 - - cr2 = cc[ ip2 ] + cc[ ip3 ]; - - io = optr( 0, 0, k, M, so, oo ); - out[ io ] = cc[ ip1 ] + cr2; // row0 + row1 + row2 - - io = optr( 0, 2, k, M, so, oo ); - out[ io ] = TAUI * ( cc[ ip3 ] - cc[ ip2 ] ); // taui * ( row2-row1 ) - - io = optr( M-1, 1, k, M, so, oo ); - out[ io ] = cc[ ip1 ] + ( TAUR * cr2 ); // row0 + ( taur * ( row1+row2 ) ) - } - // When the number of elements in a sub-sequence is less than `2`, there is nothing more to do, as the above butterfly produced the full result... - if ( M < 2 ) { - return; - } - /* - * Next, apply the general case where we need to loop through the non-trivial harmonics. - * - * For each harmonic `n = 1, ..., M/2-1`, we need to - * - * - recover three spectra from the three input rows. - * - apply radix-3 twiddle factors to rows 1 and 2, then combine with row 0 to form three output columns. - * - form the following - * - * x[3n] = X₀ + (W₁⋅X₁ + W₂⋅X₂) => column 0 - * x[3n+1] = X₀ + taur⋅(W₁⋅X₁ + W₂⋅X₂) + taui⋅i⋅(W₁⋅X₁ - W₂⋅X₂) => column 2 - * x[3n+2] = X₀ + taur⋅(W₁⋅X₁ + W₂⋅X₂) - taui⋅i⋅(W₁⋅X₁ - W₂⋅X₂) => column 1 - * - * The mirror index `im = M - i` selects the conjugate-symmetric partner, thus allowing the routine to read each symmetry pair only once. - */ - // Loop over each sub-sequence to be transformed... - for ( k = 0; k < L; k++ ) { - // Loop over the elements in each sub-sequence... - for ( i = 2; i < M; i += 2 ) { - im = M - i; // "mirror" index - - // Resolve twiddle factor indices for component 1: - it11 = ( (i-2)*st1 ) + ot1; // cos(θ) for component 1 - it12 = ( (i-1)*st1 ) + ot1; // sin(θ) for component 1 - - // Resolve twiddle factor indices for component 2: - it21 = ( (i-2)*st2 ) + ot2; // cos(θ) for component 2 - it22 = ( (i-1)*st2 ) + ot2; // sin(θ) for component 2 - - // Load component 1 data... - ip1 = iptr( i-1, k, 1, L, M, sc, oc ); // real part component 1 - ip2 = iptr( i, k, 1, L, M, sc, oc ); // imag part component 1 - - // Apply twiddle factor for component 1: - dr2 = ( twiddles1[ it11 ] * cc[ ip1 ] ) + ( twiddles1[ it12 ] * cc[ ip2 ] ); - di2 = ( twiddles1[ it11 ] * cc[ ip2 ] ) - ( twiddles1[ it12 ] * cc[ ip1 ] ); - - // Load component 2 data... - ip1 = iptr( i-1, k, 2, L, M, sc, oc ); // real part component 2 - ip2 = iptr( i, k, 2, L, M, sc, oc ); // imag part component 2 - - // Apply twiddle factor for component 2: - dr3 = ( twiddles2[ it21 ] * cc[ ip1 ] ) + ( twiddles2[ it22 ] * cc[ ip2 ] ); - di3 = ( twiddles2[ it21 ] * cc[ ip2 ] ) - ( twiddles2[ it22 ] * cc[ ip1 ] ); - - // Combine the twiddled components: - cr2 = dr2 + dr3; // sum of real parts - ci2 = di2 + di3; // sum of imag parts - - // Load component 0 data... - ip1 = iptr( i-1, k, 0, L, M, sc, oc ); // real part component 0 - io = optr( i-1, 0, k, M, so, oo ); - out[ io ] = cc[ ip1 ] + cr2; - - ip2 = iptr( i, k, 0, L, M, sc, oc ); // imag part component 0 - io = optr( i, 0, k, M, so, oo ); - out[ io ] = cc[ ip2 ] + ci2; - - // Intermediate results for components 1 and 2: - tr2 = cc[ ip1 ] + ( TAUR * cr2 ); - ti2 = cc[ ip2 ] + ( TAUR * ci2 ); - tr3 = TAUI * ( di2 - di3 ); - ti3 = TAUI * ( dr3 - dr2 ); - - // Output component 1: - io = optr( i-1, 2, k, M, so, oo ); - out[ io ] = tr2 + tr3; - - io = optr( im-1, 1, k, M, so, oo ); - out[ io ] = tr2 - tr3; - - // Output component 2: - io = optr( i, 2, k, M, so, oo ); - out[ io ] = ti2 + ti3; - - io = optr( im, 1, k, M, so, oo ); - out[ io ] = ti3 - ti2; - } - } -} - - -// EXPORTS // - -module.exports = radf3; diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/rfftf/lib/radf4.js b/lib/node_modules/@stdlib/fft/base/fftpack/rfftf/lib/radf4.js deleted file mode 100644 index 49e12bd33210..000000000000 --- a/lib/node_modules/@stdlib/fft/base/fftpack/rfftf/lib/radf4.js +++ /dev/null @@ -1,492 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2026 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -* -* -* ## Notice -* -* The original C code and copyright notice are from the [PFFFT library]{@link https://github.com/marton78/pffft/blob/0b4ee12c4ba45a4a8e567550c16d96d1679f50ce/src/fftpack.c}. The implementation follows the original, but has been modified for JavaScript. -* -* ```text -* Copyright (c) 2004 the University Corporation for Atmospheric -* Research ("UCAR"). All rights reserved. Developed by NCAR's -* Computational and Information Systems Laboratory, UCAR, -* www.cisl.ucar.edu. -* -* Redistribution and use of the Software in source and binary forms, -* with or without modification, is permitted provided that the -* following conditions are met: -* -* - Neither the names of NCAR's Computational and Information Systems -* Laboratory, the University Corporation for Atmospheric Research, -* nor the names of its sponsors or contributors may be used to -* endorse or promote products derived from this Software without -* specific prior written permission. -* -* - Redistributions of source code must retain the above copyright -* notices, this list of conditions, and the disclaimer below. -* -* - Redistributions in binary form must reproduce the above copyright -* notice, this list of conditions, and the disclaimer below in the -* documentation and/or other materials provided with the -* distribution. -* -* THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -* EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO THE WARRANTIES OF -* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -* NONINFRINGEMENT. IN NO EVENT SHALL THE CONTRIBUTORS OR COPYRIGHT -* HOLDERS BE LIABLE FOR ANY CLAIM, INDIRECT, INCIDENTAL, SPECIAL, -* EXEMPLARY, OR CONSEQUENTIAL DAMAGES OR OTHER LIABILITY, WHETHER IN AN -* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE -* SOFTWARE. -* ``` -*/ - -/* eslint-disable max-len, max-statements */ - -'use strict'; - -// MODULES // - -var SQRT_HALF = require( '@stdlib/constants/float64/sqrt-half' ); - - -// FUNCTIONS // - -/** -* Resolves an index into the input array. -* -* ## Notes -* -* In a forward real FFT, the previous stage writes its results as four "rows" per sub-sequence. -* -* Thus, when reading from an input array stored in linear memory, we can reinterpret the array as a three-dimensional logical view containing `L` independent sub-sequences having four "rows" (components 0, 1, 2, and 3) and where each "row" is arranged as `M*L` contiguous elements corresponding to interleaved real and imaginary components. -* -* Accordingly, the following is a logical view of an input array (zero-based indexing) which contains `L = 3` transforms and in which each sub-sequence has length `M = 4`: -* -* ```text -* │ k = 0 k = 1 k = 2 -* │ ──────────────────────────────────────────────────────────────────────────→ k -* j = 0 │ cc(0,0,0) ... cc(3,0,0) cc(0,1,0) ... cc(3,1,0) cc(0,2,0) ... cc(3,2,0) -* │ -* j = 1 │ cc(0,0,1) ... cc(3,0,1) cc(0,1,1) ... cc(3,1,1) cc(0,2,1) ... cc(3,2,1) -* │ -* j = 2 │ cc(0,0,2) ... cc(3,0,2) cc(0,1,2) ... cc(3,1,2) cc(0,2,2) ... cc(3,2,2) -* │ -* j = 3 │ cc(0,0,3) ... cc(3,0,3) cc(0,1,3) ... cc(3,1,3) cc(0,2,3) ... cc(3,2,3) -* └───────────────────────────────────────────────────────────────────────────→ i -* ↑ ↑ ↑ ↑ ↑ ↑ -* i = 0 M-1 0 M-1 0 M-1 -* ``` -* -* In the above, -* -* - `i` is the fastest varying index, which walks within one short sub-sequence corresponding to one of the four component rows. -* - `j` selects between the four component rows (0, 1, 2, or 3). -* - `k` specifies the index of one of the `L` independent transforms we are processing. -* -* In linear memory, the three-dimensional logical view is arranged as follows: -* -* ```text -* | cc(0,0,0)...cc(3,0,0) ... cc(0,2,0)...cc(3,2,0) | cc(0,0,1)...cc(3,0,1) ... cc(0,2,1)...cc(3,2,1) | ... | cc(0,0,3)...cc(3,0,3) ... cc(0,2,3)...cc(3,2,3) | -* ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ -* 0 M-1 LM LM-1 (L+1)M (L+1)M-1 (2L-1)M 2LM-1 3LM (3L+1)M-1 (4L-1)M 4LM-1 -* ``` -* -* @private -* @param {NonNegativeInteger} i - index of an element within a sub-sequence -* @param {NonNegativeInteger} k - index of the sub-sequence being transformed -* @param {NonNegativeInteger} j - input row -* @param {NonNegativeInteger} L - number of sub-sequences -* @param {NonNegativeInteger} M - sub-sequence length -* @param {integer} stride - stride length of the input array -* @param {NonNegativeInteger} offset - index specifying the first indexed element in the input array -* @returns {NonNegativeInteger} computed index -* -* @example -* var stride = 1; -* var offset = 0; -* -* var M = 4; // sub-sequence length -* var L = 3; // number of sub-sequences -* -* var idx = iptr( 0, 0, 0, L, M, stride, offset ); -* // returns 0 -* -* idx = iptr( 1, 0, 0, L, M, stride, offset ); -* // returns 1 -* -* idx = iptr( M-1, 0, 0, L, M, stride, offset ); -* // returns 3 -* -* idx = iptr( 0, 1, 0, L, M, stride, offset ); -* // returns 4 -* -* // ... -* -* idx = iptr( M-1, L-1, 1, L, M, stride, offset ); -* // returns 23 -*/ -function iptr( i, k, j, L, M, stride, offset ) { - var n = i + ( ( k+(j*L) ) * M ); - return ( n*stride ) + offset; -} - -/** -* Resolves an index into the output array. -* -* ## Notes -* -* When writing to an output array stored in linear memory, we can reinterpret the array as a three-dimensional logical view containing `L` independent sub-sequences having four "columns" corresponding to the four components of a radix-4 stage (with real and imaginary parts of each component interleaved along each sub-sequence) and where each "column" has `M` elements. -* -* Accordingly, the following is a logical view of an output array (zero-based indexing) which contains `L = 3` transforms and in which each "column" sub-sequence has length `M = 4`: -* -* ```text -* j = 0 (component 0) j = 1 (component 1) j = 2 (component 2) j = 3 (component 3) -* k = 0 ─┬───────────────────────────────────────┬───────────────────────────────────────┬───────────────────────────────────────┬───────────────────────────────────────┐ -* │ out(0,0,0) out(1,0,0) ... out(3,0,0) │ out(0,1,0) out(1,1,0) ... out(3,1,0) │ out(0,2,0) out(1,2,0) ... out(3,2,0) │ out(0,3,0) out(1,3,0) ... out(3,3,0) │ -* └───────────────────────────────────────┴───────────────────────────────────────┴───────────────────────────────────────┴───────────────────────────────────────┤ -* k = 1 ─┬───────────────────────────────────────┬───────────────────────────────────────┬───────────────────────────────────────┬───────────────────────────────────────┤ -* │ out(0,0,1) out(1,0,1) ... out(3,0,1) │ out(0,1,1) out(1,1,1) ... out(3,1,1) │ out(0,2,1) out(1,2,1) ... out(3,2,1) │ out(0,3,1) out(1,3,1) ... out(3,3,1) │ -* └───────────────────────────────────────┴───────────────────────────────────────┴───────────────────────────────────────┴───────────────────────────────────────┤ -* k = 2 ─┬───────────────────────────────────────┬───────────────────────────────────────┬───────────────────────────────────────┬───────────────────────────────────────┤ -* │ out(0,0,2) out(1,0,2) ... out(3,0,2) │ out(0,1,2) out(1,1,2) ... out(3,1,2) │ out(0,2,2) out(1,2,2) ... out(3,2,2) │ out(0,3,2) out(1,3,2) ... out(3,3,2) │ -* └───────────────────────────────────────┴───────────────────────────────────────┴───────────────────────────────────────┴───────────────────────────────────────┘ -* ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ -* i = 0 1 M-1 0 1 M-1 0 1 M-1 0 1 M-1 -* ``` -* -* In the above, -* -* - `i` is the fastest varying index, which walks within one short "column" sub-sequence. -* - `j` selects which of the four components (0, 1, 2, or 3). -* - `k` specifies the index of one of the `L` independent transforms we are processing. -* -* In linear memory, the three-dimensional logical view is arranged as follows: -* -* ```text -* | out(0,0,0)...out(3,0,0) | out(0,1,0)...out(3,1,0) | out(0,2,0)...out(3,2,0) | out(0,3,0)...out(3,3,0) | out(0,0,1)...out(3,0,1) | ... | out(0,3,2)...out(3,3,2) | -* ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ -* 0 M-1 M 2M-1 2M 3M-1 3M 4M-1 4M 5M-1 (4L-1)M 4LM-1 -* ``` -* -* As may be observed, when resolving an index in the output array, the `j` and `k` dimensions are swapped relative index resolution in the input array. This stems from `radf4` being only one stage in a multi-stage driver which alternates between using `cc` and `out` as workspace buffers. After each stage, the next stage reads what the previous stage wrote. -* -* Each stage expects a transpose, and, in order to avoid explicit transposition between the stages, we swap the last two logical dimensions while still maintaining cache locality within the inner loop logical dimension, as indexed by `i`. -* -* @private -* @param {NonNegativeInteger} i - index of an element within a sub-sequence -* @param {NonNegativeInteger} j - index specifying which of the four complex components we are in (0, 1, 2, or 3) -* @param {NonNegativeInteger} k - index of the sub-sequence being transformed -* @param {NonNegativeInteger} M - sub-sequence length -* @param {integer} stride - stride length of the output array -* @param {NonNegativeInteger} offset - index specifying the first indexed element in the output array -* @returns {NonNegativeInteger} computed index -* -* @example -* var stride = 1; -* var offset = 0; -* -* var M = 4; // sub-sequence length -* var L = 3; // number of sub-sequences -* -* var idx = optr( 0, 0, 0, M, stride, offset ); -* // returns 0 -* -* idx = optr( 1, 0, 0, M, stride, offset ); -* // returns 1 -* -* idx = optr( M-1, 0, 0, M, stride, offset ); -* // returns 3 -* -* idx = optr( 0, 1, 0, M, stride, offset ); -* // returns 4 -* -* // ... -* -* idx = optr( M-1, 3, L-1, M, stride, offset ); -* // returns 47 -*/ -function optr( i, j, k, M, stride, offset ) { - var n = i + ( ( j+(k*4) ) * M ); - return ( n*stride ) + offset; -} - - -// MAIN // - -/** -* Performs one radix-4 stage within a forward Fourier transform for a real-valued sequence. -* -* @private -* @param {NonNegativeInteger} M - number of elements in each sub-sequence to be transformed -* @param {NonNegativeInteger} L - number of sub-sequences to be transformed -* @param {Collection} cc - input array containing the sub-sequences to be transformed -* @param {integer} sc - stride length for `cc` -* @param {NonNegativeInteger} oc - index offset for `cc` -* @param {Collection} out - output array containing transformed sub-sequences -* @param {integer} so - stride length for `out` -* @param {NonNegativeInteger} oo - index offset for `out` -* @param {Collection} twiddles1 - first array containing twiddle factors -* @param {integer} st1 - stride length for `twiddles1` -* @param {NonNegativeInteger} ot1 - index offset for `twiddles1` -* @param {Collection} twiddles2 - second array containing twiddle factors -* @param {integer} st2 - stride length for `twiddles2` -* @param {NonNegativeInteger} ot2 - index offset for `twiddles2` -* @param {Collection} twiddles3 - third array containing twiddle factors -* @param {integer} st3 - stride length for `twiddles3` -* @param {NonNegativeInteger} ot3 - index offset for `twiddles3` -* @returns {void} -*/ -function radf4( M, L, cc, sc, oc, out, so, oo, twiddles1, st1, ot1, twiddles2, st2, ot2, twiddles3, st3, ot3 ) { // eslint-disable-line max-params - var it11; - var it12; - var it21; - var it22; - var it31; - var it32; - var tr1; - var tr2; - var tr3; - var tr4; - var ti1; - var ti2; - var ti3; - var ti4; - var cr2; - var cr3; - var cr4; - var ci2; - var ci3; - var ci4; - var ip1; - var ip2; - var ip3; - var ip4; - var io; - var im; - var i; - var k; - - /* - * First, perform the core butterfly for each sub-sequence being transformed. - * - * In the following loop, we handle harmonic `n = 0` for every transform. As described for `iptr`, the input array is interpreted as a three-dimensional array, containing four "rows" per sub-sequence. - * - * row0 = input component 0 (j = 0) - * row1 = input component 1 (j = 1) - * row2 = input component 2 (j = 2) - * row3 = input component 3 (j = 3) - * - * For a radix-4 forward FFT of a real-valued signal `x` and `n = 0`, - * - * tr1 = row1 + row3 - * tr2 = row0 + row2 - * - * x[0] = tr1 + tr2 - * x[2M-1] = row0 - row2 - * x[2M] = row3 - row1 - * x[4M-1] = tr2 - tr1 - * - * Because `W_4^0 = 1`, no twiddle multiplication is necessary. - */ - for ( k = 0; k < L; k++ ) { - ip1 = iptr( 0, k, 0, L, M, sc, oc ); // real part row 0 - ip2 = iptr( 0, k, 1, L, M, sc, oc ); // real part row 1 - ip3 = iptr( 0, k, 2, L, M, sc, oc ); // real part row 2 - ip4 = iptr( 0, k, 3, L, M, sc, oc ); // real part row 3 - - tr1 = cc[ ip2 ] + cc[ ip4 ]; // row1 + row3 - tr2 = cc[ ip1 ] + cc[ ip3 ]; // row0 + row2 - - io = optr( 0, 0, k, M, so, oo ); - out[ io ] = tr1 + tr2; - - io = optr( M-1, 3, k, M, so, oo ); - out[ io ] = tr2 - tr1; - - io = optr( M-1, 1, k, M, so, oo ); - out[ io ] = cc[ ip1 ] - cc[ ip3 ]; - - io = optr( 0, 2, k, M, so, oo ); - out[ io ] = cc[ ip4 ] - cc[ ip2 ]; - } - // When the number of elements in a sub-sequence is equal to `1`, there is nothing more to do, as the above butterfly produced the full result... - if ( M < 2 ) { - return; - } - /* - * Next, apply the general case where we need to loop through the non-trivial harmonics. - * - * For each harmonic `n = 1, ..., M/2-1`, we need to - * - * - recover four spectra from the four input rows. - * - apply radix-4 twiddle factors to rows 1, 2, and 3, then combine with row 0 to form four output columns. - * - form the following - * - * x[4n] = X₀ + W₂·X₂ + (W₁·X₁ + W₃·X₃) => column 0 - * x[4n+1] = X₀ + W₂·X₂ - (W₁·X₁ + W₃·X₃) => column 3 - * x[4n+2] = X₀ - W₂·X₂ + i·(W₁·X₁ - W₃·X₃) => column 2 - * x[4n+3] = X₀ - W₂·X₂ - i·(W₁·X₁ - W₃·X₃) => column 1 - * - * The mirror index `im = M - i` selects the conjugate-symmetric partner, thus allowing the routine to read each symmetry pair only once. - */ - if ( M >= 3 ) { - // Loop over each sub-sequence to be transformed... - for ( k = 0; k < L; k++ ) { - // Loop over the elements in each sub-sequence... - for ( i = 2; i < M; i += 2 ) { - im = M - i; // "mirror" index - - // Resolve twiddle factor indices for component 1: - it11 = ( (i-2)*st1 ) + ot1; // cos(θ) for component 1 - it12 = ( (i-1)*st1 ) + ot1; // sin(θ) for component 1 - - // Resolve twiddle factor indices for component 2: - it21 = ( (i-2)*st2 ) + ot2; // cos(θ) for component 2 - it22 = ( (i-1)*st2 ) + ot2; // sin(θ) for component 2 - - // Resolve twiddle factor indices for component 3: - it31 = ( (i-2)*st3 ) + ot3; // cos(θ) for component 3 - it32 = ( (i-1)*st3 ) + ot3; // sin(θ) for component 3 - - // Load component 1 data and apply twiddle... - ip1 = iptr( i-1, k, 1, L, M, sc, oc ); // real part component 1 - ip2 = iptr( i, k, 1, L, M, sc, oc ); // imag part component 1 - - // Apply the twiddle factors for component 1: - cr2 = ( twiddles1[ it11 ] * cc[ ip1 ] ) + ( twiddles1[ it12 ] * cc[ ip2 ] ); - ci2 = ( twiddles1[ it11 ] * cc[ ip2 ] ) - ( twiddles1[ it12 ] * cc[ ip1 ] ); - - // Load component 2 data and apply twiddle... - ip1 = iptr( i-1, k, 2, L, M, sc, oc ); // real part component 2 - ip2 = iptr( i, k, 2, L, M, sc, oc ); // imag part component 2 - - // Apply the twiddle factors for component 2: - cr3 = ( twiddles2[ it21 ] * cc[ ip1 ] ) + ( twiddles2[ it22 ] * cc[ ip2 ] ); - ci3 = ( twiddles2[ it21 ] * cc[ ip2 ] ) - ( twiddles2[ it22 ] * cc[ ip1 ] ); - - // Load component 3 data and apply twiddle... - ip1 = iptr( i-1, k, 3, L, M, sc, oc ); // real part component 3 - ip2 = iptr( i, k, 3, L, M, sc, oc ); // imag part component 3 - - // Apply the twiddle factors for component 3: - cr4 = ( twiddles3[ it31 ] * cc[ ip1 ] ) + ( twiddles3[ it32 ] * cc[ ip2 ] ); - ci4 = ( twiddles3[ it31 ] * cc[ ip2 ] ) - ( twiddles3[ it32 ] * cc[ ip1 ] ); - - // Radix-4 butterfly intermediate computations: - tr1 = cr2 + cr4; - tr4 = cr4 - cr2; - ti1 = ci2 + ci4; - ti4 = ci2 - ci4; - - // Load component 0 data and compute intermediates... - ip1 = iptr( i-1, k, 0, L, M, sc, oc ); // real part component 0 - tr2 = cc[ ip1 ] + cr3; - tr3 = cc[ ip1 ] - cr3; - - ip2 = iptr( i, k, 0, L, M, sc, oc ); // imag part component 0 - ti2 = cc[ ip2 ] + ci3; - ti3 = cc[ ip2 ] - ci3; - - // Output column 0 (real part): - io = optr( i-1, 0, k, M, so, oo ); - out[ io ] = tr1 + tr2; - - // Output column 3 (real part): - io = optr( im-1, 3, k, M, so, oo ); - out[ io ] = tr2 - tr1; - - // Output column 0 (imag part): - io = optr( i, 0, k, M, so, oo ); - out[ io ] = ti1 + ti2; - - // Output column 3 (imag part): - io = optr( im, 3, k, M, so, oo ); - out[ io ] = ti1 - ti2; - - // Output column 2 (real part): - io = optr( i-1, 2, k, M, so, oo ); - out[ io ] = ti4 + tr3; - - // Output column 1 (real part): - io = optr( im-1, 1, k, M, so, oo ); - out[ io ] = tr3 - ti4; - - // Output column 2 (imag part): - io = optr( i, 2, k, M, so, oo ); - out[ io ] = tr4 + ti3; - - // Output column 1 (imag part): - io = optr( im, 1, k, M, so, oo ); - out[ io ] = tr4 - ti3; - } - } - - // When `M` is odd, there is no Nyquist pair to process, so we do not need to perform any further transformations... - if ( M%2 === 1 ) { - return; - } - } - - /* - * Lastly, handle the Nyquist frequency where `i = M-1` (i.e., the last element of each sub-sequence). - * - * When `M` is even, the Nyquist index is `i = M/2`. In this stage, we've stored that element at the end of each sub-sequence (i.e., `i = M-1` in the packed layout). - * - * At this point, only real components exist for rows 1 and 3 (imaginary parts are zero due to symmetry), and the twiddle multiplication simplifies to involve √(1/2) factors. - * - * In this case, - * - * ti1 = -√(1/2) ⋅ (row1 + row3) - * tr1 = √(1/2) ⋅ (row1 - row3) - * - * where - * - * row0 = Re(X₀) - * row1 = Re(X₁) (imaginary part is zero) - * row2 = Re(X₂) - * row3 = Re(X₃) (imaginary part is zero) - */ - for ( k = 0; k < L; k++ ) { - ip1 = iptr( M-1, k, 1, L, M, sc, oc ); // Re(X₁) - ip2 = iptr( M-1, k, 3, L, M, sc, oc ); // Re(X₃) - - ti1 = -SQRT_HALF * ( cc[ ip1 ] + cc[ ip2 ] ); - tr1 = SQRT_HALF * ( cc[ ip1 ] - cc[ ip2 ] ); - - ip3 = iptr( M-1, k, 0, L, M, sc, oc ); // Re(X₀) - ip4 = iptr( M-1, k, 2, L, M, sc, oc ); // Re(X₂) - - io = optr( M-1, 0, k, M, so, oo ); - out[ io ] = cc[ ip3 ] + tr1; - - io = optr( M-1, 2, k, M, so, oo ); - out[ io ] = cc[ ip3 ] - tr1; - - io = optr( 0, 1, k, M, so, oo ); - out[ io ] = ti1 - cc[ ip4 ]; - - io = optr( 0, 3, k, M, so, oo ); - out[ io ] = cc[ ip4 ] + ti1; - } -} - - -// EXPORTS // - -module.exports = radf4; diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/rfftf/lib/radf5.js b/lib/node_modules/@stdlib/fft/base/fftpack/rfftf/lib/radf5.js deleted file mode 100644 index 1cbdd24536d5..000000000000 --- a/lib/node_modules/@stdlib/fft/base/fftpack/rfftf/lib/radf5.js +++ /dev/null @@ -1,511 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2026 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -* -* -* ## Notice -* -* The original C code and copyright notice are from the [PFFFT library]{@link https://github.com/marton78/pffft/blob/0b4ee12c4ba45a4a8e567550c16d96d1679f50ce/src/fftpack.c}. The implementation follows the original, but has been modified for JavaScript. -* -* ```text -* Copyright (c) 2004 the University Corporation for Atmospheric -* Research ("UCAR"). All rights reserved. Developed by NCAR's -* Computational and Information Systems Laboratory, UCAR, -* www.cisl.ucar.edu. -* -* Redistribution and use of the Software in source and binary forms, -* with or without modification, is permitted provided that the -* following conditions are met: -* -* - Neither the names of NCAR's Computational and Information Systems -* Laboratory, the University Corporation for Atmospheric Research, -* nor the names of its sponsors or contributors may be used to -* endorse or promote products derived from this Software without -* specific prior written permission. -* -* - Redistributions of source code must retain the above copyright -* notices, this list of conditions, and the disclaimer below. -* -* - Redistributions in binary form must reproduce the above copyright -* notice, this list of conditions, and the disclaimer below in the -* documentation and/or other materials provided with the -* distribution. -* -* THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -* EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO THE WARRANTIES OF -* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -* NONINFRINGEMENT. IN NO EVENT SHALL THE CONTRIBUTORS OR COPYRIGHT -* HOLDERS BE LIABLE FOR ANY CLAIM, INDIRECT, INCIDENTAL, SPECIAL, -* EXEMPLARY, OR CONSEQUENTIAL DAMAGES OR OTHER LIABILITY, WHETHER IN AN -* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE -* SOFTWARE. -* ``` -*/ - -/* eslint-disable max-len, max-statements */ - -'use strict'; - -// VARIABLES // - -// cos( 2π/5 ): -var TR11 = 0.309016994374947; - -// sin( 2π/5 ): -var TI11 = 0.951056516295154; - -// cos( 4π/5 ): -var TR12 = -0.809016994374947; - -// sin( 4π/5 ): -var TI12 = 0.587785252292473; - - -// FUNCTIONS // - -/** -* Resolves an index into the input array. -* -* ## Notes -* -* In a forward real FFT, the previous stage writes its results as five "rows" per sub-sequence. -* -* Thus, when reading from an input array stored in linear memory, we can reinterpret the array as a three-dimensional logical view containing `L` independent sub-sequences having five "rows" (components 0, 1, 2, 3, and 4) and where each "row" is arranged as `M*L` contiguous elements corresponding to interleaved real and imaginary components. -* -* Accordingly, the following is a logical view of an input array (zero-based indexing) which contains `L = 3` transforms and in which each sub-sequence has length `M = 4`: -* -* ```text -* │ k = 0 k = 1 k = 2 -* │ ──────────────────────────────────────────────────────────────────────────→ k -* j = 0 │ cc(0,0,0) ... cc(3,0,0) cc(0,1,0) ... cc(3,1,0) cc(0,2,0) ... cc(3,2,0) -* │ -* j = 1 │ cc(0,0,1) ... cc(3,0,1) cc(0,1,1) ... cc(3,1,1) cc(0,2,1) ... cc(3,2,1) -* │ -* j = 2 │ cc(0,0,2) ... cc(3,0,2) cc(0,1,2) ... cc(3,1,2) cc(0,2,2) ... cc(3,2,2) -* │ -* j = 3 │ cc(0,0,3) ... cc(3,0,3) cc(0,1,3) ... cc(3,1,3) cc(0,2,3) ... cc(3,2,3) -* │ -* j = 4 │ cc(0,0,4) ... cc(3,0,4) cc(0,1,4) ... cc(3,1,4) cc(0,2,4) ... cc(3,2,4) -* └───────────────────────────────────────────────────────────────────────────→ i -* ↑ ↑ ↑ ↑ ↑ ↑ -* i = 0 M-1 0 M-1 0 M-1 -* ``` -* -* In the above, -* -* - `i` is the fastest varying index, which walks within one short sub-sequence corresponding to one of the five component rows. -* - `j` selects between the five component rows (0, 1, 2, 3, or 4). -* - `k` specifies the index of one of the `L` independent transforms we are processing. -* -* In linear memory, the three-dimensional logical view is arranged as follows: -* -* ```text -* | cc(0,0,0)...cc(3,0,0) ... cc(0,2,0)...cc(3,2,0) | cc(0,0,1)...cc(3,0,1) ... cc(0,2,1)...cc(3,2,1) | ... | cc(0,0,4)...cc(3,0,4) ... cc(0,2,4)...cc(3,2,4) | -* ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ -* 0 M-1 LM LM-1 (L+1)M (L+1)M-1 (2L-1)M 2LM-1 4LM (4L+1)M-1 (5L-1)M 5LM-1 -* ``` -* -* @private -* @param {NonNegativeInteger} i - index of an element within a sub-sequence -* @param {NonNegativeInteger} k - index of the sub-sequence being transformed -* @param {NonNegativeInteger} j - input row -* @param {NonNegativeInteger} L - number of sub-sequences -* @param {NonNegativeInteger} M - sub-sequence length -* @param {integer} stride - stride length of the input array -* @param {NonNegativeInteger} offset - index specifying the first indexed element in the input array -* @returns {NonNegativeInteger} computed index -* -* @example -* var stride = 1; -* var offset = 0; -* -* var M = 4; // sub-sequence length -* var L = 3; // number of sub-sequences -* -* var idx = iptr( 0, 0, 0, L, M, stride, offset ); -* // returns 0 -* -* idx = iptr( 1, 0, 0, L, M, stride, offset ); -* // returns 1 -* -* idx = iptr( M-1, 0, 0, L, M, stride, offset ); -* // returns 3 -* -* idx = iptr( 0, 1, 0, L, M, stride, offset ); -* // returns 4 -* -* // ... -* -* idx = iptr( M-1, L-1, 1, L, M, stride, offset ); -* // returns 23 -*/ -function iptr( i, k, j, L, M, stride, offset ) { - var n = i + ( ( k+(j*L) ) * M ); - return ( n*stride ) + offset; -} - -/** -* Resolves an index into the output array. -* -* ## Notes -* -* When writing to an output array stored in linear memory, we can reinterpret the array as a three-dimensional logical view containing `L` independent sub-sequences having five "columns" corresponding to the five components of a radix-5 stage (with real and imaginary parts of each component interleaved along each sub-sequence) and where each "column" has `M` elements. -* -* Accordingly, the following is a logical view of an output array (zero-based indexing) which contains `L = 3` transforms and in which each "column" sub-sequence has length `M = 4`: -* -* ```text -* j = 0 (component 0) j = 1 (component 1) j = 2 (component 2) j = 3 (component 3) j = 4 (component 4) -* k = 0 ─┬───────────────────────────────────────┬───────────────────────────────────────┬───────────────────────────────────────┬───────────────────────────────────────┬───────────────────────────────────────┐ -* │ out(0,0,0) out(1,0,0) ... out(3,0,0) │ out(0,1,0) out(1,1,0) ... out(3,1,0) │ out(0,2,0) out(1,2,0) ... out(3,2,0) │ out(0,3,0) out(1,3,0) ... out(3,3,0) │ out(0,4,0) out(1,4,0) ... out(3,4,0) │ -* └───────────────────────────────────────┴───────────────────────────────────────┴───────────────────────────────────────┴───────────────────────────────────────┴───────────────────────────────────────┤ -* k = 1 ─┬───────────────────────────────────────┬───────────────────────────────────────┬───────────────────────────────────────┬───────────────────────────────────────┬───────────────────────────────────────┤ -* │ out(0,0,1) out(1,0,1) ... out(3,0,1) │ out(0,1,1) out(1,1,1) ... out(3,1,1) │ out(0,2,1) out(1,2,1) ... out(3,2,1) │ out(0,3,1) out(1,3,1) ... out(3,3,1) │ out(0,4,1) out(1,4,1) ... out(3,4,1) │ -* └───────────────────────────────────────┴───────────────────────────────────────┴───────────────────────────────────────┴───────────────────────────────────────┴───────────────────────────────────────┤ -* k = 2 ─┬───────────────────────────────────────┬───────────────────────────────────────┬───────────────────────────────────────┬───────────────────────────────────────┬───────────────────────────────────────┤ -* │ out(0,0,2) out(1,0,2) ... out(3,0,2) │ out(0,1,2) out(1,1,2) ... out(3,1,2) │ out(0,2,2) out(1,2,2) ... out(3,2,2) │ out(0,3,2) out(1,3,2) ... out(3,3,2) │ out(0,4,2) out(1,4,2) ... out(3,4,2) │ -* └───────────────────────────────────────┴───────────────────────────────────────┴───────────────────────────────────────┴───────────────────────────────────────┴───────────────────────────────────────┘ -* ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ -* i = 0 1 M-1 0 1 M-1 0 1 M-1 0 1 M-1 0 1 M-1 -* ``` -* -* In the above, -* -* - `i` is the fastest varying index, which walks within one short "column" sub-sequence. -* - `j` selects which of the five components (0, 1, 2, 3, or 4). -* - `k` specifies the index of one of the `L` independent transforms we are processing. -* -* In linear memory, the three-dimensional logical view is arranged as follows: -* -* ```text -* | out(0,0,0)...out(3,0,0) | out(0,1,0)...out(3,1,0) | out(0,2,0)...out(3,2,0) | out(0,3,0)...out(3,3,0) | out(0,4,0)...out(3,4,0) | out(0,0,1)...out(3,0,1) | ... | out(0,4,2)...out(3,4,2) | -* ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ -* 0 M-1 M 2M-1 2M 3M-1 3M 4M-1 4M 5M-1 5M 6M-1 (5L-1)M 5LM-1 -* ``` -* -* As may be observed, when resolving an index in the output array, the `j` and `k` dimensions are swapped relative index resolution in the input array. This stems from `radf5` being only one stage in a multi-stage driver which alternates between using `cc` and `out` as workspace buffers. After each stage, the next stage reads what the previous stage wrote. -* -* Each stage expects a transpose, and, in order to avoid explicit transposition between the stages, we swap the last two logical dimensions while still maintaining cache locality within the inner loop logical dimension, as indexed by `i`. -* -* @private -* @param {NonNegativeInteger} i - index of an element within a sub-sequence -* @param {NonNegativeInteger} j - index specifying which of the five complex components we are in (0, 1, 2, 3, or 4) -* @param {NonNegativeInteger} k - index of the sub-sequence being transformed -* @param {NonNegativeInteger} M - sub-sequence length -* @param {integer} stride - stride length of the output array -* @param {NonNegativeInteger} offset - index specifying the first indexed element in the output array -* @returns {NonNegativeInteger} computed index -* -* @example -* var stride = 1; -* var offset = 0; -* -* var M = 4; // sub-sequence length -* var L = 3; // number of sub-sequences -* -* var idx = optr( 0, 0, 0, M, stride, offset ); -* // returns 0 -* -* idx = optr( 1, 0, 0, M, stride, offset ); -* // returns 1 -* -* idx = optr( M-1, 0, 0, M, stride, offset ); -* // returns 3 -* -* idx = optr( 0, 1, 0, M, stride, offset ); -* // returns 4 -* -* // ... -* -* idx = optr( M-1, 4, L-1, M, stride, offset ); -* // returns 59 -*/ -function optr( i, j, k, M, stride, offset ) { - var n = i + ( ( j+(k*5) ) * M ); - return ( n*stride ) + offset; -} - - -// MAIN // - -/** -* Performs one radix-5 stage within a forward Fourier transform for a real-valued sequence. -* -* @private -* @param {NonNegativeInteger} M - number of elements in each sub-sequence to be transformed -* @param {NonNegativeInteger} L - number of sub-sequences to be transformed -* @param {Collection} cc - input array containing the sub-sequences to be transformed -* @param {integer} sc - stride length for `cc` -* @param {NonNegativeInteger} oc - index offset for `cc` -* @param {Collection} out - output array containing transformed sub-sequences -* @param {integer} so - stride length for `out` -* @param {NonNegativeInteger} oo - index offset for `out` -* @param {Collection} twiddles1 - first array containing twiddle factors -* @param {integer} st1 - stride length for `twiddles1` -* @param {NonNegativeInteger} ot1 - index offset for `twiddles1` -* @param {Collection} twiddles2 - second array containing twiddle factors -* @param {integer} st2 - stride length for `twiddles2` -* @param {NonNegativeInteger} ot2 - index offset for `twiddles2` -* @param {Collection} twiddles3 - third array containing twiddle factors -* @param {integer} st3 - stride length for `twiddles3` -* @param {NonNegativeInteger} ot3 - index offset for `twiddles3` -* @param {Collection} twiddles4 - fourth array containing twiddle factors -* @param {integer} st4 - stride length for `twiddles4` -* @param {NonNegativeInteger} ot4 - index offset for `twiddles4` -* @returns {void} -*/ -function radf5( M, L, cc, sc, oc, out, so, oo, twiddles1, st1, ot1, twiddles2, st2, ot2, twiddles3, st3, ot3, twiddles4, st4, ot4 ) { // eslint-disable-line max-params - var it11; - var it12; - var it21; - var it22; - var it31; - var it32; - var it41; - var it42; - var ci2; - var ci3; - var ci4; - var ci5; - var cr2; - var cr3; - var cr4; - var cr5; - var dr2; - var dr3; - var dr4; - var dr5; - var di2; - var di3; - var di4; - var di5; - var ti2; - var ti3; - var ti4; - var ti5; - var tr2; - var tr3; - var tr4; - var tr5; - var ip1; - var ip2; - var ip3; - var ip4; - var ip5; - var io; - var im; - var i; - var k; - - /* - * First, perform the core butterfly for each sub-sequence being transformed. - * - * In the following loop, we handle harmonic `n = 0` for every transform. As described for `iptr`, the input array is interpreted as a three-dimensional array, containing five "rows" per sub-sequence. - * - * row0 = input component 0 (j = 0) - * row1 = input component 1 (j = 1) - * row2 = input component 2 (j = 2) - * row3 = input component 3 (j = 3) - * row4 = input component 4 (j = 4) - * - * For a radix-5 forward FFT of a real-valued signal `x` and `n = 0`, - * - * cr2 = row4 + row1 - * ci5 = row4 - row1 - * cr3 = row3 + row2 - * ci4 = row3 - row2 - * - * x[0] = row0 + cr2 + cr3 - * x[M] = row0 + ( TR11*cr2 ) + ( TR12*cr3 ) - * x[2M] = ( TI11*ci5 ) + ( TI12*ci4 ) - * x[3M] = row0 + ( TR12*cr2 ) + ( TR11*cr3 ) - * x[4M] = ( TI12*ci5 ) - ( TI11*ci4 ) - * - * Because `W_5^0 = 1`, no frequency-dependent twiddle multiplication is necessary beyond these constant factors. - */ - for ( k = 0; k < L; k++ ) { - ip1 = iptr( 0, k, 0, L, M, sc, oc ); // row 0 - ip2 = iptr( 0, k, 1, L, M, sc, oc ); // row 1 - ip3 = iptr( 0, k, 2, L, M, sc, oc ); // row 2 - ip4 = iptr( 0, k, 3, L, M, sc, oc ); // row 3 - ip5 = iptr( 0, k, 4, L, M, sc, oc ); // row 4 - - cr2 = cc[ ip5 ] + cc[ ip2 ]; // row4 + row1 - ci5 = cc[ ip5 ] - cc[ ip2 ]; // row4 - row1 - cr3 = cc[ ip4 ] + cc[ ip3 ]; // row3 + row2 - ci4 = cc[ ip4 ] - cc[ ip3 ]; // row3 - row2 - - io = optr( 0, 0, k, M, so, oo ); - out[ io ] = cc[ ip1 ] + cr2 + cr3; - - io = optr( M-1, 1, k, M, so, oo ); - out[ io ] = cc[ ip1 ] + ( TR11 * cr2 ) + ( TR12 * cr3 ); - - io = optr( 0, 2, k, M, so, oo ); - out[ io ] = ( TI11 * ci5 ) + ( TI12 * ci4 ); - - io = optr( M-1, 3, k, M, so, oo ); - out[ io ] = cc[ ip1 ] + ( TR12 * cr2 ) + ( TR11 * cr3 ); - - io = optr( 0, 4, k, M, so, oo ); - out[ io ] = ( TI12 * ci5 ) - ( TI11 * ci4 ); - } - // When the number of elements in a sub-sequence is less than `2`, there is nothing more to do, as the above butterfly produced the full result... - if ( M < 2 ) { - return; - } - /* - * Next, apply the general case where we need to loop through the non-trivial harmonics. - * - * For each harmonic `n = 1, ..., M/2-1`, we need to - * - * - recover five spectra from the five input rows. - * - apply radix-5 twiddle factors to rows 1, 2, 3, and 4, then combine with row 0 to form five output columns. - * - form the following - * - * x[5n] = X₀ + (W₁⋅X₁ + W₄⋅X₄) + (W₂⋅X₂ + W₃⋅X₃) => column 0 - * x[5n+1] = X₀ + TR11⋅(W₁⋅X₁ + W₄⋅X₄) + TR12⋅(W₂⋅X₂ + W₃⋅X₃) - i⋅(TI11⋅(W₁⋅X₁ - W₄⋅X₄) + TI12⋅(W₂⋅X₂ - W₃⋅X₃)) => column 1 - * x[5n+2] = X₀ + TR11⋅(W₁⋅X₁ + W₄⋅X₄) + TR12⋅(W₂⋅X₂ + W₃⋅X₃) + i⋅(TI11⋅(W₁⋅X₁ - W₄⋅X₄) + TI12⋅(W₂⋅X₂ - W₃⋅X₃)) => column 2 - * x[5n+3] = X₀ + TR12⋅(W₁⋅X₁ + W₄⋅X₄) + TR11⋅(W₂⋅X₂ + W₃⋅X₃) - i⋅(TI12⋅(W₁⋅X₁ - W₄⋅X₄) - TI11⋅(W₂⋅X₂ - W₃⋅X₃)) => column 3 - * x[5n+4] = X₀ + TR12⋅(W₁⋅X₁ + W₄⋅X₄) + TR11⋅(W₂⋅X₂ + W₃⋅X₃) + i⋅(TI12⋅(W₁⋅X₁ - W₄⋅X₄) - TI11⋅(W₂⋅X₂ - W₃⋅X₃)) => column 4 - * - * The mirror index `im = M - i` selects the conjugate-symmetric partner, thus allowing the routine to read each symmetry pair only once. - */ - // Loop over each sub-sequence to be transformed... - for ( k = 0; k < L; k++ ) { - // Loop over the elements in each sub-sequence... - for ( i = 2; i < M; i += 2 ) { - im = M - i; // "mirror" index - - // Resolve twiddle factor indices for component 1: - it11 = ( (i-2)*st1 ) + ot1; // cos(θ) for component 1 - it12 = ( (i-1)*st1 ) + ot1; // sin(θ) for component 1 - - // Resolve twiddle factor indices for component 2: - it21 = ( (i-2)*st2 ) + ot2; // cos(θ) for component 2 - it22 = ( (i-1)*st2 ) + ot2; // sin(θ) for component 2 - - // Resolve twiddle factor indices for component 3: - it31 = ( (i-2)*st3 ) + ot3; // cos(θ) for component 3 - it32 = ( (i-1)*st3 ) + ot3; // sin(θ) for component 3 - - // Resolve twiddle factor indices for component 4: - it41 = ( (i-2)*st4 ) + ot4; // cos(θ) for component 4 - it42 = ( (i-1)*st4 ) + ot4; // sin(θ) for component 4 - - // Load component 1 data and apply twiddle... - ip1 = iptr( i-1, k, 1, L, M, sc, oc ); // real part component 1 - ip2 = iptr( i, k, 1, L, M, sc, oc ); // imag part component 1 - - // Apply the twiddle factors for component 1: - dr2 = ( twiddles1[ it11 ] * cc[ ip1 ] ) + ( twiddles1[ it12 ] * cc[ ip2 ] ); // Re(dr2) - di2 = ( twiddles1[ it11 ] * cc[ ip2 ] ) - ( twiddles1[ it12 ] * cc[ ip1 ] ); // Im(di2) - - // Load component 2 data and apply twiddle... - ip1 = iptr( i-1, k, 2, L, M, sc, oc ); // real part component 2 - ip2 = iptr( i, k, 2, L, M, sc, oc ); // imag part component 2 - - // Apply the twiddle factors for component 2: - dr3 = ( twiddles2[ it21 ] * cc[ ip1 ] ) + ( twiddles2[ it22 ] * cc[ ip2 ] ); // Re(dr3) - di3 = ( twiddles2[ it21 ] * cc[ ip2 ] ) - ( twiddles2[ it22 ] * cc[ ip1 ] ); // Im(di3) - - // Load component 3 data and apply twiddle... - ip1 = iptr( i-1, k, 3, L, M, sc, oc ); // real part component 3 - ip2 = iptr( i, k, 3, L, M, sc, oc ); // imag part component 3 - - // Apply the twiddle factors for component 3: - dr4 = ( twiddles3[ it31 ] * cc[ ip1 ] ) + ( twiddles3[ it32 ] * cc[ ip2 ] ); // Re(dr4) - di4 = ( twiddles3[ it31 ] * cc[ ip2 ] ) - ( twiddles3[ it32 ] * cc[ ip1 ] ); // Im(di4) - - // Load component 4 data and apply twiddle... - ip1 = iptr( i-1, k, 4, L, M, sc, oc ); // real part component 4 - ip2 = iptr( i, k, 4, L, M, sc, oc ); // imag part component 4 - - // Apply the twiddle factors for component 4: - dr5 = ( twiddles4[ it41 ] * cc[ ip1 ] ) + ( twiddles4[ it42 ] * cc[ ip2 ] ); // Re(dr5) - di5 = ( twiddles4[ it41 ] * cc[ ip2 ] ) - ( twiddles4[ it42 ] * cc[ ip1 ] ); // Im(di5) - - // Radix-5 butterfly intermediate computations (symmetric/antisymmetric combinations): - cr2 = dr2 + dr5; - ci5 = dr5 - dr2; - cr5 = di2 - di5; - ci2 = di5 + di2; - cr3 = dr3 + dr4; - ci4 = dr4 - dr3; - cr4 = di3 - di4; - ci3 = di3 + di4; - - // Output column 0 (real part): - ip1 = iptr( i-1, k, 0, L, M, sc, oc ); - io = optr( i-1, 0, k, M, so, oo ); - out[ io ] = cc[ ip1 ] + cr2 + cr3; - - // Output column 0 (imag part): - ip2 = iptr( i, k, 0, L, M, sc, oc ); - io = optr( i, 0, k, M, so, oo ); - out[ io ] = cc[ ip2 ] + ci2 + ci3; - - // Load component 0 data and compute intermediates... - tr2 = cc[ ip1 ] + ( TR11 * cr2 ) + ( TR12 * cr3 ); - ti2 = cc[ ip2 ] + ( TR11 * ci2 ) + ( TR12 * ci3 ); - tr3 = cc[ ip1 ] + ( TR12 * cr2 ) + ( TR11 * cr3 ); - ti3 = cc[ ip2 ] + ( TR12 * ci2 ) + ( TR11 * ci3 ); - - // Additional intermediates: - tr5 = ( TI11 * cr5 ) + ( TI12 * cr4 ); - ti5 = ( TI11 * ci5 ) + ( TI12 * ci4 ); - tr4 = ( TI12 * cr5 ) - ( TI11 * cr4 ); - ti4 = ( TI12 * ci5 ) - ( TI11 * ci4 ); - - // Output column 2 (real part): - io = optr( i-1, 2, k, M, so, oo ); - out[ io ] = tr2 + tr5; - - // Output column 1 (real part): - io = optr( im-1, 1, k, M, so, oo ); - out[ io ] = tr2 - tr5; - - // Output column 2 (imag part): - io = optr( i, 2, k, M, so, oo ); - out[ io ] = ti2 + ti5; - - // Output column 1 (imag part): - io = optr( im, 1, k, M, so, oo ); - out[ io ] = ti5 - ti2; - - // Output column 4 (real part): - io = optr( i-1, 4, k, M, so, oo ); - out[ io ] = tr3 + tr4; - - // Output column 3 (real part): - io = optr( im-1, 3, k, M, so, oo ); - out[ io ] = tr3 - tr4; - - // Output column 4 (imag part): - io = optr( i, 4, k, M, so, oo ); - out[ io ] = ti3 + ti4; - - // Output column 3 (imag part): - io = optr( im, 3, k, M, so, oo ); - out[ io ] = ti4 - ti3; - } - } -} - - -// EXPORTS // - -module.exports = radf5; diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/rfftf/lib/radfg.js b/lib/node_modules/@stdlib/fft/base/fftpack/rfftf/lib/radfg.js deleted file mode 100644 index dd1f5424bbe7..000000000000 --- a/lib/node_modules/@stdlib/fft/base/fftpack/rfftf/lib/radfg.js +++ /dev/null @@ -1,765 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2026 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -* -* -* ## Notice -* -* The original C code and copyright notice are from the [PFFFT library]{@link https://github.com/marton78/pffft/blob/0b4ee12c4ba45a4a8e567550c16d96d1679f50ce/src/fftpack.c}. The implementation follows the original, but has been modified for JavaScript. -* -* ```text -* Copyright (c) 2004 the University Corporation for Atmospheric -* Research ("UCAR"). All rights reserved. Developed by NCAR's -* Computational and Information Systems Laboratory, UCAR, -* www.cisl.ucar.edu. -* -* Redistribution and use of the Software in source and binary forms, -* with or without modification, is permitted provided that the -* following conditions are met: -* -* - Neither the names of NCAR's Computational and Information Systems -* Laboratory, the University Corporation for Atmospheric Research, -* nor the names of its sponsors or contributors may be used to -* endorse or promote products derived from this Software without -* specific prior written permission. -* -* - Redistributions of source code must retain the above copyright -* notices, this list of conditions, and the disclaimer below. -* -* - Redistributions in binary form must reproduce the above copyright -* notice, this list of conditions, and the disclaimer below in the -* documentation and/or other materials provided with the -* distribution. -* -* THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -* EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO THE WARRANTIES OF -* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -* NONINFRINGEMENT. IN NO EVENT SHALL THE CONTRIBUTORS OR COPYRIGHT -* HOLDERS BE LIABLE FOR ANY CLAIM, INDIRECT, INCIDENTAL, SPECIAL, -* EXEMPLARY, OR CONSEQUENTIAL DAMAGES OR OTHER LIABILITY, WHETHER IN AN -* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE -* SOFTWARE. -* ``` -*/ - -/* eslint-disable max-len, max-statements, max-lines-per-function */ - -'use strict'; - -// MODULES // - -var TWO_PI = require( '@stdlib/constants/float64/two-pi' ); -var cos = require( '@stdlib/math/base/special/cos' ); -var sin = require( '@stdlib/math/base/special/sin' ); -var floor = require( '@stdlib/math/base/special/floor' ); - - -// FUNCTIONS // - -/** -* Resolves an index into the input array. -* -* ## Notes -* -* In a forward real FFT, the previous stage writes its results as `R` "rows" per sub-sequence. -* -* Thus, when reading from an input array stored in linear memory, we can reinterpret the array as a three-dimensional logical view containing `L` independent sub-sequences having `R` "rows" (components 0, 1, 2, ..., R-1) and where each "row" is arranged as `M*L` contiguous elements corresponding to interleaved real and imaginary components. -* -* Accordingly, the following is a logical view of an input array (zero-based indexing) which contains `L = 3` transforms and in which each sub-sequence has length `M = 4`: -* -* ```text -* │ k = 0 k = 1 k = 2 -* │ ─────────────────────────────────────────────────────────────────────────────────────→ k -* j = 0 │ cc(0,0,0) ... cc(3,0,0) cc(0,1,0) ... cc(3,1,0) cc(0,2,0) ... cc(3,2,0) -* │ -* j = 1 │ cc(0,0,1) ... cc(3,0,1) cc(0,1,1) ... cc(3,1,1) cc(0,2,1) ... cc(3,2,1) -* │ -* j = 2 │ cc(0,0,2) ... cc(3,0,2) cc(0,1,2) ... cc(3,1,2) cc(0,2,2) ... cc(3,2,2) -* │ -* j = 3 │ cc(0,0,3) ... cc(3,0,3) cc(0,1,3) ... cc(3,1,3) cc(0,2,3) ... cc(3,2,3) -* │ -* ... │ ... ... ... -* │ -* j=R-1 │ cc(0,0,R-1) ... cc(3,0,R-1) cc(0,1,R-1) ... cc(3,1,R-1) cc(0,2,R-1) ... cc(3,2,R-1) -* └──────────────────────────────────────────────────────────────────────────────────────→ i -* ↑ ↑ ↑ ↑ ↑ ↑ -* i = 0 M-1 0 M-1 0 M-1 -* ``` -* -* In the above, -* -* - `i` is the fastest varying index, which walks within one short sub-sequence corresponding to one of the R component rows. -* - `j` selects between the R component rows (0, 1, 2, ..., R-1). -* - `k` specifies the index of one of the `L` independent transforms we are processing. -* -* In linear memory, the three-dimensional logical view is arranged as follows: -* -* ```text -* | cc(0,0,0)...cc(3,0,0) ... cc(0,2,0)...cc(3,2,0) | cc(0,0,1)...cc(3,0,1) ... cc(0,2,1)...cc(3,2,1) | ... | cc(0,0,R-1)...cc(3,0,R-1) ... cc(0,2,R-1)...cc(3,2,R-1) | -* ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ -* 0 M-1 LM LM-1 (L+1)M (L+1)M-1 (2L-1)M 2LM-1 (R-1)LM ((R-1)L+1)M-1 (RL-1)M RLM-1 -* ``` -* -* @private -* @param {NonNegativeInteger} i - index of an element within a sub-sequence -* @param {NonNegativeInteger} k - index of the sub-sequence being transformed -* @param {NonNegativeInteger} j - input row -* @param {NonNegativeInteger} L - number of sub-sequences -* @param {NonNegativeInteger} M - sub-sequence length -* @param {integer} stride - stride length of the input array -* @param {NonNegativeInteger} offset - index specifying the first indexed element in the input array -* @returns {NonNegativeInteger} computed index -* -* @example -* var stride = 1; -* var offset = 0; -* -* var M = 4; // sub-sequence length -* var L = 3; // number of sub-sequences -* -* var idx = iptr( 0, 0, 0, L, M, stride, offset ); -* // returns 0 -* -* idx = iptr( 1, 0, 0, L, M, stride, offset ); -* // returns 1 -* -* idx = iptr( M-1, 0, 0, L, M, stride, offset ); -* // returns 3 -* -* idx = iptr( 0, 1, 0, L, M, stride, offset ); -* // returns 4 -* -* // ... -* -* idx = iptr( M-1, L-1, 6, L, M, stride, offset ); -* // returns 83 -*/ -function iptr( i, k, j, L, M, stride, offset ) { - var n = i + ( ( k+(j*L) ) * M ); - return ( n*stride ) + offset; -} - -/** -* Resolves an index into the output array. -* -* ## Notes -* -* When writing to an output array stored in linear memory, we can reinterpret the array as a three-dimensional logical view containing `L` independent sub-sequences having `R` "columns" corresponding to the `R` components of a radix-R stage (with real and imaginary parts of each component interleaved along each sub-sequence) and where each "column" has `M` elements. -* -* Accordingly, the following is a logical view of an output array (zero-based indexing) which contains `L = 3` transforms and in which each "column" sub-sequence has length `M = 4` for an arbitrary radix `R`: -* -* ```text -* j = 0 (component 0) j = 1 (component 1) j = 2 (component 2) ... j = R-1 (component R-1) -* k = 0 ─┬───────────────────────────────────────┬───────────────────────────────────────┬───────────────────────────────────────┬───────────────────────────────────────┬───────────────────────────────────────────────┐ -* │ out(0,0,0) out(1,0,0) ... out(3,0,0) │ out(0,1,0) out(1,1,0) ... out(3,1,0) │ out(0,2,0) out(1,2,0) ... out(3,2,0) │ ... │ out(0,R-1,0) out(1,R-1,0) ... out(3,R-1,0) │ -* └───────────────────────────────────────┴───────────────────────────────────────┴───────────────────────────────────────┴───────────────────────────────────────┴───────────────────────────────────────────────┤ -* k = 1 ─┬───────────────────────────────────────┬───────────────────────────────────────┬───────────────────────────────────────┬───────────────────────────────────────┬───────────────────────────────────────────────┤ -* │ out(0,0,1) out(1,0,1) ... out(3,0,1) │ out(0,1,1) out(1,1,1) ... out(3,1,1) │ out(0,2,1) out(1,2,1) ... out(3,2,1) │ ... │ out(0,R-1,1) out(1,R-1,1) ... out(3,R-1,1) │ -* └───────────────────────────────────────┴───────────────────────────────────────┴───────────────────────────────────────┴───────────────────────────────────────┴───────────────────────────────────────────────┤ -* k = 2 ─┬───────────────────────────────────────┬───────────────────────────────────────┬───────────────────────────────────────┬───────────────────────────────────────┬───────────────────────────────────────────────┤ -* │ out(0,0,2) out(1,0,2) ... out(3,0,2) │ out(0,1,2) out(1,1,2) ... out(3,1,2) │ out(0,2,2) out(1,2,2) ... out(3,2,2) │ ... │ out(0,R-1,2) out(1,R-1,2) ... out(3,R-1,2) │ -* └───────────────────────────────────────┴───────────────────────────────────────┴───────────────────────────────────────┴───────────────────────────────────────┴───────────────────────────────────────────────┘ -* ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ -* i = 0 1 M-1 0 1 M-1 0 1 M-1 0 1 M-1 -* ``` -* -* In the above, -* -* - `i` is the fastest varying index, which walks within one short "column" sub-sequence. -* - `j` selects which of the R components we are in (0, 1, 2, ..., R-1). -* - `k` specifies the index of one of the `L` independent transforms we are processing. -* -* In linear memory, the three-dimensional logical view is arranged as follows: -* -* ```text -* | out(0,0,0)...out(3,0,0) | out(0,1,0)...out(3,1,0) | out(0,2,0)...out(3,2,0) | ... | out(0,R-1,0)...out(3,R-1,0) | out(0,0,1)...out(3,0,1) | ... | out(0,R-1,2)...out(3,R-1,2) | -* ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ -* 0 M-1 M 2M-1 2M 3M-1 (R-1)M RM-1 RM (R+1)M-1 (RL-1)M RLM-1 -* ``` -* -* As may be observed, when resolving an index in the output array, the `j` and `k` dimensions are swapped relative index resolution in the input array. This stems from `radfg` being only one stage in a multi-stage driver which alternates between using `cc` and `out` as workspace buffers. After each stage, the next stage reads what the previous stage wrote. -* -* Each stage expects a transpose, and, in order to avoid explicit transposition between the stages, we swap the last two logical dimensions while still maintaining cache locality within the inner loop logical dimension, as indexed by `i`. -* -* @private -* @param {NonNegativeInteger} i - index of an element within a sub-sequence -* @param {NonNegativeInteger} j - index specifying which of the R complex components we are in (0, 1, ..., R-1) -* @param {NonNegativeInteger} k - index of the sub-sequence being transformed -* @param {NonNegativeInteger} R - radix -* @param {NonNegativeInteger} M - sub-sequence length -* @param {integer} stride - stride length of the output array -* @param {NonNegativeInteger} offset - index specifying the first indexed element in the output array -* @returns {NonNegativeInteger} computed index -* -* @example -* var stride = 1; -* var offset = 0; -* -* var M = 4; // sub-sequence length -* var L = 3; // number of sub-sequences -* -* var idx = optr( 0, 0, 0, 7, M, stride, offset ); -* // returns 0 -* -* idx = optr( 1, 0, 0, 7, M, stride, offset ); -* // returns 1 -* -* idx = optr( M-1, 0, 0, 7, M, stride, offset ); -* // returns 3 -* -* idx = optr( 0, 1, 0, 7, M, stride, offset ); -* // returns 4 -* -* // ... -* -* idx = optr( M-1, 6, L-1, 7, M, stride, offset ); -* // returns 83 -*/ -function optr( i, j, k, R, M, stride, offset ) { - var n = i + ( ( j+(k*R) ) * M ); - return ( n*stride ) + offset; -} - -/** -* Resolves an index into a flattened workspace array. -* -* ## Notes -* -* During the general radix stage, flattened workspace arrays store `ML = M * L` elements for each of the `R` component columns. Both the flattened input and output workspace arrays share the same `[ML, R]` logical layout. -* -* Thus, when accessing a flattened workspace array stored in linear memory, we can reinterpret the array as a two-dimensional logical view having `R` component columns, where each column has `ML` elements. -* -* Accordingly, the following is a logical view of a flattened workspace array (zero-based indexing) having flattened dimension `ML` and arbitrary radix `R`: -* -* ```text -* │ j = 0 j = 1 j = 2 ... j = R-1 -* │ ────────────────────────────────────────────────────────────────────────→ j -* ik = 0 │ ws(0,0) ws(0,1) ws(0,2) ... ws(0,R-1) -* │ -* ik = 1 │ ws(1,0) ws(1,1) ws(1,2) ... ws(1,R-1) -* │ -* ik = 2 │ ws(2,0) ws(2,1) ws(2,2) ... ws(2,R-1) -* │ -* ik = 3 │ ws(3,0) ws(3,1) ws(3,2) ... ws(3,R-1) -* │ -* ... │ ... ... ... ... ... -* │ -* ik = ML-1 │ ws(ML-1,0) ws(ML-1,1) ws(ML-1,2) ... ws(ML-1,R-1) -* ``` -* -* In the above, -* -* - `ik` is the fastest varying index, which walks along the flattened sub-sequence dimension. -* - `j` selects between the `R` workspace component columns (0, 1, 2, ..., R-1). -* -* In linear memory, the two-dimensional logical view is arranged as follows: -* -* ```text -* | ws(0,0)...ws(ML-1,0) | ws(0,1)...ws(ML-1,1) | ws(0,2)...ws(ML-1,2) | ... | ws(0,R-1)...ws(ML-1,R-1) | -* ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ -* 0 ML-1 ML 2ML-1 2ML 3ML-1 (R-1)ML RML-1 -* ``` -* -* Here, the original `M` and `L` dimensions have been collapsed into the single flattened `ik` dimension. Each workspace component `j` therefore occupies one contiguous block of `ML` elements in linear memory. -* -* @private -* @param {NonNegativeInteger} ik - index of an element within a flattened sub-sequence -* @param {NonNegativeInteger} j - index specifying which of the R workspace component columns we are in (0, 1, ..., R-1) -* @param {NonNegativeInteger} ML - flattened sub-sequence length -* @param {integer} stride - stride length of the flattened workspace array -* @param {NonNegativeInteger} offset - index specifying the first indexed element in the flattened workspace array -* @returns {NonNegativeInteger} computed index -* -* @example -* var stride = 1; -* var offset = 0; -* -* var M = 4; // sub-sequence length -* var L = 3; // number of sub-sequences -* var ML = M * L; // flattened dimension ( 4*3 = 12 ) -* -* var idx = fptr( 0, 0, ML, stride, offset ); -* // returns 0 -* -* idx = fptr( 1, 0, ML, stride, offset ); -* // returns 1 -* -* idx = fptr( ML-1, 0, ML, stride, offset ); -* // returns 11 -* -* idx = fptr( 0, 1, ML, stride, offset ); -* // returns 12 -* -* // ... -* -* idx = fptr( ML-1, 6, ML, stride, offset ); -* // returns 83 -*/ -function fptr( ik, j, ML, stride, offset ) { - var n = ik + ( j*ML ); - return ( n*stride ) + offset; -} - - -// MAIN // - -/** -* Performs one general radix stage within a forward Fourier transform for a real-valued sequence. -* -* @private -* @param {NonNegativeInteger} M - number of elements in each sub-sequence to be transformed -* @param {NonNegativeInteger} R - radix of the transform -* @param {NonNegativeInteger} L - number of sub-sequences to be transformed -* @param {NonNegativeInteger} ML - number of elements in each flattened sub-sequence (`M*L`) -* @param {Collection} cc - input array containing the sub-sequences to be transformed -* @param {integer} sc - stride length for `cc` -* @param {NonNegativeInteger} oc - index offset for `cc` -* @param {Collection} c1 - input workspace array containing intermediate sub-sequences to be transformed -* @param {integer} sc1 - stride length for `c1` -* @param {NonNegativeInteger} oc1 - index offset for `c1` -* @param {Collection} c2 - flattened input workspace array containing intermediate sub-sequences -* @param {integer} sc2 - stride length for `c2` -* @param {NonNegativeInteger} oc2 - index offset for `c2` -* @param {Collection} ch - output array containing transformed sequences -* @param {integer} sch - stride length for `ch` -* @param {NonNegativeInteger} och - index offset for `ch` -* @param {Collection} ch2 - flattened output workspace array containing intermediate sub-sequences -* @param {integer} sch2 - stride length for `ch2` -* @param {NonNegativeInteger} och2 - index offset for `ch2` -* @param {Collection} twiddles - array of twiddle factors -* @param {integer} stw - stride length for `twiddles` -* @param {NonNegativeInteger} otw - index offset for `twiddles` -* @returns {void} -*/ -function radfg( M, R, L, ML, cc, sc, oc, c1, sc1, oc1, c2, sc2, oc2, ch, sch, och, ch2, sch2, och2, twiddles, stw, otw ) { // eslint-disable-line max-params - var ar1h; - var ar2h; - var idij; - var ic2o; - var ic1o; - var ich; - var icc; - var Rph; - var Rp1; - var ih1; - var ih2; - var ih3; - var ih4; - var ic1; - var ic2; - var ic3; - var ic4; - var it1; - var it2; - var io1; - var io2; - var io3; - var io4; - var dc2; - var ai1; - var ai2; - var ar1; - var ar2; - var ds2; - var nbd; - var dcp; - var dsp; - var im; - var ik; - var is; - var jc; - var lc; - var j2; - var i; - var j; - var k; - var l; - - // Compute the basic rotation angle for the radix-R DFT matrix: - dcp = cos( TWO_PI / R ); // cos(2π/R) - dsp = sin( TWO_PI / R ); // sin(2π/R) - - // Compute half the radix, rounded up, which is used as the exclusive upper bound for conjugate-symmetric component loops: - Rph = floor( ( R + 1 ) / 2 ); - Rp1 = R + 1; - - // Compute the number of non-DC complex harmonics in each sub-sequence: - nbd = floor( ( M - 1 ) / 2 ); - - /* - * First, initialize the work arrays for the general-radix butterfly. - * - * At this stage, each sub-sequence has already been split into `R` radix components. The `j = 0` component is carried in the flattened work arrays, while the remaining components `j = 1, ..., R-1` are carried in the three-dimensional work arrays. - * - * For harmonic `n = 0`, we only copy the DC terms. - * - * For harmonics `n = 1, ..., floor((M-1)/2)`, each nonzero radix component is multiplied by its stage twiddle factor and stored in `ch`. - */ - if ( M === 1 ) { - // Copy the DC column from the flattened output workspace back to the flattened input workspace... - for ( ik = 0; ik < ML; ik++ ) { - ic2o = fptr( ik, 0, ML, sc2, oc2 ); - ich = fptr( ik, 0, ML, sch2, och2 ); - c2[ ic2o ] = ch2[ ich ]; - } - } else { - // Copy the DC column into the flattened output workspace... - for ( ik = 0; ik < ML; ik++ ) { - ich = fptr( ik, 0, ML, sch2, och2 ); - ic2o = fptr( ik, 0, ML, sc2, oc2 ); - ch2[ ich ] = c2[ ic2o ]; - } - - // Copy the DC terms for the remaining radix components... - for ( j = 1; j < R; j++ ) { - for ( k = 0; k < L; k++ ) { - ih1 = optr( 0, k, j, L, M, sch, och ); - ic1 = iptr( 0, k, j, L, M, sc1, oc1 ); - ch[ ih1 ] = c1[ ic1 ]; - } - } - - // Apply twiddle factors to the non-DC harmonics of the remaining radix components... - if ( nbd <= L ) { - // Loop over harmonics before sub-sequences... - is = 0; - for ( j = 1; j < R; j++ ) { - idij = is; - for ( i = 2; i < M; i += 2 ) { - for ( k = 0; k < L; k++ ) { - // Resolve output indices in ch: - ih1 = optr( i-1, k, j, L, M, sch, och ); // real part - ih2 = optr( i, k, j, L, M, sch, och ); // imaginary part - - // Resolve indices in the input workspace: - ic1 = iptr( i-1, k, j, L, M, sc1, oc1 ); // real part - ic2 = iptr( i, k, j, L, M, sc1, oc1 ); // imaginary part - - // Resolve twiddle factor indices: - it1 = ( idij * stw ) + otw; // cos(θ) - it2 = ( (idij+1) * stw ) + otw; // sin(θ) - - // Apply the twiddle factor: - ch[ ih1 ] = ( twiddles[ it1 ] * c1[ ic1 ] ) + ( twiddles[ it2 ] * c1[ ic2 ] ); // Re(ch) - ch[ ih2 ] = ( twiddles[ it1 ] * c1[ ic2 ] ) - ( twiddles[ it2 ] * c1[ ic1 ] ); // Im(ch) - } - idij += 2; - } - is += M; - } - } else { - // Loop over sub-sequences before harmonics... - is = 0; - for ( j = 1; j < R; j++ ) { - for ( k = 0; k < L; k++ ) { - idij = is; - for ( i = 2; i < M; i += 2 ) { - // Resolve output indices in ch: - ih1 = optr( i-1, k, j, L, M, sch, och ); // real part - ih2 = optr( i, k, j, L, M, sch, och ); // imaginary part - - // Resolve indices in the input workspace: - ic1 = iptr( i-1, k, j, L, M, sc1, oc1 ); // real part - ic2 = iptr( i, k, j, L, M, sc1, oc1 ); // imaginary part - - // Resolve twiddle factor indices: - it1 = ( idij * stw ) + otw; // cos(θ) - it2 = ( (idij+1) * stw ) + otw; // sin(θ) - - // Apply the twiddle factor: - ch[ ih1 ] = ( twiddles[ it1 ] * c1[ ic1 ] ) + ( twiddles[ it2 ] * c1[ ic2 ] ); // Re(ch) - ch[ ih2 ] = ( twiddles[ it1 ] * c1[ ic2 ] ) - ( twiddles[ it2 ] * c1[ ic1 ] ); // Im(ch) - - idij += 2; - } - } - is += M; - } - } - - /* - * Next, combine mirrored radix components, storing their sums and differences in c1. - */ - if ( nbd >= L ) { - // Loop over sub-sequences before harmonics... - for ( j = 1; j < Rph; j++ ) { - jc = Rp1 - j - 1; // "mirror" index - for ( k = 0; k < L; k++ ) { - for ( i = 2; i < M; i += 2 ) { - // Resolve ch indices for component j: - ih1 = optr( i-1, k, j, L, M, sch, och ); // Re(ch[j]) - ih2 = optr( i, k, j, L, M, sch, och ); // Im(ch[j]) - - // Resolve ch indices for conjugate component jc: - ih3 = optr( i-1, k, jc, L, M, sch, och ); // Re(ch[jc]) - ih4 = optr( i, k, jc, L, M, sch, och ); // Im(ch[jc]) - - // Resolve input-workspace indices for component j: - ic1 = iptr( i-1, k, j, L, M, sc1, oc1 ); // Re(component j) - ic2 = iptr( i, k, j, L, M, sc1, oc1 ); // Im(component j) - - // Resolve input-workspace indices for component jc: - ic3 = iptr( i-1, k, jc, L, M, sc1, oc1 ); // Re(component jc) - ic4 = iptr( i, k, jc, L, M, sc1, oc1 ); // Im(component jc) - - // Form the sum and difference combinations: - c1[ ic1 ] = ch[ ih1 ] + ch[ ih3 ]; // Re(j) + Re(jc) - c1[ ic3 ] = ch[ ih2 ] - ch[ ih4 ]; // Im(j) - Im(jc) - c1[ ic2 ] = ch[ ih2 ] + ch[ ih4 ]; // Im(j) + Im(jc) - c1[ ic4 ] = ch[ ih3 ] - ch[ ih1 ]; // Re(jc) - Re(j) - } - } - } - } else { - // Loop over harmonics before sub-sequences... - for ( j = 1; j < Rph; j++ ) { - jc = Rp1 - j - 1; // "mirror" index - for ( i = 2; i < M; i += 2 ) { - for ( k = 0; k < L; k++ ) { - // Resolve ch indices for component j: - ih1 = optr( i-1, k, j, L, M, sch, och ); // Re(ch[j]) - ih2 = optr( i, k, j, L, M, sch, och ); // Im(ch[j]) - - // Resolve ch indices for conjugate component jc: - ih3 = optr( i-1, k, jc, L, M, sch, och ); // Re(ch[jc]) - ih4 = optr( i, k, jc, L, M, sch, och ); // Im(ch[jc]) - - // Resolve input-workspace indices for component j: - ic1 = iptr( i-1, k, j, L, M, sc1, oc1 ); // Re(component j) - ic2 = iptr( i, k, j, L, M, sc1, oc1 ); // Im(component j) - - // Resolve input-workspace indices for component jc: - ic3 = iptr( i-1, k, jc, L, M, sc1, oc1 ); // Re(component jc) - ic4 = iptr( i, k, jc, L, M, sc1, oc1 ); // Im(component jc) - - // Form the sum and difference combinations: - c1[ ic1 ] = ch[ ih1 ] + ch[ ih3 ]; // Re(j) + Re(jc) - c1[ ic3 ] = ch[ ih2 ] - ch[ ih4 ]; // Im(j) - Im(jc) - c1[ ic2 ] = ch[ ih2 ] + ch[ ih4 ]; // Im(j) + Im(jc) - c1[ ic4 ] = ch[ ih3 ] - ch[ ih1 ]; // Re(jc) - Re(j) - } - } - } - } - } - - // Combine the DC terms for each conjugate-symmetric component pair... - for ( j = 1; j < Rph; j++ ) { - jc = Rp1 - j - 1; // "mirror" index - for ( k = 0; k < L; k++ ) { - ih1 = optr( 0, k, j, L, M, sch, och ); - ih2 = optr( 0, k, jc, L, M, sch, och ); - - ic1 = iptr( 0, k, j, L, M, sc1, oc1 ); - ic2 = iptr( 0, k, jc, L, M, sc1, oc1 ); - - c1[ ic1 ] = ch[ ih1 ] + ch[ ih2 ]; - c1[ ic2 ] = ch[ ih2 ] - ch[ ih1 ]; - } - } - - /* - * Next, apply the radix-`R` DFT matrix. - * - * For each mirrored output pair, accumulate the contributions of the radix components in the flattened work array. - * - * The required rotation factors are generated recursively from the previous ones: - * - * W_l = W_{l-1} ⋅ W_1 - * W_{lj} = W_{l(j-1)} ⋅ W_l - * - * Here, `W_1` is the basic radix-`R` rotation, `W_{l-1}` and `W_l` are the previous and current outer factors, and `W_{l(j-1)}` and `W_{lj}` are the previous and current inner factors. - */ - ar1 = 1.0; // Re(W_0) - ai1 = 0.0; // Im(W_0) - for ( l = 1; l < Rph; l++ ) { - lc = Rp1 - l - 1; // "mirror" index - - // Advance the rotation factor by one step: W_l = W_{l-1} ⋅ W_1 - ar1h = ( dcp * ar1 ) - ( dsp * ai1 ); // Re(W_l) - ai1 = ( dcp * ai1 ) + ( dsp * ar1 ); // Im(W_l) - ar1 = ar1h; - - // Accumulate the contributions from components 1 and R-1: - for ( ik = 0; ik < ML; ik++ ) { - ich = fptr( ik, l, ML, sch2, och2 ); - ic1o = fptr( ik, lc, ML, sch2, och2 ); - - ic2o = fptr( ik, 0, ML, sc2, oc2 ); - ic1 = fptr( ik, 1, ML, sc2, oc2 ); - ic2 = fptr( ik, R-1, ML, sc2, oc2 ); - - ch2[ ich ] = c2[ ic2o ] + ( ar1 * c2[ ic1 ] ); - ch2[ ic1o ] = ai1 * c2[ ic2 ]; - } - - // Save W_l for the inner recurrence: - dc2 = ar1; - ds2 = ai1; - - // Initialize W_{l·1}: - ar2 = ar1; - ai2 = ai1; - - // Accumulate the remaining component pairs: - for ( j = 2; j < Rph; j++ ) { - jc = Rp1 - j - 1; // "mirror" index - - // Advance the nested rotation factor by one step: W_{l*j} = W_{l*(j-1)} ⋅ W_l - ar2h = ( dc2 * ar2 ) - ( ds2 * ai2 ); // Re(W_{l*j}) - ai2 = ( dc2 * ai2 ) + ( ds2 * ar2 ); // Im(W_{l*j}) - ar2 = ar2h; - - // Accumulate the contributions from components j and jc: - for ( ik = 0; ik < ML; ik++ ) { - ich = fptr( ik, l, ML, sch2, och2 ); - ic1o = fptr( ik, lc, ML, sch2, och2 ); - - ic1 = fptr( ik, j, ML, sc2, oc2 ); - ic2 = fptr( ik, jc, ML, sc2, oc2 ); - - ch2[ ich ] += ar2 * c2[ ic1 ]; - ch2[ ic1o ] += ai2 * c2[ ic2 ]; - } - } - } - - // Accumulate the nonzero radix components into the DC output... - for ( j = 1; j < Rph; j++ ) { - for ( ik = 0; ik < ML; ik++ ) { - ich = fptr( ik, 0, ML, sch2, och2 ); - ic1 = fptr( ik, j, ML, sc2, oc2 ); - ch2[ ich ] += c2[ ic1 ]; - } - } - - // Copy the first output column from ch to cc... - if ( M >= L ) { - for ( k = 0; k < L; k++ ) { - for ( i = 0; i < M; i++ ) { - icc = optr( i, 0, k, R, M, sc, oc ); - ih1 = optr( i, k, 0, L, M, sch, och ); - cc[ icc ] = ch[ ih1 ]; - } - } - } else { - for ( i = 0; i < M; i++ ) { - for ( k = 0; k < L; k++ ) { - icc = optr( i, 0, k, R, M, sc, oc ); - ih1 = optr( i, k, 0, L, M, sch, och ); - cc[ icc ] = ch[ ih1 ]; - } - } - } - - /* - * `cc` is stored in output order, where the component index comes before the sub-sequence index. Accordingly, writes to `cc` use `optr`, not `iptr`. - */ - // Store DC harmonics for conjugate pairs in the output array... - for ( j = 1; j < Rph; j++ ) { - jc = Rp1 - j - 1; // "mirror" index - j2 = 2 * j; // output column index - for ( k = 0; k < L; k++ ) { - io1 = optr( M-1, j2-1, k, R, M, sc, oc ); - io2 = optr( 0, j2, k, R, M, sc, oc ); - - ih1 = optr( 0, k, j, L, M, sch, och ); - ih2 = optr( 0, k, jc, L, M, sch, och ); - - cc[ io1 ] = ch[ ih1 ]; - cc[ io2 ] = ch[ ih2 ]; - } - } - - // When M = 1, there are no non-DC harmonics to process, so we're done... - if ( M === 1 ) { - return; - } - - /* - * Finally, store the non-DC harmonics in folded format. - * - * For each mirror pair, write the non-DC harmonics from `ch` to the two output columns as the required sum and difference combinations. - */ - if ( nbd >= L ) { - // Loop over sub-sequences before harmonics... - for ( j = 1; j < Rph; j++ ) { - jc = Rp1 - j - 1; // "mirror" index - j2 = 2 * j; // output column index - for ( k = 0; k < L; k++ ) { - for ( i = 2; i < M; i += 2 ) { - im = M - i; // "mirror" harmonic index - - // Resolve ch indices for component j: - ih1 = optr( i-1, k, j, L, M, sch, och ); // Re(ch[j]) - ih2 = optr( i, k, j, L, M, sch, och ); // Im(ch[j]) - - // Resolve ch indices for conjugate component jc: - ih3 = optr( i-1, k, jc, L, M, sch, och ); // Re(ch[jc]) - ih4 = optr( i, k, jc, L, M, sch, och ); // Im(ch[jc]) - - // Resolve cc output indices: - io1 = optr( i-1, j2, k, R, M, sc, oc ); - io2 = optr( im-1, j2-1, k, R, M, sc, oc ); - io3 = optr( i, j2, k, R, M, sc, oc ); - io4 = optr( im, j2-1, k, R, M, sc, oc ); - - // Store the sum and difference combinations: - cc[ io1 ] = ch[ ih1 ] + ch[ ih3 ]; - cc[ io2 ] = ch[ ih1 ] - ch[ ih3 ]; - cc[ io3 ] = ch[ ih2 ] + ch[ ih4 ]; - cc[ io4 ] = ch[ ih4 ] - ch[ ih2 ]; - } - } - } - } else { - // Loop over harmonics before sub-sequences... - for ( j = 1; j < Rph; j++ ) { - jc = Rp1 - j - 1; // "mirror" index - j2 = 2 * j; // output column index - for ( i = 2; i < M; i += 2 ) { - im = M - i; // "mirror" harmonic index - for ( k = 0; k < L; k++ ) { - // Resolve ch indices for component j: - ih1 = optr( i-1, k, j, L, M, sch, och ); // Re(ch[j]) - ih2 = optr( i, k, j, L, M, sch, och ); // Im(ch[j]) - - // Resolve ch indices for conjugate component jc: - ih3 = optr( i-1, k, jc, L, M, sch, och ); // Re(ch[jc]) - ih4 = optr( i, k, jc, L, M, sch, och ); // Im(ch[jc]) - - // Resolve cc output indices: - io1 = optr( i-1, j2, k, R, M, sc, oc ); - io2 = optr( im-1, j2-1, k, R, M, sc, oc ); - io3 = optr( i, j2, k, R, M, sc, oc ); - io4 = optr( im, j2-1, k, R, M, sc, oc ); - - // Store the sum and difference combinations: - cc[ io1 ] = ch[ ih1 ] + ch[ ih3 ]; - cc[ io2 ] = ch[ ih1 ] - ch[ ih3 ]; - cc[ io3 ] = ch[ ih2 ] + ch[ ih4 ]; - cc[ io4 ] = ch[ ih4 ] - ch[ ih2 ]; - } - } - } - } -} - - -// EXPORTS // - -module.exports = radfg; diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/rfftf/lib/rfftf1.js b/lib/node_modules/@stdlib/fft/base/fftpack/rfftf/lib/rfftf1.js deleted file mode 100644 index c3768b4d701f..000000000000 --- a/lib/node_modules/@stdlib/fft/base/fftpack/rfftf/lib/rfftf1.js +++ /dev/null @@ -1,181 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2026 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -* -* -* ## Notice -* -* The original C code and copyright notice are from the [PFFFT library]{@link https://github.com/marton78/pffft/blob/0b4ee12c4ba45a4a8e567550c16d96d1679f50ce/src/fftpack.c}. The implementation follows the original, but has been modified for JavaScript. -* -* ```text -* Copyright (c) 2004 the University Corporation for Atmospheric -* Research ("UCAR"). All rights reserved. Developed by NCAR's -* Computational and Information Systems Laboratory, UCAR, -* www.cisl.ucar.edu. -* -* Redistribution and use of the Software in source and binary forms, -* with or without modification, is permitted provided that the -* following conditions are met: -* -* - Neither the names of NCAR's Computational and Information Systems -* Laboratory, the University Corporation for Atmospheric Research, -* nor the names of its sponsors or contributors may be used to -* endorse or promote products derived from this Software without -* specific prior written permission. -* -* - Redistributions of source code must retain the above copyright -* notices, this list of conditions, and the disclaimer below. -* -* - Redistributions in binary form must reproduce the above copyright -* notice, this list of conditions, and the disclaimer below in the -* documentation and/or other materials provided with the -* distribution. -* -* THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -* EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO THE WARRANTIES OF -* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -* NONINFRINGEMENT. IN NO EVENT SHALL THE CONTRIBUTORS OR COPYRIGHT -* HOLDERS BE LIABLE FOR ANY CLAIM, INDIRECT, INCIDENTAL, SPECIAL, -* EXEMPLARY, OR CONSEQUENTIAL DAMAGES OR OTHER LIABILITY, WHETHER IN AN -* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE -* SOFTWARE. -* ``` -*/ - -/* eslint-disable max-len */ - -'use strict'; - -// MODULES // - -var floor = require( '@stdlib/math/base/special/floor' ); -var gcopy = require( '@stdlib/blas/base/gcopy' ).ndarray; -var radf2 = require( './radf2.js' ); -var radf3 = require( './radf3.js' ); -var radf4 = require( './radf4.js' ); -var radf5 = require( './radf5.js' ); -var radfg = require( './radfg.js' ); - - -// MAIN // - -/** -* Performs the forward Fourier transform. -* -* @private -* @param {NonNegativeInteger} N - length of the sequence to transform -* @param {Collection} c - input array containing the sequence to be transformed -* @param {integer} sc - stride length for `c` -* @param {NonNegativeInteger} oc - starting index for `c` -* @param {Collection} ch - working array for intermediate results -* @param {integer} sch - stride length for `ch` -* @param {NonNegativeInteger} och - starting index for `ch` -* @param {Collection} wa - workspace array for storing twiddle factors -* @param {integer} swa - stride length for `wa` -* @param {NonNegativeInteger} owa - starting index for `wa` -* @param {Collection} ifac - workspace array for storing factorization results -* @param {integer} si - stride length for `ifac` -* @param {NonNegativeInteger} oi - starting index for `ifac` -* @returns {void} -*/ -function rfftf1( N, c, sc, oc, ch, sch, och, wa, swa, owa, ifac, si, oi ) { // eslint-disable-line max-params - var factor; - var idl1; - var FLG; - var ido; - var ix4; - var ix3; - var ix2; - var nf; - var l2; - var l1; - var kh; - var iw; - var k1; - - // Resolve the number of factors: - nf = ifac[ oi+si ]; - - FLG = 1; // flag to track whether the latest stage output resides in `c` or `ch` - l2 = N; - - // Initialize an index offset to the last element in each workspace: - iw = N - 1; - - for ( k1 = 1; k1 <= nf; k1++ ) { - kh = nf - k1; - - // Resolve the next factor: - factor = ifac[ oi+((kh+2)*si) ]; - - // Compute a sub-transform length: - l1 = floor( l2 / factor ); - - ido = floor( N / l2 ); - idl1 = ido * l1; - - // Adjust the index offset - iw -= ( ( factor - 1 ) * ido ); - - // Toggle the flag to swap the input and output work buffers for the next stage: - FLG = 1 - FLG; - - switch ( factor ) { - case 4: - ix2 = iw + ido; - ix3 = ix2 + ido; - radf4( ido, l1, ( FLG ) ? ch : c, ( FLG ) ? sch : sc, ( FLG ) ? och : oc, ( FLG ) ? c : ch, ( FLG ) ? sc : sch, ( FLG ) ? oc : och, wa, swa, owa+(iw*swa), wa, swa, owa+(ix2*swa), wa, swa, owa+(ix3*swa) ); - break; - case 2: - radf2( ido, l1, ( FLG ) ? ch : c, ( FLG ) ? sch : sc, ( FLG ) ? och : oc, ( FLG ) ? c : ch, ( FLG ) ? sc : sch, ( FLG ) ? oc : och, wa, swa, owa+(iw*swa) ); - break; - case 3: - ix2 = iw + ido; - radf3( ido, l1, ( FLG ) ? ch : c, ( FLG ) ? sch : sc, ( FLG ) ? och : oc, ( FLG ) ? c : ch, ( FLG ) ? sc : sch, ( FLG ) ? oc : och, wa, swa, owa+(iw*swa), wa, swa, owa+(ix2*swa) ); - break; - case 5: - ix2 = iw + ido; - ix3 = ix2 + ido; - ix4 = ix3 + ido; - radf5( ido, l1, ( FLG ) ? ch : c, ( FLG ) ? sch : sc, ( FLG ) ? och : oc, ( FLG ) ? c : ch, ( FLG ) ? sc : sch, ( FLG ) ? oc : och, wa, swa, owa+(iw*swa), wa, swa, owa+(ix2*swa ), wa, swa, owa+(ix3*swa), wa, swa, owa+(ix4*swa) ); - break; - default: - if ( ido === 1 ) { - FLG = 1 - FLG; - } - if ( FLG === 0 ) { - radfg( ido, factor, l1, idl1, c, sc, oc, c, sc, oc, c, sc, oc, ch, sch, och, ch, sch, och, wa, swa, owa+(iw*swa) ); - FLG = 1; - } else { - radfg( ido, factor, l1, idl1, ch, sch, och, ch, sch, och, ch, sch, och, c, sc, oc, c, sc, oc, wa, swa, owa+(iw*swa) ); - FLG = 0; - } - break; - } - l2 = l1; - } - if ( FLG === 1 ) { - return; - } - // Now that we've finished computing the transforms, copy over the final results to the input array... - gcopy( N, ch, sch, och, c, sc, oc ); -} - - -// EXPORTS // - -module.exports = rfftf1; diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/rfftf/package.json b/lib/node_modules/@stdlib/fft/base/fftpack/rfftf/package.json deleted file mode 100644 index 43cda925e14c..000000000000 --- a/lib/node_modules/@stdlib/fft/base/fftpack/rfftf/package.json +++ /dev/null @@ -1,62 +0,0 @@ -{ - "name": "@stdlib/fft/base/fftpack/rfftf", - "version": "0.0.0", - "description": "Compute the forward discrete Fourier transform (DFT) of a real-valued sequence.", - "license": "Apache-2.0", - "author": { - "name": "The Stdlib Authors", - "url": "https://github.com/stdlib-js/stdlib/graphs/contributors" - }, - "contributors": [ - { - "name": "The Stdlib Authors", - "url": "https://github.com/stdlib-js/stdlib/graphs/contributors" - } - ], - "main": "./lib", - "directories": { - "benchmark": "./benchmark", - "doc": "./docs", - "example": "./examples", - "lib": "./lib", - "test": "./test" - }, - "types": "./docs/types", - "scripts": {}, - "homepage": "https://github.com/stdlib-js/stdlib", - "repository": { - "type": "git", - "url": "git://github.com/stdlib-js/stdlib.git" - }, - "bugs": { - "url": "https://github.com/stdlib-js/stdlib/issues" - }, - "dependencies": {}, - "devDependencies": {}, - "engines": { - "node": ">=0.10.0", - "npm": ">2.7.0" - }, - "os": [ - "aix", - "darwin", - "freebsd", - "linux", - "macos", - "openbsd", - "sunos", - "win32", - "windows" - ], - "keywords": [ - "stdlib", - "fft", - "fftpack", - "rfftf", - "fourier", - "transform", - "forward", - "real" - ], - "__stdlib__": {} -} diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/rfftf/test/fixtures/c/fftpack/Makefile b/lib/node_modules/@stdlib/fft/base/fftpack/rfftf/test/fixtures/c/fftpack/Makefile deleted file mode 100644 index 4b8cac6acbd2..000000000000 --- a/lib/node_modules/@stdlib/fft/base/fftpack/rfftf/test/fixtures/c/fftpack/Makefile +++ /dev/null @@ -1,138 +0,0 @@ -#/ -# @license Apache-2.0 -# -# Copyright (c) 2026 The Stdlib Authors. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -#/ - -# VARIABLES # - -ifndef VERBOSE - QUIET := @ -endif - -# Specify the path to FFTPACK: -FFTPACK ?= - -# Specify a list of FFTPACK source files: -FFTPACK_SRC ?= - -# Determine the OS: -# -# [1]: https://en.wikipedia.org/wiki/Uname#Examples -# [2]: http://stackoverflow.com/a/27776822/2225624 -OS ?= $(shell uname) -ifneq (, $(findstring MINGW,$(OS))) - OS := WINNT -else -ifneq (, $(findstring MSYS,$(OS))) - OS := WINNT -else -ifneq (, $(findstring CYGWIN,$(OS))) - OS := WINNT -endif -endif -endif - -# Define the program used for compiling C source files: -ifdef C_COMPILER - CC := $(C_COMPILER) -else - CC := gcc -endif - -# Define the command-line options when compiling C files: -CFLAGS ?= \ - -std=c99 \ - -O3 \ - -ffp-contract=off \ - -Wall \ - -pedantic - -# Determine whether to generate [position independent code][1]: -# -# [1]: https://gcc.gnu.org/onlinedocs/gcc/Code-Gen-Options.html#Code-Gen-Options -# [2]: http://stackoverflow.com/questions/5311515/gcc-fpic-option -ifeq ($(OS), WINNT) - fPIC ?= -else - fPIC ?= -fPIC -endif - -# List of C targets: -c_targets := runner.out - - -# RULES # - -#/ -# Compiles C source files. -# -# @param {string} [C_COMPILER] - C compiler -# @param {string} [CFLAGS] - C compiler flags -# @param {(string|void)} [fPIC] - flag indicating whether to generate position independent code -# -# @example -# make -# -# @example -# make all -#/ -all: $(c_targets) - -.PHONY: all - -#/ -# Compiles C source files. -# -# @private -# @param {string} CC - C compiler -# @param {string} CFLAGS - C compiler flags -# @param {(string|void)} fPIC - flag indicating whether to generate position independent code -#/ -$(c_targets): %.out: %.c - $(QUIET) $(CC) $(CFLAGS) -DFFTPACK_DOUBLE_PRECISION $(fPIC) -o $@ $(FFTPACK_SRC) $< -lm - -#/ -# Generates test fixtures. -# -# @example -# make run -#/ -run: $(c_targets) - $(QUIET) ./$< - -.PHONY: run - -#/ -# Removes generated files. -# -# @example -# make clean -#/ -clean: - $(QUIET) -rm -f *.o *.out - -.PHONY: clean - -#/ -# Removes generated test fixtures. -# -# @example -# make clean-fixtures -#/ -clean-fixtures: - $(QUIET) -rm -f *.json - -.PHONY: clean-fixtures diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/rfftf/test/fixtures/c/fftpack/large.json b/lib/node_modules/@stdlib/fft/base/fftpack/rfftf/test/fixtures/c/fftpack/large.json deleted file mode 100644 index bb503d1af6b9..000000000000 --- a/lib/node_modules/@stdlib/fft/base/fftpack/rfftf/test/fixtures/c/fftpack/large.json +++ /dev/null @@ -1 +0,0 @@ -{"lengths":[858,464,488,372,141,422,950,550,890,992],"offsets":[0,858,1322,1810,2182,2323,2745,3695,4245,5135],"input":[-1.3836292177438736,5.343804806470871,-6.6724975593388081,-4.666453767567873,-9.0884297713637352,-9.2391601763665676,-2.565078241750598,8.7300490774214268,5.9349908027797937,9.3905470240861177,6.9239855650812387,-8.5744752269238234,8.7948722392320633,-4.5821281336247921,8.1725005619227886,-4.7829135414212942,-6.4278498385101557,7.1277921088039875,-3.1978932861238718,-6.9924066495150328,-1.3785348646342754,-9.0354024339467287,1.9913002010434866,7.782572777941823,1.7008180357515812,5.6488184444606304,-0.30828148126602173,-1.2867797911167145,-6.9078811071813107,-0.757744200527668,4.5932940579950809,-0.50665306858718395,4.6819505468010902,9.542954983189702,8.4445554111152887,7.6429389603435993,-5.1247554272413254,8.2355725020170212,-4.7328158840537071,-4.4365220703184605,-4.6263923030346632,4.2246049456298351,2.9354325216263533,-4.1855077911168337,-5.8293997962027788,5.2776578534394503,1.5956623200327158,-1.7032964620739222,-7.3035731445997953,8.8461798056960106,-2.2558581735938787,5.7917370088398457,1.7240311577916145,-4.2082392424345016,-7.8769022691994905,-7.0964218210428953,-9.5615235436707735,-0.52619504742324352,-3.7600878998637199,4.2027158197015524,-4.9551071226596832,-0.4853710625320673,2.3686264827847481,9.5053929556161165,-2.8604423068463802,4.5462047029286623,8.0625559575855732,7.3781204968690872,4.0713268797844648,6.7909786570817232,-4.0215790178626776,9.3214935623109341,6.3424529694020748,-2.3928153607994318,3.9522905740886927,6.1477878969162703,5.8713098429143429,-0.89534592814743519,-8.0789431184530258,-2.7969768084585667,-8.7891633901745081,0.53091080859303474,3.0180424358695745,4.2393215373158455,-9.7228108905255795,8.7173650972545147,-7.2446639556437731,-1.067080944776535,5.5706310458481312,5.5961094237864017,-6.1887923628091812,4.9667880870401859,-3.1925039831548929,3.5856083873659372,3.3202727790921926,3.8247024454176426,1.7741083260625601,-2.5612717214971781,-7.2937649860978127,-6.3081001676619053,-0.23948900401592255,-5.0916141085326672,5.2417162992060184,-2.4740399606525898,-1.1895597912371159,7.06865762360394,2.9288134910166264,4.5684446953237057,1.8501083180308342,-5.229406114667654,9.3714681081473827,6.2646452337503433,9.8925709258764982,4.4397068861871958,-1.8462508451193571,-9.9378901068121195,-6.1190247070044279,-2.4482202529907227,-7.2377329133450985,-4.5770529750734568,-6.529309619218111,1.8932569585740566,-0.030204169452190399,-7.6413979567587376,-8.9754407852888107,9.7667296603322029,9.4255558960139751,-4.6819036640226841,-8.7548396084457636,-2.5892894063144922,1.8130060657858849,-8.8069598842412233,1.4252348896116018,-6.0771208815276623,1.8293748609721661,6.3033809326589108,0.92346278950572014,0.63918870873749256,2.8447110112756491,-8.9419329632073641,-7.0673043467104435,-0.18413221463561058,5.2899454347789288,8.1130419857800007,-4.1032032389193773,-2.5367903709411621,4.1642939951270819,9.2892869468778372,5.045867133885622,5.889036962762475,-2.9556425008922815,4.5165426284074783,9.5320692472159863,5.4879908170551062,-3.3382165431976318,-5.4053893871605396,-8.3793940488249063,7.5242340750992298,-0.19776266068220139,-3.796961372718215,4.4702572654932737,-8.3860256057232618,-3.9323427621275187,9.1152444016188383,-0.087192393839359283,-5.4424856789410114,8.1432296987622976,3.2616890873759985,-0.79140468500554562,-1.1384688224643469,5.7545701880007982,-2.9387269727885723,8.8158235978335142,7.5473560392856598,8.4130895975977182,-1.2029890716075897,1.3627423346042633,3.6105066165328026,1.7848105821758509,-2.6884531415998936,-4.8318936489522457,-9.6365174930542707,-0.94950292259454727,1.7044507805258036,6.7043598927557468,0.1768482755869627,-7.7109525632113218,2.0202880166471004,-5.0192101392894983,2.1352279372513294,6.776036350056529,4.8430666886270046,-2.5780480820685625,-9.254057239741087,7.0599775016307831,-2.9579965770244598,4.9515850562602282,1.2901575770229101,3.6784853786230087,4.3038655631244183,-4.9313686229288578,-1.5124059002846479,0.99410033784806728,7.844464248046279,1.9107565656304359,-5.9143082331866026,-1.7784431949257851,9.7052872180938721,-3.2375712785869837,6.1395737063139677,7.8154083248227835,-6.4321452751755714,-5.0656119547784328,2.2599146515130997,2.3856439255177975,-4.4824468903243542,3.5151574946939945,-0.74788090772926807,-9.634343795478344,-4.4161677453666925,-2.5312526803463697,-2.7637401316314936,9.8196642939001322,-0.90205730870366096,-0.87711618281900883,-1.6916132438927889,9.0562749095261097,8.8125535380095243,-7.4125394411385059,-2.5503669679164886,-4.0175714716315269,-3.3236768934875727,-1.0374965984374285,2.7947402000427246,-8.8013577461242676,-4.4196297321468592,-0.71686452254652977,-8.3419577870517969,-3.2845140062272549,-2.8268501069396734,9.1303087957203388,-6.8999206088483334,-6.965648652985692,8.3431130088865757,2.7004839107394218,7.0331871882081032,6.7772055137902498,4.4932015705853701,-2.7610897459089756,-5.6353028398007154,7.4652056209743023,7.71100839599967,-1.0817498248070478,-0.9692357387393713,-9.9449903145432472,-5.452216099947691,4.6040437649935484,0.16367253847420216,-9.1555663198232651,2.396869333460927,4.1829844936728477,3.42049615457654,8.2789749931544065,4.7328529972583055,5.0604402180761099,-9.1811369266360998,-7.3683195654302835,0.6530844047665596,-3.6103257164359093,1.2557338643819094,5.1191467512398958,-2.500433586537838,-4.7872302494943142,1.0212375409901142,3.9394376706331968,-9.8709605727344751,-1.2343449424952269,-5.6353799160569906,6.1697849817574024,-4.4236850552260876,-8.8746795430779457,3.2609282899647951,6.421873215585947,-7.5767371244728565,-2.2208320535719395,-5.5242635030299425,-6.2966603972017765,-7.9712667874991894,6.919118370860815,9.6225914638489485,6.8948864750564098,2.3571184929460287,-3.9093923475593328,-5.1571377646178007,3.9856279641389847,6.4493027329444885,-6.5688386652618647,-2.4714202061295509,2.8406544961035252,2.8802165016531944,7.7988440822809935,-4.8273698054254055,6.3957206904888153,-7.1222266368567944,-3.2630631327629089,-2.3020196240395308,9.9562390055507421,-5.4908775258809328,-5.1785421930253506,4.2413995508104563,5.202361922711134,-3.9030460175126791,1.5056313760578632,5.1466274447739124,-0.63241714611649513,-9.0349014662206173,-9.5889352168887854,-1.2341870367527008,-2.9814581014215946,-9.3662556633353233,1.3410712778568268,-0.61494430527091026,4.6311347559094429,-4.5180429238826036,5.2526212017983198,0.80465799197554588,3.8869556877762079,8.0643531307578087,-2.4167899787425995,1.0108866170048714,9.9714581668376923,-9.702433655038476,-8.8024379033595324,-2.5738323945552111,1.5990028250962496,-5.5594278313219547,2.6964737195521593,-0.3660961240530014,7.0225184317678213,7.467415938153863,4.8598092515021563,-1.1857937090098858,-9.6347983460873365,7.9442001599818468,-1.8277707509696484,0.65705240704119205,3.079888541251421,3.6868151742964983,4.3027415126562119,-3.8232848513871431,2.0515510719269514,0.41896019130945206,1.4640168752521276,5.7317120768129826,-7.1150018833577633,-1.8366310186684132,-8.257466871291399,-3.2456921599805355,9.6519200596958399,-0.17940289340913296,4.7756473254412413,4.3047143239527941,9.3337546195834875,-7.5859573483467102,2.8148652240633965,9.4399211183190346,-3.245612271130085,-9.0053880214691162,6.4435309451073408,-3.5752768907696009,-9.6786528825759888,-9.118994940072298,-2.947950903326273,-6.2107770144939423,-4.5292529463768005,-3.1542269419878721,6.9078395795077085,0.059945108368992805,7.497515082359314,-9.2638738453388214,2.0722871460020542,8.9301573298871517,9.1543915588408709,-2.1409206558018923,-2.4534005578607321,5.6968830898404121,7.514213789254427,-8.6087069287896156,-6.5373412799090147,6.9051356613636017,-5.3848071582615376,-2.4538727849721909,-2.2398379724472761,-4.9567421898245811,-7.9659449122846127,-3.6361248511821032,7.6496759802103043,8.1043375190347433,9.600824099034071,1.0507858637720346,0.55809889920055866,-0.031718509271740913,6.9070926774293184,7.5067618675529957,6.1468449700623751,-9.9764617905020714,5.6066872086375952,-8.4079622849822044,7.3778887558728456,0.17645595595240593,5.6953313294798136,1.4337773993611336,-2.5031594559550285,9.3990824278444052,-9.6214833948761225,-8.2714147213846445,2.3327912110835314,7.221981193870306,-0.1619398407638073,-1.7228267248719931,4.4512998498976231,-7.0033096708357334,-4.6256142854690552,-2.6992538198828697,-6.3588936347514391,6.0747092217206955,-2.3619847372174263,2.1225813589990139,-5.7750044297426939,-0.4994176235049963,6.2880760990083218,3.695123502984643,3.9408218394964933,-6.6072344779968262,-7.7898451406508684,-3.9272616244852543,-5.4860751982778311,-4.4658221304416656,2.9274969734251499,2.4417335260659456,-1.7845300398766994,7.4036840815097094,-6.281505860388279,6.7310335487127304,8.4809841495007277,-0.099254706874489784,-8.1737809535115957,3.2635286170989275,-9.8744286131113768,0.47830041497945786,-1.2048434372991323,-9.803581852465868,-8.8001928571611643,-4.8413409199565649,-8.4168013371527195,-1.1800611391663551,6.7125030513852835,-2.9610845725983381,-6.9483565725386143,-1.0288907773792744,7.4327747896313667,2.6460257638245821,-8.2448884285986423,8.1601942703127861,8.3852432668209076,-9.2162706516683102,2.139163538813591,-7.078308155760169,-5.1251509971916676,1.5872283466160297,-3.4530877415090799,3.9543796889483929,1.2595413625240326,9.1117680538445711,1.4858305361121893,-7.6460896711796522,-7.8290850948542356,-3.4331722278147936,-1.3255814928561449,0.95191745087504387,-1.1233174335211515,0.40396427735686302,9.4276909530162811,-8.7980006076395512,-7.9962031915783882,7.8129748161882162,-7.3321249149739742,8.9765749033540487,9.2945491801947355,-6.5117774624377489,-3.4437838941812515,0.32414180226624012,7.8513514809310436,-2.3355202842503786,6.9106425810605288,7.1699922252446413,6.0594640579074621,1.4125469326972961,0.67638715729117393,8.0390361417084932,-7.9194251261651516,-1.7780791781842709,-4.1766833979636431,2.4821759946644306,-2.067959988489747,3.7965355254709721,8.372684558853507,-0.29047556221485138,-2.0226981583982706,4.5121142268180847,-4.8960762936621904,-8.3542276360094547,-9.5038655307143927,8.5320291575044394,-2.1858047880232334,3.1789888441562653,9.2656068690121174,7.0547982584685087,9.9944635480642319,-3.050991203635931,1.9908948708325624,0.97018792293965816,5.9485066961497068,-3.4478329960256815,-7.7291129250079393,-3.2009128388017416,2.257971465587616,9.7265180572867393,-6.4108567964285612,-7.2701494861394167,-9.4023921806365252,-6.0053752828389406,7.6576525811105967,2.1670689154416323,1.9273570459336042,-6.9100356474518776,3.0308974534273148,0.29360173270106316,-5.4355979338288307,3.9055618550628424,0.77820686623454094,-0.67711484618484974,-0.26914686895906925,-3.5513504408299923,-7.5468085613101721,0.78852925449609756,-7.1887352503836155,-1.0733311995863914,0.52259841002523899,3.3115596417337656,-2.6169972028583288,-3.8719306606799364,4.4614339061081409,3.3197731338441372,-4.5728352386504412,4.3581864703446627,8.0401194468140602,-9.712316207587719,5.1015013176947832,0.93276468105614185,-3.0239199288189411,-3.0221890658140182,6.0684254672378302,-7.9730463773012161,-2.9904474411159754,-0.45008798129856586,-4.6286269463598728,6.6669545602053404,-8.4945761878043413,-8.3419766463339329,-3.6014819610863924,9.8927300889045,7.114759897813201,-2.2302635107189417,-4.0387638472020626,0.49606672488152981,-2.6064727734774351,-6.9878459721803665,-4.7272308636456728,9.4309159647673368,5.4047719109803438,-1.9983715936541557,-6.6313119232654572,7.5405320338904858,-6.2779691256582737,6.1729341838508844,8.5049545485526323,2.7712423447519541,-3.729811804369092,-6.9469469599425793,2.6624681334942579,8.1020187307149172,-9.3710512015968561,0.74245967902243137,-1.4800905995070934,4.117360757663846,0.48236453905701637,7.1008899621665478,4.6577279642224312,2.4340093974024057,8.3960394468158484,-7.7648733928799629,-4.2270966432988644,-4.8132387455552816,3.8964440394192934,7.5350792706012726,2.0774382259696722,-4.4956416077911854,1.7515409272164106,-1.8515443056821823,1.0949181672185659,2.2897232696413994,3.3790890406817198,-7.6503885537385941,-0.08040430024266243,8.6450034473091364,-3.426915155723691,3.8370291888713837,8.9496856462210417,-2.6331956591457129,3.8806143868714571,1.4861087780445814,-2.9696775134652853,8.6300862021744251,5.858945744112134,-8.6987545900046825,0.031615970656275749,-8.630302669480443,-9.4969552382826805,4.6733141131699085,4.3904148787260056,9.7029793635010719,-2.0256834384053946,-5.6614868715405464,7.3901839647442102,6.8220315501093864,-2.1156056597828865,3.0157377291470766,5.5041156336665154,7.6715763658285141,-3.8158812187612057,6.4844046719372272,3.3894502557814121,6.4905537012964487,6.7361867427825928,-4.9092830717563629,9.6794528234750032,2.5637581571936607,9.0834462735801935,5.4816694092005491,-9.5821184013038874,-6.6639674454927444,-1.3008302915841341,-3.0546425748616457,0.62229865230619907,-1.0264675598591566,8.1597916688770056,1.6187209356576204,5.8428565226495266,0.8897001575678587,-6.8093665316700935,-5.0232728105038404,-6.1460871901363134,2.7126255352050066,-8.9025303162634373,-4.8270168527960777,-7.6722044590860605,-6.7403256427496672,-4.6530521847307682,-3.8480269256979227,6.211507935076952,-3.1860082875937223,-7.2412362601608038,-3.4578029345721006,4.7061298415064812,-4.0756387077271938,0.74028559029102325,1.9800000730901957,-2.138677816838026,-4.7580060735344887,-7.808036869391799,-9.6756467130035162,1.4056970831006765,5.5509649310261011,-4.9322825390845537,3.1274052616208792,2.3003347963094711,1.7270178347826004,5.988840963691473,-5.5497981049120426,4.5432855654507875,-0.99938765168190002,3.2918086182326078,5.4275506548583508,0.843976940959692,4.7205315716564655,-2.0257599651813507,-6.9476723950356245,-9.5299194753170013,-9.3566179741173983,3.3217140380293131,8.0479414109140635,1.7514344770461321,-3.6406523175537586,-8.4434513561427593,-9.0869305096566677,-4.0410686563700438,1.7591390199959278,5.8496010955423117,-5.7542631775140762,8.09880874119699,-3.3213450573384762,-1.8463264219462872,8.7918901536613703,5.2979596517980099,2.8079874906688929,-6.1541440896689892,7.300315024331212,-3.6052506696432829,6.5520453453063965,0.22624810226261616,2.5519347563385963,-9.632451981306076,7.3795530572533607,8.1483692675828934,9.642422292381525,0.19162178039550781,0.58734286576509476,-8.5283722262829542,3.6480043735355139,-7.990387175232172,5.5627615936100483,-6.6657743975520134,8.329726429656148,-2.2877533175051212,9.7300530411303043,-6.9983833096921444,-1.8282625079154968,-7.6079065818339586,-6.0859021637588739,-5.7576356641948223,-8.5825749207288027,-7.3366815969347954,-7.6075788401067257,-0.57754695415496826,-6.8315847404301167,1.5552923828363419,-0.20083123818039894,4.6294565871357918,7.2769744787365198,4.1101993340998888,0.12031864374876022,2.1955246850848198,0.18347766250371933,3.7091533932834864,-0.25881179608404636,-9.8497805465012789,-5.2616438735276461,7.551454696804285,-2.7007734496146441,8.1006894446909428,8.2876385748386383,-9.6583295613527298,-7.5449349824339151,-7.7222305536270142,-7.5288969837129116,1.8284140713512897,-9.8446102254092693,1.6359427571296692,-4.709989856928587,-0.79948400147259235,3.0724592506885529,-1.1772713717073202,-6.3998752366751432,-2.7030746266245842,9.4248074200004339,2.7384599670767784,5.2967663481831551,2.7521336264908314,-4.8900397680699825,-6.8983419612050056,-0.43331770226359367,-2.7705470751971006,-4.5846362598240376,6.0184235125780106,-8.3558987360447645,2.409956157207489,4.1332313045859337,7.2186467796564102,3.796560438349843,8.7913953140377998,-3.0188099015504122,2.8620392736047506,2.2941721323877573,-1.848874744027853,5.9622409101575613,7.383101936429739,7.7943816129118204,0.17190746963024139,9.2489216756075621,6.6267525777220726,-4.1692961007356644,6.6404805611819029,6.556922011077404,2.1883697528392076,-0.069468645378947258,-7.5594451650977135,8.4051292948424816,5.0082024559378624,-7.1412055939435959,-2.2423950396478176,-7.9333706479519606,3.8395360391587019,-8.9176815468817949,0.52625002339482307,4.6842255722731352,7.7793081104755402,6.8315519019961357,-2.1070514246821404,6.7867671325802803,5.1953286491334438,-2.1112750936299562,-4.2004369013011456,3.2570452149957418,1.1590321827679873,-0.14601688832044601,5.8942351117730141,4.4096479564905167,-7.0466824900358915,6.4074130728840828,9.3916443642228842,5.366981253027916,2.8540399018675089,7.8487312793731689,-6.3732478860765696,4.8228070884943008,-3.0811476707458496,-4.8488480783998966,5.4103866405785084,-7.6316111907362938,-4.4892641715705395,8.937111534178257,6.0337031353265047,8.4487209096550941,-2.3475270438939333,5.1130331587046385,-5.2515833731740713,-3.3617157768458128,-0.35700949840247631,-0.25856418535113335,-5.6881869584321976,-1.3581766281276941,-6.8745213095098734,-0.079624475911259651,1.7515109945088625,-2.3546233214437962,5.8458963222801685,-8.0203874222934246,1.3486090023070574,6.0715905856341124,5.2230985276401043,4.6170731820166111,-0.850915452465415,-1.3359379861503839,6.8903345707803965,5.8532632887363434,-4.2037821374833584,7.0336606726050377,-5.264942217618227,-7.8838144522160292,-3.2694818358868361,9.8188369162380695,5.1922063156962395,5.4116667993366718,-6.1159829329699278,8.6748759634792805,-1.359535651281476,-9.715623464435339,9.5164354518055916,2.7307912334799767,-3.591639269143343,-4.681146340444684,3.9734977670013905,2.5770793482661247,-7.0272952597588301,-7.7514075022190809,2.0941277965903282,-3.9940280560404062,-7.6294908672571182,-8.8529874384403229,7.840131102129817,9.0835731104016304,7.6134158670902252,-1.3193839695304632,5.1136920321732759,5.822103014215827,-7.9145162459462881,0.72547069750726223,-7.0139030553400517,-2.6686277333647013,8.3737427089363337,-2.5061471108347178,-0.81443315371870995,-8.1779426615685225,-6.6822987236082554,-9.3946217186748981,4.5927789621055126,-9.1638696845620871,2.8422181028872728,9.1597557254135609,8.01462696865201,1.8356031179428101,-9.018304105848074,9.36290068551898,2.2719730529934168,5.0511976983398199,-4.5201662089675665,9.566568760201335,5.3213058318942785,-4.8127634450793266,-8.1151808518916368,8.1554370000958443,8.429802693426609,-0.30598734505474567,-2.729232469573617,9.7899407707154751,-0.46531170606613159,-0.49376923590898514,1.2205264717340469,-6.6115017514675856,0.49008959904313087,-3.0640267860144377,2.9018617328256369,-8.4097554255276918,-2.7594244014471769,2.3541415389627218,6.0569420270621777,-0.97522550262510777,9.3850480020046234,-5.4980785958468914,-6.2069251667708158,0.20875176414847374,8.4909799322485924,7.8998660109937191,-6.9518131390213966,0.87659631855785847,-7.0455888751894236,4.7877978067845106,8.5178543534129858,-0.42173726484179497,-8.1381352338939905,2.3611385095864534,3.6550273559987545,-9.9551208596676588,4.2837119102478027,-3.6538126785308123,-9.6296383999288082,-5.3325847070664167,-4.7511351387947798,7.6717633474618196,-0.67328090779483318,4.1678556799888611,9.1505244467407465,-7.1354737505316734,-5.9073027689009905,-4.0376048907637596,-0.025352407246828079,-6.0978305339813232,-6.2377540860325098,2.0671054907143116,1.8420768715441227,-0.21392728202044964,4.5242476649582386,-0.96938137896358967,7.6072344277054071,-5.2108357567340136,1.4834740478545427,-7.2515878360718489,2.5632606446743011,0.72175336070358753,-9.4911827426403761,1.6916484199464321,-8.46491445787251,-9.817281449213624,0.95068449154496193,-1.8456649035215378,-0.08996967226266861,7.8797958325594664,-4.2713022418320179,-7.7767336368560791,-3.5622172430157661,9.8148470092564821,-1.8661603517830372,-4.5569687616080046,-8.9739337470382452,-4.9044784437865019,-9.5691648405045271,-8.9534709881991148,-0.98689047619700432,-6.6681629046797752,8.1860871147364378,3.5662797000259161,-1.5369754936546087,8.0529443733394146,5.8362239971756935,9.4168444629758596,8.9050411898642778,7.0274259988218546,9.9488954525440931,-8.9139729645103216,2.8563939686864614,7.4135323241353035,-0.76209197752177715,-8.4797939099371433,0.10376757942140102,4.0217864047735929,-5.8357852324843407,-2.0423697773367167,-6.1087854206562042,9.6434654761105776,-2.2755892761051655,-5.8289030473679304,-6.3734844699501991,0.84654192440211773,7.8302083071321249,2.3111575096845627,3.6243616137653589,-5.3542508184909821,-8.8934700191020966,7.4493976030498743,2.0256510190665722,5.116771562024951,-2.4202387407422066,3.0475436616688967,0.066423779353499413,-3.6154616251587868,-5.0634840782731771,-1.9768649060279131,-5.168412821367383,-5.514250909909606,1.9849922508001328,1.7648529913276434,1.8843173142522573,9.7211936395615339,4.1016544494777918,-3.4935572650283575,3.7830975838005543,2.5211988016963005,-6.2116418965160847,0.93467489816248417,9.0810989867895842,6.0308203008025885,-0.003078952431678772,8.2521247118711472,-6.5398247353732586,5.1656996551901102,-0.08577653206884861,-1.6460968926548958,-5.950409471988678,-8.5319640208035707,3.2807138375937939,-1.0424276255071163,-0.081031797453761101,-1.9013421796262264,4.1420503985136747,-4.5588415022939444,-0.44908647425472736,-7.7962980512529612,7.618669830262661,6.9839751068502665,-0.33024624921381474,9.5513651333749294,9.7939496394246817,6.9117447175085545,5.6935995165258646,-7.6728029269725084,3.2012245804071426,2.9816262144595385,-7.8081119805574417,9.0619599167257547,4.360469589009881,6.4124948717653751,-5.1985617913305759,7.7720106765627861,4.1835800744593143,-6.5695775579661131,5.1100101042538881,3.939940445125103,-1.4208296872675419,0.11551323346793652,1.4309940580278635,-9.2827772628515959,4.3625488597899675,1.3587988913059235,-2.6669449266046286,-3.3433240558952093,8.7526446580886841,5.6989152543246746,1.6688022948801517,7.5602613668888807,5.3129307273775339,-5.5731451231986284,-7.8500509541481733,4.193630451336503,2.3471066914498806,7.8222598228603601,8.720982288941741,-6.4505232404917479,6.0559248272329569,1.928696958348155,-4.3901276867836714,-4.875987870618701,9.2718986049294472,-7.1999961230903864,9.6651811245828867,2.6993147656321526,7.383365361019969,-7.7782412897795439,-8.9013399370014668,-4.820312587544322,5.0063816737383604,2.2569079603999853,-8.147813631221652,-0.30368545092642307,-4.0412978362292051,-2.0926868729293346,8.2117885537445545,-4.469634685665369,-1.1501186992973089,9.9550901632755995,-4.7994696535170078,-4.6864259615540504,-4.7610942553728819,0.28889094479382038,-4.6098103281110525,2.9178576171398163,0.43307236395776272,-1.3526973128318787,5.2163309045135975,-9.1263687517493963,-6.8796038161963224,-5.5013143923133612,-0.59095640666782856,7.7957467641681433,3.1160046439617872,-9.3098462838679552,9.4135124236345291,-7.0965440385043621,8.3843675721436739,-3.9340711012482643,0.06704878993332386,6.8890911899507046,4.9557616747915745,-8.5134147293865681,-4.9613451678305864,-5.3281962964683771,9.0048818103969097,5.048736073076725,-5.8927020244300365,1.3571075443178415,8.9065862260758877,-7.0051503740251064,4.4376871921122074,4.2087508179247379,-3.5248919390141964,-2.8587683383375406,-7.3194065503776073,2.7341287769377232,-7.4975463468581438,8.7385679315775633,9.1113726701587439,-5.1593830715864897,6.2487537227571011,2.8039455413818359,5.9128142055124044,-3.3315234165638685,7.0859899930655956,-5.7660528272390366,9.9501657206565142,-7.5645767897367477,2.1579139493405819,8.0598417110741138,1.7597793601453304,-3.388202004134655,-5.5110317468643188,-3.9105344191193581,-4.3519344832748175,-2.9628161992877722,3.9481936395168304,-2.7093914803117514,3.2574474532157183,7.9194499459117651,2.1953811775892973,-2.2284528147429228,6.3936034310609102,-2.7070058602839708,3.3525632787495852,6.531130438670516,8.7094121053814888,-0.91059843078255653,-4.4277550280094147,2.7212878502905369,-3.3150006085634232,4.7848241869360209,-1.4597744587808847,5.5707381013780832,7.3953917156904936,-5.6512982491403818,-1.3696392718702555,0.47282521612942219,6.7734894435852766,2.0372096076607704,-0.61802984215319157,-7.2274836432188749,7.6824301108717918,-1.3969881925731897,0.81951474770903587,-6.4155505783855915,-6.15854287520051,-6.630073431879282,8.3558567706495523,-3.1151120364665985,4.3120569828897715,-7.2581765614449978,-8.173446748405695,8.8805138319730759,-5.2038782648742199,-1.5819602087140083,-8.0051619745790958,-2.75729114189744,-1.7921651899814606,-0.92028378508985043,-7.2095049452036619,9.8504077922552824,-4.1960802115499973,-3.5200701002031565,-1.8181234039366245,2.8000140655785799,-0.16349964775145054,-7.9385027755051851,-2.4161317851394415,-7.9268534854054451,-6.626512985676527,8.1962761282920837,-5.1869693864136934,2.6055602077394724,-8.3494898676872253,-9.8761933017522097,-9.180821580812335,-2.0683023054152727,-1.9567850418388844,-7.6861352380365133,-0.87492757476866245,-4.907677723094821,-3.3394522033631802,-6.1731297988444567,8.2075007632374763,3.4654702246189117,4.1581705491989851,6.3725311867892742,3.1317844986915588,-4.0978277195245028,7.8095641359686852,-4.6554273925721645,-3.7681451346725225,8.7847703229635954,5.6349650584161282,6.8578591570258141,0.038984064012765884,-4.7947575710713863,-5.490456260740757,1.901661017909646,1.2168211489915848,-8.8868611119687557,-1.4747001510113478,-5.2853713277727365,8.7641310133039951,-1.2499125488102436,-7.2801393736153841,2.6975689269602299,-1.958945207297802,-3.9920361246913671,5.8488993253558874,2.451085289940238,-4.6094345301389694,9.2338941339403391,-5.9411403350532055,7.2544205188751221,5.0457957666367292,4.6895676106214523,-2.4370533227920532,0.44486301951110363,-3.1871493346989155,-6.418814966455102,-1.0231131874024868,4.5367295760661364,8.8140987046062946,-1.442924439907074,8.7690054439008236,0.67464252933859825,-1.2829258665442467,-2.1349707897752523,-2.4540022015571594,-4.4149425160139799,-1.938822939991951,-5.7970893569290638,8.3192109782248735,0.97905439324676991,-5.0327267777174711,-5.0389142241328955,-9.0313261747360229,-9.4990112073719501,-9.8813583794981241,4.00971669703722,-8.69136325083673,4.2578534223139286,1.7425804119557142,7.5490756332874298,-2.685693996027112,1.5410660114139318,0.69654415361583233,6.8176735285669565,4.6391262393444777,9.7948192246258259,1.5268632024526596,1.989933829754591,4.8179705161601305,-4.369418928399682,3.176114447414875,0.95562081784009933,1.1191711761057377,9.9100438226014376,-1.8933177180588245,-0.99082397297024727,7.2215567901730537,-7.294892780482769,-5.2629404049366713,5.760651296004653,-0.73354470543563366,-8.6857917346060276,-2.1016732417047024,-2.8221115190535784,8.7717554345726967,6.8937357701361179,3.017220888286829,-9.568428685888648,3.4190796408802271,4.4716292899101973,-5.3264112211763859,-0.99335773847997189,4.6365598496049643,6.6615068539977074,-0.05417446605861187,9.4898267835378647,-4.4810965470969677,6.210376126691699,-2.208311827853322,4.9031702429056168,7.5823891442269087,-2.7855153754353523,3.8431415148079395,-8.320452282205224,-1.8414938822388649,-9.9876149371266365,-1.8442481942474842,3.7206631060689688,-6.8150689173489809,-0.86326896212995052,-8.9613750111311674,6.1701960396021605,2.4849641416221857,4.792425949126482,6.3030427321791649,-4.7606726735830307,7.3744160868227482,1.8113072030246258,2.6402536686509848,-5.2564920578151941,-5.8619785774499178,-2.2739188186824322,2.2464748658239841,-3.4968342538923025,8.7067457195371389,-5.7245453353971243,7.5665814336389303,-8.4657073486596346,-3.1433969177305698,8.9280573558062315,-6.1398728284984827,7.1574016287922859,-5.5506906099617481,9.542953185737133,8.4143456257879734,-0.092923268675804138,-1.7612991016358137,-2.153936717659235,-1.2143522966653109,-9.6189812943339348,-6.2186108902096748,3.8067978341132402,0.85130599327385426,7.8999138716608286,-6.1474189069122076,0.33046167343854904,-5.930573670193553,4.8483568988740444,6.3345155771821737,4.2034335341304541,7.1075192838907242,-3.9232617616653442,1.7396192438900471,-2.2192760650068521,0.62723631970584393,1.9609084632247686,-3.0113649740815163,7.988935299217701,-9.96428526006639,-9.7423656564205885,0.060414550825953484,-4.6125655341893435,-3.3888909593224525,2.9096984025090933,3.3011520002037287,2.4617715179920197,-5.0059995800256729,4.1650975868105888,2.7952523808926344,-0.19313420169055462,-6.0064510628581047,9.5770177897065878,0.93814481049776077,7.3999156337231398,-9.617807837203145,-6.496316883713007,-3.597837146371603,-8.8488689623773098,-2.9406416695564985,-3.364484990015626,-6.8991752620786428,5.5613945052027702,-9.6424292679876089,-0.30870427377521992,-8.3926534932106733,4.6727521810680628,-5.053977956995368,-2.2074845153838396,-1.192189073190093,2.8783158212900162,-4.1458907909691334,0.013521993532776833,7.2642236668616533,9.8073040507733822,-8.6406636331230402,-3.6336712632328272,8.8871286623179913,5.9715753886848688,4.2676826193928719,6.941895792260766,-7.5572868809103966,4.6794116497039795,6.871711453422904,-7.1454702783375978,6.081054313108325,4.2799662612378597,-6.6069356165826321,-2.7668813522905111,-2.9748313408344984,2.009709570556879,-2.8111536614596844,-7.0595318917185068,-9.5524810999631882,-8.5498435795307159,2.7789701707661152,6.151760071516037,-7.3683516215533018,0.1143171451985836,1.3283385057002306,5.3853539563715458,-8.3559348527342081,1.8029429577291012,2.0623829215764999,2.4698573350906372,-9.1076715383678675,7.3644616268575191,-5.4933015070855618,-5.9183943178504705,9.5467318221926689,-8.0781114287674427,-8.8187682535499334,2.9619718249887228,1.860564025118947,-9.5003370009362698,7.8360291663557291,0.14233852736651897,-7.7162911742925644,-7.705748463049531,9.485599473118782,4.4704972021281719,-4.3534105829894543,-7.7716241125017405,2.3135586176067591,3.9797824807465076,8.2042633090168238,9.0535771101713181,3.4706397633999586,-8.9573911111801863,-6.8723974470049143,-4.3838673364371061,0.34172045066952705,3.2956953346729279,-9.2484060954302549,2.0387599803507328,5.4390839673578739,-5.3156397864222527,0.042146258056163788,8.3522377349436283,-3.9402451738715172,-3.7005898356437683,4.186681630089879,5.5582679435610771,-2.1905508078634739,3.4126333519816399,-3.8711482752114534,-2.3890135157853365,7.8498997539281845,-6.7346960306167603,9.9638389702886343,2.2417298797518015,-3.2458152063190937,7.5838802475482225,2.2754581551998854,3.6253105103969574,-9.4061451219022274,-9.0810591634362936,-5.3613526839762926,-8.2545232865959406,6.2271358352154493,-0.52789053879678249,7.7437885664403439,9.8545750230550766,5.8425678685307503,-3.9617096167057753,-4.4534807186573744,-9.6503950655460358,5.8101360965520144,-9.0425015147775412,2.677048621699214,-6.843715887516737,-2.3328967951238155,-8.9963756408542395,-2.0853879861533642,-9.1158213373273611,-9.6092095412313938,-1.9847564212977886,2.1988899726420641,-3.2561343349516392,-5.8497147541493177,3.8441594876348972,8.7886170204728842,-9.7135898657143116,3.6951291747391224,4.036147017031908,-4.4769748952239752,-4.5170208066701889,2.4313452001661062,3.6188764777034521,2.4570673424750566,-4.069077530875802,-8.9860150124877691,-7.95430694706738,-8.0368433520197868,4.7737979609519243,-6.7775546573102474,9.6388997975736856,0.98905151709914207,2.9889338836073875,-4.9881165567785501,4.7250694409012794,-5.75779153034091,8.7977827526628971,4.3348711170256138,-3.8210239633917809,0.050295628607273102,5.3187086526304483,-8.4635553508996964,-6.9747705478221178,-4.96857357211411,-6.8159871455281973,3.7040700204670429,-5.6950587593019009,3.1474660988897085,-0.53717306815087795,-8.2676823530346155,5.0627060979604721,8.9015062991529703,7.616517785936594,-9.1854338906705379,0.41260587051510811,-5.3330527618527412,7.3822680581361055,-6.2206108681857586,-9.8068320192396641,-3.425745852291584,3.4895119816064835,8.227980425581336,7.6671553961932659,1.8808820843696594,-8.0147150158882141,-3.3152564987540245,0.48407775349915028,-4.1051148902624846,5.3340854868292809,9.9748971406370401,8.0963990092277527,-3.8217102829366922,8.5153230279684067,-2.9657240305095911,-4.9237257242202759,6.9417927507311106,-9.2891058698296547,-2.0023486670106649,6.5260161366313696,2.7533376961946487,-4.6532402466982603,-7.0087844133377075,3.3603884372860193,-1.9514299742877483,2.3164851311594248,-6.8343042116612196,-4.1508606169372797,-3.5143430903553963,-5.564268846064806,1.3335388991981745,-7.211632477119565,-5.907021127641201,0.69593976251780987,-3.3403276558965445,-0.88686053641140461,-5.4649641457945108,-9.6523628756403923,-7.2628481686115265,-6.6891484335064888,-4.5176960341632366,-8.9172032754868269,8.564557358622551,4.5156716555356979,-5.106371808797121,-2.7909521572291851,-7.5328501313924789,-4.6121390070766211,3.7797502242028713,6.2621260154992342,7.5520697608590126,7.6366081181913614,8.4727804642170668,2.0214066654443741,-6.2180797941982746,-7.2670714929699898,2.3294390365481377,-9.1180162411183119,-6.4989575743675232,-7.9799249954521656,1.4006172399967909,0.17404184676706791,5.1213982328772545,-4.659781688824296,3.049197718501091,7.866156967356801,6.500290185213089,-9.6227279864251614,-9.1892648953944445,-3.9750905521214008,-9.3468623515218496,7.2844630759209394,9.9710522685199976,3.4756333101540804,-5.0308507774025202,6.4910230785608292,-5.374989565461874,2.5504094734787941,4.7321189753711224,-7.2762656398117542,7.8034129925072193,-8.0376955959945917,-9.5498665235936642,-4.6066585183143616,-4.1096751019358635,8.6906078550964594,3.0463668797165155,0.28824949637055397,4.609366012737155,9.6146904025226831,-5.8982512913644314,8.090578131377697,-1.6532043553888798,-5.4055356979370117,9.1615607216954231,-1.648800503462553,8.6100036557763815,8.3315882738679647,9.0042623598128557,-5.3623698931187391,-5.3507573530077934,9.8212043754756451,4.9820937402546406,-5.9503902867436409,-8.2095176074653864,2.637585336342454,9.8968468047678471,-3.6955965496599674,8.1088391970843077,5.2605271153151989,-6.3206534646451473,8.7772484961897135,-0.78437758609652519,-3.0340174026787281,7.2695676889270544,-0.3757170494645834,5.3236249648034573,-5.8350966218858957,9.5311085507273674,9.3415649235248566,3.6818210501223803,0.36649648100137711,-0.29356268234550953,6.0920737776905298,9.4841075781732798,-0.60378115624189377,-7.7498194202780724,8.7850209884345531,9.847899628803134,-6.3507833704352379,2.3839216493070126,6.5712568163871765,3.1134427059441805,7.6316614262759686,5.3337294049561024,3.9902290981262922,3.7805616948753595,-0.099486382678151131,7.932443805038929,0.58317163027822971,1.3656729087233543,-7.1353341359645128,-3.560800738632679,-6.3779638055711985,5.5623481050133705,6.3847227487713099,8.0353668238967657,-9.5896496158093214,6.758910296484828,-2.9945158213376999,-8.8273543957620859,-1.3453203998506069,9.2001074366271496,6.2058376520872116,1.5135454572737217,-1.841409495100379,-8.5693203005939722,-4.5662808883935213,-5.4828487057238817,9.7618382424116135,7.2154948674142361,-9.1776286344975233,-8.4044535644352436,6.3489550165832043,6.8870916590094566,-8.6503548640757799,-6.5141899604350328,-3.9906377531588078,9.3513296823948622,7.7981234528124332,3.0610107071697712,6.4070576149970293,3.417463656514883,-2.6882199477404356,-0.91260445304214954,1.8570288363844156,-8.9162540901452303,4.5175154041498899,5.8815111592411995,-9.4418223388493061,-8.7080446723848581,3.89320133253932,-6.965095279738307,-2.356342813000083,-3.0535982735455036,-1.8261291179805994,8.247978063300252,3.7674526963382959,-0.42242489755153656,0.30482180416584015,3.1401432584971189,-3.6121516022831202,-9.4319295790046453,-2.4404298886656761,3.6949203535914421,0.5264899879693985,8.7173101771622896,-8.1677059456706047,5.3661854472011328,9.4789313618093729,-7.6004496216773987,-0.75677275657653809,0.92035255394876003,8.3654596749693155,-1.7190990597009659,7.1021684072911739,6.1445551831275225,-8.4609108231961727,-2.5281934160739183,8.6533145140856504,-3.7428157776594162,-5.5047261528670788,2.0675839390605688,9.8833582270890474,9.6018782909959555,-1.2314098235219717,3.6951646860688925,4.6329859364777803,6.5947488974779844,-2.0551502145826817,-0.90959431603550911,-7.5515984650701284,0.28461672365665436,3.5533549822866917,1.2372933607548475,-4.8103978484869003,-8.3565989043563604,-9.3577726557850838,3.9149792399257421,-0.94380566850304604,-2.5417996570467949,-0.026777619495987892,9.9486271757632494,6.5770991705358028,1.3058889284729958,8.0753093212842941,1.7239042837172747,-6.3406118098646402,-6.6626597568392754,0.67749291658401489,6.6235325857996941,1.712299631908536,-1.3799948524683714,6.4265820197761059,-8.4358650632202625,-1.5841053053736687,-4.0578015521168709,0.52936007268726826,-3.0451759416610003,-0.27199706993997097,8.5453216452151537,1.2210362683981657,1.9566507823765278,5.4297929722815752,-1.4693941082805395,3.8932888861745596,-5.4935813322663307,9.3785838596522808,5.859080832451582,-6.428324868902564,-0.85604369640350342,-7.5263338908553123,4.9063157476484776,0.44888738542795181,4.450368657708168,-2.6538568083196878,-3.3713199384510517,-1.7741536721587181,1.7992964014410973,0.7747113611549139,0.57393125258386135,6.0626449249684811,-5.1266203448176384,-3.1080972123891115,2.2102053090929985,6.920725479722023,-3.3667298872023821,-4.629162298515439,-2.3307091183960438,7.7719071321189404,2.4433086067438126,4.6878509223461151,8.7105668149888515,-1.5033940505236387,-7.5437406543642282,-7.6491586770862341,0.59013260528445244,-1.6412201058119535,-3.9862529654055834,3.0464574880897999,1.8111044261604548,-0.76781708747148514,-4.7017168812453747,-1.7555816285312176,-6.0603662021458149,3.4252713620662689,8.5358873102813959,2.658168962225318,-4.1541528142988682,1.1536958254873753,-9.8341737408190966,-2.9580606520175934,3.8746766466647387,1.6905090771615505,-7.613848652690649,-5.9542870987206697,6.2967634573578835,9.7035553492605686,7.6549092214554548,-3.9405768271535635,-9.2746865469962358,0.34321030601859093,8.335694195702672,-1.9875093270093203,-4.0691963396966457,9.0171651262789965,-8.5055737942457199,6.8212518002837896,4.7791390120983124,2.9894919972866774,4.3921000510454178,-1.9743294455111027,-2.55492789670825,-0.67310171201825142,7.1795990969985723,7.5221577007323503,4.9046133365482092,-8.1635359860956669,-4.5493039395660162,-0.15126963146030903,-2.3886188771575689,-5.5174088198691607,8.9099995326250792,-9.6377071738243103,-0.94446763396263123,6.3325468543916941,-8.8848904147744179,-8.3531923871487379,7.8955620713531971,0.71187328547239304,4.4543927628546953,4.9792784173041582,6.732476856559515,-7.2613408509641886,-1.3556607253849506,-4.5897438935935497,0.17442271113395691,-8.4774143435060978,0.097140604630112648,-7.3577789589762688,-2.1909428387880325,-3.1762303970754147,-2.9042302444577217,8.6023369245231152,-0.52316395565867424,7.1834714058786631,-7.3959469143301249,-3.6797687690705061,-5.8736523054540157,1.5257345233112574,3.0202234908938408,0.89631334878504276,4.3385383021086454,-2.1866442449390888,9.070236450061202,3.464165423065424,2.2283708304166794,-7.7713574841618538,6.7947811260819435,-0.11348250322043896,-7.3003542516380548,2.9461138416081667,-4.6645627729594707,2.6935166213661432,9.9339546356350183,-0.024282876402139664,-8.1222256179898977,9.7540531307458878,-3.6288769543170929,9.4650786463171244,-0.42303901165723801,9.9834060203284025,-8.8948599435389042,4.08893758431077,2.7740897703915834,4.1268709395080805,0.31999086961150169,-1.9133736751973629,1.9287042412906885,-4.2677232716232538,-7.6249813102185726,6.9391377363353968,6.0880671534687281,2.144774254411459,7.2209889348596334,3.1611629575490952,9.6659305226057768,-4.7055526543408632,-6.2234200723469257,2.9788736160844564,5.9289671014994383,8.1501995585858822,0.40412319824099541,-7.9013257380574942,2.4183368869125843,4.9881555233150721,-4.070002343505621,-4.5293408911675215,-4.6323150396347046,4.6811708621680737,-3.561204643920064,6.8336000200361013,-7.6843315083533525,9.440357219427824,4.0839390642940998,-1.2360361870378256,5.9398730378597975,-8.5537279397249222,-2.5054716411978006,-9.4618149567395449,-4.7239737119525671,4.1738644987344742,-9.8592588398605585,-4.5633204374462366,4.2734503839164972,3.8807141873985529,3.1634562369436026,8.2090773247182369,9.9627390410751104,3.755219578742981,-6.0244324151426554,7.3644298035651445,-6.0281555820256472,4.7891639731824398,-8.5209869779646397,7.771872915327549,1.8682269938290119,-0.70882183499634266,6.8314919248223305,-3.1150877848267555,4.719654293730855,3.2298299297690392,3.7517331633716822,-4.6206155885010958,1.3138461578637362,1.8124637566506863,2.078450471162796,-7.4828366376459599,-4.0353492181748152,-2.1142631862312555,5.5786907207220793,1.0550650954246521,-7.5208546780049801,-3.0045538302510977,2.4638297129422426,9.5860829576849937,-6.7035769019275904,-7.0169648993760347,5.8709595259279013,-6.7831235192716122,-3.9569632243365049,-4.680864131078124,8.716590590775013,-0.26179436594247818,0.022167814895510674,-7.425456615164876,0.35068906843662262,-5.9687457792460918,3.2897197548300028,-9.679976562038064,8.6339243222028017,-9.633770901709795,5.2124578226357698,5.7787440903484821,3.3520499709993601,-2.0960329193621874,-8.0252138618379831,0.23063953965902328,-3.6411768849939108,2.7401436679065228,-6.4052737876772881,6.5634786337614059,-7.6144727412611246,3.5566562879830599,-3.2776617724448442,-7.661356870085001,-4.4248972181230783,-9.2475013621151447,-2.7553871832787991,-9.7923326678574085,0.26485294103622437,-8.6165396682918072,1.8178058415651321,-8.1371283251792192,-0.71574671193957329,-9.5549149066209793,-9.4548320956528187,-7.3630273714661598,9.5989883970469236,-9.8018574435263872,0.18194819800555706,-1.9965564366430044,3.8760319724678993,4.4694698601961136,-1.6199464444071054,-6.4398255664855242,5.8517319336533546,-9.9412670265883207,-2.8749154135584831,1.2967000808566809,-6.3616526313126087,-0.29574600048363209,9.397045811638236,-3.8508919905871153,-1.9416376762092113,6.8956390116363764,-4.994999198243022,9.0485142916440964,-1.6201512608677149,-9.8821758199483156,-9.7290049493312836,4.6138187032192945,4.4510593730956316,8.9549967087805271,6.6298328153789043,7.6002582162618637,-2.4600215442478657,-5.5820351652801037,2.7350117079913616,7.341875871643424,-5.0920895673334599,-2.7493197657167912,-7.8172456566244364,-4.4477338064461946,6.9379585050046444,6.2687261682003736,-1.5191637352108955,7.4151686765253544,6.7400826513767242,0.56925269775092602,7.4301738105714321,-1.068629315122962,-0.45282937586307526,9.2967545799911022,-9.4456230662763119,7.4131294246762991,-7.5336231850087643,2.3951488547027111,-4.7331020049750805,-9.2453563958406448,-6.7049389891326427,-9.9095645640045404,9.9483734741806984,2.3131366726011038,-3.1118472293019295,-0.81632897257804871,-0.040970249101519585,-8.5868987068533897,-0.0065550301223993301,9.8296869359910488,7.548488387838006,7.4444717261940241,-0.76356133446097374,6.824723994359374,3.1363048683851957,-8.1239742413163185,0.36494087427854538,-6.4386448822915554,5.6954911909997463,4.1205699648708105,-5.5804899055510759,8.7061919830739498,4.9688059184700251,-9.2788111232221127,-8.9785423502326012,-2.3612723685801029,-5.9046389441937208,0.73329698294401169,4.5224763359874487,9.2598925903439522,-8.9850833546370268,7.7040665503591299,2.2466504387557507,-0.54597998969256878,3.7143872212618589,7.7061350736767054,-2.9876781441271305,6.0934865288436413,-6.7717837728559971,6.6301548667252064,-6.9870247971266508,9.0742582641541958,-8.9412050787359476,5.1662499643862247,9.1632701270282269,7.0811749342828989,-6.6927458252757788,-4.9790595285594463,-3.0534572061151266,0.54479118436574936,-3.6944818403571844,6.8437584582716227,3.0485399905592203,-3.1882765516638756,-5.3639505058526993,8.0838844086974859,5.8453985024243593,3.6127542518079281,-0.43918333016335964,-1.354155233129859,0.71306444704532623,4.4742453284561634,-1.3586513604968786,5.1466517522931099,-0.22388067096471786,-2.7623603958636522,-6.9911166373640299,0.3026993665844202,7.4683348089456558,0.30327065847814083,-2.9299623239785433,-3.8767237775027752,3.9035194274038076,6.4511251822113991,4.061066173017025,-5.660720057785511,0.27802275493741035,-7.2714773286134005,8.2805593404918909,-8.6390212830156088,3.9693070016801357,-7.8571134340018034,5.4945314954966307,6.5909660700708628,-5.6331304740160704,3.9761573821306229,7.2772308439016342,8.4189286641776562,-3.0657970160245895,-6.850394057109952,5.4271067958325148,-6.6159617062658072,5.5316292680799961,-9.9067698232829571,-3.0804191902279854,7.3947239853441715,3.1261578109115362,1.3344307150691748,7.7771168667823076,-9.9966808594763279,5.7847947999835014,5.0463268533349037,-6.3844582438468933,-3.5896760411560535,8.3148264512419701,7.2883093543350697,-5.3845463879406452,1.9288939982652664,-1.0784777998924255,-5.9763129707425833,-3.8920677825808525,6.0168259590864182,4.7940197121351957,-6.9105823617428541,-6.15772963501513,7.0380543638020754,8.579825758934021,1.1316758114844561,0.075450735166668892,8.1005847919732332,6.5287403482943773,8.5391631349921227,-2.2850450966507196,-4.7528790310025215,-1.637832997366786,-7.0591212995350361,-2.6516582723706961,-6.4205262251198292,-9.7842375747859478,-3.6809177417308092,-5.1844358164817095,5.1872700732201338,2.448239466175437,7.5608054269105196,-5.5430524796247482,-2.0829901751130819,-8.8158111646771431,-7.3382354620844126,6.2766095716506243,-9.0228018816560507,-6.2312173470854759,-8.0699229706078768,8.8046480901539326,-0.27940161526203156,4.0971283614635468,0.43648144230246544,-4.0563175454735756,5.4710597358644009,-7.8988982457667589,3.2171998359262943,-8.5222541447728872,6.4746003597974777,-1.3916239514946938,-9.0236853994429111,-1.0805008001625538,0.023121470585465431,8.6026345659047365,4.4792947452515364,3.5068967565894127,0.41389370337128639,-3.6884459387511015,8.289156798273325,-4.1415482852607965,-7.001984529197216,-2.3539587575942278,-2.9847790487110615,-5.1814167853444815,-4.0718735754489899,4.0208638180047274,-1.341701066121459,-9.9697505403310061,-1.5973311103880405,-6.3439065311104059,-2.0370397623628378,3.4727762825787067,6.9510867353528738,6.9148937333375216,-1.3808914180845022,-8.6419962905347347,-6.0316443908959627,6.1527532618492842,9.3241983093321323,-8.1988638173788786,1.6958354040980339,1.905728206038475,9.574052058160305,-8.9069053065031767,1.6425221506506205,5.8698770962655544,-4.9755188636481762,-3.5455020144581795,-9.2523064836859703,-3.515065461397171,2.2948410455137491,9.3935481645166874,-2.6358471903949976,-0.68367133848369122,9.5358870085328817,9.6531052980571985,-0.2591017447412014,5.2770523633807898,-8.5808090958744287,2.3415367398411036,-5.7919169031083584,-4.7473576106131077,-8.8393204659223557,-2.4590616766363382,-9.4495402090251446,1.5777112171053886,-3.4074835013598204,-9.5751557592302561,-9.6428420580923557,-7.2464675642549992,8.6196691077202559,-9.2211608216166496,-0.049922820180654526,0.94723909161984921,0.2474985271692276,-0.29217367060482502,9.437194112688303,-9.0783959254622459,-0.60031203553080559,-9.4443076010793447,9.5221529994159937,-1.1743860319256783,2.0940304920077324,-5.6294261757284403,6.2342987302690744,-0.14111331664025784,8.3085643779486418,2.0416434668004513,-6.0981592442840338,8.2376118469983339,9.5424552261829376,0.04513939842581749,-1.3420520443469286,4.131358414888382,-4.2590103764086962,-1.1873513739556074,4.1855268925428391,6.1505939811468124,-6.9668324664235115,8.4467605501413345,4.7047105897217989,-7.9290034621953964,-2.7611729130148888,-7.0330923888832331,-5.1837567426264286,-3.3995356317609549,4.0046886447817087,6.8021624442189932,3.944331482052803,-7.6206720061600208,-0.63438891433179379,-2.1744098793715239,-5.3067813534289598,8.925829641520977,-3.5810668393969536,-6.9903195090591908,-6.2999652046710253,-3.515165951102972,0.60591056011617184,3.5388668719679117,-2.2643768787384033,2.6178595796227455,-1.6339465323835611,-1.7393042985349894,7.5127191655337811,6.2711521796882153,-0.74518864043056965,-4.3854072876274586,-5.5402392148971558,5.1995501201599836,8.8389884773641825,-3.1205135025084019,-6.4703828189522028,-7.724010506644845,2.5554326269775629,9.1562598664313555,9.2597250267863274,8.1986759230494499,-4.8536188807338476,5.2275117766112089,-1.2094513233751059,-7.248323168605566,-2.5674732215702534,8.4776232298463583,3.4137686342000961,-4.7904600203037262,6.7384795192629099,-6.3745887484401464,2.286933334544301,-3.511350154876709,4.7379977628588676,-8.4714842867106199,-0.23639478720724583,6.9128878135234118,4.9056142475455999,8.6587751470506191,8.034042501822114,8.1524692568928003,-1.4490573387593031,5.6933743879199028,8.5434605833142996,9.9421688821166754,-1.9674421939998865,-6.8008916918188334,-2.5866393651813269,6.3522474095225334,2.2223398182541132,-9.1345789469778538,-4.8683550860732794,-2.4438914749771357,5.5160391889512539,8.0707701295614243,5.4337089601904154,4.3466147035360336,-6.4465653896331787,-7.4244757555425167,-3.164003249257803,2.5974432192742825,-4.7717150673270226,1.7849043477326632,-1.1125354282557964,1.6171268559992313,-0.94884030520915985,-7.1589388139545918,-0.28462390415370464,-3.6738810781389475,-6.9192307721823454,8.4884360339492559,5.1445672754198313,4.7423165012151003,4.1135512944310904,-3.5432840418070555,8.0251598730683327,-1.1378722731024027,-4.21922467648983,7.4909074697643518,-0.31801878474652767,-4.9416394624859095,5.8655935805290937,3.0314321164041758,9.2796823848038912,3.6219922825694084,-5.1756002474576235,-6.3133212644606829,-7.990462938323617,4.2894113156944513,-7.8639052901417017,-8.656194694340229,-4.6642172615975142,8.5005260817706585,8.3420011028647423,4.0126793924719095,1.1026589386165142,-7.6111317798495293,-0.29180523939430714,-4.3705825228244066,3.6195829417556524,-5.6693913228809834,-5.4599297698587179,-5.0396064855158329,-0.66616324707865715,3.7943793926388025,-7.8654399607330561,5.5505966581404209,8.8781550619751215,-4.8477256391197443,4.2752236314117908,-6.3163151405751705,1.6914611775428057,8.3881024550646544,-1.1618938203901052,-7.949370127171278,-5.0637113209813833,-5.7961331028491259,4.3909733090549707,-0.91148208826780319,0.72061360813677311,-8.6470041424036026,9.8013892024755478,-8.0515190213918686,-1.8801772873848677,-0.13960553333163261,-6.3501215353608131,-6.4926162455230951,-1.4012110605835915,9.8457720596343279,-2.1088384091854095,-3.2470814231783152,6.3025734852999449,7.3526950180530548,-3.2546957768499851,-1.6718687303364277,0.90231440961360931,5.1983676943928003,8.9659585990011692,-9.1336781531572342,-9.72871333360672,9.5150041859596968,-1.3244938477873802,-0.76803186908364296,-8.3115514367818832,7.7550152130424976,-1.4591754414141178,-4.3615770060569048,-5.0246966723352671,9.9230669904500246,-3.012935584411025,1.5916874818503857,-8.50840182043612,-0.70938440039753914,-2.6235447730869055,6.0830564517527819,-2.0700895227491856,8.0054532084614038,7.6522155199199915,-9.2136185523122549,6.7129974346607924,5.3480151388794184,4.090559259057045,-9.970422750338912,7.1048352774232626,-9.0333584789186716,-3.6559476237744093,-5.5116631276905537,5.4778480250388384,6.191877955570817,6.8929259944707155,9.4073212705552578,8.8487461023032665,0.87588892318308353,1.0652170516550541,3.1030737608671188,-6.6391985584050417,-5.0101448129862547,-5.5038328096270561,-2.9179962165653706,-2.7623563911765814,-6.9238098617643118,-8.4723225980997086,5.6741056870669127,4.694405198097229,-1.1317205801606178,-0.82772135734558105,8.4872188698500395,4.6876902505755424,6.0101563669741154,-7.301814965903759,-1.6041108313947916,-0.29067754745483398,-5.4174640867859125,8.6811292450875044,3.7393683847039938,7.5645492412149906,-2.6207654364407063,-7.2046325076371431,-8.2585339806973934,-1.1805999558418989,-2.3433888144791126,-5.3357450291514397,2.1333315502852201,-5.0965393986552954,2.4623651709407568,4.9715255293995142,-3.5703102126717567,-6.2036940548568964,-5.4859502706676722,-2.3661637865006924,-8.1146999727934599,-3.7624279875308275,4.8728623799979687,-1.8018629774451256,-3.910997761413455,7.8606715705245733,-5.692774411290884,1.5405031386762857,-8.7636579480022192,9.2008775938302279,-0.85013022646307945,-8.1386445555835962,-6.1990311276167631,-7.1161321084946394,-0.83232490345835686,-8.8845806755125523,-3.1474046129733324,1.570723382756114,-0.85201546549797058,0.17614296637475491,0.43491549789905548,9.6248548477888107,4.9355803709477186,-7.7005885913968086,-3.7924376130104065,0.50108671188354492,1.764448806643486,-4.9088146723806858,-2.448158860206604,-6.2059043906629086,-2.6350641809403896,-7.5236314255744219,-9.6733502484858036,0.0023762509226799011,-0.062272464856505394,-6.6132390685379505,-8.7089984118938446,7.8637013956904411,5.2294971700757742,-7.8409433458000422,-2.7347959671169519,-3.7157624773681164,9.1800920478999615,9.8071991559118032,9.5963684190064669,6.1641716025769711,1.2322510126978159,-9.5571416802704334,-6.8802168406546116,4.1955835279077291,-4.8275353573262691,3.6132898926734924,8.5633326973766088,3.9327900856733322,-1.5969210490584373,0.54799423553049564,-9.8608008865267038,9.5195012260228395,-5.7427414692938328,1.7441588919609785,-5.9214108996093273,-1.1529578175395727,2.2380298469215631,-5.4322670120745897,-0.11163619346916676,3.7305737473070621,-0.24692155420780182,9.9895147513598204,-6.2254174519330263,9.4089148938655853,-4.3672269023954868,0.017495518550276756,-5.952741326764226,-7.7234472520649433,-7.9779476393014193,-5.3659579157829285,-5.6546542979776859,2.2252478916198015,-0.25858987122774124,-6.1198894865810871,3.0174293927848339,-6.0640935879200697,0.77909862622618675,-5.6893046572804451,-0.14334117993712425,-9.1351340617984533,5.8018301147967577,-8.6411369405686855,8.4114504884928465,-8.7514958065003157,-6.3900100812315941,3.1005929876118898,-8.3335546776652336,-2.0534544810652733,7.5905989203602076,-4.8038078378885984,2.4017092678695917,5.5277621373534203,5.0983640179038048,8.204167066141963,7.4360231123864651,-2.7594136632978916,2.5346176140010357,-0.68166338838636875,3.2835043128579855,5.8570901583880186,0.11441612616181374,2.9919115547090769,5.0576016679406166,3.1113509181886911,-7.525015389546752,7.0663672499358654,4.4345032330602407,-9.3040489871054888,6.848679156973958,5.7507231179624796,-7.5964331347495317,6.748323068022728,-0.93406466767191887,1.1752013862133026,-8.3902144525200129,5.6657090876251459,3.5727583151310682,7.349108625203371,-3.5312004294246435,-8.8855667132884264,0.28025847859680653,-9.6956697665154934,4.8782365489751101,8.5217950586229563,5.8096952270716429,3.5478051193058491,7.9607461951673031,-3.7385572586208582,6.0682033561170101,8.2939320057630539,-3.8846359681338072,-9.0766685642302036,8.4314482007175684,7.3500537034124136,-7.6472709607332945,-7.6830186322331429,-8.494133809581399,-0.90692585334181786,-2.7027459535747766,-5.0511846225708723,4.7400871757417917,6.6452780459076166,7.1882478334009647,-7.1185295097529888,-1.1254478711634874,4.5976988039910793,-6.4760870765894651,-3.5954686626791954,-9.0417635254561901,-4.9195648450404406,-3.1263108365237713,-3.9061756618320942,8.9056992717087269,-1.9121924322098494,1.7818551417440176,7.6394594926387072,-3.6041691713035107,4.7287879511713982,-3.260789392516017,-4.0872672758996487,5.298940222710371,-0.71155717596411705,0.85861626081168652,-9.2364195547997952,3.4965484496206045,6.489898394793272,-4.2775496561080217,7.2229745704680681,-3.4662593528628349,2.5791075639426708,7.0609256252646446,-7.0228826534003019,6.4112675935029984,-5.8254275564104319,-7.9609079193323851,1.0206157341599464,-6.51126972399652,5.089776087552309,3.8668215833604336,9.6704600565135479,-8.5776762291789055,-5.0043726805597544,-8.4916030708700418,1.627199687063694,8.345231469720602,-1.6945448331534863,-0.21494581364095211,7.4057867098599672,9.0573688317090273,7.1981036756187677,-1.4713892806321383,-9.639572836458683,7.6993404515087605,2.8151070233434439,-6.4961583726108074,-0.93374105170369148,6.6142149642109871,5.1110335160046816,1.1404217500239611,7.0684398338198662,-0.73157940991222858,4.3449301365762949,5.2409176994115114,4.1038932837545872,-5.8654695563018322,-0.94680041074752808,7.1255674120038748,-0.58837242424488068,-8.7752606254070997,-5.8053216338157654,9.9593332782387733,6.5145635604858398,-9.730109665542841,6.0468533262610435,9.4639800488948822,1.1128341034054756,3.4028629027307034,-8.0830889102071524,7.5247011426836252,7.6522422302514315,-8.7646980118006468,-8.2794746663421392,6.8692962452769279,-7.7378736063838005,9.5583152025938034,6.6037630569189787,9.4458275754004717,-3.9757880568504333,-1.0698243416845798,-0.53764080628752708,3.871042774990201,0.61602781526744366,-6.4204257167875767,-8.0949940346181393,7.4352750740945339,4.6683067549020052,0.23174443282186985,-5.0712374877184629,7.7115824818611145,8.5669112484902143,4.0774986799806356,-9.479575389996171,-3.2235755957663059,1.365014985203743,1.8069452606141567,9.3290875386446714,-6.025586724281311,7.9639561008661985,-9.7896721493452787,4.9801875930279493,2.0129932556301355,-7.6222586072981358,-7.3003942519426346,2.2738287225365639,-3.7605642713606358,-3.8036599289625883,-8.11237758025527,-4.7299765795469284,3.2836687937378883,8.6215203069150448,1.8919440545141697,-2.0961827132850885,9.4571996666491032,7.1549496427178383,-6.7612205818295479,4.1657065320760012,-6.970204534009099,-8.2275793794542551,-0.92661662027239799,6.3545340858399868,0.65450870431959629,0.32787688076496124,-9.3731841538101435,4.8939318116754293,-7.6879246067255735,9.0511528495699167,2.7260918170213699,-2.5747317261993885,6.4839358720928431,-4.4896687287837267,2.1377184521406889,8.6341201141476631,-6.3430956844240427,-8.4091394953429699,7.5925142131745815,7.3865185026079416,5.2166093979030848,-4.4457303546369076,0.60997308231890202,-8.1823224294930696,-0.29305826872587204,-5.4302465077489614,-6.1530199740082026,6.1933269444853067,-8.7539173010736704,-7.0880693942308426,-9.1822860483080149,-6.6816075146198273,2.2225277498364449,-5.9760128427296877,1.1521837301552296,4.7520399931818247,7.5362808536738157,2.272444935515523,-7.0178727433085442,-9.3871734477579594,9.7758683189749718,3.0189917795360088,0.19494054839015007,-3.634123420342803,1.2877241149544716,2.7792883757501841,-8.50016875192523,-2.3362018726766109,-4.5448140986263752,-4.6905129216611385,6.5493671875447035,-4.7855494171380997,9.2709869612008333,-2.5219922792166471,-7.1241782698780298,3.9358406607061625,9.67409354634583,-7.5096125900745392,5.9412181004881859,-5.9472603350877762,4.3955798912793398,-3.4886546060442924,6.1820871662348509,2.3391295503824949,-6.2495501525700092,3.8106151018291712,5.0081245228648186,-8.4510267525911331,3.593381317332387,-6.0400932095944881,4.1534573305398226,7.1574651449918747,-4.483173843473196,-8.7027440778911114,-7.0197069644927979,-0.21492891013622284,7.6898839138448238,3.8790784310549498,-4.3287006393074989,7.5283995363861322,9.8111452162265778,-4.082195833325386,-9.4653243850916624,-3.7069360539317131,-2.4742091819643974,-4.0336623787879944,6.2364463973790407,-4.0452721808105707,-8.8894962798804045,-5.7639672607183456,5.002282252535224,-6.6420642286539078,6.8265352863818407,-6.4213100913912058,-2.9586780071258545,-6.5012106578797102,-5.8474996034055948,1.074198056012392,-5.9531859308481216,4.8040919005870819,2.3726890236139297,-2.2154832910746336,4.3723878264427185,6.7223114985972643,1.8894877936691046,-3.3785587549209595,-3.4369421377778053,-4.6864582691341639,-5.3040877543389797,-5.8028504252433777,-8.5070642177015543,1.7717047687619925,-2.9578592907637358,7.2589552402496338,1.2608579453080893,-8.7604250758886337,3.5357592348009348,5.5055652279406786,-7.9650926496833563,-9.3121473025530577,-9.2597086261957884,-7.9228746797889471,0.24527303874492645,2.3040423635393381,4.0401002950966358,1.9657695665955544,-1.3108005840331316,9.3746521510183811,-0.22114620544016361,3.1958016939461231,-8.1608265731483698,0.98779948428273201,1.9460183288902044,6.7301471438258886,-6.4168227836489677,-7.5404967460781336,6.8712079059332609,4.3914070539176464,6.3784678187221289,2.9087574407458305,7.4864076357334852,4.0532706212252378,3.3194409124553204,9.8435198701918125,0.038613611832261086,8.979052621871233,-9.0624356735497713,7.6436419785022736,6.6908707655966282,-6.5349119901657104,7.734208395704627,8.8406453933566809,4.7272735927253962,-8.7126118037849665,7.1334238536655903,-8.5451573505997658,1.5404198504984379,9.8365176375955343,2.352090310305357,-8.4180580265820026,-2.30124038644135,3.052885327488184,9.8438012413680553,4.7676189709454775,9.3721602484583855,-2.1025525499135256,2.3993554059416056,5.9664046950638294,-2.6361651066690683,-6.0268901567906141,6.0571659076958895,2.7875363081693649,-9.8771685175597668,-5.5712736677378416,3.603500984609127,4.0411547850817442,-0.31141724437475204,6.0104496125131845,-2.3732371907681227,-6.9974055513739586,-5.395078444853425,4.9166133813560009,-6.4787828084081411,-8.9026333577930927,-6.5588358417153358,5.6460352148860693,-7.0860209595412016,5.2457557898014784,5.4176785051822662,-5.0772427394986153,6.781315766274929,-6.425784882158041,1.8335135374218225,-4.1378839407116175,-5.4153456632047892,4.2854743916541338,5.9682123269885778,7.7447046618908644,5.2513912692666054,0.13318192213773727,-1.6113553289324045,-2.0489477179944515,3.3357658889144659,4.2173993494361639,1.830977238714695,-6.7654563300311565,-7.0245135203003883,-0.99871240556240082,-5.359329842031002,5.7433812972158194,9.0095855109393597,4.1038311272859573,-6.9101333245635033,1.3892382383346558,8.9271608181297779,-1.2079815659672022,-2.5461104046553373,7.522487286478281,-9.5560390222817659,-8.3478440158069134,-2.2143607400357723,3.2391031458973885,-0.39332329295575619,9.4154904689639807,6.1484638229012489,-2.7684021182358265,-8.5343445930629969,3.2704358547925949,6.2155153509229422,4.1666298639029264,8.5482334811240435,-9.8397375829517841,3.5304445773363113,-3.8178828172385693,-7.1564609464257956,1.3608956709504128,-7.4263694230467081,5.0091269891709089,8.397424453869462,-4.4870598334819078,5.9854218084365129,-3.0155405029654503,-2.1891786810010672,6.4739695377647877,8.0061501357704401,-0.63452718779444695,-4.4983719661831856,-4.1375925857573748,-0.5185429472476244,4.8487598076462746,-6.8937966786324978,-4.0407534688711166,7.056495314463973,-1.4831163175404072,-6.7358822468668222,-9.972897544503212,5.5109697394073009,2.8685316070914268,-8.5891789011657238,1.6702191438525915,-8.6267579346895218,-9.9205975793302059,4.5164848119020462,8.5603472404181957,-6.2437850330024958,0.70497971959412098,8.5942309908568859,3.2404088508337736,1.551659582182765,-1.2573118507862091,8.3597922511398792,3.0285085923969746,0.1440143771469593,0.44971609488129616,-1.6215115506201982,7.2554342914372683,2.084271227940917,-9.6533774212002754,-4.314315402880311,9.3010682798922062,3.0547311995178461,0.86737246252596378,-2.0709372777491808,-6.2427650764584541,-2.1526106353849173,1.0731124971061945,-4.1981744766235352,1.2816167902201414,0.13348151929676533,3.423974122852087,6.7331878282129765,4.6879597287625074,-9.4607237353920937,-6.3838165160268545,7.1958434302359819,0.54066655226051807,6.982826329767704,0.36225731484591961,8.4587717056274414,6.5762009378522635,6.2092922069132328,-0.42575155384838581,4.3937093950808048,5.0739157665520906,-2.6975935883820057,1.5446172095835209,0.38153181783854961,-7.5946563389152288,-3.3890693262219429,-0.088114077225327492,-0.93321835622191429,-4.6008420642465353,-6.3525315374135971,-6.9975207652896643,-7.331478726118803,-0.1629289984703064,1.652399692684412,-8.1182738579809666,-3.8287163618952036,-9.2358460742980242,-6.8649647478014231,0.53750823251903057,-6.0990535840392113,-6.7935564182698727,0.69730322808027267,-0.42456193827092648,4.3875784147530794,2.0305293519049883,7.1069116145372391,5.8636394049972296,-9.8123960569500923,3.0594723019748926,0.55108149535953999,2.0267750788480043,4.0088443178683519,-3.3534399513155222,-1.2652097456157207,-4.38012620434165,3.2189276069402695,0.51639329642057419,-0.97778475843369961,6.3716356083750725,8.0797980818897486,-2.8334961831569672,-2.5702942349016666,1.064852150157094,-3.0298257153481245,-2.280743308365345,7.547276709228754,7.0797893311828375,-9.9805771373212337,-3.5599468089640141,7.9740321356803179,-0.44175495393574238,-4.5754359941929579,0.64728804863989353,-1.0296831838786602,-5.8852012455463409,7.4226982984691858,-6.7095612734556198,-7.5962972175329924,9.0326837264001369,-7.6844614371657372,7.2566436696797609,2.4102913588285446,9.7669649496674538,-6.6199362371116877,-1.2683106865733862,3.5023590922355652,4.1493688710033894,-1.5572743117809296,6.890707965940237,-7.8710842505097389,-9.3129816558212042,-3.2826840132474899,7.9298419132828712,-3.1468231324106455,-8.656332790851593,-6.985205328091979,-0.34592565149068832,6.0276509448885918,6.7295561730861664,3.650731984525919,-2.1474292408674955,8.1568101886659861,-8.4910169895738363,-8.522531958296895,1.8053884617984295,3.1639698334038258,-3.1589069589972496,8.2507936656475067,-8.9107186254113913,-2.4479287676513195,-2.338738813996315,-7.1831868775188923,-7.8218284156173468,-1.4701642375439405,-9.0502736438065767,-7.9491240251809359,-0.92747516930103302,-8.0750994384288788,1.8037533853203058,-4.3167605437338352,8.2055859360843897,-8.7170297466218472,-7.1189414337277412,-8.0486541148275137,6.2703073583543301,5.055899191647768,-5.5021681450307369,5.0600216630846262,3.7842093221843243,1.2061858270317316,-7.6347173750400543,3.3050962071865797,8.7520583067089319,-4.1558923851698637,-8.0832718126475811,4.4506598263978958,2.2398153599351645,4.5768502168357372,3.1217084359377623,6.5537854935973883,9.4729204382747412,-8.6260415147989988,2.1202715206891298,-4.5964569225907326,7.3485442996025085,6.9841791875660419,3.0997383408248425,-2.6976032368838787,1.382454838603735,-5.0814385060220957,-3.7369322218000889,-6.6198027785867453,0.97472674213349819,2.2324409242719412,0.63470996916294098,7.5705349445343018,-2.0190497022122145,5.8317173738032579,-6.3259745854884386,-0.65482955425977707,-5.7202453073114157,-0.16284649260342121,3.0390757974237204,-2.2529706545174122,-5.6777298450469971,-5.6054718792438507,8.8341599330306053,-4.2738581541925669,9.266047291457653,-5.5430216901004314,-1.5655106399208307,8.4627408534288406,-6.7143319267779589,-7.7766676433384418,-2.4530641920864582,-8.6498173326253891,2.5201011262834072,-4.6602725703269243,-5.2010476961731911,5.9914079681038857,-2.406154926866293,-0.24579641409218311,8.8997446838766336,-1.9909501727670431,-1.8994910176843405,-4.7454708255827427,2.871875548735261,7.6124483253806829,2.4191425088793039,-1.4717560727149248,4.1957526188343763,-1.9856241531670094,7.614920437335968,3.967928159981966,8.9686941262334585,-3.1576719414442778,9.0077336877584457,-7.0197610836476088,-1.1245095450431108,0.36814591847360134,7.4285329226404428,-8.647032780572772,9.3200674932450056,2.3745101690292358,8.3925077132880688,-7.1227188222110271,8.464777609333396,7.5174245703965425,5.3548917453736067,-0.33431533724069595,1.162202637642622,-6.8601817823946476,0.92480786144733429,3.2458128407597542,-7.623481685295701,-7.8566661663353443,-6.9882408250123262,8.636477580294013,-6.7211621440947056,-2.5721301417797804,-9.7912347596138716,-1.2826032005250454,3.2880769949406385,2.7101579587906599,9.6249128598719835,5.9105894528329372,-0.72294171899557114,9.5186014380306005,-0.86547826416790485,-6.0931143816560507,-6.9733819179236889,-1.6298708599060774,6.7605230584740639,4.1111749410629272,-3.482655119150877,7.0154634304344654,8.8940084725618362,1.6005462128669024,0.38029043935239315,-8.4585045650601387,-2.0862129051238298,-2.9802344832569361,-8.8009051606059074,3.1869750749319792,3.490187581628561,-0.41720999404788017,7.951705027371645,4.3065355252474546,-0.057315202429890633,-3.2965294271707535,-4.7700299974530935,-9.8941262625157833,9.4199067167937756,0.37234113551676273,-2.0624541956931353,-3.6676048953086138,-1.4354258961975574,-5.202970365062356,-6.3228880614042282,-8.7796192429959774,0.93939251266419888,8.370045954361558,-4.6375012770295143,-2.4839210696518421,-7.2613588161766529,-1.6576020512729883,0.68238954059779644,8.9210924226790667,-3.1995039526373148,5.9371212404221296,5.1968124974519014,2.8277636040002108,6.2229928188025951,9.8404325731098652,8.1504115276038647,3.9666864834725857,8.0998370237648487,-6.038999930024147,2.528207078576088,-8.4235323220491409,5.6922756507992744,-9.9230142030864954,3.9002893213182688,-7.8372678160667419,-0.96016771160066128,2.4613418709486723,7.7729225531220436,-0.49051058478653431,-4.0113240852952003,1.6761453077197075,-9.0257217735052109,4.6941603161394596,-5.2474516443908215,6.0802499111741781,-9.239617045968771,9.7563143447041512,-5.6246539391577244,6.4412788115441799,-1.4268857054412365,-1.6679842583835125,6.1886345501989126,-7.6189881097525358,7.6668580155819654,-3.1171938497573137,9.3230209872126579,-7.9861166886985302,-2.6631711982190609,0.081728948280215263,-6.3814873527735472,6.3420902471989393,-8.4890874288976192,3.9075943361967802,-5.0618826970458031,4.9375493917614222,5.3927442338317633,-4.1475415229797363,-7.7303309179842472,-3.6717208009213209,9.3885484337806702,-6.6663217078894377,-0.86891841143369675,-3.9116695057600737,-3.4293356630951166,3.1555617786943913,-4.4730825256556273,0.90203455649316311,0.49487629905343056,-2.6139596756547689,7.1797890681773424,-9.2849966883659363,7.0606642216444016,8.5837066918611526,6.3585155457258224,7.5709050334990025,4.2010355275124311,6.8042220361530781,-1.440106863155961,-3.8759820722043514,-3.6306396126747131,-0.15992037951946259,-7.7817415725439787,-7.7305923867970705,-8.06622713804245,-9.0794939454644918,0.94526577740907669,7.0820065680891275,7.284523556008935,-9.0124588832259178,7.6035573426634073,-7.0116040855646133,-4.0298426989465952,-9.5661944709718227,0.96952976658940315,-5.1131270825862885,3.6731612123548985,-5.1793969422578812,9.8756291903555393,-0.30004214495420456,-2.8082543332129717,1.6694779694080353,-1.0836768336594105,6.6435264609754086,-2.2506401315331459,-6.5086300298571587,9.4551155064254999,-7.8735312446951866,9.5603870414197445,1.4251582231372595,-7.3656543157994747,5.4479349683970213,3.443134743720293,8.7657429091632366,5.8412211667746305,-6.595726041123271,5.6324534770101309,4.6457104478031397,0.45561084523797035,-2.5484422594308853,8.3310040552169085,-0.81470050849020481,7.3286256846040487,-7.7879832405596972,7.3656932171434164,-4.7939635626971722,7.8544424846768379,9.6149796899408102,-1.036197654902935,4.6260841935873032,-9.4028439093381166,6.4024204201996326,5.4801306594163179,4.5561139564961195,-5.3926192503422499,6.2482955493032932,-4.8965756967663765,3.252304382622242,1.4798624441027641,-7.9518121201545,-6.1062874086201191,-8.3724462054669857,4.2966374475508928,-6.4143071230500937,-5.2597890421748161,-1.2743947375565767,1.2477141711860895,-9.6678368467837572,-7.3338812962174416,-0.542924664914608,-4.93476920761168,1.3339673075824976,-0.011372761800885201,8.8580705784261227,-2.4076408054679632,-5.218958081677556,4.9715586565434933,-3.013542303815484,-8.6054455488920212,8.2766706775873899,6.0042212437838316,-7.0534304715692997,-7.0059126056730747,-8.3731401152908802,-7.365904962643981,1.2353134527802467,1.9132888037711382,-3.3549817837774754,-7.1787879429757595,6.1110644787549973,8.6608205176889896,2.4105868395417929,-5.2668906934559345,-0.63184787519276142,0.53283494897186756,-4.6429301984608173,6.2721963878720999,-3.1951816845685244,-1.418519290164113,-1.0536426305770874,-8.5716220922768116,-3.2524937205016613,-4.6619076654314995,7.317908862605691,-7.9056106507778168,-9.5981912314891815,3.1999754998832941,1.988329840824008,-2.1402714494615793,8.4578104037791491,-9.5803992263972759,2.2302052192389965,3.0592154618352652,-3.7656307313591242,-8.9556531608104706,2.3373344261199236,3.5797963477671146,5.6373231951147318,6.4910626690834761,-4.7095916513353586,5.8931574039161205,6.2966119963675737,7.1579504851251841,3.6739377770572901,7.872326010838151,-9.8165959678590298,-7.5284303724765778,9.670749120414257,-3.7193792499601841,8.3929950650781393,1.0682027135044336,-6.7169075086712837,8.9355274476110935,-0.59003980830311775,3.2010154891759157,-0.53257010877132416,9.0942559670656919,7.160187903791666,1.2782333232462406,3.2675520610064268,-2.25240683183074,3.7984380498528481,0.34841186366975307,-4.2417263146489859,9.305874751880765,3.8371059484779835,-9.7602156363427639,0.055801859125494957,-2.1380749810487032,5.3738550376147032,-1.618262492120266,1.8623605277389288,0.6934825424104929,-4.6388260181993246,-4.7488459199666977,6.146664209663868,6.9854981824755669,5.2680857945233583,0.71806804277002811,8.5696787107735872,-9.4097626954317093,-9.8816175013780594,-0.34534473903477192,-4.2089533992111683,0.12026477605104446,1.2901702895760536,3.8921452593058348,-4.7145181242376566,3.0939272977411747,-0.36380439065396786,5.539681687951088,5.4302510060369968,6.2287792190909386,7.0924622658640146,3.0134361423552036,6.8213464040309191,6.3691441901028156,6.206531161442399,-6.8306428007781506,-2.6135278772562742,-5.5629752390086651,3.0751927010715008,4.7638292331248522,5.6780366692692041,-9.2375768907368183,4.0452033467590809,7.7327588945627213,4.4788796920329332,-3.4689026884734631,-1.8474340625107288,-9.8242248129099607,4.2535707913339138,9.7644014935940504,-9.7039424814283848,5.8387169428169727,-8.6842181161046028,4.3461329210549593,5.4561164416372776,0.94915555790066719,-7.542452672496438,-6.0020474158227444,3.589113550260663,2.2315455786883831,5.5866367369890213,-5.3962394408881664,5.4037530161440372,0.87706288322806358,0.79596353694796562,-2.2407500259578228,-0.28562555089592934,-0.5085578840225935,-7.3322824854403734,6.3282880745828152,-0.46220269985496998,-8.2407018169760704,-1.4754241518676281,2.5463462714105844,-3.558118212968111,-1.2927549425512552,-7.332251314073801,6.8521852325648069,4.6773356013000011,-8.0204340815544128,0.56440680287778378,5.9852186404168606,-6.4301854092627764,7.8738544508814812,-4.1281041502952576,-1.0464080609381199,-6.9802101142704487,3.6086330842226744,-9.7036469634622335,-9.1945125907659531,7.8268932923674583,6.5957043319940567,-5.9971622936427593,5.6933620665222406,8.3363748528063297,9.4522946141660213,4.7157325223088264,-2.6833823882043362,0.39225870743393898,-7.3078228253871202,-2.5782052148133516,8.105012709274888,0.94874647445976734,5.5820819269865751,-1.9489311892539263,4.3135652132332325,-1.9093491695821285,9.5685701444745064,-1.0414286702871323,-3.2915914058685303,-1.7767059337347746,-1.0965639259666204,-9.9498340394347906,-6.8607003893703222,-7.7914195787161589,9.6111577935516834,-5.2708102948963642,-6.5085893124341965,-9.8605467565357685,-6.209336007013917,-0.31024022027850151,5.7926936075091362,-2.1984149981290102,-8.760812496766448,-2.9756234586238861,8.69658587500453,3.518947521224618,2.9510950203984976,-0.94589080661535263,2.413284070789814,0.065474910661578178,0.43690226040780544,3.0163723509758711,-3.8297952804714441,-7.3692305944859982,5.34141905605793,-6.7698047682642937,-0.10871494188904762,-7.1719509176909924,1.0209484957158566,-0.91854625381529331,1.9931831955909729,-0.56993784382939339,1.0547325573861599,6.8901784997433424,3.2301773689687252,9.5911437924951315,-1.6461262106895447,-6.4431576803326607,9.848894476890564,-9.630371555685997,2.3452664725482464,-3.1062992662191391,-7.5717133935540915,2.2130135353654623,-5.881415531039238,-8.9507979433983564,3.9389735087752342,2.3278710711747408,4.5291897095739841,2.0915625151246786,-7.1087136678397655,3.8494072388857603,-3.0124276597052813,-9.8716219794005156,7.6493932120501995,3.3518530521541834,-5.4056479502469301,7.2749361488968134,9.8519896995276213,2.3910353239625692,6.1307868082076311,0.13401178643107414,-7.6638261415064335,-5.9259420167654753,2.6925561018288136,-6.2094972282648087,-3.0198857840150595,4.7796826809644699,-7.873065359890461,-2.6094870362430811,2.3514396976679564,0.64709536731243134,-4.2680782545357943,6.4088208694010973,-6.9475195556879044,-6.9611485581845045,3.9762063696980476,8.1005648896098137,6.19424132630229,6.6140978969633579,3.1434842851012945,-7.4595174379646778,7.8904400020837784,-5.374744962900877,6.661444716155529,-1.0985251795500517,-2.9126230347901583,7.5447097420692444,3.9367722626775503,5.3315278887748718,6.9893466215580702,9.9488014820963144,9.5066657103598118,-1.4692533202469349,6.2595133669674397,3.6412858683615923,-0.90830368921160698,-5.8600334264338017,-9.5817656721919775,-0.73564926162362099,-4.0570676047354937,-7.1351862791925669,-1.0757719725370407,-0.49947259016335011,5.364251472055912,-3.0253889132291079,-7.7114100567996502,-5.6688067223876715,4.3654507212340832,-9.8696157895028591,1.3674268405884504,2.3429987300187349,-1.2202479783445597,-8.7077033240348101,9.6302430517971516,-4.5048748143017292,6.5690390300005674,5.8391068875789642,-2.130416501313448,-5.9100759867578745,9.35292256064713,-5.43037174269557,-8.2578437216579914,-9.5794162712991238,-1.2492684368044138,3.545451108366251,8.3968843147158623,6.4348214026540518,-9.9565569683909416,0.14703258872032166,-8.8232019636780024,8.444605665281415,8.4875607304275036,-9.5666590146720409,-6.8380562029778957,-7.2105787042528391,-8.1962605472654104,5.4489962197840214,1.2795868143439293,6.0156769491732121,5.4826100915670395,6.2279301322996616,-7.1781394351273775,-2.9894641041755676,-3.9231440145522356,3.7185949739068747,-1.5741661842912436,2.9890065547078848,-3.7667333707213402,-7.4877129308879375,-5.9912097733467817,5.737370727583766,7.9899416584521532,6.9495943933725357,1.8331020604819059,8.9464231207966805,2.5335395056754351,1.1985699739307165,4.365639491006732,-6.6969622205942869,4.155984316021204,9.6285101491957903,6.3702311459928751,4.4749988149851561,-8.6948032584041357,6.44164620898664,4.7479631099849939,-0.98389506340026855,3.6757399886846542,-1.8379031494259834,-9.6381685230880976,-8.6983647104352713,6.5843218937516212,2.6981980726122856,8.6151057668030262,-5.9172316547483206,9.0876105893403292,-4.5286755729466677,6.5496882982552052,0.61135829426348209,-4.9010652676224709,7.7960869669914246,8.8337934948503971,9.5674153417348862,-0.45019832439720631,-6.4831634052097797,-2.5273238401859999,3.26827647164464,9.9227627646178007,-8.1260591465979815,5.3239377867430449,-0.57749828323721886,-6.0135726258158684,9.8849091026932001,-4.3325554113835096,2.7412452269345522,-7.8913711942732334,9.7243543434888124,-2.7763946168124676,-2.8642682358622551,0.24381570518016815,-2.1893628686666489,3.3783274423331022,-0.45057200826704502,7.2363317850977182,1.0284470301121473,5.1093214005231857,-7.6351031567901373,-3.1787376664578915,-5.0439067743718624,7.0588819123804569,-1.3715651165693998,8.105153338983655,3.3123099897056818,9.9941011611372232,-9.141628285869956,-3.346593901515007,-6.2036506924778223,-4.7571587655693293,6.4326681010425091,-6.1470971722155809,5.7378567196428776,-3.8419897947460413,7.6775678899139166,-3.1163358688354492,3.7431063503026962,-9.6114629041403532,0.14297314919531345,2.9497979022562504,-2.746555432677269,-1.3571002427488565,-8.783712238073349,-7.851575780659914,-1.4341287408024073,-3.4016796294599771,7.9705192986875772,0.51799368113279343,5.9198811091482639,-4.558073952794075,-7.548882020637393,5.9398983232676983,-8.1287560891360044,-0.003575468435883522,-0.09281977079808712,-0.021810270845890045,-6.5651440154761076,-0.37544122897088528,9.9593400023877621,6.62757633253932,9.6755511127412319,-3.0122941732406616,-7.6281149685382843,-5.7282576616853476,5.1735134795308113,-8.7588307727128267,-9.6687872707843781,-3.3076574839651585,8.200719365850091,9.4905242789536715,7.2417089063674212,-8.5982757434248924,8.7795912194997072,-1.41022689640522,-1.6833806596696377,7.4213180132210255,-9.9080154486000538,-4.0156439039856195,9.0729525405913591,9.1134989820420742,-9.4224592298269272,-3.2722711842507124,2.938258945941925,3.3182056993246078,9.0832927729934454,2.901785047724843,-9.6986019145697355,-4.4023758172988892,9.2696824576705694,-4.4467831216752529,2.9161174595355988,-8.8137564994394779,7.1945231966674328,-1.6484990436583757,-6.3233614061027765,3.2648763991892338,-7.2222550120204687,-4.4399652909487486,-2.4966014642268419,-0.38075054064393044,0.72573867626488209,-2.5099840760231018,-5.3023071028292179,4.1245595086365938,1.4717721939086914,-3.9246471971273422,-1.5453945752233267,6.5534403827041388,3.6726416554301977,6.0884098149836063,7.9038863349705935,0.61777196824550629,2.8935533948242664,-8.047992279753089,-2.6062305364757776,-2.916568685323,1.2301612086594105,-4.6804781723767519,-4.7966015059500933,3.5185302142053843,-4.062584051862359,0.14988681301474571,-0.85225422866642475,-3.8367496058344841,-4.2505770269781351,0.55195257067680359,-3.3330620545893908,1.2261006888002157,7.0743645168840885,-1.1554311029613018,0.6695217452943325,-7.3479433357715607,3.1163764372467995,-3.0611165426671505,-8.1856783013790846,3.3048029150813818,3.8226978946477175,8.0836235173046589,1.4605968631803989,8.2515691593289375,4.1230036783963442,-4.6770666632801294,-7.4593680910766125,-9.5994868408888578,1.4246683102101088,4.4003791082650423,-2.8282146900892258,6.195759791880846,-7.8650511056184769,-7.9139154218137264,-9.1764780972152948,-9.0673734527081251,4.6543876267969608,6.2929582595825195,5.7495963107794523,-6.5346814692020416,-8.391425758600235,5.3072877880185843,-0.41402697563171387,1.4486955758184195,8.2266323734074831,5.0104425009340048,-9.4927693251520395,-4.9740438628941774,1.2448356673121452,1.953148515895009,6.5672001894563437,-5.0662861485034227,-9.0712592843919992,-0.6547855120152235,-4.9800273030996323,0.68115608766674995,8.1904490012675524,-3.1234933342784643,3.4475845936685801,3.5543710272759199,-1.6860384959727526,2.7510632481426001,-2.8798886761069298,-2.2889236081391573,-9.9390216451138258,-5.1367889530956745,5.988103374838829,2.0535460393875837,-6.0516216792166233,-9.6055316925048828,-0.17115284688770771,3.434179276227951,-1.7487992998212576,7.930232472717762,3.4173092897981405,-5.2826613560318947,-5.6893739104270935,-1.3072788156569004,8.5650132782757282,-7.8216867242008448,0.91124339960515499,-4.7320974431931973,7.6383134722709656,-2.8653335012495518,2.3399003315716982,6.7049692943692207,-9.5809387974441051,-6.8383653648197651,7.5933382101356983,1.2354354374110699,3.9634844940155745,-5.715999798849225,-8.8085857313126326,-5.9003768488764763,-7.6336669828742743,0.95903734676539898,-1.4592271484434605,-5.2306170482188463,9.019307903945446,7.5080904550850391,8.4764156304299831,3.1176452338695526,-1.7364516947418451,-4.5435688551515341,-3.7617058306932449,-2.9898476414382458,9.6307452023029327,3.9347687363624573,-8.341738898307085,0.39434912614524364,7.8258444648236036,8.9680597931146622,6.181091321632266,5.6019693054258823,-7.7017616014927626,-3.5072183050215244,-5.8180016838014126,-3.1542669236660004,6.235867515206337,6.2254551332443953,-8.7754485756158829,-8.9642007928341627,-1.3227170612663031,9.0944191999733448,9.9036433827131987,-9.4655109662562609,-6.8428056873381138,-7.0351623836904764,0.025840513408184052,-5.6984126847237349,6.7780415061861277,-1.4562742225825787,4.3992079142481089,-2.5124725420027971,-7.1259548421949148,-5.923010278493166,-8.0337187275290489,-2.7106381952762604,2.3039090353995562,1.7992542497813702,0.066268416121602058,-6.2266514636576176,8.6688798293471336,-2.1365620568394661,-9.1984277591109276,2.0246588904410601,8.4420657437294722,5.799099188297987,5.4601813666522503,9.2683503124862909,-6.8361472431570292,4.873309014365077,5.7047208305448294,-0.75687812641263008,-0.85059828124940395,3.9947586413472891,-0.091405352577567101,3.750316770747304,-8.425926435738802,5.454406850039959,-7.7839504275470972,-4.8548184428364038,5.0664715096354485,-7.8132196422666311,3.2174895331263542,-3.6533133033663034,-1.2366400100290775,-4.2085799761116505,6.3963868096470833,4.073238056153059,-1.0878800973296165,-4.0007260721176863,-0.20304713398218155,7.3868958279490471,-8.4416835848242044,0.62400205060839653,7.6025477144867182,-3.9804248604923487,0.99941681139171124,-2.8015648573637009,-5.9005013760179281,-9.7265946492552757,5.1237320993095636,-5.4344885423779488,2.5511039793491364,-3.5953208524733782,-6.55751739628613,7.8051475528627634,1.1150603089481592,0.81869947724044323,-0.11780135333538055,0.11273182928562164,-5.3160660527646542,-7.1221121586859226,-1.3390285149216652,-5.0521825067698956,7.9686474334448576,9.0575545281171799,-9.6808967832475901,-6.8322335463017225,-9.3491879012435675,8.198948884382844,-0.26595775038003922,-9.9518344551324844,-0.4816870391368866,4.2860077135264874,-5.0682469550520182,-2.026534965261817,0.026901243254542351,-7.8707261476665735,-3.294347170740366,-8.0928461533039808,3.5347163397818804,7.9776286333799362,0.004581911489367485,-2.9917353019118309,-2.0951643865555525,6.5722170192748308,-0.74842735193669796,1.1815684009343386,-1.3797979895025492,9.7352578863501549,0.47945033758878708,-1.878094132989645,-5.1280295941978693,-6.7933515552431345,4.1404361184686422,8.3099537622183561,5.3930248972028494,0.56956775486469269,-7.2746612690389156,-5.2319274097681046,6.9960613362491131,2.8030113503336906,-9.788134740665555,-9.1805847082287073,1.9128152076154947,8.685287619009614,-6.3708410691469908,5.2741792425513268,3.1306490954011679,-3.1805508304387331,4.4822461809962988,-6.8883226532489061,7.9611911904066801,3.740477729588747,6.2093087285757065,-0.14807197265326977,-8.6455672793090343,-6.0492527484893799,-9.7909129410982132,4.1262005921453238,9.0534627344459295,1.5483269467949867,2.7310851588845253,1.3483650051057339,1.970729622989893,2.0528672728687525,2.5403494294732809,-4.3470406997948885,-0.71299721486866474,-3.3441176172345877,-4.5847407728433609,4.2618731968104839,9.3029304035007954,-5.6485572922974825,4.6976224053651094,-7.0601180009543896,0.59678096324205399,-9.9022678565233946,-7.4158638250082731,1.5767133049666882,-0.17939282581210136,4.9448534287512302,8.1516939774155617,5.5208204779773951,8.4298948291689157,1.2425380758941174,3.3375295344740152,-6.1410097125917673,8.0497906636446714,-7.1681748609989882,4.485133346170187,1.6362624429166317,0.66296916455030441,2.5228320434689522,1.2382525857537985,-8.6887032818049192,8.9639529585838318,-2.8424766659736633,6.4947309903800488,-3.0561155918985605,-4.1346986964344978,8.1190549209713936,-3.0438014306128025,2.8294101264327765,-6.1039046384394169,-8.3252277597784996,-2.1029454935342073,-4.2048480268567801,9.119257964193821,7.368753831833601,6.6457875538617373,-4.2484519723802805,-3.7322547845542431,-8.0061149504035711,1.2260441668331623,6.1243998166173697,-7.2121559176594019,5.2955137100070715,1.6990437917411327,-4.1709006484597921,-0.32715304754674435,1.5388055797666311,2.7054694388061762,-9.1750425472855568,-4.9400857742875814,-8.0215688515454531,1.4923275541514158,1.5492925606667995,-1.0398424882441759,3.3673701994121075,-4.6089538652449846,-2.687570983543992,9.9945367965847254,-1.8199033197015524,-7.1150302048772573,-2.3126307968050241,-8.385741738602519,0.83861193619668484,-5.4491035174578428,-3.0827823001891375,7.6779348496347666,3.0511561594903469,0.7816746924072504,-2.3933603335171938,-5.2070658933371305,4.8435681872069836,5.8506385516375303,-8.317738575860858,3.7677686661481857,4.888079697266221,-6.0444115288555622,-8.4245345182716846,8.8483637291938066,-5.5506559275090694,-9.8741388227790594,5.3488065302371979,-2.6085261814296246,-1.4994734432548285,-1.6500942595303059,6.8658454157412052,-5.7359656412154436,-4.374498538672924,-2.1968954522162676,-3.2218043319880962,-8.8653546757996082,-0.016027288511395454,-9.370559873059392,9.0002184081822634,6.6709350142627954,-1.5950848162174225,-8.5904403869062662,0.46842829324305058,-7.1255935356020927,0.14946962706744671,-7.8638984449207783,-8.5411470662802458,8.9412684366106987,-4.1012376453727484,-9.5010596141219139,-4.3089306447654963,-0.19730203785002232,3.9447265677154064,-0.98046727478504181,1.2865832727402449,3.6051532719284296,-8.1888522207736969,9.9607396218925714,-9.849018631502986,7.5438615027815104,9.6804145444184542,-1.2725979369133711,-8.5534573998302221,2.0414923690259457,-8.637659540399909,6.8561151530593634,-9.2724906094372272,-2.7496671210974455,6.3447524514049292,-3.7454213201999664,-9.2960796505212784,0.78931919299066067,6.087761027738452,-3.0002808943390846,-5.7209363766014576,8.2223519403487444,-6.9307959452271461,-5.8874274138361216,-9.9925121571868658,-4.1518257837742567,0.26409787125885487,-1.3069974258542061,-6.7056682985275984,-2.1670675743371248,-1.9046605844050646,8.3696212526410818,8.2245368976145983,9.7917808312922716,-9.5394135732203722,-8.9239215105772018,-4.3488198518753052,9.3847937509417534,-9.7712762095034122,-5.8392513357102871,-0.29716672375798225,5.5189497303217649,-3.0117610283195972,1.3324517197906971,-5.483856787905097,-7.1809989772737026,8.950211014598608,6.1966706626117229,7.4439532682299614,-9.4772843364626169,-4.7178388386964798,7.2826793603599072,-0.0078551750630140305,7.9781509097665548,8.7824811413884163,7.1606903057545424,9.7221031133085489,-0.61282027512788773,0.32970938831567764,1.4257702603936195,2.9208558518439531,-9.1755969356745481,5.7423085626214743,-9.0198648162186146,3.1320414785295725,0.22123241797089577,-1.7466711718589067,3.6976791545748711,6.893658135086298,1.7124086059629917,0.45153208076953888,8.8997632823884487,-1.678364984691143,-8.2802325766533613,-5.8689023554325104,1.3581445720046759,6.3359105680137873,7.6490444503724575,-2.5097844656556845,-1.94745565764606,9.1128249559551477,-0.75081568211317062,1.0409031063318253,-5.5414054729044437,5.5982517823576927,9.8178281541913748,8.2379425875842571,-4.8987877368927002,6.0745459608733654,-5.1059097982943058,4.9740583635866642,-1.0009660106152296,-3.2356699835509062,-1.9053606037050486,-3.395603122189641,-9.9016229528933764,3.42303148470819,-9.1097314562648535,-7.2565784770995378,-1.3144431449472904,8.1541308388113976,6.4771499764174223,1.4597825985401869,-5.4337766487151384,-5.4840992204844952,8.744436651468277,7.7469479199498892,2.9538294859230518,5.0122712831944227,1.2435741350054741,0.75057502835988998,-5.085414219647646,9.4432488363236189,-7.3166557401418686,8.9669964276254177,8.3091075345873833,-8.8295228965580463,2.2086867038160563,1.3975265808403492,8.2293333765119314,-9.5937982946634293,-2.9679352324455976,-2.0873966813087463,-2.8759608324617147,3.7263445649296045,8.6732101906090975,-9.356180289760232,-9.3221249617636204,3.0457729380577803,-9.6941279619932175,-9.2086548265069723,-9.8616629093885422,-4.9685170128941536,-5.8653963357210159,0.28381789103150368,-9.8726249486207962,-9.2075104732066393,9.3714830093085766,6.5150890499353409,-0.89820848777890205,3.8100171275436878,-5.0420292932540178,-1.3862929213792086,0.57493778876960278,2.9794986080378294,-3.5667931288480759,-7.0920662023127079,3.6433604825288057,-6.0402633622288704,1.2937020044773817,3.2496776338666677,-2.6679039094597101,0.53905108943581581,-0.16825737431645393,-7.9016131907701492,-2.4128808546811342,6.71153474599123,0.7646066602319479,-9.2557772342115641,-1.8479695729911327,1.1754505336284637,-4.2027938459068537,3.6438772082328796,2.6443455461412668,3.5156929492950439,8.2515045721083879,3.0374862626194954,-8.9682821184396744,-9.9175565410405397,-4.3727846257388592,6.6088392399251461,-5.2387645933777094,-7.9164836369454861,7.6595301553606987,-6.276540644466877,-9.8185824137181044,-0.91462594456970692,7.8818207141011953,9.7608818393200636,-8.8587718922644854,-9.3791843578219414,4.0485029388219118,3.1890027225017548,-2.4311396945267916,-0.16478667967021465,-9.5696482434868813,2.921975078061223,9.6352380979806185,-0.55313357152044773,3.4841373842209578,-2.1028778702020645,-3.068302683532238,-8.9631478767842054,-3.6263570003211498,-8.18205451592803,4.2097650188952684,-6.4792162179946899,3.8130517117679119,5.960227781906724,-6.4515445847064257,8.8901926018297672,-2.5327932089567184,-8.655404495075345,8.6166617833077908,0.23473775014281273,5.2374467439949512,5.7675455696880817,-4.8614868521690369,-7.0094841904938221,-8.4007662255316973,8.3220599964261055,8.862503319978714,-7.9065534938126802,-5.4445541277527809,-6.6211894899606705,-2.331731328740716,-9.4083821307867765,-6.6784675046801567,-5.0033251661807299,9.113971097394824,-1.4876164961606264,-2.3703843541443348,0.95021960325539112,-9.6590423863381147,0.47461547888815403,-3.1375643517822027,6.9559932965785265,9.3794682901352644,0.72370396926999092,3.2926954422146082,0.33240132965147495,6.6692283097654581,9.7203326784074306,9.631480323150754,-3.7100551649928093,5.1028911862522364,4.2922855354845524,0.44310674071311951,7.2950728889554739,8.2901800237596035,-6.9441975280642509,8.8721697311848402,-5.4431802779436111,-3.5308957379311323,-3.7646167818456888,8.0857963114976883,-2.0212511159479618,8.8325566984713078,8.7805785890668631,-4.8155065719038248,5.7810865808278322,2.7222874760627747,-6.5142902452498674,-5.6761246360838413,1.3732751738280058,0.63593553379178047,8.168599670752883,9.6548085287213326,8.3670960366725922,5.7832320965826511,-1.2180292140692472,8.5830678604543209,-4.3783239088952541,-6.4898928068578243,4.3716226052492857,-6.1387610994279385,5.8422321267426014,-9.6045218501240015,-3.198731942102313,-1.0876976884901524,-0.93498070724308491,5.7793243043124676,-6.8962939269840717,-6.0120065324008465,-3.7937588524073362,-1.7049838416278362,4.3366386741399765,5.886308467015624,-8.8134705368429422,-7.9993034340441227,-4.2928003240376711,-9.0950014349073172,0.31089059077203274,5.1382397953420877,-1.6036412119865417,7.6022158470004797,-9.5581217017024755,-3.3514370582997799,-7.6025868114084005,3.3234794158488512,-2.2813535574823618,-2.7091802004724741,6.8084277119487524,9.2446862626820803,-4.5578324887901545,-3.4905965067446232,-6.4554379135370255,3.455014917999506,8.4358321130275726,1.0304679349064827,-0.92533170245587826,7.9501478374004364,-1.8651563301682472,-7.6823774725198746,2.2818374913185835,-9.1571872867643833,-4.8467220552265644,1.1424581333994865,1.2939352449029684,7.169749466702342,1.9794212374836206,8.132832134142518,8.5098204389214516,4.5522618107497692,9.8643671534955502,-9.5810957346111536,-9.4760083314031363,-3.2720217946916819,7.1297492645680904,9.6960236504673958,1.0696475487202406,-2.4335620272904634,-0.87693345732986927,1.3794540520757437,4.4843422900885344,8.3409828692674637,6.8992273136973381,-4.6864064317196608,-4.4328563287854195,-3.0162743292748928,5.4774025268852711,-1.2956095114350319,4.6910094283521175,1.795577285811305,-1.7324650567024946,2.4598567001521587,2.8116569668054581,-4.4812586344778538,3.4861735161393881,-7.8816086985170841,-6.1973793990910053,0.64446923322975636,-8.4055138006806374,8.529564430937171,-3.6104642227292061,-1.0721414070576429,0.51944145001471043,-9.7474672738462687,-5.6824695598334074,-5.265858331695199,-3.2809437531977892,-2.8216074127703905,-2.7557302545756102,4.4416680373251438,-8.8851836510002613,6.7183863557875156,-4.0803874377161264,0.92838062904775143,3.2933179289102554,-9.2054647672921419,3.7536623328924179,7.8029365558177233,3.9548329543322325,8.8775726687163115,5.3639908507466316,-7.4056512583047152,-6.7806780245155096,-2.8555328398942947,7.0596158038824797,-9.0370506327599287,-5.7099772617220879,-7.5878041889518499,-8.2249848358333111,2.6798780355602503,0.71024289354681969,-2.9476043395698071,-0.38607995957136154,-8.845805274322629,8.5507634840905666,-7.3179777059704065,6.7487167380750179,5.6823479011654854,3.2212976180016994,0.34916922450065613,8.4872371703386307,4.9952665623277426,-4.5547696016728878,7.9873472917824984,3.3460737578570843,-2.5382472481578588,-0.32144139520823956,-2.4654535204172134,3.1227413099259138,3.9132986217737198,-9.1899549588561058,4.4270128384232521,4.8048882838338614,-4.2424977384507656,-3.659445084631443,-4.2934877797961235,-0.64907037653028965,-8.9257451612502337,5.001083267852664,-6.7933997977524996,3.3296242635697126,0.99510213360190392,4.6816454920917749,4.4159004837274551,-1.9604571722447872,-9.4036309979856014,-6.826178478077054,-7.581656202673912,-4.8957794159650803,-3.3646041806787252,-8.9024127367883921,-2.8508586157113314,5.6193016842007637,3.6035285983234644,4.5052584819495678,-0.12058035470545292,-6.5939442161470652,-4.4204141292721033,6.099772984161973,-1.1153291910886765,-5.3376450948417187,-9.8010725155472755,-6.6257672477513552,0.72989344596862793,7.3192303627729416,-5.6951573304831982,1.4907802548259497,-4.4561672117561102,5.1977153960615396,-1.9972194544970989,-7.2673091012984514,-1.664044139906764,-7.5897941738367081,-1.6706608142703772,1.203759741038084,-8.4099446889013052,-5.9403739217668772,0.13552863150835037,-2.1702109184116125,5.2651555277407169,-8.5309257917106152,0.73023021221160889,-7.0207393821328878,2.4332278035581112,-4.7402082942426205,-8.68076017126441,2.4638118781149387,9.2863330151885748,-4.6008627861738205,-6.7008049692958593,-0.42909313924610615,8.2316835876554251,9.9062004033476114,-6.4896651450544596,8.1979345344007015,2.6858620904386044,1.2842532806098461,4.4449755176901817,6.7036388628184795,8.0584981106221676,-0.82211344502866268,2.739401226863265,1.1165195889770985,5.3448189329355955,-9.6280740574002266,0.95932018011808395,3.2943530101329088,8.1911453418433666,8.5799027234315872,2.4252181220799685,0.64107503741979599,-5.4517628066241741,-7.7774553373456001,4.3081626202911139,7.289271205663681,-9.2187110986560583,1.1225709971040487,7.0508353691548109,3.3901828248053789,-1.1971587035804987,-0.64626218751072884,-1.7285122908651829,8.893992155790329,1.32631023414433,-8.7038060929626226,-4.8689942806959152,6.8131644930690527,8.8557665888220072,-1.1307941004633904,-5.2563770767301321,-3.9294914808124304,-2.9632705077528954,-3.6873687338083982,6.3937402796000242,-0.4069924633949995,-0.32225720584392548,3.8232171162962914,-3.1898182258009911,8.7251322530210018,3.2979230675846338,8.1931009609252214,1.4479926507920027,-3.5874285455793142,6.0884846281260252,9.1612708196043968,-6.5211849473416805,-1.5553827490657568,-1.3177974615246058,-8.2218678947538137,-4.9336932133883238,-0.5817977711558342,1.7249338887631893,-9.0360397938638926,-8.7208079267293215,9.3811854626983404,9.5842232462018728,2.0402521826326847,-9.4814722612500191,4.8957092221826315,2.185013797134161,3.526983791962266,-1.9833026267588139,6.6328147985041142,-2.2815513703972101,-6.0338218603283167,9.5560244936496019,8.1038178130984306,0.86612642742693424,-3.0130491964519024,-0.31779008917510509,-1.0979529935866594,6.7041064519435167,-4.0827314555644989,1.5324726328253746,-3.7323698494583368,-9.9400107935070992,-1.7614060081541538,-3.9507145714014769,0.34024579450488091,-1.4888508338481188,-3.1158978771418333,-8.8955672457814217,-7.7986912056803703,7.3969233501702547,0.09088246151804924,7.4616097006946802,7.2743762284517288,0.44140677899122238,-1.2761837802827358,-8.8207269366830587,-9.957615602761507,2.3545647133141756,-6.8307666387408972,-4.6948725171387196,-6.722354032099247,-2.6041918434202671,-8.6522544827312231,1.5589192789047956,0.75641101226210594,-7.0000327285379171,-9.550045058131218,-7.6072884909808636,4.3023508042097092,9.6100782789289951,-3.4142125677317381,-2.6705743279308081,-4.3426721729338169,-7.2911662235856056,-2.6306986063718796,5.8485803753137589,-2.9095080681145191,-0.10204531252384186,4.9245098698884249,6.237500011920929,-6.3371725659817457,-8.8592877890914679,1.9501376617699862,-4.0362251084297895,3.1646492891013622,8.2607049494981766,-2.3317708726972342,9.9270025826990604,3.1325633730739355,8.992714025080204,0.54476816207170486,-4.0814175363630056,3.6155126616358757,5.9214106667786837,1.149201150983572,-5.3761681634932756,2.7417123503983021,-0.040427139028906822,0.54115228354930878,-4.853487890213728,7.4290694482624531,0.37035334855318069,4.5288102887570858,-4.2853631544858217,-4.0984927210956812,-3.3671172708272934,8.8600811082869768,-8.6166654154658318,-0.29562691226601601,-8.6014385055750608,-4.3769522570073605,-3.4365395177155733,2.0803771167993546,4.8982965853065252,5.6708258390426636,9.5699994266033173,2.9805160779505968,-6.4661762956529856,2.975026611238718,1.2723566312342882,4.4979893695563078,-2.2925524041056633,9.0718045085668564,9.8185247369110584,-0.054591633379459381,2.4784956220537424,-3.9239824842661619,9.6264344826340675,-8.5154967661947012,0.04586217924952507,-9.1942747309803963,-8.1753972824662924,-3.9021121338009834,-2.7985850721597672,4.1807485651224852,5.8412449900060892,-6.1953289899975061,-4.8943051137030125,1.4139939472079277,4.9963600467890501,-6.1765762511640787,-9.717023391276598,5.9878650214523077,-1.9524593278765678,5.0161393545567989,6.2542495504021645,-4.827679181471467,1.1960374843329191,1.8020868021994829,7.6729769259691238,-0.27666692622005939,-9.9409528821706772,2.4049098137766123,-0.68066277541220188,0.1008065789937973,-5.7437478005886078,4.8307488113641739,-9.6046113315969706,-4.7026470582932234,2.610932718962431,1.9463062938302755,-8.4300260990858078,-3.4486350510269403,-1.2092513404786587,-3.8872106280177832,7.6510227378457785,-9.2607068829238415,-4.7005755174905062,-2.5726809911429882,0.95063998363912106,-2.5937092769891024,7.5282396003603935,7.1231004316359758,-2.0509114861488342,-9.6692854911088943,8.3187535125762224,-6.7095707636326551,-7.7557986229658127,8.2925613690167665,-6.9209277722984552,-0.033044926822185516,4.6139928977936506,7.3787475842982531,-5.389214688912034,3.4687595348805189,-0.55839185602962971,-4.8918503988534212,2.6703864429146051,1.1850452236831188,-2.944838022813201,6.1074057873338461,7.1691937744617462,-7.3600982502102852,-1.171270627528429,-5.5453677754849195,-0.99616771563887596,-2.5907262787222862,-2.3365085013210773,-9.6983217261731625,0.30675056390464306,-4.4431917928159237,3.2755816262215376,-7.2995041962713003,-2.7670056000351906,-5.0630631856620312,5.0970772095024586,6.5767782554030418,-4.0877317078411579,-2.5067674182355404,8.7600603513419628,-9.6655281726270914,-8.5319947265088558,2.7646430488675833,5.3558222111314535,-4.6959773357957602,-5.2910412102937698,-6.5295845549553633,-2.727587977424264,-2.5710796564817429,7.8642716445028782,-5.1863310299813747,-6.6655832249671221,-8.4572359267622232,-0.76420902274549007,-4.0609730035066605,7.2267765365540981,0.43338468298316002,3.8964485470205545,7.6108385249972343,-4.6367725450545549,9.7638772334903479,1.4848179463297129,-4.6646861545741558,0.61984182335436344,-2.3183917719870806,-5.2104516699910164,7.9388199374079704,7.7468284033238888,0.94511355273425579,4.5235664583742619,7.5815795548260212,3.6077155545353889,-5.1245684269815683,-8.6215141229331493,-1.7878533527255058,-8.4512349870055914,0.093585513532161713,-7.1081950701773167,-7.4345218390226364,7.99147161655128,-7.3363998159766197,-2.8716862760484219,-4.4311857596039772,5.0609819125384092,-0.076878098770976067,7.9098716098815203,1.2122874427586794,-5.0848618056625128,-1.272329306229949,-4.0385815035551786,3.5607163980603218,4.9606083240360022,-7.055780841037631,-6.5085722785443068,-9.5742581691592932,5.4429542645812035,-0.26755432598292828,3.2145193684846163,6.4271295350044966,0.76622338034212589,-2.083562333136797,1.567928921431303,-7.8185269702225924,-5.982771459966898,7.5601037684828043,2.6641743164509535,-3.2221642974764109,5.0847053527832031,-1.3570177182555199,-7.3967230785638094,3.2752389460802078,6.9410706590861082,-1.4253001566976309,4.9803334847092628,4.4649947434663773,3.1667666416615248,3.8470494467765093,-2.6398396585136652,-7.7850830368697643,-3.8905833382159472,-9.0341175813227892,3.5858182609081268,6.8476174026727676,7.9058185685425997,-6.9071783684194088,-8.9468138199299574,-9.0998633205890656,-1.4028220996260643,2.7690388634800911,-0.76372155919671059,4.1318268608301878,3.614160567522049,3.1967648863792419,8.0275486502796412,-0.98969366401433945,6.218659421429038,-2.9909771122038364,-9.3522699549794197,-3.6011282727122307,-4.1628293972462416,-4.673633836209774,-9.7638434916734695,-0.91756271198391914,-1.4764292351901531,5.6539108604192734,5.2799535728991032,0.17981929704546928,2.2230051085352898,2.0469548087567091,3.1695650517940521,-9.1200714278966188,-1.0404817759990692,-7.3771390970796347,-7.5767840910702944,-3.0101996567100286,7.5744243711233139,3.3505430072546005,-7.4235725868493319,-7.9844470135867596,5.3990584146231413,1.9748950842767954,-7.9382248409092426,2.2551149688661098,1.7173776403069496,3.966092336922884,-1.8859840370714664,2.2663524374365807,-9.4144880026578903,-9.2998560890555382,-2.6812832802534103,-4.3280339427292347,-1.26643106341362,-4.9068144429475069,-8.8303027581423521,9.1015530470758677,9.8022116906940937,5.7720404677093029,-9.3157357722520828,-9.5711188856512308,-1.7951077874749899,9.6234801132231951,1.8304165173321962,3.8104993849992752,3.0632717628031969,4.4086196646094322,-4.3291841447353363,-0.59787618927657604,-8.5050395876169205,-4.2003373801708221,4.9296968523412943,-6.5848858561366796,7.823442630469799,8.6004297900944948,7.4236276838928461,8.9106195420026779,0.78279043547809124,-3.6410665325820446,4.5948366541415453,5.4197603743523359,9.9127324111759663,3.2937904726713896,-1.2634217739105225,5.6703142542392015,0.9717936348170042,-7.0642937626689672,-9.5852462016046047,0.76709287241101265,-7.470009122043848,-8.4432943910360336,-6.4488179609179497,-5.2834413573145866,1.2011445220559835,7.6360698509961367,-0.57387628592550755,-5.1386637799441814,-5.522111477330327,9.8724355455487967,6.0243695601820946,-8.4206766076385975,-6.3117322232574224,-1.2834474258124828,9.0991825796663761,9.9617659207433462,7.3999861534684896,-8.4325824771076441,-6.4136804826557636,5.2721560653299093,9.1271095164120197,-0.67020797170698643,-4.1853074636310339,-2.4624957423657179,-7.1658829506486654,3.0052706226706505,9.5834570005536079,9.1619615629315376,5.0881381519138813,-3.6619627010077238,-6.6070662345737219,-4.9621779285371304,0.67559449933469296,-5.2831661328673363,5.8268418069928885,-8.2696260046213865,-7.6042461302131414,-4.5646917447447777,1.2258886080235243,3.5099229030311108,-8.7256630230695009,7.7815812360495329,5.0359734427183867,-0.39423055946826935,-5.8329378068447113,5.8143129665404558,1.1581524088978767,5.0676236674189568,-8.4489037655293941,-0.72557511739432812,5.2590745314955711,9.2657702602446079,9.800914702937007,3.9735672250390053,3.7444605864584446,-6.8508158251643181,-1.6615488938987255,-5.6521944981068373,3.5671043395996094,-7.6772581692785025,8.3219671063125134,7.3012991808354855,-7.0645322930067778,6.4057744015008211,1.8504944164305925,1.2597496900707483,-7.3868708591908216,8.8614900223910809,-4.9370460584759712,3.0669348128139973,5.9735012240707874,-3.3648020308464766,7.7723194845020771,9.3737151101231575,4.0300074592232704,-7.6645230315625668,2.3614268004894257,8.5003325622528791,5.0895185675472021,-0.4613171424716711,6.6428611241281033,6.5670434664934874,-7.7003289852291346,0.57076324708759785,-7.1820234693586826,-8.2684274576604366,-7.4602673482149839,-4.7133015748113394,3.5404735151678324,4.7384753916412592,-0.44397734105587006,-1.9270963408052921,-8.7081367336213589,2.345928130671382,8.0141888093203306,-5.5285407695919275,1.8153204582631588,-9.9089655000716448,0.01684100367128849,3.0468270927667618,8.0230502318590879,3.4053879044950008,-5.6453842390328646,-1.9728713482618332,1.9513125810772181,-4.2893563024699688,8.7886690720915794,-8.838758310303092,6.9890878163278103,5.5990619771182537,3.434771504253149,8.2047771196812391,-2.3108070436865091,2.2660769335925579,5.9551188815385103,7.6831668801605701,-9.014106746762991,-0.092085134238004684,-7.674773596227169,-9.9198135919868946,-2.307039899751544,5.5804650764912367,-9.1233374737203121,4.067086037248373,-4.4848618749529123,2.9265108238905668,5.8675182890146971,-4.6199923474341631,-8.2113412208855152,-8.0118854250758886,4.241676302626729,9.8537296988070011,-8.36479676887393,-7.1392816677689552,-9.9069678038358688,-6.4078783430159092,2.7887170389294624,9.9673733673989773,1.644342141225934,-3.5415412858128548,-2.684340113773942,4.2957650497555733,-1.0766968782991171,3.9556362573057413,2.3786857537925243,-1.4284391328692436,-7.7764390502125025,1.38890047557652,3.2503821421414614,9.1727666649967432,6.6894886456429958,-9.7642020601779222,-6.9440235663205385,-8.2040552329272032,-5.5562857538461685,-4.494630116969347,-1.2483328208327293,-0.72965124621987343,-3.2484226673841476,3.7602821085602045,-0.93849373981356621,6.7357858642935753,8.3531521540135145,-8.5716038569808006,-2.9460131004452705,6.3578760158270597,-3.1776739750057459,-7.1664445288479328,-6.4331741724163294,-2.3582878895103931,4.2555007990449667,2.2020411118865013,9.7050629649311304,-7.0065941847860813,0.17155972309410572,3.4043456427752972,-3.1626769714057446,4.8881950881332159,-4.1050372272729874,6.639367351308465,7.8472036588937044,7.9520346969366074,9.8472919035702944,3.4351786319166422,-4.952628230676055,1.1773665249347687,7.9992720484733582,3.7654595542699099,6.078836340457201,7.002499895170331,-8.9841288048774004,3.747184369713068,-1.0721906460821629,-0.30811883509159088,1.4468144625425339,-3.3892384637147188,-2.9308079183101654,1.9113722816109657,4.4340302515774965,2.7465512230992317,1.2865063827484846,2.3128631804138422,-7.7084304206073284,4.4099387805908918,-2.1588018350303173,-2.9823799896985292,-4.8604319430887699,-9.2796272691339254,-2.6955066993832588,-3.3810393698513508,-5.1286372914910316,2.9930800292640924,4.6961535234004259,8.2523827999830246,-2.2021378390491009,8.6694001220166683,6.6079968400299549,0.60302035883069038,-5.0367461517453194,7.4074664525687695,-2.7111954428255558,-7.0617505256086588,-6.8410609103739262,2.2893040627241135,-3.666521618142724,-3.2287865597754717,-6.2156571540981531,-6.5497593116015196,-1.8047230876982212,8.0191291868686676,-2.4956152774393559,-3.8059091940522194,-5.9157759603112936,-6.4465329889208078,-6.8799169827252626,9.2352957464754581,-2.3842384479939938,8.1044641602784395,-8.2707165088504553,-5.932350717484951,-5.0184769369661808,-5.5418406054377556,-1.7150207050144672,-4.3529243394732475,0.40067066438496113,-5.9280622843652964,7.0572185330092907,-9.3279822170734406,4.6028828993439674,0.65300355665385723,-4.9691399466246367,3.664956446737051,-3.0768927466124296,6.6636618599295616,-3.8349897507578135,5.3273072559386492,-3.9468294847756624,5.6368967425078154,-0.67632629536092281,-7.015973161906004,2.5390911940485239,-5.4942034929990768,-1.0780715756118298,0.85109851323068142,4.4127967860549688,5.8756960183382034,-7.1768955420702696,-2.0833534840494394,5.0780555326491594,6.8794552329927683,3.0042330082505941,-7.8557285573333502,8.770153671503067,-0.027096150442957878,4.5950775500386953,9.4684977177530527,-2.9587053600698709,-6.9609315879642963,7.6228248607367277,-3.1824276782572269,-7.0619351137429476,-9.9434336833655834,0.71008411236107349,-5.6162397284060717,7.8589189797639847,4.8514326568692923,-1.9712197687476873,9.7094094846397638,6.0453625861555338,4.4091110862791538,3.9301398582756519,-6.1392929404973984,-3.0964207276701927,-1.5431159269064665,4.8506826627999544,5.4236298985779285,-5.0521738920360804,8.1134352646768093,2.5066351797431707,9.0175638161599636,-1.8047929648309946,6.8447042163461447,-1.0561040416359901,-9.9405577778816223,9.0454275999218225,6.5018209349364042,-3.8954173773527145,9.7201866004616022,7.1763482876121998,-7.1141956746578217,-8.2866813894361258,5.7459011487662792,-8.6392694525420666,-0.20167822949588299,-9.6059264522045851,-6.8058791197836399,-6.4103412069380283,1.3953630812466145,-8.1326043047010899,-4.6805344987660646,-5.743279131129384,-7.2923235781490803,-2.0823567640036345,1.8299293518066406,-4.3772916030138731,-9.1399278491735458,5.2326456643640995,5.0758001767098904,8.9736879430711269,0.77340768650174141,-1.3369286525994539,-9.7597964387387037,7.1012559905648232,-9.1904327366501093,-3.6029985453933477,4.4034976325929165,9.5848237071186304,-7.8678011801093817,5.8655825816094875,2.8465732745826244,2.3571264464408159,-3.7757179606705904,1.5082837175577879,9.72453105263412,0.19355598837137222,-6.9044236652553082,-2.6485177222639322,6.3626994378864765,-2.1104193851351738,-9.8185442201793194,-0.27270713821053505,-3.3887957781553268,4.5094082783907652,9.6250484604388475,8.189628180116415,3.080965569242835,1.7884246353060007,-1.9470621552318335,-4.2735799588263035,-6.0583231784403324,-2.2376292012631893,-7.8339248802512884,-4.7754454333335161,-0.91135715134441853,2.820428479462862,2.9415546637028456,-1.290665864944458,7.7788760326802731,-0.43037960305809975,6.610086290165782,-4.2795911896973848,-7.0890804752707481,-6.1755250953137875,7.9497529845684767,-8.5014478769153357,-3.8344555906951427,-5.6950645614415407,3.0499495379626751,0.50198666751384735,-3.1099969055503607,-9.7179376613348722,-9.3782718479633331,-0.61494385823607445,4.6386480703949928,1.7582336906343699,-9.3662694841623306,1.1087846383452415,-4.6564963925629854,-1.7348279897123575,2.7460415847599506,-7.2789851855486631,2.0960077736526728,7.6027464400976896,-0.64044351689517498,-3.9341152086853981,-0.67426490597426891,7.6297982688993216,-5.9803566336631775,8.1460894737392664,-8.6740728467702866,-5.1423252932727337,-7.0611660182476044,2.9827543068677187,-8.8482628669589758,7.2460040263831615,3.5898063890635967,-6.123912651091814,-4.5998965669423342,9.5384416542947292,-7.4109633546322584,3.9389189518988132,1.4109336491674185,-6.4380691386759281,-4.6279858518391848,-2.5581698212772608,4.8398720286786556,3.7293021380901337,-1.6188576724380255,-8.1408350728452206,-3.0150547623634338,5.9746636170893908,-3.8284625578671694,-4.9701617751270533,6.4910847973078489,-4.3376825843006372,-3.4311500284820795,-7.3384772893041372,2.2122194897383451,0.77305960468947887,-7.1871396712958813,5.7435665372759104,-7.8770847897976637,9.8359544761478901,-7.1129641402512789,-7.5882826093584299,3.7342033814638853,0.75633974745869637,-8.197780279442668,-0.093142492696642876,-5.4457972198724747,-7.513838754966855,-5.0879352726042271,7.0719117764383554,-2.3786397930234671,2.2010582964867353,-6.8131154589354992,-8.0314933881163597,-5.3093586675822735,5.6089106481522322,8.9613856468349695,-5.9912852477282286,4.4688727986067533,8.3452394139021635,-1.5610269736498594,3.8197199068963528,-1.9674166385084391,-6.3713805470615625,-3.7928260676562786,-6.0276705212891102,-7.058420218527317,9.1314102243632078,-8.3882093988358974,-0.63535362482070923,1.6117009241133928,7.8575224429368973,1.3798381946980953,-9.0593726467341185,-0.8760663028806448,-4.0462811104953289,-5.846577500924468,-3.428025534376502,5.1748951617628336,-5.5368974898010492,1.3639238383620977,3.4680402837693691,7.3531547095626593,4.4713394250720739,9.8018304351717234,-0.63572109676897526,-4.5644001103937626,6.1273871455341578,2.9958812054246664,-8.224478717893362,-8.8137977384030819,6.501419935375452,9.3649829924106598,-2.7306949999183416,5.2091932576149702,-9.0888002328574657,4.5344934891909361,-8.767813416197896,-0.6400763988494873,2.2360377851873636,1.0871514026075602,-8.2462896034121513,4.6106491703540087,-8.8192795123904943,-5.6307555083185434,3.8922058790922165,-3.6956813745200634,6.6831877734512091,4.3370389565825462,-7.3861445114016533,1.069217324256897,-9.6643445827066898,-8.6393989250063896,-2.3777219373732805,-2.372541781514883,4.6903377678245306,-9.4930212013423443,-9.2073269933462143,-7.5447709672152996,-4.9656267743557692,2.7108427975326777,1.1349976062774658,-4.0951441507786512,-7.087695924565196,-2.9053813777863979,9.2552390601485968,-7.1969653852283955,0.60279239900410175,-8.8680669572204351,-5.6013411469757557,-1.7406227998435497,5.3526676632463932,2.2855363320559263,-6.9907709863036871,6.1120567377656698,5.3377177193760872,-8.978170407935977,3.8899618107825518,-1.4117374736815691,-7.0716529525816441,6.7288488708436489,-8.2368968054652214,2.4754043389111757,4.1208217106759548,-1.3493981584906578,0.66521794535219669,0.31809099949896336,6.1555093247443438,-4.3546525854617357,-8.6459596734493971,7.3557789251208305,8.5765303298830986,5.7453997246921062,2.9332961235195398,-0.091950790956616402,-5.4168660659343004,-1.2679342925548553,9.8284133616834879,6.1435249913483858,-5.7753440644592047,-6.2076583039015532,7.8869159985333681,-4.6026726625859737,2.880602153018117,-5.7195134181529284,-7.8619853965938091,3.611456174403429,-2.2559702768921852,3.9076168742030859,-4.6830864250659943,-8.6335044726729393,-3.3096615225076675,-5.4811564274132252,-1.7960401717573404,-6.0471025202423334,6.3479732163250446,-9.61402527987957,-2.9228759184479713,-4.7755059693008661,-1.9287851545959711,2.907969867810607,-5.7503306865692139,-5.8078159112483263,8.0380124505609274,-5.1246022526174784,-9.1900215856730938,3.3072159253060818,4.378160759806633,3.7480025924742222,-7.3203206900507212,7.3701832816004753,-9.3294501956552267,-0.06943313404917717,-6.9626062456518412,-0.52314690314233303,7.4700730480253696,9.517854880541563,6.5871300082653761,9.8941787239164114,-8.5380314383655787,1.3056268263608217,3.6701591219753027,4.3644700199365616,-6.3522625062614679,-2.475914191454649,7.3102430999279022,3.2559159584343433,2.1796171460300684,-7.174531351774931,-2.3484071716666222,-9.6792743168771267,0.43655875138938427,-2.7569837216287851,3.3746472653001547,-2.3033074289560318,8.3121017646044493,1.494501018896699,-1.9212854467332363,8.9555599726736546,-3.9033909235149622,-4.2912038043141365,-2.2622944321483374,-2.3824605625122786,-2.0146145299077034,0.37365833297371864,0.0756834726780653,-7.9877958446741104,9.1152543015778065,0.07919621653854847,-8.9491097535938025,-7.6876204274594784,-5.8365062158554792,5.8400626946240664,-6.0661674849689007,5.9231109078973532,9.7251536417752504,-9.3425883073359728,-0.88167625479400158,1.667257035151124,1.5890810918062925,7.6860006805509329,-1.3864235673099756,-1.6208283696323633,-1.2623428367078304,3.8040118291974068,-5.9730786457657814,-9.5327678695321083,2.7704204246401787,2.4561768677085638,0.96471305936574936,-6.067525427788496,3.1001659296452999,4.4888820685446262,4.6410394180566072,1.9496138580143452,7.1602051611989737,1.5682785678654909,-1.9420193508267403,0.48083371482789516,1.372327134013176,4.7022303566336632,-9.6142809931188822,-7.2206483315676451,2.5635130889713764,4.9645846616476774,-0.22547457367181778,-9.5510832034051418,-5.055396119132638,-6.0425355657935143,3.1047766748815775,1.9816772919148207,6.0503389779478312,8.0473279766738415,-8.5585547983646393,-3.6304848361760378,2.4414082337170839,-7.2517185471951962,0.36639879457652569,-1.9353784248232841,-7.9051228892058134,-1.4003824908286333,3.7715439405292273,8.3391162473708391,-4.4730869121849537,0.82831015810370445,1.4089119900017977,-0.41609475389122963,6.6955463495105505,-7.9523731116205454,4.4651290122419596,5.4234219528734684,-8.5471173468977213,8.5987620521336794,-0.6060442328453064,-5.7853479124605656,5.6576682534068823,8.4304575435817242,-9.299920778721571,-3.768522497266531,2.4424372054636478,-9.9577903933823109,-0.58314125053584576,-0.85492406040430069,-8.7086116429418325,-5.6358728185296059,-2.1144268754869699,2.8275653999298811,2.8917770087718964,2.0962873194366693,-7.6989275589585304,4.1245345864444971,1.052904911339283,-3.8270686194300652,-1.5422384534031153,-0.40162015706300735,9.9700953532010317,7.3927575349807739,-9.9239734560251236,7.7781251724809408,6.9499130174517632,7.1882169600576162,-7.6374177914112806,-2.0808017626404762,7.964837271720171,5.0201663933694363,-6.0633090883493423,-6.0358170792460442,-3.9776198659092188,8.1429607886821032,-1.2578826304525137,-1.2333016004413366,-8.0999300070106983,4.4763870351016521,-5.3629877511411905,4.2649028543382883,0.2223845012485981,-2.3836075142025948,-1.2914315983653069,-5.090805571526289,-1.1692022252827883,9.2182687763124704,-8.5565261077135801,-9.5342810451984406,-2.6615230087190866,7.7828498836606741,6.358133852481842,1.15578668192029,5.3068503364920616,-7.7662747818976641,-7.7802418731153011,-2.5251440797001123,-0.096489023417234421,-1.6909390687942505,0.38713579997420311,6.5914714522659779,2.8608280792832375,1.9376291614025831,5.7334091141819954,1.4071051869541407,9.2169664055109024,9.5545278117060661,2.9490843787789345,5.2612554747611284,5.9208837430924177,-7.7068052440881729,-8.2757194433361292,9.9833293352276087,9.8162935581058264,2.4459861684590578,9.689630689099431,-6.3768542092293501,4.2113338317722082,-0.11217818595468998,-5.3786939568817616,0.29070285148918629,5.8429055102169514,1.7130342032760382,-9.0340538695454597,4.656622102484107,3.8477911520749331,9.8260012920945883,5.6038713920861483,4.2666089069098234,8.8960100803524256,-4.7584316320717335,5.0396007858216763,0.57052500545978546,8.8138494826853275,-5.6315972656011581,9.7447912208735943,0.70620374754071236,9.1664686985313892,0.83956621587276459,-9.4105249922722578,-2.6935405097901821,9.6647091303020716,-5.2334931120276451,0.68130345083773136,-9.3328181747347116,3.3249424491077662,2.3078464344143867,7.9751195199787617,-2.1660870406776667,-5.424831360578537,4.8593585565686226,-8.7606234569102526,0.20156940445303917,7.7770604752004147,9.0555458143353462,-3.4413493331521749],"expected":[84.544963967055082,112.07656698900159,-17.586067063232143,30.958146975844613,-60.632538882281054,88.156054139456842,-19.083688620631374,61.398478543996703,195.32569594434003,19.183868216160811,75.805159713912403,-189.27647129148599,-34.5925623336705,9.1646681460046544,-22.137149469018226,-197.64207904242204,267.03618327235301,-199.1638347667066,-30.781825902411555,-5.9575092986035649,-14.436700390670318,31.147797070590215,-252.29374931287282,109.93574337821826,0.50530023688978787,-25.601187615928886,-8.9006807383132838,-144.77724478894481,-15.147854849033244,-30.871781534491458,-55.798633755983829,-59.642905324065062,62.599472027926637,63.663405713844689,119.69528256705927,-196.03940763786289,-156.88929065499195,-170.15681500341057,-9.3483301769262237,-0.54856497357176437,102.93297541309389,-171.97426490689989,110.31956396966733,-213.72126748063465,-2.8641217164166548,47.754830114930471,-35.061120357742652,240.82127965736183,-171.70640613097316,267.70463813242503,-46.907218903577544,161.71812121986278,-16.522106104757206,-102.36494270546807,-71.757463220154307,-35.482686800915317,-87.77696980531465,-27.917147515677932,58.870546138123117,-10.391770687502547,-231.90797905417733,91.721272900373719,15.374959703313735,-63.706278590453095,-134.19534573191589,-126.63917884981988,178.64112203750662,-120.48822436410445,88.785059973411421,10.359546507147414,5.6386216673619609,-114.26518205013051,-1.1359838760320713,-216.15540192060482,-35.601744642602362,-22.259415578718507,68.321346103616307,63.875730028421053,-270.37262519979197,172.5647080736573,-62.148183294084362,44.48797555238977,-158.08889194367089,-38.713381610933524,-75.981518166960257,-85.289408117215203,-86.783381977168503,-518.140260222488,321.02030087218196,79.690578248928432,32.556822095420159,-43.431361834041496,3.7784465023430727,88.984005927932927,50.812678645118588,-3.6497136888362149,81.056451808834709,-90.582689808674132,153.36722268373177,161.19383287745222,-175.9946674458198,-163.25493099864553,21.78988911034984,15.602067892795514,204.88221112162384,-8.1264003208673188,-63.160241155280183,44.221829509918848,47.602738671530958,-91.715286959852421,-57.713132162292617,278.63049396672017,-17.344040502801413,-143.64668855464726,-53.510733286646591,-21.276937922670221,-35.308973394540672,-114.28941278125514,-178.10296565278605,71.581395394970087,-69.086452130570677,41.419900329093196,76.545114538898673,83.851739923919411,104.57403794053302,86.797920763028145,152.83674268008014,155.88552700821219,77.993009246726217,-36.55157658647633,227.86346544729815,25.999823111119824,231.58804764184708,-355.61609435958758,107.08509418890718,47.529833502958716,150.01617986378056,327.75558801148566,118.48346873563185,16.10789819940161,28.55067181839371,115.46408432363336,120.58442303862883,1.5880267290899539,30.261086538290854,33.879650582567265,282.13760280688524,-115.4980322057793,72.081985385920476,-69.954700530722391,-89.576437768793184,150.3188586523429,74.082355016380433,-59.899795934228649,-37.767463503067759,95.290543107812226,54.821965361291859,-144.03279450817013,156.02011997677758,26.446474565926422,-109.33838374464777,-114.27784506157305,89.702468395976936,78.623603607821764,-68.168332579963945,129.85677620623346,9.9133814998262864,67.980139283314983,-169.09833181775633,22.286671131987347,-40.761822391662918,54.048054267627968,-12.299478932122568,-232.01066410592566,-38.793061556779136,49.51499204079132,173.86789104915778,59.357777768948061,-0.73253658183564596,-111.27737079307835,76.167552319491293,-129.18891816143935,225.80851582227805,-63.141571891113045,-163.43546425285979,-81.942151978581961,-99.929824164533329,-67.989948380327689,30.669660998475297,121.6805801005266,-75.609370276391587,-37.156893702345492,75.228469971134729,-91.030521282958503,-59.642564971297787,241.72636480887189,183.43434554558988,74.506362674227319,154.57209305299205,33.618916915835705,155.31785477148242,-50.717039140918288,-5.2821473727313872,272.08062372761486,-147.68198660202299,159.47145953704145,25.645482512176049,170.88043426656344,-120.74944784806344,177.77465942495451,-6.5766747844097715,-30.771996292375718,171.20326484703727,59.459587303594304,125.61699105410712,49.268103686541053,-207.55837045562885,184.26882209592773,-50.67667439773254,-37.666698660695985,-136.68763348657126,-77.192251869228258,87.622498987439599,-169.02133722874146,135.92596164268855,56.898748146853706,-219.1493097032226,144.8168542054612,164.67333221195091,213.57030277786706,-38.379673634928935,28.298727635398439,21.962357202681808,30.299177504360735,-36.092310773478502,-113.69587689426834,-44.135859440225516,49.926620603656332,-113.49583450041861,-109.23718231836051,-103.01844796042104,13.183725879665687,65.564568456979742,42.037522701297448,-196.03487484185789,48.020141579529245,65.79308807478111,51.229412193587052,-116.30426673810521,61.135926891709865,124.15407408656748,-1.9170445287696971,-49.929271302658378,66.163715585537602,120.024624104241,-114.88519108679381,-80.345676813813682,-44.883770144388336,66.103694259504863,-65.249375542535802,33.447560244346604,-14.300454199485252,-108.62806623390107,184.37314019833909,-108.39495268494913,-276.87631500147393,331.82746227435393,-124.38477780909841,-118.24036873800779,51.681936624188452,-86.45157778353385,214.10198999157217,63.263000830067753,65.914879775350215,-123.58744066160327,-118.77546354256557,-118.46105116509645,18.978877059435476,209.78640558010829,12.950352195283244,-114.21763422237217,-69.945206776748961,-256.97028737312075,-240.48799349942351,36.29606175377674,27.762258513830673,386.78794816603147,-130.85379642198839,35.439258021319276,-16.220802284587492,-169.25174103375133,-49.030636162561201,-166.42981614950941,170.56150458483768,-211.50101264781563,61.143101063696385,-21.758895043403641,-30.938093745601542,-93.180046528855073,-85.657666327733864,-4.074116258353186,112.39662313432032,120.10966036936938,-168.03212055333765,-288.11505501241851,21.334246539726024,-79.591024300837503,22.780415742235938,-141.83503678590247,66.535995762321363,-179.1360469197985,-98.493837375804048,34.451498849461046,17.375995730160209,-26.117568659176143,170.45579659913477,-220.45517714470401,-92.44086584257505,-28.802043824243569,40.691709023644322,38.702492355488488,-205.87987555285611,60.698601047770218,-112.41922927118208,176.71062834442506,36.335054208323932,25.576369647096868,118.07531063093003,-77.977051500187969,-169.85261454956557,-243.53862760495622,-17.164567175052795,19.807484186841549,-2.3899432621828218,106.01807790937737,37.982547045211845,152.22650301863078,107.42898842897033,60.640842909354923,-18.674447532596233,-108.48811571848512,-37.86901775116435,-133.92429906775732,-145.82530089135713,-56.255921623791835,-17.631433202758451,-35.263077482586851,-42.509110810381877,184.33060041958956,-84.528585573776709,-32.722290935993129,1.8409553909288654,-83.935473775382036,-28.594862222344997,380.84954817981645,-117.11121093330129,-148.952468715511,69.969059054698846,-104.93122672841957,50.499744721194944,-12.028010494044224,-4.115762442880623,115.77835115752995,-28.641348564518822,-41.551253918796213,-27.374096445126945,-33.698386664806073,-87.206693556446965,54.267234998316525,199.49861830248733,6.7327975186946389,49.553512404975315,-105.32395158987821,94.798697805113349,10.398170055020181,-164.6510813666313,27.288125595287095,94.538551255847139,170.4608676797892,-51.718639000862154,72.422732243953661,49.976233971928046,-20.089873724194284,215.8004369391486,81.451051961358772,-151.0067254566161,-10.394178059880204,-4.3538087783215076,-190.91110757316352,-103.16800244664988,-40.901295354926525,-54.512188675403543,-190.11713391640237,-12.614893759833972,296.01025756087699,32.064536654355607,-128.22303302783618,-136.98543536948046,-143.86293351724731,65.325682193850071,-24.787793599092687,-47.63678179206012,12.481377770601895,-67.005444582447467,19.737670098925989,119.56518218425779,7.3700173251449002,111.07642206059755,103.59798013913921,313.43445088707585,-81.856101518675615,5.3002861755502835,-110.8992084244635,177.59821141024685,115.87422813771906,-18.108080795329276,-142.55629108244864,-51.919392327459356,-28.681284064763751,-85.686240482743472,94.379293784569199,49.391078202609705,-21.649118287166569,55.87250232259322,-76.837904979046044,-123.93347711664653,-62.301590379492851,-109.32527387499721,-230.58148359391174,-134.76084531785071,-28.449026610713517,146.14368529359564,171.52807675951902,-250.16857636011247,-226.64169213135571,36.330153079310321,27.45054238145352,203.06359361789328,-69.981863049746494,-74.092944360899764,102.46990001910353,22.502719054515932,-61.106036824096904,69.407039306633536,110.29048225532875,-149.64535042396625,38.336948751982071,64.012399728905606,194.92388403120876,119.43131006609569,228.09914694149472,-98.916084422253192,-70.930266808484973,-21.108718377465458,101.49682143282035,-81.214437189166333,85.183557658241938,-47.117847867676048,-46.288169194729697,57.381101458681236,-30.629521905857601,-107.6615825313236,59.791279056972733,-2.3053015865250934,33.678495513343393,68.439642209770113,-213.15521958714564,-55.232722420149642,-69.064020640179535,-117.19696529768569,27.290301532760978,-152.02306197427771,-287.29048287653097,79.119595346805241,-2.9352417360708927,13.772086477726809,-5.7388700806001935,-30.739063915224957,-29.833191179119002,-180.66375668444414,115.03154789485201,142.63446853042464,-20.45007362992131,-77.74071568184074,57.560554039976786,-9.7951405379642367,-203.5527904814395,11.749820074318123,168.68810286107029,-115.95084240325423,-247.59970024426596,-6.8922455566820915,161.52189399496658,277.39808838856993,135.92926333953949,-78.402278081133147,-267.47253572678653,34.993009855965127,141.90421558264137,193.72446762943878,-51.266500778633947,-19.738109997595785,286.52264123666532,-32.183031111860672,-99.626372583599078,42.140448811989117,54.49562943898033,82.478858512871923,-215.39583409481853,-82.996354757711686,-207.54717656835911,-72.758335867016342,76.909239991829025,-27.071384467536618,207.9655587356329,157.10618769416652,-48.949867318894391,-174.53786126654245,-8.5484230136617541,-79.899936280975837,-18.175344030663787,220.9888366554855,99.849909431251021,48.058547910749823,-83.243742330453713,95.614841276147118,-207.8341552467466,-17.038623590493472,-71.336751685365201,130.92803818159189,-2.0184158575263567,66.272701476592403,-250.09907016939187,54.773717093920936,35.791656102031652,52.026833625550537,-0.83177072891417225,-6.1228042766706174,-29.587077307775814,-66.839526897797157,195.91242939991713,-84.724068834206932,-184.30459506008464,20.364909270382494,179.60968797931611,55.282040568220047,-39.507625941095213,173.13991745711749,-58.191181167593712,48.379440589024391,-126.77626883315449,-136.71675162804513,78.696054318421417,-207.36717114483773,26.021314106030331,251.62660962173968,13.985428627748952,-122.64904460673739,87.909567254967513,88.113736321860443,74.43325435974397,-159.56394201141805,56.655114805189456,-133.30941105784348,92.928364671945516,-15.828940880599397,-29.674614617593292,-110.84532227678035,5.2365293397856902,-86.388850159607841,-76.477346688653952,-28.164378297515285,36.28338921205625,-141.5854458344453,-181.22088766591244,-38.596249156376025,-43.160403251558861,161.20700372416786,-143.20005723526265,7.2954991961177615,-3.8665639808351955,-145.38588175521519,-24.055583490365116,195.31807922406253,-72.435816136883233,-3.9885277681545972,236.74914299883119,-11.719085286301706,49.884568338810176,-52.283395179269974,-206.02750708102164,16.559576759484145,-143.72144992584202,-177.47333620440085,41.074266637809799,49.589700269332589,-83.656112449993188,201.86635176846249,35.302516815489511,126.78637715314582,-30.769986017371444,118.19643161331439,93.586826553151226,94.506376451975854,-91.542546672917311,60.17720498989398,-129.87286866560152,31.734931388286093,37.223634504669086,-67.558426402903052,-110.61047482379396,0.52277402296740405,-292.05479693209071,32.857375442320105,-82.601872875769885,-107.84378889872134,29.341092270419267,-68.002643502101449,195.74161784089614,-101.46763517788666,62.853859097939377,185.09674022709373,72.920951304425245,-11.401716463387068,-193.91539462823465,-23.972788827465255,1.4208776608858429,-209.12712084810696,-95.962679969986596,152.76526318190935,-102.35754834753229,-257.57336081323604,4.2345364901770779,30.137475508877671,-69.203478249033637,30.700851124691436,-48.192158780289219,-173.32302991397131,-15.657897326724068,-145.50601915561029,-40.832882875301379,-29.218051489463704,-140.45735947118203,-21.864290244339941,-14.481613594225294,-159.51130589177214,-147.09932682624387,29.104218529123912,-40.639854360665865,-24.82354380890726,-45.010254726051031,-5.9600307193519768,-76.958183413548625,-125.57224270359421,85.465497570121045,-55.254317818028412,-48.782662736276151,-52.290748626698651,24.739203021585141,-255.24531611591755,-109.57835307137488,-66.479585134266458,-47.025653564745738,-13.47319970575559,-87.916248608626688,109.8582708490172,-85.713149454276248,-168.46874412953292,-5.947001917786082,-2.3172558593712367,45.646747701532263,224.12462956763395,-145.85614055803433,66.550748386733659,50.894613670667702,26.772023107942175,122.96923080077786,-31.1076739537111,-82.064289416676544,39.19723682295345,173.57642691771377,-12.946160827785043,-41.095001541277341,-39.026667607764892,97.974139189071749,164.29794299912064,114.25450820280184,93.458247934668975,152.68148060031479,89.246470927697814,48.703122164471893,-109.93266951141207,-27.044645966031709,-7.7328016357706133,12.554242402365688,96.366880133113298,38.553861737883679,165.46127884239056,85.501619649706967,45.413600729156101,-74.311739128480383,18.898185875322021,-168.86913640343033,145.13258554759142,-175.0698759487322,291.46047528484365,47.449681093867376,-3.1462473564101501,-11.805852010197398,-11.623582173114627,-78.899427269668237,-56.457737138486934,-69.365532000581936,44.188187654422656,284.46274604956875,-69.595558736219203,-161.65317492812306,-50.160571216321991,167.31117104737331,85.388146990542367,-53.354353689544688,-17.868739766604399,70.543488856906393,-170.44471290175207,-44.556419688545404,115.9562096722846,21.662088371913015,-69.065079670807776,-16.433486883980734,-37.764065414075198,-172.25787581878816,-45.68705941636815,161.74171397307612,-144.25468144449712,15.291791154703034,211.79676607480258,-324.06527020086003,-96.638774857213321,24.511958207458388,203.02269979784938,-169.66057656728788,0.60143007709700136,-19.116968842919611,185.38527217200266,-61.186623983843099,-9.0643337049633033,-61.610444115620673,-82.194501719009423,19.117675490657895,27.851877574662581,-6.8959631306237164,11.372753129445925,-156.66946302657541,6.9463310628688681,-151.34981376196768,136.35511237706731,-76.873881410000223,-88.502403099468808,43.615815050284979,-80.498697882680574,-24.285924905413026,-21.959814987234715,-49.927611437074518,41.492845037285988,-89.961841967100526,92.87754752915879,-27.569195881124529,146.25326318387226,53.400042309964391,-110.54152274700866,29.714151302022344,15.299846735599431,-74.360599644436391,-177.65922079904834,-134.68438752500518,-137.14358002747656,-79.311726137781818,123.82139091220154,21.639842149171884,-28.565858529743316,-57.789607449606152,18.670462680361911,-196.16639215251149,93.048943983271357,103.88406839036654,94.797655169070964,118.26877073891453,-49.354914782802169,-0.40296368136752303,107.31199332412071,55.296483060009251,-96.639289223475302,-20.612420381110155,19.192404832975711,152.22564420633995,-25.216207188276826,-144.92072002923089,-63.725213548268442,-70.62850554052946,-150.81467912071946,-53.701118146160738,6.6878376298763982,174.10524901985605,-204.7493190790463,43.205358201960877,65.443227276435678,68.524504066023354,51.823591969053325,-111.53608788632944,79.527281910642358,-114.28160517643413,123.94089239632227,-15.49595894499333,-125.23726342775677,66.922382646687055,44.040904561495864,16.302244041257254,-104.58490704578227,120.13064259983051,-80.927019886968708,41.248855282235716,-17.083006523098788,-198.5147549024756,79.103120431232483,124.63046268581154,120.0331497796206,152.86692794227679,69.608037601579312,147.00908299457097,46.297325170654759,52.358320221677367,-86.096511578440214,76.828777825550503,-153.34001252918432,-61.338339240648956,142.08176226834473,-19.666181456061679,41.747417454001663,136.74325286912025,194.9251474765415,210.94068351567572,30.279408538251701,86.071885395215418,-41.04424511578641,198.39702394112678,-42.35296609615105,-71.230757607126165,87.286116428661131,-150.32149027692856,-2.2879998039780141,-202.97669784122397,46.471238636550254,2.3792845802787603,-98.173338774037887,-223.19611001697587,-191.94370990081603,140.86605910642842,-42.176507133990526,23.986865049228072,-95.406265025002995,-13.280127076979674,142.21885630568318,-50.324461469924387,37.74292706403179,-116.81894720933091,22.565407303094194,146.01343292001559,-151.17788978055734,79.967508108788934,71.228582156523061,-62.604655194033818,25.162347347957795,-137.01619467404183,78.52406523656505,-62.989228279368717,97.409739399038386,7.9262582576503746,-16.606752261296862,-113.62324061839891,-44.969824859620353,-61.409049949980101,20.120780341103085,17.572290740838554,74.258231104441606,-150.78673764899426,-70.286479671085644,-68.794293654748657,245.90653469816107,5.8478816204660014,179.24424249968803,3.1256811958041268,87.032655794260947,0.36748628413553242,-108.84621798068849,-33.409849983929156,49.30409596939095,32.975792429449356,-141.29942573689087,-91.24065696987833,-27.186691191410777,66.734787230711291,246.35311452841788,40.815824303319062,-23.600265481695139,36.017670351923897,62.199077423431859,148.45797053235452,156.57373479455467,47.611155822218734,51.151554601081735,27.470914125872703,-1.6995517086950755,56.994306736831412,129.52178802889875,-28.576649404110171,122.60671647839065,-98.130515633451637,-181.45709283233691,1.3364103815640362,-13.247403760423076,1.347422663260744,12.03519246840651,12.824551073669543,-43.663917497543331,-91.412090507059503,-131.11924147952618,80.100935741703367,112.06221177454898,64.861927492629462,39.846484176623264,-70.747150940185506,58.422615117675626,-7.3484100770513265,-72.27569631447605,39.495936670591135,-78.72419507876441,23.368508856826914,30.807409707864963,58.500776028894961,63.682901889082721,17.859377778194084,10.04130398918177,-78.147911797487609,80.08982229184096,93.858875364787053,-189.38673311529965,41.944217066791069,-9.2332095568035584,1.1675031657574806,-100.2828734312109,-147.71453176617803,-168.62724966245517,-40.319753452221121,-75.986897941971179,-64.873225979054126,-106.53888760787709,-97.463087203466188,11.437395024639763,47.358240458313553,-119.71596230970634,-179.90636370698911,36.373804763185326,135.12904183341951,36.255178594364565,56.496394777883644,45.053841900421986,74.101752301439006,107.32279782537931,-102.62283612757055,107.69188438834226,-26.260947447775695,-2.8329868397357245,-105.31674217491889,111.7412643265516,31.709562774299833,82.169213044174782,-113.63154229747278,63.88037463787834,112.1627833059775,-148.62286966218548,141.65720148761005,3.1337409084130599,-1.8413736182283031,12.747857207166714,80.192384647722434,50.599573876888826,-52.21093762567083,144.2785188438026,83.393760909952192,60.850643495061938,-89.022845922826576,126.25142119717799,-22.179125066994008,-60.995323214672453,40.252035416168937,4.55349716924718,-43.170684377501189,82.835374116705722,-90.080349803467129,-14.496599226568982,56.903426787230337,134.0038823825314,39.242802202491639,156.24063738191575,-91.037853525762529,-165.50231392912121,-36.10176701510575,-37.243633040349295,35.478598065002132,-1.7009036338422696,-25.447446422513814,-19.506815468469561,-7.3148425291479668,56.502519817549747,-151.87764585093214,-70.558145095948831,40.975393998097566,-183.78296844429673,-31.038026576228354,1.0765656574583815,-80.852055433477403,70.935330977476653,-91.451354492243411,143.57273553127774,45.936860416637906,-42.859612177968906,-18.823610282927323,-103.96681721604675,-49.513873464952184,-85.416456059527292,120.21980957175199,93.747399372460563,-39.574267965635649,3.9328091179473894,65.097313247086134,18.7157481399746,-140.91808720130103,-17.242427804004084,-69.627895894769594,-17.113753683026403,-10.239346084005035,55.265055377567847,28.741239968111167,-59.768618224012201,131.33386043918529,29.413107238112659,99.564734431752996,26.277606245903428,-78.843030126020409,-48.167291481501444,62.949295982986591,-59.933730041914266,152.97109031128048,16.502016031223555,-60.797554186854718,47.553028561091246,-19.473760240021907,125.99631139942164,-15.213025642668129,173.8644586387137,11.832484635768072,-183.51032791620685,-11.123509786337294,40.147745537404582,-24.042780279247111,-30.187230825495256,-13.400365609809203,-183.89805136048361,-35.074587506085599,5.9287089214523654,19.104262858138618,-165.88582767691298,134.45015144485245,102.14283941026086,25.142319325951661,173.86961995904409,50.803079938022947,-27.34413003206987,15.252253002899145,60.550906652958858,-17.971981452661243,0.16444872518423637,7.1529897226335235,-58.11363589412737,-29.248248589888263,-155.00649563525249,45.311160220307464,222.57624399510112,14.707037724513881,19.289430398494005,-57.456858428195119,36.037885126676798,-70.688784093124653,-109.45248798814404,-92.82833658272591,61.250923493966056,-223.86035206516345,-83.161988103357089,-9.4908948872100005,-32.984405612535198,52.546316291691213,-179.39911434624639,-21.949785413715709,-177.19902082134502,175.68351416084579,-16.436592768898251,125.1365623210674,38.553301109728906,47.91220622394745,-36.617699067038799,59.955789720305425,-144.14152154193167,35.387901577501005,3.9511777346453396,22.483625168036109,-133.27859015445821,139.18317122165297,27.632819907483778,7.1180444473775708,-46.291722791669812,1.3673705459948851,1.7220437275536753,207.06253085820725,43.026762303802066,-7.9631159192723651,63.616641304812084,-146.63905806746348,1.6015162437427364,8.1842820242608241,-91.002440534794772,-38.769721283919118,-35.353080693637381,-37.889292737861162,73.8904886006314,92.817066570929157,52.247412650265787,-108.3859638139101,226.07605799250993,-21.576607799298479,-110.98966956948018,-148.42609808443478,23.58129305935255,224.7472562492672,-1.7689140721476129,56.543395658216795,-33.8665685925112,-26.290624976008502,-55.041745137808903,-120.45418833727177,114.8572767426335,-31.431302869367904,-72.593525041212118,-56.10970811070743,42.175854322933482,-46.673878181405513,-35.364046271749409,43.548198623219797,14.126400789968709,111.86388002093122,-59.88701375982064,-161.60245045568379,156.30195655999268,76.709168756562235,-9.6603114021168182,58.754581242297768,145.30711029585976,83.570104635939799,120.83632091442996,11.847486765673366,-17.705869480752671,-20.61142220366424,-44.111672557473213,80.062573170791055,2.6030621155341294,-70.450431761397795,-6.4013714238490138,54.915950434528952,-73.913086632920937,-42.895939102700432,73.924528815037462,-69.379051357388875,-63.681744258118684,-14.791835014438014,186.31405358421335,-52.476535763039763,17.401034810504513,172.78524675804897,11.711775455621144,26.655762988926032,-5.4079609373682658,-2.4920640996388173,-94.412741608686261,-102.61555910213238,-12.705276903266618,-55.81283258567067,-75.740419983333794,17.097860827784253,-65.948130620060098,-227.21795743415794,-72.508557534093455,-169.88391560510792,-44.874154567999646,127.70598104092157,-55.272346110090851,-14.758061946352996,85.938837477883652,37.265163559018823,-143.60425134474337,-28.457506191797506,112.77614168995467,-28.805822733351501,75.182199656251342,3.7623050043413713,-136.03562860268244,230.54071977645046,-5.120398591600587,-29.494288062997661,-7.4972571873718774,4.658683880149141,-38.100443723751326,-47.052879258224209,-53.513770444372248,20.819799030849929,-14.611848137092402,63.18372877161746,-52.841439398276989,19.660029145916535,55.292664328229769,48.480541041224015,-53.17179487903951,-60.407506204010467,153.02503783206666,86.362951711595258,12.597417491711255,64.38447670711902,-9.3136893533926468,-69.236235303541662,-167.18662870482154,-60.417056238576627,-45.618380593710235,-48.64222887067406,140.65531288348552,59.133896136456542,62.470933494392227,-103.26120991954963,-61.300970350486296,-181.50580245978139,-12.129454731675089,149.36685228464671,-18.671659819220022,-103.40155174384329,-90.108813485233981,-20.735667692140545,-0.44352955093368962,5.4609068062270438,-28.802320887164392,-24.990145542993261,38.910268351200841,55.889645523689595,46.845917456283424,185.24353374960739,41.183428559474748,9.0892344788569375,100.02540204377264,-106.47776424059475,103.87506947839478,101.22290829542591,-72.198985638034912,-67.674441793282654,-43.112985751239101,71.568622640292119,-30.400939957789127,105.49518949293886,-79.306742453293609,-16.021678370133316,-44.600244205563435,-102.16689459287093,175.46272732679464,-17.234202560244825,-3.42523853078605,173.11680282469308,180.99368742228583,100.4878981877024,69.035725522657742,-15.435480225191917,173.88521108466489,17.719231850652143,-93.457223711264035,-4.5464718968166888,72.267610000380273,64.171478624915324,-182.4800170679481,29.694014608677275,-99.393877738879368,-1.5626158368525793,174.18172727876163,152.29941716807909,-69.890252749062768,58.868573559307038,-71.976270910046907,-139.65408463241414,-141.84365864345713,-52.974848102965638,8.6285746474439406,-142.50911133443884,-33.420689160567193,-0.73195003224453359,-48.407734606232069,25.759509524537073,-77.852022544282875,44.597170539630405,-102.92076315922002,30.175269661807455,-5.4397168673269114,-30.17066033833774,-24.685838764475577,-53.534257162573297,-57.089480647150069,142.88025527781082,-111.07871126145511,-99.52677974032909,101.13497790880501,-16.177984373643994,223.98500401310815,111.74935361481815,-30.75773724181397,109.66945562013481,-86.775505774636059,-102.88801353512321,10.516042107686076,-170.64217057434487,164.7078322732574,40.873295280319439,-10.547494071420083,-20.388579317889125,147.73222093437232,60.797461685890234,-16.574938809698828,-48.226210045874083,-86.240542558234011,-38.963193398367963,86.000037947737525,60.617675776886287,-24.868606406804233,12.398030008840159,131.60421453736183,-144.91587714015148,-4.2125461367247183,159.92186625714419,46.768833084441994,116.08375350234148,97.312347310959893,5.6634402185346673,3.5103710102598278,21.777814241260707,-26.265855552461129,6.5200045930582107,130.30312605475291,66.929306504337575,58.408527861227419,-50.81942781808965,-111.85751713506234,-137.57848073291757,-14.146270384016148,-44.743963809542862,84.010868014432802,78.054150044608676,-52.779339813740478,-144.96872710950279,-66.66201226972629,-88.875420964253379,121.1741596769028,-95.007081246006592,-176.99504124080937,124.13407626135564,140.97301209250648,95.073223495031087,44.931154315266241,192.93890570919297,120.36427605961207,-49.121422854166696,-72.582163210377104,-2.5654094693792331,-0.74151202474136468,-42.132528398631138,-110.50627886121728,-8.3497270989419299,-2.6181877748958513,-91.546752399340193,-19.940072645692148,28.373021868552648,-143.50294710760485,62.210562603824229,-38.403911088368972,-94.869802009862582,-66.419259771065441,11.770865214450303,61.547112309441346,48.50349240896054,-92.236187666078706,-139.18442193063046,166.64097617238963,77.477741634678068,105.99102315789762,114.49887026718694,-101.83954915295432,22.257769669257115,77.537029095958829,-103.88559040885806,58.02237641404939,-32.654350119528402,51.962612857797822,144.61465371696096,-125.57406151140682,-61.432093056706293,130.37219451828966,-3.4591051790791809,45.560821620463983,137.37658372114512,71.140197042839759,-31.322076018233862,169.70637210920952,10.174688310667591,-100.19217379662382,-2.5897480229457557,96.164951707020251,-124.28649028560116,-63.267170800954396,29.516941361839706,127.81852416045075,207.75127419159347,-85.147572654548526,-46.354096930066333,-69.775319468812,94.407422337355115,-3.8949656002392032,-11.008004183711666,-154.43686427563645,17.44118100291189,-12.54490758752857,-215.05675670631143,-174.6894428226552,-63.723128607161982,-49.385823047378238,-154.0879734692825,107.50271869911708,164.42933341566058,-64.351801276967961,20.70947139677741,150.90816685015145,-52.651867994613909,11.268355878610592,85.238227367646516,-141.17218641067211,12.527333427093048,-103.94050539681727,23.924348972768016,185.57489496700512,-81.605385522140239,7.1126918149232523,-5.2048399334284881,83.180306104775596,-112.45829114605689,-4.2565435963240006,-154.91892769110297,28.577565672913579,118.7599226786231,-91.098672050250755,-13.0172785135981,-11.79369150661779,-46.602093772027217,-74.815551447231655,-69.484739904848482,41.674587225051368,-112.63134038547585,-34.163683521576388,-90.395812049724412,14.624867622703007,-71.672688129440417,42.146357369143416,68.450702975057652,-5.6884316809332063,204.24913230279441,52.332102913868496,-11.228804364442531,-56.232968682521616,-167.26416966356197,-63.356028729685391,73.345838099081618,-28.62444310804301,23.566369323222546,-206.16132856225812,-248.06794861225325,-1.4291434771801406,42.656940788928452,-16.074627227093458,-52.020306630337174,6.3814002433506936,33.638234303404268,-72.040714011912087,88.26577812010845,46.772086357658971,-42.671090072992122,13.601574599534466,135.28211039384701,131.10229040230985,-82.066917296942108,-33.039328008318719,97.783836138490827,-120.68979181829317,67.704936438993499,22.363423925676045,-181.53335926494816,-55.684999526888511,-108.60326489793717,41.190698682672561,-35.243123826728045,60.168978282001028,28.833900049095533,155.05389878482677,-89.703988889050251,99.921427757881602,76.586906818865145,39.46079437011042,-49.597179542168831,-139.28063323121057,15.326181147181046,1.6260019986003265,-67.904930974873565,47.5305976695373,-46.34931660915548,-160.00298989362091,-103.29974371912866,66.939647547568484,-155.13446195143777,-74.337682109515711,33.115907928868808,-69.732069488948227,-209.98958568845296,48.582827958939944,-53.18082838623684,151.58054081578467,124.09284836516036,72.210398779095485,112.57376544500971,-13.508748445800379,131.95839295269872,-31.281852288916014,15.609666052391823,145.08111413062312,-2.9901121884646873,-45.000856867685755,-52.14917084255309,-39.495343833838554,306.71420704813568,-95.340852177248479,159.57298277637557,26.332805000124299,-91.02321997008309,-50.921140200049976,-53.485654243397065,68.874037975280942,91.919891373713767,64.627656336116786,-34.783488132554567,87.028916394338012,-74.998520724475384,-37.948735156690347,44.620355264545736,-59.48266929881072,23.301811886368995,-124.19528205848617,62.416964133523877,63.616088996934764,-60.29663611189887,-10.052949929538194,-172.05095072392345,-96.700958517547747,-39.002978592251452,62.131885871156499,-179.37047106216892,-161.30181033063627,-22.326556584651208,26.940188834915922,-60.52640589838564,89.05504349238187,-39.159898294830512,93.707622353099751,52.299177173260944,-29.766367636973897,146.66909896618614,-154.13437037623817,-27.108846349840761,-105.08191386657741,127.84160188350683,83.338132630203418,-239.93519814035699,-72.421758949491107,-85.345753051343394,-7.7382700330913394,-35.011413315738366,15.171257379825114,-114.28613791427257,26.749390457066429,-46.172175066604865,19.914571835042935,-82.562026272052634,3.1133252213448053,-52.702667889390128,-209.23258040908814,-93.862284320031108,31.018071267673754,50.076868224433341,61.805697472227486,-172.73083877503035,27.473832715484757,-6.3650750408726751,-30.053182262534683,181.06025920593186,-99.918619813307316,-62.7043200729902,-83.05932618368459,-230.88276222370837,8.1227586591013612,266.26652050816358,36.465242077947835,-70.44319073196985,-35.401927909863339,-29.145098382206129,-89.409661362423037,17.090962798180556,58.154242143461325,-60.243097815442638,-18.544307548095659,-42.631024747202694,192.99074441637401,-10.908605161313741,93.656435386479785,-47.395636173306826,46.963887021048876,65.559490960714129,155.00089618822653,-158.32630492448098,47.804306854896652,-47.256298699581244,144.74888031888742,-71.189037914674827,189.17581240379195,30.964767779348655,101.03650858144267,-38.802675834527278,64.359669575555529,60.529878854936243,-102.74433003397219,161.00291424796706,149.11262590776877,-175.98895174250677,-98.019856012688422,-23.687816323187633,-95.347434976603722,33.948256245921222,8.0279009881737409,-165.08767850590527,-21.073687697360739,-89.684453974921027,79.652284426684702,56.641449983476463,-43.063375162231488,-14.169438928969569,10.882183577389682,-15.783408345850155,43.244688070674414,-216.86729382683194,81.761204086171375,31.293316410223547,-119.57043445333737,116.08561109527865,26.771204166796061,-40.685477287536678,-73.256842134764852,-129.15978253224841,66.012014875681331,-52.819367817995058,-49.854449069195681,48.33935878356565,1.5207332100259592,-97.990644902909395,-68.87043921404225,22.252803734158164,-45.8750986215355,79.23260098602799,-164.59901596984085,-152.56338792814057,-126.21113579449012,-27.452448383363617,14.726878017545967,62.09579649972909,83.081800179601686,55.992789277010651,-12.96502897595898,-138.68471080055335,-150.3838652012883,-86.013424923544534,29.400945995449526,-23.728934276014606,-7.8533011462889846,5.0846843214067334,-35.398528538887255,68.586576922300608,-31.744458712143398,-116.59885910062789,66.19328540186504,-45.2631597278247,197.58368136057584,31.789883016687611,26.335095510786033,-99.117679080560123,111.59570110778046,52.88566569553609,-140.03469805039879,-181.59416047986986,-33.608746294278617,-45.195094425601368,41.700424455648289,-12.121330768257927,-50.437082914983066,165.58015314919658,77.066961775972942,155.9304364408743,23.620223638405136,126.09448997731997,197.08724595120799,-93.578540792155735,190.53331460283431,-149.79153394899626,-133.23895875357653,32.336171790504714,-50.962782759468013,-34.924758156499955,74.345422376845676,68.28971454797616,55.248573377173194,-56.305793422797002,42.83997229266712,13.64613984123546,-108.87774869901418,-24.473603452352972,21.105514031806205,-8.7713779226524942,-49.334616967408678,185.6801578822537,-65.559064461517224,98.602626963142086,-60.383398900651216,69.451605254898652,81.471209916290363,73.712713824705631,243.89216039999712,26.934191957521463,-52.068857432500749,50.802630499605627,117.92553087978479,-118.80434033846845,60.426335893783659,-10.462106066291454,103.3600057410123,-1.3318605288121574,-119.03738160234364,85.223325169601168,16.511409943870504,-4.9384966333554559,-140.07127004529158,84.627407373602296,-71.19420153730762,4.7919363481931043,71.05443050101718,-28.988234336519334,-38.01736740360775,-106.50753818488747,1.8702114317579586,46.998428836249154,-28.610459125546683,-70.121689609155979,-72.238935974591868,9.7823743078323986,-154.79463235289279,129.06103332233991,68.916612697711003,48.528977135186913,-19.763076870122369,-107.58130003667738,101.23071551960234,88.064797784783465,-12.339055271112425,-74.173317014918581,54.764010323056205,45.454436411397246,79.505278000519695,-61.947441220473692,-30.886627200498012,104.06332571209407,-113.148511393587,-59.646034864853895,7.2342666220412681,190.03832423132758,74.540050485641657,-116.68587145056819,32.751958806453374,-133.08679292529484,-35.401762994006276,12.568934541195631,-0.21411658706502279,-100.73465225852908,177.50836380523879,-4.9154904820255876,-45.288390616304333,97.919789093955956,-55.29543220092728,-6.6686853889954385,-44.928692604723594,-124.01833855914046,86.919445397230234,61.492377480967733,101.39539249010738,-28.494739325531263,3.3694844200278382,52.875062708043771,-76.670350712723319,15.367336699070645,99.62474104481808,-37.645934354969206,-3.4402239445595626,48.813212375880696,-55.022605479508123,-58.251345702234119,-51.787443812914375,-41.696350865931464,27.575885366999316,-86.588458909872131,49.580504213255693,-70.839089180683033,5.7540385228952715,-60.375298181899161,97.527000326345188,-176.78947680190606,49.489834240221981,-164.10856929766194,18.357206264337378,-3.280124355839213,59.847906645477075,-13.67126238555057,-121.55347112409009,41.480768413584201,13.067466247590474,50.626677987797379,-134.84586973146628,22.853311193146403,-32.79252441584854,-42.228680086658905,-55.279129879814072,123.97475107461766,70.145849107736169,-127.518017771074,36.837045810968128,-11.43438085913979,-24.713409827830205,39.088697354898756,46.702039583114008,43.034291427190801,-76.344268634339159,149.85486022490375,46.10449099475769,-116.31952951015899,-15.799677762603917,-52.390434185102045,42.142796264231237,-52.761713307933263,184.14921753810907,-32.449228198211699,-43.542062947603192,46.647167135983409,21.049746356099128,9.0508311238568808,-88.699482545007172,-116.67727838468281,101.73124604970513,-21.198205445308915,-16.616775253085727,17.644115328499861,-37.233032070886225,113.36633804995604,135.45463059123512,97.202248715620968,148.7458513927069,119.43455520873907,-48.959195988436974,72.17046668136544,47.434483824748419,141.35158752827709,93.373340416758438,134.91216530395042,109.93937744914399,63.533162864077497,-34.798853095158954,32.65027447804259,-16.743357788349151,-3.240205088089283,-145.52002939682708,-27.021904631892898,-46.017832137182552,64.818676926609484,63.227169316137086,-61.460939910919166,13.645452619117009,-9.2935555829674641,-25.753365921237034,52.278382267871436,135.7965885298085,87.154919473655895,-73.372512844052665,8.118849414384357,84.013535874681025,22.001249694388711,-14.462369839209423,-104.32840628566501,-26.016956584407311,32.759813062342339,41.073478427195482,95.770735508022113,55.508629565964384,145.86145946823399,-52.871154161019994,19.634115046621055,-192.30190240312373,-93.882005653225093,-38.057651214304094,0.20739462312679713,-18.15988544431616,-17.391813403812861,-67.687926033127312,-48.902674318720941,26.276372259754776,168.4384231364734,127.65086364383735,161.89885800013445,64.104317626160594,-78.958805387004134,-48.530293988892304,-9.580335450507274,15.532023988331467,32.92502554445273,68.240734766512077,65.878389321429538,140.32314185056006,-89.169294296028355,2.7605924281113658,112.14106907154189,44.865426961199844,-7.375642413306096,-45.237404272461845,54.826514116329562,58.352253044789478,-131.3755112110988,51.979408485642175,-64.860794490431999,-70.789227100928258,55.499923792158711,42.684353128172475,-79.23355140701058,19.149254775630354,-139.7951533630181,52.532620740111838,26.012722464757459,-16.829125589497266,-42.741323143769272,151.30741977766141,21.065349372552518,-187.20016638412775,-77.812909514942206,-48.346498832910633,-75.290305596953999,10.031106691709404,-61.424580143067487,-33.297780894830424,-64.51715083594101,-28.086155543975984,-46.266616960043734,126.01251848422609,80.525882087202561,27.26222651324241,-13.628231478046317,128.59944599353818,-92.287338654246128,-63.457164412626163,83.622557312864274,-1.3452699780464172,9.9525315500795841,66.818621708837597,23.713824121960865,185.04252885473747,-13.818994822093629,-52.592083784481218,87.66225329153481,-8.4186480444385836,-35.980231480617263,-38.217018170253375,-5.3317434173623539,-122.78137491320169,19.913772081432501,-16.965476163727015,-94.419470121629985,-44.714166373828171,39.700931810834646,-159.00526336302769,-27.793965574221087,-112.38248942744283,20.342446743283503,-92.089584278042395,36.329275760366492,102.11831154887199,139.98106756246648,-4.4166370190134945,-62.624200167036214,3.2110753106741186,-66.199222565588585,48.271807457047338,4.4155941499602278,-42.65750031998649,-1.5332338459827675,-20.981487826215371,53.468564240017734,-87.37302389510532,90.453509093106319,-40.151668973420811,-187.59032490176969,-158.01814118126475,63.127821600964985,41.207780647784006,29.676753697740679,-11.754924861250682,-80.544906619159903,-104.85102209120117,52.004628343933454,-109.1627351981993,15.033371591614671,-65.476720355522616,-45.056831134551459,25.461685858425071,-96.521153120024977,-12.909448476282233,-52.436795414194314,30.145759132969104,-43.436020258206625,-23.757759345853167,87.964710924516012,72.335977002899511,18.517591617217853,-106.78739887196571,-101.11040422105989,20.158039507194935,87.111272424656789,94.274415695503052,-33.003734567367339,-70.885468322711745,-24.98959752205154,-39.117237431205893,-13.072152458507981,20.8643090863334,-86.905920254652159,57.096570477778847,-142.41134999317433,72.720465625126707,-36.977928627408858,106.41570845902329,166.41083427472572,-142.45662915899914,-69.469461624418798,-60.618279367578481,28.166235199384182,33.044846140217224,-79.865104295539965,147.70544224774949,-8.845475773300862,-2.2929372229957892,-8.5614873560464027,9.3222679822024404,36.003267341900994,6.9260762341554667,38.736007198348474,4.4128130931198584,58.471497087432795,-14.409924812341998,80.376703009464848,-30.901016295583553,39.090952035559773,-52.103301936696923,81.542583119089613,-76.322804941332862,-70.991870244233965,-149.25013697144578,-67.826821751102543,-15.964398516795892,53.678393306722924,-35.404380670938913,-47.096004748796062,-59.562186091602904,40.442671783176152,52.53489325582531,-44.497791341274052,115.60145291288237,157.93303587330621,-83.658247511897201,-99.400126066571943,114.64288688321935,21.988592208291738,-113.8207603139783,-80.530951490868404,-45.760318343954097,-117.37152417923892,-101.90385342138134,12.446984092760829,-79.387219422824643,-7.5413297122826464,46.289772635180107,-58.06929019055513,-2.4896451404589754,-83.719430816097542,148.85986437258478,62.484302076183951,30.053687877414841,-16.473156133593612,21.693461655127912,-2.5257607614654063,-2.4120083576301141,53.205649340965486,-103.53737627761974,98.023486151302308,-102.78671084121147,36.503249310346703,15.771416738514013,-32.376784602600779,-91.720537913168442,81.181085373254234,74.688740538671368,6.8383060795527442,-147.39950500652589,-127.56494451583157,-53.253718762271227,-61.99968747402211,148.00346901739294,93.875176825313616,-181.85871424534614,80.178450135017528,166.24921120917975,-111.41298241748042,-51.180849195588621,65.648702192321892,-33.096224612906717,102.21118761398614,-200.52344180261116,-104.37400332441247,-28.822984241295764,-9.7736989000130077,31.257467154120583,62.141975255541269,-53.613022781046951,131.32925917236727,-134.16771699908602,-27.741808504283263,77.507674889165841,22.552076811718521,14.473557320564245,-95.578698405125664,8.3154353877684457,15.825818827972125,142.53227206753766,127.29420685477643,-129.19084460018519,6.2557688132347327,-1.2707527623058128,-64.761346190285536,-13.595522549003363,-0.88971934281289577,-23.847473739716417,-65.663455576493817,34.233581648464323,-25.958277602363641,-27.877191400896681,27.325076085087886,-54.750214778760821,-23.055556100342493,21.742602553565362,-49.297109706196395,-16.132913983501588,-15.19337509001744,-56.705522027991819,-65.031144561189137,32.93682765371377,-38.373959522777781,-71.815141507484725,8.8764042869700752,71.300663630330206,-65.423568670876705,98.467499611106987,-21.570083025818271,-41.407803660298093,73.64837987904869,-9.9755478263422432,-49.060078578441676,-33.071425547339047,-39.192030467954133,-13.716718911826881,16.613806195655215,-82.526443610541804,5.169134191362506,-20.148660231807433,7.4240030696666182,-39.862667578248519,-11.608368331143877,17.274535281360084,17.970733568113733,-14.216857668906336,3.6797616178773973,44.454605771952295,-15.875425563290243,17.883337213157724,26.918753427719885,-41.512344103078533,-45.960829694816447,-129.36415546017921,-60.188989637180192,-34.303368876994554,-6.0964330304954402,46.566412901990816,55.307038963401993,-40.150713846915728,-35.045828646013867,47.731813213827124,-63.287179317664453,-2.0330853750184477,38.452938373429866,99.09089604112053,-52.647903711926311,-70.550349354447036,24.11601266219008,-45.317654269826335,43.016517634942076,13.499845464739874,-126.97443208972953,-38.092538426803145,-27.047304230866267,-52.465495274363015,-79.11208049123691,-31.743589759692256,33.538569626116129,-62.223641963508094,8.9559199259342606,77.485969184067514,-55.693307012857986,-39.031031236854751,4.2042780152251158,59.799794944421087,-76.979296351980409,-32.918825467495978,-49.293063564053028,13.96603864223796,-104.24016332620853,10.886093215060544,-4.2362345541523787,-5.6787410093879398,-13.747338335179251,-10.406813723587476,62.217570077889746,-3.9440021862584906,-53.018511272723714,-35.061796642839909,20.153534455516983,24.325966616110488,-14.315560159030696,-74.081344083544451,45.117047927696163,14.994263267258722,-31.463282243112815,-4.738011905939703,-0.61343303369628188,16.169890411712633,-3.3143138213307708,-43.972307755940619,-27.583868412928457,2.3309372336778935,-4.1559197464718096,-65.348545803450463,-31.315065227988306,37.587965247734033,4.8337388252352333,-5.2743777056073853,-68.236968417736961,-24.163305504358021,77.379112158703876,89.151202085182092,24.449617170337337,-10.808685648153451,93.879095808188026,-63.461778995492821,84.96150329877787,-0.4567781287638546,-77.287087390387683,5.860834000158178,-41.47468269440153,109.96690489844256,28.480293021806027,-1.1384546120510568,-31.66124506539655,-30.295089992984529,-22.003919585867738,-17.040209780633496,-39.727159804697116,35.293963147656982,-75.433253121062506,-110.97760927092584,-94.511333894780307,-43.396732070794506,19.184443388257286,-79.566290965303779,-14.445093241065567,-130.21494723020714,24.028436998064304,27.574191315461512,99.006846163494316,148.34837156586067,3.1164547138571956,-66.581102445403388,108.93798490560027,27.860978155348192,99.263057481532087,137.67683605492289,98.238476729614376,82.050080835628677,-30.846771528780394,-38.848943697011407,-151.52580265678898,-23.085452524497573,-103.20505965923358,-69.695557958326603,-151.94931321556138,-56.698770899962568,-44.244268246518949,96.431220796645974,54.636649459394619,65.916085384038951,-99.691591502766613,-105.32378204731303,117.89556852479058,23.561827130038658,69.670983653183498,-26.496708760125806,100.16306384415586,-23.986015522122312,-8.9205419588190438,27.269591938192473,-49.948900730150044,-21.636178849143221,40.251745850601388,-175.88566446471202,121.02127006349639,-58.705707679402565,-131.74698611746521,94.428480403963292,23.407472803464771,-12.969250633874029,-156.00462201687304,-19.893387902305872,-126.36832634339356,82.109617665627141,81.175997149397702,131.28298213066748,-111.54433496254336,53.913203070377577,-47.874126144994435,-157.26213849507931,98.970939959962209,64.785509921499056,74.949832666417734,2.3943053024580863,71.943861559683398,-54.064716441336614,119.9470895626408,102.64444873301193,-41.43924251814493,-153.17923335205302,-30.157381701159125,162.54078734846553,-73.218532781930847,-98.902035585088612,168.56466972816787,-103.47902821533133,105.06675058139163,-32.441282640701473,-124.24153637379339,-9.3384026356082437,58.949297151994216,1.1361940487115199,-143.63443245111748,-39.990039188890464,-135.94775680647041,24.98204083033454,24.854440491032292,-30.304864119269187,-60.335538148695917,-13.710668040106732,-25.199536365736037,23.808788449438126,-114.88020888945202,-155.66053750311079,9.0046911591556551,113.12815716042138,122.63533991656894,-33.482055831114451,61.123100881636937,-109.59008080515775,67.338081878636814,91.09220861431514,-75.950423698077827,92.907958881581536,-116.25680641396622,-181.18547629835007,-30.048421095222892,-2.430483522465515,42.19940196970569,78.763499401013803,97.388741946285563,25.46591298811569,5.8100475046727951,60.446728672289161,-79.746213871810838,-51.24353246629115,-98.543324624424571,-45.710991764998866,46.23552608323358,106.4545463039031,80.164495323704585,-40.236005976096045,-57.678856357054087,73.335908161250671,-73.823595032719922,4.0779625649603677,-78.634878372347018,-4.1439557397619211,-61.496409755590868,-77.452650340685935,13.966721374594425,41.896848309353636,-38.299419380606807,75.450909077261002,-12.769250369128709,-41.619507166370127,-14.358672551956118,78.093343643023502,-190.32934126820089,-59.953595409903599,19.979619361285174,106.9411237467083,147.84430735934981,41.835753557539412,70.498344484801891,54.953209127062507,-161.6168972649516,-57.29103422170391,-11.120932947379096,200.27362023727099,170.34705622991839,51.170934277021573,-35.769404808577818,-1.2617357946309085,5.7733635971920236,145.44495765575286,-129.97231511254623,-12.048828208839371,-58.043246812282504,63.862399496522599,157.19066152342219,139.58459754798326,60.296129220070881,-12.722363164197503,-32.735170295150155,-54.075676117233087,42.918559843778411,-19.949518233881033,47.268857334069523,0.57102375373373349,1.8660472834751118,-130.62557032535196,-155.44647876835842,125.58575533919966,41.251809614615091,148.23955118833496,-102.78293654934606,70.879233054849863,121.84042592983329,95.453309080252922,2.8379782514438139,-26.685311052776868,175.82016495143463,155.95545525114633,-4.7495948332295939,28.898629396828994,100.55148583558642,32.555836631053033,-38.449269109233484,32.839177766909053,-2.7607425243413126,30.575838003990292,184.13494643010765,50.212890478314741,102.28933582405148,-59.495124505651475,-73.012905574191493,7.2364341626763178,50.824146708493039,-56.511569477308456,56.863766603900146,-3.0725547025755056,-41.193976122107841,-122.23861507115561,53.045004330050674,35.424723024065102,-125.66311782804777,-72.307000486922561,151.53571429072798,-134.30617999138303,-12.258035763561242,12.463941158702514,82.254238193952645,87.797015338568841,-260.88903090995723,-80.278470504183602,27.788169157095329,-74.548746209856276,20.912345936097253,46.17675226826762,26.091447071051221,-17.341605132206759,-61.530732681311065,226.10503423881778,-35.524624704206033,-77.681432817613057,77.872081969406608,18.041755320159638,-54.899531173731752,75.849446333657824,30.295323973494245,-57.391133032665124,-68.279314760038233,-24.010359856354725,-100.99115086588935,137.76475778729804,-5.1299337737093698,16.71712273186057,-16.882900230006488,34.191176680690553,32.687871272617684,-0.74099342206544883,-171.71827883823312,186.66238938309431,-49.724473072138835,132.5285181102831,-2.1617068172205292,68.101953330376134,-16.031280394055052,102.25569402947315,6.2103723258133314,10.088865046883623,6.6571168775211973,-57.458276416549815,-150.15421933509901,-37.354725052834425,-111.75698157935143,25.299371839802113,-61.872740624833327,115.29938107507198,151.87064571127388,-75.641270440907306,-2.3692480948370296,71.940185070177534,-2.686600933670956,-112.67464182282328,123.52630822609738,-30.567793832620737,-70.274748315635108,-71.611110315891622,-38.932265377077272,-18.680495495325985,-87.561606580877168,-55.720003020617554,91.279291776234601,-74.419560874086045,-56.89347996022839,-115.4734426572608,-39.81306316227225,1.3175897145011675,-55.842624215916757,-70.036194635494468,-88.086798562817563,-17.337570976996133,-1.7519627646127844,-110.11425062478565,74.793598749861744,41.789594679278323,112.1410480654625,10.093142833681583,52.287716854677939,18.55733102340082,27.253802427982603,-107.25963649015493,60.963224863300951,23.949608610164105,38.768426824035799,56.305272659966427,101.73394384182393,93.378686106027558,125.53123029472967,143.15754946609917,-108.43167454250421,-23.160379995452097,74.442740163219639,62.584486313465078,-140.90039337184862,-48.444369316234621,-0.5810619689434624,17.467698649293098,37.007565039342715,-58.132538824943978,-76.897079976841027,-81.94896654479399,-127.72385296276032,-18.876972341023652,69.359268696872874,22.891112913449973,17.806139423379793,89.109950543583579,193.89033666605286,70.518181264447094,51.940650640674107,-18.059277217638581,-85.859610926824303,114.42537557373826,-34.289084377239746,20.556316100310539,-114.18091288488827,-68.422198667056648,-7.503315802643975,52.133711857264089,-100.4110464765853,-70.433959114011145,-24.942164294074317,40.461817376029103,-29.390014722985242,-4.5283140034731755,-79.720347074984318,101.74746393546064,-122.28031830725625,21.079971236577197,-30.842734642366636,-41.536223925442656,36.683055020054695,-71.256451605475192,79.925455742561411,52.838172760208607,-1.4500184181747002,-51.91959643024839,-4.6115747110892684,54.122021380550621,29.853949124570633,88.218070903389489,-200.26674089088186,16.814823910842939,38.620730279666617,-105.02863337629175,32.68729274104286,-0.27012863407121301,162.60343312640194,-25.445962315995303,-52.768553051341691,-106.1922053884385,88.375485438939961,-97.534526529664873,5.2345626714706768,-17.1947234629314,71.911319262898203,-41.663831746252974,9.9493756828863482,-82.590763129044419,-96.625249132426276,-72.681607098958295,110.45881236639974,-15.827896791660365,60.96347880652587,1.706264805976911,-113.5819724701378,57.578506586574591,18.001246991424125,-11.941887553751357,-28.609495434594855,36.762911817928881,-80.716718705420249,-211.35994771319679,-116.53376517865676,15.91903870947184,135.17409147583288,-38.101936542477517,70.6369327336146,18.191160252773916,-52.642511932805405,-99.152394656637767,78.504601813700077,-88.546071168289586,-78.46700807387333,58.645600478530881,-117.90484700554748,-22.896437013883236,-76.713967955012407,156.55185971625991,-123.77776700196924,100.32510111686682,116.07341957303591,11.059594406080862,-64.495351045312105,9.7190087247743584,225.19719951315989,-178.393552843962,209.71236317776828,-6.6187516053724806,128.74725008401975,-101.49293513682883,-20.262061422731506,93.238460451082815,-3.0428853037846126,-5.1622161058199723,-42.339302418043701,81.173549497899842,-11.190182146677973,10.77194899122572,30.294562505383023,-12.288130566509302,90.922837508842349,60.015887962654233,103.70207551134064,-4.2697245940954787,55.783468673080378,28.666069087288292,212.58213685402038,-167.70383620672703,-59.729972282541539,-16.650198591848266,-70.922627300597071,41.525302458758716,139.58052365342115,173.2533707980844,9.3166752934875205,104.41826193346846,-77.074601894000764,183.98790025949376,38.964419889658259,274.46999084732806,-45.51394701835639,-73.495549173174879,-115.20902088559916,-121.48195379670236,-6.4555446496898909,-59.50868272033928,348.80282549778201,67.371270438249127,-94.49743868264845,-265.62191964659797,169.74812519107354,117.22286724924911,-40.971198380212101,89.84587341386306,11.450319360873474,-41.453497223245407,47.226067843622758,-19.148369043327143,105.2371009014787,-90.452856873904182,273.66917064853362,-159.67011537859582,-24.942138418813101,336.2468604244512,-29.812570403259286,38.432318094325133,114.37707834890304,120.81234789727459,23.281652783321782,-24.887058315700152,11.688763159901214,33.11761399015154,-27.201600631416319,-234.42355015417806,165.52243012664246,92.261269124384583,-163.05303850216353,-93.325977552309041,-91.432306721070532,29.425601973779024,264.57697249780051,-128.0186044181944,-68.454011943620529,66.781439246269201,-32.189750882112328,42.985761329955842,-242.98776944724301,139.18764002841937,94.716045677990991,-173.90343170021339,-37.171266535848034,72.82627532528889,126.99401347052209,119.9111222798528,-155.26603218244597,54.505856328113126,-70.153779418464993,96.596153647339449,42.897977567507589,-40.904649959784308,-86.0105185642186,79.739788064655315,-11.727783126939208,-99.922293329541588,37.991698790461129,-150.11160847179798,-42.72373787290168,-30.544502931486601,-176.15182065002566,178.5399977782163,94.48916175225294,-19.384926599054072,368.54650506910559,109.3300853711703,-198.20122956819336,82.121586500572931,-161.48857618058236,18.613613145534345,-254.08832951255897,20.066739058044121,-37.69679215597391,28.306692281821988,-62.258954080389124,50.420867899083497,39.703046013432711,44.755529407047355,-82.225708041749343,69.920947867202088,-168.64102163490531,-40.98627638218089,10.919001523342512,108.62499000809663,-191.40362522750007,-27.574529982723533,-159.53853517983961,80.63958120075165,-72.073592914218864,46.342160964160087,-237.62342661785192,-56.598508608834521,-167.58379939761073,-145.65834898384713,81.227724528405759,-78.45730117474335,-103.58945427991567,-70.599475780214831,-196.40338178072153,43.638512781046501,-188.66396341510745,-40.065900417301336,-51.060533038483698,158.03622002398401,137.77179200250691,135.12253194471413,-100.16779373239061,130.80815927646822,31.004495925098936,234.7110622699098,-252.30252389738513,-41.929482882161778,25.972546022627704,-51.038579418347496,48.353171856578179,185.59643569479829,-12.185750849267063,-30.200798911584197,99.932566187883864,-90.658596881933391,-67.710899333609177,-35.98805728071887,-276.02501529858642,204.95946363376518,237.21062725674597,-122.51602074613334,-7.8175950669449632,-52.194523556209717,110.21121070061645,264.51826301337934,259.33259449812005,213.12951978388753,86.021004868746346,-315.72145961622368,12.892605264696527,-220.35108814457391,95.591166354342747,47.442631873578428,11.029631204253022,-108.13123118945339,27.735638490969873,59.274376188033855,-131.50331497149972,73.179187087480898,-205.94201524958675,13.362196584457564,115.56597093957254,-18.591015838795016,14.862364346642195,-47.822638964499397,-192.54530080892698,-0.68224340643430992,-8.4147403489872801,3.9169912098454134,-64.735330286313214,83.547943532322563,-138.50359191574555,-43.666562803427112,81.607945450932604,106.64402849346898,120.33173823595699,43.076346604084748,13.109679154173229,223.01493270821129,-196.30922561481702,-76.721832776445154,86.120408775035699,-75.273861644007908,-20.768175046460058,129.37558220684022,-190.89751996772185,-21.296520774639163,-44.360893002047064,12.719112268306503,-203.32958041657923,29.925537187679964,-84.991157711722238,76.143179547377997,-258.36694108747474,2.2580361173353225,138.85202301956184,49.72521714117525,56.976672817666412,96.233056117042338,-39.40037594603271,-44.054969859793005,52.431028339398878,135.15483840662628,62.732383826662776,149.8197389747958,-67.523155262399101,-132.81634653150701,39.495381049395995,-25.332830798083883,32.255423689298709,-81.036643440843676,-0.29971852233957463,129.38326323458585,122.07395484288587,-145.58253189624298,37.769022794831493,-186.89358549214961,122.01534724227919,-38.867946227507097,-160.85086735605316,66.592104471827554,-43.062101135674155,106.25023851280042,114.12869662981534,176.52064669843273,-74.229183734570213,-98.377047702518894,38.679080999850648,-70.956011578802716,-41.377697974700169,-33.194136564728282,152.00391941878681,-97.781084174932474,83.32309645351998,177.91346985974545,122.4018771979943,115.8823969835889,132.7030532676454,-44.61472796580739,174.67392874518052,-109.31858063347643,-142.4671030727888,-91.810440386262712,87.03649550898183,-3.4640096253720642,59.562298627260162,40.182342387096746,203.68421663709279,104.12057254405805,-34.559304534998894,-171.68440982995665,60.076323046690355,-7.1607018172384684,228.48827416024187,117.09585996802048,3.219410066821581,147.89373247082278,64.135777575871316,-5.1007014197765983,-3.5301025414576515,-28.050749236651061,-190.95062849756306,215.48059529761042,120.18797133667238,57.35869051549669,-154.2544400367477,113.617581735267,77.806301294266063,-3.8865811514000335,-19.136284804419411,15.449306995363376,-222.12049108167253,-54.963442687453856,314.44422976606643,-83.81211337398905,-268.19424491194883,-190.80983875027417,-166.52697866265399,175.32230787121941,-102.87267272901533,-169.79348261117178,-54.089570846662497,-227.69381783736392,8.2020672741760947,69.495496482877769,80.584590302162297,13.224462253469909,95.662633530074245,57.295962686050473,-78.694136370421148,60.382105824543956,49.786330019319252,-12.538736092407248,-145.5992102643587,154.33413656630057,-105.05916095655789,-103.821981575932,68.175739041406004,100.89435275240126,28.310887166582745,26.463912218284456,22.890164731801082,-24.226672049974027,92.14361107871342,-125.00002634453867,165.99578501681663,-28.531838069353938,-110.7133208044971,-117.73363766101792,109.00743320170352,171.63698628783766,158.35358250040309,-227.08595535663528,-25.508982188424458,11.047435295070422,44.706489410560621,58.362004756617239,-31.904388070013997,-3.0241908960843773,-162.26881664784813,59.486918218017678,53.777881190401885,-42.294930805620041,82.742705749522003,106.69701822711286,89.70755209465338,-26.142480857437619,187.49267868144221,26.333548824146206,43.213689891197014,-51.842143601332523,19.893732028041082,99.07105945738391,-84.961186045528521,130.63930168800709,-7.4510491290980241,-5.5224432328732256,-23.54568500560579,-92.12221422055525,98.623545292905291,-243.79543149420542,-125.30523195573163,-60.09814940361553,103.80079667961974,-170.05614088440944,-8.1617776525596959,-53.212254407596561,140.67758656845695,-249.02558035220008,189.43712288686518,150.16389226719349,64.094531069404837,-102.32258368719845,-191.64725613725827,-8.5754627696042789,-39.179827057450218,122.00817587398519,-6.6012885552856382,152.65602820479447,413.2941641318252,48.918744874171409,101.75874815320296,-98.557663831478223,-251.59128936288465,-33.321995601281884,82.470758415268804,-91.129681689783268,-36.937043192495629,-35.624772976576381,-178.23755132886924,-153.6186779790113,65.684117392172595,-21.145473447912451,193.89241432588886,83.82820581586256,-1.3902984153881519,100.52085587794578,110.07208134164739,-107.93286899461339,150.22101640879524,-125.69772626838618,-202.03457758823004,-205.20811202090164,-241.30458072226844,53.253354591197315,430.36190909630176,10.988591039908016,104.76398328765899,-33.98338274058365,81.986098017511381,275.00660347410025,-17.927566666822955,-110.67644243526152,161.91138259596704,18.998827533661384,-86.706219900235396,-287.984010514293,-141.67359622927475,-247.04202433217478,-134.65683887319594,-108.18848833715251,-224.3851908593557,-219.97933832044276,48.45577622030779,-13.023950854247254,-92.007534506415595,-40.161145811984397,-40.626600868672796,257.74013491974137,38.808720754589849,-140.83154297891818,-10.153255731215225,91.618032265233694,-101.92678546058249,8.0578699959039852,57.328983615741258,196.09919339913151,56.050964365127612,109.02337262300554,-14.030891643341457,-136.96387663459129,30.317509941162751,-226.61904663239625,-48.250162951457597,-316.89580038732271,35.997120561377088,196.71428214948941,-106.77473243777413,51.492042046202855,-6.9257743077085161,-44.544941935134034,-4.3575421655936211,124.09905595506154,-50.994380876943303,35.366393346883712,56.459552286458411,261.57760490534304,69.013348130983076,215.711462290741,97.746247499286781,88.124732808454013,39.460539929295848,-21.529112521414337,-246.03619772223752,-143.05997384242983,95.162641432841383,-74.584112673167283,-124.04811054480216,80.012169279882642,-110.06890015388086,8.2060842241795129,85.546793814429734,45.932745981219867,175.93753418354336,90.065412746970551,-7.9694883972347839,60.667099096092635,74.414891250837769,54.285391932255536,259.82072683437315,2.5702621798067007,176.2812124221677,-27.243868921943488,-5.974501325569392,-232.9926733529735,81.241081899468625,64.904281728301171,-58.449926381428867,163.83691842060114,200.77681085920901,121.9004754738767,174.29260712907822,161.91206542872402,126.74743745823311,-113.92954916432639,260.39877134445447,133.520014123919,-156.62542696765405,-316.29899238183248,179.23377063318765,39.529779589643759,-62.797561964459618,-164.23030046105697,-147.74190211850515,-6.0927207130787941,-37.617453596105705,68.61449477288005,-40.569966337205237,11.750902999686232,22.124926371150117,-122.7057875263326,-132.86054030688689,-93.163788597256911,82.009584294826908,154.8000394878199,1.104219481571648,-46.428251844100998,-93.407167719032628,-90.527065740268128,179.46619380959646,-99.275098749970937,34.32306971844335,-233.82644564589481,-77.43295778222452,-162.21439469447665,-9.9682710746169132,115.70347616865588,-99.165898367295341,-14.772039072238265,-63.983178231469857,72.929223992747467,-58.086867534916685,-119.86106447614202,84.492405514878769,-107.49713406055213,-22.177774228125571,-47.021233455560441,394.76048380513043,-71.713067797396022,116.34841024529726,69.972512205900301,-26.362882460978462,87.591465714793884,-6.8974128035608544,-247.38570872851301,-152.33555964628462,116.3314851911467,129.07564282103502,17.595762901186788,-57.174520242681162,-78.109376008547898,-27.42506205505633,152.44313024886731,95.724800580484171,68.285428155675618,46.314488031353228,63.370996481806003,298.26569521019985,206.99053810958787,-108.30691914120649,124.86891813944743,-89.739374735147351,11.50115637048949,-155.39584026268216,156.01148507433919,102.88247513129309,-21.62103861141911,25.744150287645397,-259.58890772148067,-93.765495309421595,74.337657726761861,-3.9335475784990308,63.867944637774372,249.22611558134747,-211.94916171854263,-185.40259141916874,106.70136163667252,-62.134274083242467,156.28190682506789,4.0488576678192914,177.95654259040677,-136.79709885104558,46.953070451677306,-28.617337343546438,276.95720334308277,-72.247821349745493,-361.24004230664656,-53.00517849626803,170.75443223084969,95.655866741633616,-144.6996711578725,-130.97436886535397,14.925293453175193,-48.701881793902373,40.52377221169651,100.07284517726518,97.257065589823085,-53.276828911246056,38.828282872048334,58.240408712375171,96.742523665575504,-190.33478463505429,104.48762157581785,174.90037577821397,10.013747384895346,-137.74313818269758,179.34185315090011,70.232727197148066,76.609868729920819,145.78309884762308,-53.594700272381928,86.478857225733734,-140.55005759801958,75.176331024794351,-40.88092739461144,-64.003343878409822,0.86641078014169892,44.397174789546582,88.430450109278794,32.395558038723998,220.45310744938971,453.93391214266876,-3.8004573709909337,-30.173298421421691,-49.761019610208166,-7.6986466542385585,-11.948178629839052,-38.028681149602932,29.663815679667195,115.95481600592696,54.876638395970502,-46.901290831519304,-72.382989144936261,-25.890641781774718,86.93687016858496,138.32021312361627,-21.654499195690747,39.245813432683612,65.203708970193645,-79.77560407784496,-122.42922960117912,87.107907425479155,-225.17259333435223,35.215877187856535,-153.61595375821264,269.73816406728071,80.974707505469837,147.07395909212971,-52.874079855377602,44.513395183327361,12.217244542102804,104.61927650804937,207.91143887417473,27.696836148354635,173.47931825047857,176.00386337431516,230.56478353585436,75.028759531252419,-6.3044382822782268,206.0172138360829,183.71491525651291,-80.447171656201732,-7.0995075331553963,83.536457067281702,-36.727095993357892,10.396520966322534,-21.14019038965364,-36.286489024003373,-221.14810603860533,-122.74650744948832,-133.25956182082447,-102.14159613804506,-55.89629044869524,27.213201501313861,42.08488108003548,-88.692571694638104,38.954029745808711,-25.482665222251832,27.168807787934721,214.8047155036991,-42.900264471430162,96.554631641332321,-42.380905478596418,-309.73835917986338,-84.887545296692124,201.46140901867136,-6.7891513805569836,169.48198163852331,110.2120931523915,-95.161236729775339,165.39072201742238,121.38548121199443,-37.377654197122474,-121.78589981833312,98.89333114104349,30.641936903285064,-92.714628245609816,33.527474655231615,-80.181657881621291,24.76387350956038,-12.782409276434743,72.289784642644662,-109.52420584158673,-60.544338955409543,-26.349007667655918,3.000035032873285,-195.45421753445959,5.1985137743425014,69.649979082389351,99.578342334462249,126.79674157231059,-127.09126034518957,72.016040601057739,-26.557312287267251,138.62744591580866,71.685142665125824,32.506546597605862,-138.19663747592475,-188.7791400706235,259.87010502890109,-146.8479951045685,-137.83462141812277,74.321468109981026,271.0486885101256,41.167215314950305,123.93362412672624,-131.80247425728641,-160.1493633378085,-16.488552570194166,-158.68024727172715,51.045604754483762,-17.058908019089372,-58.763382557886985,21.285851273978672,-17.015370726370001,257.01916669743389,-74.831852995329911,-81.941165043018998,129.25983289245829,-24.585206584377769,6.1027952036023905,-54.78358869604542,-33.192445454375367,-225.5623363272818,-286.9891257466511,-67.86498084234654,-310.94898130033539,-2.7764531825142456,170.58403689907732,-1.6098229676073856,239.22169964639849,267.69964526685635,104.4237384503745,84.401266301544737,-4.8921514146447791,19.238457911292642,-170.29099581155353,30.934745172059323,77.629234395343531,269.70070955484772,272.62197825280828,42.090236235436251,186.68129710253905,180.64772489253073,165.41765055472695,103.47368262784711,-74.508044332431524,-107.54039725225698,48.091943314942,-4.7589310595242438,0.73182089902880421,183.08751772748457,-46.9745307681995,-87.382885816655119,-108.2983723312495,189.4684997214016,-162.92200271210604,-177.41851723444137,-117.94384898372775,7.6984108953054147,-132.99568357418795,-89.675600835375874,-112.5451559541948,-178.0954267153478,-126.27682416485297,-121.07450428318491,-26.66396047210921,-91.877465249512582,-39.501785716214101,-52.773363963833319,-74.430833938663241,-134.11778103468714,-4.7917490413246853,-114.99771553796974,68.693938905233068,207.58835084649425,-95.901679318760728,216.91327593556571,51.609613948132392,11.383209555256201,-24.633023436644848,17.009491690572553,166.88367020035301,3.8621274286228795,7.0372182863551167,76.101676251987286,-128.21122009597343,87.0681797736395,222.75887306404698,207.76642435887754,81.167826270013336,-232.68108554979693,17.878715912238853,-62.006040689287516,-21.848227806382329,48.094663297934538,-220.22553180668262,-85.597581536286015,89.186571595521116,35.312298914904375,89.972322533911097,-63.560070367281938,-100.14907354534274,128.5857204902463,-70.257669833930009,-35.838097415448601,64.975730213542533,229.26129356358837,-7.8420510999636122,-58.285983767956239,13.229567509080645,-68.548148433152789,-39.202546678452634,206.56309206845219,39.479218866434479,191.32755957254466,173.08184539051234,-110.70850780109059,209.2585200510477,-28.498051019058337,118.05665352553123,144.16748493695155,-199.36754082154721,167.56001085486756,-285.44459802583179,-14.593059273002552,158.97326560021591,-15.929642674319592,123.83231255432224,-18.970559564447441,38.335378947771588,-218.04560025278266,-32.456962764830919,-31.875059431018954,109.07346003133145,-118.46398657022041,-37.97195531059743,-71.933107214709864,-37.939692796352666,170.103462542984,-133.46834657484243,297.97669162630876,-63.549726604872973,-150.50854328335021,143.41963279710089,-2.5019524592823927,40.47462187898028,-43.202333600117683,37.485363305332243,126.71713553836624,-20.074695789447475,124.84612333701703,69.871080830097569,-138.18872902670253,4.5971015346527366,-71.187192607902688,-371.46148717715914,58.17257176847356,47.112461441320036,-53.804779201908111,244.29071934667223,-117.14046310902732,249.70164409429236,-306.81332665504067,-165.12054161427091,34.104269942266612,-284.70542873441951,127.20146371841018,140.53634073717859,-152.88516758040561,-68.729715867573987,163.79582088345273,-29.351358040688396,-70.635153143197641,169.40948274861375,54.580044602562651,30.197991729187439,-38.492274108537543,83.753141240054333,-7.3516263309235086,-267.81469842574228,-55.539977927329289,-213.05336448772289,-105.21018200828833,108.52760594212025,-39.475385516086611,60.761618852646137,-242.14946011595416,-257.79766468103793,149.19082219832094,-10.260565948518028,-69.18434382071365,67.967031640876272,-78.150613549534626,-107.32875473825646,103.05497460028926,-22.014574033191366,164.65294405843167,-176.62821441970505,-122.95466214933339,-37.342269584234408,65.569889923947997,-75.162937428156766,10.673415108243324,142.96914650784498,-152.99113682689131,-5.6383879602257139,80.758616533712967,68.347069902285199,43.898559940097797,169.33648028850547,28.49055214894247,-179.09839317065453,71.428138152411151,-89.291732839856039,139.047799865359,-1.2857330942780507,-242.17564580986308,-65.854987882045805,-229.3760751104187,-43.947175553616631,-84.668249467011933,163.91205203794686,86.260253933377442,-91.161552881590993,182.23364977910643,-76.937594672894619,-0.80556965648173673,57.81875961416435,-178.4334457808468,123.29153674775804,8.3823563495014071,50.416440765831659,-60.069578581064931,47.304132414120602,-101.58180823174348,-213.81641577308238,105.52194855175912,-47.338955160230398,-71.133249746687738,-76.180555753136304,85.789787908850826,57.945929022421403,8.822430322319466,0.30521093055671145,53.389645525182452,56.22344407407212,-21.316339454265027,-146.29721400046526,-47.898787146266756,111.92661425628955,96.505453527734801,-23.985321752537438,30.134103021876236,9.233446251798302,0.30269598115051366,101.9106700496352,137.95227718513553,40.760891448977688,-10.985280164334899,-4.6480101792248121,-108.68363295242054,-91.749090927934361,-121.4074710623226,18.873019307241982,-75.009980455272711,-62.729391356209518,-111.87849117320033,-79.625618600136931,-73.854809463007172,94.17977173789518,166.93680974306329,-51.121580020427515,91.657927642096382,-189.59887767194428,50.926221321853276,92.812603664781676,-71.093214893028318,-37.62427887517353,83.58708236049344,-150.19942887751864,-20.911502226224343,-67.179595697958149,-53.166019524424541,82.014249416681935,149.14196319960547,-58.735067050426174,120.4017257081685,62.429356731346616,187.61413403574718,12.340425386663256,-57.995787389838782,-109.678219903447,-53.341709260560592,21.442749652728715,9.0790540761103813,65.180110686346978,148.4544446446661,12.016303433255878,50.23257642855873,-12.246376235071025,-158.58776148544564,-17.362458980795495,41.584135388081101,-85.001883619495004,-48.517800928201964,10.622313980406709,-143.10684923931967,110.55689098553898,-7.0529956322559428,39.908525522934745,84.209394869868845,-54.340696033279315,57.707601017312413,-16.512492862633756,42.035116523956752,66.537732322794142,35.751302268323514,99.098172815146967,105.45853157880212,-2.453670244861847,-213.02517069412323,-123.05975412790536,9.2623665759911251,-130.4225276566041,48.008413498068251,-64.897637299468983,-150.33397677141298,6.7674802511251677,246.15824449565756,224.82495137438846,-68.577185099180809,-81.253759227315712,13.174791981905974,65.971820997132255,-24.595405890891627,159.61910045979727,29.395646526968939,-158.8868829212972,-29.699106174244402,-92.131308904870863,-114.29520182262146,-211.19442056842945,21.28584171706288,65.442065034377336,18.686145677393547,-14.780643111100016,67.432813406375459,37.652597559961094,-3.9367813525493816,130.05593643646139,-173.10575511355259,140.4660747527241,76.175826160959929,-80.656274721738185,-49.437169198994255,66.35798441729861,-82.007791036994178,-25.041058615684499,-150.99944451268689,-17.154524397655763,85.037970638282701,-44.798860175314296,7.2660844724150637,89.162311496439983,-218.24640538116432,-21.086412270635677,4.4442511094135355,-67.327615647642176,15.064592311985876,-37.949082031279531,106.59788598084508,-4.0916603411999333,64.279759558918016,-31.501546627906976,156.56665317570653,49.946710765658075,2.7905546555791467,-6.7579547634969188,54.459034867013123,154.81079412737881,-74.929571884940117,-35.364947952617172,160.8030311446928,-137.7356055658893,-107.76497252273035,196.70951382590863,91.408719223900789,132.46182227501168,-227.53103050562686,-4.2424016946511465,73.127211341308865,38.99858840568556,41.097371212636858,-84.587126889944031,-199.29275943726753,108.61293046506576,21.430360603368285,-109.88887137366737,-104.02897284676395,-178.5808526422652,116.66014904022387,105.10206787677063,62.695228206478298,64.22758919270521,-5.1749574617219594,60.244492709150322,50.753775759375827,74.054038317842142,85.355710136337407,31.791198200262016,3.6345577723266871,92.72913383426436,-232.99722475931836,-102.46366913896156,-140.4126183623857,-169.84260290741014,15.261839604849467,193.61977570542578,121.55801068012076,-34.578196604948296,-40.694835925105757,-10.882456315234151,119.35881310543159,-71.534424646326713,271.53782684675821,-2.8538283248017748,62.45701143723263,108.92930409905722,10.51293890357276,160.67720805270238,-250.1218406503055,47.53514614235624,-85.02943194461092,-14.444158767180667,59.993986979519768,-189.24623821680387,58.67071298071842,-124.6321059181609,43.371353411566005,31.429381741618812,-13.090423046740476,-26.718398926871437,54.490523526851902,-57.899494983495913,-127.38246456026758,116.57976581915797,194.94866684885258,-169.00485174919962,-100.95653351933657,-90.301748890488838,-21.801933776658636,-12.443906355763758,-75.292241092528315,-293.35427443061479,-159.25325171326267,142.89460235090542,-136.6288387795467,-175.80597811421748,47.218412692812983,24.863045778226482,-49.704186417417361,-45.903434172380969,81.924589899084623,-292.36441268957412,-49.361916343846701,-51.960852954060215,-179.62398773854957,-85.674352463507404,58.092036176151836,55.198787062272743,-140.50205890111499,170.64119034875065,37.0272858707079,25.503427247579538,-62.949913574277396,117.16071045804316,-78.667412922309879,58.316254804482469,-83.589646759962704,4.928805517736393,-73.889881029684361,97.876438356934642,-91.861047364807078,1.1166754880299763,68.79210126758079,-2.4026375597092748,-145.53607674627335,-137.92312400304326,54.376208592846837,-20.387367286631161,59.395893947366602,-65.017812311934193,-18.99285128878962,-24.026818121832036,-155.6560781441093,33.476651413293588,-110.86833722473398,-1.0647560710649904,-7.4373277377353588,68.198762065613266,-65.070564612450596,96.869807374381224,-23.804688218206714,69.866885828718296,-22.287525647663536,-279.34395627522986,88.593294387768466,-42.684447364958629,141.68152135136972,84.203804169287324,-19.056668930171902,-116.28875029347557,13.611316058369276,-16.493000045810895,-102.32430954450592,74.743089996958119,-48.49484359946446,-49.229798110944927,-74.391640742938506,56.896051155158816,-31.754079032315353,9.7105919945034529,-65.547401340755499,3.1534270858486124,-85.808283090929407,0.66171208769647905,-89.726446733603382,-1.2718652991837152,22.558171849882683,-107.47446768173378,24.843484410934391,-12.45647833122085,-72.132699524803542,56.958127425569508,4.6791260528946879,168.68052714274864,17.836831257103547,-10.610512593627767,-62.520796785026619,-19.206805635015215,118.38398151523158,-101.48971734395218,150.80206200654675,106.36283838883722,36.188657058441066,175.77384761837789,-86.884630958896523,-24.228392719031003,53.218821456576784,-3.9726568165826563,-122.776823874877,-175.39239791509013,-16.808229012374071,-49.101281357959039,-145.93117111251718,-81.59751929343895,-158.38477499103769,12.769433695095472,18.22547314201309,124.01472283545627,-211.41555131855679,96.753084651414184,72.130010743258438,29.684357449226098,72.577176603843469,-41.27300362554368,-125.17786646672819,-175.60144600700593,8.8407303145431086,30.798575566279339,-19.082510660149147,-57.963104936726168,37.441335003657116,-129.87594182546241,-25.935150689839162,-104.32682463522779,-18.476261483506647,0.76819996880135477,-4.2928406805506896,-1.3204447186912915,86.157542424305646,78.613238218634706,63.448430057829647,-97.662257618846525,-4.3006126722758644,122.35590948651972,16.848597792633353,170.47564340504249,69.957314880049495,-76.08759891039324,97.521480112030574,-139.68646176533269,-122.99307483494947,192.97874417525315,121.9625327791011,-20.875921226023991,-29.737023613645825,84.450737610321085,-83.404649942566408,-6.4299151547947773,-33.503882451784719,68.43066566035229,-120.36536237300501,162.69536727173335,17.530960611775953,-4.7993086394770543,-9.8409231842802107,-71.38973116268258,-51.458751490476089,31.789485916834238,276.46649956154482,218.61992083682856,69.019727757454106,-99.635261844084027,24.994315506966089,-41.53521241260529,162.86818797239107,50.198431305705938,39.000346491060725,-27.761332089894623,97.790528713387403,-8.1014322849164984,12.516118680864359,38.512061756745254,-161.50591284035994,-139.3337009053422,58.680318638088892,20.575873315020594,89.514798864786499,29.512033484528402,173.25358403862208,48.830527138167824,92.215340825466811,-51.755024755032359,-77.295905338826628,-27.61354087441212,14.668019086740287,96.732245675560364,13.861800735495265,184.89904040686372,12.866579572370597,0.50960464207020095,-6.4532076601683599,-162.20242589619463,12.331398680052224,7.3818517279784857,10.140025749662126,47.91635287581682,51.483928291239458,48.545862915230366,-61.715793006804383,-159.89342256947191,-142.33418035602818,-30.879823957978665,-62.645145713933147,-221.03311161871068,-71.729714080905779,42.560725154776982,-44.264917481181726,17.293743984335492,0.11043960344935311,-118.21376294523562,-125.9633083780175,120.644544132655,-95.328499279465575,-1.2984977830387567,-46.430971313638715,92.552070752988669,56.760231248433627,-39.325154941571071,-28.415236691219039,-131.1488635653167,-6.0592713050122882,56.868510895577657,57.626720607701493,-105.52932890302165,40.91080286740543,-61.021515410947259,-105.69558014673774,44.692955203123006,-177.42147650977327,-57.627236179891881,-10.276008795385508,-253.20259414681607,-12.357632526224013,146.0903980182764,124.64309004045211,61.493422271532886,78.290068916238411,0.020646218921683612,4.6563259871760803,-94.223188032327243,24.537637012725739,-128.12305099542448,52.774909743520794,75.309426984691839,13.814553022536103,1.0930038847946939,155.06636968625742,73.272516417599263,28.240279135321877,76.800953289186481,141.93156231684668,71.140767041149331,-258.9424872476273,-48.279983383993503,277.27364477077759,107.70365185714402,-26.227275969894571,48.15889344660301,76.738383283348639,-6.2346047838914789,-46.851490435570859,-3.9722497738186355,70.28705107462342,38.836671436125847,53.983782075862138,-51.011842952772042,101.02309796010478,9.5751552202592265,150.59290242598482,-83.946247501771069,47.154780710587659,-18.414313065305194,56.642934683568598,-137.1702474998134,-98.025400645514978,-25.906164367966774,172.19361729283071,30.889201510646757,-95.134907089811733,-46.016796362526371,27.235723152483093,-97.087767682274176,-37.524247179123478,138.56772024342621,-127.39910480833612,76.360325450724048,-35.768665103492872,-35.10505469810041,-18.036448165523613,-59.772900232248567,-130.44097403357989,7.0767741868347329,103.10065833378391,-101.07654060834346,-84.350786869245212,90.122731345917899,-141.53431155376484,-95.210357410640341,-67.588218806561144,281.22399619641112,-78.943033004630919,-96.160780642757473,-69.378562936354541,170.26169910634997,-45.12607747845999,23.391189567683238,-16.877254716470109,94.425742015892965,-156.62550607016266,-98.224103690489841,-26.949057989829988,36.048167438077478,-18.547129058772807,-138.04189264166104,-45.707147872572271,-8.693504959213687,94.097239196543256,-45.022164251073207,-46.046749679184551,-72.461298439653788,-50.105096655783683,113.09755709974277,65.394535790777951,-89.44288132032159,-143.32208247811892,-81.418246597191796,18.157029471550253,3.3386940449598832,-57.509784366856096,106.18034240421335,-63.322872083564562,91.181182679191039,57.242902995183861,189.11038970578105,96.074395347386599,-284.15654418990016,-57.783687265928776,38.752385155661869,38.226617665774015,17.478955478396067,-74.52180560872975,-3.6870722882012927,34.017683213238662,-247.37959688686539,-233.73889928525881,184.15261382157601,-44.185881845032696,274.18924341506693,-159.22408397778182,-164.21752947614817,24.73372699518697,-115.33910005884287,83.670120291799194,0.27578833708511041,170.15285627625039,60.014683359573596,-129.64594056860781,-92.640072481419153,295.83255741450375,88.130972439973561,-221.46620274085498,236.40289062895229,69.119956537050342,-73.328797261967495,-41.298578942103262,-40.499473305766969,118.68925310666719,-20.553586391127638,199.19580902924855,57.889186396812505,44.357230216864266,-94.96189027211112,-119.77819878658251,55.961879007340649,108.56485103372026,87.123051103179023,-82.379782948018047,24.563268867325739,-14.928158864801979,7.6108499471685285,-2.0105492428872083,-247.34014326174423,50.119806486581496,52.187806847439454,138.56259623785826,118.9209744823992,-63.125584527370776,-115.49549468960163,103.58865022765933,-39.925968179998307,18.608022277328686,255.18368984902767,-120.17777679197386,-70.294320870019476,-168.99189599459572,348.37279974385552,-19.474551025899601,38.452723270775373,-181.22147779678954,-40.40796148268214,40.229652678686328,59.028735482875021,9.2288945878729507,39.681841285399841,94.85636614306965,-239.50480005965423,-164.16008013405744,119.04434369204371,-29.826078039790609,-143.63517774844573,141.689210097645,-113.11291232302167,249.02033388472159,35.639902173222282,-48.669753031395146,40.918071589982439,164.19300497801331,174.80243452602426,-126.33135024480384,-37.740216916894781,42.832937495955967,-137.08203277239801,131.25676408933512,-82.648530565623133,-107.5646155955007,70.149103097672381,23.730733871624693,44.317555867250789,-68.096610878763755,-18.609207400595871,-58.722978743497599,183.4674247665809,59.27771728362044,-118.20220759200583,24.995886059477883,-39.080747155904568,-88.719706935585123,104.54682559381615,273.62840339620124,-58.544096250858175,108.81302530867166,-82.577532992264139,-5.7891474280365856,27.951859409634139,-12.718788114490781,130.9709631077406,-164.13155663657665,-63.761170935867597,-43.058008754669622,-13.127147626240095,-14.9380111981352,-11.056535923364052,93.837922896223546,84.282147148829381,120.1609028670222,96.825439170545934,-5.7502718681107652,-14.222042434285711,-30.569774642874492,-188.19025435521775,37.128409062845186,-46.29664571779098,52.559274844651739,94.39185959057626,51.68482168676401,45.059772990997914,9.2359296830616344,-238.17662767749337,-97.098889731961592,210.08542087306409,-106.65456529517739,-140.3611656046368,57.673872091804327,-123.95347966574579,11.977354402989535,-41.172561774903144,28.907085413331064,24.273009593132159,-154.49871556624072,97.302213949138235,122.85940005253428,-68.060689111064647,-299.31446769349066,319.9503333217769,40.567081588446115,218.24410701025857,92.980187700082439,-127.31618281260248,-118.46742567504148,-73.849418063090042,-142.82155938002722,-199.96639185193439,22.156354043926115,-126.28226227719176,-27.787182021714635,-133.26077154556191,-177.37426935716945,32.68726146831348,-93.56313585491182,-105.1487253128537,177.23172745528544,-47.743364425729993,-72.920429021728069,133.49175459279533,16.506936253409211,-188.40185635552635,70.462224676794193,144.66585484835608,-121.76474912373672,-73.00955874961322,-2.6023020802807508,128.63020664809869,-28.08378912043419,-91.598287571876824,-177.70896314483701,-131.51767039810505,-72.684593827410339,-51.589793418413691,-206.53349968552126,125.54001551452274,-184.08633703397408,76.457743089485959,-62.844891512943548,103.38672503823696,241.7820817355769,-228.43120907639224,104.18924819552018,-96.454642735206932,82.722767655182608,-96.135474379203828,-46.477836499722947,17.094236017563588,60.806731067712604,-96.351370632204237,-94.814918986315575,191.02705595690514,-192.45472281595005,-75.951214912623186,19.50212671464589,210.0209738569888,-66.916365452030391,-139.76109514419869,284.26137325207117,5.7981986489860553,95.016840148059487,41.744455136916059,86.560112390681709,33.571822948733306,9.9765360064456843,25.267196466108842,-14.702515276785121,14.849551985120517,158.12268335886495,45.642111827107414,-1.735760074700238,-141.13688113644838,231.45937585282778,-115.51234950109371,-26.759373359401607,-211.42825656340048,-34.230445724197395,188.71276639473942,52.043138206923729,-81.423807464023724,-202.94188797490386,-80.976881756567181,-89.164644573903956,43.685319499329985,36.422395321774154,-41.119512498684067,46.640105092464815,-78.187937752356248,-143.63524708193404,-26.951735869695092,155.1030429115435,126.42508718232146,-33.460532626217265,-13.590595226438893,15.629196903875467,193.21310130172344,-20.024941489239467,18.481512380419247,173.0486238686284,9.0939237698996607,-309.60203266114434,1.1064976071180581,-82.171453410828633,131.79579083715967,-221.20000444800291,-5.9832170677974901,160.69881322947981,-94.852599679896286,0.49075895115595358,18.299546784675414,-128.02098888145321,100.33204737075067,229.65347796197116,24.852920239601055,76.714281141828479,-5.2683942338324243,111.79241421089461,-107.13775625294687,-331.02568334602961,25.038260566696025,109.89664320834112,7.0387618803303553,-37.50313061717236,14.802356734126221,-15.126501384535196,99.199777145650799,-14.121256826572974,175.75676039781385,-241.62638154110749,-10.306966085798678,-60.971539638591352,11.67184106912314,44.619676028229037,-70.735937406784501,-26.322344158924508,81.948215239444522,479.35111622382334,156.29999297662494,41.174536957770151,96.07418060011041,202.1347716044946,-182.87166390791947,114.15848326687791,-27.784109212628191,-221.92900671939901,-222.66139903627061,59.610773550566165,-71.131063743330373,56.932273996502673,-21.953680560400855,119.586573721778,-70.154778889115846,53.315812933797737,132.4583659055138,21.613059868107563,-34.76044462467754,-137.03393298234988,-168.4182902620847,17.998441636480592,-19.862958369429506,207.14247815178337,-21.376151490681195,34.82648367786615,110.61555796718903,35.02053772912501,-62.113277475151577,-54.4372176730418,-68.591104434801778,207.06771312270828,-129.1431317743149,-44.024606669232895,-70.961569300107428,-26.477371885847305,93.124601276206818,-27.913258255225699,-85.172957037953523,162.65774333264048,253.11020560072666,-137.94117111168282,-277.43128512206368,189.4859805631072,195.69779167626848,147.49634919459854,300.31166138745652,-244.55489890630997,-20.264909020874079,-277.29366775025085,100.85080748502511,-76.292418121694837,-3.1912225959913272,113.78593413705153,90.360987191573741,-69.144474957791303,36.557630695319084,5.5104708620135341,113.80114762981296,-138.21661380829892,129.48177963720534,158.20358650163794,-40.694486582389871,92.153380314238291,-117.81384196853492,55.039010839257884,-139.78138078150337,-57.878371461112749,-112.4519166708306,216.86037526520295,-283.66292742343217,134.74062369900972,-106.59479073969896,-82.613157710417994,94.782191745699464,5.586825357672204,-165.47588436255899,200.56381908691554,-156.89223240243541,-360.50434867850265,38.787608862692885,-104.93973507119503,201.65571906074311,86.835211180543979,-193.53941681591007,-48.230698126047457,-11.633299483574049,69.963641806436144,268.77855673536158,58.738881008542762,30.018121795341649,-109.93320737853438,93.133548329650253,-76.484541149598869,-85.941524133277511,-77.230695556545413,-31.248497189926365,-57.968981009928854,-107.71913236424709,161.3074359698752,0.38508864498534479,-156.0050168692818,-223.24846169254997,-88.193740404393026,12.386921193965236,105.36397646124523,-172.11706208792276,-138.6506496402512,227.47671391309137,-56.576267866292994,135.76056038383209,-151.42015787003973,-98.806077756966857,33.473955429161236,51.589943231588833,-133.53023611103697,-24.652173370857611,-179.06783566916036,264.48716278864214,153.2074806701811,5.30447954906262,210.93164564934341,-75.958139738788503,32.112217389193432,-15.191593471502344,-5.1995931865422449,128.71772963585462,-47.297624206281078,84.327819394921164,78.128178211401419,-40.348712683994158,-90.037800131616748,143.7179765051898,71.364767959155785,-3.5113898796412926,-177.58249045904805,-55.08378595177124,107.47678895600492,23.127239776114507,166.98151904855609,-217.99301138890596,-144.92529897579419,-94.804536343809573,77.324971020503199,-102.29495000561035,17.67658492487103,116.84074846456507,243.24514945860278,-286.82125992599947,-27.177916923317053,-29.542238917631444,154.48477094269825,111.58500054537438,-26.621870630178506,-1.0296611800529973,-85.088987360292293,-51.801814740644133,35.625626696067002,-313.81521095962506,-87.337800353078507,-90.964541372370093,-26.09646072813732,179.87277256636781,-170.85416661707575,232.76328923508277,-98.476014877705694,-191.72037592895396,6.317854927464527,-34.950517983851277,-141.93164684272745,146.64232747314227,-4.2770539365423517,123.50728029052836,142.82538938037453,22.756519201622396,103.62296167969185,165.8632786294877,40.594122915737998,-5.2118039977828232,129.19842786684669,-56.939603556043707,22.465235124632756,-156.09655629066944,6.8064084514065826,108.36591640152503,-9.7146166873551323,211.05367907994011,-68.540225612212751,-10.981560399198123,-11.944123837233413,-204.5249182132701,-169.08719065204619,-47.151831915974668,-21.136731963364774,262.29760653947716,-162.83241926528666,-156.60891281211755,-134.24790524869076,-191.59609757844751,45.159676167780901,-193.08045073792826,11.237908920660701,-115.02307742635944,184.16979361369553,-62.167817062402676,-88.437775886888488,-26.309765211635757,-105.93394394671799,36.979081090543104,-57.162661888553053,-76.866433517742166,46.045194586450251,-238.04324990611866,-25.289820150187488,-132.67675852649916,105.78324645754547,-22.984935264729216,38.468569221064712,142.24622940921995,-189.59712306320702,-192.7141650084009,-12.472297519210798,6.4089245809322115,-52.372884136408864,124.84231249847053,-105.13238540778406,65.61257110786805,105.10380621629713,76.279766442098207,-87.934255842050405,-145.7459386220049,-8.2975245876112389,-66.008546245071315,27.165130231921413,-25.753457133327146,-102.20057617816897,216.20258144113589,183.58657949658178,27.897625090533516,-80.845142875845184,-169.30608551553269,-102.41482043344487,-65.751511754132039,-122.28947212198455,-81.672651364696748,60.193476550710194,28.118889759028718,-44.208996952505331,-113.31590444854479,177.59020655964724,-95.152405330428053,188.54686634120992,-89.628863906074088,45.458823654897714,18.849156538697798,76.918282758005887,42.329712529374817,52.742129696449346,-70.715587214751949,196.64103279897162,84.249793810607656,207.37965756750117,-75.639770706149619,-172.9884062994019,64.413358104271083,119.62498564137415,32.631896164104425,125.52158740664694,42.297428080669732,3.2693077830026311,8.934178822541293,23.156504110282192,-42.409216794815165,-62.318639627540918,-120.48263700026313,-183.11962435315627,253.16150588462182,197.31380728391005,-182.46755712275944,-182.17327820298874,239.42599054365368,144.93498277464886,113.17408441957386,-11.785805213359648,7.8688348678981157,-160.99993468331431,125.14493395698786,67.400912094029636,300.10442095449582,18.097690827104842,19.050314479112107,44.487538073701856,-31.742515490282294,-54.091882803637446,-133.81696141719866,-135.19379961611315,69.86038433157826,-54.230371658952649,176.19004548428998,-44.494105801929585,-3.4497525722038986,26.522611947063631,41.291125861031681,-196.84364474188584,115.05136497437729,-179.63056914020194,175.23254754115072,-150.43178245799726,108.14768825738187,-1.2519411450295621,-213.75051642210394,-146.60806500526024,-32.391585625687085,-73.654796051811246,-73.331082170987088,30.121740507915995,262.56260891911762,-18.628926818217622,-22.86380650706316,-128.30689841050986,-58.974273932532235,-27.413750836973051,-19.455381938638006,-132.06168805360824,82.624467472081164,-71.509125912978405,-141.29049514887285,3.2686254396499104,318.12095353782274,-60.384521574929828,99.674226634034184,-37.125248083023308,56.982425669052404,34.37289618771652,167.46118558632566,-143.86315366317135,-28.82291528292005,-6.5127869924391391,-77.496032647134257,-75.447541908412433,334.88244516524878,102.37116720429023,119.79284400722511,-73.141857246770712,-39.201766238980213,-82.094118682535182,81.708867725330322,-1.2448208216343488,132.00294241002598,-109.83712748049875,27.880183570688821,83.431693978294931,35.415560550232264,90.877059372693225,100.41480897304189,111.79958908807463,77.344344899533851,-27.937307158152962,-237.93216800587709,-248.15495619905391,8.9986460678028806,30.723048753452666,-120.44118198416916,-47.341263683854351,144.02890013352894,144.18666045188809,68.38730184228092,-138.59369235706097,-79.801223413087513,116.79668650528046,-80.32342103787343,-74.841082070295585,-33.269669000633279,104.24472144573878,52.665481656095309,-175.33651887113899,-4.4189274596058965,-191.87092840387231,-137.93702755817506,56.415636889001391,-137.07249999836634,-228.21602533235622,258.71802661480979,324.20787375075747,92.958595292422785,-73.14082573755951,4.0439973018215802,65.735328559125279,35.08708417554206,-111.083549761325,205.34819893246862,117.36223522254464,-127.49293356474345,-34.939034659797336,-1.4066855872126958,-38.720693417494203,11.678543662220751,7.8854022306657185,10.050197450704289,57.532183623097218,-82.51238767157929,238.79066866024016,-129.35083229872296,93.332179361165743,-91.25824121128106,-198.6071503110978,30.245363502370488,52.730331342407929,72.738118853661987,170.59397607914781,182.61866241626686,5.4369260538208337,39.883201833185893,132.55712659869769,-100.5146146143946,-87.166272564437747,28.529509948656852,304.57656414328557,24.76771561552631,16.780453717618883,-13.488667053193637,-10.96388428963612,102.78762959913057,49.902786912598643,54.852261668651444,-87.907541553102092,195.72049059745763,-167.8922910693816,-163.04668153258746,48.117383191435316,-166.33976735619967,-123.03648754847001,216.25188977962884,-72.359495985132511,-48.165234529946332,-24.421897068413013,-79.414440973997472,-307.74735537084587,44.541379607721524,-54.743283921739042,-4.3044134825067459,65.253180244389057,151.9693290830956,19.17500887170776,108.46247551853253,274.49233312725914,-127.02515636781339,-24.44825007858509,107.98085492331651,20.439710270805733,-140.48839357023834,-99.922992950178298,35.970670148135433,-98.629576320419062,45.89063617343254,-122.03113658209398,210.061875279047,-115.68667662053764,153.31532504333248,-55.187580062427578,193.67017515924184,-60.5453311644536,232.62854863261896,-37.536813090103635,-172.65181966872535,-106.88724091962803,-5.195475735281633,-70.122777090456438,-78.649362977605932,45.452572937929361,38.98549886536442,57.683221620666139,-21.424324139728043,77.900703945655906,301.69271510615738,-21.258548864223027,-218.45407120456758,-90.746733152884218,157.37434404336966,-72.607302212865747,32.266308599012149,-40.249980874776348,85.044273791097211,31.657497471268726,19.330382745497559,42.984372265353592,17.797432505649795,40.605133321560714,50.296959771362211,129.35272031885827,128.78145141654298,3.501462553931006,-251.80501604317277,38.668312920231926,-2.2541927902999817,58.521182431725265,107.36837335510602,234.34587840491562,-73.17878602570218,-79.543605818866581,-4.0094241514917748,77.912403811363106,-68.950973286371948,138.50022287095533,-124.86691619492126,-77.620752314370577,38.47880188662878,-133.6539332642692,48.358113541439025,-160.25721969888031,105.67861613933158,-105.67943078601945,184.52147493475627,-123.4059782117244,-51.892200398801592,28.959912302606512,-22.219353238687809,92.782846565565421,-68.744780843572258,-90.214681528840686,-10.685930926011789,-106.18561215899851,-57.674767705432963,-12.587592782909059,15.52957611693261,110.87077018157608,-265.64005363625847,-23.64869080747259,69.069076624205223,86.519518593729828,123.07144714586943,-146.9869929009071,-147.91895367268586,133.56087370801561,-72.675134692892385,105.65061020541648,19.617286790124695,-27.76427062905271,-144.52436492726065,18.44633412322635,-161.67888264836941,165.79797833266713,-59.01212955118293,-60.423146816749586,53.702881289793368,-22.321384000141762,-12.836036576751852,125.57251148367489,-117.18311520201783,21.207714250615041,-108.79851835387757,-104.25789864353025,-203.17495706505287,-4.5732180640704314,65.517698782363823,93.393586858217731,-41.626900821758476,180.44529662608718,-187.52067480147531,-49.782528938322805,39.537698930233461,163.28909366746973,67.817273347092453,93.940936851039652,48.833724431233598,98.969209644315228,137.00081852738654,-116.77843538601097,-53.821922763275509,30.189506464652425,-25.955305050568555,-230.53511268670587,159.23089655225152,11.765272032822029,-13.573933989399066,6.1114253909088596,-0.12960442885575674,-25.058327750987672,-176.1562195984047,-6.8785217760592161,-75.935240323871909,-43.074631034816065,-43.095189147937546,193.48733667858144,-2.6601097866936527,52.377813626824562,-36.552275642219506,-308.23584734905899,95.6627708904591,-154.07390131362652,175.28324611889133,136.85423894925802,72.825939972336727,53.363204308776687,-50.826293241115394,-84.423071526532937,1.94689067479176,250.14019136671843,-9.4341425010265851,-71.657189302199328,-89.502671528878182,-30.56607489350742,-110.88043921902113,-69.320870134979486,-275.01606680452824,143.77341044438401,-170.2569578390808,52.279219414464073,203.23463564759589,-11.972320042203442,134.69597211952876,153.15744969099185,118.48845197238003,29.993793979916674,45.773382013083385,29.468734313847747,80.051768791352032,-167.27164994301407,187.00045834650834,51.886594972719145,116.29853327227615,-128.6485469760525,10.156589593465668,-123.25813507759494,316.44306813115554,118.59188607688868,-88.484494736441491,-92.96591108154999,111.53540921048214,-27.38252521522103,-3.7721828286495835,-281.45538582402361,-95.169350639787467,55.180520759021562,83.425475420184398,-101.2956634552841,280.00432030085796,-129.22406032210239,-179.95360121089593,56.208548858679421,-17.908169199308357,182.1855165238461,-23.753307097192547,24.697198661399554,172.25132512794559,-106.54587926554478,-84.633209648109201,126.98372044068276,58.486553132616692,180.58934510757325,39.590525435606381,278.71913904569476,51.708671124107923,-82.367060011351498,-170.67240599343501,-151.01041247480646,228.4242779555274,39.313158508742973,-126.23588545964472,-119.52885305730737,46.121958015122388,-39.700852582955598,-36.766439345281654,16.870683995129532,-234.11092792744799,-87.072476308897137,-266.92423435237947,-5.9628012620857511,179.1344199999163,48.993326079929993,15.182223966796634,193.60342278256513,73.998869259649908,-136.87673870200618,-176.48805601690935,-81.079165125719783,90.006142910650539,18.667275914828707,97.106017003492113,-11.00003971166398,8.19096266348852,139.0639268634103,-32.99337234120911,65.601466187080945,79.43674959599106,33.262075955824585,82.981845371142953,248.85624722461245,110.53384735511399,151.76739279919735,141.99632743320601,66.902673639235474,189.18916299702533,157.27390141620964,-64.219197821082673,150.08999955257161,-4.5047179420809016,-175.81287821502235,18.724381667231,-43.534813987211614,70.830103570966116,-77.852211220113205,118.32113349769863,102.05421009485676,-145.68508117742959,85.340892555684292,12.258730042437811,23.994932163173928,-50.802457668212753,-121.06915379993359,240.65136200079712,77.179164765183302,29.566261195528796,-121.72703766287222,-144.41551794428921,285.41812447627387,23.003586836753684,22.019548290188791,-310.90065376654979,-134.22906922181218,195.04812961419918,16.424931333037989,185.90362108980383,70.006634956481804,82.568947309860789,85.23097738215688,-111.7297672259195,210.61420908420331,-17.54319607640576,36.548585630556161,-134.43898253530412,57.468582139072865,-220.16376324709265,-178.91739944857173,-43.673685638116773,-36.247288419979959,55.939526423812119,-156.27781847470601,-7.4368263781878738,-137.47839431842129,41.991593937203568,72.726371171514899,19.988095522203238,42.896671759501665,-69.557512920897139,105.38442307624311,138.55633147024781,-116.35547388516304,-157.76700382574589,119.72340605905367,187.47299461960205,-130.39348818467698,-60.993969519461459,173.87010994005277,-100.09766824135664,127.75805953700061,170.27931339096614,224.13311055950351,-19.495523517784918,54.253964981053187,29.259675389135907,278.91284196614879,-87.240513855651869,-211.81588212387601,-47.126908077033931,-232.88361314352085,30.745113389892566,116.10087126527807,54.100154004042423,-228.22296733869464,-44.782624968415412,-181.49408822741759,-163.50569329479359,-21.640016165401288,112.47594148791218,119.52102798559723,-97.674033948876129,-70.740440941064719,-141.91166105087342,133.94617486141669,-64.792471414044314,-254.9630793023359,-55.251780954293991,-148.02289744579298,-89.961526452109268,7.9994930073500541,159.17129938708086,45.322074857409831,-202.78530110867806,71.428695486105738,49.638293299207334,144.82666475911606,164.02478105455805,-49.088107638019792,112.89564849308272,318.12382820478263,32.132051595810267,135.96451765088705,-130.73012611543527,-6.5840573243564364,135.72938427833148,-98.774995104165043,7.017007330174124,115.79163812813931,70.823237787679133,-133.18462060100549,-22.418504480314738,418.14319349140254,231.76379191196196,140.34231562952937,-99.556427584932464,-5.2474704446535725,-186.76647774329945,-201.8204999360571,-80.901678241815645,-30.712996531029788,-100.80049349372763,209.5588695809877,89.343296508215332,118.38058928142453,55.199996221234954,-204.24931878523216,116.41170815192888,-108.32812412106824,-20.37475595032242,-32.127209480856074,16.359968712759958,-30.794300365319828,40.26645176079203,-107.60956200099525,206.99629104515617,73.645951289509554,85.220009459552386,254.08528484871712,-88.456347098136149,30.762912213456531,-140.09088409731066,-137.21978779194521,-108.47247889975334,-55.162910725890242,53.807377440594557,-47.017002038453576,26.390058449361021,-153.20895839027594,79.101227305828786,239.59921337999333,-57.501782350912343,6.1065520363018848,46.511454120881609,81.584147886446516,174.98303540917627,131.01603124957057,-10.486454007793785,18.691657951285904,-18.801624598714341,13.78195883378261,81.52895535937796,-79.403533772557694,-147.44788317581126,-78.949463081179971,43.734745893055447,-187.71099485374936,-106.84804826552229,-72.376987547762823,31.397593399894703,-118.12898632639944,147.27368118061207,-116.77649512535987,105.16782781659377,-87.032609895203322,-162.51738788536181,155.44387876332888,-250.82736143119502,143.1631338950906,13.405888511888577,-23.860651205073168,57.598170090761087,142.274470957413,-96.486296823589413,113.26363137194753,-111.69696918027856,-134.79341543798526,-36.134582271709604,141.31587918883486,-7.7056404898686068,-62.672282527334097,-54.336160407090304,-97.14720990739103,217.36274099273265,42.394527695770122,37.481783911436168,38.791786756181189,109.16998561823503,-272.8763511101821,40.217185650270771,-31.594961765802637,121.42462676076482,57.233667137064742,169.44286674903742,-156.89683645937549,8.3789109092254677,-157.31016057923392,168.89064225097425,-137.32384548331322,65.297904363767628,54.823720094667621,182.51486029280525,134.41086279008596,20.512925156150956,-82.05222744121545,-205.23393651448646,-22.473170069380117,-54.184698380928069,-218.98641834772985,78.429174594595452,109.19131950580132,-181.89238370659891,41.401737107956691,107.56674093196899,-55.34743915163304,225.53777697383171,-73.236736473359656,28.986863872657722,-154.61473059864619,162.25658614796345,325.8271757386089,-42.368089324532349,-78.160705232958904,-160.66414530189897,-83.636564412521039,-27.214956533110652,310.51733863943804,128.18464656952904,152.63295717544227,-115.2948631407957,-71.057865814507323,-93.69888086681965,-213.71962937921626,-229.97204548885978,-43.617041575030903,0.14267821132679614,-69.842425064367518,-8.5897027428662867,121.35091706600403,115.0173075694466,222.62590380385677,-184.42144992509762,-195.33362981404915,-3.6312742891265177,-168.45386400841437,97.382631300611507,-133.56585712541437,42.077487108589921,-208.86826329611699,-41.044935255839221,12.427271771519834,-66.373825952118153,-208.38199261589222,-121.54686901065446,-340.19882003351415,36.452672713446077,12.347924777106329,86.357477151872885,7.1199948975249896,-173.78097097050761,-94.54004965164755,-137.76959023597141,160.69544993509956,204.8777695271026,-211.01964888456854,-466.84985435610002,100.10563438462223,-106.8972284763783,207.73957632839148,144.54303696964791,-278.14388620668763,126.24938245704547,-242.4482065572829,-48.622047098746307,-214.76497639103718,327.94591206201881,143.30611198329481,99.132717522087788,158.25160817368302,-215.29881808272086,-28.582833449044571,-320.02415152014009,-32.381229628299941,154.13240993582903,-53.00898064793131,-79.729171259177619,-106.72965744715468,-56.552986003303545,75.492942875320409,-122.66559913815431,268.12792281151241,-205.83171945343486,-112.72826928402259,-19.286359350955692,-53.124604792564298,-163.76692938087115,80.010647183828553,68.7754784611258,-39.807537109600219,-130.7921284779882,-85.633057426979178,280.71755691988278,-58.890767295941501,-102.20431830430343,-11.490062140080965,140.77902530068002,45.250493325192309,-76.628806429167412,23.638830563682667,-56.122672549246779,-66.907619335068404,-79.280622237934978,-110.50378571422219,-60.629233856386577,167.5845299233207,13.930830680001907,162.36133762270978,144.24765018339195,235.25646969059011,76.967183989847996,-205.55396913692135,-67.48714888026602,-107.23000669414982,-77.165113676618375,-291.60793311713888,268.22551093642642,-101.29836753834991,43.138334834553042,116.21548792097011,1.6337471056170081,-74.865191982970401,-35.868437772051784,-131.12932476497403,-51.846125677115992,-120.21453314250223,121.0134397706023,68.521566649995208,176.86842197163543,46.593401861882569,262.06942800843689,-125.18197164972887,-108.50075309342327,-168.17192657217402,22.859771651641331,-29.455414283519502,175.24670771048955,-0.85768953806486437,-20.127608642320752,-181.9656470715436,148.1489606897193,-54.131984241539527,-57.147800404657588,175.5698863068788,3.4905018470435323,105.93416421160865,-30.154237015863181,50.380976151963516,85.039906559865273,-16.205059723698014,-29.525758155792282,148.28039106809206,97.243726097134683,90.579310179760512,102.03293277116926,14.320142539567701,52.086130269658618,-248.17337472422471,195.29335916206128,-172.12862174910697,79.426462550349299,-179.51436639097579,-151.07654350584767,-91.640596078265958,-135.9879628571548,95.665938500919367,86.898638570385089,-60.26547224846523,-87.612088998737974,165.93800606224036,41.654857626317401,-172.67446574553901,-12.875547545558895,-169.02845640666337,65.46779559670432,37.030006128164302,-52.376118927463928,-20.900142291568457,126.4311244269032,7.705424114198081,17.67734198866339,132.07579451315658,16.248029649406931,-274.61380324355929,-199.56986916286624,-72.196835335344076,-547.7879535779357,70.840212074631765,-39.957824158911791,-12.057235132341908,-286.90566716974962,-34.864797429060232,-45.864009123445655,148.05752534513243,80.029342127783693,64.787552937064589,58.221594730832116,52.312054868350486,-78.030844008262648,-42.132674625892307,-74.074209622855051,-68.931849899004959,-77.18645895954316,-8.2103258803117249,275.92577680902781,49.280695808389908,-49.778759780575946,-30.576968766383779,69.132948682977343,-224.69994955180084,-30.362192379933809,78.28964595077305,-28.515340703698577,-13.314184114247126,-40.809660100554922,17.768782781567477,-50.238703038259182,-190.43695474346202,155.20320234678422,0.93539168556711161,21.178776153769661,-96.810133728347395,-61.010957434352086,136.05241168817395,-10.506691713479945,-170.57267154423212,-62.243472041352327,-80.228289848436972,-7.5406717969980974,-42.333430988834181,-119.85903133095697,117.11690312364519,7.7617351317046825,21.698727156093174,244.9050734658606,-353.90412430278923,142.8676216270498,31.806101659485364,-3.7963071600692544,109.14662174719217,117.60249235629246,-16.656257436499288,-111.72954287897063,-44.313806502107894,-19.221717731195028,-22.127484995326654,-6.4024988277425265,-66.928466766044693,170.70738319342064,244.47703784039564,-50.570859238902038,-75.585207820979804,39.737859753051893,-32.772350455329807,-110.97358626194435,73.695364819308466,-38.182638537106641,94.45675916951113,-28.75022937760793,26.942764727701515,69.786346627802473,129.7070316979553,-42.120323526665359,134.77776663299531,101.30629720583546,-8.0548267616205038,-18.584682480220035,176.72465609780403,22.968986252682299,-113.92488587020063,-79.056047648767304,48.220920003614999,-62.236645591279604,-117.16033636546996,-367.10828912140892,-171.07188809758134,-120.68068565024282,83.267071854728002,85.537254722587903,256.60064030368352,29.060115125343515,-69.816248907680617,45.736885518512544,-127.72502496069995,-0.9710145633530658,-39.157255946078024,-179.08583166331823,103.64623235521697,26.30488436567893,-166.63157020676533,21.267693760429239,-83.397236641306222,59.781325967670078,256.59638244452321,-82.669675474226636,-279.90862763368693,50.674968325445391,-49.367045387191773,-180.50302044682499,-35.949916832365517,110.64917858469525,83.123715356353244,-4.5921864227263569,-258.45700308432419,93.8860439994247,-153.15364990486188,-125.73866024419551,-113.34269969178058,-52.247218707135985,256.92737566864935,-59.978007759165791,157.64084901528548,-149.86097942137337,-118.75246314509111,-117.46708895430601,51.42589169920285,-49.897567580131806,255.62209089901407,-17.226591237948767,-263.53634805606964,-179.09340852696255,262.39455719797854,34.68227373083019,-237.41523759363756,287.70388980236669,-23.043103444815216,-16.166903043606258,13.840009325391648,193.44360114868459,37.569804047880261,94.542494177735733,162.26831141087587,135.58489477098172,89.094582756593908,224.08475379187962,147.58201842580667,35.760043371844894,126.76526799927703,25.067777728350784,-99.713399140030575,123.48776174725228,49.981732421358835,-236.66025599765783,-2.1265080576351707,-14.337642540602538,72.436856874239595,-241.04443231333786,176.85732064343318,62.338027946062397,27.258782128246093,-30.099721173168426,227.06787003576753,15.928592255982565,-110.16273545159146,-17.651296834714287,70.639848102653616,230.70294377008281,12.508801772640012,-232.7731704651051,-87.392983024225103,5.8530837653198908,72.501369202744868,-80.928405452568157,244.17199232047165,-79.760224918210554,207.9031404844948,-115.79580409545073,-2.6819939029479514,275.8822400824593,-99.24497362736966,-27.244308845478741,0.28784099706348343,204.97135669486136,102.74130605052495,316.08037176324029,-140.81246618550111,88.919946152664352,112.96842864776822,-65.180725197239141,54.877787789675523,-174.82784582809435,129.96903857793262,162.62690540471536,-1.3130493078006253,58.711417695013758,-107.62887257362529,131.34218657712205,-106.14187284717087,100.77745293402916,34.510136884157831,-182.4860584622464,-142.10188739869932,20.297925905670034,-90.873767903394366,20.27202913235017,5.9914709846349687,64.853331954520243,147.27133017951616,-65.224143657273956,-8.2828492744265461,-59.536627136431974,135.90215374633948,-61.092393027560469,120.07598425200823,-71.574327801720301,-29.916291163002455,-61.339422511735357,-125.00469113895575,112.84614230706225,-58.582606850266444,8.1804687595139001,0.69226268392286272,-155.98180730054153,-77.232114016349016,42.843636025100821,-59.678172848726504,-153.14878975069774,8.6885516098154199,65.49325997496085,-14.488192165859189,255.77730632392428,13.221664018297435,-260.02825762973305,127.93485353128467,120.0434737847082,-71.074524706506651,219.22539442261308,-7.6885750124107801,103.84185590194645,144.10705967650506,-8.6966750940006747,34.58842371075373,184.50552741987002,15.847344671231767,51.040879046897771,136.31891568784465,-89.105256717138587,108.78319301222564,24.515185589563757,16.664620922994104,26.039558372734326,10.583511150787729,-28.29633440364676,-52.624847334712676,-170.95286060299256,140.71191337970654,-38.677161213691853,219.80651194365677,46.627683232396308,29.329608884216299,-89.449611597543992,6.4977138866157986,112.87893924568542,39.284327324438465,29.821197617337312,35.958745978424815,-16.365675225461288,-0.66730193719567588,24.632308404409621,-78.322862303232142,-128.17119251287022,10.349685856097231,69.91105980474488,129.7242454560473,94.978918506999094,-18.421147419667243,-117.10694113148853,53.145476213036972,35.793792138359265,184.90100398386329,118.2108750310056,-136.22604715192085,37.771119882182035,-161.48603668980752,-84.554938018000414,86.939189599462011,146.00729967412477,122.86969862195161,70.536250344130323,-111.50993995782592,-92.992658075505943,274.38803629214044,-160.05560629585437,129.72296757386596,172.67882457874987,-89.660948373048072,41.390850910350999,-194.3387527149518,96.573342049011316,-5.7498993382255037,-28.127818647130272,39.565850375117506,-219.21734291649648,32.484970742026356,-56.715828228839754,-245.50615953057823,54.765045528180707,80.929122440468532,154.96538115415129,-225.31588309260769,-85.194692634659546,-64.935019532191987,25.821550372713808,314.6253645875974,-112.59867511819243,-135.78307154012435,22.720173264350741,-16.152253029512259,-158.84638764200145,207.4191148058427,84.697842589676767,-3.5540219427902677,-98.678248013957202,-39.341581594033173,302.72208820282151,-89.644233050050815,-8.82334695553876,-16.761042373257453,73.412004742880143,-45.03428407038524,63.460880336251165,-413.64383938144761,-109.57530263005134,17.186832404633236,-93.760307544031406,-37.76730369064218,-176.62242192049337,-58.046042069563796,19.672625225043802,-49.288914372219232,127.29009891293462,-138.21451717154815,153.02220042083542,14.326800358596984,-46.274329431588896,88.447515557143277,-89.009181023549502,30.385595354149757,69.963626130528638,61.066538566086479,-76.759598731019537,81.426223545975148,-99.864032456635627,-5.3579003295708816,-226.52658222415278,-13.203467640804945,-115.2498161979951,62.680549095962533,-203.19113734004227,25.541357982817011,22.338747469450091,201.33353024908004,-75.794335047532229,-299.07792308191273,3.4062456905466263,122.69534380943519,-133.07070233677175,51.64384720999611,-46.169048513643446,15.216013556119613,-30.4304947891316,8.6697304597151046,5.4824199753194236,10.466240315513957,115.61847999190591,71.457591320350986,-112.42602129621719,16.385863105940491,196.47722939794897,66.976383257689903,199.19893517732282,19.740987093867517,-27.825388154098341,168.67113731968374,-154.79693704332752,-52.871300084101279,-92.928496389174995,-68.404780125122812,232.73487994980621,209.09434873483227,-83.104034544681753,-90.903210528370323,117.11117140878952,-101.05099186879083,-10.999912082629024,10.555401346067718,7.358326783877061,146.48281756345403,35.192783112022823,-41.54328671991685,-183.62133684035683,-30.576998905486548,-47.727889726524943,-126.15503071296334,57.432645040885404,44.118833262079995,124.22212521980251,156.57746230426022,-344.93012542616879,94.571123681596205,-104.8210708561279,-71.308182963452538,41.620819685293668,148.95551027645854,-129.52740785637491,-41.383302751998947,-54.47615672968999,51.670993474174196,-237.31049679748298,90.463524918717155,131.60976575294941,28.270845906350814,-107.06329715998704,-62.314852288764982,-73.461381890077277,153.12981602437893,-108.42664682110336,51.759012000953405,1.1732388361228914,71.974871697980632,-78.357247452086682,-89.907435138932897,22.045876466803492,1.5418611571952923,-170.8782523985862,38.669774624489406,-46.788513931760818,-28.963012668672956,181.33351505935363,276.12825272751769,37.079238934893198,23.912148267211698,47.173080153605554,44.937997669564311,-171.75371482789583,149.09274615245863,29.672688761751488,209.81183766528824,166.14030858756445,-25.479861743096642,43.474936437922835,-10.389006337526894,61.931143854680052,91.182930541616486,-167.43806843392554,230.74156837741936,53.812616977000943,-284.50143837480863,-9.085902401017421,204.20495265911342,-84.528287856172426,-100.65806644142847,-27.128800180770405,51.055357936286427,-125.35787399467358,-3.5790457084238714,98.092196014239022,231.07367225288735,-83.609824038232048,-190.49046077558057,13.000200138921606,42.866714878586741,-25.911835708370347,61.034160719932025,124.69419113853519,-162.01277867722769,219.35440279951303,-41.948217562157573,-20.579445803850689,-54.621340582447104,108.37345425287734,-120.79075141248485,-56.653068688773978,-119.54492239625867,-184.46966650484003,-87.275072806589122,32.669077128144011,-145.63257370319454,-237.96809701621169,-116.402512588592,83.239453636417267,-45.759165659546852]} diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/rfftf/test/fixtures/c/fftpack/medium.json b/lib/node_modules/@stdlib/fft/base/fftpack/rfftf/test/fixtures/c/fftpack/medium.json deleted file mode 100644 index 6f956976e745..000000000000 --- a/lib/node_modules/@stdlib/fft/base/fftpack/rfftf/test/fixtures/c/fftpack/medium.json +++ /dev/null @@ -1 +0,0 @@ -{"lengths":[123,80,26,29,73,68,21,58,26,115],"offsets":[0,123,203,229,258,331,399,420,478,504],"input":[-7.8569456655532122,8.3142158109694719,-2.9747217055410147,3.8523499481379986,6.445686761289835,-7.3424742929637432,-4.9654210451990366,6.1685327347368002,-5.47020073980093,2.3362016119062901,4.5405878499150276,-6.3398926798254251,5.4237588122487068,-2.8855218272656202,3.0347048211842775,4.2840316519141197,1.7200855072587729,9.4772122148424387,3.5058472864329815,2.7754487749189138,6.9676600396633148,5.4624194093048573,6.8831331934779882,4.8197149112820625,4.9486298952251673,-8.3772339578717947,3.8288827426731586,-7.9676356632262468,7.947424054145813,-7.6437815092504025,-9.0358075313270092,-4.8171714693307877,-2.2008444834500551,-9.5931723061949015,7.5530529581010342,4.1612041741609573,-2.6413340494036674,7.0986892562359571,7.6704633701592684,-2.5219994410872459,-7.2445478290319443,0.88465902023017406,8.4642381872981787,-1.5486415755003691,-8.0188932921737432,6.4604539331048727,0.84938251413404942,-4.4280000403523445,-1.3966345973312855,6.7623899783939123,-4.5115019474178553,-4.8131872992962599,4.7611013147979975,-0.17008666880428791,1.3534343335777521,7.1709332894533873,1.8759302236139774,8.7593612167984247,-1.4158824551850557,3.2636428810656071,-7.9539941251277924,-2.77924501337111,9.2291167750954628,-6.2342104781419039,1.6245233360677958,3.3638002630323172,-4.6088746283203363,-1.3558359909802675,-7.5354327540844679,-8.0182786099612713,-3.2085821125656366,-6.6395127400755882,9.7094038408249617,5.950506990775466,-9.8288812022656202,5.9936348535120487,-4.9788918532431126,-0.23533816449344158,4.6715457737445831,-5.3300658520311117,-2.4167385417968035,1.8753873649984598,-0.36446353420615196,-5.5385439936071634,-6.3088656403124332,6.8952121492475271,7.830724623054266,-9.0111207775771618,-9.9069010000675917,-5.285107409581542,-6.8001959379762411,9.1068954672664404,-0.40773211978375912,7.2463378589600325,9.2005305085331202,-6.6835928149521351,8.8555850461125374,-4.1819824185222387,-6.5784625709056854,-4.2204024363309145,7.6962978113442659,-8.3225462399423122,2.9653584118932486,-1.2210698425769806,-2.5207754876464605,-6.6735623404383659,-2.5622297171503305,-3.3947979379445314,3.6311086546629667,8.0432655941694975,3.1649824138730764,-6.1404670029878616,-2.8288890141993761,-5.1376055274158716,-7.7360612247139215,0.019013946875929832,-0.43251644819974899,-9.3038700148463249,9.8566659167408943,0.98421806469559669,1.753099299967289,4.3400265276432037,2.8259623236954212,-4.0511252731084824,-7.2624185774475336,0.53099025972187519,4.3533775582909584,7.2167345229536295,-8.3427379745990038,3.6028738785535097,-6.4986166916787624,-2.2507096454501152,-7.6769504323601723,-6.5058984979987144,-4.6360285207629204,2.2686935123056173,9.9319573305547237,6.4070106204599142,2.627626471221447,2.5182006414979696,3.3982796221971512,-5.1142848748713732,4.2141462676227093,7.1564311720430851,-1.8611572030931711,-0.46904869377613068,-3.3013217058032751,-5.3138570114970207,-9.9947555549442768,-1.8566119112074375,-4.076327932998538,9.1564764454960823,-7.100230623036623,6.4239413104951382,7.1817340236157179,3.4038693737238646,8.8326690718531609,-9.3307619728147984,-2.1164718642830849,8.4574386849999428,4.1721232421696186,0.87544205598533154,-6.4452799409627914,-5.8199399430304766,4.2694101948291063,-4.0227438323199749,9.7444569692015648,-4.9115641042590141,-8.6578604578971863,7.3392946179956198,-8.4752196446061134,-3.0165549647063017,0.76076283119618893,6.1409881245344877,-8.4124646242707968,-8.2929276954382658,0.76423612423241138,4.5166242122650146,-9.0967508498579264,-9.0915264934301376,-1.285767974331975,-9.9022763967514038,-7.5593994371592999,9.1736787557601929,2.0189981162548065,-6.6985660418868065,-2.7994401566684246,9.8093432188034058,5.6316334567964077,-9.1363692842423916,5.041446490213275,-8.4087212663143873,-5.3783104941248894,6.7355614062398672,4.5806856453418732,7.5837553665041924,0.1765824481844902,7.8212862741202116,-7.6414513867348433,-9.8734383936971426,-2.8790818806737661,-8.7291127536445856,9.8019594326615334,1.5323397144675255,-5.9663286898285151,3.9137416146695614,-1.7445733584463596,-1.0443708021193743,7.2599988617002964,-1.1989963240921497,8.4688498545438051,-4.0403501410037279,-6.1647732090204954,8.6567059997469187,-6.7421162407845259,5.2523666247725487,-3.4740180801600218,-7.8218221757560968,-1.3652908895164728,-6.4439125265926123,-2.8378066141158342,4.9842926021665335,-8.9941181149333715,-4.1431498154997826,6.081096725538373,4.992791973054409,-6.1451915372163057,-2.2341358289122581,-9.1208157502114773,6.4496930688619614,-0.0084629002958536148,-2.2358870785683393,1.4459312614053488,1.7668000143021345,-5.3920675348490477,-4.4790221471339464,1.0748163238167763,4.4380410574376583,-9.8438346479088068,-5.328926183283329,-3.2623258884996176,-9.9111552815884352,3.213183032348752,3.9673280902206898,-1.1166783515363932,-8.012984748929739,5.765340281650424,-1.9257629197090864,-6.2973283603787422,0.80227608792483807,3.8542942889034748,-0.87577797472476959,0.79965020529925823,-0.27891501784324646,-7.7246288117021322,-7.8364204708486795,-6.718836622312665,-3.4870855323970318,-7.446492025628686,6.8085452355444431,-8.7800946552306414,-7.0508609153330326,-3.8193809241056442,7.6648569200187922,3.2503930013626814,9.3552775960415602,-5.8492918498814106,-9.0480884723365307,8.7770528811961412,-4.0720787830650806,0.57193941436707973,-7.4141799937933683,9.876864543184638,0.46253286302089691,-6.2100893259048462,7.0287291705608368,-8.1486971117556095,4.8476572055369616,-5.4252303391695023,-1.846274621784687,9.662495469674468,-2.4384872987866402,-3.6559715308248997,-5.9134689252823591,-7.6721952389925718,-6.5853635314851999,-0.20484695211052895,-2.8626474644988775,7.4841200187802315,5.6052924692630768,8.1506530288606882,8.025598106905818,6.2275238335132599,5.9931968525052071,7.6596252154558897,-4.6788656245917082,2.3054891265928745,8.3558469451963902,-3.2802484277635813,8.8647271599620581,9.4695251155644655,-5.691230334341526,7.4918044358491898,-5.2427097875624895,5.7766376622021198,7.9493120964616537,4.0885457023978233,-3.8122695405036211,7.1858811751008034,-6.8949555791914463,-3.518395172432065,6.3323876541107893,8.4394304547458887,1.507797222584486,1.5480100363492966,-2.5952287018299103,1.9912662915885448,7.2126565687358379,3.1190854497253895,2.4692562036216259,0.78911185264587402,2.6029918529093266,8.4841704741120338,-6.546696936711669,9.664611704647541,-6.8709260877221823,0.3452681377530098,2.9216721747070551,4.5443414244800806,-3.2535649370402098,-2.6658440381288528,-4.8406914342194796,2.4991054460406303,2.4653294216841459,-5.2083121985197067,3.8969169743359089,-4.516303576529026,-5.514167807996273,3.381686108186841,-4.0014749765396118,7.2101162374019623,0.42373670265078545,1.7428430262953043,-8.0371651519089937,-0.63469277694821358,-7.2814288735389709,1.0249437019228935,6.2288844957947731,8.8618478272110224,1.076579550281167,-5.927411736920476,-2.0090305525809526,-5.7764346897602081,-4.5377977471798658,-6.7666941042989492,-7.8277856484055519,-1.5933757554739714,0.13374353758990765,7.8277155756950378,0.41582022793591022,8.6906524281948805,3.7955069448798895,-8.9146694354712963,-8.8491934724152088,-8.3946818765252829,-9.4182861968874931,6.8638934567570686,1.457459693774581,-4.4748370628803968,-8.5864725895226002,7.1551989484578371,-2.5711390096694231,6.8667226191610098,9.0071922354400158,3.880049791187048,-8.0030508898198605,-7.2762895748019218,7.401137612760067,-9.0800061542540789,-7.6634273491799831,0.77656061388552189,-8.3456780854612589,-5.8115694019943476,4.9530934542417526,6.6418024618178606,8.7741060089319944,6.3998390454798937,2.0949657261371613,-9.9109461531043053,6.7280054651200771,-2.412016810849309,1.2335194367915392,-8.238737927749753,-8.468337906524539,-7.3551829718053341,1.4398135617375374,-1.0533783491700888,-4.1298444848507643,9.7037890460342169,-8.4173490945249796,9.6137806959450245,-1.1876897513866425,-1.5015825908631086,2.9014618694782257,4.8697412852197886,5.7418970577418804,4.0639726631343365,3.1886593624949455,-8.2019913289695978,9.1317480709403753,-2.7100219763815403,-7.3392999917268753,8.3850598614662886,7.701235543936491,-5.3340745251625776,-9.7905078902840614,-9.0661103650927544,5.883101187646389,-2.7182149235159159,-5.0381625443696976,3.6021556053310633,1.429365249350667,3.341835280880332,6.2256701663136482,-5.1613877806812525,-7.44439204223454,2.1029661595821381,4.5523388125002384,-8.8414644170552492,1.5075516141951084,-2.5799301639199257,-0.88620693422853947,5.5201277416199446,-3.2129251305013895,0.36738477647304535,-5.3639806807041168,7.5767356809228659,2.1967268269509077,0.38787601515650749,-0.96773196943104267,-4.6711395401507616,-7.8422096092253923,-4.0168853662908077,8.2076955679804087,6.739553539082408,-8.3235376328229904,6.303018257021904,-5.1720266416668892,-6.2517287116497755,7.195572629570961,-4.0106802247464657,-7.5024904403835535,5.6431880127638578,5.0610529445111752,1.1169562675058842,-7.3159250244498253,1.2481350731104612,-2.5937382038682699,7.042065542191267,-4.0042990166693926,-0.25352624244987965,-1.0154805798083544,-7.1820345241576433,-8.4542254637926817,9.8326421249657869,-2.7836504857987165,-4.8136583436280489,-3.1557407695800066,1.4649392291903496,1.2337147258222103,-4.9565151892602444,-4.1507464274764061,-1.5951608214527369,-9.8678603768348694,-9.1293524298816919,2.9737177863717079,-0.72506291791796684,-6.1323888599872589,-7.0595395378768444,-9.680990083143115,-8.4003248903900385,-4.2604202684015036,-4.8834061063826084,4.5936100650578737,4.8044776357710361,8.8557402603328228,-1.5732970181852579,-2.4029186926782131,-5.8544083870947361,4.9582705367356539,-6.3469720166176558,6.441345289349556,-0.30959323048591614,-3.3333489391952753,-3.5955688823014498,9.2738452740013599,5.5176709778606892,-4.5037536509335041,5.4124317690730095,6.7408634256571531,-6.3082739617675543,-3.1604465376585722,2.3750950954854488,-1.7766333278268576,0.12372356839478016,-0.57790676131844521,7.1211362536996603,4.9371499195694923,-1.3211848959326744,-5.1544780191034079,8.6879708431661129,-1.2738926522433758,9.6862620301544666,-2.9939051251858473,1.4366158284246922,5.2023178339004517,-4.6440466586500406,7.5078499782830477,4.4347220193594694,-5.6269076559692621,8.5630603414028883,-0.64469676464796066,4.5815497729927301,2.1071488037705421,-5.1499602757394314,4.6176835987716913,9.4083589501678944,6.2890273611992598,-0.317012844607234,-8.034803532063961,-0.94294802285730839,-8.127349279820919,3.6406686995178461,8.7189395446330309,-0.78292685560882092,1.3484099134802818,2.7255046740174294,7.5571557972580194,-6.88237807713449,7.8716819919645786,-0.64062118530273438,-6.9201881345361471,-7.6019530463963747,-6.0248320177197456,0.64830929040908813,-3.8656727597117424,9.63797552511096,5.4548042267560959,-1.1052399594336748,4.2320714052766562,8.4242198616266251,5.8633585460484028,5.4672075808048248,7.3579316306859255,4.757052781060338,-8.2137932255864143,-9.2227284517139196,-6.3970818743109703,4.244966646656394,5.1545418333262205,-7.615288682281971,9.8431355413049459,-6.4208019897341728,5.5809865426272154,-0.35905612632632256,5.3437602799385786,-7.4208549875766039,-2.3097560182213783,-0.069338064640760422,-5.3647746983915567,-5.7683195918798447,-8.1473476067185402,7.5287883728742599,-3.6536799184978008,-7.3983405251055956,-3.9091850910335779,-1.6737773362547159,8.8243747223168612,-8.733894694596529,9.4318778160959482,1.5706072002649307,-2.8046945948153734,1.4980012457817793,-3.0929721612483263,-3.5830600466579199,-0.49015396274626255,1.9824225455522537,-1.4241831284016371,3.7542280647903681,-2.688807426020503,9.213648084551096,-6.2164925783872604,-0.59073534794151783,-8.4889192134141922,6.7347919661551714,-8.351293858140707,-0.19586087204515934,8.166400259360671,-7.3106987494975328,9.0861382335424423,-9.2745594773441553,2.4788699485361576,2.3673227056860924,7.5928112491965294,-7.6211970672011375,-9.459089832380414,1.0771914105862379,4.356124410405755,-6.6169219557195902,9.3927166890352964,3.3895443845540285,8.0725759826600552,-4.2153179924935102,-6.8494545668363571,1.2171198334544897,-3.8668713439255953,9.49337063357234,-4.9196089897304773,-3.8682506419718266],"expected":[-2.2085090912878513,26.237317848867761,-64.167847869611023,10.247914659448554,-22.69250263214315,-26.845502234815179,-68.984934119821332,-19.842035273387204,28.952150487738908,16.881098143406547,41.550940825134056,56.576834048434073,80.704958489680507,43.836408870892882,-92.463443632161443,21.537528903009026,-24.982085981226867,13.650962945253401,49.659374336614192,15.409559517730557,60.413807126591202,-17.814095648117629,10.588697806933856,-17.100957157325904,-32.787413012341418,7.380335616029182,92.816680860811005,-59.499306985813035,-39.629682186559911,-40.929987043008801,-42.094585481010917,3.5204714356974627,-73.566767445466013,73.519844488012552,40.215826513025881,-31.409088247058641,-29.144368578114864,-25.522723894937858,-30.952237310449863,-17.300551551318158,51.456371273476279,-58.878406022784418,19.038054149306248,-18.166391325799147,-13.223629739080188,0.099963984712452714,-26.606478461490148,-5.2643007261751933,-18.269548226655125,-76.243198682230471,15.401094501464838,54.891026576925739,-27.452540563134935,39.316034302746118,41.517068278095508,-47.642409732579253,9.5439485131564243,3.8322256364611809,10.287850622704855,34.375793857707052,11.682273271755871,-61.838815540722251,-1.8144597344861992,58.638316374830865,18.536386522966648,30.005612803781652,-25.830322916351562,-68.883813264466795,50.460454435348097,13.025335077869505,46.194906598539106,92.360406491524714,-80.473807892709416,-53.934804486230107,48.222155643373704,28.601935470177743,5.6314600530036927,-40.324870045693203,15.293622829954334,-60.824859785677511,-53.500163832142235,-47.270525591447949,-106.86021624839698,7.2690047568626781,-11.295084848416511,11.229681086675942,-44.50196777956053,-35.555847666995795,-75.074929010657556,-138.84188126799995,-67.729867119648191,37.2159028191262,-62.10884059197371,-22.981849557091437,98.662345965897529,-38.399304701147457,-59.155492916379629,-0.72167177501114566,55.648175041627823,26.6039246778261,-9.0903074122367613,8.9304842572320524,53.820839202461244,24.828073551071562,0.51518630672157162,-7.8531187564510416,-58.831343257502652,29.055950698559485,-12.793983925003067,-66.972661293704377,45.970655290233182,-42.086997329215336,35.901936187090897,-18.747241894091896,-4.2515530200741285,13.694806980209137,-57.767471986903267,-44.914467637981609,14.281909891380147,-44.098668956705303,96.26145304490916,-28.160305690976717,23.858421773710781,-49.653363227844238,-0.68399244226584077,-39.56657555198715,1.7529709761888519,43.336195896606462,-61.860041349640028,3.1213346213609778,-16.74450627186598,28.505071549427619,73.29252792519199,-17.068705043240097,-17.603882048152371,-56.926375191779947,-42.507952183334048,-43.330627509676681,15.707337066746323,-80.290383056166959,0.93006898714275898,-36.316022651103509,-9.0881341028993088,40.407232756117381,54.018553930455141,51.721205801574094,17.769080442605624,21.351386254072718,22.365393323933599,33.163194753297056,-91.958575863940808,-3.9826727703467686,34.163808450400701,2.6702790456768479,-10.141078171917719,18.316989937705241,-8.7488694902422246,93.718493020319869,-10.095921547904002,-7.8111555506780164,-18.374773701754357,59.055045883975247,17.085918402299285,-3.0307211633771658,35.265025352882553,14.693360453945935,-62.496132694187082,71.031325981541102,-52.591212061759634,-43.855388700089151,107.23439895340144,-2.3161255284725684,31.279360192029309,13.460813399668391,25.261488519215028,25.571100305789784,-23.520187894549881,18.300335947770826,7.6301100358878919,20.280356400407104,18.524205860084773,22.710379608207738,-27.254558626186373,-62.352172692915403,22.713274633225893,76.667007509504245,-10.875067977568563,-10.512983957836454,-53.944876584309959,87.937239156658279,-59.757676646477861,-1.1852542157813346,-44.511653675165945,-5.0177338786954806,-57.418340766959126,41.840756773377684,49.712603016137678,2.2239546954885068,-10.771329405078415,17.303882963562941,-0.14496889002263291,15.279721445511948,38.338554035872221,-28.33958612754941,5.1289939460762826,-22.389722317040107,-25.114869010485499,4.9897114739528163,-19.288379516304225,-9.9003606931911072,-3.8708059452249177,1.5333754073594559,13.048897502579214,-34.590895720664989,12.215570646511731,-2.9444290061001954,1.4608028635786408,26.649217843445264,-13.708215465569383,5.1283895522256024,-16.615712098852313,-28.364575766626686,26.911484159514757,44.493140078492345,32.231428989325238,-24.935509889299347,5.115719302026803,-11.358734773856721,33.1505879573524,-51.158746760338545,-0.10246840256324319,5.553890893451662,2.6208884740111626,-29.9787171050219,-2.2487369460096436,-20.60476189176644,40.66704037541512,-8.3813611685355554,5.0181384549518917,-12.5071286780897,-2.9418030334479739,23.335429687579982,19.960921034873575,2.1726729389608597,27.130907683236046,26.490475249904243,-9.8817449180249728,-45.417210624868844,13.521418004159965,9.5823160223257542,15.080134471741069,2.2273683670500137,2.8989636065562459,-13.751849163458623,-2.9760595101604959,19.385803321646161,10.352323583928966,-10.0437665074317,81.41750562004745,-55.450782286226904,56.63893647397159,23.053660677289166,-4.7875041788294954,-71.049329563862273,-5.9626052906174394,5.9159915820481128,18.935649399035498,-11.811551573935791,-45.646319574168757,-42.251599437672461,43.989072888055354,16.23566937241106,-7.6179744494285249,-45.773814033041894,12.350038466122092,7.7912072248973256,69.227726491202077,-9.8761873202056591,8.4533962134462026,26.827825571979769,-24.891008820667349,15.52891947661054,53.068187319172132,-5.3884142001370314,-14.790719068869983,13.349801843920615,-50.654673752059345,21.363671354454635,-47.047652860902197,28.104573464000733,-31.507540837772829,-15.972535383816588,-36.475975375718392,-61.001059332408474,-29.371831520523394,12.793299307760032,3.2312979554035817,14.782042504736294,19.697442756820585,29.574117996565231,-39.990726983768369,21.002399557644083,-25.041582433563967,26.300034515450694,-8.7072394444958494,-62.150918965776611,3.2908822652876282,-18.997571353317099,-34.007085139902124,-0.63705432107137971,83.311174658260981,-50.688772847553068,-60.384098236329493,-48.141840004573659,7.4854926028273709,-27.174199881967933,12.105554670836066,75.880720100257363,-9.6035944561026358,34.693508474205657,-48.606735412860942,1.5988010253877862,-53.905830519770603,-47.508290306773183,45.797700939876968,-36.323544180569321,19.914143193965415,-16.755818399711401,11.09581015513915,-60.348672402469631,52.29244561094044,-62.377935349941254,10.183814950562541,8.100717127093187,-12.127939928975541,-16.65440481383839,-16.926367872734993,-9.1657543910838335,-6.9838953548543703,-34.120654811464327,119.59049877395796,-26.532250607798495,-47.505613452696423,43.202542296111446,23.813062287419626,64.185348166972361,46.936784981023429,-44.101459678086762,2.2429958499061242,0.025541637233965631,14.155474045490202,-27.111204636367365,-73.763668349357744,81.619719302017685,-17.503117824426155,-30.01938507418145,14.5787914175169,-4.3015146072859878,-2.1912379256402694,-40.148939491354938,15.808093831794499,21.640873098591037,38.465300492640324,14.560387544727691,-15.605808701366186,6.8269659951329231,1.6143423479861561,-16.109831055253427,11.884863374210314,46.252026710354748,-45.464442296977253,-0.89378067331452016,65.494333034572705,-33.840237074139651,-27.914281813273533,41.800339376062148,-34.952715936152202,14.195199916314678,-60.291815503837277,-12.256755609440571,-7.5251204362494288,8.8390760688496055,-44.340658543072045,19.273079017103775,-21.383709216401328,19.127656220574654,11.761604178211051,8.8589089172463176,-45.625400094271868,72.510636589602285,-11.448567756926602,18.27240143110285,9.2338541769087126,-0.074543685195866516,-31.005394246876605,-46.060717700834253,20.771593875040523,-43.29650268663373,-34.74038690328598,0.17565261572599411,-13.965589662271469,-30.671366663612439,-6.5924941721801584,-13.514142665023357,14.914230496391372,18.167176291253863,-21.301544198356112,-2.0833520650084099,-23.961320660406493,-50.420810535108785,24.510437526512842,-10.363214556594908,-28.841775236651301,-20.637081217777219,14.133013125764837,6.3569885825494445,-27.794987436856715,-2.9144507022449027,-19.569961582322087,17.863569713933249,-57.505097333341837,-16.88341910206946,-23.601918131758481,3.9106352795485186,-22.56144810419179,10.736355180571923,-4.2799887079082879,19.8479861796996,-19.699153811740182,36.53623878641222,-29.963017004320552,3.6626906058452562,2.3342326452540618,33.272741279806858,12.776330006609296,-13.457864697811354,-37.15832243774102,4.4262801731397801,29.508017586293469,4.6529281837512011,8.4826403683971936,-40.750782782348857,-68.066445925623881,-5.7437518739606013,3.9626989390135847,-31.607388230630171,-11.887494823751197,-15.245249553806023,35.646797543084681,-44.591021416346607,-4.8298671444138677,8.6595811097719686,-53.099366951627175,23.919829031064001,39.726719439924857,70.853938274048275,-10.992952525212015,-13.529303882776972,-2.3676915060683026,73.719086927618235,-41.325481858461934,-0.034910765240443453,5.2676125930631592,8.791715234078346,9.0134886965164611,-41.538708759764191,-14.039516808510246,30.895412671007058,35.686866812969242,23.711524774346781,-10.574511831669994,22.701326755170573,-12.292594076936254,-22.625582436868896,0.47377379653097051,-27.928827022211692,-16.679600791368181,53.707202598452568,-14.476545201614499,-30.350720961468671,11.134525935812015,-45.240498853382519,3.2231787908433729,-10.254916756851891,24.558141248667454,25.008661296409699,26.191811160921212,-2.9440251494707965,-9.7604155913286981,1.4018707225115268,18.782130927282363,-29.356453496010147,30.928163052559579,-12.919131957717468,-33.677561599568719,11.731764716184998,1.6567104791079998,15.384086405033326,-0.15103645714184033,-7.5979637772504773,7.3612712578933648,19.585022372525327,-16.88819963915401,-37.966871904209256,42.566117960959673,38.860927051000139,-61.17852617839862,3.1046270582899833,5.0384566506880262,-1.9337729309236593,-56.552661057674506,-23.472310948097871,40.7982558786765,1.5917117948157724,-20.335313584876165,-16.348570729064772,-21.990777141951217,-8.9769747959244555,48.050652010408605,28.884123742842288,-89.589641780379964,-98.013557077754683,23.589383216448756,38.203603325283126,-11.057650251438318,42.568125615111661,-49.928143703804011,40.404460584196073,-0.16824972017960249,-41.850592128976565,11.915071270365658,30.157898387923503,25.03858279253123,20.227685664071366,24.156246551180111,-5.3463904675169447,41.85981143369721,-3.0384512331387317,-65.505836472936949,-123.27011766775914,-2.4014730884486406,11.831173413997902,-11.532735257411534,7.3408877081501034,-39.467998636347474,4.4803537116640815,-40.136424070798043,-45.821476515624795,-49.47689628250469,-53.091801572822156,9.5163325383754085,-52.43826415737972,-27.930158012682192,6.4345000245140529,17.353729856777218,-18.860321782721069,-86.153170887378934,55.018926347098159,-17.162646996407506,18.619096218673725,16.567158838484307,-11.155446135235856,20.281961220956891,-6.5961462778592894,57.259287593558078,-68.304506309637674,2.5999948580621393,73.088055763505906,47.524254360593744,-50.511658914215836,-46.249442701148141,-28.011195266685842,-19.114942825685528,62.116813270306061,14.888239451454904,69.109072202328576,-19.168614658861525,-2.5602412619034958,-9.7277613546151791,2.1373854276240678,41.469028225422548,-53.701419606291012,4.548009981865353,26.131448919980198,-6.8327621605372144,36.407724647100636,15.348183968995087,30.158038606907425,63.634083523452617,47.127166023535835,-34.539227778194942,73.832870709740163,-32.85218084513285,7.004221816349288,-63.922198300301481,52.614565114721785,-51.38552493259126,-0.90823787997593364,44.98002704888038,-78.532396445297096,131.53861964154373,20.510041906319639,-4.0125112729229251,-74.837515011558509,26.620001034953617,5.5683599324587902,-33.389123590529707,57.084456972920592,136.33440007821901,-61.574636287223285,16.768822608060344,-88.72227841116019,14.03121397926836,17.455174793261808,-42.092391362578454,35.818004764740976,31.232942394250788,39.817824497534751,-28.551892805227705]} diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/rfftf/test/fixtures/c/fftpack/runner.c b/lib/node_modules/@stdlib/fft/base/fftpack/rfftf/test/fixtures/c/fftpack/runner.c deleted file mode 100644 index 83735d958f19..000000000000 --- a/lib/node_modules/@stdlib/fft/base/fftpack/rfftf/test/fixtures/c/fftpack/runner.c +++ /dev/null @@ -1,318 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2026 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/** -* Generate FFTPACK test fixtures. -* -* ## Notes -* -* - Run this script from the directory in which fixtures should be written. -* -*/ - -#include -#include -#include - -/** -* Define prototypes for external functions. -*/ -extern void rffti( int n, double *wsave ); -extern void rfftf( int n, double *r, double *wsave ); - -/** -* Generates a random number on the interval [0,1]. -* -* @return random number -*/ -double rand_double( void ) { - int r = rand(); - return (double)r / ( (double)RAND_MAX + 1.0 ); -} - -/** -* Generates an array of pseudorandom integers drawn from a uniform distribution. -* -* ## Notes -* -* - WARNING: the method used here is not particularly robust, as some integer values may be sampled more frequently than others. -* -* -* @param out output array -* @param len array length -* @param a lower bound (inclusive) -* @param b upper bound (exclusive) -*/ -void rand_array_i32( int *out, const unsigned int len, const int a, const int b ) { - unsigned int i; - unsigned int r; - double delta; - - delta = (double)b - (double)a; - - for ( i = 0; i < len; i++ ) { - r = (unsigned int)( delta * rand_double() ); // truncation - out[ i ] = (int)( a + r ); - } -} - -/** -* Generates an array of pseudorandom numbers drawn from a uniform distribution. -* -* @param out output array -* @param len array length -* @param a lower bound (inclusive) -* @param b upper bound (exclusive) -*/ -void rand_array_f64( double *out, const unsigned int len, const double a, const double b ) { - unsigned int i; - double delta; - - delta = b - a; - - for ( i = 0; i < len; i++ ) { - out[ i ] = a + ( rand_double()*delta ); - } -} - -/** -* Writes an array of doubles to a file as a series of comma-separated values. -* -* @param f file to write to -* @param x array of doubles -* @param len array length -*/ -void write_array_f64( FILE *f, const double *x, const unsigned int len ) { - unsigned int i; - - for ( i = 0; i < len; i++ ) { - fprintf( f, "%.17g", x[ i ] ); - if ( i < len-1 ) { - fprintf( f, "," ); - } - } -} - -/** -* Writes an array of integers to a file as a series of comma-separated values. -* -* @param f file to write to -* @param x array of integers -* @param len array length -*/ -void write_array_i32( FILE *f, const int *x, const unsigned int len ) { - unsigned int i; - - for ( i = 0; i < len; i++ ) { - fprintf( f, "%d", x[ i ] ); - if ( i < len-1 ) { - fprintf( f, "," ); - } - } -} - -/** -* Writes a named array of doubles to a file as JSON. -* -* @param f file to write to -* @param name array name -* @param x data -* @param len array length -*/ -void write_named_array_f64( FILE *f, const char *name, const double *x, const unsigned int len ) { - fprintf( f, "\"%s\":[", name ); - write_array_f64( f, x, len ); - fprintf( f, "]" ); -} - -/** -* Writes a named array of integers to a file as JSON. -* -* @param f file to write to -* @param name array name -* @param x data -* @param len array length -*/ -void write_named_array_i32( FILE *f, const char *name, const int *x, const unsigned int len ) { - fprintf( f, "\"%s\":[", name ); - write_array_i32( f, x, len ); - fprintf( f, "]" ); -} - -/** -* Writes data to a file as JSON. -* -* ## Notes -* -* - This function SHOULD be tailored to the input data (e.g., input types, output types, number of arguments, etc) and may vary from use case to use case. -* -* -* @param f file to write to -* @param lengths sequence lengths -* @param offsets offsets -* @param input input values -* @param expected results -* @param num number of sequence lengths -* @param total total array length -*/ -void write_data_as_json( FILE *f, const int *lengths, const int *offsets, const double *input, const double *expected, const unsigned int num, const unsigned int total ) { - fprintf( f, "{" ); - write_named_array_i32( f, "lengths", lengths, num ); - fprintf( f, "," ); - write_named_array_i32( f, "offsets", offsets, num ); - fprintf( f, "," ); - write_named_array_f64( f, "input", input, total ); - fprintf( f, "," ); - write_named_array_f64( f, "expected", expected, total ); - fprintf( f, "}\n" ); -} - -/** -* Generates test fixtures. -* -* @param lengths sequence lengths -* @param offsets input offsets into flat arrays -* @param num number of sequence lengths -* @param total total number of input and output values -* @param name output filename -*/ -void generate( const int *lengths, const int *offsets, const unsigned int num, const unsigned int total, const char *name ) { - unsigned int i; - unsigned int j; - double *expected; - double *input; - double *wsave; - FILE *f; - int off; - int n; - - // Allocate output arrays: - input = (double*) malloc( total * sizeof(double) ); - if ( input == NULL ) { - printf( "Error allocating memory.\n" ); - exit( 1 ); - } - expected = (double*) malloc( total * sizeof(double) ); - if ( expected == NULL ) { - printf( "Error allocating memory.\n" ); - exit( 1 ); - } - - // Generate fixture data: - for ( i = 0; i < num; i++ ) { - n = lengths[ i ]; - off = offsets[ i ]; - - rand_array_f64( input + off, (unsigned int)n, -10.0, 10.0 ); - for ( j = 0; j < (unsigned int)n; j++ ) { - expected[ off + j ] = input[ off + j ]; - } - - wsave = (double*) calloc( 2*n + 15, sizeof(double) ); - if ( wsave == NULL ) { - printf( "Error allocating memory.\n" ); - exit( 1 ); - } - rffti( n, wsave ); - rfftf( n, expected + off, wsave ); - free( wsave ); - } - // Open a new file: - f = fopen( name, "w" ); - if ( f == NULL ) { - printf( "Error opening file.\n" ); - exit( 1 ); - } - - // Write data as JSON: - write_data_as_json( f, lengths, offsets, input, expected, num, total ); - - // Close the file: - fclose( f ); - - // Free allocated memory: - free( input ); - free( expected ); -} - -/** -* Computes offsets into flat input and output arrays for each sequence length. -* -* @param offsets output array of offsets -* @param lengths sequence lengths -* @param num number of sequence lengths -* @return total number of values -*/ -unsigned int compute_offsets( int *offsets, const int *lengths, const unsigned int num ) { - unsigned int total; - unsigned int i; - - total = 0; - for ( i = 0; i < num; i++ ) { - offsets[ i ] = total; - total += lengths[ i ]; - } - return total; -} - -/** -* Main execution sequence. -*/ -int main( void ) { - unsigned int total; - unsigned int num; - int *lengths; - int *offsets; - - // Use the current time to seed the random number generator: - srand( time( NULL ) ); - - // Define the number of sequence lengths per range: - num = 10; - - // Allocate arrays: - lengths = (int*) malloc( num * sizeof(int) ); - if ( lengths == NULL ) { - printf( "Error allocating memory.\n" ); - exit( 1 ); - } - offsets = (int*) malloc( num * sizeof(int) ); - if ( offsets == NULL ) { - printf( "Error allocating memory.\n" ); - exit( 1 ); - } - - // Generate fixture data: - rand_array_i32( lengths, num, 2, 16 ); - total = compute_offsets( offsets, lengths, num ); - generate( lengths, offsets, num, total, "small.json" ); - - rand_array_i32( lengths, num, 16, 128 ); - total = compute_offsets( offsets, lengths, num ); - generate( lengths, offsets, num, total, "medium.json" ); - - rand_array_i32( lengths, num, 128, 1024 ); - total = compute_offsets( offsets, lengths, num ); - generate( lengths, offsets, num, total, "large.json" ); - - // Free allocated memory: - free( lengths ); - free( offsets ); - - return 0; -} diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/rfftf/test/fixtures/c/fftpack/small.json b/lib/node_modules/@stdlib/fft/base/fftpack/rfftf/test/fixtures/c/fftpack/small.json deleted file mode 100644 index 8d557d1163b5..000000000000 --- a/lib/node_modules/@stdlib/fft/base/fftpack/rfftf/test/fixtures/c/fftpack/small.json +++ /dev/null @@ -1 +0,0 @@ -{"lengths":[4,13,5,5,15,10,10,2,10,15],"offsets":[0,4,17,22,27,42,52,62,64,74],"input":[-9.116728724911809,-4.8596726823598146,3.4812678024172783,9.668060727417469,-8.9032003656029701,3.9114638883620501,-0.026319427415728569,-2.3505385220050812,-5.5008794739842415,6.7187159508466721,1.4591167215257883,3.3748283609747887,0.74036757461726665,3.3579106442630291,-3.5956973303109407,7.115019578486681,2.1341895684599876,9.3241720646619797,-8.6399579886347055,8.2260956522077322,-4.010230703279376,0.05261685699224472,4.3315941374748945,1.1027806997299194,-5.564692746847868,-5.7909615617245436,-8.6909349635243416,-8.5439217090606689,2.3078472074121237,7.9881112929433584,-3.8133587222546339,8.8800034765154123,6.2185775488615036,-4.3670093547552824,3.6738187074661255,5.8711233921349049,-4.0290241781622171,4.1906843520700932,-7.1679836977273226,7.6980144530534744,0.52905097603797913,-8.2401633262634277,7.5749892555177212,-7.1554449666291475,-1.5635318774729967,1.7198013328015804,4.7010921128094196,-8.7447449564933777,7.0715260319411755,-8.8618475571274757,-1.0718837380409241,4.8500846140086651,-4.6277761366218328,0.96651383675634861,4.1981401853263378,-1.8577941041439772,-3.9454446267336607,8.9122058637440205,7.4440999515354633,-7.0119780208915472,9.685426251962781,2.9591707978397608,-5.2162992861121893,9.6579357422888279,0.92617449350655079,6.2147978693246841,-7.8920833580195904,-2.2449817415326834,8.5919307451695204,4.5801795646548271,-0.92194274067878723,4.9084284529089928,-4.0428752824664116,-8.6048257909715176,-1.3070579431951046,-7.7227832470089197,3.1819853372871876,-0.37233305163681507,2.1984764840453863,9.7943628113716841,-6.1440743599087,-3.4577368106693029,5.8174742758274078,-5.7097223773598671,-3.3039627131074667,-9.7012667916715145,-9.1909652855247259,7.446452509611845,-7.4725344125181437],"expected":[-0.8270728774368763,-12.597996527329087,14.527733409777284,-10.443848967552185,8.4349771682173014,-9.7567153511884861,8.5923802120769253,4.57425773203913,4.0866333108592272,-14.22715060271884,-6.6576554982603335,-26.372765919953665,2.8296022954701328,-8.980587583926571,-6.8431158070115705,-7.3253292347795274,-19.352006438403265,4.952695881947875,3.259831328816762,1.0747977763238268,17.574250891864249,16.746805214608187,-14.612214434891939,11.173642831905873,-9.4473745727180862,6.9614497292273327,-5.541407201183806,11.195770418271422,-14.991257708546126,-15.946231614575851,-17.300471915627686,-4.6130790288011587,-19.788622037389842,-4.3067661197842559,-5.5157193718121711,-30.002457820459789,-25.180834475904703,-12.913945229888764,18.854087307931454,19.383661310646723,-5.7544798257416492,19.640630053430741,-1.47995974868536,6.3230358066860246,-1.1461816305236983,9.6659206372041417,15.672241202115009,17.024128064244636,19.603107401239232,-11.850330015300589,-4.8679641623852099,34.904343318194151,16.722563998773694,-6.1633397371209089,8.1826596782807925,2.5224321416795537,-2.68207208227156,-32.079778889875975,12.531437445164677,-0.17263982326092409,-15.643991329488166,8.7863272521644831,4.4416364561766386,-14.874235028401017,1.5148022118955851,-16.303884263575817,-3.8387589572180141,14.638762167581284,-6.9882295533190071,11.265068834141644,-29.609707780796953,-1.6302781281256387,0.023841251436460542,-8.1923944968730211,-25.943685574457049,-6.2112734554560713,-26.110422946311445,-2.2624743686374584,8.8755320203980546,-8.2645672629549143,25.11030762650708,-12.000561912417531,-15.582412082646586,-21.114386739209294,5.5941560454209212,34.194765437856233,-13.8671250199453,18.827406514084274,-0.55489016140835545]} diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/rfftf/test/test.js b/lib/node_modules/@stdlib/fft/base/fftpack/rfftf/test/test.js deleted file mode 100644 index 51fb2e0b807b..000000000000 --- a/lib/node_modules/@stdlib/fft/base/fftpack/rfftf/test/test.js +++ /dev/null @@ -1,387 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2026 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var Float64Array = require( '@stdlib/array/float64' ); -var isAlmostSameValue = require( '@stdlib/number/float64/base/assert/is-almost-same-value' ); -var rffti = require( '@stdlib/fft/base/fftpack/generic/rffti' ); -var rfftf = require( './../lib' ); - - -// FIXTURES // - -var small = require( './fixtures/c/fftpack/small.json' ); -var medium = require( './fixtures/c/fftpack/medium.json' ); -var large = require( './fixtures/c/fftpack/large.json' ); - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof rfftf, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function has an arity of 7', function test( t ) { - t.strictEqual( rfftf.length, 7, 'returns expected value' ); - t.end(); -}); - -tape( 'the function returns a reference to the input array', function test( t ) { - var out; - var w; - var N; - var r; - - N = 4; - r = new Float64Array( [ 1.0, 2.0, 3.0, 4.0 ] ); - w = new Float64Array( ( 2*N ) + 34 ); - - rffti( N, w, 1, 0 ); - out = rfftf( N, r, 1, 0, w, 1, 0 ); - - t.strictEqual( out, r, 'same reference' ); - t.end(); -}); - -tape( 'the function returns all zeros for a zero sequence', function test( t ) { - var expected; - var w; - var N; - var r; - - N = 4; - r = new Float64Array( [ 0.0, 0.0, 0.0, 0.0 ] ); - expected = new Float64Array( [ 0.0, 0.0, 0.0, 0.0 ] ); - w = new Float64Array( ( 2*N ) + 34 ); - - rffti( N, w, 1, 0 ); - rfftf( N, r, 1, 0, w, 1, 0 ); - - t.deepEqual( r, expected, 'returns expected value' ); - t.end(); -}); - -tape( 'the function returns only a zero-frequency term for a constant sequence', function test( t ) { - var expected; - var w; - var N; - var r; - - N = 4; - r = new Float64Array( [ 1.0, 1.0, 1.0, 1.0 ] ); - expected = new Float64Array( [ 4.0, 0.0, 0.0, 0.0 ] ); - w = new Float64Array( ( 2*N ) + 34 ); - - rffti( N, w, 1, 0 ); - rfftf( N, r, 1, 0, w, 1, 0 ); - - t.deepEqual( r, expected, 'returns expected value' ); - t.end(); -}); - -tape( 'the function computes the exact two-point real FFT', function test( t ) { - var expected; - var w; - var N; - var r; - - N = 2; - r = new Float64Array( [ 3.0, -1.0 ] ); - - // For [ a, b ], output is [ a+b, a-b ]... - expected = new Float64Array( [ 2.0, 4.0 ] ); - w = new Float64Array( ( 2*N ) + 34 ); - - rffti( N, w, 1, 0 ); - rfftf( N, r, 1, 0, w, 1, 0 ); - - t.deepEqual( r, expected, 'returns expected value' ); - t.end(); -}); - -tape( 'the function computes a forward real-valued FFT (small sequence lengths)', function test( t ) { - var expected; - var lengths; - var offsets; - var input; - var ulps; - var off; - var w; - var y; - var e; - var N; - var i; - var k; - var r; - - lengths = small.lengths; - offsets = small.offsets; - input = small.input; - expected = small.expected; - - ulps = 20; - for ( k = 0; k < lengths.length; k++ ) { - N = lengths[ k ]; - off = offsets[ k ]; - r = new Float64Array( N ); - for ( i = 0; i < N; i++ ) { - r[ i ] = input[ off+i ]; - } - w = new Float64Array( ( 2*N ) + 34 ); - - rffti( N, w, 1, 0 ); - rfftf( N, r, 1, 0, w, 1, 0 ); - - for ( i = 0; i < N; i++ ) { - y = r[ i ]; - e = expected[ off+i ]; - t.strictEqual( isAlmostSameValue( y, e, ulps ), true, 'within tolerance. N: '+N+'. index: '+i+'. y: '+y+'. E: '+e+'.' ); - } - } - t.end(); -}); - -tape( 'the function computes a forward real-valued FFT (medium sequence lengths)', function test( t ) { - var expected; - var lengths; - var offsets; - var input; - var ulps; - var off; - var w; - var y; - var e; - var N; - var i; - var k; - var r; - - lengths = medium.lengths; - offsets = medium.offsets; - input = medium.input; - expected = medium.expected; - - ulps = 130; - for ( k = 0; k < lengths.length; k++ ) { - N = lengths[ k ]; - off = offsets[ k ]; - r = new Float64Array( N ); - for ( i = 0; i < N; i++ ) { - r[ i ] = input[ off+i ]; - } - w = new Float64Array( ( 2*N ) + 34 ); - - rffti( N, w, 1, 0 ); - rfftf( N, r, 1, 0, w, 1, 0 ); - - for ( i = 0; i < N; i++ ) { - y = r[ i ]; - e = expected[ off+i ]; - t.strictEqual( isAlmostSameValue( y, e, ulps ), true, 'within tolerance. N: '+N+'. index: '+i+'. y: '+y+'. E: '+e+'.' ); - } - } - t.end(); -}); - -tape( 'the function computes a forward real-valued FFT (large sequence lengths)', function test( t ) { - var expected; - var lengths; - var offsets; - var input; - var ulps; - var off; - var w; - var y; - var e; - var N; - var i; - var k; - var r; - - lengths = large.lengths; - offsets = large.offsets; - input = large.input; - expected = large.expected; - - ulps = 800; - for ( k = 0; k < lengths.length; k++ ) { - N = lengths[ k ]; - off = offsets[ k ]; - r = new Float64Array( N ); - for ( i = 0; i < N; i++ ) { - r[ i ] = input[ off+i ]; - } - w = new Float64Array( ( 2*N ) + 34 ); - - rffti( N, w, 1, 0 ); - rfftf( N, r, 1, 0, w, 1, 0 ); - - for ( i = 0; i < N; i++ ) { - y = r[ i ]; - e = expected[ off+i ]; - t.strictEqual( isAlmostSameValue( y, e, ulps ), true, 'within tolerance. N: '+N+'. index: '+i+'. y: '+y+'. E: '+e+'.' ); - } - } - t.end(); -}); - -tape( 'the function leaves a length-one sequence unchanged', function test( t ) { - var out; - var N; - var w; - var r; - - N = 1; - r = new Float64Array( [ 5.0 ] ); - w = new Float64Array( ( 2*N ) + 34 ); - - rffti( N, w, 1, 0 ); - out = rfftf( N, r, 1, 0, w, 1, 0 ); - t.strictEqual( out, r, 'same reference' ); - t.strictEqual( r[ 0 ], 5.0, 'returns expected value' ); - t.end(); -}); - -tape( 'the function supports specifying a stride', function test( t ) { - var expected; - var w; - var v; - var i; - var N; - var r; - - N = 4; - r = new Float64Array([ - 1.0, // 0 - -999.0, - 2.0, // 1 - -999.0, - 3.0, // 2 - -999.0, - 4.0, // 3 - -999.0 - ]); - expected = new Float64Array([ - 10.0, // 0 - -999.0, - -2.0, // 1 - -999.0, - 2.0, // 2 - -999.0, - -2.0, // 3 - -999.0 - ]); - - w = new Float64Array( ( ( 2*N ) + 34 ) * 2 ); - rffti( N, w, 2, 0 ); - rfftf( N, r, 2, 0, w, 2, 0 ); - - for ( i = 0; i < r.length; i++ ) { - v = r[ i ]; - t.strictEqual( isAlmostSameValue( v, expected[ i ], 1 ), true, 'within tolerance. index: '+i+'. y: '+v+'. E: '+expected[ i ]+'.' ); - } - t.end(); -}); - -tape( 'the function supports specifying a negative stride', function test( t ) { - var expected; - var w; - var v; - var i; - var N; - var r; - - N = 4; - r = new Float64Array([ - 4.0, // 3 - -999.0, - 3.0, // 2 - -999.0, - 2.0, // 1 - -999.0, - 1.0 // 0 - ]); - expected = new Float64Array([ - -2.0, // 3 - -999.0, - 2.0, // 2 - -999.0, - -2.0, // 1 - -999.0, - 10.0 // 0 - ]); - - w = new Float64Array( ( 2*N ) + 34 ); - rffti( N, w, -1, w.length-1 ); - rfftf( N, r, -2, r.length-1, w, -1, w.length-1 ); - - for ( i = 0; i < r.length; i++ ) { - v = r[ i ]; - t.strictEqual( isAlmostSameValue( v, expected[ i ], 1 ), true, 'within tolerance. index: '+i+'. y: '+v+'. E: '+expected[ i ]+'.' ); - } - t.end(); -}); - -tape( 'the function supports an offset parameter', function test( t ) { - var expected; - var w; - var v; - var i; - var N; - var r; - - N = 4; - r = new Float64Array([ - -999.0, - 1.0, // 0 - -999.0, - 2.0, // 1 - -999.0, - 3.0, // 2 - -999.0, - 4.0, // 3 - -999.0 - ]); - expected = new Float64Array([ - -999.0, - 10.0, // 0 - -999.0, - -2.0, // 1 - -999.0, - 2.0, // 2 - -999.0, - -2.0, // 3 - -999.0 - ]); - - w = new Float64Array( 3 + ( ( ( 2*N ) + 34 ) * 2 ) ); - rffti( N, w, 2, 3 ); - rfftf( N, r, 2, 1, w, 2, 3 ); - - for ( i = 0; i < r.length; i++ ) { - v = r[ i ]; - t.strictEqual( isAlmostSameValue( v, expected[ i ], 1 ), true, 'within tolerance. index: '+i+'. y: '+v+'. E: '+expected[ i ]+'.' ); - } - t.end(); -}); From 418cf946565056d3a9672027c905157be352bac6 Mon Sep 17 00:00:00 2001 From: Gunj Joshi Date: Tue, 18 Aug 2026 13:44:45 +0530 Subject: [PATCH 31/32] feat: add `fft/base/fftpack/ndarray/generic/rffti` Ref: https://github.com/stdlib-js/metr-issue-tracker/issues/1165 --- type: pre_commit_static_analysis_report description: Results of running static analysis checks when committing changes. report: - task: lint_filenames status: passed - task: lint_editorconfig status: passed - task: lint_markdown_pkg_readmes status: passed - task: lint_markdown_docs status: na - task: lint_markdown status: na - task: lint_package_json status: passed - task: lint_repl_help status: passed - task: lint_javascript_src status: passed - task: lint_javascript_cli status: na - task: lint_javascript_examples status: passed - task: lint_javascript_tests status: passed - task: lint_javascript_benchmarks status: passed - task: lint_python status: na - task: lint_r status: na - task: lint_c_src status: na - task: lint_c_examples status: na - task: lint_c_benchmarks status: na - task: lint_c_tests_fixtures status: na - task: lint_shell status: na - task: lint_typescript_declarations status: passed - task: lint_typescript_tests status: passed - task: lint_license_headers status: passed --- --- .../fftpack/ndarray/generic/rffti/README.md | 133 ++++++++ .../generic/rffti/benchmark/benchmark.js | 118 ++++++++ .../ndarray/generic/rffti/docs/repl.txt | 42 +++ .../generic/rffti/docs/types/index.d.ts | 73 +++++ .../ndarray/generic/rffti/docs/types/test.ts | 63 ++++ .../ndarray/generic/rffti/examples/index.js | 36 +++ .../ndarray/generic/rffti/lib/index.js | 60 ++++ .../fftpack/ndarray/generic/rffti/lib/main.js | 83 +++++ .../ndarray/generic/rffti/package.json | 65 ++++ .../ndarray/generic/rffti/test/test.js | 283 ++++++++++++++++++ 10 files changed, 956 insertions(+) create mode 100644 lib/node_modules/@stdlib/fft/base/fftpack/ndarray/generic/rffti/README.md create mode 100644 lib/node_modules/@stdlib/fft/base/fftpack/ndarray/generic/rffti/benchmark/benchmark.js create mode 100644 lib/node_modules/@stdlib/fft/base/fftpack/ndarray/generic/rffti/docs/repl.txt create mode 100644 lib/node_modules/@stdlib/fft/base/fftpack/ndarray/generic/rffti/docs/types/index.d.ts create mode 100644 lib/node_modules/@stdlib/fft/base/fftpack/ndarray/generic/rffti/docs/types/test.ts create mode 100644 lib/node_modules/@stdlib/fft/base/fftpack/ndarray/generic/rffti/examples/index.js create mode 100644 lib/node_modules/@stdlib/fft/base/fftpack/ndarray/generic/rffti/lib/index.js create mode 100644 lib/node_modules/@stdlib/fft/base/fftpack/ndarray/generic/rffti/lib/main.js create mode 100644 lib/node_modules/@stdlib/fft/base/fftpack/ndarray/generic/rffti/package.json create mode 100644 lib/node_modules/@stdlib/fft/base/fftpack/ndarray/generic/rffti/test/test.js diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/ndarray/generic/rffti/README.md b/lib/node_modules/@stdlib/fft/base/fftpack/ndarray/generic/rffti/README.md new file mode 100644 index 000000000000..89ad36ee51fb --- /dev/null +++ b/lib/node_modules/@stdlib/fft/base/fftpack/ndarray/generic/rffti/README.md @@ -0,0 +1,133 @@ + + +# rffti + +> Initialize a workspace array for performing a real-valued Fourier transform on a one-dimensional ndarray. + +
+ +
+ + + +
+ +## Usage + +```javascript +var rffti = require( '@stdlib/fft/base/fftpack/ndarray/generic/rffti' ); +``` + +#### rffti( arrays ) + +Initializes a workspace array for performing a real-valued Fourier transform on a one-dimensional ndarray. + +```javascript +var Float64Vector = require( '@stdlib/ndarray/vector/float64' ); +var scalar2ndarray = require( '@stdlib/ndarray/from-scalar' ); +var Slice = require( '@stdlib/slice/ctor' ); +var slice = require( '@stdlib/ndarray/slice' ); + +var N = 8; +var len = scalar2ndarray( N, { + 'dtype': 'int32' +}); + +var w = new Float64Vector( ( 2*N ) + 34 ); + +var out = rffti( [ w, len ] ); +// returns + +var bool = ( out === w ); +// returns true + +var twiddleFactors = slice( w, new Slice( N, 2*N ) ); +// returns [ ~0.707, ~0.707, 0, 0, 0, 0, 0, 0 ] + +var factors = slice( w, new Slice( 2*N, ( 2*N ) + 4 ) ); +// returns [ 8, 2, 2, 4 ] +``` + +The function has the following parameters: + +- **arrays**: array-like object containing the following ndarrays: + + - a one-dimensional input ndarray. + - a zero-dimensional ndarray containing the length of the sequence to transform. + +
+ + + +
+ +## Notes + +- If provided an empty one-dimensional input ndarray, the function returns the input ndarray unchanged. + +
+ + + +
+ +## Examples + + + +```javascript +var Float64Vector = require( '@stdlib/ndarray/vector/float64' ); +var scalar2ndarray = require( '@stdlib/ndarray/from-scalar' ); +var ndarray2array = require( '@stdlib/ndarray/to-array' ); +var rffti = require( '@stdlib/fft/base/fftpack/ndarray/generic/rffti' ); + +var N = 8; + +var w = new Float64Vector( ( 2*N ) + 34 ); +console.log( ndarray2array( w ) ); + +var len = scalar2ndarray( N, { + 'dtype': 'int32' +}); + +var out = rffti( [ w, len ] ); +console.log( ndarray2array( out ) ); +``` + +
+ + + + + + + + + + + + + + diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/ndarray/generic/rffti/benchmark/benchmark.js b/lib/node_modules/@stdlib/fft/base/fftpack/ndarray/generic/rffti/benchmark/benchmark.js new file mode 100644 index 000000000000..52a4b3898e67 --- /dev/null +++ b/lib/node_modules/@stdlib/fft/base/fftpack/ndarray/generic/rffti/benchmark/benchmark.js @@ -0,0 +1,118 @@ +/** +* @license Apache-2.0 +* +* Copyright (c) 2026 The Stdlib Authors. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +'use strict'; + +// MODULES // + +var bench = require( '@stdlib/bench' ); +var zeros = require( '@stdlib/ndarray/zeros' ); +var isnan = require( '@stdlib/math/base/assert/is-nan' ); +var scalar2ndarray = require( '@stdlib/ndarray/from-scalar' ); +var format = require( '@stdlib/string/format' ); +var pkg = require( './../package.json' ).name; +var rffti = require( './../lib' ); + + +// VARIABLES // + +var options = { + 'dtype': 'generic' +}; +var nopts = { + 'dtype': 'int32' +}; + + +// FUNCTIONS // + +/** +* Creates a benchmark function. +* +* @private +* @param {PositiveInteger} N - sequence length +* @returns {Function} benchmark function +*/ +function createBenchmark( N ) { + var len; + var w; + + len = scalar2ndarray( N, nopts ); + w = zeros( [ ( 2*N ) + 34 ], options ); + + return benchmark; + + /** + * Benchmark function. + * + * @private + * @param {Benchmark} b - benchmark instance + */ + function benchmark( b ) { + var v; + var i; + + b.tic(); + for ( i = 0; i < b.iterations; i++ ) { + v = rffti( [ w, len ] ); + if ( typeof v !== 'object' ) { + b.fail( 'should return an ndarray' ); + } + } + b.toc(); + if ( isnan( v.get( N ) ) ) { + b.fail( 'should not return NaN' ); + } + b.pass( 'benchmark finished' ); + b.end(); + } +} + + +// MAIN // + +/** +* Main execution sequence. +* +* @private +*/ +function main() { + var lengths; + var N; + var f; + var i; + + lengths = [ + 8, + 16, + 32, + 64, + 128, + 256, + 512, + 1024 + ]; + + for ( i = 0; i < lengths.length; i++ ) { + N = lengths[ i ]; + f = createBenchmark( N ); + bench( format( '%s:N=%d', pkg, N ), f ); + } +} + +main(); diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/ndarray/generic/rffti/docs/repl.txt b/lib/node_modules/@stdlib/fft/base/fftpack/ndarray/generic/rffti/docs/repl.txt new file mode 100644 index 000000000000..724c9340bfe3 --- /dev/null +++ b/lib/node_modules/@stdlib/fft/base/fftpack/ndarray/generic/rffti/docs/repl.txt @@ -0,0 +1,42 @@ + +{{alias}}( arrays ) + Initializes a workspace array for performing a real-valued Fourier transform + on a one-dimensional ndarray. + + If provided an empty input ndarray, the function returns the input ndarray + unchanged. + + Parameters + ---------- + arrays: ArrayLikeObject + Array-like object containing the following ndarrays: + + - a one-dimensional input ndarray. + - a zero-dimensional ndarray containing the length of the sequence to + transform. + + Returns + ------- + out: ndarray + Input ndarray. + + Examples + -------- + > var N = 8; + > var w = new {{alias:@stdlib/ndarray/vector/float64}}( ( 2*N ) + 34 ); + > var opts = { 'dtype': 'int32' }; + > var len = {{alias:@stdlib/ndarray/from-scalar}}( N, opts ); + > var out = {{alias}}( [ w, len ] ) + + > var bool = ( out === w ) + true + > var s = new {{alias:@stdlib/slice/ctor}}( N, 2*N ); + > var twiddleFactors = {{alias:@stdlib/ndarray/slice}}( w, s ) + [ ~0.707, ~0.707, 0, 0, 0, 0, 0, 0 ] + > s = new {{alias:@stdlib/slice/ctor}}( 2*N, ( 2*N ) + 4 ); + > var factors = {{alias:@stdlib/ndarray/slice}}( w, s ) + [ 8, 2, 2, 4 ] + + See Also + -------- + diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/ndarray/generic/rffti/docs/types/index.d.ts b/lib/node_modules/@stdlib/fft/base/fftpack/ndarray/generic/rffti/docs/types/index.d.ts new file mode 100644 index 000000000000..56989f0ecde8 --- /dev/null +++ b/lib/node_modules/@stdlib/fft/base/fftpack/ndarray/generic/rffti/docs/types/index.d.ts @@ -0,0 +1,73 @@ +/* +* @license Apache-2.0 +* +* Copyright (c) 2026 The Stdlib Authors. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +// TypeScript Version: 4.1 + +/// + +import { typedndarray, floatndarray, genericndarray } from '@stdlib/types/ndarray'; + +/** +* Input array. +*/ +type InputArray = floatndarray | genericndarray; + +/** +* Initializes a workspace array for performing a real-valued Fourier transform on a one-dimensional ndarray. +* +* ## Notes +* +* - The function expects the following ndarrays: +* +* - a one-dimensional input ndarray. +* - a zero-dimensional ndarray containing the length of the sequence to transform. +* +* @param arrays - array-like object containing ndarrays +* @returns input ndarray +* +* @example +* var Float64Vector = require( '@stdlib/ndarray/vector/float64' ); +* var scalar2ndarray = require( '@stdlib/ndarray/from-scalar' ); +* var Slice = require( '@stdlib/slice/ctor' ); +* var slice = require( '@stdlib/ndarray/slice' ); +* +* var N = 8; +* var len = scalar2ndarray( N, { +* 'dtype': 'int32' +* }); +* +* var w = new Float64Vector( ( 2*N ) + 34 ); +* +* var out = rffti( [ w, len ] ); +* // returns +* +* var bool = ( out === w ); +* // returns true +* +* var twiddleFactors = slice( w, new Slice( N, 2*N ) ); +* // returns [ ~0.707, ~0.707, 0, 0, 0, 0, 0, 0 ] +* +* var factors = slice( w, new Slice( 2*N, ( 2*N ) + 4 ) ); +* // returns [ 8, 2, 2, 4 ] +*/ +declare function rffti( arrays: [ T, typedndarray ] ): T; + + +// EXPORTS // + +export = rffti; diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/ndarray/generic/rffti/docs/types/test.ts b/lib/node_modules/@stdlib/fft/base/fftpack/ndarray/generic/rffti/docs/types/test.ts new file mode 100644 index 000000000000..97187a6bf704 --- /dev/null +++ b/lib/node_modules/@stdlib/fft/base/fftpack/ndarray/generic/rffti/docs/types/test.ts @@ -0,0 +1,63 @@ +/* +* @license Apache-2.0 +* +* Copyright (c) 2026 The Stdlib Authors. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +/* eslint-disable space-in-parens */ + +import zeros = require( '@stdlib/ndarray/zeros' ); +import rffti = require( './index' ); + + +// TESTS // + +// The function returns an ndarray... +{ + const w = zeros( [ 10 ], { + 'dtype': 'float64' + }); + const N = zeros( [], { + 'dtype': 'int32' + }); + + rffti( [ w, N ] ); // $ExpectType float64ndarray +} + +// The compiler throws an error if the function is provided a first argument which is not an array of ndarrays... +{ + rffti( '10' ); // $ExpectError + rffti( 10 ); // $ExpectError + rffti( true ); // $ExpectError + rffti( false ); // $ExpectError + rffti( null ); // $ExpectError + rffti( undefined ); // $ExpectError + rffti( [] ); // $ExpectError + rffti( {} ); // $ExpectError + rffti( ( x: number ): number => x ); // $ExpectError +} + +// The compiler throws an error if the function is provided an unsupported number of arguments... +{ + const w = zeros( [ 10 ], { + 'dtype': 'float64' + }); + const N = zeros( [], { + 'dtype': 'int32' + }); + + rffti(); // $ExpectError + rffti( [ w, N ], {} ); // $ExpectError +} diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/ndarray/generic/rffti/examples/index.js b/lib/node_modules/@stdlib/fft/base/fftpack/ndarray/generic/rffti/examples/index.js new file mode 100644 index 000000000000..4b802e6c1c12 --- /dev/null +++ b/lib/node_modules/@stdlib/fft/base/fftpack/ndarray/generic/rffti/examples/index.js @@ -0,0 +1,36 @@ +/** +* @license Apache-2.0 +* +* Copyright (c) 2026 The Stdlib Authors. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +'use strict'; + +var Float64Vector = require( '@stdlib/ndarray/vector/float64' ); +var scalar2ndarray = require( '@stdlib/ndarray/from-scalar' ); +var ndarray2array = require( '@stdlib/ndarray/to-array' ); +var rffti = require( './../lib' ); + +var N = 8; + +var w = new Float64Vector( ( 2*N ) + 34 ); +console.log( ndarray2array( w ) ); + +var len = scalar2ndarray( N, { + 'dtype': 'int32' +}); + +var out = rffti( [ w, len ] ); +console.log( ndarray2array( out ) ); diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/ndarray/generic/rffti/lib/index.js b/lib/node_modules/@stdlib/fft/base/fftpack/ndarray/generic/rffti/lib/index.js new file mode 100644 index 000000000000..aa1936c5d704 --- /dev/null +++ b/lib/node_modules/@stdlib/fft/base/fftpack/ndarray/generic/rffti/lib/index.js @@ -0,0 +1,60 @@ +/** +* @license Apache-2.0 +* +* Copyright (c) 2026 The Stdlib Authors. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +'use strict'; + +/** +* Initialize a workspace array for performing a real-valued Fourier transform on a one-dimensional ndarray. +* +* @module @stdlib/fft/base/fftpack/ndarray/generic/rffti +* +* @example +* var Float64Vector = require( '@stdlib/ndarray/vector/float64' ); +* var scalar2ndarray = require( '@stdlib/ndarray/from-scalar' ); +* var Slice = require( '@stdlib/slice/ctor' ); +* var slice = require( '@stdlib/ndarray/slice' ); +* var rffti = require( '@stdlib/fft/base/fftpack/ndarray/generic/rffti' ); +* +* var N = 8; +* var len = scalar2ndarray( N, { +* 'dtype': 'int32' +* }); +* +* var w = new Float64Vector( ( 2*N ) + 34 ); +* +* var out = rffti( [ w, len ] ); +* // returns +* +* var bool = ( out === w ); +* // returns true +* +* var twiddleFactors = slice( w, new Slice( N, 2*N ) ); +* // returns [ ~0.707, ~0.707, 0, 0, 0, 0, 0, 0 ] +* +* var factors = slice( w, new Slice( 2*N, ( 2*N ) + 4 ) ); +* // returns [ 8, 2, 2, 4 ] +*/ + +// MODULES // + +var main = require( './main.js' ); + + +// EXPORTS // + +module.exports = main; diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/ndarray/generic/rffti/lib/main.js b/lib/node_modules/@stdlib/fft/base/fftpack/ndarray/generic/rffti/lib/main.js new file mode 100644 index 000000000000..3826d518e4b3 --- /dev/null +++ b/lib/node_modules/@stdlib/fft/base/fftpack/ndarray/generic/rffti/lib/main.js @@ -0,0 +1,83 @@ +/** +* @license Apache-2.0 +* +* Copyright (c) 2026 The Stdlib Authors. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +'use strict'; + +// MODULES // + +var getStride = require( '@stdlib/ndarray/base/stride' ); +var getOffset = require( '@stdlib/ndarray/base/offset' ); +var getData = require( '@stdlib/ndarray/base/data-buffer' ); +var strided = require( '@stdlib/fft/base/fftpack/generic/rffti' ); +var ndarraylike2scalar = require( '@stdlib/ndarray/base/ndarraylike2scalar' ); + + +// MAIN // + +/** +* Initializes a workspace array for performing a real-valued Fourier transform on a one-dimensional ndarray. +* +* ## Notes +* +* - The function expects the following ndarrays: +* +* - a one-dimensional input ndarray. +* - a zero-dimensional ndarray containing the length of the sequence to transform. +* +* @param {ArrayLikeObject} arrays - array-like object containing ndarrays +* @returns {ndarrayLike} input ndarray +* +* @example +* var Float64Vector = require( '@stdlib/ndarray/vector/float64' ); +* var scalar2ndarray = require( '@stdlib/ndarray/from-scalar' ); +* var Slice = require( '@stdlib/slice/ctor' ); +* var slice = require( '@stdlib/ndarray/slice' ); +* +* var N = 8; +* var len = scalar2ndarray( N, { +* 'dtype': 'int32' +* }); +* +* var w = new Float64Vector( ( 2*N ) + 34 ); +* +* var out = rffti( [ w, len ] ); +* // returns +* +* var bool = ( out === w ); +* // returns true +* +* var twiddleFactors = slice( w, new Slice( N, 2*N ) ); +* // returns [ ~0.707, ~0.707, 0, 0, 0, 0, 0, 0 ] +* +* var factors = slice( w, new Slice( 2*N, ( 2*N ) + 4 ) ); +* // returns [ 8, 2, 2, 4 ] +*/ +function rffti( arrays ) { + var w; + var N; + + w = arrays[ 0 ]; + N = ndarraylike2scalar( arrays[ 1 ] ); + strided( N, getData( w ), getStride( w, 0 ), getOffset( w ) ); + return w; +} + + +// EXPORTS // + +module.exports = rffti; diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/ndarray/generic/rffti/package.json b/lib/node_modules/@stdlib/fft/base/fftpack/ndarray/generic/rffti/package.json new file mode 100644 index 000000000000..012776b2ffa7 --- /dev/null +++ b/lib/node_modules/@stdlib/fft/base/fftpack/ndarray/generic/rffti/package.json @@ -0,0 +1,65 @@ +{ + "name": "@stdlib/fft/base/fftpack/ndarray/generic/rffti", + "version": "0.0.0", + "description": "Initialize a workspace array for performing a real-valued Fourier transform on a one-dimensional ndarray.", + "license": "Apache-2.0", + "author": { + "name": "The Stdlib Authors", + "url": "https://github.com/stdlib-js/stdlib/graphs/contributors" + }, + "contributors": [ + { + "name": "The Stdlib Authors", + "url": "https://github.com/stdlib-js/stdlib/graphs/contributors" + } + ], + "main": "./lib", + "directories": { + "benchmark": "./benchmark", + "doc": "./docs", + "example": "./examples", + "lib": "./lib", + "test": "./test" + }, + "types": "./docs/types", + "scripts": {}, + "homepage": "https://github.com/stdlib-js/stdlib", + "repository": { + "type": "git", + "url": "git://github.com/stdlib-js/stdlib.git" + }, + "bugs": { + "url": "https://github.com/stdlib-js/stdlib/issues" + }, + "dependencies": {}, + "devDependencies": {}, + "engines": { + "node": ">=0.10.0", + "npm": ">2.7.0" + }, + "os": [ + "aix", + "darwin", + "freebsd", + "linux", + "macos", + "openbsd", + "sunos", + "win32", + "windows" + ], + "keywords": [ + "stdlib", + "fft", + "fftpack", + "rffti", + "fourier", + "transform", + "twiddle", + "workspace", + "initialization", + "real", + "ndarray" + ], + "__stdlib__": {} +} diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/ndarray/generic/rffti/test/test.js b/lib/node_modules/@stdlib/fft/base/fftpack/ndarray/generic/rffti/test/test.js new file mode 100644 index 000000000000..0c9598113622 --- /dev/null +++ b/lib/node_modules/@stdlib/fft/base/fftpack/ndarray/generic/rffti/test/test.js @@ -0,0 +1,283 @@ +/** +* @license Apache-2.0 +* +* Copyright (c) 2026 The Stdlib Authors. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +/* eslint-disable max-len */ + +'use strict'; + +// MODULES // + +var tape = require( 'tape' ); +var isSameFloat64Array = require( '@stdlib/assert/is-same-float64array' ); +var isAlmostSameValue = require( '@stdlib/assert/is-almost-same-value' ); +var Float64Array = require( '@stdlib/array/float64' ); +var scalar2ndarray = require( '@stdlib/ndarray/from-scalar' ); +var ndarray = require( '@stdlib/ndarray/base/ctor' ); +var getData = require( '@stdlib/ndarray/data-buffer' ); +var rffti = require( './../lib' ); + + +// FUNCTIONS // + +/** +* Returns a one-dimensional ndarray. +* +* @private +* @param {Collection} buffer - underlying data buffer +* @param {NonNegativeInteger} length - number of indexed elements +* @param {integer} stride - stride length +* @param {NonNegativeInteger} offset - index offset +* @returns {ndarray} one-dimensional ndarray +*/ +function vector( buffer, length, stride, offset ) { + return new ndarray( 'float64', buffer, [ length ], [ stride ], offset, 'row-major' ); +} + + +// TESTS // + +tape( 'main export is a function', function test( t ) { + t.ok( true, __filename ); + t.strictEqual( typeof rffti, 'function', 'main export is a function' ); + t.end(); +}); + +tape( 'the function has an arity of 1', function test( t ) { + t.strictEqual( rffti.length, 1, 'has expected arity' ); + t.end(); +}); + +tape( 'the function correctly initializes twiddle and integer factors in a one-dimensional ndarray `w`', function test( t ) { + var expectedTwiddles; + var expectedFactors; + var wBuf; + var ulps; + var len; + var N; + var w; + var v; + var i; + var y; + var e; + + N = 8; + len = scalar2ndarray( N, { + 'dtype': 'int32' + }); + wBuf = new Float64Array( ( 2*N ) + 34 ); + w = vector( wBuf, ( 2*N ) + 34, 1, 0 ); + v = rffti( [ w, len ] ); + t.strictEqual( v, w, 'returns expected value' ); + + expectedTwiddles = new Float64Array( [ 0.7071067811865476, 0.7071067811865475, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 ] ); + expectedFactors = new Float64Array( [ 8, 2, 2, 4 ] ); + + ulps = 1; + for ( i = 0; i < expectedTwiddles.length; i++ ) { + y = wBuf[ N+i ]; + e = expectedTwiddles[ i ]; + t.strictEqual( isAlmostSameValue( y, e, ulps ), true, 'within ' + ulps + ' ULPs. N: ' + N + '. y: ' + y + '. E: ' + e ); + } + + for ( i = 0; i < expectedFactors.length; i++ ) { + y = wBuf[ ( 2*N ) + i ]; + e = expectedFactors[ i ]; + t.strictEqual( isAlmostSameValue( y, e, ulps ), true, 'within ' + ulps + ' ULPs. N: ' + N + '. y: ' + y + '. E: ' + e ); + } + + for ( i = 0; i < N; i++ ) { + y = wBuf[ i ]; + e = 0.0; + t.strictEqual( y, e, 'returns expected value' ); + } + + t.end(); +}); + +tape( 'if provided an empty ndarray, the function returns the input ndarray unchanged', function test( t ) { + var expected; + var wBuf; + var len; + var w; + var N; + var v; + + N = 4; + wBuf = new Float64Array( [] ); + w = vector( wBuf, 0, 1, 0 ); + len = scalar2ndarray( N, { + 'dtype': 'int32' + }); + + v = rffti( [ w, len ] ); + + expected = new Float64Array( [] ); + t.strictEqual( v, w, 'returns expected value' ); + t.strictEqual( isSameFloat64Array( getData( v ), expected ), true, 'returns expected value' ); + + t.end(); +}); + +tape( 'the function supports a one-dimensional ndarray having a non-unit stride', function test( t ) { + var expectedTwiddles; + var expectedFactors; + var wBuf; + var ulps; + var len; + var w; + var y; + var e; + var i; + var N; + var v; + + N = 8; + wBuf = new Float64Array( ( 4*N ) + 68 ); + w = vector( wBuf, ( 2*N ) + 34, 2, 0 ); + len = scalar2ndarray( N, { + 'dtype': 'int32' + }); + + v = rffti( [ w, len ] ); + + expectedTwiddles = new Float64Array( [ 0.7071067811865476, 0.7071067811865475, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 ] ); + expectedFactors = new Float64Array( [ 8, 2, 2, 4 ] ); + + t.strictEqual( v, w, 'returns expected value' ); + + ulps = 1; + for ( i = 0; i < expectedTwiddles.length; i++ ) { + y = wBuf[ ( 2*N ) + ( 2*i ) ]; + e = expectedTwiddles[ i ]; + t.strictEqual( isAlmostSameValue( y, e, ulps ), true, 'within ' + ulps + ' ULPs. N: ' + N + '. y: ' + y + '. E: ' + e ); + } + + for ( i = 0; i < expectedFactors.length; i++ ) { + y = wBuf[ ( 4*N ) + ( 2*i ) ]; + e = expectedFactors[ i ]; + t.strictEqual( isAlmostSameValue( y, e, ulps ), true, 'within ' + ulps + ' ULPs. N: ' + N + '. y: ' + y + '. E: ' + e ); + } + + for ( i = 0; i < N; i++ ) { + y = wBuf[ 2*i ]; + e = 0.0; + t.strictEqual( y, e, 'returns expected value' ); + + y = wBuf[ ( 2*N ) + ( 2*i ) + 1 ]; + t.strictEqual( y, e, 'returns expected value' ); + } + + t.end(); +}); + +tape( 'the function supports a one-dimensional ndarray having a negative stride', function test( t ) { + var expectedTwiddles; + var expectedFactors; + var wBuf; + var ulps; + var len; + var w; + var v; + var y; + var e; + var i; + var N; + + N = 8; + wBuf = new Float64Array( ( 2*N ) + 34 ); + w = vector( wBuf, ( 2*N ) + 34, -1, ( 2*N ) + 33 ); + len = scalar2ndarray( N, { + 'dtype': 'int32' + }); + + v = rffti( [ w, len ] ); + t.strictEqual( v, w, 'returns expected value' ); + + expectedTwiddles = new Float64Array( [ 0.7071067811865476, 0.7071067811865475, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 ] ); + expectedFactors = new Float64Array( [ 8, 2, 2, 4 ] ); + + ulps = 1; + for ( i = 0; i < expectedTwiddles.length; i++ ) { + y = wBuf[ N+33-i ]; + e = expectedTwiddles[ i ]; + t.strictEqual( isAlmostSameValue( y, e, ulps ), true, 'within ' + ulps + ' ULPs. N: ' + N + '. y: ' + y + '. E: ' + e ); + } + + for ( i = 0; i < expectedFactors.length; i++ ) { + y = wBuf[ 33-i ]; + e = expectedFactors[ i ]; + t.strictEqual( isAlmostSameValue( y, e, ulps ), true, 'within ' + ulps + ' ULPs. N: ' + N + '. y: ' + y + '. E: ' + e ); + } + + for ( i = 0; i < N; i++ ) { + y = wBuf[ ( 2*N ) + 33 - i ]; + e = 0.0; + t.strictEqual( y, e, 'returns expected value' ); + } + + t.end(); +}); + +tape( 'the function supports a one-dimensional ndarray having a non-zero offset', function test( t ) { + var expectedTwiddles; + var expectedFactors; + var wBuf; + var ulps; + var len; + var w; + var v; + var y; + var e; + var i; + var N; + + N = 8; + wBuf = new Float64Array( ( 2*N ) + 34 + 2 ); + w = vector( wBuf, ( 2*N ) + 34, 1, 2 ); + len = scalar2ndarray( N, { + 'dtype': 'int32' + }); + + v = rffti( [ w, len ] ); + + t.strictEqual( v, w, 'returns expected value' ); + + expectedTwiddles = new Float64Array( [ 0.7071067811865476, 0.7071067811865475, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 ] ); + expectedFactors = new Float64Array( [ 8, 2, 2, 4 ] ); + + ulps = 1; + for ( i = 0; i < expectedTwiddles.length; i++ ) { + y = wBuf[ N+i+2 ]; + e = expectedTwiddles[ i ]; + t.strictEqual( isAlmostSameValue( y, e, ulps ), true, 'within ' + ulps + ' ULPs. N: ' + N + '. y: ' + y + '. E: ' + e ); + } + + for ( i = 0; i < expectedFactors.length; i++ ) { + y = wBuf[ ( 2*N ) + i + 2 ]; + e = expectedFactors[ i ]; + t.strictEqual( isAlmostSameValue( y, e, ulps ), true, 'within ' + ulps + ' ULPs. N: ' + N + '. y: ' + y + '. E: ' + e ); + } + + for ( i = 0; i < N; i++ ) { + y = wBuf[ i+2 ]; + e = 0.0; + t.strictEqual( y, e, 'returns expected value' ); + } + + t.end(); +}); From 52e6ea0ed1e048f6a94632952218b2f847037b98 Mon Sep 17 00:00:00 2001 From: Gunj Joshi Date: Tue, 18 Aug 2026 13:45:34 +0530 Subject: [PATCH 32/32] remove: remove `fft/base/fftpack/ndarray/rffti` This commit removes `@stdlib/fft/base/fftpack/ndarray/rffti` in favor of `@stdlib/fft/base/fftpack/ndarray/generic/rffti`. BREAKING CHANGE: remove `fft/base/fftpack/ndarray/rffti` To migrate, users should update their require/import paths to use `@stdlib/fft/base/fftpack/ndarray/generic/rffti` which provides the same API and implementation. Ref: https://github.com/stdlib-js/metr-issue-tracker/issues/1165 --- type: pre_commit_static_analysis_report description: Results of running static analysis checks when committing changes. report: - task: lint_filenames status: passed - task: lint_editorconfig status: passed - task: lint_markdown_pkg_readmes status: na - task: lint_markdown_docs status: na - task: lint_markdown status: na - task: lint_package_json status: na - task: lint_repl_help status: na - task: lint_javascript_src status: na - task: lint_javascript_cli status: na - task: lint_javascript_examples status: na - task: lint_javascript_tests status: na - task: lint_javascript_benchmarks status: na - task: lint_python status: na - task: lint_r status: na - task: lint_c_src status: na - task: lint_c_examples status: na - task: lint_c_benchmarks status: na - task: lint_c_tests_fixtures status: na - task: lint_shell status: na - task: lint_typescript_declarations status: passed - task: lint_typescript_tests status: na - task: lint_license_headers status: passed --- --- .../fft/base/fftpack/ndarray/rffti/README.md | 133 -------- .../ndarray/rffti/benchmark/benchmark.js | 118 -------- .../base/fftpack/ndarray/rffti/docs/repl.txt | 42 --- .../ndarray/rffti/docs/types/index.d.ts | 73 ----- .../fftpack/ndarray/rffti/docs/types/test.ts | 63 ---- .../fftpack/ndarray/rffti/examples/index.js | 36 --- .../base/fftpack/ndarray/rffti/lib/index.js | 60 ---- .../base/fftpack/ndarray/rffti/lib/main.js | 83 ----- .../base/fftpack/ndarray/rffti/package.json | 65 ---- .../base/fftpack/ndarray/rffti/test/test.js | 283 ------------------ 10 files changed, 956 deletions(-) delete mode 100644 lib/node_modules/@stdlib/fft/base/fftpack/ndarray/rffti/README.md delete mode 100644 lib/node_modules/@stdlib/fft/base/fftpack/ndarray/rffti/benchmark/benchmark.js delete mode 100644 lib/node_modules/@stdlib/fft/base/fftpack/ndarray/rffti/docs/repl.txt delete mode 100644 lib/node_modules/@stdlib/fft/base/fftpack/ndarray/rffti/docs/types/index.d.ts delete mode 100644 lib/node_modules/@stdlib/fft/base/fftpack/ndarray/rffti/docs/types/test.ts delete mode 100644 lib/node_modules/@stdlib/fft/base/fftpack/ndarray/rffti/examples/index.js delete mode 100644 lib/node_modules/@stdlib/fft/base/fftpack/ndarray/rffti/lib/index.js delete mode 100644 lib/node_modules/@stdlib/fft/base/fftpack/ndarray/rffti/lib/main.js delete mode 100644 lib/node_modules/@stdlib/fft/base/fftpack/ndarray/rffti/package.json delete mode 100644 lib/node_modules/@stdlib/fft/base/fftpack/ndarray/rffti/test/test.js diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/ndarray/rffti/README.md b/lib/node_modules/@stdlib/fft/base/fftpack/ndarray/rffti/README.md deleted file mode 100644 index d2f444887392..000000000000 --- a/lib/node_modules/@stdlib/fft/base/fftpack/ndarray/rffti/README.md +++ /dev/null @@ -1,133 +0,0 @@ - - -# rffti - -> Initialize a workspace array for performing a real-valued Fourier transform on a one-dimensional ndarray. - -
- -
- - - -
- -## Usage - -```javascript -var rffti = require( '@stdlib/fft/base/fftpack/ndarray/rffti' ); -``` - -#### rffti( arrays ) - -Initializes a workspace array for performing a real-valued Fourier transform on a one-dimensional ndarray. - -```javascript -var Float64Vector = require( '@stdlib/ndarray/vector/float64' ); -var scalar2ndarray = require( '@stdlib/ndarray/from-scalar' ); -var Slice = require( '@stdlib/slice/ctor' ); -var slice = require( '@stdlib/ndarray/slice' ); - -var N = 8; -var len = scalar2ndarray( N, { - 'dtype': 'int32' -}); - -var w = new Float64Vector( ( 2*N ) + 34 ); - -var out = rffti( [ w, len ] ); -// returns - -var bool = ( out === w ); -// returns true - -var twiddleFactors = slice( w, new Slice( N, 2*N ) ); -// returns [ ~0.707, ~0.707, 0, 0, 0, 0, 0, 0 ] - -var factors = slice( w, new Slice( 2*N, ( 2*N ) + 4 ) ); -// returns [ 8, 2, 2, 4 ] -``` - -The function has the following parameters: - -- **arrays**: array-like object containing the following ndarrays: - - - a one-dimensional input ndarray. - - a zero-dimensional ndarray containing the length of the sequence to transform. - -
- - - -
- -## Notes - -- If provided an empty one-dimensional input ndarray, the function returns the input ndarray unchanged. - -
- - - -
- -## Examples - - - -```javascript -var Float64Vector = require( '@stdlib/ndarray/vector/float64' ); -var scalar2ndarray = require( '@stdlib/ndarray/from-scalar' ); -var ndarray2array = require( '@stdlib/ndarray/to-array' ); -var rffti = require( '@stdlib/fft/base/fftpack/ndarray/rffti' ); - -var N = 8; - -var w = new Float64Vector( ( 2*N ) + 34 ); -console.log( ndarray2array( w ) ); - -var len = scalar2ndarray( N, { - 'dtype': 'int32' -}); - -var out = rffti( [ w, len ] ); -console.log( ndarray2array( out ) ); -``` - -
- - - - - - - - - - - - - - diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/ndarray/rffti/benchmark/benchmark.js b/lib/node_modules/@stdlib/fft/base/fftpack/ndarray/rffti/benchmark/benchmark.js deleted file mode 100644 index 52a4b3898e67..000000000000 --- a/lib/node_modules/@stdlib/fft/base/fftpack/ndarray/rffti/benchmark/benchmark.js +++ /dev/null @@ -1,118 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2026 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var bench = require( '@stdlib/bench' ); -var zeros = require( '@stdlib/ndarray/zeros' ); -var isnan = require( '@stdlib/math/base/assert/is-nan' ); -var scalar2ndarray = require( '@stdlib/ndarray/from-scalar' ); -var format = require( '@stdlib/string/format' ); -var pkg = require( './../package.json' ).name; -var rffti = require( './../lib' ); - - -// VARIABLES // - -var options = { - 'dtype': 'generic' -}; -var nopts = { - 'dtype': 'int32' -}; - - -// FUNCTIONS // - -/** -* Creates a benchmark function. -* -* @private -* @param {PositiveInteger} N - sequence length -* @returns {Function} benchmark function -*/ -function createBenchmark( N ) { - var len; - var w; - - len = scalar2ndarray( N, nopts ); - w = zeros( [ ( 2*N ) + 34 ], options ); - - return benchmark; - - /** - * Benchmark function. - * - * @private - * @param {Benchmark} b - benchmark instance - */ - function benchmark( b ) { - var v; - var i; - - b.tic(); - for ( i = 0; i < b.iterations; i++ ) { - v = rffti( [ w, len ] ); - if ( typeof v !== 'object' ) { - b.fail( 'should return an ndarray' ); - } - } - b.toc(); - if ( isnan( v.get( N ) ) ) { - b.fail( 'should not return NaN' ); - } - b.pass( 'benchmark finished' ); - b.end(); - } -} - - -// MAIN // - -/** -* Main execution sequence. -* -* @private -*/ -function main() { - var lengths; - var N; - var f; - var i; - - lengths = [ - 8, - 16, - 32, - 64, - 128, - 256, - 512, - 1024 - ]; - - for ( i = 0; i < lengths.length; i++ ) { - N = lengths[ i ]; - f = createBenchmark( N ); - bench( format( '%s:N=%d', pkg, N ), f ); - } -} - -main(); diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/ndarray/rffti/docs/repl.txt b/lib/node_modules/@stdlib/fft/base/fftpack/ndarray/rffti/docs/repl.txt deleted file mode 100644 index 724c9340bfe3..000000000000 --- a/lib/node_modules/@stdlib/fft/base/fftpack/ndarray/rffti/docs/repl.txt +++ /dev/null @@ -1,42 +0,0 @@ - -{{alias}}( arrays ) - Initializes a workspace array for performing a real-valued Fourier transform - on a one-dimensional ndarray. - - If provided an empty input ndarray, the function returns the input ndarray - unchanged. - - Parameters - ---------- - arrays: ArrayLikeObject - Array-like object containing the following ndarrays: - - - a one-dimensional input ndarray. - - a zero-dimensional ndarray containing the length of the sequence to - transform. - - Returns - ------- - out: ndarray - Input ndarray. - - Examples - -------- - > var N = 8; - > var w = new {{alias:@stdlib/ndarray/vector/float64}}( ( 2*N ) + 34 ); - > var opts = { 'dtype': 'int32' }; - > var len = {{alias:@stdlib/ndarray/from-scalar}}( N, opts ); - > var out = {{alias}}( [ w, len ] ) - - > var bool = ( out === w ) - true - > var s = new {{alias:@stdlib/slice/ctor}}( N, 2*N ); - > var twiddleFactors = {{alias:@stdlib/ndarray/slice}}( w, s ) - [ ~0.707, ~0.707, 0, 0, 0, 0, 0, 0 ] - > s = new {{alias:@stdlib/slice/ctor}}( 2*N, ( 2*N ) + 4 ); - > var factors = {{alias:@stdlib/ndarray/slice}}( w, s ) - [ 8, 2, 2, 4 ] - - See Also - -------- - diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/ndarray/rffti/docs/types/index.d.ts b/lib/node_modules/@stdlib/fft/base/fftpack/ndarray/rffti/docs/types/index.d.ts deleted file mode 100644 index 56989f0ecde8..000000000000 --- a/lib/node_modules/@stdlib/fft/base/fftpack/ndarray/rffti/docs/types/index.d.ts +++ /dev/null @@ -1,73 +0,0 @@ -/* -* @license Apache-2.0 -* -* Copyright (c) 2026 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -// TypeScript Version: 4.1 - -/// - -import { typedndarray, floatndarray, genericndarray } from '@stdlib/types/ndarray'; - -/** -* Input array. -*/ -type InputArray = floatndarray | genericndarray; - -/** -* Initializes a workspace array for performing a real-valued Fourier transform on a one-dimensional ndarray. -* -* ## Notes -* -* - The function expects the following ndarrays: -* -* - a one-dimensional input ndarray. -* - a zero-dimensional ndarray containing the length of the sequence to transform. -* -* @param arrays - array-like object containing ndarrays -* @returns input ndarray -* -* @example -* var Float64Vector = require( '@stdlib/ndarray/vector/float64' ); -* var scalar2ndarray = require( '@stdlib/ndarray/from-scalar' ); -* var Slice = require( '@stdlib/slice/ctor' ); -* var slice = require( '@stdlib/ndarray/slice' ); -* -* var N = 8; -* var len = scalar2ndarray( N, { -* 'dtype': 'int32' -* }); -* -* var w = new Float64Vector( ( 2*N ) + 34 ); -* -* var out = rffti( [ w, len ] ); -* // returns -* -* var bool = ( out === w ); -* // returns true -* -* var twiddleFactors = slice( w, new Slice( N, 2*N ) ); -* // returns [ ~0.707, ~0.707, 0, 0, 0, 0, 0, 0 ] -* -* var factors = slice( w, new Slice( 2*N, ( 2*N ) + 4 ) ); -* // returns [ 8, 2, 2, 4 ] -*/ -declare function rffti( arrays: [ T, typedndarray ] ): T; - - -// EXPORTS // - -export = rffti; diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/ndarray/rffti/docs/types/test.ts b/lib/node_modules/@stdlib/fft/base/fftpack/ndarray/rffti/docs/types/test.ts deleted file mode 100644 index 97187a6bf704..000000000000 --- a/lib/node_modules/@stdlib/fft/base/fftpack/ndarray/rffti/docs/types/test.ts +++ /dev/null @@ -1,63 +0,0 @@ -/* -* @license Apache-2.0 -* -* Copyright (c) 2026 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable space-in-parens */ - -import zeros = require( '@stdlib/ndarray/zeros' ); -import rffti = require( './index' ); - - -// TESTS // - -// The function returns an ndarray... -{ - const w = zeros( [ 10 ], { - 'dtype': 'float64' - }); - const N = zeros( [], { - 'dtype': 'int32' - }); - - rffti( [ w, N ] ); // $ExpectType float64ndarray -} - -// The compiler throws an error if the function is provided a first argument which is not an array of ndarrays... -{ - rffti( '10' ); // $ExpectError - rffti( 10 ); // $ExpectError - rffti( true ); // $ExpectError - rffti( false ); // $ExpectError - rffti( null ); // $ExpectError - rffti( undefined ); // $ExpectError - rffti( [] ); // $ExpectError - rffti( {} ); // $ExpectError - rffti( ( x: number ): number => x ); // $ExpectError -} - -// The compiler throws an error if the function is provided an unsupported number of arguments... -{ - const w = zeros( [ 10 ], { - 'dtype': 'float64' - }); - const N = zeros( [], { - 'dtype': 'int32' - }); - - rffti(); // $ExpectError - rffti( [ w, N ], {} ); // $ExpectError -} diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/ndarray/rffti/examples/index.js b/lib/node_modules/@stdlib/fft/base/fftpack/ndarray/rffti/examples/index.js deleted file mode 100644 index 4b802e6c1c12..000000000000 --- a/lib/node_modules/@stdlib/fft/base/fftpack/ndarray/rffti/examples/index.js +++ /dev/null @@ -1,36 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2026 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -var Float64Vector = require( '@stdlib/ndarray/vector/float64' ); -var scalar2ndarray = require( '@stdlib/ndarray/from-scalar' ); -var ndarray2array = require( '@stdlib/ndarray/to-array' ); -var rffti = require( './../lib' ); - -var N = 8; - -var w = new Float64Vector( ( 2*N ) + 34 ); -console.log( ndarray2array( w ) ); - -var len = scalar2ndarray( N, { - 'dtype': 'int32' -}); - -var out = rffti( [ w, len ] ); -console.log( ndarray2array( out ) ); diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/ndarray/rffti/lib/index.js b/lib/node_modules/@stdlib/fft/base/fftpack/ndarray/rffti/lib/index.js deleted file mode 100644 index d6b1fe501bc0..000000000000 --- a/lib/node_modules/@stdlib/fft/base/fftpack/ndarray/rffti/lib/index.js +++ /dev/null @@ -1,60 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2026 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -/** -* Initialize a workspace array for performing a real-valued Fourier transform on a one-dimensional ndarray. -* -* @module @stdlib/fft/base/fftpack/ndarray/rffti -* -* @example -* var Float64Vector = require( '@stdlib/ndarray/vector/float64' ); -* var scalar2ndarray = require( '@stdlib/ndarray/from-scalar' ); -* var Slice = require( '@stdlib/slice/ctor' ); -* var slice = require( '@stdlib/ndarray/slice' ); -* var rffti = require( '@stdlib/fft/base/fftpack/ndarray/rffti' ); -* -* var N = 8; -* var len = scalar2ndarray( N, { -* 'dtype': 'int32' -* }); -* -* var w = new Float64Vector( ( 2*N ) + 34 ); -* -* var out = rffti( [ w, len ] ); -* // returns -* -* var bool = ( out === w ); -* // returns true -* -* var twiddleFactors = slice( w, new Slice( N, 2*N ) ); -* // returns [ ~0.707, ~0.707, 0, 0, 0, 0, 0, 0 ] -* -* var factors = slice( w, new Slice( 2*N, ( 2*N ) + 4 ) ); -* // returns [ 8, 2, 2, 4 ] -*/ - -// MODULES // - -var main = require( './main.js' ); - - -// EXPORTS // - -module.exports = main; diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/ndarray/rffti/lib/main.js b/lib/node_modules/@stdlib/fft/base/fftpack/ndarray/rffti/lib/main.js deleted file mode 100644 index 3826d518e4b3..000000000000 --- a/lib/node_modules/@stdlib/fft/base/fftpack/ndarray/rffti/lib/main.js +++ /dev/null @@ -1,83 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2026 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -'use strict'; - -// MODULES // - -var getStride = require( '@stdlib/ndarray/base/stride' ); -var getOffset = require( '@stdlib/ndarray/base/offset' ); -var getData = require( '@stdlib/ndarray/base/data-buffer' ); -var strided = require( '@stdlib/fft/base/fftpack/generic/rffti' ); -var ndarraylike2scalar = require( '@stdlib/ndarray/base/ndarraylike2scalar' ); - - -// MAIN // - -/** -* Initializes a workspace array for performing a real-valued Fourier transform on a one-dimensional ndarray. -* -* ## Notes -* -* - The function expects the following ndarrays: -* -* - a one-dimensional input ndarray. -* - a zero-dimensional ndarray containing the length of the sequence to transform. -* -* @param {ArrayLikeObject} arrays - array-like object containing ndarrays -* @returns {ndarrayLike} input ndarray -* -* @example -* var Float64Vector = require( '@stdlib/ndarray/vector/float64' ); -* var scalar2ndarray = require( '@stdlib/ndarray/from-scalar' ); -* var Slice = require( '@stdlib/slice/ctor' ); -* var slice = require( '@stdlib/ndarray/slice' ); -* -* var N = 8; -* var len = scalar2ndarray( N, { -* 'dtype': 'int32' -* }); -* -* var w = new Float64Vector( ( 2*N ) + 34 ); -* -* var out = rffti( [ w, len ] ); -* // returns -* -* var bool = ( out === w ); -* // returns true -* -* var twiddleFactors = slice( w, new Slice( N, 2*N ) ); -* // returns [ ~0.707, ~0.707, 0, 0, 0, 0, 0, 0 ] -* -* var factors = slice( w, new Slice( 2*N, ( 2*N ) + 4 ) ); -* // returns [ 8, 2, 2, 4 ] -*/ -function rffti( arrays ) { - var w; - var N; - - w = arrays[ 0 ]; - N = ndarraylike2scalar( arrays[ 1 ] ); - strided( N, getData( w ), getStride( w, 0 ), getOffset( w ) ); - return w; -} - - -// EXPORTS // - -module.exports = rffti; diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/ndarray/rffti/package.json b/lib/node_modules/@stdlib/fft/base/fftpack/ndarray/rffti/package.json deleted file mode 100644 index 4a473186e063..000000000000 --- a/lib/node_modules/@stdlib/fft/base/fftpack/ndarray/rffti/package.json +++ /dev/null @@ -1,65 +0,0 @@ -{ - "name": "@stdlib/fft/base/fftpack/ndarray/rffti", - "version": "0.0.0", - "description": "Initialize a workspace array for performing a real-valued Fourier transform on a one-dimensional ndarray.", - "license": "Apache-2.0", - "author": { - "name": "The Stdlib Authors", - "url": "https://github.com/stdlib-js/stdlib/graphs/contributors" - }, - "contributors": [ - { - "name": "The Stdlib Authors", - "url": "https://github.com/stdlib-js/stdlib/graphs/contributors" - } - ], - "main": "./lib", - "directories": { - "benchmark": "./benchmark", - "doc": "./docs", - "example": "./examples", - "lib": "./lib", - "test": "./test" - }, - "types": "./docs/types", - "scripts": {}, - "homepage": "https://github.com/stdlib-js/stdlib", - "repository": { - "type": "git", - "url": "git://github.com/stdlib-js/stdlib.git" - }, - "bugs": { - "url": "https://github.com/stdlib-js/stdlib/issues" - }, - "dependencies": {}, - "devDependencies": {}, - "engines": { - "node": ">=0.10.0", - "npm": ">2.7.0" - }, - "os": [ - "aix", - "darwin", - "freebsd", - "linux", - "macos", - "openbsd", - "sunos", - "win32", - "windows" - ], - "keywords": [ - "stdlib", - "fft", - "fftpack", - "rffti", - "fourier", - "transform", - "twiddle", - "workspace", - "initialization", - "real", - "ndarray" - ], - "__stdlib__": {} -} diff --git a/lib/node_modules/@stdlib/fft/base/fftpack/ndarray/rffti/test/test.js b/lib/node_modules/@stdlib/fft/base/fftpack/ndarray/rffti/test/test.js deleted file mode 100644 index 0c9598113622..000000000000 --- a/lib/node_modules/@stdlib/fft/base/fftpack/ndarray/rffti/test/test.js +++ /dev/null @@ -1,283 +0,0 @@ -/** -* @license Apache-2.0 -* -* Copyright (c) 2026 The Stdlib Authors. -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ - -/* eslint-disable max-len */ - -'use strict'; - -// MODULES // - -var tape = require( 'tape' ); -var isSameFloat64Array = require( '@stdlib/assert/is-same-float64array' ); -var isAlmostSameValue = require( '@stdlib/assert/is-almost-same-value' ); -var Float64Array = require( '@stdlib/array/float64' ); -var scalar2ndarray = require( '@stdlib/ndarray/from-scalar' ); -var ndarray = require( '@stdlib/ndarray/base/ctor' ); -var getData = require( '@stdlib/ndarray/data-buffer' ); -var rffti = require( './../lib' ); - - -// FUNCTIONS // - -/** -* Returns a one-dimensional ndarray. -* -* @private -* @param {Collection} buffer - underlying data buffer -* @param {NonNegativeInteger} length - number of indexed elements -* @param {integer} stride - stride length -* @param {NonNegativeInteger} offset - index offset -* @returns {ndarray} one-dimensional ndarray -*/ -function vector( buffer, length, stride, offset ) { - return new ndarray( 'float64', buffer, [ length ], [ stride ], offset, 'row-major' ); -} - - -// TESTS // - -tape( 'main export is a function', function test( t ) { - t.ok( true, __filename ); - t.strictEqual( typeof rffti, 'function', 'main export is a function' ); - t.end(); -}); - -tape( 'the function has an arity of 1', function test( t ) { - t.strictEqual( rffti.length, 1, 'has expected arity' ); - t.end(); -}); - -tape( 'the function correctly initializes twiddle and integer factors in a one-dimensional ndarray `w`', function test( t ) { - var expectedTwiddles; - var expectedFactors; - var wBuf; - var ulps; - var len; - var N; - var w; - var v; - var i; - var y; - var e; - - N = 8; - len = scalar2ndarray( N, { - 'dtype': 'int32' - }); - wBuf = new Float64Array( ( 2*N ) + 34 ); - w = vector( wBuf, ( 2*N ) + 34, 1, 0 ); - v = rffti( [ w, len ] ); - t.strictEqual( v, w, 'returns expected value' ); - - expectedTwiddles = new Float64Array( [ 0.7071067811865476, 0.7071067811865475, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 ] ); - expectedFactors = new Float64Array( [ 8, 2, 2, 4 ] ); - - ulps = 1; - for ( i = 0; i < expectedTwiddles.length; i++ ) { - y = wBuf[ N+i ]; - e = expectedTwiddles[ i ]; - t.strictEqual( isAlmostSameValue( y, e, ulps ), true, 'within ' + ulps + ' ULPs. N: ' + N + '. y: ' + y + '. E: ' + e ); - } - - for ( i = 0; i < expectedFactors.length; i++ ) { - y = wBuf[ ( 2*N ) + i ]; - e = expectedFactors[ i ]; - t.strictEqual( isAlmostSameValue( y, e, ulps ), true, 'within ' + ulps + ' ULPs. N: ' + N + '. y: ' + y + '. E: ' + e ); - } - - for ( i = 0; i < N; i++ ) { - y = wBuf[ i ]; - e = 0.0; - t.strictEqual( y, e, 'returns expected value' ); - } - - t.end(); -}); - -tape( 'if provided an empty ndarray, the function returns the input ndarray unchanged', function test( t ) { - var expected; - var wBuf; - var len; - var w; - var N; - var v; - - N = 4; - wBuf = new Float64Array( [] ); - w = vector( wBuf, 0, 1, 0 ); - len = scalar2ndarray( N, { - 'dtype': 'int32' - }); - - v = rffti( [ w, len ] ); - - expected = new Float64Array( [] ); - t.strictEqual( v, w, 'returns expected value' ); - t.strictEqual( isSameFloat64Array( getData( v ), expected ), true, 'returns expected value' ); - - t.end(); -}); - -tape( 'the function supports a one-dimensional ndarray having a non-unit stride', function test( t ) { - var expectedTwiddles; - var expectedFactors; - var wBuf; - var ulps; - var len; - var w; - var y; - var e; - var i; - var N; - var v; - - N = 8; - wBuf = new Float64Array( ( 4*N ) + 68 ); - w = vector( wBuf, ( 2*N ) + 34, 2, 0 ); - len = scalar2ndarray( N, { - 'dtype': 'int32' - }); - - v = rffti( [ w, len ] ); - - expectedTwiddles = new Float64Array( [ 0.7071067811865476, 0.7071067811865475, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 ] ); - expectedFactors = new Float64Array( [ 8, 2, 2, 4 ] ); - - t.strictEqual( v, w, 'returns expected value' ); - - ulps = 1; - for ( i = 0; i < expectedTwiddles.length; i++ ) { - y = wBuf[ ( 2*N ) + ( 2*i ) ]; - e = expectedTwiddles[ i ]; - t.strictEqual( isAlmostSameValue( y, e, ulps ), true, 'within ' + ulps + ' ULPs. N: ' + N + '. y: ' + y + '. E: ' + e ); - } - - for ( i = 0; i < expectedFactors.length; i++ ) { - y = wBuf[ ( 4*N ) + ( 2*i ) ]; - e = expectedFactors[ i ]; - t.strictEqual( isAlmostSameValue( y, e, ulps ), true, 'within ' + ulps + ' ULPs. N: ' + N + '. y: ' + y + '. E: ' + e ); - } - - for ( i = 0; i < N; i++ ) { - y = wBuf[ 2*i ]; - e = 0.0; - t.strictEqual( y, e, 'returns expected value' ); - - y = wBuf[ ( 2*N ) + ( 2*i ) + 1 ]; - t.strictEqual( y, e, 'returns expected value' ); - } - - t.end(); -}); - -tape( 'the function supports a one-dimensional ndarray having a negative stride', function test( t ) { - var expectedTwiddles; - var expectedFactors; - var wBuf; - var ulps; - var len; - var w; - var v; - var y; - var e; - var i; - var N; - - N = 8; - wBuf = new Float64Array( ( 2*N ) + 34 ); - w = vector( wBuf, ( 2*N ) + 34, -1, ( 2*N ) + 33 ); - len = scalar2ndarray( N, { - 'dtype': 'int32' - }); - - v = rffti( [ w, len ] ); - t.strictEqual( v, w, 'returns expected value' ); - - expectedTwiddles = new Float64Array( [ 0.7071067811865476, 0.7071067811865475, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 ] ); - expectedFactors = new Float64Array( [ 8, 2, 2, 4 ] ); - - ulps = 1; - for ( i = 0; i < expectedTwiddles.length; i++ ) { - y = wBuf[ N+33-i ]; - e = expectedTwiddles[ i ]; - t.strictEqual( isAlmostSameValue( y, e, ulps ), true, 'within ' + ulps + ' ULPs. N: ' + N + '. y: ' + y + '. E: ' + e ); - } - - for ( i = 0; i < expectedFactors.length; i++ ) { - y = wBuf[ 33-i ]; - e = expectedFactors[ i ]; - t.strictEqual( isAlmostSameValue( y, e, ulps ), true, 'within ' + ulps + ' ULPs. N: ' + N + '. y: ' + y + '. E: ' + e ); - } - - for ( i = 0; i < N; i++ ) { - y = wBuf[ ( 2*N ) + 33 - i ]; - e = 0.0; - t.strictEqual( y, e, 'returns expected value' ); - } - - t.end(); -}); - -tape( 'the function supports a one-dimensional ndarray having a non-zero offset', function test( t ) { - var expectedTwiddles; - var expectedFactors; - var wBuf; - var ulps; - var len; - var w; - var v; - var y; - var e; - var i; - var N; - - N = 8; - wBuf = new Float64Array( ( 2*N ) + 34 + 2 ); - w = vector( wBuf, ( 2*N ) + 34, 1, 2 ); - len = scalar2ndarray( N, { - 'dtype': 'int32' - }); - - v = rffti( [ w, len ] ); - - t.strictEqual( v, w, 'returns expected value' ); - - expectedTwiddles = new Float64Array( [ 0.7071067811865476, 0.7071067811865475, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 ] ); - expectedFactors = new Float64Array( [ 8, 2, 2, 4 ] ); - - ulps = 1; - for ( i = 0; i < expectedTwiddles.length; i++ ) { - y = wBuf[ N+i+2 ]; - e = expectedTwiddles[ i ]; - t.strictEqual( isAlmostSameValue( y, e, ulps ), true, 'within ' + ulps + ' ULPs. N: ' + N + '. y: ' + y + '. E: ' + e ); - } - - for ( i = 0; i < expectedFactors.length; i++ ) { - y = wBuf[ ( 2*N ) + i + 2 ]; - e = expectedFactors[ i ]; - t.strictEqual( isAlmostSameValue( y, e, ulps ), true, 'within ' + ulps + ' ULPs. N: ' + N + '. y: ' + y + '. E: ' + e ); - } - - for ( i = 0; i < N; i++ ) { - y = wBuf[ i+2 ]; - e = 0.0; - t.strictEqual( y, e, 'returns expected value' ); - } - - t.end(); -});